From e30bf46129244eef42359ec60a4840db35c78ca6 Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Tue, 4 May 2021 12:22:38 -0500 Subject: [PATCH 01/39] docs: Udpated extending-with-code doc (#1073) * Updated extending with code doc * Minor changes to extending with code * More minor tweaks to extending with code * Fixed most markdown warnings in extending with code * Added comments to the code for extending with code doc --- docs/assets/MultiplyDialog.cs | 81 +++++++++++ docs/assets/MultiplyDialog.csproj | 27 ++++ docs/assets/MultiplyDialog.schema | 25 ++++ docs/assets/MultiplyDialogBotComponent.cs | 33 +++++ docs/extending-with-code.md | 158 ++++++++++++++++++++-- 5 files changed, 313 insertions(+), 11 deletions(-) create mode 100644 docs/assets/MultiplyDialog.cs create mode 100644 docs/assets/MultiplyDialog.csproj create mode 100644 docs/assets/MultiplyDialog.schema create mode 100644 docs/assets/MultiplyDialogBotComponent.cs diff --git a/docs/assets/MultiplyDialog.cs b/docs/assets/MultiplyDialog.cs new file mode 100644 index 0000000000..3b3b46177c --- /dev/null +++ b/docs/assets/MultiplyDialog.cs @@ -0,0 +1,81 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Runtime.CompilerServices; +using System.Threading; +using System.Threading.Tasks; +using AdaptiveExpressions.Properties; +using Microsoft.Bot.Builder.Dialogs; +using Newtonsoft.Json; + +namespace CustomAction.MultiplyDialog +{ + /// + /// Custom command which takes takes 2 data bound arguments (arg1 and arg2) and multiplies them returning that as a databound result. + /// + public class MultiplyDialog : Dialog + { + [JsonConstructor] + public MultiplyDialog([CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0) + : base() + { + // enable instances of this command as debug break point + this.RegisterSourceLocation(sourceFilePath, sourceLineNumber); + } + + /// + /// Gets the unique name of this Adaptive Dialog. + /// + [JsonProperty("$kind")] + public const string Kind = "MultiplyDialog"; + + /// + /// Gets or sets memory path to bind to arg1 (ex: action.arg1). + /// + /// + /// Memory path to bind to arg1 (ex: action.arg1). + /// + [JsonProperty("arg1")] + public NumberExpression Arg1 { get; set; } + + /// + /// Gets or sets memory path to bind to arg2 (ex: action.arg2). + /// + /// + /// Memory path to bind to arg2 (ex: action.arg2). + /// + [JsonProperty("arg2")] + public NumberExpression Arg2 { get; set; } + + /// + /// Gets or sets caller's memory path to store the result of this step in (ex: dialog.result). + /// + /// + /// Caller's memory path to store the result of this step in (ex: dialog.result). + /// + /// + /// This is where the result of the Dialog is stored and accessible in Composer. + /// + [JsonProperty("resultProperty")] + public StringExpression ResultProperty { get; set; } + + /// + /// Override BeginDialogAsync to provide the custom action functionality. The inputs, in this case, + /// are define in Arg1 and Arg2. The result of the the dialog is stored in ResultProperty. + /// + public override Task BeginDialogAsync(DialogContext dc, object options = null, CancellationToken cancellationToken = default(CancellationToken)) + { + var arg1 = Arg1.GetValue(dc.State); + var arg2 = Arg2.GetValue(dc.State); + + var result = Convert.ToInt32(arg1) * Convert.ToInt32(arg2); + if (this.ResultProperty != null) + { + dc.State.SetValue(this.ResultProperty.GetValue(dc.State), result); + } + + return dc.EndDialogAsync(result: result, cancellationToken: cancellationToken); + } + } +} diff --git a/docs/assets/MultiplyDialog.csproj b/docs/assets/MultiplyDialog.csproj new file mode 100644 index 0000000000..d59836c631 --- /dev/null +++ b/docs/assets/MultiplyDialog.csproj @@ -0,0 +1,27 @@ + + + + Library + netcoreapp3.1 + CustomAction.MultiplyDialog + This library implements .NET support for the MultiplyDialog custom action sample BotComponent. + This library implements .NET support for the MultiplyDialog custom action sample BotComponent. + content + + msbot-component;msbot-action + + + + + + + + + + + + + + + + diff --git a/docs/assets/MultiplyDialog.schema b/docs/assets/MultiplyDialog.schema new file mode 100644 index 0000000000..f2928a25aa --- /dev/null +++ b/docs/assets/MultiplyDialog.schema @@ -0,0 +1,25 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema", + "$role": "implements(Microsoft.IDialog)", + "title": "Multiply", + "description": "This will return the result of arg1*arg2", + "type": "object", + "additionalProperties": false, + "properties": { + "arg1": { + "$ref": "schema:#/definitions/integerExpression", + "title": "Arg1", + "description": "Value from callers memory to use as arg 1" + }, + "arg2": { + "$ref": "schema:#/definitions/integerExpression", + "title": "Arg2", + "description": "Value from callers memory to use as arg 2" + }, + "resultProperty": { + "$ref": "schema:#/definitions/stringExpression", + "title": "Result", + "description": "Value from callers memory to store the result" + } + } +} \ No newline at end of file diff --git a/docs/assets/MultiplyDialogBotComponent.cs b/docs/assets/MultiplyDialogBotComponent.cs new file mode 100644 index 0000000000..2d5903e7dd --- /dev/null +++ b/docs/assets/MultiplyDialogBotComponent.cs @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs.Declarative; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace CustomAction.MultiplyDialog +{ + /// + /// Definition of a that allows registration of + /// services, custom actions, memory scopes and adapters. + /// + /// To make your components available to the system you derive from BotComponent and register services to add functionality. + /// These components then are consumed in appropriate places by the systems that need them. When using Composer, Startup gets called + /// automatically on the components by the bot runtime, as long as the components are registered in the configuration. + public class MultiplyDialogBotComponent : BotComponent + { + /// + /// Entry point for bot components to register types in resource explorer, consume configuration and register services in the + /// services collection. + /// + /// Services collection to register dependency injection. + /// Configuration for the bot component. + public override void ConfigureServices(IServiceCollection services, IConfiguration configuration) + { + // Anything that could be done in Startup.ConfigureServices can be done here. + // In this case, the MultiplyDialog needs to be added as a new DeclarativeType. + services.AddSingleton(sp => new DeclarativeType(MultiplyDialog.Kind)); + } + } +} diff --git a/docs/extending-with-code.md b/docs/extending-with-code.md index 504a45bee7..30672bad5b 100644 --- a/docs/extending-with-code.md +++ b/docs/extending-with-code.md @@ -1,24 +1,160 @@ # Extending your bot with code -> Note: You should be familiar with the existing documentation on [custom actions](https://docs.microsoft.com/en-us/composer/how-to-add-custom-action) and [declarative dialogs](https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-dialogs-declarative?view=azure-bot-service-4.0). This page is supplemental to those existing resources. +# Add custom actions in C# -Extending your bot with code is very similar to the currently published documentation (linked above). It differs from that documentation in the following ways: +## In this article -1. There is no need to eject your runtime & app code, as we do this for you at creation time. -1. The bot project we create for you on disk does not include the sample code as indicated in the documentation, you'll need to create the files from. - 1. You also don't add a reference to another project - just create the .cs and .schema files yourself, directly in your .sln that was created for you. -1. You'll probably need to manually run `dialog:merge` rather than use the PowerShell script. The command is below, execute from in the `/schemas` folder. +In Bot Framework Composer, [actions](concept-dialog#action) are the main +contents of a [trigger](concept-dialog#trigger). Actions help maintain +conversation flow and instruct bots on how to fulfill user requests. +Composer provides different types of actions, such as **Send a +response**, **Ask a question**, and **Create a condition**. Besides +these built-in actions, you can create and customize your own actions in +Composer. -```bash -bf dialog:merge "*.schema" "!**/sdk-backup.schema" "*.uischema" "!**/sdk-backup.uischema" "!**/sdk.override.uischema" "../*.csproj" "../package.json" -o sdk.schema -``` +This article shows you how to include a custom action named +`MultiplyDialog`. -You can also take a look at the [Graph package](/packages/Graph) for another example. +#### Note + +Composer currently supports the C\# runtime and JavaScript (preview) +Adaptive Runtimes. + +## Prerequisites + +- A basic understanding of [actions](concept-dialog#action) in Composer. +- [A basic bot built using Composer](quickstart-create-bot). +- [Bot Framework CLI 4.10](https://botbuilder.myget.org/feed/botframework-cli/package/npm/@microsoft/botframework-cli) or later. + +## Setup the Bot Framework CLI tool +---------------------- + +The Bot Framework CLI tools include the *bf-dialog* tool which will +create a *schema file* that describes the built-in and custom +capabilities of your bot project. It does this by merging partial schema +files included with each component with the root schema provided by Bot +Framework. + +Open a command line and run the following command to install the Bot +Framework tools: + + npm i -g @microsoft/botframework-cli + +## About this custom action +---------------------- + +This C\# custom action consists of the following: + +- A Composer project targeted for Dotnet. This can be any Composer project. One that already exists, or a new one you create. If you want to experiment risk free, create a new Blank Bot in Composer. This document assumes you create a Blank Bot named "MyBlankBot". + +- The custom action code [MultiplyDialog.cs](assets/MultiplyDialog.cs) class, which defines the business logic of the custom action. In this example, two numbers passed as inputs are multiplied, and the result is the output. + +- The custom action schema [MultiplyDialog.schema](assets/MultiplyDialog.schema), which describes the operations available. + + [Bot Framework Schemas](https://github.com/microsoft/botframework-sdk/tree/master/schemas) + are specifications for JSON data. They define the shape of the data + and can be used to validate JSON. All of Bot Framework's [adaptive + dialogs](/en-us/azure/bot-service/bot-builder-adaptive-dialog-introduction) + are defined using this JSON schema. The schema files tell Composer + what capabilities the bot runtime supports. Composer uses the schema + to help it render the user interface when using the action in a + dialog. Read the section about [creating schema files in adaptive + dialogs](/en-us/azure/bot-service/bot-builder-dialogs-declarative) + for more information. + +- A BotComponent, [MultiplyDialogBotComponent.cs](assets/MultiplyDialogBotComponent.cs) code file for component registration. BotComponents are loaded by your bot (specifically by Adaptive Runtime), and made available to Composer. + + **Note** You can create a custom action without implementing BotComponent. However, the Component Model in Bot Framework allows for easier reuse and is only slightly more work. In a BotComponent, you add the needed services and objects via Dependency Injection, just as you would in Startup.cs. + +## Adding the custom action to your bot project +------------------------------ + +1. Navigate to your Composer bot project folder (eg. C:\MyBlankBot) and create a new folder for the custom action project. For example, C:\MyBlankBot\MultiplyDialog. + +1. Save [MultiplyDialog.cs](assets/MultiplyDialog.cs), [MultiplyDialog.schema](assets/MultiplyDialog.schema), [MultiplyDialog.csproj](assets/MultiplyDialog.csproj), and [MultiplyDialogBotComponent.cs](assets/MultiplyDialogBotComponent.cs) to this new folder. + +1. Open your Blank Bot solution (C:\MyBlankBot) in Visual Studio. + +1. Add Existing project to the solution. + +1. In the MyBlankBot project, add a project reference to the MultiplyDialog project. Alternatively, you can add `` to the appropriate `ItemGroup` in MyBlankBot.csproj. + +1. Run the command `dotnet build` on the project to + verify if it passes build after adding custom actions to it. You + should be able to see the "Build succeeded" message after this + command. + +1. Edit MyBlankBot\settings\appsettings.json to include the MultiplyDialogBotComponent in the `runtimeSettings/components` list. + + ```json + "runtimeSettings": { + "components": [ + { + "name": "CustomAction.MultiplyDialog" + } + ] + } + ``` + +## Update the schema file +---------------------- + +Now you have customized your bot, the next step is to update the +`sdk.schema` file to include the `MultiplyDialog.Schema` file. This makes your custom action available for use in Composer. + +**You only need to perform these steps when adding new code extensions, or when the Schema for a component changes.** + +1) Navigate to the `C:\MyBlankBot\MyBlankBot\schemas` folder. This +folder contains a PowerShell script and a bash script. Run either one of +the following commands: + + ./update-schema.ps1 + + **Note** + + The above steps should generate a new `sdk.schema` file inside the + `schemas` folder. + +1) Search for `MultiplyDialog` inside the `MyBlankBot\schemas\sdk.schema` file and + validate that the partial schema for [MultiplyDialog.schema](assets/MultiplyDialog.schema) is included in `sdk.schema`. + +### Tip + +Alternatively, you can select the `update-schema.sh` file inside the +`MyBlankBot\schemas` folder to run the bash script. You can't click and run the +`powershell` file directly. + +## Test +---- + +Open the bot project in Composer and you should be able to test your +added custom action. If the project is already loaded, return to `Home` in Composer, and reload the project. + +1. Open your bot in Composer. Select a trigger you want to associate this custom action with. + +2. Select **+** under the trigger node to see the actions menu. You + will see **Custom Actions** added to the menu. Select **Multiply** + from the menu. + +3. On the **Properties** panel on the right side, enter two numbers in + the argument fields: **Arg1** and **Arg2**. Enter **dialog.result** + in the **Result** property field. For example, enter `99` for each field. + +4. Add a **Send a response** action. Enter `99*99=${dialog.result}` in the Language Generation editor. + +5. Select **Restart Bot** to test the bot in the Emulator. Your bot + will respond with the test result. + +## Additional information +---------------------- + +- [Bot Framework SDK Schemas](https://github.com/microsoft/botframework-sdk/tree/master/schemas) +- [Create schema files](/en-us/azure/bot-service/bot-builder-dialogs-declarative) ## Docs table of contents 1. [Overview](/docs/overview.md) 2. [Extending your bot using packages](/docs/extending-with-packages.md) -3. [Extending your bot with code](/docs/extending-with-code.md) +3. Extending your bot with code (this document) 4. [Creating your own packages](/docs/creating-packages.md) 5. [Creating your own templates](/docs/creating-templates.md) From 366eae3b0f2238382fd982768ea2bb065979b213 Mon Sep 17 00:00:00 2001 From: Peter Innes <53846082+peterinnesmsft@users.noreply.github.com> Date: Tue, 4 May 2021 11:22:28 -0700 Subject: [PATCH 02/39] fix: .NET Functions .csproj template fixes (#1065) * Updating .NET Functions .csproj template to include all *.json files (except in www directory) as content; local.settings.json continues to not be included in publish output; fix www item include to use POSIX-style path separators; add _FunctionsSkipCleanOutput to PropertyGroup. * Updating .NET Functions default content includes and excludes. --- .../app/templates/dotnet/functions/botName.csproj | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj b/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj index 479d6592a4..fdecab2ad2 100644 --- a/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj +++ b/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj @@ -2,9 +2,11 @@ netcoreapp3.1 v3 + <_FunctionsSkipCleanOutput>true - + PreserveNewest @@ -19,17 +21,10 @@ <%- packageReferences %> - - PreserveNewest - - - PreserveNewest + Never - - PreserveNewest - - + PreserveNewest From 89ec8b8dc9acb5af7286745d5010596ce0ea36ad Mon Sep 17 00:00:00 2001 From: Peter Innes <53846082+peterinnesmsft@users.noreply.github.com> Date: Tue, 4 May 2021 11:38:17 -0700 Subject: [PATCH 03/39] fix: Fixing closing tag for local.settings.json Content element in .NET Functions .csproj template (#1075) * Updating .NET Functions .csproj template to include all *.json files (except in www directory) as content; local.settings.json continues to not be included in publish output; fix www item include to use POSIX-style path separators; add _FunctionsSkipCleanOutput to PropertyGroup. * Updating .NET Functions default content includes and excludes. * Fixing closing tag for local.settings.json Content element in .NET Functions .csproj template. --- .../generators/app/templates/dotnet/functions/botName.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj b/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj index fdecab2ad2..b6dfdd9b6d 100644 --- a/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj +++ b/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj @@ -23,7 +23,7 @@ Never - + PreserveNewest From 4a4bfe49014d4afae7e576fe5c0c16d06af90e61 Mon Sep 17 00:00:00 2001 From: Peter Innes <53846082+peterinnesmsft@users.noreply.github.com> Date: Tue, 4 May 2021 17:10:35 -0700 Subject: [PATCH 04/39] fix: Install .NET Core SDK for '.NET: Version, Sign & Pack' CI/CD pipeline stage (#1078) * Removing reference to non-existant .editorconfig file from Microsoft.Bot.Components.sln; updating CI/CD pipeline to install .NET Core SDK for job 'job_pack_dotnet' to prevent defaulting to .NET 5. * Adding 'steps:' back to dotnet-build-test-steps.yml. --- build/yaml/templates/component-template.yml | 2 ++ build/yaml/templates/dotnet-build-test-steps.yml | 10 ---------- build/yaml/templates/dotnet-install-sdk-steps.yml | 10 ++++++++++ packages/Microsoft.Bot.Components.sln | 5 ----- 4 files changed, 12 insertions(+), 15 deletions(-) create mode 100644 build/yaml/templates/dotnet-install-sdk-steps.yml diff --git a/build/yaml/templates/component-template.yml b/build/yaml/templates/component-template.yml index 85cc47a367..95bd8ca858 100644 --- a/build/yaml/templates/component-template.yml +++ b/build/yaml/templates/component-template.yml @@ -29,6 +29,7 @@ stages: - job: build_test_dotnet displayName: Build and test .csproj with dotnet steps: + - template: dotnet-install-sdk-steps.yml - template: dotnet-build-test-steps.yml - stage: stage_package_nuget @@ -41,6 +42,7 @@ stages: condition: eq(variables.ComponentType, 'codeExtension') steps: - template: nuget-versioning-steps.yml + - template: dotnet-install-sdk-steps.yml - template: dotnet-package-steps.yml - template: nuget-signing-steps.yml - job: job_pack_nuspec diff --git a/build/yaml/templates/dotnet-build-test-steps.yml b/build/yaml/templates/dotnet-build-test-steps.yml index 22a9134b0c..679bc36bc0 100644 --- a/build/yaml/templates/dotnet-build-test-steps.yml +++ b/build/yaml/templates/dotnet-build-test-steps.yml @@ -1,14 +1,4 @@ steps: -- task: UseDotNet@2 - displayName: 'Use .Net Core sdk 2.1.x' - inputs: - version: 2.1.x - -- task: UseDotNet@2 - displayName: 'Use .Net Core sdk 3.1.x' - inputs: - version: 3.1.x - - task: DotNetCoreCLI@2 displayName: 'Run `dotnet restore`' inputs: diff --git a/build/yaml/templates/dotnet-install-sdk-steps.yml b/build/yaml/templates/dotnet-install-sdk-steps.yml new file mode 100644 index 0000000000..772e09f578 --- /dev/null +++ b/build/yaml/templates/dotnet-install-sdk-steps.yml @@ -0,0 +1,10 @@ +steps: +- task: UseDotNet@2 + displayName: 'Use .Net Core sdk 2.1.x' + inputs: + version: 2.1.x + +- task: UseDotNet@2 + displayName: 'Use .Net Core sdk 3.1.x' + inputs: + version: 3.1.x diff --git a/packages/Microsoft.Bot.Components.sln b/packages/Microsoft.Bot.Components.sln index a8e39e0f44..649edc2e7c 100644 --- a/packages/Microsoft.Bot.Components.sln +++ b/packages/Microsoft.Bot.Components.sln @@ -9,11 +9,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Bot.Components.Ad EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Bot.Components.Teams", "Teams\dotnet\Microsoft.Bot.Components.Teams.csproj", "{FD29CBA6-C18F-498B-9F00-A3C34C1BEC5F}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{D20741C5-65FD-45BF-98A1-5A82D290743F}" - ProjectSection(SolutionItems) = preProject - .editorconfig = .editorconfig - EndProjectSection -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU From c3bf22e5027ee77c6e9f7087650a8cbfd19e76f6 Mon Sep 17 00:00:00 2001 From: Scott Gellock Date: Wed, 5 May 2021 11:46:46 -0700 Subject: [PATCH 05/39] docs: R13 fit and finish for template README.md files (#1079) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * R13 fit and finish for template README.md files - update template readme’s to contain final R13 copy - update template generated readme’s to use final R13 template names - update main repo readme to final R13 copy * docs: R13 fit and finish for template README.md files update template readme’s to contain final R13 copy update template generated readme’s to use final R13 template names update main repo readme to final R13 copy Close microsoft/BotFramework-Composer#7573 Purpose update template readme's with final R13 copy * clean up disambiguation test --- README.md | 14 ++-- .../generator-bot-core-assistant/README.md | 48 +++++------- .../generators/app/templates/README.md | 2 +- .../generator-bot-core-language/README.md | 36 +++++---- .../generators/app/templates/README.md | 2 +- generators/generator-bot-core-qna/README.md | 38 ++++------ .../generators/app/templates/README.md | 2 +- generators/generator-bot-empty/README.md | 31 +++----- .../generators/app/templates/README.md | 2 +- .../README.md | 73 +++++++------------ .../generators/app/templates/README.md | 2 +- .../README.md | 38 ++++------ .../generator-bot-enterprise-people/README.md | 38 ++++------ .../generators/app/templates/README.md | 4 +- .../README.md | 9 ++- 15 files changed, 137 insertions(+), 202 deletions(-) diff --git a/README.md b/README.md index db8d7706ad..7d05e49f79 100644 --- a/README.md +++ b/README.md @@ -18,13 +18,13 @@ Templates are pre-built bot projects designed for specific scenarios. We use [ye | Name | npm | Description | |:------------:|:---:|:------------| -|[Empty Bot](/generators/generator-bot-empty) | [![npm version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-empty.svg)](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-empty) | The base empty bot. | -|[Core Bot with Language](/generators/generator-bot-core-language) | [![npm version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-core-language.svg)](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-core-language) | Basic conversational bot with NLP. | -|[Core Assistant Bot](/generators/generator-bot-core-assistant) | [![npm version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-core-assistant.svg)](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-core-assistant) | Basic assistant bot with no skills. | -|[Enterprise Assistant Bot](/generators/generator-bot-enterprise-assistant) | [![npm version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-enterprise-assistant.svg)](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-enterprise-assistant) | Assistant Core + Calendar & People as skills. | -|[Enterprise Calendar Bot](/generators/generator-bot-enterprise-calendar) | [![npm version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-enterprise-calendar.svg)](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-enterprise-calendar) | A bot for working with Calendars. | -|[Enterprise People Bot](/generators/generator-bot-enterprise-people) | [![npm version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-enterprise-people.svg)](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-enterprise-people) | A bot for searching for people on the MS Graph. | -|[Adaptive](/generators/generator-bot-adaptive) | [![npm version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-adaptive.svg)](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-adaptive) | Used by other generators to scaffold web app or functions project. | +|[Empty Bot](/generators/generator-bot-empty) | [![npm version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-empty.svg)](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-empty) | A simple bot with a root dialog and greeting dialog. | +|[Core Bot with Azure Language Understanding](/generators/generator-bot-core-language) | [![npm version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-core-language.svg)](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-core-language) | A simple bot with Azure Language Understanding (LUIS) and common trigger phrases used to direct the conversation flow. | +|[Core Assistant Bot](/generators/generator-bot-core-assistant) | [![npm version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-core-assistant.svg)](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-core-assistant) | A bot with Azure Language Understanding (LUIS) and common trigger phrases used to direct the conversation flow and help customers accomplish basic tasks. Designed to be extended with skills. | +|[Enterprise Assistant Bot](/generators/generator-bot-enterprise-assistant) | [![npm version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-enterprise-assistant.svg)](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-enterprise-assistant) | A Core Assistant Bot with Calendar & People as skills. | +|[Enterprise Calendar Bot](/generators/generator-bot-enterprise-calendar) | [![npm version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-enterprise-calendar.svg)](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-enterprise-calendar) | A bot with the ability to interact with M365 Calendar using Microsoft Graph. | +|[Enterprise People Bot](/generators/generator-bot-enterprise-people) | [![npm version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-enterprise-people.svg)](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-enterprise-people) | A bot with the ability to search for people within Azure Active Directory using Microsoft Graph.| +|[Adaptive Bot Generator](/generators/generator-bot-adaptive) | [![npm version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-adaptive.svg)](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-adaptive) | Used by other generators to scaffold web app or functions project. | ### Packages diff --git a/generators/generator-bot-core-assistant/README.md b/generators/generator-bot-core-assistant/README.md index 7b6620c8c6..c8164eb085 100644 --- a/generators/generator-bot-core-assistant/README.md +++ b/generators/generator-bot-core-assistant/README.md @@ -1,48 +1,34 @@ # @microsoft/generator-bot-core-assistant [![NPM version][npm-image]][npm-url] -This template creates an assistant-style conversational bot. Assistant-style bots typically help their users accomplish multiple different tasks, and have support for more varied conversational interactions. +A bot with Azure Language Understanding (LUIS) and common trigger phrases used to direct the conversation flow and help customers accomplish basic tasks. -Includes support for: +### Recommended use + +- Create a sophisticated conversational bot +- Customize and extend sophisticated dialogs, bot logic, language understanding and bot responses + +### Included capabilities - Greeting new and returning users +- Chit chat with QnA Maker ([professional personality](https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/how-to/chit-chat-knowledge-base?tabs=v1)) - Asking for help -- Cancelling a dialog -- Submitting feedback about the bot - Error handling in conversations +- Cancelling a dialog +- Get customer feedback - Repeat the previous question -- Chit chat with QnA Maker ([professional personality](https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/how-to/chit-chat-knowledge-base?tabs=v1)) -- Disambiguation of NLP results +- Disambiguation when multiple intents are recognized -## What this template is for +### Required Azure resources -Use this template if you want to... +- [Azure Language Understanding (LUIS)][luis], or another recognizer of your choice +- [Azure QnA Maker](https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/overview/overview) +- A storage solution for persistent state storage like Azure Cosmos DB -- Create an assistant-style, or advanced conversational bot -- See examples of more complex conversational flows, and more advanced language understanding and generation - -## Languages +### Supported languages - English (en-US) -## Azure Resource Deployment - -To run this bot you'll need the resources listed below. Create a publishing profile in Composer to provision and publish to your Azure resources for your bot. - -- [LUIS][luis], or another recognizer of your choice -- [QnA Maker](https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/overview/overview) -- A storage solution for persistent state storage like Azure CosmosDB - -## Using this template - -### From Composer - -From Composer you'll use the **New** button on the **Home** screen to create a new bot. After creation, Composer will guide you through making customizations to your bot. If you'd like to extend your bot with code, you can open up your bot using your favorite IDE (like Visual Studio) from the location you choose during the creation flow. - -### From the command-line - -This template can also be installed from the [command line](https://github.com/microsoft/botframework-components/blob/main/generators/command-line-instructions). - -## License +### License [MIT License](https://github.com/microsoft/botframework-components/blob/main/LICENSE) diff --git a/generators/generator-bot-core-assistant/generators/app/templates/README.md b/generators/generator-bot-core-assistant/generators/app/templates/README.md index e7b5e3dc98..d332ab28be 100644 --- a/generators/generator-bot-core-assistant/generators/app/templates/README.md +++ b/generators/generator-bot-core-assistant/generators/app/templates/README.md @@ -1,6 +1,6 @@ # Welcome to your new bot -This Bot Project was created using the Assistant Core template. Your bot is an assistant-style bot - it is designed as a base for a bot that will help your users accomplish multiple different tasks. +This bot project was created using the Core Assistant template. Your bot is an assistant-style bot - it is designed as a base for a bot that will help your users accomplish multiple different tasks. ## Next steps diff --git a/generators/generator-bot-core-language/README.md b/generators/generator-bot-core-language/README.md index f04336b961..ec96ca5fd3 100644 --- a/generators/generator-bot-core-language/README.md +++ b/generators/generator-bot-core-language/README.md @@ -1,33 +1,31 @@ # @microsoft/generator-bot-core-language [![NPM version][npm-image]][npm-url] -This template creates a simple conversational bot, with triggers and dialogs for responding to help, welcome and cancel intents, and a simple response for unknown intents. +A simple bot with Azure Language Understanding (LUIS) and common trigger phrases used to direct the conversation flow. -## What this template is for +### Recommended use -Use this template if you want to... +- Create a simple conversational bot with Azure Language Understanding ([LUIS][luis]) +- Customize and extend example dialogs, bot logic, language understanding and bot responses +- Extend your bot with [Azure Bot Framework components](https://aka.ms/ComponentTemplateDocumentation) -- Create a basic conversational bot with natural language processing (NLP) with a recognizer like [LUIS][luis]. -- See the basics of how language understanding, language generation, recognizers and dialogs work together. +### Included capabilities -## Languages +- Welcoming new users +- Asking for help +- Responding to unknown language requests (unknown intents) +- Cancelling a dialog +- Use Azure Language Understanding Service (LUIS) for natural language processing -- English (en-US) - -## Azure Resource Deployment - -To run this bot you'll need to configure the default recognizer for your bot. In Composer, the default recognizer is LUIS. Additionally, you may want to consider a persistent state storage solution like Azure CosmosDB. Both can be provisioned and published to by creating a publishing profile in Composer. +### Required Azure resources -## Using this template +- [Azure Language Understanding (LUIS)][luis], or another recognizer of your choice +- A storage solution for persistent state storage like Azure Cosmos DB -### From Composer +### Supported languages -From Composer you'll use the **New** button on the **Home** screen to create a new bot. After creation, Composer will guide you through making customizations to your bot. If you'd like to extend your bot with code, you can open up your bot using your favorite IDE (like Visual Studio) from the location you choose during the creation flow. - -### From the command-line - -This template can also be installed from the [command line](https://github.com/microsoft/botframework-components/blob/main/generators/command-line-instructions). +- English (en-US) -## License +### License [MIT License](https://github.com/microsoft/botframework-components/blob/main/LICENSE) diff --git a/generators/generator-bot-core-language/generators/app/templates/README.md b/generators/generator-bot-core-language/generators/app/templates/README.md index a50c0b545c..db6a653e66 100644 --- a/generators/generator-bot-core-language/generators/app/templates/README.md +++ b/generators/generator-bot-core-language/generators/app/templates/README.md @@ -1,6 +1,6 @@ # Welcome to your new bot -This Bot Project was created using the Conversational Core template, and contains support for a base set of conversational flows. +This bot project was created using the Core Bot with Azure Language Understanding template, and contains support for a base set of conversational flows. ## Next steps diff --git a/generators/generator-bot-core-qna/README.md b/generators/generator-bot-core-qna/README.md index 042f56f944..5dd28d5854 100644 --- a/generators/generator-bot-core-qna/README.md +++ b/generators/generator-bot-core-qna/README.md @@ -1,39 +1,27 @@ # @microsoft/generator-bot-core-qna [![NPM version][npm-image]][npm-url] -This template guides you through creating and connecting a bot to a QnA Maker knowledge base. You can connect to an existing knowledge base, create one from scratch using .qna files, or create one from an existing FAQ-style website. +A simple question-and-answer bot with Azure QnA Maker. -## What this template is for +### Recommended use -Use this template if you want to... +- Create a simple question-and-answer bot with Azure QnA Maker +- Customize and extend question-and-answer pairs or connect to your website's FAQ +- Extend your bot with [Azure Bot Framework components](https://aka.ms/ComponentTemplateDocumentation) -- Create a bot and connect it to a QnA Maker knowledge base +### Included capabilities -## Packages +- Answer questions from a QnA Maker knowled gebase -Your bot can use the [Azure Bot Framework component model](https://aka.ms/ComponentTemplateDocumentation) to extend the base functionality. From Composer, use the Package Manager to discover additional packages you can add to your bot. +### Required Azure resources -## Languages +- [Azure Language Understanding (LUIS)][luis], or another recognizer of your choice +- [Azure QnA Maker](https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/overview/overview) -- English (en-US) - -## Azure Resource Deployment - -To run this bot you'll need the resources listed below. Create a publishing profile in Composer to provision and publish to your Azure resources for your bot. - -- [LUIS][luis], or another recognizer of your choice -- [QnA Maker](https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/overview/overview) - -## Using this template +### Supported languages -### From Composer - -From Composer you'll use the **New** button on the **Home** screen to create a new bot. After creation, Composer will guide you through making customizations to your bot. If you'd like to extend your bot with code, you can open up your bot using your favorite IDE (like Visual Studio) from the location you choose during the creation flow. - -### From the command-line - -This template can also be installed from the [command line](https://github.com/microsoft/botframework-components/blob/main/generators/command-line-instructions). +- English (en-US) -## License +### License [MIT License](https://github.com/microsoft/botframework-components/blob/main/LICENSE) diff --git a/generators/generator-bot-core-qna/generators/app/templates/README.md b/generators/generator-bot-core-qna/generators/app/templates/README.md index 61493a17d7..b5d27b3018 100644 --- a/generators/generator-bot-core-qna/generators/app/templates/README.md +++ b/generators/generator-bot-core-qna/generators/app/templates/README.md @@ -1,6 +1,6 @@ # Welcome to your new bot -This Bot Project was created using the QnA Maker template, and contains minimal bot with a QnA Maker trigger. +This bot project was created using the Core Bot with Azure QnA Maker template, and contains a minimal bot with a QnA Maker trigger. ## Next steps diff --git a/generators/generator-bot-empty/README.md b/generators/generator-bot-empty/README.md index b370d2261f..1d70a2c074 100644 --- a/generators/generator-bot-empty/README.md +++ b/generators/generator-bot-empty/README.md @@ -1,35 +1,28 @@ # @microsoft/generator-bot-empty [![NPM version][npm-image]][npm-url] -This template creates a bot that sends a simple message when interacted with. +A simple bot with a root dialog and greeting dialog. -## What this template is for +### Recommended use -Use this template if you want to... +- Start from scratch, with a basic bot without additions +- Good for first time bot developers, or seasoned pros -- Start from scratch, with minimal pre-built functionality. -- Build your bot by composing an ad-hoc set of packages. +### Included capabilities -## Supported Languages +- Greeting new and returning users -- English (en-US) - -## Azure Resource Deployment - -This template does not rely on any additional Azure Resources. +### Required Azure resources -## Using this template +- This template does not rely on any additional Azure resources -### From Composer +### Supported languages -From Composer you'll use the **New** button on the **Home** screen to create a new bot. After creation, Composer will guide you through making customizations to your bot. If you'd like to extend your bot with code, you can open up your bot using your favorite IDE (like Visual Studio) from the location you choose during the creation flow. - -### From the command-line - -This template can also be installed from the [command line](https://github.com/microsoft/botframework-components/blob/main/generators/command-line-instructions). +- English (en-US) -## License +### License [MIT License](https://github.com/microsoft/botframework-components/blob/main/LICENSE) +[luis]: https://docs.microsoft.com/en-us/azure/cognitive-services/luis/what-is-luis [npm-image]: https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-empty.svg [npm-url]: https://www.npmjs.com/package/@microsoft/generator-bot-empty diff --git a/generators/generator-bot-empty/generators/app/templates/README.md b/generators/generator-bot-empty/generators/app/templates/README.md index e0c71cc42e..b48822a762 100644 --- a/generators/generator-bot-empty/generators/app/templates/README.md +++ b/generators/generator-bot-empty/generators/app/templates/README.md @@ -1,6 +1,6 @@ # Welcome to your new bot -This Bot Project was created using the Empty Bot template, and contains a minimal set of files necessary to have a working bot. +This bot project was created using the Empty Bot template, and contains a minimal set of files necessary to have a working bot. ## Next steps diff --git a/generators/generator-bot-enterprise-assistant/README.md b/generators/generator-bot-enterprise-assistant/README.md index f602eede62..4623bca93d 100644 --- a/generators/generator-bot-enterprise-assistant/README.md +++ b/generators/generator-bot-enterprise-assistant/README.md @@ -1,48 +1,37 @@ # @microsoft/generator-bot-enterprise-assistant [![NPM version][npm-image]][npm-url] -This template creates an Enterprise Assistant Bot, comprised of a root bot based on the Core Assistant Bot template, and pre-configured with the Enterprise Calendar Bot and Enterprise People Bot templates as skills. [Learn more](https://aka.ms/EnterpriseAssistant) +A bot with Azure Language Understanding (LUIS), Enterprise Calendar skill, Enterprise People skill and common trigger phrases used to direct the conversation flow to help customers accomplish common business tasks. [Learn more](https://aka.ms/EnterpriseAssistant) -Includes support for: +### Recommended use -- Greeting new and returning users -- Asking for help -- Cancelling a dialog -- Submitting feedback about the bot -- Error handling in conversations -- Repeat the previous question -- Chit chat with QnA Maker ([professional personality](https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/how-to/chit-chat-knowledge-base?tabs=v1)) -- Disambiguation of NLP results +- Create a sophisticated bot +- Customize and extend sophisticated example dialogs, bot logic, language understanding and bot responses +- Enterprise assistant-style bots that use Office 365 features + +### Included capabilities -Included skills: - [Enterprise Calendar Bot](https://aka.ms/EnterpriseCalendarBot) - [Enterprise People Bot](https://aka.ms/EnterprisePeopleBot) +- Greeting new and returning users +- Bot Framework Orchestrator to direct the conversation flow +- Chit chat with QnA Maker ([professional personality](https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/how-to/chit-chat-knowledge-base?tabs=v1)) +- Asking for help +- Disambiguation when multiple intents are recognized +- Cancelling a dialog +- Error handling +- Repeat previous question +- Getting customer feedback -## What this template is for - -Use this template if you want to... - -- Create a conversational experience for common enterprise scenarios (i.e. calendar management and user directory lookup) -- See examples of more complex conversational flows, and more advanced language understanding and generation -- See an example of a root bot and skills handling complex user interactions including interruptions and Adaptive Cards - -## Packages - -Your bot can use the [Azure Bot Framework component model](https://aka.ms/ComponentTemplateDocumentation) to extend the base functionality. From Composer, use the Package Manager to discover additional packages you can add to your bot. - -This bot starts with the following packages: - -- [Help and Cancel intent handling](https://www.nuget.org/packages/Microsoft.Bot.Components.HelpAndCancel/) -- [Orchestrator](https://www.nuget.org/packages/Microsoft.Bot.Builder.AI.Orchestrator/) - -## Supported Languages +### Included packages -- English (en-US) +- [Help and Cancel Intent Handling](https://www.nuget.org/packages/Microsoft.Bot.Components.HelpAndCancel/) +- [Bot Framework Orchestrator](https://www.nuget.org/packages/Microsoft.Bot.Builder.AI.Orchestrator/) -## Azure Resource Deployment +The Enterprise Assistant Bot uses packages to extend its capabilities. [Learn more](https://aka.ms/ComponentTemplateDocumentation). -To run this bot you'll need the resources listed below. Create a publishing profile in Composer to provision and publish to your Azure resources for your bot. +### Required Azure resources -- Azure Bot Registration configured with Microsoft Azure Active Directory authentication with access to the following scopes: +- Azure Bot Service Registration configured with Microsoft Azure Active Directory authentication with access to the following scopes: - Calendars.ReadWrite - Contacts.Read - Directory.Read.All @@ -50,24 +39,18 @@ To run this bot you'll need the resources listed below. Create a publishing prof - People.Read.All - User.ReadBasic.All - User.Read.All -- [Language Understanding (LUIS)][luis], or another recognizer of your choice -- [QnA Maker](https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/overview/overview) +- [Azure Language Understanding (LUIS)][luis], or another recognizer of your choice +- [Azure QnA Maker](https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/overview/overview) - A storage solution for persistent state storage like Azure Cosmos DB -## Using this template - -### From Composer - -From Composer you'll use the **New** button on the **Home** screen to create a new bot. After creation, Composer will guide you through making customizations to your bot. If you'd like to extend your bot with code, you can open up your bot using your favorite IDE (like Visual Studio) from the location you choose during the creation flow. +### Supported Languages -### From the command-line - -This template can also be installed from the [command line](https://github.com/microsoft/botframework-components/blob/main/generators/command-line-instructions). +- English (en-US) -## License +### License [MIT License](https://github.com/microsoft/botframework-components/blob/main/LICENSE) [luis]: https://docs.microsoft.com/en-us/azure/cognitive-services/luis/what-is-luis -[npm-image]: https://badge.fury.io/js/%40microsoft%2Fgenerator-enterprise-assistant.svg +[npm-image]: https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-enterprise-assistant.svg [npm-url]: https://www.npmjs.com/package/@microsoft/generator-bot-enterprise-assistant diff --git a/generators/generator-bot-enterprise-assistant/generators/app/templates/README.md b/generators/generator-bot-enterprise-assistant/generators/app/templates/README.md index 310836ed18..5ba82c7a75 100644 --- a/generators/generator-bot-enterprise-assistant/generators/app/templates/README.md +++ b/generators/generator-bot-enterprise-assistant/generators/app/templates/README.md @@ -1,6 +1,6 @@ # Welcome to your new bot -This Bot Project was created using the **[Enterprise Assistant Bot](https://aka.ms/EnterpriseAssistant)** template, and contains a root bot and two skills. You **must complete the configuration steps outlined below for your bot to function.** +This bot project was created using the **[Enterprise Assistant Bot](https://aka.ms/EnterpriseAssistant)** template, and contains a root bot and two skills. You **must complete the configuration steps outlined below for your bot to function.** ## Configure your Enterprise Assistant Bot To test this bot locally, complete the steps in the **[Enterprise Assistant Bot Tutorial](https://aka.ms/CreateEnterpriseAssistant)**. diff --git a/generators/generator-bot-enterprise-calendar/README.md b/generators/generator-bot-enterprise-calendar/README.md index da192d2f43..b6b5581863 100644 --- a/generators/generator-bot-enterprise-calendar/README.md +++ b/generators/generator-bot-enterprise-calendar/README.md @@ -1,44 +1,36 @@ # @microsoft/generator-bot-enterprise-calendar [![NPM version][npm-image]][npm-url] -This template creates a bot configured to manage Office 365 calendars using the Microsoft Graph API. **[Learn more](https://aka.ms/EnterpriseCalendarBot)** +This bot project was created using the [Enterprise Calendar Bot](https://aka.ms/EnterpriseCalendarBot) template. You **must complete the configuration steps outlined below for your bot to function.** -## What this template is for +### Recommended use -Use this template if you want to... +- Create a sophisticated bot that enables customers to interact with Office 365 Calendar using Microsoft Graph +- Customize and extend sophisticated example dialogs, bot logic, language understanding and bot responses -- Support managing Office 365 calendars using Microsoft Graph -- Start from an advanced template including dialogs, language understanding, and language generation +### Included capabilities -## Packages +- Manage Office 365 calendars using Microsoft Graph -This bot uses the [Azure Bot Framework component model](https://aka.ms/ComponentTemplateDocumentation) to extend its base functionality. The following packages come pre-installed: -- [Microsoft.Bot.Components.Graph](https://www.nuget.org/packages/Microsoft.Bot.Components.Graph/) +### Included packages -## Supported Languages +- [Microsoft Graph](https://www.nuget.org/packages/Microsoft.Bot.Components.Graph/) -- English (en-US) +The Enterprise Calendar Bot uses packages to extend its capabilities. [Learn more](https://aka.ms/ComponentTemplateDocumentation) -## Azure Resource Deployment +### Required Azure resources -This template requires the following Azure resources: -- Azure Bot Registration configured with Microsoft Azure Active Directory authentication with access to the following scopes: +- Azure Bot Service Registration configured with Microsoft Azure Active Directory authentication with access to the following scopes: - Calendars.ReadWrite - Contacts.Read - People.Read - User.ReadBasic.All -- [Language Understanding (LUIS)][luis] authoring resource - -## Using this template - -### From Composer +- [Azure Language Understanding (LUIS)][luis], or another recognizer of your choice -From Composer you'll use the **New** button on the **Home** screen to create a new bot. After creation, Composer will guide you through setting up your bot. If you'd like to extend your bot with code, you can open up your bot using your favorite IDE (like Visual Studio) from the location you choose during the creation flow. +### Supported languages -### From the command-line - -This template can also be installed from the [command line](https://github.com/microsoft/botframework-components/blob/main/generators/command-line-instructions). +- English (en-US) -## License +### License [MIT License](https://github.com/microsoft/botframework-components/blob/main/LICENSE) diff --git a/generators/generator-bot-enterprise-people/README.md b/generators/generator-bot-enterprise-people/README.md index 663ececabe..2f76a38120 100644 --- a/generators/generator-bot-enterprise-people/README.md +++ b/generators/generator-bot-enterprise-people/README.md @@ -1,46 +1,38 @@ # @microsoft/generator-bot-enterprise-people [![NPM version][npm-image]][npm-url] -This template creates a bot configured to search for users in an Azure Active Directory using Microsoft Graph. **[Learn more](https://aka.ms/EnterprisePeopleBot)** +A bot with the ability to interact with Office 365 users in an Azure Active Directory using Microsoft Graph. [Learn more](https://aka.ms/EnterprisePeopleBot) -## What this template is for +### Recommended use -Use this template if you want to... +- Create a sophisticated bot that enables customers to interact with Azure Active Directory using Microsoft Graph +- Customize and extend sophisticated example dialogs, bot logic, language understanding and bot responses -- Support searching for Azure Active Directory users -- Start from an advanced template including dialogs, language understanding, and language generation +### Included capabilities -## Packages +- Search and interact with Office 365 users in an Azure Active Directory using Microsoft Graph -This bot uses the [Azure Bot Framework component model](https://aka.ms/ComponentTemplateDocumentation) to extend its base functionality. The following packages come pre-installed: -- [Microsoft.Bot.Components.Graph](https://www.nuget.org/packages/Microsoft.Bot.Components.Graph/) +### Included packages -## Supported Languages +- [Microsoft Graph](https://www.nuget.org/packages/Microsoft.Bot.Components.Graph/) -- English (en-US) +The Enterprise People Bot uses packages to extend its capabilities. [Learn more](https://aka.ms/ComponentTemplateDocumentation) -## Azure Resource Deployment +### Required Azure resources -This template requires the following Azure resources: -- Azure Bot Registration configured with Microsoft Azure Active Directory authentication with access to the following scopes: +- Azure Bot Service Registration configured with Microsoft Azure Active Directory authentication with access to the following scopes: - Contacts.Read - Directory.Read.All - People.Read - People.Read.All - User.ReadBasic.All - User.Read.All -- [Language Understanding (LUIS)][luis] authoring resource - -## Using this template - -### From Composer +- [Azure Language Understanding (LUIS)][luis], or another recognizer of your choice -From Composer you'll use the **New** button on the **Home** screen to create a new bot. After creation, Composer will guide you through setting up your bot. If you'd like to extend your bot with code, you can open up your bot using your favorite IDE (like Visual Studio) from the location you choose during the creation flow. +### Supported languages -### From the command-line - -This template can also be installed from the [command line](https://github.com/microsoft/botframework-components/blob/main/generators/command-line-instructions). +- English (en-US) -## License +### License [MIT License](https://github.com/microsoft/botframework-components/blob/main/LICENSE) diff --git a/generators/generator-bot-enterprise-people/generators/app/templates/README.md b/generators/generator-bot-enterprise-people/generators/app/templates/README.md index 4c83471793..91ebc9654e 100644 --- a/generators/generator-bot-enterprise-people/generators/app/templates/README.md +++ b/generators/generator-bot-enterprise-people/generators/app/templates/README.md @@ -1,8 +1,8 @@ # Welcome to your new bot -This Bot Project was created using the **[Enterprise People Bot](https://aka.ms/EnterprisePeopleBot)** template. You **must complete the configuration steps outlined below for your bot to function.** +This bot project was created using the [Enterprise People Bot](https://aka.ms/EnterprisePeopleBot) template. You **must complete the configuration steps outlined below for your bot to function.** -## Configure your Enterprise Assistant +## Configure your Enterprise People Bot To test this bot locally, complete the steps in the **[Enterprise People Bot Tutorial](https://aka.ms/CreatePeopleBot)**. ## Next steps diff --git a/generators/generator-bot-template-generator/README.md b/generators/generator-bot-template-generator/README.md index 50fe546d71..29dce62c2b 100644 --- a/generators/generator-bot-template-generator/README.md +++ b/generators/generator-bot-template-generator/README.md @@ -1,4 +1,4 @@ -# bot-template-generator +# bot-template-generator [![NPM version][npm-image]][npm-url] Yeoman generator generating a bot template generator for use with the Microsoft Bot Framework. @@ -13,7 +13,7 @@ Yeoman generator generating a bot template generator for use with the Microsoft - Navigate to the root dir of your local version of `generator-bot-template-generator` and run `npm install` - Navigate to the directory where you want to instantiate your bot template generator and run `yo {path to your local versions of generator-bot-template-generator's ./app/index.js file}` - - OR run npm link within the root of the `generator-bot-template-generator` directory and then navigate to where you want to instantiate your bot and run `yo bot-template-generator` + - OR run npm link within the root of the `generator-bot-template-generator` directory and then navigate to where you want to instantiate your bot and run `yo bot-template-generator` ## Commands @@ -37,7 +37,7 @@ All you need to know from a yeomen perspective is that yeomen will run the boots **Thats it! A template is just a list of dependent component packages (declared in index.js) and the glue/routing logic for those packages (bot files in the templates dir)** -For this particular empty bot template in the image above, little post generation config is needed because the tool defaults to generating an empty bot template. However more advanced templates will need some post creation config outlined in the next step. +For this particular empty bot template in the image above, little post generation config is needed because the tool defaults to generating an empty bot template. However more advanced templates will need some post creation config outlined in the next step. ## How to populate your bot specific assets @@ -87,3 +87,6 @@ After making the change, run `yarn build:server` followed by `yarn start:dev`. Y [npm]: https://npmjs.com [nodejs]: https://nodejs.org/ [license]: https://github.com/microsoft/botframework-components/blob/main/LICENSE +[npm-image]: https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-adaptive.svg +[npm-url]: https://www.npmjs.com/package/@microsoft/generator-bot-adaptive + From 83a7779e353a8abf784e15995b99bd0be5635df0 Mon Sep 17 00:00:00 2001 From: Ryan Lengel Isgrig <43043272+ryanlengel@users.noreply.github.com> Date: Fri, 7 May 2021 13:47:24 -0700 Subject: [PATCH 06/39] Convert switch case condition to stringexpression, per schema definition (#1092) --- .../generators/app/templates/botName.dialog | 2 +- .../generators/app/templates/botName.dialog | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/generators/generator-bot-core-assistant/generators/app/templates/botName.dialog b/generators/generator-bot-core-assistant/generators/app/templates/botName.dialog index 8df1dbf295..a50e949f85 100644 --- a/generators/generator-bot-core-assistant/generators/app/templates/botName.dialog +++ b/generators/generator-bot-core-assistant/generators/app/templates/botName.dialog @@ -159,7 +159,7 @@ "$designer": { "id": "uCZ5AG" }, - "condition": "=count(dialog.candidates)", + "condition": "=string(count(dialog.candidates))", "cases": [ { "value": "0", diff --git a/generators/generator-bot-enterprise-assistant/generators/app/templates/botName.dialog b/generators/generator-bot-enterprise-assistant/generators/app/templates/botName.dialog index 1a3474b1e6..043088a8b9 100644 --- a/generators/generator-bot-enterprise-assistant/generators/app/templates/botName.dialog +++ b/generators/generator-bot-enterprise-assistant/generators/app/templates/botName.dialog @@ -184,7 +184,7 @@ "$designer": { "id": "uCZ5AG" }, - "condition": "=count(dialog.candidates)", + "condition": "=string(count(dialog.candidates))", "cases": [ { "value": "0", From 2a422a60c107e20fcfbb78487299d98c8deb6e57 Mon Sep 17 00:00:00 2001 From: Josh Gummersall <1235378+joshgummersall@users.noreply.github.com> Date: Mon, 10 May 2021 14:53:25 -0700 Subject: [PATCH 07/39] chore: bump js sdk version to 4.13.2-preview (#1096) --- generators/generator-bot-adaptive/generators/app/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generators/generator-bot-adaptive/generators/app/index.js b/generators/generator-bot-adaptive/generators/app/index.js index d241fa1cc9..81ce539f35 100644 --- a/generators/generator-bot-adaptive/generators/app/index.js +++ b/generators/generator-bot-adaptive/generators/app/index.js @@ -249,7 +249,7 @@ module.exports = class extends BaseGenerator { _writeJsPackageJson() { const { botName, integration } = this.options; - const sdkVersion = '~4.13.1-preview'; + const sdkVersion = '~4.13.2-preview'; const dependencies = { [integrations.functions]: { From d85030ee81545defa56dc724127be85e6d3e7e42 Mon Sep 17 00:00:00 2001 From: lauren-mills Date: Mon, 10 May 2021 21:15:41 -0700 Subject: [PATCH 08/39] convert svg icons to PNG to fix broken images in Teams (#1100) --- .../language-generation/en-us/icons.en-us.lg | 61 ++++--------------- .../language-generation/en-us/icons.en-us.lg | 10 +-- 2 files changed, 16 insertions(+), 55 deletions(-) diff --git a/generators/generator-bot-core-assistant/generators/app/templates/language-generation/en-us/icons.en-us.lg b/generators/generator-bot-core-assistant/generators/app/templates/language-generation/en-us/icons.en-us.lg index 0e691c870b..be65e30d9b 100644 --- a/generators/generator-bot-core-assistant/generators/app/templates/language-generation/en-us/icons.en-us.lg +++ b/generators/generator-bot-core-assistant/generators/app/templates/language-generation/en-us/icons.en-us.lg @@ -1,71 +1,32 @@ -# AcceptedIconUrl() -- data:image/svg+xml,%3Csvg width='16' height='11' viewBox='0 0 16 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M15.2455 0.895508L5.84998 10.2998L0.954468 5.39551L1.74548 4.60449L5.84998 8.7002L14.4545 0.104492L15.2455 0.895508Z' fill='%23219653'/%3E%3C/svg%3E%0A - # BotTourIconUrl() -- data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCjxwYXRoIGQ9Ik0yMCAyMEwxNC42NTgyIDE3LjMyNDJDMTQuMTU2OSAxNy40NDE0IDEzLjY0NTggMTcuNSAxMy4xMjUgMTcuNUMxMi40ODA1IDE3LjUgMTEuODUyMiAxNy40MTIxIDExLjI0MDIgMTcuMjM2M0MxMC42MzQ4IDE3LjA2MDUgMTAuMDY1MSAxNi44MTMyIDkuNTMxMjUgMTYuNDk0MUM5LjAwMzkxIDE2LjE2ODYgOC41MjIxNCAxNS43NzQ3IDguMDg1OTQgMTUuMzEyNUM3LjY1NjI1IDE0Ljg1MDMgNy4yOTQ5MiAxNC4zMjk0IDcuMDAxOTUgMTMuNzVDNi43MjIwMSAxMy43NSA2LjQ0NTMxIDEzLjczNyA2LjE3MTg4IDEzLjcxMDlDNS44OTg0NCAxMy42ODQ5IDUuNjI1IDEzLjYzOTMgNS4zNTE1NiAxMy41NzQyTDAgMTYuMjVMMi4xNzc3MyAxMS44ODQ4QzEuNDgxMTIgMTEuMjMzNyAwLjk0NDAxIDEwLjQ3NTMgMC41NjY0MDYgOS42MDkzOEMwLjE4ODgwMiA4Ljc0MzQ5IDAgNy44MzIwMyAwIDYuODc1QzAgNi4yNDM0OSAwLjA4MTM4MDIgNS42MzQ3NyAwLjI0NDE0MSA1LjA0ODgzQzAuNDA2OTAxIDQuNDYyODkgMC42MzgwMjEgMy45MTYwMiAwLjkzNzUgMy40MDgyQzEuMjM2OTggMi44OTM4OCAxLjU5NTA1IDIuNDI4MzkgMi4wMTE3MiAyLjAxMTcyQzIuNDI4MzkgMS41OTUwNSAyLjg5MDYyIDEuMjM2OTggMy4zOTg0NCAwLjkzNzVDMy45MTI3NiAwLjYzODAyMSA0LjQ2Mjg5IDAuNDA2OTAxIDUuMDQ4ODMgMC4yNDQxNDFDNS42MzQ3NyAwLjA4MTM4MDIgNi4yNDM0OSAwIDYuODc1IDBDNy41MTk1MyAwIDguMTQ0NTMgMC4wODc4OTA2IDguNzUgMC4yNjM2NzJDOS4zNjE5OCAwLjQzOTQ1MyA5LjkzMTY0IDAuNjkwMTA0IDEwLjQ1OSAxLjAxNTYyQzEwLjk5MjggMS4zMzQ2NCAxMS40NzQ2IDEuNzI4NTIgMTEuOTA0MyAyLjE5NzI3QzEyLjM0MDUgMi42NTk1MSAxMi43MDUxIDMuMTc3MDggMTIuOTk4IDMuNzVDMTMuNjQyNiAzLjc1IDE0LjI2MTEgMy44MzEzOCAxNC44NTM1IDMuOTk0MTRDMTUuNDUyNSA0LjE1MDM5IDE2LjAwOTEgNC4zNzUgMTYuNTIzNCA0LjY2Nzk3QzE3LjA0NDMgNC45NjA5NCAxNy41MTYzIDUuMzEyNSAxNy45Mzk1IDUuNzIyNjZDMTguMzY5MSA2LjEzMjgxIDE4LjczNyA2LjU5NTA1IDE5LjA0MyA3LjEwOTM4QzE5LjM0OSA3LjYxNzE5IDE5LjU4MzMgOC4xNjczMiAxOS43NDYxIDguNzU5NzdDMTkuOTE1NCA5LjM1MjIxIDIwIDkuOTczOTYgMjAgMTAuNjI1QzIwIDExLjU4MiAxOS44MTEyIDEyLjQ5NjcgMTkuNDMzNiAxMy4zNjkxQzE5LjA1NiAxNC4yMzUgMTguNTE4OSAxNC45OTM1IDE3LjgyMjMgMTUuNjQ0NUwyMCAyMFpNMTMuNzUgMTVWMTMuNzVIMTIuNVYxNUgxMy43NVpNNS4zMTI1IDEyLjI4NTJDNS41MDc4MSAxMi4zMzA3IDUuNzAzMTIgMTIuMzczIDUuODk4NDQgMTIuNDEyMUM2LjEwMDI2IDEyLjQ1MTIgNi4zMDIwOCAxMi40NzcyIDYuNTAzOTEgMTIuNDkwMkM2LjMzNDY0IDExLjg3MTcgNi4yNSAxMS4yNSA2LjI1IDEwLjYyNUM2LjI1IDkuODE3NzEgNi4zODM0NiA5LjA0NjIyIDYuNjUwMzkgOC4zMTA1NUM2LjkxNzMyIDcuNTc0ODcgNy4yODg0MSA2LjkxMDgxIDcuNzYzNjcgNi4zMTgzNkM4LjI0NTQ0IDUuNzE5NCA4LjgxNTEgNS4yMTE1OSA5LjQ3MjY2IDQuNzk0OTJDMTAuMTM2NyA0LjM3ODI2IDEwLjg2MjYgNC4wODIwMyAxMS42NTA0IDMuOTA2MjVDMTEuMzkgMy40OTYwOSAxMS4wODQgMy4xMjgyNiAxMC43MzI0IDIuODAyNzNDMTAuMzg3NCAyLjQ3MDcgMTAuMDA5OCAyLjE5MDc2IDkuNTk5NjEgMS45NjI4OUM5LjE4OTQ1IDEuNzI4NTIgOC43NTMyNiAxLjU1MjczIDguMjkxMDIgMS40MzU1NUM3LjgzNTI5IDEuMzExODUgNy4zNjMyOCAxLjI1IDYuODc1IDEuMjVDNi4xMDAyNiAxLjI1IDUuMzcxMDkgMS4zOTk3NCA0LjY4NzUgMS42OTkyMkM0LjAwMzkxIDEuOTkyMTkgMy40MDgyIDIuMzkyNTggMi45MDAzOSAyLjkwMDM5QzIuMzkyNTggMy40MDgyIDEuOTg4OTMgNC4wMDM5MSAxLjY4OTQ1IDQuNjg3NUMxLjM5NjQ4IDUuMzcxMDkgMS4yNSA2LjEwMDI2IDEuMjUgNi44NzVDMS4yNSA3LjY2OTI3IDEuNDAyOTkgOC40MTQ3MSAxLjcwODk4IDkuMTExMzNDMi4wMTQ5NyA5LjgwNzk0IDIuNDU3NjggMTAuNDI5NyAzLjAzNzExIDEwLjk3NjZMMy43MjA3IDExLjYxMTNDMy41NzA5NiAxMS45MjM4IDMuNDE3OTcgMTIuMjMzMSAzLjI2MTcyIDEyLjUzOTFDMy4xMDU0NyAxMi44Mzg1IDIuOTQ5MjIgMTMuMTQ0NSAyLjc5Mjk3IDEzLjQ1N0w1LjE5NTMxIDEyLjI1NTlMNS4zMTI1IDEyLjI4NTJaTTExLjg3NSA4Ljc1QzExLjg3NSA4LjU3NDIyIDExLjkwNzYgOC40MTE0NiAxMS45NzI3IDguMjYxNzJDMTIuMDM3OCA4LjExMTk4IDEyLjEyNTcgNy45ODE3NyAxMi4yMzYzIDcuODcxMDlDMTIuMzUzNSA3Ljc1MzkxIDEyLjQ4NyA3LjY2Mjc2IDEyLjYzNjcgNy41OTc2NkMxMi43ODY1IDcuNTMyNTUgMTIuOTQ5MiA3LjUgMTMuMTI1IDcuNUMxMy4zMDA4IDcuNSAxMy40NjM1IDcuNTMyNTUgMTMuNjEzMyA3LjU5NzY2QzEzLjc2MyA3LjY2Mjc2IDEzLjg5MzIgNy43NTM5MSAxNC4wMDM5IDcuODcxMDlDMTQuMTIxMSA3Ljk4MTc3IDE0LjIxMjIgOC4xMTE5OCAxNC4yNzczIDguMjYxNzJDMTQuMzQyNCA4LjQxMTQ2IDE0LjM3NSA4LjU3NDIyIDE0LjM3NSA4Ljc1QzE0LjM3NSA4LjkzODggMTQuMzI5NCA5LjExMTMzIDE0LjIzODMgOS4yNjc1OEMxNC4xNDcxIDkuNDE3MzIgMTQuMDI5OSA5LjU2MzggMTMuODg2NyA5LjcwNzAzQzEzLjc1IDkuODQzNzUgMTMuNjAwMyA5Ljk4Njk4IDEzLjQzNzUgMTAuMTM2N0MxMy4yNzQ3IDEwLjI3OTkgMTMuMTIxNyAxMC40NDI3IDEyLjk3ODUgMTAuNjI1QzEyLjg0MTggMTAuODAwOCAxMi43Mjc5IDExLjAwMjYgMTIuNjM2NyAxMS4yMzA1QzEyLjU0NTYgMTEuNDU4MyAxMi41IDExLjcyNTMgMTIuNSAxMi4wMzEyVjEyLjVIMTMuNzVWMTIuMjA3QzEzLjc1IDEyLjAzNzggMTMuNzYzIDExLjg3ODMgMTMuNzg5MSAxMS43Mjg1QzEzLjgyMTYgMTEuNTcyMyAxMy45MDMgMTEuNDI5IDE0LjAzMzIgMTEuMjk4OEMxNC4yMjg1IDExLjEwMzUgMTQuNDIwNiAxMC45MTggMTQuNjA5NCAxMC43NDIyQzE0LjgwNDcgMTAuNTU5OSAxNC45NzcyIDEwLjM3MTEgMTUuMTI3IDEwLjE3NThDMTUuMjc2NyA5Ljk4MDQ3IDE1LjM5NzEgOS43Njg4OCAxNS40ODgzIDkuNTQxMDJDMTUuNTc5NCA5LjMxMzE1IDE1LjYyNSA5LjA0OTQ4IDE1LjYyNSA4Ljc1QzE1LjYyNSA4LjQwNDk1IDE1LjU1OTkgOC4wODI2OCAxNS40Mjk3IDcuNzgzMkMxNS4yOTk1IDcuNDc3MjEgMTUuMTIwNCA3LjIxMDI5IDE0Ljg5MjYgNi45ODI0MkMxNC42NjQ3IDYuNzU0NTYgMTQuMzk3OCA2LjU3NTUyIDE0LjA5MTggNi40NDUzMUMxMy43OTIzIDYuMzE1MSAxMy40NzAxIDYuMjUgMTMuMTI1IDYuMjVDMTIuNzc5OSA2LjI1IDEyLjQ1NDQgNi4zMTUxIDEyLjE0ODQgNi40NDUzMUMxMS44NDkgNi41NzU1MiAxMS41ODUzIDYuNzU0NTYgMTEuMzU3NCA2Ljk4MjQyQzExLjEyOTYgNy4yMTAyOSAxMC45NTA1IDcuNDc3MjEgMTAuODIwMyA3Ljc4MzJDMTAuNjkwMSA4LjA4MjY4IDEwLjYyNSA4LjQwNDk1IDEwLjYyNSA4Ljc1SDExLjg3NVoiIGZpbGw9IiM2MjY0QTciLz4NCjwvc3ZnPg0K - -# CalendarIconUrl() -- data:image/svg+xml,%3Csvg width='26' height='25' viewBox='0 0 26 25' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M9.75 9.75H11.375V11.375H9.75V9.75ZM14.625 19.5H16.25V21.125H14.625V19.5ZM19.5 9.75H21.125V11.375H19.5V9.75ZM14.625 9.75H16.25V11.375H14.625V9.75ZM9.75 13H11.375V14.625H9.75V13ZM4.875 13H6.5V14.625H4.875V13ZM19.5 13H21.125V14.625H19.5V13ZM14.625 13H16.25V14.625H14.625V13ZM9.75 16.25H11.375V17.875H9.75V16.25ZM4.875 16.25H6.5V17.875H4.875V16.25ZM19.5 16.25H21.125V17.875H19.5V16.25ZM14.625 16.25H16.25V17.875H14.625V16.25ZM9.75 19.5H11.375V21.125H9.75V19.5ZM4.875 19.5H6.5V21.125H4.875V19.5ZM26 1.625V24.375H0V1.625H4.875V0H6.5V1.625H19.5V0H21.125V1.625H26ZM1.625 3.25V6.5H24.375V3.25H21.125V4.875H19.5V3.25H6.5V4.875H4.875V3.25H1.625ZM24.375 22.75V8.125H1.625V22.75H24.375Z' fill='%234F4F4F'/%3E%3C/svg%3E%0A +- data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAACgklEQVRIS62VS3LaQBCG/1ZIKlmFGxhOYHICww289DiLSDyqsjM5ge0TBO9ShZC0CVrGnMBwgogTmCPglV0VUKd6JIWREI9UeXbSqPvr198iFI79NaxZK7oioMnghr5mLGBRxIzAdy8mRZt9z2RetrvhDYBr/Y4wB+M+8Y+aAAGcECha09oJhp+jY0D/AE43DAj4QsBkXUE/+KEWRQftXmiDMQCIY1q3joFogBH5recqyWLnSUqISENWz/UgcJZ7S5QaPErkI1edH5N2mokPonswR0w89YeXszJbcjrjARFdxRXUy8piGnU643MGfQehtu2MlgAP4tXLnZkVtXthBMbSc5U0cefJenQ4Q1qa/aF2N2QAe2tf6jydsnTCpLQfN/AN5CBAl4Xolxk5M9/5o8t+9s7u/WxYbE1NiIzzyL34JIAFA1PfVXZZ+mkJT427J89V1QRs+QyOfFe12t1xH9If8xAc0ukzzryRqhcBaWS/c+9F1YQADDtrtgW05JsYeMj7x0SaLOLxQXC8oQryyi6JqhgFYe4NVSO3BbJvGItMaFOATovqLDXKhziP/7w08fZdzeI3DwBXt/kAsiYR6NHcM4cAoh2s4+ou5wLb7KKC4LrdUOuiWFczQs9VMiSbBbk9JTMNsG2/alU+PDJ4QoQpYlyXq/WwzPJf8LfCstNylzrO0kmRlSCZnO1wfbvn/imuoEFZ9JljC7hxXSWi0Se5fy+r21BqcnegRHo7ZDVsFh2bEZcpdV+xzM1MYnzMj0NDYInATFWXctLNoMWX+2Ue00JZESCyGZD/9Ym2SRZfDizqllL/N2BXEDLWMSAjqwciy+LVABnYBEkWrw4ogJp/AQMmQ2ugfsRmAAAAAElFTkSuQmCC # ChevronDownIconUrl() -- data:image/svg+xml,%3Csvg width='16' height='9' viewBox='0 0 16 9' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8 8.94531L0.195312 1.14062L1.14062 0.195312L8 7.05469L14.8594 0.195313L15.8047 1.14063L8 8.94531Z' fill='%236264A7'/%3E%3C/svg%3E%0A +- data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAA3UlEQVRIS+2U0Q2CMBCG/4MFHMUV3ELjA0VlADfxXSL1QRnDFRzFBfRMQbRGaA8IDyb0qWmu33d3uZYw8KKB+RgF3g4XLYrX5x0HrPV+efXeEASo5DQNOIwO6XxLqyRXYGQA3R50n/WVvOAXgCcgxGUFm1wTEPWV2HAGjlm6UO8p6iupg5vkv8a0q6QJ/iPo0i4XvFbQRuKDNwokEgncKXBJpHCvoE5izgIOizmvRtH19kSfnT1dJUwGF1VQZfeRAJLMq3uiCmyJ2ZsXKviSipBWAinUjhsF3q79f4ueQg+n58JKIFUAAAAASUVORK5CYII= # ChevronUpIconUrl() -- data:image/svg+xml,%3Csvg width='16' height='9' viewBox='0 0 16 9' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8 0.0546868L15.8047 7.85937L14.8594 8.80469L8 1.94531L1.14063 8.80469L0.195313 7.85937L8 0.0546868Z' fill='%236264A7'/%3E%3C/svg%3E%0A - -# ContactIconUrl() -- data:image/svg+xml,%3Csvg width='24' height='25' viewBox='0 0 24 25' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M19.7695 8.79785C20.3197 9.07715 20.8148 9.42415 21.2549 9.83887C21.7035 10.2451 22.0843 10.7021 22.3975 11.21C22.7106 11.7093 22.9518 12.251 23.1211 12.835C23.2904 13.4105 23.375 14.0072 23.375 14.625H21.75C21.75 13.9564 21.6188 13.3258 21.3564 12.7334C21.1025 12.141 20.7555 11.6247 20.3154 11.1846C19.8753 10.7445 19.359 10.3975 18.7666 10.1436C18.1742 9.88118 17.5436 9.75 16.875 9.75C16.2064 9.75 15.5758 9.88118 14.9834 10.1436C14.391 10.3975 13.8747 10.7445 13.4346 11.1846C12.9945 11.6247 12.6432 12.141 12.3809 12.7334C12.127 13.3258 12 13.9564 12 14.625C12 15.3952 11.8223 16.1273 11.4668 16.8213C11.1198 17.5153 10.6374 18.0908 10.0195 18.5479C10.5697 18.8271 11.0648 19.1742 11.5049 19.5889C11.9535 19.9951 12.3343 20.4521 12.6475 20.96C12.9606 21.4593 13.2018 22.001 13.3711 22.585C13.5404 23.1605 13.625 23.7572 13.625 24.375H12C12 23.7064 11.8688 23.0758 11.6064 22.4834C11.3525 21.891 11.0055 21.3747 10.5654 20.9346C10.1253 20.4945 9.60905 20.1475 9.0166 19.8936C8.42415 19.6312 7.79362 19.5 7.125 19.5C6.45638 19.5 5.82585 19.6312 5.2334 19.8936C4.64095 20.1475 4.12467 20.4945 3.68457 20.9346C3.24447 21.3747 2.89323 21.891 2.63086 22.4834C2.37695 23.0758 2.25 23.7064 2.25 24.375H0.625C0.625 23.7572 0.709635 23.1605 0.878906 22.585C1.04818 22.001 1.28939 21.4593 1.60254 20.96C1.91569 20.4521 2.29232 19.9951 2.73242 19.5889C3.18099 19.1742 3.68034 18.8271 4.23047 18.5479C3.61263 18.0908 3.12598 17.5153 2.77051 16.8213C2.4235 16.1273 2.25 15.3952 2.25 14.625C2.25 13.9564 2.37695 13.3258 2.63086 12.7334C2.89323 12.141 3.24447 11.6247 3.68457 11.1846C4.12467 10.7445 4.64095 10.3975 5.2334 10.1436C5.82585 9.88118 6.45638 9.75 7.125 9.75C7.89518 9.75 8.62728 9.92773 9.32129 10.2832C10.0153 10.6302 10.5908 11.1126 11.0479 11.7305C11.3695 11.0957 11.7799 10.5286 12.2793 10.0293C12.7786 9.52995 13.3457 9.11947 13.9805 8.79785C13.3626 8.34082 12.876 7.7653 12.5205 7.07129C12.1735 6.37728 12 5.64518 12 4.875C12 4.20638 12.127 3.57585 12.3809 2.9834C12.6432 2.39095 12.9945 1.87467 13.4346 1.43457C13.8747 0.994466 14.391 0.647461 14.9834 0.393555C15.5758 0.131185 16.2064 0 16.875 0C17.5436 0 18.1742 0.131185 18.7666 0.393555C19.359 0.647461 19.8753 0.994466 20.3154 1.43457C20.7555 1.87467 21.1025 2.39095 21.3564 2.9834C21.6188 3.57585 21.75 4.20638 21.75 4.875C21.75 5.64518 21.5723 6.37728 21.2168 7.07129C20.8698 7.7653 20.3874 8.34082 19.7695 8.79785ZM7.125 17.875C7.5651 17.875 7.98405 17.7904 8.38184 17.6211C8.77962 17.4434 9.1224 17.2106 9.41016 16.9229C9.70638 16.6266 9.93913 16.2839 10.1084 15.8945C10.2861 15.4967 10.375 15.0736 10.375 14.625C10.375 14.1849 10.2861 13.766 10.1084 13.3682C9.93913 12.9704 9.70638 12.6276 9.41016 12.3398C9.1224 12.0436 8.77962 11.8109 8.38184 11.6416C7.98405 11.4639 7.5651 11.375 7.125 11.375C6.67643 11.375 6.25326 11.4639 5.85547 11.6416C5.46615 11.8109 5.12337 12.0436 4.82715 12.3398C4.53939 12.6276 4.30664 12.9704 4.12891 13.3682C3.95964 13.766 3.875 14.1849 3.875 14.625C3.875 15.0736 3.95964 15.4967 4.12891 15.8945C4.30664 16.2839 4.53939 16.6266 4.82715 16.9229C5.12337 17.2106 5.46615 17.4434 5.85547 17.6211C6.25326 17.7904 6.67643 17.875 7.125 17.875ZM13.625 4.875C13.625 5.32357 13.7096 5.74674 13.8789 6.14453C14.0566 6.53385 14.2894 6.87663 14.5771 7.17285C14.8734 7.46061 15.2161 7.69336 15.6055 7.87109C16.0033 8.04036 16.4264 8.125 16.875 8.125C17.3151 8.125 17.734 8.04036 18.1318 7.87109C18.5296 7.69336 18.8724 7.46061 19.1602 7.17285C19.4564 6.87663 19.6891 6.53385 19.8584 6.14453C20.0361 5.74674 20.125 5.32357 20.125 4.875C20.125 4.4349 20.0361 4.01595 19.8584 3.61816C19.6891 3.22038 19.4564 2.8776 19.1602 2.58984C18.8724 2.29362 18.5296 2.06087 18.1318 1.8916C17.734 1.71387 17.3151 1.625 16.875 1.625C16.4264 1.625 16.0033 1.71387 15.6055 1.8916C15.2161 2.06087 14.8734 2.29362 14.5771 2.58984C14.2894 2.8776 14.0566 3.22038 13.8789 3.61816C13.7096 4.01595 13.625 4.4349 13.625 4.875Z' fill='%234F4F4F'/%3E%3C/svg%3E%0A - -# DateTimeIconUrl() -- data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M9 18C8.19271 18 7.41471 17.8958 6.66602 17.6875C5.92383 17.4792 5.22721 17.1862 4.57617 16.8086C3.93164 16.4245 3.34245 15.9688 2.80859 15.4414C2.28125 14.9076 1.82552 14.3184 1.44141 13.6738C1.0638 13.0228 0.770833 12.3262 0.5625 11.584C0.354167 10.8353 0.25 10.0573 0.25 9.25C0.25 8.44271 0.354167 7.66797 0.5625 6.92578C0.770833 6.17708 1.0638 5.48047 1.44141 4.83594C1.82552 4.1849 2.28125 3.5957 2.80859 3.06836C3.34245 2.53451 3.93164 2.07878 4.57617 1.70117C5.22721 1.31706 5.92383 1.02083 6.66602 0.8125C7.41471 0.604167 8.19271 0.5 9 0.5C9.80729 0.5 10.582 0.604167 11.3242 0.8125C12.0729 1.02083 12.7695 1.31706 13.4141 1.70117C14.0651 2.07878 14.6543 2.53451 15.1816 3.06836C15.7155 3.5957 16.1712 4.1849 16.5488 4.83594C16.9329 5.48047 17.2292 6.17708 17.4375 6.92578C17.6458 7.66797 17.75 8.44271 17.75 9.25C17.75 10.0573 17.6458 10.8353 17.4375 11.584C17.2292 12.3262 16.9329 13.0228 16.5488 13.6738C16.1712 14.3184 15.7155 14.9076 15.1816 15.4414C14.6543 15.9688 14.0651 16.4245 13.4141 16.8086C12.7695 17.1862 12.0729 17.4792 11.3242 17.6875C10.582 17.8958 9.80729 18 9 18ZM9 1.75C7.96484 1.75 6.99154 1.94857 6.08008 2.3457C5.17513 2.73633 4.38086 3.27344 3.69727 3.95703C3.02018 4.63411 2.48307 5.42839 2.08594 6.33984C1.69531 7.24479 1.5 8.21484 1.5 9.25C1.5 10.2852 1.69531 11.2585 2.08594 12.1699C2.48307 13.0749 3.02018 13.8691 3.69727 14.5527C4.38086 15.2298 5.17513 15.7669 6.08008 16.1641C6.99154 16.5547 7.96484 16.75 9 16.75C10.0352 16.75 11.0052 16.5547 11.9102 16.1641C12.8216 15.7669 13.6159 15.2298 14.293 14.5527C14.9766 13.8691 15.5137 13.0749 15.9043 12.1699C16.3014 11.2585 16.5 10.2852 16.5 9.25C16.5 8.21484 16.3014 7.24479 15.9043 6.33984C15.5137 5.42839 14.9766 4.63411 14.293 3.95703C13.6159 3.27344 12.8216 2.73633 11.9102 2.3457C11.0052 1.94857 10.0352 1.75 9 1.75ZM9 9.25V4.25H7.75V10.5H12.75V9.25H9Z' fill='%23333333'/%3E%3C/svg%3E%0A - -# DeclinedIconUrl() -- data:image/svg+xml,%3Csvg width='10' height='10' viewBox='0 0 10 10' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6.25391 5.32471L9.87695 8.94775L8.99805 9.82666L5.375 6.20361L1.75195 9.82666L0.873047 8.94775L4.49609 5.32471L0.873047 1.70166L1.75195 0.822754L5.375 4.4458L8.99805 0.822754L9.87695 1.70166L6.25391 5.32471Z' fill='%23EB5757'/%3E%3C/svg%3E%0A +- data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAA00lEQVRIS+3UwRGCMBAF0L80YCuWYBvqwaBytxTvDpKL0oYl2AoNZJ0gOIDCLjDMeCDn5L/ssoQw8aKJ8zEDYof/q0XhMbXE4Gu8DsWrFxvUFeThwC4/x7BaRAVUwrPiYgstIgLVcEdu5YGAgwcAFdIJNMPtZfv0gIluSy3SCrSFlx9Xi/wEpPA+yBegDdciNaBvuAb5AEPDJSQHxoZ3IbSPUgNGAiDzc16OovYpaO6rTRchfFdwuJ85YDs2vFoJOTJJvDmJf/LQSspzMyB2cPIWvQDSDJ/nmveauQAAAABJRU5ErkJggg== # DislikeIconUrl() -- data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAyMSAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCjxwYXRoIGQ9Ik05LjgwNzUgMC41QzEwLjk2NjMgMC41IDEyLjA4OTQgMC43MjQ2MDkgMTMuMTc2NiAxLjE3MzgzQzEzLjY0NTQgMS4zNjI2MyAxNC4xMTQxIDEuNTA1ODYgMTQuNTgyOSAxLjYwMzUyQzE1LjA1ODEgMS43MDExNyAxNS41NDk3IDEuNzUgMTYuMDU3NSAxLjc1SDIwLjQzMjVWMTAuNUgxNi4zNjAyQzE1LjkzNzEgMTAuNSAxNS41MzY3IDEwLjU3ODEgMTUuMTU5MSAxMC43MzQ0QzE0Ljc4OCAxMC44OTA2IDE0LjQ1MjcgMTEuMTE4NSAxNC4xNTMyIDExLjQxOEw4LjA3ODk4IDE3LjQ4MjRDNy45MTYyMiAxNy42NDUyIDcuNzUzNDYgMTcuNzcyMSA3LjU5MDcgMTcuODYzM0M3LjQyNzk0IDE3Ljk1NDQgNy4yMjkzNyAxOCA2Ljk5NSAxOEM2Ljc4MDE1IDE4IDYuNTc4MzMgMTcuOTYwOSA2LjM4OTUzIDE3Ljg4MjhDNi4yMDA3MiAxNy43OTgyIDYuMDM0NzEgMTcuNjg0MiA1Ljg5MTQ4IDE3LjU0MUM1Ljc0ODI1IDE3LjM5NzggNS42MzQzMiAxNy4yMzE4IDUuNTQ5NjggMTcuMDQzQzUuNDcxNTYgMTYuODU0MiA1LjQzMjUgMTYuNjUyMyA1LjQzMjUgMTYuNDM3NUM1LjQzMjUgMTUuOTEwMiA1LjQ5MTA5IDE1LjQwODkgNS42MDgyOCAxNC45MzM2QzUuNzI1NDYgMTQuNDUxOCA1Ljg5Nzk5IDEzLjk3NjYgNi4xMjU4NSAxMy41MDc4QzYuMjU2MDYgMTMuMjI3OSA2LjM2Njc0IDEyLjk0NDcgNi40NTc4OSAxMi42NTgyQzYuNTQ5MDMgMTIuMzY1MiA2LjYxMDg4IDEyLjA2MjUgNi42NDM0MyAxMS43NUgyLjMwNzVDMi4wNTM1OSAxMS43NSAxLjgxMjcgMTEuNzAxMiAxLjU4NDg0IDExLjYwMzVDMS4zNTY5NyAxMS41MDU5IDEuMTU1MTUgMTEuMzcyNCAwLjk3OTM3IDExLjIwMzFDMC44MTAwOTkgMTEuMDMzOSAwLjY3NjYzNiAxMC44MzUzIDAuNTc4OTc5IDEwLjYwNzRDMC40ODEzMjMgMTAuMzc5NiAwLjQzMjQ5NSAxMC4xMzU0IDAuNDMyNDk1IDkuODc1QzAuNDMyNDk1IDkuNjY2NjcgMC40NjUwNDcgOS40NjgxIDAuNTMwMTUxIDkuMjc5M0wzLjAzMDE1IDEuNzc5M0MzLjE2MDM2IDEuMzk1MTggMy4zODgyMiAxLjA4NTk0IDMuNzEzNzUgMC44NTE1NjJDNC4wMzkyNyAwLjYxNzE4OCA0LjQwMzg1IDAuNSA0LjgwNzUgMC41SDkuODA3NVpNMTkuMTgyNSAzSDE2LjA1NzVDMTQuODkyMSAzIDEzLjc2OTEgMi43NzUzOSAxMi42ODg0IDIuMzI2MTdDMTEuNzUwOSAxLjk0MjA2IDEwLjc5MDYgMS43NSA5LjgwNzUgMS43NUg0LjgwNzVDNC42NzcyOSAxLjc1IDQuNTU2ODQgMS43ODkwNiA0LjQ0NjE3IDEuODY3MTlDNC4zMzU0OSAxLjk0NTMxIDQuMjU3MzYgMi4wNDk0OCA0LjIxMTc5IDIuMTc5NjlDNC4xNzkyNCAyLjI3MDgzIDQuMTE3MzkgMi40NDY2MSA0LjAyNjI1IDIuNzA3MDNDMy45NDE2MSAyLjk2NzQ1IDMuODM3NDQgMy4yODMyIDMuNzEzNzUgMy42NTQzQzMuNTkwMDUgNC4wMTg4OCAzLjQ1MzMzIDQuNDIyNTMgMy4zMDM1OSA0Ljg2NTIzQzMuMTUzODUgNS4zMDE0MyAzLjAwNDExIDUuNzQ0MTQgMi44NTQzNyA2LjE5MzM2QzIuNzA0NjMgNi42NDI1OCAyLjU1ODE1IDcuMDgyMDMgMi40MTQ5MiA3LjUxMTcyQzIuMjc4MiA3LjkzNDkgMi4xNTQ1IDguMzE5MDEgMi4wNDM4MiA4LjY2NDA2QzEuOTMzMTUgOS4wMDI2IDEuODQ1MjYgOS4yODI1NSAxLjc4MDE1IDkuNTAzOTFDMS43MTUwNSA5LjcxODc1IDEuNjgyNSA5Ljg0MjQ1IDEuNjgyNSA5Ljg3NUMxLjY4MjUgMTAuMDQ0MyAxLjc0NDM0IDEwLjE5MDggMS44NjgwNCAxMC4zMTQ1QzEuOTkxNzQgMTAuNDM4MiAyLjEzODIyIDEwLjUgMi4zMDc1IDEwLjVINy45MzI1QzcuOTMyNSAxMC44NDUxIDcuOTIyNzMgMTEuMTY3MyA3LjkwMzIgMTEuNDY2OEM3Ljg5MDE4IDExLjc1OTggNy44NTc2MyAxMi4wNDYyIDcuODA1NTQgMTIuMzI2MkM3Ljc1OTk3IDEyLjYwNjEgNy42OTE2MSAxMi44ODYxIDcuNjAwNDYgMTMuMTY2QzcuNTA5MzIgMTMuNDQ2IDcuMzg4ODggMTMuNzQyMiA3LjIzOTE0IDE0LjA1NDdDNy4wNTY4NCAxNC40MzIzIDYuOTE2ODcgMTQuODE5NyA2LjgxOTIxIDE1LjIxNjhDNi43MjgwNyAxNS42MDc0IDYuNjgyNSAxNi4wMTQzIDYuNjgyNSAxNi40Mzc1QzYuNjgyNSAxNi41Mjg2IDYuNzExNzkgMTYuNjAzNSA2Ljc3MDM5IDE2LjY2MjFDNi44Mjg5OCAxNi43MjA3IDYuOTAzODUgMTYuNzUgNi45OTUgMTYuNzVDNy4wMzQwNiAxNi43NSA3LjA2NjYxIDE2LjczNyA3LjA5MjY1IDE2LjcxMDlDNy4xMjUyIDE2LjY3ODQgNy4xNTQ1IDE2LjY0OTEgNy4xODA1NCAxNi42MjNMMTMuMjY0NSAxMC41MjkzQzEzLjQ3MjkgMTAuMzIxIDEzLjY5NDIgMTAuMTM4NyAxMy45Mjg2IDkuOTgyNDJDMTQuMTY5NSA5LjgyNjE3IDE0LjQyMzQgOS42OTI3MSAxNC42OTAzIDkuNTgyMDNDMTUuMjExMSA5LjM2MDY4IDE1Ljc2NzggOS4yNSAxNi4zNjAyIDkuMjVIMTkuMTgyNVYzWiIgZmlsbD0iIzYyNjRBNyIvPg0KPC9zdmc+DQo= - -# EventIconUrl() -- data:image/svg+xml,%3Csvg width='26' height='25' viewBox='0 0 26 25' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.125 1.625H26V24.375H0V1.625H4.875V0H6.5V1.625H19.5V0H21.125V1.625ZM4.875 3.25H1.625V6.5H24.375V3.25H21.125V4.875H19.5V3.25H6.5V4.875H4.875V3.25ZM1.625 22.75H24.375V8.125H1.625V22.75Z' fill='%234F4F4F'/%3E%3C/svg%3E%0A +- data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABn0lEQVRIS7WWS1LCQBCG/w5YxY54A24gNxBPYLbRBUkMVe7kBuoJdGkVMWQj2eIJxBvEE8gRcKclpK0JQjF588gs59HfzN/dfw2h4kEVx0cCYNmjPoPOs8AETIhotqjxq/ekT4suKAGsnm+AMQTwnnmQoIJxItYJFDB4zKAAFM7iZ/j35yMOCIgxfXZ0Le9mhjFUlaOGRgyNgQ6AZtp+BThbA4xrv6XM8QmC6Q50r+jp8XWj99Kus6Ku5kPgTQII7QF6COffx55nJp67LdCyfZYBPb+UPGVBEmBfedKgEuDQ8gigDDiwPBKgCnkkwL7yiPJUuNZlcHszFwR0oipaARikpXWjODQcXKR2tnk1eiSiGwBfAIJ4skMK+xR1Zb0xBnCaVYKuoyc8y7R9j4AugHvX0e9yvGu5JHJRn6O1uXEBGCJIHLAOXqLrc+3asv2JALqOLvwmGtsEXxpixkirrm2D5wIs2xe69l1Hjwxsl+BFgLU8uwYvBBCoycwBCMauNp6Zg3+JbqMUlaiWwjJN2yC6VMx7g8tEE5W17cp/FX8rZdBJBghO7QAAAABJRU5ErkJggg== # FeedbackIconUrl() -- data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTkiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAxOSAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCjxwYXRoIGQ9Ik05IDE2LjI1VjE3LjVINy43NVYxNi4yNUg5Wk04LjM3NSA2Ljg2NTIzQzguODA0NjkgNi44NjUyMyA5LjIwODMzIDYuOTQ5ODcgOS41ODU5NCA3LjExOTE0QzkuOTYzNTQgNy4yODE5IDEwLjI5MjMgNy41MDY1MSAxMC41NzIzIDcuNzkyOTdDMTAuODU4NyA4LjA3MjkyIDExLjA4MzMgOC40MDE2OSAxMS4yNDYxIDguNzc5M0MxMS40MTU0IDkuMTU2OSAxMS41IDkuNTYwNTUgMTEuNSA5Ljk5MDIzQzExLjUgMTAuMzgwOSAxMS40MzgyIDEwLjcyMjcgMTEuMzE0NSAxMS4wMTU2QzExLjE5MDggMTEuMzA4NiAxMS4wMzQ1IDExLjU3MjMgMTAuODQ1NyAxMS44MDY2QzEwLjY2MzQgMTIuMDM0NSAxMC40NjQ4IDEyLjI0NjEgMTAuMjUgMTIuNDQxNEMxMC4wMzUyIDEyLjYzMDIgOS44MzMzMyAxMi44MjIzIDkuNjQ0NTMgMTMuMDE3NkM5LjQ2MjI0IDEzLjIxMjkgOS4zMDkyNCAxMy40MTggOS4xODU1NSAxMy42MzI4QzkuMDYxODUgMTMuODQ3NyA5IDE0LjA5MTggOSAxNC4zNjUyVjE0Ljk5MDJINy43NVYxNC4zNjUyQzcuNzUgMTMuOTc0NiA3LjgxMTg1IDEzLjYzNjEgNy45MzU1NSAxMy4zNDk2QzguMDU5MjQgMTMuMDU2NiA4LjIxMjI0IDEyLjc5NjIgOC4zOTQ1MyAxMi41Njg0QzguNTgzMzMgMTIuMzM0IDguNzg1MTYgMTIuMTE5MSA5IDExLjkyMzhDOS4yMTQ4NCAxMS43Mjg1IDkuNDEzNDEgMTEuNTM2NSA5LjU5NTcgMTEuMzQ3N0M5Ljc4NDUxIDExLjE1MjMgOS45NDA3NiAxMC45NDczIDEwLjA2NDUgMTAuNzMyNEMxMC4xODgyIDEwLjUxNzYgMTAuMjUgMTAuMjcwMiAxMC4yNSA5Ljk5MDIzQzEwLjI1IDkuNzM2MzMgMTAuMjAxMiA5LjQ5NTQ0IDEwLjEwMzUgOS4yNjc1OEMxMC4wMDU5IDkuMDM5NzEgOS44NjkxNCA4Ljg0MTE1IDkuNjkzMzYgOC42NzE4OEM5LjUyNDA5IDguNDk2MDkgOS4zMjU1MiA4LjM1OTM4IDkuMDk3NjYgOC4yNjE3MkM4Ljg2OTc5IDguMTY0MDYgOC42Mjg5MSA4LjExNTIzIDguMzc1IDguMTE1MjNDOC4xMjEwOSA4LjExNTIzIDcuODgwMjEgOC4xNjQwNiA3LjY1MjM0IDguMjYxNzJDNy40MjQ0OCA4LjM1OTM4IDcuMjIyNjYgOC40OTYwOSA3LjA0Njg4IDguNjcxODhDNi44Nzc2IDguODQxMTUgNi43NDQxNCA5LjAzOTcxIDYuNjQ2NDggOS4yNjc1OEM2LjU0ODgzIDkuNDk1NDQgNi41IDkuNzM2MzMgNi41IDkuOTkwMjNINS4yNUM1LjI1IDkuNTYwNTUgNS4zMzEzOCA5LjE1NjkgNS40OTQxNCA4Ljc3OTNDNS42NTY5IDguNDAxNjkgNS44NzgyNiA4LjA3MjkyIDYuMTU4MiA3Ljc5Mjk3QzYuNDQ0NjYgNy41MDY1MSA2Ljc3NjY5IDcuMjgxOSA3LjE1NDMgNy4xMTkxNEM3LjUzODQxIDYuOTQ5ODcgNy45NDUzMSA2Ljg2NTIzIDguMzc1IDYuODY1MjNaTTEuNSAxOC43NUgxMC4wOTM4QzkuOTg5NTggMTkuMTQ3MSA5LjkzNzUgMTkuNTYzOCA5LjkzNzUgMjBIMC4yNVYwSDExLjEzODdMMTYuNSA1LjM2MTMzVjExLjEzMjhDMTYuMDg5OCAxMS4wMDI2IDE1LjY3MzIgMTAuOTM3NSAxNS4yNSAxMC45Mzc1VjYuMjVIMTAuMjVWMS4yNUgxLjVWMTguNzVaTTExLjUgNUgxNC4zNjEzTDExLjUgMi4xMzg2N1Y1Wk0xNy4wNDY5IDE2LjcyODVDMTcuMzQ2NCAxNi44OTEzIDE3LjYxNjUgMTcuMDg5OCAxNy44NTc0IDE3LjMyNDJDMTguMDk4MyAxNy41NTg2IDE4LjMwMzQgMTcuODE5IDE4LjQ3MjcgMTguMTA1NUMxOC42NDE5IDE4LjM4NTQgMTguNzcyMSAxOC42ODgyIDE4Ljg2MzMgMTkuMDEzN0MxOC45NTQ0IDE5LjMzMjcgMTkgMTkuNjYxNSAxOSAyMEgxNy43NUMxNy43NSAxOS42NTQ5IDE3LjY4NDkgMTkuMzMyNyAxNy41NTQ3IDE5LjAzMzJDMTcuNDI0NSAxOC43MjcyIDE3LjI0NTQgMTguNDYwMyAxNy4wMTc2IDE4LjIzMjRDMTYuNzg5NyAxOC4wMDQ2IDE2LjUyMjggMTcuODI1NSAxNi4yMTY4IDE3LjY5NTNDMTUuOTE3MyAxNy41NjUxIDE1LjU5NTEgMTcuNSAxNS4yNSAxNy41QzE0LjkwNDkgMTcuNSAxNC41Nzk0IDE3LjU2NTEgMTQuMjczNCAxNy42OTUzQzEzLjk3NCAxNy44MjU1IDEzLjcxMDMgMTguMDA0NiAxMy40ODI0IDE4LjIzMjRDMTMuMjU0NiAxOC40NjAzIDEzLjA3NTUgMTguNzI3MiAxMi45NDUzIDE5LjAzMzJDMTIuODE1MSAxOS4zMzI3IDEyLjc1IDE5LjY1NDkgMTIuNzUgMjBIMTEuNUMxMS41IDE5LjY2MTUgMTEuNTQ1NiAxOS4zMzI3IDExLjYzNjcgMTkuMDEzN0MxMS43Mjc5IDE4LjY4ODIgMTEuODU4MSAxOC4zODU0IDEyLjAyNzMgMTguMTA1NUMxMi4xOTY2IDE3LjgxOSAxMi40MDE3IDE3LjU1ODYgMTIuNjQyNiAxNy4zMjQyQzEyLjg4MzUgMTcuMDg5OCAxMy4xNTM2IDE2Ljg5MTMgMTMuNDUzMSAxNi43Mjg1QzEzLjIzMTggMTYuNTAwNyAxMy4wNTkyIDE2LjIzNyAxMi45MzU1IDE1LjkzNzVDMTIuODExOCAxNS42MzggMTIuNzUgMTUuMzI1NSAxMi43NSAxNUMxMi43NSAxNC42NTQ5IDEyLjgxNTEgMTQuMzMyNyAxMi45NDUzIDE0LjAzMzJDMTMuMDc1NSAxMy43MjcyIDEzLjI1NDYgMTMuNDYwMyAxMy40ODI0IDEzLjIzMjRDMTMuNzEwMyAxMy4wMDQ2IDEzLjk3NCAxMi44MjU1IDE0LjI3MzQgMTIuNjk1M0MxNC41Nzk0IDEyLjU2NTEgMTQuOTA0OSAxMi41IDE1LjI1IDEyLjVDMTUuNTk1MSAxMi41IDE1LjkxNzMgMTIuNTY1MSAxNi4yMTY4IDEyLjY5NTNDMTYuNTIyOCAxMi44MjU1IDE2Ljc4OTcgMTMuMDA0NiAxNy4wMTc2IDEzLjIzMjRDMTcuMjQ1NCAxMy40NjAzIDE3LjQyNDUgMTMuNzI3MiAxNy41NTQ3IDE0LjAzMzJDMTcuNjg0OSAxNC4zMzI3IDE3Ljc1IDE0LjY1NDkgMTcuNzUgMTVDMTcuNzUgMTUuMzI1NSAxNy42ODgyIDE1LjYzOCAxNy41NjQ1IDE1LjkzNzVDMTcuNDQwOCAxNi4yMzcgMTcuMjY4MiAxNi41MDA3IDE3LjA0NjkgMTYuNzI4NVpNMTUuMjUgMTYuMjVDMTUuNDI1OCAxNi4yNSAxNS41ODg1IDE2LjIxNzQgMTUuNzM4MyAxNi4xNTIzQzE1Ljg4OCAxNi4wODcyIDE2LjAxODIgMTUuOTk5MyAxNi4xMjg5IDE1Ljg4ODdDMTYuMjQ2MSAxNS43NzE1IDE2LjMzNzIgMTUuNjM4IDE2LjQwMjMgMTUuNDg4M0MxNi40Njc0IDE1LjMzODUgMTYuNSAxNS4xNzU4IDE2LjUgMTVDMTYuNSAxNC44MjQyIDE2LjQ2NzQgMTQuNjYxNSAxNi40MDIzIDE0LjUxMTdDMTYuMzM3MiAxNC4zNjIgMTYuMjQ2MSAxNC4yMzE4IDE2LjEyODkgMTQuMTIxMUMxNi4wMTgyIDE0LjAwMzkgMTUuODg4IDEzLjkxMjggMTUuNzM4MyAxMy44NDc3QzE1LjU4ODUgMTMuNzgyNiAxNS40MjU4IDEzLjc1IDE1LjI1IDEzLjc1QzE1LjA3NDIgMTMuNzUgMTQuOTExNSAxMy43ODI2IDE0Ljc2MTcgMTMuODQ3N0MxNC42MTIgMTMuOTEyOCAxNC40Nzg1IDE0LjAwMzkgMTQuMzYxMyAxNC4xMjExQzE0LjI1MDcgMTQuMjMxOCAxNC4xNjI4IDE0LjM2MiAxNC4wOTc3IDE0LjUxMTdDMTQuMDMyNiAxNC42NjE1IDE0IDE0LjgyNDIgMTQgMTVDMTQgMTUuMTc1OCAxNC4wMzI2IDE1LjMzODUgMTQuMDk3NyAxNS40ODgzQzE0LjE2MjggMTUuNjM4IDE0LjI1MDcgMTUuNzcxNSAxNC4zNjEzIDE1Ljg4ODdDMTQuNDc4NSAxNS45OTkzIDE0LjYxMiAxNi4wODcyIDE0Ljc2MTcgMTYuMTUyM0MxNC45MTE1IDE2LjIxNzQgMTUuMDc0MiAxNi4yNSAxNS4yNSAxNi4yNVoiIGZpbGw9IiM2MjY0QTciLz4NCjwvc3ZnPg0K +- data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAB4klEQVRIS7WWMVLCUBCG/w0psJIbGG6AJ5AbqJ2hMYEwY6c3QE4gds6QhFhoSrkBeAI9At4AKy0Y1tlA9JEJJCFjmjDzyPuy//77vxAAtJ2Q5V7oItj+0AyyniEF8ApgmvXAer0X3XNAVEDfd83bPIB1xZ8ADrMgZQB9BgwCLndBSgGkYtsJg12Q0gCRdBekDCC1XcR87nmtcby4L2CbGcRdG2bJBFhXoaEt6JrBDWLMNMKj65qpdl67Kz/A6j41NK5MAK4BkDkxABxtc01hQNsJ5U2NpY5m8GDORNeOE44ZdLJcfNWDwJ6rjdgHIBGyUfKqKu0t2UwlEfJLlGaTfwVY1qhW0Q8mDK4vF99GUiLHCZsLHbNYzlVc/aXpzixSNm9k5Y9aeW6A3XkeENF1cnMBa5XqHQgWQHOAB75r9gsPmjiEme9HXutGfcOVq3AqaxqRIb9VY+SuIM2CsbwqWKxNoEPPvTgu1INt50Sysmh2CDV/aDYKAdpOeKsB02RMxBIBNABzbdWLv9kpJZE0mPTqCwHNjQoZge+ZdqEK0iRqd8N3MAwQbuQDIHKUXhUT9OK+/FbAwJTyHPqED9ms03k+Y6KXLZEhcd5b6qirEuU57+U/0UBKT2QT3zWjPdRLjZMf3cKIc3Z+Pd0AAAAASUVORK5CYII= # LikeIconUrl() -- data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAyMSAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCjxwYXRoIGQ9Ik0xOC41NTc1IDYuMjVDMTguODExNCA2LjI1IDE5LjA1MjMgNi4yOTg4MyAxOS4yODAyIDYuMzk2NDhDMTkuNTA4IDYuNDk0MTQgMTkuNzA2NiA2LjYyNzYgMTkuODc1OSA2Ljc5Njg4QzIwLjA1MTYgNi45NjYxNSAyMC4xODg0IDcuMTY0NzEgMjAuMjg2IDcuMzkyNThDMjAuMzgzNyA3LjYyMDQ0IDIwLjQzMjUgNy44NjQ1OCAyMC40MzI1IDguMTI1QzIwLjQzMjUgOC4zMzMzMyAyMC4zOTk5IDguNTMxOSAyMC4zMzQ4IDguNzIwN0wxNy44MzQ4IDE2LjIyMDdDMTcuNzY5NyAxNi40MDk1IDE3LjY3ODYgMTYuNTg1MyAxNy41NjE0IDE2Ljc0OEMxNy40NDQyIDE2LjkwNDMgMTcuMzA3NSAxNy4wMzc4IDE3LjE1MTIgMTcuMTQ4NEMxNi45OTUgMTcuMjU5MSAxNi44MjI1IDE3LjM0NyAxNi42MzM3IDE3LjQxMjFDMTYuNDUxNCAxNy40NzA3IDE2LjI1OTMgMTcuNSAxNi4wNTc1IDE3LjVIMTEuMDU3NUM5Ljg5MjEzIDE3LjUgOC43NjkwOCAxNy4yNzU0IDcuNjg4MzUgMTYuODI2MkM3LjIxOTYgMTYuNjM3NCA2Ljc0NzYgMTYuNDk0MSA2LjI3MjM0IDE2LjM5NjVDNS44MDM1OSAxNi4yOTg4IDUuMzE1MzEgMTYuMjUgNC44MDc1IDE2LjI1SDAuNDMyNDk1VjcuNUg0LjUwNDc2QzQuOTI3OTQgNy41IDUuMzI1MDcgNy40MjE4OCA1LjY5NjE3IDcuMjY1NjJDNi4wNzM3NyA3LjEwOTM4IDYuNDEyMzEgNi44ODE1MSA2LjcxMTc5IDYuNTgyMDNMMTIuNzg2IDAuNTE3NTc4QzEyLjk0ODggMC4zNTQ4MTggMTMuMTExNSAwLjIyNzg2NSAxMy4yNzQzIDAuMTM2NzE5QzEzLjQzNzEgMC4wNDU1NzI5IDEzLjYzNTYgMCAxMy44NyAwQzE0LjA4NDggMCAxNC4yODY3IDAuMDQyMzE3NyAxNC40NzU1IDAuMTI2OTUzQzE0LjY2NDMgMC4yMDUwNzggMTQuODMwMyAwLjMxNTc1NSAxNC45NzM1IDAuNDU4OTg0QzE1LjExNjcgMC42MDIyMTQgMTUuMjI3NCAwLjc2ODIyOSAxNS4zMDU1IDAuOTU3MDMxQzE1LjM5MDIgMS4xNDU4MyAxNS40MzI1IDEuMzQ3NjYgMTUuNDMyNSAxLjU2MjVDMTUuNDMyNSAyLjA4OTg0IDE1LjM3MzkgMi41OTQ0IDE1LjI1NjcgMy4wNzYxN0MxNS4xMzk1IDMuNTUxNDMgMTQuOTY3IDQuMDIzNDQgMTQuNzM5MSA0LjQ5MjE5QzE0LjYwODkgNC43NzIxNCAxNC40OTgzIDUuMDU4NTkgMTQuNDA3MSA1LjM1MTU2QzE0LjMxNiA1LjYzODAyIDE0LjI1NDEgNS45Mzc1IDE0LjIyMTYgNi4yNUgxOC41NTc1Wk0xNi4wNTc1IDE2LjI1QzE2LjE4NzcgMTYuMjUgMTYuMzA4MSAxNi4yMTA5IDE2LjQxODggMTYuMTMyOEMxNi41Mjk1IDE2LjA1NDcgMTYuNjA3NiAxNS45NTA1IDE2LjY1MzIgMTUuODIwM0MxNi42ODU4IDE1LjcyOTIgMTYuNzQ0MyAxNS41NTM0IDE2LjgyOSAxNS4yOTNDMTYuOTIwMSAxNS4wMzI2IDE3LjAyNzUgMTQuNzIwMSAxNy4xNTEyIDE0LjM1NTVDMTcuMjc0OSAxMy45ODQ0IDE3LjQxMTcgMTMuNTgwNyAxNy41NjE0IDEzLjE0NDVDMTcuNzExMSAxMi43MDE4IDE3Ljg2MDkgMTIuMjU1OSAxOC4wMTA2IDExLjgwNjZDMTguMTYwNCAxMS4zNTc0IDE4LjMwMzYgMTAuOTIxMiAxOC40NDAzIDEwLjQ5OEMxOC41ODM1IDEwLjA2ODQgMTguNzEwNSA5LjY4NDI0IDE4LjgyMTIgOS4zNDU3QzE4LjkzMTggOS4wMDA2NSAxOS4wMTk3IDguNzIwNyAxOS4wODQ4IDguNTA1ODZDMTkuMTQ5OSA4LjI4NDUxIDE5LjE4MjUgOC4xNTc1NSAxOS4xODI1IDguMTI1QzE5LjE4MjUgNy45NTU3MyAxOS4xMjA2IDcuODA5MjQgMTguOTk2OSA3LjY4NTU1QzE4Ljg3MzMgNy41NjE4NSAxOC43MjY4IDcuNSAxOC41NTc1IDcuNUgxMi45MzI1QzEyLjkzMjUgNy4xNTQ5NSAxMi45MzkgNi44MzU5NCAxMi45NTIgNi41NDI5N0MxMi45NzE2IDYuMjQzNDkgMTMuMDA0MSA1Ljk1Mzc4IDEzLjA0OTcgNS42NzM4M0MxMy4xMDE4IDUuMzkzODggMTMuMTczNCA1LjExMzkzIDEzLjI2NDUgNC44MzM5OEMxMy4zNTU3IDQuNTU0MDQgMTMuNDc2MSA0LjI1NzgxIDEzLjYyNTkgMy45NDUzMUMxMy44MDgxIDMuNTY3NzEgMTMuOTQ0OSAzLjE4MzU5IDE0LjAzNiAyLjc5Mjk3QzE0LjEzMzcgMi4zOTU4MyAxNC4xODI1IDEuOTg1NjggMTQuMTgyNSAxLjU2MjVDMTQuMTgyNSAxLjQ3MTM1IDE0LjE1MzIgMS4zOTY0OCAxNC4wOTQ2IDEuMzM3ODlDMTQuMDM2IDEuMjc5MyAxMy45NjExIDEuMjUgMTMuODcgMS4yNUMxMy44MzA5IDEuMjUgMTMuNzk1MSAxLjI2NjI4IDEzLjc2MjYgMS4yOTg4M0MxMy43MzY1IDEuMzI0ODcgMTMuNzEwNSAxLjM1MDkxIDEzLjY4NDQgMS4zNzY5NUw3LjYwMDQ2IDcuNDcwN0M3LjM5MjEzIDcuNjc5MDQgNy4xNjc1MiA3Ljg2MTMzIDYuOTI2NjQgOC4wMTc1OEM2LjY5MjI2IDguMTczODMgNi40NDE2MSA4LjMwNzI5IDYuMTc0NjggOC40MTc5N0M1LjY1Mzg1IDguNjM5MzIgNS4wOTcyMSA4Ljc1IDQuNTA0NzYgOC43NUgxLjY4MjVWMTVINC44MDc1QzUuOTY2MzUgMTUgNy4wODk0IDE1LjIyNDYgOC4xNzY2NCAxNS42NzM4QzkuMTE0MTQgMTYuMDU3OSAxMC4wNzQ0IDE2LjI1IDExLjA1NzUgMTYuMjVIMTYuMDU3NVoiIGZpbGw9IiM2MjY0QTciLz4NCjwvc3ZnPg== - -# LocationIconUrl() -- data:image/svg+xml,%3Csvg width='8' height='12' viewBox='0 0 8 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.2435 0C4.58725 0 4.91928 0.0449219 5.23959 0.134766C5.5599 0.224609 5.85873 0.351562 6.13608 0.515625C6.41342 0.675781 6.66537 0.871094 6.89193 1.10156C7.1224 1.32813 7.31772 1.58008 7.47787 1.85742C7.64193 2.13477 7.76889 2.43359 7.85873 2.75391C7.94858 3.07422 7.9935 3.40625 7.9935 3.75C7.9935 4.01953 7.96029 4.27734 7.89389 4.52344C7.83139 4.76562 7.73959 5.00781 7.6185 5.25L4.2435 12L0.868497 5.25C0.747403 5.00781 0.653653 4.76562 0.587247 4.52344C0.524747 4.27734 0.493497 4.01953 0.493497 3.75C0.493497 3.40625 0.538419 3.07422 0.628263 2.75391C0.718106 2.43359 0.843106 2.13477 1.00326 1.85742C1.16733 1.58008 1.36264 1.32813 1.5892 1.10156C1.81967 0.871094 2.07358 0.675781 2.35092 0.515625C2.62826 0.351562 2.92709 0.224609 3.2474 0.134766C3.56772 0.0449219 3.89975 0 4.2435 0ZM7.03256 4.95703C7.03256 4.95312 7.03256 4.95117 7.03256 4.95117C7.03647 4.95117 7.03842 4.94922 7.03842 4.94531C7.13608 4.76172 7.21029 4.56836 7.26108 4.36523C7.31186 4.16211 7.33725 3.95703 7.33725 3.75C7.33725 3.32422 7.25522 2.92383 7.09115 2.54883C6.931 2.17383 6.71029 1.8457 6.42904 1.56445C6.14779 1.2832 5.81967 1.0625 5.44467 0.902344C5.06967 0.738281 4.66928 0.65625 4.2435 0.65625C3.81772 0.65625 3.41733 0.738281 3.04233 0.902344C2.66733 1.0625 2.3392 1.2832 2.05795 1.56445C1.7767 1.8457 1.55404 2.17383 1.38998 2.54883C1.22983 2.92383 1.14975 3.32422 1.14975 3.75C1.14975 3.95703 1.17514 4.16211 1.22592 4.36523C1.2767 4.56836 1.35092 4.76172 1.44858 4.94531C1.44858 4.94922 1.44858 4.95117 1.44858 4.95117C1.45248 4.95117 1.45443 4.95312 1.45443 4.95703L4.2435 10.5352L7.03256 4.95703ZM4.2435 1.54688C4.54818 1.54688 4.83334 1.60547 5.09897 1.72266C5.3685 1.83594 5.60287 1.99219 5.80209 2.19141C6.00131 2.39062 6.15756 2.625 6.27084 2.89453C6.38803 3.16016 6.44662 3.44531 6.44662 3.75C6.44662 4.05469 6.38803 4.3418 6.27084 4.61133C6.15756 4.87695 6.00131 5.10938 5.80209 5.30859C5.60287 5.50781 5.3685 5.66602 5.09897 5.7832C4.83334 5.89648 4.54818 5.95312 4.2435 5.95312C3.93881 5.95312 3.6517 5.89648 3.38217 5.7832C3.11654 5.66602 2.88412 5.50781 2.6849 5.30859C2.48568 5.10938 2.32748 4.87695 2.21029 4.61133C2.09701 4.3418 2.04037 4.05469 2.04037 3.75C2.04037 3.44531 2.09701 3.16016 2.21029 2.89453C2.32748 2.625 2.48568 2.39062 2.6849 2.19141C2.88412 1.99219 3.11654 1.83594 3.38217 1.72266C3.6517 1.60547 3.93881 1.54688 4.2435 1.54688ZM4.2435 5.29688C4.45834 5.29688 4.65951 5.25781 4.84701 5.17969C5.03451 5.09766 5.19858 4.98633 5.3392 4.8457C5.47983 4.70508 5.5892 4.54102 5.66733 4.35352C5.74936 4.16602 5.79037 3.96484 5.79037 3.75C5.79037 3.53516 5.74936 3.33398 5.66733 3.14648C5.5892 2.95898 5.47983 2.79492 5.3392 2.6543C5.19858 2.51367 5.03451 2.4043 4.84701 2.32617C4.65951 2.24414 4.45834 2.20312 4.2435 2.20312C4.02865 2.20312 3.82748 2.24414 3.63998 2.32617C3.45248 2.4043 3.28842 2.51367 3.14779 2.6543C3.00717 2.79492 2.89584 2.95898 2.81381 3.14648C2.73568 3.33398 2.69662 3.53516 2.69662 3.75C2.69662 3.96484 2.73568 4.16602 2.81381 4.35352C2.89584 4.54102 3.00717 4.70508 3.14779 4.8457C3.28842 4.98633 3.45248 5.09766 3.63998 5.17969C3.82748 5.25781 4.02865 5.29688 4.2435 5.29688Z' fill='%23333333'/%3E%3C/svg%3E - -# NoResponseIconUrl() -- data:image/svg+xml,%3Csvg width='8' height='12' viewBox='0 0 8 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.625 10.5H5V11.875H3.625V10.5ZM4.3125 0.1875C4.78516 0.1875 5.22917 0.280599 5.64453 0.466797C6.0599 0.645833 6.42155 0.892904 6.72949 1.20801C7.0446 1.51595 7.29167 1.8776 7.4707 2.29297C7.6569 2.70833 7.75 3.15234 7.75 3.625C7.75 4.05469 7.68197 4.43066 7.5459 4.75293C7.40983 5.06803 7.23796 5.35449 7.03027 5.6123C6.82975 5.87012 6.61133 6.10645 6.375 6.32129C6.13867 6.52897 5.91667 6.74023 5.70898 6.95508C5.50846 7.16276 5.34017 7.38835 5.2041 7.63184C5.06803 7.86816 5 8.13672 5 8.4375V9.125H3.625V8.4375C3.625 8.00781 3.69303 7.63542 3.8291 7.32031C3.96517 6.99805 4.13346 6.70801 4.33398 6.4502C4.54167 6.19238 4.76367 5.95964 5 5.75195C5.23633 5.53711 5.45475 5.32585 5.65527 5.11816C5.86296 4.90332 6.03483 4.67773 6.1709 4.44141C6.30697 4.20508 6.375 3.93294 6.375 3.625C6.375 3.33854 6.32129 3.06999 6.21387 2.81934C6.10645 2.56868 5.95964 2.35026 5.77344 2.16406C5.58724 1.97786 5.36882 1.83105 5.11816 1.72363C4.86751 1.61621 4.59896 1.5625 4.3125 1.5625C4.02604 1.5625 3.75749 1.61621 3.50684 1.72363C3.25618 1.83105 3.03776 1.97786 2.85156 2.16406C2.66536 2.35026 2.51855 2.56868 2.41113 2.81934C2.30371 3.06999 2.25 3.33854 2.25 3.625H0.875C0.875 3.15234 0.964518 2.70833 1.14355 2.29297C1.32259 1.8776 1.56608 1.51595 1.87402 1.20801C2.18913 0.892904 2.55436 0.645833 2.96973 0.466797C3.39225 0.280599 3.83984 0.1875 4.3125 0.1875Z' fill='%234F4F4F'/%3E%3C/svg%3E%0A +- data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABr0lEQVRIS7WVMVLCQBiF3x8oLHMDOUKOgDfQMlq4wTBjqSeQG0DpjCFso2m5gXACvYF6A6y0YPKcBRdDJisIccsk+77d97//j+Cfl+yjr7r3ARreTN+Gry6dnQFRnGkBzo2wkCfD4em4CrIT4Eec1xBRzDkZDU+vagGsxAVRehfqTpwZe3SahL29AWVxdZm1vDle8A3bC1AWN2LRxcNARFQ+/2xpHc12BlSJG7FOnM1Iapf/iwBsiqlLfGUP0KNwUtRhQ95sdJ0ApUa+1zjoQ6CqPI7jrJ0Dj84DEjodhpF0upkil3kuLoEEAH1XAc0Bms2DoAqQgwEgfQ84kk6cmXjdAJiWPp7kTejfutR1etPhHr2nNUCahBvrsale9r1NV5qE/uoGdQJM8xGYjJJQ1Q6w9tj5VDugaM+iD2yR67KoaE/tgLI9awAK2zYFBN/13dnztqmpSo99VuyDCj2ZgRxTZMz5x9Q10OzGsj2LG5iZ0pyjVVYn6edAW0SOARya9yZ6rlt5EJ9gYJorScLVd1s113Kw8ZhES8SMkOol5KD869wK8NdarM+0fXZvsfcLnqfwd9hdaCQAAAAASUVORK5CYII= # PlaceholderIconUrl() -- data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxOCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCjxwYXRoIGQ9Ik0xOCAwLjI1VjEzLjc1SDBWMC4yNUgxOFpNMTYuODc1IDEuMzc1SDEuMTI1VjUuODc1SDMuMzc1VjguMTI1SDEuMTI1VjEyLjYyNUgxMC4xMjVWMTAuMzc1SDEyLjM3NVYxMi42MjVIMTQuNjI1VjEwLjM3NUgxNi44NzVWMS4zNzVaTTUuNjI1IDUuODc1SDMuMzc1VjMuNjI1SDUuNjI1VjUuODc1Wk01LjYyNSA4LjEyNVY1Ljg3NUg3Ljg3NVY4LjEyNUg1LjYyNVpNMTAuMTI1IDguMTI1VjEwLjM3NUg3Ljg3NVY4LjEyNUgxMC4xMjVaTTE0LjYyNSA4LjEyNVYxMC4zNzVIMTIuMzc1VjguMTI1SDE0LjYyNVpNMTQuNjI1IDUuODc1SDEyLjM3NVYzLjYyNUgxNC42MjVWNS44NzVaIiBmaWxsPSIjNjI2NEE3Ii8+DQo8L3N2Zz4NCg== - -# RecurringIconUrl() -- data:image/svg+xml,%3Csvg width='14' height='14' viewBox='0 0 14 14' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10.8417 0.552974L11.6869 0.326507L12.5927 3.70725L9.21199 4.61311L8.98552 3.76793L10.841 3.27076C10.5127 2.94354 10.1482 2.66612 9.74748 2.43851C9.35119 2.20971 8.93207 2.03657 8.49012 1.91909C8.05258 1.80042 7.60218 1.73946 7.13894 1.7362C6.68009 1.73176 6.22397 1.79028 5.77056 1.91177C5.16309 2.07455 4.61194 2.3331 4.11713 2.68743C3.62114 3.03736 3.19979 3.45458 2.85308 3.93908C2.5096 4.41799 2.25103 4.94965 2.07735 5.53404C1.90808 6.11726 1.84583 6.72133 1.89061 7.34627L1.0144 7.40413C0.978593 6.91832 0.999895 6.44317 1.07831 5.97866C1.16112 5.51298 1.29181 5.06749 1.47037 4.6422C1.65216 4.21132 1.8764 3.80682 2.14308 3.42869C2.41417 3.04938 2.72347 2.70701 3.07097 2.40158C3.4173 2.09175 3.79861 1.82445 4.2149 1.59967C4.63002 1.37049 5.07308 1.1928 5.5441 1.06659C6.06353 0.927406 6.58805 0.859993 7.11764 0.86435C7.64605 0.864304 8.16177 0.931353 8.6648 1.0655C9.17105 1.19406 9.65404 1.38547 10.1138 1.63973C10.5779 1.89281 11.001 2.20406 11.3831 2.57349L10.8417 0.552974ZM8.48816 12.054C9.09564 11.8912 9.64738 11.6349 10.1434 11.2849C10.6382 10.9306 11.0573 10.514 11.4008 10.0351C11.7475 9.55057 12.0061 9.01891 12.1765 8.4401C12.3502 7.8557 12.4147 7.25104 12.3699 6.6261L13.2377 6.56341C13.292 7.29431 13.2193 8.00027 13.0196 8.68128C12.8188 9.35788 12.518 9.97868 12.1174 10.5437C11.7156 11.1043 11.223 11.5901 10.6396 12.0012C10.0606 12.4111 9.41895 12.7105 8.71463 12.8992C8.19079 13.0395 7.66247 13.1103 7.12965 13.1116C6.60007 13.1072 6.08434 13.0402 5.58249 12.9104C5.08064 12.7807 4.59985 12.5887 4.14013 12.3344C3.67922 12.0758 3.25773 11.7617 2.87566 11.3923L3.41705 13.4128L2.57187 13.6393L1.666 10.2585L5.04674 9.35265L5.27321 10.1978L3.41776 10.695C3.74724 11.0266 4.11013 11.3068 4.50641 11.5356C4.9071 11.7633 5.32622 11.9364 5.76377 12.0551C6.20014 12.1693 6.64774 12.2287 7.10659 12.2331C7.56983 12.2364 8.03036 12.1767 8.48816 12.054Z' fill='%23828282'/%3E%3C/svg%3E%0A - -# TentativeIconUrl() -- data:image/svg+xml,%3Csvg width='8' height='12' viewBox='0 0 8 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.625 10.5H5V11.875H3.625V10.5ZM4.3125 0.1875C4.78516 0.1875 5.22917 0.280599 5.64453 0.466797C6.0599 0.645833 6.42155 0.892904 6.72949 1.20801C7.0446 1.51595 7.29167 1.8776 7.4707 2.29297C7.6569 2.70833 7.75 3.15234 7.75 3.625C7.75 4.05469 7.68197 4.43066 7.5459 4.75293C7.40983 5.06803 7.23796 5.35449 7.03027 5.6123C6.82975 5.87012 6.61133 6.10645 6.375 6.32129C6.13867 6.52897 5.91667 6.74023 5.70898 6.95508C5.50846 7.16276 5.34017 7.38835 5.2041 7.63184C5.06803 7.86816 5 8.13672 5 8.4375V9.125H3.625V8.4375C3.625 8.00781 3.69303 7.63542 3.8291 7.32031C3.96517 6.99805 4.13346 6.70801 4.33398 6.4502C4.54167 6.19238 4.76367 5.95964 5 5.75195C5.23633 5.53711 5.45475 5.32585 5.65527 5.11816C5.86296 4.90332 6.03483 4.67773 6.1709 4.44141C6.30697 4.20508 6.375 3.93294 6.375 3.625C6.375 3.33854 6.32129 3.06999 6.21387 2.81934C6.10645 2.56868 5.95964 2.35026 5.77344 2.16406C5.58724 1.97786 5.36882 1.83105 5.11816 1.72363C4.86751 1.61621 4.59896 1.5625 4.3125 1.5625C4.02604 1.5625 3.75749 1.61621 3.50684 1.72363C3.25618 1.83105 3.03776 1.97786 2.85156 2.16406C2.66536 2.35026 2.51855 2.56868 2.41113 2.81934C2.30371 3.06999 2.25 3.33854 2.25 3.625H0.875C0.875 3.15234 0.964518 2.70833 1.14355 2.29297C1.32259 1.8776 1.56608 1.51595 1.87402 1.20801C2.18913 0.892904 2.55436 0.645833 2.96973 0.466797C3.39225 0.280599 3.83984 0.1875 4.3125 0.1875Z' fill='%23F2994A'/%3E%3C/svg%3E%0A - -# TimeSlotIconUrl() -- data:image/svg+xml,%3Csvg width='25' height='26' viewBox='0 0 25 26' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.125 6.5H24.375V26H3.25V6.5H6.5V4.875H8.125V6.5H19.5V4.875H21.125V6.5ZM22.75 8.125H21.125V9.75H22.75V8.125ZM19.5 8.125H8.125V9.75H19.5V8.125ZM6.5 8.125H4.875V9.75H6.5V8.125ZM4.875 24.375H22.75V11.375H4.875V24.375ZM3.25 4.875V3.25H1.625V21.125H0V1.625H3.25V0H4.875V1.625H16.25V0H17.875V1.625H21.125V3.25H17.875V4.875H16.25V3.25H4.875V4.875H3.25ZM8.125 17.875V16.25H9.75V17.875H8.125ZM11.375 17.875V16.25H13V17.875H11.375ZM14.625 17.875V16.25H16.25V17.875H14.625ZM17.875 17.875V16.25H19.5V17.875H17.875ZM8.125 21.125V19.5H9.75V21.125H8.125ZM11.375 21.125V19.5H13V21.125H11.375ZM14.625 21.125V19.5H16.25V21.125H14.625ZM11.375 14.625V13H13V14.625H11.375ZM14.625 14.625V13H16.25V14.625H14.625ZM17.875 14.625V13H19.5V14.625H17.875Z' fill='%234F4F4F'/%3E%3C/svg%3E%0A +- data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAA2klEQVRIS72VUQ6DIBBEh15MruGv4R5t70H6yzXwYqXBsJRgt4hxMfFH1x3mZXZVEL6UcH/ICyzGBUkXKgmsAPzFQhrARALPl50fVwosxsV+9/ECxjj9Bqbo5gas1s5/0XH1rAN6kXA10XH1YwUC4NU3RfVsbDHmcCVEMTGxxhPS2kEZoIylF1fZZLhAHrTSZmk/nW6HqztF3LC10lKnrnvQxAU4XMBuI28YA6BVvNOyaw7Ur4RwWMraMQLVoDWXKtlPKPKQls+pCTloNj1bIP/LPHuyo9+JO/gA+LHgsWDt7PgAAAAASUVORK5CYII= # LeftArrowActiveIconUrl() -- data:image/svg+xml,%3Csvg width='9' height='14' viewBox='0 0 9 14' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0.672851 7L7.50195 0.170898L8.3291 0.998047L2.32715 7L8.3291 13.002L7.50195 13.8291L0.672851 7Z' fill='%236264A7'/%3E%3C/svg%3E%0A +- data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAYAAADgKtSgAAAAvklEQVRIS63VuQ0CMRCF4Td9oG0GeiBAWmGOfEtwERCBA4QEVEMBdIGIbaMNuDaw58AFfP84GJvwh7NYXdqwmx6JKH9zZLXd8hSIaA7kbTO6dd779DJN+AfGIyKND/vZFcB7ejVeg/vpVTgHVuFcWIxLYBEuhdm4BmbhWriKW+AiboXL+PockOCI6B4RJ8Pt4zwbxSVyxkB1Qy2BKt5fXxtg4doAG9cERLg0IMYlARXODahxTsCE/wbyZvhBPwHs0tQYcHdvOQAAAABJRU5ErkJggg== # LeftArrowInactiveIconUrl() -- data:image/svg+xml,%3Csvg width='9' height='14' viewBox='0 0 9 14' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0.672851 7L7.50195 0.170898L8.3291 0.998047L2.32715 7L8.3291 13.002L7.50195 13.8291L0.672851 7Z' fill='%23E0E0E0'/%3E%3C/svg%3E%0A +- data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAApUlEQVRIS63W0Q2AIAxFUexkkg6iI7iKG7gIzOAoOgHGDxNjDLy+wgD3BJICQ+iwUkqzqm5/qcHbzzlvpZQphLCq6vLtuYBX/BSRMca4dwOQ+I1RO0DjFGCJmwFr3AQwcRhg4xDgiTcBb7wK9IijwCEi8W9KkWumOmivXdBIc5K9SBO4j8GDQIAHgQEWMQEMYgasCAVYEBpAERfwQfo/+s9VUfu2XPlwzBl2p0EBAAAAAElFTkSuQmCC # RightArrowActiveIconUrl() -- data:image/svg+xml,%3Csvg width='9' height='14' viewBox='0 0 9 14' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8.32715 7L1.49805 13.8291L0.670898 13.002L6.67285 7L0.670898 0.998047L1.49805 0.170898L8.32715 7Z' fill='%236264A7'/%3E%3C/svg%3E%0A +- data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAu0lEQVRIS63WOxKCMBCA4V08gB7F66QLOtRexV7lUajH0JvFYRy6bPZJSTL/B8UGEIjrNLzzeEsztS69j7WN/fl1RcQLFJjHR+qlsdq+KpCH57Er3RcA9l6kCqxPEoWQQBTSBCIQFvAiIsCDiAErogIsiBrQIiZAgziB3QegHArAMt1TFh8V3Nnzn3I+vnbUb6CJqwFtXAVY4mLAGhcBnjgLeONNICJOAlFxEtg++q0J5YZxWycHLeq35QcDlKoZpvu77gAAAABJRU5ErkJggg== # RightArrowInactiveIconUrl() -- data:image/svg+xml,%3Csvg width='9' height='14' viewBox='0 0 9 14' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8.32715 7L1.49805 13.8291L0.670898 13.002L6.67285 7L0.670898 0.998047L1.49805 0.170898L8.32715 7Z' fill='%23E0E0E0'/%3E%3C/svg%3E%0A - -# EventListIconUrl() -- data:image/svg+xml,%3Csvg width='30' height='29' viewBox='0 0 30 29' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M26 1.625V11.375C25.5091 10.8926 24.9674 10.4906 24.375 10.1689V8.125H1.625V22.75H10.6006C10.4567 22.8939 10.3298 23.0251 10.2197 23.1436C10.1097 23.2536 10.0081 23.3678 9.91504 23.4863C9.8304 23.6048 9.75 23.736 9.67383 23.8799C9.59766 24.0153 9.52995 24.1803 9.4707 24.375H0V1.625H4.875V0H6.5V1.625H19.5V0H21.125V1.625H26ZM24.375 6.5V3.25H21.125V4.875H19.5V3.25H6.5V4.875H4.875V3.25H1.625V6.5H24.375ZM21.125 11.375C21.7936 11.375 22.4242 11.502 23.0166 11.7559C23.609 12.0098 24.1253 12.361 24.5654 12.8096C25.0055 13.2497 25.3525 13.766 25.6064 14.3584C25.8604 14.9508 25.9873 15.5814 25.9873 16.25C25.9873 16.9271 25.8604 17.5618 25.6064 18.1543C25.3525 18.7383 25.0055 19.2546 24.5654 19.7031C24.1253 20.1432 23.609 20.4902 23.0166 20.7441C22.4242 20.998 21.7936 21.125 21.125 21.125C20.6172 21.125 20.1221 21.0488 19.6396 20.8965C19.1657 20.7357 18.7214 20.5072 18.3066 20.2109L12.7588 25.7588C12.598 25.9196 12.4076 26 12.1875 26C11.9674 26 11.777 25.9196 11.6162 25.7588C11.4554 25.598 11.375 25.4076 11.375 25.1875C11.375 24.9674 11.4554 24.777 11.6162 24.6162L17.1641 19.0684C16.8678 18.6536 16.6393 18.2093 16.4785 17.7354C16.3262 17.2529 16.25 16.7578 16.25 16.25C16.25 15.5814 16.377 14.9508 16.6309 14.3584C16.8848 13.766 17.2318 13.2497 17.6719 12.8096C18.1204 12.361 18.6367 12.0098 19.2207 11.7559C19.8132 11.502 20.4479 11.375 21.125 11.375ZM21.125 19.5C21.5736 19.5 21.9925 19.4154 22.3818 19.2461C22.7796 19.0768 23.1266 18.8441 23.4229 18.5479C23.7191 18.2516 23.9518 17.9089 24.1211 17.5195C24.2904 17.1217 24.375 16.6986 24.375 16.25C24.375 15.8014 24.2904 15.3825 24.1211 14.9932C23.9518 14.5954 23.7191 14.2484 23.4229 13.9521C23.1266 13.6559 22.7796 13.4232 22.3818 13.2539C21.9925 13.0846 21.5736 13 21.125 13C20.6764 13 20.2533 13.0846 19.8555 13.2539C19.4661 13.4232 19.1234 13.6559 18.8271 13.9521C18.5309 14.2484 18.2982 14.5954 18.1289 14.9932C17.9596 15.3825 17.875 15.8014 17.875 16.25C17.875 16.6986 17.9596 17.1217 18.1289 17.5195C18.2982 17.9089 18.5309 18.2516 18.8271 18.5479C19.1234 18.8441 19.4661 19.0768 19.8555 19.2461C20.2533 19.4154 20.6764 19.5 21.125 19.5Z' fill='%23201F1E'/%3E%3C/svg%3E%0A - -# TitleIconUrl() -- data:image/svg+xml,%3Csvg width='8' height='12' viewBox='0 0 28 35' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.375 1.875H30V28.125H0V1.875H5.625V0H7.5V1.875H22.5V0H24.375V1.875ZM5.625 3.75H1.875V7.5H28.125V3.75H24.375V5.625H22.5V3.75H7.5V5.625H5.625V3.75ZM1.875 26.25H28.125V9.375H1.875V26.25Z' fill='%23333333'/%3E%3C/svg%3E%0A +- data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAs0lEQVRIS63WWw3DMAyF4WMGoxAEHYSNwSCMYSF0EMrAFDoEniqtb3HiWx+j6P+USrkQlI+Z3wD21tquzbGMU28SM7+IaAVwiMgzg2jAjYg+AJYs0gXOVTFzCaICVcgQqECmQBYxARnEDEQRFxBB3IAXCQEeJAtsAO4AviLy6B0pIeC/y6fxc6VuwBN3A964C4jEzUA0bgIy8SmQjQ+BirgKVMVHwHXpqzvU8qKY/aKSZ8sP00bQGScYVTIAAAAASUVORK5CYII= diff --git a/generators/generator-bot-enterprise-assistant/generators/app/templates/language-generation/en-us/icons.en-us.lg b/generators/generator-bot-enterprise-assistant/generators/app/templates/language-generation/en-us/icons.en-us.lg index 14ff063ef9..c4542f91b7 100644 --- a/generators/generator-bot-enterprise-assistant/generators/app/templates/language-generation/en-us/icons.en-us.lg +++ b/generators/generator-bot-enterprise-assistant/generators/app/templates/language-generation/en-us/icons.en-us.lg @@ -1,5 +1,5 @@ # BotTourIconUrl() -- data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCjxwYXRoIGQ9Ik0yMCAyMEwxNC42NTgyIDE3LjMyNDJDMTQuMTU2OSAxNy40NDE0IDEzLjY0NTggMTcuNSAxMy4xMjUgMTcuNUMxMi40ODA1IDE3LjUgMTEuODUyMiAxNy40MTIxIDExLjI0MDIgMTcuMjM2M0MxMC42MzQ4IDE3LjA2MDUgMTAuMDY1MSAxNi44MTMyIDkuNTMxMjUgMTYuNDk0MUM5LjAwMzkxIDE2LjE2ODYgOC41MjIxNCAxNS43NzQ3IDguMDg1OTQgMTUuMzEyNUM3LjY1NjI1IDE0Ljg1MDMgNy4yOTQ5MiAxNC4zMjk0IDcuMDAxOTUgMTMuNzVDNi43MjIwMSAxMy43NSA2LjQ0NTMxIDEzLjczNyA2LjE3MTg4IDEzLjcxMDlDNS44OTg0NCAxMy42ODQ5IDUuNjI1IDEzLjYzOTMgNS4zNTE1NiAxMy41NzQyTDAgMTYuMjVMMi4xNzc3MyAxMS44ODQ4QzEuNDgxMTIgMTEuMjMzNyAwLjk0NDAxIDEwLjQ3NTMgMC41NjY0MDYgOS42MDkzOEMwLjE4ODgwMiA4Ljc0MzQ5IDAgNy44MzIwMyAwIDYuODc1QzAgNi4yNDM0OSAwLjA4MTM4MDIgNS42MzQ3NyAwLjI0NDE0MSA1LjA0ODgzQzAuNDA2OTAxIDQuNDYyODkgMC42MzgwMjEgMy45MTYwMiAwLjkzNzUgMy40MDgyQzEuMjM2OTggMi44OTM4OCAxLjU5NTA1IDIuNDI4MzkgMi4wMTE3MiAyLjAxMTcyQzIuNDI4MzkgMS41OTUwNSAyLjg5MDYyIDEuMjM2OTggMy4zOTg0NCAwLjkzNzVDMy45MTI3NiAwLjYzODAyMSA0LjQ2Mjg5IDAuNDA2OTAxIDUuMDQ4ODMgMC4yNDQxNDFDNS42MzQ3NyAwLjA4MTM4MDIgNi4yNDM0OSAwIDYuODc1IDBDNy41MTk1MyAwIDguMTQ0NTMgMC4wODc4OTA2IDguNzUgMC4yNjM2NzJDOS4zNjE5OCAwLjQzOTQ1MyA5LjkzMTY0IDAuNjkwMTA0IDEwLjQ1OSAxLjAxNTYyQzEwLjk5MjggMS4zMzQ2NCAxMS40NzQ2IDEuNzI4NTIgMTEuOTA0MyAyLjE5NzI3QzEyLjM0MDUgMi42NTk1MSAxMi43MDUxIDMuMTc3MDggMTIuOTk4IDMuNzVDMTMuNjQyNiAzLjc1IDE0LjI2MTEgMy44MzEzOCAxNC44NTM1IDMuOTk0MTRDMTUuNDUyNSA0LjE1MDM5IDE2LjAwOTEgNC4zNzUgMTYuNTIzNCA0LjY2Nzk3QzE3LjA0NDMgNC45NjA5NCAxNy41MTYzIDUuMzEyNSAxNy45Mzk1IDUuNzIyNjZDMTguMzY5MSA2LjEzMjgxIDE4LjczNyA2LjU5NTA1IDE5LjA0MyA3LjEwOTM4QzE5LjM0OSA3LjYxNzE5IDE5LjU4MzMgOC4xNjczMiAxOS43NDYxIDguNzU5NzdDMTkuOTE1NCA5LjM1MjIxIDIwIDkuOTczOTYgMjAgMTAuNjI1QzIwIDExLjU4MiAxOS44MTEyIDEyLjQ5NjcgMTkuNDMzNiAxMy4zNjkxQzE5LjA1NiAxNC4yMzUgMTguNTE4OSAxNC45OTM1IDE3LjgyMjMgMTUuNjQ0NUwyMCAyMFpNMTMuNzUgMTVWMTMuNzVIMTIuNVYxNUgxMy43NVpNNS4zMTI1IDEyLjI4NTJDNS41MDc4MSAxMi4zMzA3IDUuNzAzMTIgMTIuMzczIDUuODk4NDQgMTIuNDEyMUM2LjEwMDI2IDEyLjQ1MTIgNi4zMDIwOCAxMi40NzcyIDYuNTAzOTEgMTIuNDkwMkM2LjMzNDY0IDExLjg3MTcgNi4yNSAxMS4yNSA2LjI1IDEwLjYyNUM2LjI1IDkuODE3NzEgNi4zODM0NiA5LjA0NjIyIDYuNjUwMzkgOC4zMTA1NUM2LjkxNzMyIDcuNTc0ODcgNy4yODg0MSA2LjkxMDgxIDcuNzYzNjcgNi4zMTgzNkM4LjI0NTQ0IDUuNzE5NCA4LjgxNTEgNS4yMTE1OSA5LjQ3MjY2IDQuNzk0OTJDMTAuMTM2NyA0LjM3ODI2IDEwLjg2MjYgNC4wODIwMyAxMS42NTA0IDMuOTA2MjVDMTEuMzkgMy40OTYwOSAxMS4wODQgMy4xMjgyNiAxMC43MzI0IDIuODAyNzNDMTAuMzg3NCAyLjQ3MDcgMTAuMDA5OCAyLjE5MDc2IDkuNTk5NjEgMS45NjI4OUM5LjE4OTQ1IDEuNzI4NTIgOC43NTMyNiAxLjU1MjczIDguMjkxMDIgMS40MzU1NUM3LjgzNTI5IDEuMzExODUgNy4zNjMyOCAxLjI1IDYuODc1IDEuMjVDNi4xMDAyNiAxLjI1IDUuMzcxMDkgMS4zOTk3NCA0LjY4NzUgMS42OTkyMkM0LjAwMzkxIDEuOTkyMTkgMy40MDgyIDIuMzkyNTggMi45MDAzOSAyLjkwMDM5QzIuMzkyNTggMy40MDgyIDEuOTg4OTMgNC4wMDM5MSAxLjY4OTQ1IDQuNjg3NUMxLjM5NjQ4IDUuMzcxMDkgMS4yNSA2LjEwMDI2IDEuMjUgNi44NzVDMS4yNSA3LjY2OTI3IDEuNDAyOTkgOC40MTQ3MSAxLjcwODk4IDkuMTExMzNDMi4wMTQ5NyA5LjgwNzk0IDIuNDU3NjggMTAuNDI5NyAzLjAzNzExIDEwLjk3NjZMMy43MjA3IDExLjYxMTNDMy41NzA5NiAxMS45MjM4IDMuNDE3OTcgMTIuMjMzMSAzLjI2MTcyIDEyLjUzOTFDMy4xMDU0NyAxMi44Mzg1IDIuOTQ5MjIgMTMuMTQ0NSAyLjc5Mjk3IDEzLjQ1N0w1LjE5NTMxIDEyLjI1NTlMNS4zMTI1IDEyLjI4NTJaTTExLjg3NSA4Ljc1QzExLjg3NSA4LjU3NDIyIDExLjkwNzYgOC40MTE0NiAxMS45NzI3IDguMjYxNzJDMTIuMDM3OCA4LjExMTk4IDEyLjEyNTcgNy45ODE3NyAxMi4yMzYzIDcuODcxMDlDMTIuMzUzNSA3Ljc1MzkxIDEyLjQ4NyA3LjY2Mjc2IDEyLjYzNjcgNy41OTc2NkMxMi43ODY1IDcuNTMyNTUgMTIuOTQ5MiA3LjUgMTMuMTI1IDcuNUMxMy4zMDA4IDcuNSAxMy40NjM1IDcuNTMyNTUgMTMuNjEzMyA3LjU5NzY2QzEzLjc2MyA3LjY2Mjc2IDEzLjg5MzIgNy43NTM5MSAxNC4wMDM5IDcuODcxMDlDMTQuMTIxMSA3Ljk4MTc3IDE0LjIxMjIgOC4xMTE5OCAxNC4yNzczIDguMjYxNzJDMTQuMzQyNCA4LjQxMTQ2IDE0LjM3NSA4LjU3NDIyIDE0LjM3NSA4Ljc1QzE0LjM3NSA4LjkzODggMTQuMzI5NCA5LjExMTMzIDE0LjIzODMgOS4yNjc1OEMxNC4xNDcxIDkuNDE3MzIgMTQuMDI5OSA5LjU2MzggMTMuODg2NyA5LjcwNzAzQzEzLjc1IDkuODQzNzUgMTMuNjAwMyA5Ljk4Njk4IDEzLjQzNzUgMTAuMTM2N0MxMy4yNzQ3IDEwLjI3OTkgMTMuMTIxNyAxMC40NDI3IDEyLjk3ODUgMTAuNjI1QzEyLjg0MTggMTAuODAwOCAxMi43Mjc5IDExLjAwMjYgMTIuNjM2NyAxMS4yMzA1QzEyLjU0NTYgMTEuNDU4MyAxMi41IDExLjcyNTMgMTIuNSAxMi4wMzEyVjEyLjVIMTMuNzVWMTIuMjA3QzEzLjc1IDEyLjAzNzggMTMuNzYzIDExLjg3ODMgMTMuNzg5MSAxMS43Mjg1QzEzLjgyMTYgMTEuNTcyMyAxMy45MDMgMTEuNDI5IDE0LjAzMzIgMTEuMjk4OEMxNC4yMjg1IDExLjEwMzUgMTQuNDIwNiAxMC45MTggMTQuNjA5NCAxMC43NDIyQzE0LjgwNDcgMTAuNTU5OSAxNC45NzcyIDEwLjM3MTEgMTUuMTI3IDEwLjE3NThDMTUuMjc2NyA5Ljk4MDQ3IDE1LjM5NzEgOS43Njg4OCAxNS40ODgzIDkuNTQxMDJDMTUuNTc5NCA5LjMxMzE1IDE1LjYyNSA5LjA0OTQ4IDE1LjYyNSA4Ljc1QzE1LjYyNSA4LjQwNDk1IDE1LjU1OTkgOC4wODI2OCAxNS40Mjk3IDcuNzgzMkMxNS4yOTk1IDcuNDc3MjEgMTUuMTIwNCA3LjIxMDI5IDE0Ljg5MjYgNi45ODI0MkMxNC42NjQ3IDYuNzU0NTYgMTQuMzk3OCA2LjU3NTUyIDE0LjA5MTggNi40NDUzMUMxMy43OTIzIDYuMzE1MSAxMy40NzAxIDYuMjUgMTMuMTI1IDYuMjVDMTIuNzc5OSA2LjI1IDEyLjQ1NDQgNi4zMTUxIDEyLjE0ODQgNi40NDUzMUMxMS44NDkgNi41NzU1MiAxMS41ODUzIDYuNzU0NTYgMTEuMzU3NCA2Ljk4MjQyQzExLjEyOTYgNy4yMTAyOSAxMC45NTA1IDcuNDc3MjEgMTAuODIwMyA3Ljc4MzJDMTAuNjkwMSA4LjA4MjY4IDEwLjYyNSA4LjQwNDk1IDEwLjYyNSA4Ljc1SDExLjg3NVoiIGZpbGw9IiM2MjY0QTciLz4NCjwvc3ZnPg0K +- data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAACgklEQVRIS62VS3LaQBCG/1ZIKlmFGxhOYHICww289DiLSDyqsjM5ge0TBO9ShZC0CVrGnMBwgogTmCPglV0VUKd6JIWREI9UeXbSqPvr198iFI79NaxZK7oioMnghr5mLGBRxIzAdy8mRZt9z2RetrvhDYBr/Y4wB+M+8Y+aAAGcECha09oJhp+jY0D/AE43DAj4QsBkXUE/+KEWRQftXmiDMQCIY1q3joFogBH5recqyWLnSUqISENWz/UgcJZ7S5QaPErkI1edH5N2mokPonswR0w89YeXszJbcjrjARFdxRXUy8piGnU643MGfQehtu2MlgAP4tXLnZkVtXthBMbSc5U0cefJenQ4Q1qa/aF2N2QAe2tf6jydsnTCpLQfN/AN5CBAl4Xolxk5M9/5o8t+9s7u/WxYbE1NiIzzyL34JIAFA1PfVXZZ+mkJT427J89V1QRs+QyOfFe12t1xH9If8xAc0ukzzryRqhcBaWS/c+9F1YQADDtrtgW05JsYeMj7x0SaLOLxQXC8oQryyi6JqhgFYe4NVSO3BbJvGItMaFOATovqLDXKhziP/7w08fZdzeI3DwBXt/kAsiYR6NHcM4cAoh2s4+ou5wLb7KKC4LrdUOuiWFczQs9VMiSbBbk9JTMNsG2/alU+PDJ4QoQpYlyXq/WwzPJf8LfCstNylzrO0kmRlSCZnO1wfbvn/imuoEFZ9JljC7hxXSWi0Se5fy+r21BqcnegRHo7ZDVsFh2bEZcpdV+xzM1MYnzMj0NDYInATFWXctLNoMWX+2Ue00JZESCyGZD/9Ym2SRZfDizqllL/N2BXEDLWMSAjqwciy+LVABnYBEkWrw4ogJp/AQMmQ2ugfsRmAAAAAElFTkSuQmCC # CalendarIconUrl() - data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAA0UlEQVRIS+2VQRKDIAxFH72YXoOtwz2s92Dceg17sdphplgFUWKti7aZYcEk4fPDT1AEZkxX3qForW5C39q+Mt31Ar21up/GqTDJBQJ1a3Xk2wAYgKa12uWPpirTOcfHzAPcAE+tBAp3GyFqDUTneICR2lEl8udEAMJbJ8NnAAP06lWiQzAGKJVbZz1yJK93aYjeIGyipWYMY6QAsyZaUtqz1JEaz1HRtMVz6OfEJEskoT+dV/8S/YCKUh9X1rhOKWTt1xN18p659EXjeg99Sc4D2ncsBK5MFAkAAAAASUVORK5CYII= @@ -14,16 +14,16 @@ - data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAACbklEQVRIS6WVQXLaQBBFfwNeh5zA8g3wDcwJDLuILAJCVGVncgLbJzDZpQpJyIugZcgJQk4QcoIoJzBemaqI6VRjjTwICKBoq+n/uqd/9xAKfk4vahPTFYNrAM3BPFEnuA0/2bEpSUX0O24UEvAOwG9mnpSILAYuBaRoWQ+Hb2da92iAZA7GiIH7kWe3tVC797lW4tIUjIfAt8/+BzADoxp4tpWvXsOJuen7rYn8P74CN2Jm/jjyW/08oP0+skoJfgG4DTz7pihgTsDU9+xGHuC60YUCvoHQCYZ2WAigG6xInZvNFLGuG02k2aqCM+2mo68ovYYZQEys+ssT+l5JYCmiKzBLVdn1FKpAgnQzNyzOiE0H7QRIluUlXTJzlZhj32/dazFD/JGBCQHx6hyRZH9KoNkyeaqHYWe+FdDpjgck5ZofI1Yl1SwrspjoCwg/VRmN/NQ67rgP0J1AfO/N+QZAixPwdVlBXwTSjAdy589MflTJoqYz3JiFFKKdlDVZe1jE8xZMp/THKiNjiHatGceNYgI9SBUZQJdXAuqeZ0/zwZkFk8XrXdnrGH0TgWeTAYhk8q5ND5sQ7X8J2rcg5TbEupJodrjbHTfSBmZTaApJ2SDMg6Fd2wcw/69l4/SiGZhO8ys3W8/GCjgUsgbIVi7wioFVH4hhgSD7fm09FwI8W5LuAK7mBQTIyaK5r8H5uJcmpw+JDBEpvtH7PLWvPCzX+Sk9pIoVIPO5TOifxcW2LLUJpJKRZ9cPEc8mOVvBxprdJqD9vcvK22JWFThutPMRMYNeJpo/BF5rcEgVGjAFIdSv0L8CHTc6+Kzo/AV9OWMoort65QAAAABJRU5ErkJggg== # DislikeIconUrl() -- data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAyMSAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCjxwYXRoIGQ9Ik05LjgwNzUgMC41QzEwLjk2NjMgMC41IDEyLjA4OTQgMC43MjQ2MDkgMTMuMTc2NiAxLjE3MzgzQzEzLjY0NTQgMS4zNjI2MyAxNC4xMTQxIDEuNTA1ODYgMTQuNTgyOSAxLjYwMzUyQzE1LjA1ODEgMS43MDExNyAxNS41NDk3IDEuNzUgMTYuMDU3NSAxLjc1SDIwLjQzMjVWMTAuNUgxNi4zNjAyQzE1LjkzNzEgMTAuNSAxNS41MzY3IDEwLjU3ODEgMTUuMTU5MSAxMC43MzQ0QzE0Ljc4OCAxMC44OTA2IDE0LjQ1MjcgMTEuMTE4NSAxNC4xNTMyIDExLjQxOEw4LjA3ODk4IDE3LjQ4MjRDNy45MTYyMiAxNy42NDUyIDcuNzUzNDYgMTcuNzcyMSA3LjU5MDcgMTcuODYzM0M3LjQyNzk0IDE3Ljk1NDQgNy4yMjkzNyAxOCA2Ljk5NSAxOEM2Ljc4MDE1IDE4IDYuNTc4MzMgMTcuOTYwOSA2LjM4OTUzIDE3Ljg4MjhDNi4yMDA3MiAxNy43OTgyIDYuMDM0NzEgMTcuNjg0MiA1Ljg5MTQ4IDE3LjU0MUM1Ljc0ODI1IDE3LjM5NzggNS42MzQzMiAxNy4yMzE4IDUuNTQ5NjggMTcuMDQzQzUuNDcxNTYgMTYuODU0MiA1LjQzMjUgMTYuNjUyMyA1LjQzMjUgMTYuNDM3NUM1LjQzMjUgMTUuOTEwMiA1LjQ5MTA5IDE1LjQwODkgNS42MDgyOCAxNC45MzM2QzUuNzI1NDYgMTQuNDUxOCA1Ljg5Nzk5IDEzLjk3NjYgNi4xMjU4NSAxMy41MDc4QzYuMjU2MDYgMTMuMjI3OSA2LjM2Njc0IDEyLjk0NDcgNi40NTc4OSAxMi42NTgyQzYuNTQ5MDMgMTIuMzY1MiA2LjYxMDg4IDEyLjA2MjUgNi42NDM0MyAxMS43NUgyLjMwNzVDMi4wNTM1OSAxMS43NSAxLjgxMjcgMTEuNzAxMiAxLjU4NDg0IDExLjYwMzVDMS4zNTY5NyAxMS41MDU5IDEuMTU1MTUgMTEuMzcyNCAwLjk3OTM3IDExLjIwMzFDMC44MTAwOTkgMTEuMDMzOSAwLjY3NjYzNiAxMC44MzUzIDAuNTc4OTc5IDEwLjYwNzRDMC40ODEzMjMgMTAuMzc5NiAwLjQzMjQ5NSAxMC4xMzU0IDAuNDMyNDk1IDkuODc1QzAuNDMyNDk1IDkuNjY2NjcgMC40NjUwNDcgOS40NjgxIDAuNTMwMTUxIDkuMjc5M0wzLjAzMDE1IDEuNzc5M0MzLjE2MDM2IDEuMzk1MTggMy4zODgyMiAxLjA4NTk0IDMuNzEzNzUgMC44NTE1NjJDNC4wMzkyNyAwLjYxNzE4OCA0LjQwMzg1IDAuNSA0LjgwNzUgMC41SDkuODA3NVpNMTkuMTgyNSAzSDE2LjA1NzVDMTQuODkyMSAzIDEzLjc2OTEgMi43NzUzOSAxMi42ODg0IDIuMzI2MTdDMTEuNzUwOSAxLjk0MjA2IDEwLjc5MDYgMS43NSA5LjgwNzUgMS43NUg0LjgwNzVDNC42NzcyOSAxLjc1IDQuNTU2ODQgMS43ODkwNiA0LjQ0NjE3IDEuODY3MTlDNC4zMzU0OSAxLjk0NTMxIDQuMjU3MzYgMi4wNDk0OCA0LjIxMTc5IDIuMTc5NjlDNC4xNzkyNCAyLjI3MDgzIDQuMTE3MzkgMi40NDY2MSA0LjAyNjI1IDIuNzA3MDNDMy45NDE2MSAyLjk2NzQ1IDMuODM3NDQgMy4yODMyIDMuNzEzNzUgMy42NTQzQzMuNTkwMDUgNC4wMTg4OCAzLjQ1MzMzIDQuNDIyNTMgMy4zMDM1OSA0Ljg2NTIzQzMuMTUzODUgNS4zMDE0MyAzLjAwNDExIDUuNzQ0MTQgMi44NTQzNyA2LjE5MzM2QzIuNzA0NjMgNi42NDI1OCAyLjU1ODE1IDcuMDgyMDMgMi40MTQ5MiA3LjUxMTcyQzIuMjc4MiA3LjkzNDkgMi4xNTQ1IDguMzE5MDEgMi4wNDM4MiA4LjY2NDA2QzEuOTMzMTUgOS4wMDI2IDEuODQ1MjYgOS4yODI1NSAxLjc4MDE1IDkuNTAzOTFDMS43MTUwNSA5LjcxODc1IDEuNjgyNSA5Ljg0MjQ1IDEuNjgyNSA5Ljg3NUMxLjY4MjUgMTAuMDQ0MyAxLjc0NDM0IDEwLjE5MDggMS44NjgwNCAxMC4zMTQ1QzEuOTkxNzQgMTAuNDM4MiAyLjEzODIyIDEwLjUgMi4zMDc1IDEwLjVINy45MzI1QzcuOTMyNSAxMC44NDUxIDcuOTIyNzMgMTEuMTY3MyA3LjkwMzIgMTEuNDY2OEM3Ljg5MDE4IDExLjc1OTggNy44NTc2MyAxMi4wNDYyIDcuODA1NTQgMTIuMzI2MkM3Ljc1OTk3IDEyLjYwNjEgNy42OTE2MSAxMi44ODYxIDcuNjAwNDYgMTMuMTY2QzcuNTA5MzIgMTMuNDQ2IDcuMzg4ODggMTMuNzQyMiA3LjIzOTE0IDE0LjA1NDdDNy4wNTY4NCAxNC40MzIzIDYuOTE2ODcgMTQuODE5NyA2LjgxOTIxIDE1LjIxNjhDNi43MjgwNyAxNS42MDc0IDYuNjgyNSAxNi4wMTQzIDYuNjgyNSAxNi40Mzc1QzYuNjgyNSAxNi41Mjg2IDYuNzExNzkgMTYuNjAzNSA2Ljc3MDM5IDE2LjY2MjFDNi44Mjg5OCAxNi43MjA3IDYuOTAzODUgMTYuNzUgNi45OTUgMTYuNzVDNy4wMzQwNiAxNi43NSA3LjA2NjYxIDE2LjczNyA3LjA5MjY1IDE2LjcxMDlDNy4xMjUyIDE2LjY3ODQgNy4xNTQ1IDE2LjY0OTEgNy4xODA1NCAxNi42MjNMMTMuMjY0NSAxMC41MjkzQzEzLjQ3MjkgMTAuMzIxIDEzLjY5NDIgMTAuMTM4NyAxMy45Mjg2IDkuOTgyNDJDMTQuMTY5NSA5LjgyNjE3IDE0LjQyMzQgOS42OTI3MSAxNC42OTAzIDkuNTgyMDNDMTUuMjExMSA5LjM2MDY4IDE1Ljc2NzggOS4yNSAxNi4zNjAyIDkuMjVIMTkuMTgyNVYzWiIgZmlsbD0iIzYyNjRBNyIvPg0KPC9zdmc+DQo= +- data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABn0lEQVRIS7WWS1LCQBCG/w5YxY54A24gNxBPYLbRBUkMVe7kBuoJdGkVMWQj2eIJxBvEE8gRcKclpK0JQjF588gs59HfzN/dfw2h4kEVx0cCYNmjPoPOs8AETIhotqjxq/ekT4suKAGsnm+AMQTwnnmQoIJxItYJFDB4zKAAFM7iZ/j35yMOCIgxfXZ0Le9mhjFUlaOGRgyNgQ6AZtp+BThbA4xrv6XM8QmC6Q50r+jp8XWj99Kus6Ku5kPgTQII7QF6COffx55nJp67LdCyfZYBPb+UPGVBEmBfedKgEuDQ8gigDDiwPBKgCnkkwL7yiPJUuNZlcHszFwR0oipaARikpXWjODQcXKR2tnk1eiSiGwBfAIJ4skMK+xR1Zb0xBnCaVYKuoyc8y7R9j4AugHvX0e9yvGu5JHJRn6O1uXEBGCJIHLAOXqLrc+3asv2JALqOLvwmGtsEXxpixkirrm2D5wIs2xe69l1Hjwxsl+BFgLU8uwYvBBCoycwBCMauNp6Zg3+JbqMUlaiWwjJN2yC6VMx7g8tEE5W17cp/FX8rZdBJBghO7QAAAABJRU5ErkJggg== # FeedbackIconUrl() -- data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTkiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAxOSAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCjxwYXRoIGQ9Ik05IDE2LjI1VjE3LjVINy43NVYxNi4yNUg5Wk04LjM3NSA2Ljg2NTIzQzguODA0NjkgNi44NjUyMyA5LjIwODMzIDYuOTQ5ODcgOS41ODU5NCA3LjExOTE0QzkuOTYzNTQgNy4yODE5IDEwLjI5MjMgNy41MDY1MSAxMC41NzIzIDcuNzkyOTdDMTAuODU4NyA4LjA3MjkyIDExLjA4MzMgOC40MDE2OSAxMS4yNDYxIDguNzc5M0MxMS40MTU0IDkuMTU2OSAxMS41IDkuNTYwNTUgMTEuNSA5Ljk5MDIzQzExLjUgMTAuMzgwOSAxMS40MzgyIDEwLjcyMjcgMTEuMzE0NSAxMS4wMTU2QzExLjE5MDggMTEuMzA4NiAxMS4wMzQ1IDExLjU3MjMgMTAuODQ1NyAxMS44MDY2QzEwLjY2MzQgMTIuMDM0NSAxMC40NjQ4IDEyLjI0NjEgMTAuMjUgMTIuNDQxNEMxMC4wMzUyIDEyLjYzMDIgOS44MzMzMyAxMi44MjIzIDkuNjQ0NTMgMTMuMDE3NkM5LjQ2MjI0IDEzLjIxMjkgOS4zMDkyNCAxMy40MTggOS4xODU1NSAxMy42MzI4QzkuMDYxODUgMTMuODQ3NyA5IDE0LjA5MTggOSAxNC4zNjUyVjE0Ljk5MDJINy43NVYxNC4zNjUyQzcuNzUgMTMuOTc0NiA3LjgxMTg1IDEzLjYzNjEgNy45MzU1NSAxMy4zNDk2QzguMDU5MjQgMTMuMDU2NiA4LjIxMjI0IDEyLjc5NjIgOC4zOTQ1MyAxMi41Njg0QzguNTgzMzMgMTIuMzM0IDguNzg1MTYgMTIuMTE5MSA5IDExLjkyMzhDOS4yMTQ4NCAxMS43Mjg1IDkuNDEzNDEgMTEuNTM2NSA5LjU5NTcgMTEuMzQ3N0M5Ljc4NDUxIDExLjE1MjMgOS45NDA3NiAxMC45NDczIDEwLjA2NDUgMTAuNzMyNEMxMC4xODgyIDEwLjUxNzYgMTAuMjUgMTAuMjcwMiAxMC4yNSA5Ljk5MDIzQzEwLjI1IDkuNzM2MzMgMTAuMjAxMiA5LjQ5NTQ0IDEwLjEwMzUgOS4yNjc1OEMxMC4wMDU5IDkuMDM5NzEgOS44NjkxNCA4Ljg0MTE1IDkuNjkzMzYgOC42NzE4OEM5LjUyNDA5IDguNDk2MDkgOS4zMjU1MiA4LjM1OTM4IDkuMDk3NjYgOC4yNjE3MkM4Ljg2OTc5IDguMTY0MDYgOC42Mjg5MSA4LjExNTIzIDguMzc1IDguMTE1MjNDOC4xMjEwOSA4LjExNTIzIDcuODgwMjEgOC4xNjQwNiA3LjY1MjM0IDguMjYxNzJDNy40MjQ0OCA4LjM1OTM4IDcuMjIyNjYgOC40OTYwOSA3LjA0Njg4IDguNjcxODhDNi44Nzc2IDguODQxMTUgNi43NDQxNCA5LjAzOTcxIDYuNjQ2NDggOS4yNjc1OEM2LjU0ODgzIDkuNDk1NDQgNi41IDkuNzM2MzMgNi41IDkuOTkwMjNINS4yNUM1LjI1IDkuNTYwNTUgNS4zMzEzOCA5LjE1NjkgNS40OTQxNCA4Ljc3OTNDNS42NTY5IDguNDAxNjkgNS44NzgyNiA4LjA3MjkyIDYuMTU4MiA3Ljc5Mjk3QzYuNDQ0NjYgNy41MDY1MSA2Ljc3NjY5IDcuMjgxOSA3LjE1NDMgNy4xMTkxNEM3LjUzODQxIDYuOTQ5ODcgNy45NDUzMSA2Ljg2NTIzIDguMzc1IDYuODY1MjNaTTEuNSAxOC43NUgxMC4wOTM4QzkuOTg5NTggMTkuMTQ3MSA5LjkzNzUgMTkuNTYzOCA5LjkzNzUgMjBIMC4yNVYwSDExLjEzODdMMTYuNSA1LjM2MTMzVjExLjEzMjhDMTYuMDg5OCAxMS4wMDI2IDE1LjY3MzIgMTAuOTM3NSAxNS4yNSAxMC45Mzc1VjYuMjVIMTAuMjVWMS4yNUgxLjVWMTguNzVaTTExLjUgNUgxNC4zNjEzTDExLjUgMi4xMzg2N1Y1Wk0xNy4wNDY5IDE2LjcyODVDMTcuMzQ2NCAxNi44OTEzIDE3LjYxNjUgMTcuMDg5OCAxNy44NTc0IDE3LjMyNDJDMTguMDk4MyAxNy41NTg2IDE4LjMwMzQgMTcuODE5IDE4LjQ3MjcgMTguMTA1NUMxOC42NDE5IDE4LjM4NTQgMTguNzcyMSAxOC42ODgyIDE4Ljg2MzMgMTkuMDEzN0MxOC45NTQ0IDE5LjMzMjcgMTkgMTkuNjYxNSAxOSAyMEgxNy43NUMxNy43NSAxOS42NTQ5IDE3LjY4NDkgMTkuMzMyNyAxNy41NTQ3IDE5LjAzMzJDMTcuNDI0NSAxOC43MjcyIDE3LjI0NTQgMTguNDYwMyAxNy4wMTc2IDE4LjIzMjRDMTYuNzg5NyAxOC4wMDQ2IDE2LjUyMjggMTcuODI1NSAxNi4yMTY4IDE3LjY5NTNDMTUuOTE3MyAxNy41NjUxIDE1LjU5NTEgMTcuNSAxNS4yNSAxNy41QzE0LjkwNDkgMTcuNSAxNC41Nzk0IDE3LjU2NTEgMTQuMjczNCAxNy42OTUzQzEzLjk3NCAxNy44MjU1IDEzLjcxMDMgMTguMDA0NiAxMy40ODI0IDE4LjIzMjRDMTMuMjU0NiAxOC40NjAzIDEzLjA3NTUgMTguNzI3MiAxMi45NDUzIDE5LjAzMzJDMTIuODE1MSAxOS4zMzI3IDEyLjc1IDE5LjY1NDkgMTIuNzUgMjBIMTEuNUMxMS41IDE5LjY2MTUgMTEuNTQ1NiAxOS4zMzI3IDExLjYzNjcgMTkuMDEzN0MxMS43Mjc5IDE4LjY4ODIgMTEuODU4MSAxOC4zODU0IDEyLjAyNzMgMTguMTA1NUMxMi4xOTY2IDE3LjgxOSAxMi40MDE3IDE3LjU1ODYgMTIuNjQyNiAxNy4zMjQyQzEyLjg4MzUgMTcuMDg5OCAxMy4xNTM2IDE2Ljg5MTMgMTMuNDUzMSAxNi43Mjg1QzEzLjIzMTggMTYuNTAwNyAxMy4wNTkyIDE2LjIzNyAxMi45MzU1IDE1LjkzNzVDMTIuODExOCAxNS42MzggMTIuNzUgMTUuMzI1NSAxMi43NSAxNUMxMi43NSAxNC42NTQ5IDEyLjgxNTEgMTQuMzMyNyAxMi45NDUzIDE0LjAzMzJDMTMuMDc1NSAxMy43MjcyIDEzLjI1NDYgMTMuNDYwMyAxMy40ODI0IDEzLjIzMjRDMTMuNzEwMyAxMy4wMDQ2IDEzLjk3NCAxMi44MjU1IDE0LjI3MzQgMTIuNjk1M0MxNC41Nzk0IDEyLjU2NTEgMTQuOTA0OSAxMi41IDE1LjI1IDEyLjVDMTUuNTk1MSAxMi41IDE1LjkxNzMgMTIuNTY1MSAxNi4yMTY4IDEyLjY5NTNDMTYuNTIyOCAxMi44MjU1IDE2Ljc4OTcgMTMuMDA0NiAxNy4wMTc2IDEzLjIzMjRDMTcuMjQ1NCAxMy40NjAzIDE3LjQyNDUgMTMuNzI3MiAxNy41NTQ3IDE0LjAzMzJDMTcuNjg0OSAxNC4zMzI3IDE3Ljc1IDE0LjY1NDkgMTcuNzUgMTVDMTcuNzUgMTUuMzI1NSAxNy42ODgyIDE1LjYzOCAxNy41NjQ1IDE1LjkzNzVDMTcuNDQwOCAxNi4yMzcgMTcuMjY4MiAxNi41MDA3IDE3LjA0NjkgMTYuNzI4NVpNMTUuMjUgMTYuMjVDMTUuNDI1OCAxNi4yNSAxNS41ODg1IDE2LjIxNzQgMTUuNzM4MyAxNi4xNTIzQzE1Ljg4OCAxNi4wODcyIDE2LjAxODIgMTUuOTk5MyAxNi4xMjg5IDE1Ljg4ODdDMTYuMjQ2MSAxNS43NzE1IDE2LjMzNzIgMTUuNjM4IDE2LjQwMjMgMTUuNDg4M0MxNi40Njc0IDE1LjMzODUgMTYuNSAxNS4xNzU4IDE2LjUgMTVDMTYuNSAxNC44MjQyIDE2LjQ2NzQgMTQuNjYxNSAxNi40MDIzIDE0LjUxMTdDMTYuMzM3MiAxNC4zNjIgMTYuMjQ2MSAxNC4yMzE4IDE2LjEyODkgMTQuMTIxMUMxNi4wMTgyIDE0LjAwMzkgMTUuODg4IDEzLjkxMjggMTUuNzM4MyAxMy44NDc3QzE1LjU4ODUgMTMuNzgyNiAxNS40MjU4IDEzLjc1IDE1LjI1IDEzLjc1QzE1LjA3NDIgMTMuNzUgMTQuOTExNSAxMy43ODI2IDE0Ljc2MTcgMTMuODQ3N0MxNC42MTIgMTMuOTEyOCAxNC40Nzg1IDE0LjAwMzkgMTQuMzYxMyAxNC4xMjExQzE0LjI1MDcgMTQuMjMxOCAxNC4xNjI4IDE0LjM2MiAxNC4wOTc3IDE0LjUxMTdDMTQuMDMyNiAxNC42NjE1IDE0IDE0LjgyNDIgMTQgMTVDMTQgMTUuMTc1OCAxNC4wMzI2IDE1LjMzODUgMTQuMDk3NyAxNS40ODgzQzE0LjE2MjggMTUuNjM4IDE0LjI1MDcgMTUuNzcxNSAxNC4zNjEzIDE1Ljg4ODdDMTQuNDc4NSAxNS45OTkzIDE0LjYxMiAxNi4wODcyIDE0Ljc2MTcgMTYuMTUyM0MxNC45MTE1IDE2LjIxNzQgMTUuMDc0MiAxNi4yNSAxNS4yNSAxNi4yNVoiIGZpbGw9IiM2MjY0QTciLz4NCjwvc3ZnPg0K +- data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAB4klEQVRIS7WWMVLCUBCG/w0psJIbGG6AJ5AbqJ2hMYEwY6c3QE4gds6QhFhoSrkBeAI9At4AKy0Y1tlA9JEJJCFjmjDzyPuy//77vxAAtJ2Q5V7oItj+0AyyniEF8ApgmvXAer0X3XNAVEDfd83bPIB1xZ8ADrMgZQB9BgwCLndBSgGkYtsJg12Q0gCRdBekDCC1XcR87nmtcby4L2CbGcRdG2bJBFhXoaEt6JrBDWLMNMKj65qpdl67Kz/A6j41NK5MAK4BkDkxABxtc01hQNsJ5U2NpY5m8GDORNeOE44ZdLJcfNWDwJ6rjdgHIBGyUfKqKu0t2UwlEfJLlGaTfwVY1qhW0Q8mDK4vF99GUiLHCZsLHbNYzlVc/aXpzixSNm9k5Y9aeW6A3XkeENF1cnMBa5XqHQgWQHOAB75r9gsPmjiEme9HXutGfcOVq3AqaxqRIb9VY+SuIM2CsbwqWKxNoEPPvTgu1INt50Sysmh2CDV/aDYKAdpOeKsB02RMxBIBNABzbdWLv9kpJZE0mPTqCwHNjQoZge+ZdqEK0iRqd8N3MAwQbuQDIHKUXhUT9OK+/FbAwJTyHPqED9ms03k+Y6KXLZEhcd5b6qirEuU57+U/0UBKT2QT3zWjPdRLjZMf3cKIc3Z+Pd0AAAAASUVORK5CYII= # LikeIconUrl() -- data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAyMSAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCjxwYXRoIGQ9Ik0xOC41NTc1IDYuMjVDMTguODExNCA2LjI1IDE5LjA1MjMgNi4yOTg4MyAxOS4yODAyIDYuMzk2NDhDMTkuNTA4IDYuNDk0MTQgMTkuNzA2NiA2LjYyNzYgMTkuODc1OSA2Ljc5Njg4QzIwLjA1MTYgNi45NjYxNSAyMC4xODg0IDcuMTY0NzEgMjAuMjg2IDcuMzkyNThDMjAuMzgzNyA3LjYyMDQ0IDIwLjQzMjUgNy44NjQ1OCAyMC40MzI1IDguMTI1QzIwLjQzMjUgOC4zMzMzMyAyMC4zOTk5IDguNTMxOSAyMC4zMzQ4IDguNzIwN0wxNy44MzQ4IDE2LjIyMDdDMTcuNzY5NyAxNi40MDk1IDE3LjY3ODYgMTYuNTg1MyAxNy41NjE0IDE2Ljc0OEMxNy40NDQyIDE2LjkwNDMgMTcuMzA3NSAxNy4wMzc4IDE3LjE1MTIgMTcuMTQ4NEMxNi45OTUgMTcuMjU5MSAxNi44MjI1IDE3LjM0NyAxNi42MzM3IDE3LjQxMjFDMTYuNDUxNCAxNy40NzA3IDE2LjI1OTMgMTcuNSAxNi4wNTc1IDE3LjVIMTEuMDU3NUM5Ljg5MjEzIDE3LjUgOC43NjkwOCAxNy4yNzU0IDcuNjg4MzUgMTYuODI2MkM3LjIxOTYgMTYuNjM3NCA2Ljc0NzYgMTYuNDk0MSA2LjI3MjM0IDE2LjM5NjVDNS44MDM1OSAxNi4yOTg4IDUuMzE1MzEgMTYuMjUgNC44MDc1IDE2LjI1SDAuNDMyNDk1VjcuNUg0LjUwNDc2QzQuOTI3OTQgNy41IDUuMzI1MDcgNy40MjE4OCA1LjY5NjE3IDcuMjY1NjJDNi4wNzM3NyA3LjEwOTM4IDYuNDEyMzEgNi44ODE1MSA2LjcxMTc5IDYuNTgyMDNMMTIuNzg2IDAuNTE3NTc4QzEyLjk0ODggMC4zNTQ4MTggMTMuMTExNSAwLjIyNzg2NSAxMy4yNzQzIDAuMTM2NzE5QzEzLjQzNzEgMC4wNDU1NzI5IDEzLjYzNTYgMCAxMy44NyAwQzE0LjA4NDggMCAxNC4yODY3IDAuMDQyMzE3NyAxNC40NzU1IDAuMTI2OTUzQzE0LjY2NDMgMC4yMDUwNzggMTQuODMwMyAwLjMxNTc1NSAxNC45NzM1IDAuNDU4OTg0QzE1LjExNjcgMC42MDIyMTQgMTUuMjI3NCAwLjc2ODIyOSAxNS4zMDU1IDAuOTU3MDMxQzE1LjM5MDIgMS4xNDU4MyAxNS40MzI1IDEuMzQ3NjYgMTUuNDMyNSAxLjU2MjVDMTUuNDMyNSAyLjA4OTg0IDE1LjM3MzkgMi41OTQ0IDE1LjI1NjcgMy4wNzYxN0MxNS4xMzk1IDMuNTUxNDMgMTQuOTY3IDQuMDIzNDQgMTQuNzM5MSA0LjQ5MjE5QzE0LjYwODkgNC43NzIxNCAxNC40OTgzIDUuMDU4NTkgMTQuNDA3MSA1LjM1MTU2QzE0LjMxNiA1LjYzODAyIDE0LjI1NDEgNS45Mzc1IDE0LjIyMTYgNi4yNUgxOC41NTc1Wk0xNi4wNTc1IDE2LjI1QzE2LjE4NzcgMTYuMjUgMTYuMzA4MSAxNi4yMTA5IDE2LjQxODggMTYuMTMyOEMxNi41Mjk1IDE2LjA1NDcgMTYuNjA3NiAxNS45NTA1IDE2LjY1MzIgMTUuODIwM0MxNi42ODU4IDE1LjcyOTIgMTYuNzQ0MyAxNS41NTM0IDE2LjgyOSAxNS4yOTNDMTYuOTIwMSAxNS4wMzI2IDE3LjAyNzUgMTQuNzIwMSAxNy4xNTEyIDE0LjM1NTVDMTcuMjc0OSAxMy45ODQ0IDE3LjQxMTcgMTMuNTgwNyAxNy41NjE0IDEzLjE0NDVDMTcuNzExMSAxMi43MDE4IDE3Ljg2MDkgMTIuMjU1OSAxOC4wMTA2IDExLjgwNjZDMTguMTYwNCAxMS4zNTc0IDE4LjMwMzYgMTAuOTIxMiAxOC40NDAzIDEwLjQ5OEMxOC41ODM1IDEwLjA2ODQgMTguNzEwNSA5LjY4NDI0IDE4LjgyMTIgOS4zNDU3QzE4LjkzMTggOS4wMDA2NSAxOS4wMTk3IDguNzIwNyAxOS4wODQ4IDguNTA1ODZDMTkuMTQ5OSA4LjI4NDUxIDE5LjE4MjUgOC4xNTc1NSAxOS4xODI1IDguMTI1QzE5LjE4MjUgNy45NTU3MyAxOS4xMjA2IDcuODA5MjQgMTguOTk2OSA3LjY4NTU1QzE4Ljg3MzMgNy41NjE4NSAxOC43MjY4IDcuNSAxOC41NTc1IDcuNUgxMi45MzI1QzEyLjkzMjUgNy4xNTQ5NSAxMi45MzkgNi44MzU5NCAxMi45NTIgNi41NDI5N0MxMi45NzE2IDYuMjQzNDkgMTMuMDA0MSA1Ljk1Mzc4IDEzLjA0OTcgNS42NzM4M0MxMy4xMDE4IDUuMzkzODggMTMuMTczNCA1LjExMzkzIDEzLjI2NDUgNC44MzM5OEMxMy4zNTU3IDQuNTU0MDQgMTMuNDc2MSA0LjI1NzgxIDEzLjYyNTkgMy45NDUzMUMxMy44MDgxIDMuNTY3NzEgMTMuOTQ0OSAzLjE4MzU5IDE0LjAzNiAyLjc5Mjk3QzE0LjEzMzcgMi4zOTU4MyAxNC4xODI1IDEuOTg1NjggMTQuMTgyNSAxLjU2MjVDMTQuMTgyNSAxLjQ3MTM1IDE0LjE1MzIgMS4zOTY0OCAxNC4wOTQ2IDEuMzM3ODlDMTQuMDM2IDEuMjc5MyAxMy45NjExIDEuMjUgMTMuODcgMS4yNUMxMy44MzA5IDEuMjUgMTMuNzk1MSAxLjI2NjI4IDEzLjc2MjYgMS4yOTg4M0MxMy43MzY1IDEuMzI0ODcgMTMuNzEwNSAxLjM1MDkxIDEzLjY4NDQgMS4zNzY5NUw3LjYwMDQ2IDcuNDcwN0M3LjM5MjEzIDcuNjc5MDQgNy4xNjc1MiA3Ljg2MTMzIDYuOTI2NjQgOC4wMTc1OEM2LjY5MjI2IDguMTczODMgNi40NDE2MSA4LjMwNzI5IDYuMTc0NjggOC40MTc5N0M1LjY1Mzg1IDguNjM5MzIgNS4wOTcyMSA4Ljc1IDQuNTA0NzYgOC43NUgxLjY4MjVWMTVINC44MDc1QzUuOTY2MzUgMTUgNy4wODk0IDE1LjIyNDYgOC4xNzY2NCAxNS42NzM4QzkuMTE0MTQgMTYuMDU3OSAxMC4wNzQ0IDE2LjI1IDExLjA1NzUgMTYuMjVIMTYuMDU3NVoiIGZpbGw9IiM2MjY0QTciLz4NCjwvc3ZnPg== +- data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABr0lEQVRIS7WVMVLCQBiF3x8oLHMDOUKOgDfQMlq4wTBjqSeQG0DpjCFso2m5gXACvYF6A6y0YPKcBRdDJisIccsk+77d97//j+Cfl+yjr7r3ARreTN+Gry6dnQFRnGkBzo2wkCfD4em4CrIT4Eec1xBRzDkZDU+vagGsxAVRehfqTpwZe3SahL29AWVxdZm1vDle8A3bC1AWN2LRxcNARFQ+/2xpHc12BlSJG7FOnM1Iapf/iwBsiqlLfGUP0KNwUtRhQ95sdJ0ApUa+1zjoQ6CqPI7jrJ0Dj84DEjodhpF0upkil3kuLoEEAH1XAc0Bms2DoAqQgwEgfQ84kk6cmXjdAJiWPp7kTejfutR1etPhHr2nNUCahBvrsale9r1NV5qE/uoGdQJM8xGYjJJQ1Q6w9tj5VDugaM+iD2yR67KoaE/tgLI9awAK2zYFBN/13dnztqmpSo99VuyDCj2ZgRxTZMz5x9Q10OzGsj2LG5iZ0pyjVVYn6edAW0SOARya9yZ6rlt5EJ9gYJorScLVd1s113Kw8ZhES8SMkOol5KD869wK8NdarM+0fXZvsfcLnqfwd9hdaCQAAAAASUVORK5CYII= # PlaceholderIconUrl() -- data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxOCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCjxwYXRoIGQ9Ik0xOCAwLjI1VjEzLjc1SDBWMC4yNUgxOFpNMTYuODc1IDEuMzc1SDEuMTI1VjUuODc1SDMuMzc1VjguMTI1SDEuMTI1VjEyLjYyNUgxMC4xMjVWMTAuMzc1SDEyLjM3NVYxMi42MjVIMTQuNjI1VjEwLjM3NUgxNi44NzVWMS4zNzVaTTUuNjI1IDUuODc1SDMuMzc1VjMuNjI1SDUuNjI1VjUuODc1Wk01LjYyNSA4LjEyNVY1Ljg3NUg3Ljg3NVY4LjEyNUg1LjYyNVpNMTAuMTI1IDguMTI1VjEwLjM3NUg3Ljg3NVY4LjEyNUgxMC4xMjVaTTE0LjYyNSA4LjEyNVYxMC4zNzVIMTIuMzc1VjguMTI1SDE0LjYyNVpNMTQuNjI1IDUuODc1SDEyLjM3NVYzLjYyNUgxNC42MjVWNS44NzVaIiBmaWxsPSIjNjI2NEE3Ii8+DQo8L3N2Zz4NCg== +- data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAA2klEQVRIS72VUQ6DIBBEh15MruGv4R5t70H6yzXwYqXBsJRgt4hxMfFH1x3mZXZVEL6UcH/ICyzGBUkXKgmsAPzFQhrARALPl50fVwosxsV+9/ECxjj9Bqbo5gas1s5/0XH1rAN6kXA10XH1YwUC4NU3RfVsbDHmcCVEMTGxxhPS2kEZoIylF1fZZLhAHrTSZmk/nW6HqztF3LC10lKnrnvQxAU4XMBuI28YA6BVvNOyaw7Ur4RwWMraMQLVoDWXKtlPKPKQls+pCTloNj1bIP/LPHuyo9+JO/gA+LHgsWDt7PgAAAAASUVORK5CYII= # LeftArrowActiveIconUrl() - data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAYAAADgKtSgAAAAvklEQVRIS63VuQ0CMRCF4Td9oG0GeiBAWmGOfEtwERCBA4QEVEMBdIGIbaMNuDaw58AFfP84GJvwh7NYXdqwmx6JKH9zZLXd8hSIaA7kbTO6dd779DJN+AfGIyKND/vZFcB7ejVeg/vpVTgHVuFcWIxLYBEuhdm4BmbhWriKW+AiboXL+PockOCI6B4RJ8Pt4zwbxSVyxkB1Qy2BKt5fXxtg4doAG9cERLg0IMYlARXODahxTsCE/wbyZvhBPwHs0tQYcHdvOQAAAABJRU5ErkJggg== From 87bf90ce55eee9cca86e7aa36f1ff398202a870b Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Tue, 11 May 2021 12:04:35 -0500 Subject: [PATCH 09/39] Corrected Skills Trigger to use correct route (#1102) --- .../app/templates/dotnet/functions/Triggers/SkillsTrigger.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/Triggers/SkillsTrigger.cs b/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/Triggers/SkillsTrigger.cs index 2add26b4e3..f0411e5d9d 100644 --- a/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/Triggers/SkillsTrigger.cs +++ b/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/Triggers/SkillsTrigger.cs @@ -42,7 +42,7 @@ public SkillsTrigger(ChannelServiceHandlerBase skillHandler, ILogger [FunctionName("ReplyToActivity")] public async Task RunAsync( - [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "api/v3/conversations/{conversationId}/activities/{activityId}")] HttpRequest req, + [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "api/skills/v3/conversations/{conversationId}/activities/{activityId}")] HttpRequest req, string conversationId, string activityId) { From 8d640e1175b844a8bfcf6a38318a919cf9760ecd Mon Sep 17 00:00:00 2001 From: lauren-mills Date: Tue, 11 May 2021 12:20:13 -0700 Subject: [PATCH 10/39] fix: skill interrupting itself (#1107) * fix skill interrupting itself * lg fix * clean up active skill property --- .../generators/app/templates/botName.dialog | 36 +++++++++++++++++-- .../en-us/CreateEventDialog.en-us.lg | 2 +- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/generators/generator-bot-enterprise-assistant/generators/app/templates/botName.dialog b/generators/generator-bot-enterprise-assistant/generators/app/templates/botName.dialog index 043088a8b9..73c92e6802 100644 --- a/generators/generator-bot-enterprise-assistant/generators/app/templates/botName.dialog +++ b/generators/generator-bot-enterprise-assistant/generators/app/templates/botName.dialog @@ -139,6 +139,13 @@ }, "activity": "${SendActivity_bGYBta()}" }, + { + "$kind": "Microsoft.DeleteProperty", + "$designer": { + "id": "JoL99F" + }, + "property": "conversation.activeSkill" + }, { "$kind": "Microsoft.CancelAllDialogs", "$designer": { @@ -496,7 +503,7 @@ "eventValue": "Calendar" } ], - "condition": "=turn.recognized.score > 0.8" + "condition": "=turn.recognized.score > 0.8 && conversation.activeSkill != 'Calendar'" }, { "$kind": "Microsoft.OnIntent", @@ -522,7 +529,7 @@ "eventValue": "People" } ], - "condition": "=turn.recognized.score > 0.8" + "condition": "=turn.recognized.score > 0.8 && conversation.activeSkill != 'People'" }, { "$kind": "Microsoft.OnDialogEvent", @@ -557,6 +564,14 @@ { "value": "Calendar", "actions": [ + { + "$kind": "Microsoft.SetProperty", + "$designer": { + "id": "Fvjb09" + }, + "property": "conversation.activeSkill", + "value": "Calendar" + }, { "$kind": "Microsoft.BeginSkill", "$designer": { @@ -576,6 +591,14 @@ { "value": "People", "actions": [ + { + "$kind": "Microsoft.SetProperty", + "$designer": { + "id": "cx0OI0" + }, + "property": "conversation.activeSkill", + "value": "People" + }, { "$kind": "Microsoft.BeginSkill", "$designer": { @@ -594,6 +617,13 @@ } ] }, + { + "$kind": "Microsoft.DeleteProperty", + "$designer": { + "id": "2rIt4u" + }, + "property": "conversation.activeSkill" + }, { "$kind": "Microsoft.IfCondition", "$designer": { @@ -625,4 +655,4 @@ "generator": "<%= botName %>.lg", "id": "<%= botName %>", "recognizer": "<%= botName %>.lu.qna" -} +} \ No newline at end of file diff --git a/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/CreateEventDialog/language-generation/en-us/CreateEventDialog.en-us.lg b/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/CreateEventDialog/language-generation/en-us/CreateEventDialog.en-us.lg index 589d648dfc..92d6821237 100644 --- a/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/CreateEventDialog/language-generation/en-us/CreateEventDialog.en-us.lg +++ b/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/CreateEventDialog/language-generation/en-us/CreateEventDialog.en-us.lg @@ -43,7 +43,7 @@ # CreateConfirmNotUnderstood() [Activity - text = Sorry, I didn't understand that. ${CreateConfirmPrompt()} + text = Sorry, I didn't understand that. ${CreateConfirmText()} attachments = ${json(EventDetailEditCard($event))} ] From 512ae8f55548372bac357a670065542c88c9c068 Mon Sep 17 00:00:00 2001 From: Thomas Chung Date: Tue, 11 May 2021 20:07:27 -0700 Subject: [PATCH 11/39] Update sln to point to correct path for package (#1093) Co-authored-by: Thomas Chung --- tests/Microsoft.Bot.Components.Tests.sln | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Microsoft.Bot.Components.Tests.sln b/tests/Microsoft.Bot.Components.Tests.sln index 526ce29afe..c9ad6216f0 100644 --- a/tests/Microsoft.Bot.Components.Tests.sln +++ b/tests/Microsoft.Bot.Components.Tests.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.31112.23 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Bot.Components.Teams", "..\packages\Teams\Microsoft.Bot.Components.Teams.csproj", "{1C09226C-3DE0-48BF-BEB7-68F0691908EA}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Bot.Components.Teams", "..\packages\Teams\dotnet\Microsoft.Bot.Components.Teams.csproj", "{1C09226C-3DE0-48BF-BEB7-68F0691908EA}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "skills", "skills", "{31CBAEDA-E319-49AE-A662-AA0739205C82}" EndProject From 42f18d0724183cd5485c402e5b63b91c52702045 Mon Sep 17 00:00:00 2001 From: Peter Innes <53846082+peterinnesmsft@users.noreply.github.com> Date: Thu, 13 May 2021 10:36:49 -0700 Subject: [PATCH 12/39] fix: Update .NET Functions to use wwwroot dir for static files (#1113) * Update static files root directory for .NET Functions to wwwroot; bump JS SDK version to 4.13.3-preview. * Removing ~ from JS SDK version since it does not apply to prerelease versions. --- generators/generator-bot-adaptive/generators/app/index.js | 2 +- .../templates/dotnet/functions/Triggers/StaticFilesTrigger.cs | 2 +- .../generators/app/templates/dotnet/functions/botName.csproj | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/generators/generator-bot-adaptive/generators/app/index.js b/generators/generator-bot-adaptive/generators/app/index.js index 81ce539f35..5da5795a1b 100644 --- a/generators/generator-bot-adaptive/generators/app/index.js +++ b/generators/generator-bot-adaptive/generators/app/index.js @@ -249,7 +249,7 @@ module.exports = class extends BaseGenerator { _writeJsPackageJson() { const { botName, integration } = this.options; - const sdkVersion = '~4.13.2-preview'; + const sdkVersion = '4.13.3-preview'; const dependencies = { [integrations.functions]: { diff --git a/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/Triggers/StaticFilesTrigger.cs b/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/Triggers/StaticFilesTrigger.cs index 284ce208f3..495942861d 100644 --- a/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/Triggers/StaticFilesTrigger.cs +++ b/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/Triggers/StaticFilesTrigger.cs @@ -10,7 +10,7 @@ namespace <%= botName %>.Triggers { public class StaticFilesTrigger { - private const string StaticFilesDirectory = "www"; + private const string StaticFilesDirectory = "wwwroot"; private readonly FileExtensionContentTypeProvider _provider; diff --git a/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj b/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj index b6dfdd9b6d..450ab052c9 100644 --- a/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj +++ b/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj @@ -6,7 +6,7 @@ + Exclude="$(AppDesignerFolder)/**;$(BaseOutputPath)/**;$(BaseIntermediateOutputPath)/**;wwwroot/**;**/function.json"> PreserveNewest @@ -24,7 +24,7 @@ Never - + PreserveNewest From 7f908223a3fb16f560846dfb3b37d78840f932d2 Mon Sep 17 00:00:00 2001 From: Ben Brown Date: Mon, 17 May 2021 08:28:34 -0500 Subject: [PATCH 13/39] add rewrite rule for manifest files for js webapps (#1116) --- .../generators/app/templates/js/webapp/web.config | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/generators/generator-bot-adaptive/generators/app/templates/js/webapp/web.config b/generators/generator-bot-adaptive/generators/app/templates/js/webapp/web.config index 8636fbfa46..1a0c7d0d79 100644 --- a/generators/generator-bot-adaptive/generators/app/templates/js/webapp/web.config +++ b/generators/generator-bot-adaptive/generators/app/templates/js/webapp/web.config @@ -15,6 +15,11 @@ + + + + + From 437f96f0280edc3b9a0006fddac7d5a5a42217ed Mon Sep 17 00:00:00 2001 From: Josh Gummersall <1235378+joshgummersall@users.noreply.github.com> Date: Tue, 18 May 2021 14:17:26 -0700 Subject: [PATCH 14/39] bump: js to 4.13.4 (#1120) --- .../generators/app/index.js | 2 +- packages/Teams/js/package.json | 28 +-- yarn.lock | 179 +++++++++--------- 3 files changed, 105 insertions(+), 104 deletions(-) diff --git a/generators/generator-bot-adaptive/generators/app/index.js b/generators/generator-bot-adaptive/generators/app/index.js index 5da5795a1b..4cf44f5691 100644 --- a/generators/generator-bot-adaptive/generators/app/index.js +++ b/generators/generator-bot-adaptive/generators/app/index.js @@ -249,7 +249,7 @@ module.exports = class extends BaseGenerator { _writeJsPackageJson() { const { botName, integration } = this.options; - const sdkVersion = '4.13.3-preview'; + const sdkVersion = '4.13.4-preview'; const dependencies = { [integrations.functions]: { diff --git a/packages/Teams/js/package.json b/packages/Teams/js/package.json index 69d9bc7b80..3dafdda466 100644 --- a/packages/Teams/js/package.json +++ b/packages/Teams/js/package.json @@ -29,13 +29,13 @@ "main": "lib/index.js", "types": "lib/index.d.ts", "peerDependencies": { - "adaptive-expressions": "~4.13.0", - "botbuilder": "~4.13.0", - "botbuilder-dialogs": "~4.13.0", - "botbuilder-dialogs-adaptive": "~4.13.0-preview", - "botbuilder-dialogs-adaptive-runtime-core": "~4.13.0-preview", - "botbuilder-dialogs-declarative": "~4.13.0-preview", - "botbuilder-stdlib": "~4.13.0-internal", + "adaptive-expressions": "~4.13.4", + "botbuilder": "~4.13.4", + "botbuilder-dialogs": "~4.13.4", + "botbuilder-dialogs-adaptive": "~4.13.4-preview", + "botbuilder-dialogs-adaptive-runtime-core": "~4.13.4-preview", + "botbuilder-dialogs-declarative": "~4.13.4-preview", + "botbuilder-stdlib": "~4.13.4-internal", "lodash": "^4.17.21" }, "devDependencies": { @@ -43,13 +43,13 @@ "@types/lodash": "^4.14.168", "@typescript-eslint/eslint-plugin": "latest", "@typescript-eslint/parser": "latest", - "adaptive-expressions": "4.13.0", - "botbuilder": "4.13.0", - "botbuilder-dialogs": "4.13.0", - "botbuilder-dialogs-adaptive": "4.13.0-preview", - "botbuilder-dialogs-adaptive-runtime-core": "4.13.0-preview", - "botbuilder-dialogs-declarative": "4.13.0-preview", - "botbuilder-stdlib": "4.13.0-internal", + "adaptive-expressions": "4.13.4", + "botbuilder": "4.13.4", + "botbuilder-dialogs": "4.13.4", + "botbuilder-dialogs-adaptive": "4.13.4-preview", + "botbuilder-dialogs-adaptive-runtime-core": "4.13.4-preview", + "botbuilder-dialogs-declarative": "4.13.4-preview", + "botbuilder-stdlib": "4.13.4-internal", "eslint": "latest", "lodash": "^4.17.21", "rimraf": "^3.0.2", diff --git a/yarn.lock b/yarn.lock index b3eb455c65..961a711956 100644 --- a/yarn.lock +++ b/yarn.lock @@ -99,25 +99,25 @@ __metadata: "@types/lodash": ^4.14.168 "@typescript-eslint/eslint-plugin": latest "@typescript-eslint/parser": latest - adaptive-expressions: 4.13.0 - botbuilder: 4.13.0 - botbuilder-dialogs: 4.13.0 - botbuilder-dialogs-adaptive: 4.13.0-preview - botbuilder-dialogs-adaptive-runtime-core: 4.13.0-preview - botbuilder-dialogs-declarative: 4.13.0-preview - botbuilder-stdlib: 4.13.0-internal + adaptive-expressions: 4.13.4 + botbuilder: 4.13.4 + botbuilder-dialogs: 4.13.4 + botbuilder-dialogs-adaptive: 4.13.4-preview + botbuilder-dialogs-adaptive-runtime-core: 4.13.4-preview + botbuilder-dialogs-declarative: 4.13.4-preview + botbuilder-stdlib: 4.13.4-internal eslint: latest lodash: ^4.17.21 rimraf: ^3.0.2 typescript: ^4.0.5 peerDependencies: - adaptive-expressions: ~4.13.0 - botbuilder: ~4.13.0 - botbuilder-dialogs: ~4.13.0 - botbuilder-dialogs-adaptive: ~4.13.0-preview - botbuilder-dialogs-adaptive-runtime-core: ~4.13.0-preview - botbuilder-dialogs-declarative: ~4.13.0-preview - botbuilder-stdlib: ~4.13.0-internal + adaptive-expressions: ~4.13.4 + botbuilder: ~4.13.4 + botbuilder-dialogs: ~4.13.4 + botbuilder-dialogs-adaptive: ~4.13.4-preview + botbuilder-dialogs-adaptive-runtime-core: ~4.13.4-preview + botbuilder-dialogs-declarative: ~4.13.4-preview + botbuilder-stdlib: ~4.13.4-internal lodash: ^4.17.21 languageName: unknown linkType: soft @@ -770,9 +770,9 @@ __metadata: languageName: node linkType: hard -"adaptive-expressions@npm:4.13.0": - version: 4.13.0 - resolution: "adaptive-expressions@npm:4.13.0" +"adaptive-expressions@npm:4.13.4": + version: 4.13.4 + resolution: "adaptive-expressions@npm:4.13.4" dependencies: "@microsoft/recognizers-text-data-types-timex-expression": 1.3.0 "@types/atob-lite": ^2.0.0 @@ -792,7 +792,7 @@ __metadata: xml2js: ^0.4.23 xmldom: ^0.5.0 xpath: ^0.0.32 - checksum: 346e247ceb46d0d79f89966c753275946325b29d62d9613a16aa90ed0e2d23f5682c6deea93d329e5963199c250d5c7a64d8775d6940714006a24a1dd24df5fe + checksum: fc5a86ec925509d28275eec36a9285e8beb67a6b5b670de77a858ab9ea95cb03b53737f3dc657f4d5ce90275d60c7a98fef0c72dbb9ac69756c66e8678757e57 languageName: node linkType: hard @@ -1455,155 +1455,156 @@ __metadata: languageName: node linkType: hard -"botbuilder-core@npm:4.13.0": - version: 4.13.0 - resolution: "botbuilder-core@npm:4.13.0" +"botbuilder-core@npm:4.13.4": + version: 4.13.4 + resolution: "botbuilder-core@npm:4.13.4" dependencies: assert: ^1.4.1 - botbuilder-dialogs-adaptive-runtime-core: 4.13.0-preview - botbuilder-stdlib: 4.13.0-internal - botframework-connector: 4.13.0 - botframework-schema: 4.13.0 + botbuilder-dialogs-adaptive-runtime-core: 4.13.4-preview + botbuilder-stdlib: 4.13.4-internal + botframework-connector: 4.13.4 + botframework-schema: 4.13.4 uuid: ^8.3.2 - checksum: da8e58f821276e82d69e1eb752a62157be1481e0d49e92083514cb3b10c83d989643ccf778ddce2d5377ba449ca503b7fd71b5ce6b9fb42bab1e003f24416ae4 + checksum: 6aaff87b1213008c6f3f49efb066a2866a89017bea3cf8b521842387068fafe74854f188df5a9c3753e767d9a72a9c63a1f964232f4b1bf2d9ded04dfb70efbd languageName: node linkType: hard -"botbuilder-dialogs-adaptive-runtime-core@npm:4.13.0-preview": - version: 4.13.0-preview - resolution: "botbuilder-dialogs-adaptive-runtime-core@npm:4.13.0-preview" +"botbuilder-dialogs-adaptive-runtime-core@npm:4.13.4-preview": + version: 4.13.4-preview + resolution: "botbuilder-dialogs-adaptive-runtime-core@npm:4.13.4-preview" dependencies: dependency-graph: ^0.10.0 runtypes: ~5.1.0 - checksum: efc398be0c723d84f58bae55e38844b5f64c8375763efd52466204ff5f27164dc9534975306667702f685fea44a8c56fd85764b571b1906b430ba7b992ce7b84 + checksum: 6cd8217d06c11ed97867967986af875d3ac1c8b404bc5ed57e9a8a3111cac1d9b22918eaabbb2a4497ce45d97e86add3e75b76ddf01b015c35daabe66675b552 languageName: node linkType: hard -"botbuilder-dialogs-adaptive@npm:4.13.0-preview": - version: 4.13.0-preview - resolution: "botbuilder-dialogs-adaptive@npm:4.13.0-preview" +"botbuilder-dialogs-adaptive@npm:4.13.4-preview": + version: 4.13.4-preview + resolution: "botbuilder-dialogs-adaptive@npm:4.13.4-preview" dependencies: "@microsoft/recognizers-text-suite": 1.1.4 - adaptive-expressions: 4.13.0 - botbuilder: 4.13.0 - botbuilder-dialogs: 4.13.0 - botbuilder-dialogs-adaptive-runtime-core: 4.13.0-preview - botbuilder-dialogs-declarative: 4.13.0-preview - botbuilder-lg: 4.13.0 - botframework-connector: 4.13.0 - botframework-schema: 4.13.0 + adaptive-expressions: 4.13.4 + botbuilder: 4.13.4 + botbuilder-dialogs: 4.13.4 + botbuilder-dialogs-adaptive-runtime-core: 4.13.4-preview + botbuilder-dialogs-declarative: 4.13.4-preview + botbuilder-lg: 4.13.4 + botframework-connector: 4.13.4 + botframework-schema: 4.13.4 lodash: ^4.17.21 node-fetch: ^2.6.0 - checksum: d659b0cdccc17f5666dff11d3ff21b97b2957e744863b00246c336fd3feeb1b581a32f0beefb8cb0c2625ba12682f17f5d5460c8f1633136fddfc82eaa699189 + checksum: d11907e44030b3dc2ed1c822679de512642ec1d0ad222d4e318292922c45d36cd37d82645f9835c4928065aca5cc75ab11f2e34aea124baac2b7ac6c0ab86686 languageName: node linkType: hard -"botbuilder-dialogs-declarative@npm:4.13.0-preview": - version: 4.13.0-preview - resolution: "botbuilder-dialogs-declarative@npm:4.13.0-preview" +"botbuilder-dialogs-declarative@npm:4.13.4-preview": + version: 4.13.4-preview + resolution: "botbuilder-dialogs-declarative@npm:4.13.4-preview" dependencies: - botbuilder-core: 4.13.0 - botbuilder-dialogs: 4.13.0 - botbuilder-stdlib: 4.13.0-internal + botbuilder-core: 4.13.4 + botbuilder-dialogs: 4.13.4 + botbuilder-stdlib: 4.13.4-internal chokidar: ^3.4.0 - checksum: 9c996c0cf4c9e705fe084dc8757e5af7ba9ac5cea2d8c18e7d2db05110bb8103a218b07614996994cbcffccc690b3e48492eaf376f8d42b1a5d4d183756073e6 + checksum: e18d637ca5cff9d0df34d813ac57108a617bc989dc37ae85130a2dc8756e11bb695fa47b8283fea8e629f47acae65d067ef9bd064411e8d27fc82d0e053e4d15 languageName: node linkType: hard -"botbuilder-dialogs@npm:4.13.0": - version: 4.13.0 - resolution: "botbuilder-dialogs@npm:4.13.0" +"botbuilder-dialogs@npm:4.13.4": + version: 4.13.4 + resolution: "botbuilder-dialogs@npm:4.13.4" dependencies: "@microsoft/recognizers-text-choice": 1.1.4 "@microsoft/recognizers-text-date-time": 1.1.4 "@microsoft/recognizers-text-number": 1.1.4 "@microsoft/recognizers-text-suite": 1.1.4 - botbuilder-core: 4.13.0 - botbuilder-dialogs-adaptive-runtime-core: 4.13.0-preview - botbuilder-stdlib: 4.13.0-internal - botframework-connector: 4.13.0 + botbuilder-core: 4.13.4 + botbuilder-dialogs-adaptive-runtime-core: 4.13.4-preview + botbuilder-stdlib: 4.13.4-internal + botframework-connector: 4.13.4 globalize: ^1.4.2 lodash: ^4.17.21 + runtypes: ~5.1.0 uuid: ^8.3.2 - checksum: a7d4c3a20a6768d9a4b7f868da0275bc32a66e90e62f213d6d497995acfc6e86035181d09f766a3f7f993295f7ac46d80794e220d26d26f34b54f5fac0b347c9 + checksum: b7ac611bbf67946d0e32383a2df03c8b16f15d80850bb2e235686d588150c015db8d3c1475cad7d452c03d61ac8c5d0e70e30e86508489936e9862090da9cbe7 languageName: node linkType: hard -"botbuilder-lg@npm:4.13.0": - version: 4.13.0 - resolution: "botbuilder-lg@npm:4.13.0" +"botbuilder-lg@npm:4.13.4": + version: 4.13.4 + resolution: "botbuilder-lg@npm:4.13.4" dependencies: - adaptive-expressions: 4.13.0 + adaptive-expressions: 4.13.4 antlr4ts: 0.5.0-alpha.3 lodash: ^4.17.19 path: ^0.12.7 uuid: ^8.3.2 - checksum: ff7af335dac04d8b7ae7c750f4e2cef3f4c0ab774a5257e8a56095d03342848a4cba3fed099867b1cba602c9702258a73b28cfec9b72c2a977b8daa1dc914cc9 + checksum: d1788d7ad6cc6fc64d818b89200e7d65b2a3e62e26267838b6b5861030f46fd54250bb46e6aa6da4c04425e317c002c51d00d09c22b894468cecd27ab20c4ee6 languageName: node linkType: hard -"botbuilder-stdlib@npm:4.13.0-internal": - version: 4.13.0-internal - resolution: "botbuilder-stdlib@npm:4.13.0-internal" - checksum: 6a494cab87b606342da617c9b8fe14b87fe242a52a1227093e5b61b65c1cc1939e2a88f28ee1263bddab88be79ddf7a57c23d0b0f3ec859444aaed59718c95d8 +"botbuilder-stdlib@npm:4.13.4-internal": + version: 4.13.4-internal + resolution: "botbuilder-stdlib@npm:4.13.4-internal" + checksum: c6dd92a039fcca421841d9c0ebec88438152edcc8cab6ef16b2e3653c0cee5d287b4b0df02117c24b51af72a13c095c0b25e34fe2631cd5572addc15a8b735ce languageName: node linkType: hard -"botbuilder@npm:4.13.0": - version: 4.13.0 - resolution: "botbuilder@npm:4.13.0" +"botbuilder@npm:4.13.4": + version: 4.13.4 + resolution: "botbuilder@npm:4.13.4" dependencies: "@azure/ms-rest-js": 1.9.1 axios: ^0.21.1 - botbuilder-core: 4.13.0 - botbuilder-dialogs-adaptive-runtime-core: 4.13.0-preview - botbuilder-stdlib: 4.13.0-internal - botframework-connector: 4.13.0 - botframework-streaming: 4.13.0 + botbuilder-core: 4.13.4 + botbuilder-dialogs-adaptive-runtime-core: 4.13.4-preview + botbuilder-stdlib: 4.13.4-internal + botframework-connector: 4.13.4 + botframework-streaming: 4.13.4 dayjs: ^1.10.3 filenamify: ^4.1.0 fs-extra: ^7.0.1 htmlparser2: ^6.0.1 uuid: ^8.3.2 - checksum: e420543cd34421b89711c9b21b07d157518b9ffee88712b60ca4288a3ff27522af8b3306e0fcf3ad8337c41892568363dc814d8a938b571678ab2dca771b1ff4 + checksum: 20b1ca64457e1c371401f3e79476d4395f829ef7c74ef529958d2a58f90c214f68e679c7c9d73beeee1ec94fda2ad41ad017778a9d05c55c11a0b36a5b11573e languageName: node linkType: hard -"botframework-connector@npm:4.13.0": - version: 4.13.0 - resolution: "botframework-connector@npm:4.13.0" +"botframework-connector@npm:4.13.4": + version: 4.13.4 + resolution: "botframework-connector@npm:4.13.4" dependencies: "@azure/ms-rest-js": 1.9.1 "@types/jsonwebtoken": 7.2.8 "@types/node": ^10.17.27 adal-node: 0.2.1 base64url: ^3.0.0 - botframework-schema: 4.13.0 + botframework-schema: 4.13.4 cross-fetch: ^3.0.5 jsonwebtoken: 8.0.1 rsa-pem-from-mod-exp: ^0.8.4 - checksum: c2b35820a77cfc708aa4ec1c6059376b56ca0fa020556b554334114b9aad47ed90ef484ba4b43aa72a61a2de7aca11d107cd44fe79c9eda23ba7a5d31c005a38 + checksum: 2d1ab8b2fd4af68634cb23e31014bbc5464abfe4d76722a275a551a0b81819f15ee89bc343a8a1b918498aecb062020d638a0b2ed3c660169bd005443986dc1d languageName: node linkType: hard -"botframework-schema@npm:4.13.0": - version: 4.13.0 - resolution: "botframework-schema@npm:4.13.0" +"botframework-schema@npm:4.13.4": + version: 4.13.4 + resolution: "botframework-schema@npm:4.13.4" dependencies: - botbuilder-stdlib: 4.13.0-internal - checksum: a16bde55420e8a853bf91b1961ce495efdb4881f5f34ea12ae2ce8a1f2295906319ad98e8b7de428006cfd37ee82b4fb52114397b8cb99b6a3fc603654869c99 + botbuilder-stdlib: 4.13.4-internal + checksum: 5cf0ec42293396802b083e8099077fcb86e40ab41efd4b955aeb76253754b50f35e7d602bf3d88dafb90586bc05ad1d55d959f793333fce6f522d831a1e487ac languageName: node linkType: hard -"botframework-streaming@npm:4.13.0": - version: 4.13.0 - resolution: "botframework-streaming@npm:4.13.0" +"botframework-streaming@npm:4.13.4": + version: 4.13.4 + resolution: "botframework-streaming@npm:4.13.4" dependencies: "@types/node": ^10.17.27 "@types/ws": ^6.0.3 uuid: ^8.3.2 ws: ^7.1.2 - checksum: cbf6d106dcb7bd1a8c0b31d6594ef02a8b3afcdd8c06df64980ee867f1a0b770a993c4b30265b925fc4ab6268604215855ee749b38d3fbc2ea1dcc6e219e582a + checksum: b85af5123e04968e5cf89518f643531b15e33da0a42153b33ff8f6f39aebe6b2a5083707c6c6a87a45d755a5f6243216acaee9d3ca24338d2d207c6af05f4f4e languageName: node linkType: hard From 49f622ae7de841201f50231b605e7c5aa3897cbd Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Tue, 18 May 2021 16:39:32 -0500 Subject: [PATCH 15/39] fix: Updated SDK dependencies (#1119) * Updated SDK dependencies * Temp fix for missing Adaptive.Test 4.13.2-preview * Left dotnet packages at 4.13.1, resolved some test dependencies * Did update dotnet package dependencies to 4.13.2 --- docs/assets/MultiplyDialog.csproj | 2 +- .../templates/dotnet/functions/botName.csproj | 6 +- .../templates/dotnet/webapp/botName.csproj | 6 +- .../generators/app/index.js | 2 +- ...rosoft.Bot.Components.AdaptiveCards.csproj | 2 +- .../Microsoft.Bot.Components.Graph.csproj | 2 +- ...rosoft.Bot.Components.HelpAndCancel.nuspec | 2 +- .../Microsoft.Bot.Components.Teams.csproj | 2 +- .../Microsoft.Bot.Components.Welcome.nuspec | 2 +- .../csharp/calendarskill/CalendarSkill.csproj | 2 +- .../CalendarSkill.Tests.csproj | 2 +- .../musicskill.Tests/MusicSkill.Tests.csproj | 2 +- .../Calendar/Calendar/Calendar.csproj | 2 +- .../Calendar/Calendar/schemas/sdk.schema | 246 +++++++++--------- .../declarative/People/People/People.csproj | 6 +- .../People/People/schemas/sdk.schema | 246 +++++++++--------- ...icrosoft.Bot.Components.Teams.Tests.csproj | 4 +- ...t.Bot.Dialogs.Tests.Skills.Calendar.csproj | 8 +- tests/skills/calendar/app.schema | 246 +++++++++--------- .../Microsoft.Bot.Dialogs.Tests.Common.csproj | 8 +- ...oft.Bot.Dialogs.Tests.Skills.People.csproj | 8 +- tests/skills/people/app.schema | 246 +++++++++--------- 22 files changed, 526 insertions(+), 526 deletions(-) diff --git a/docs/assets/MultiplyDialog.csproj b/docs/assets/MultiplyDialog.csproj index d59836c631..b070533348 100644 --- a/docs/assets/MultiplyDialog.csproj +++ b/docs/assets/MultiplyDialog.csproj @@ -21,7 +21,7 @@ - + diff --git a/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj b/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj index 450ab052c9..eee16f6272 100644 --- a/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj +++ b/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj @@ -14,9 +14,9 @@ - - - + + + <%- packageReferences %> diff --git a/generators/generator-bot-adaptive/generators/app/templates/dotnet/webapp/botName.csproj b/generators/generator-bot-adaptive/generators/app/templates/dotnet/webapp/botName.csproj index 1a5c38beb3..d312a50673 100644 --- a/generators/generator-bot-adaptive/generators/app/templates/dotnet/webapp/botName.csproj +++ b/generators/generator-bot-adaptive/generators/app/templates/dotnet/webapp/botName.csproj @@ -11,8 +11,8 @@ - - - <%- packageReferences %> + + + <%- packageReferences %> \ No newline at end of file diff --git a/generators/generator-bot-enterprise-assistant/generators/app/index.js b/generators/generator-bot-enterprise-assistant/generators/app/index.js index 4bd86c3459..33ed5d2b6f 100644 --- a/generators/generator-bot-enterprise-assistant/generators/app/index.js +++ b/generators/generator-bot-enterprise-assistant/generators/app/index.js @@ -36,7 +36,7 @@ module.exports = class extends BaseGenerator { { isPlugin: true, name: 'Microsoft.Bot.Builder.AI.Orchestrator', - version: '4.13.1', + version: '4.13.2', }, ], modifyApplicationSettings: (appSettings) => { diff --git a/packages/AdaptiveCards/Microsoft.Bot.Components.AdaptiveCards.csproj b/packages/AdaptiveCards/Microsoft.Bot.Components.AdaptiveCards.csproj index cab10b1173..ebcd529718 100644 --- a/packages/AdaptiveCards/Microsoft.Bot.Components.AdaptiveCards.csproj +++ b/packages/AdaptiveCards/Microsoft.Bot.Components.AdaptiveCards.csproj @@ -20,7 +20,7 @@ - + diff --git a/packages/Graph/Microsoft.Bot.Components.Graph.csproj b/packages/Graph/Microsoft.Bot.Components.Graph.csproj index 377bd1ac40..7e09985822 100644 --- a/packages/Graph/Microsoft.Bot.Components.Graph.csproj +++ b/packages/Graph/Microsoft.Bot.Components.Graph.csproj @@ -20,7 +20,7 @@ - + all diff --git a/packages/HelpAndCancel/Microsoft.Bot.Components.HelpAndCancel.nuspec b/packages/HelpAndCancel/Microsoft.Bot.Components.HelpAndCancel.nuspec index dc0a02e86e..dd564f2118 100644 --- a/packages/HelpAndCancel/Microsoft.Bot.Components.HelpAndCancel.nuspec +++ b/packages/HelpAndCancel/Microsoft.Bot.Components.HelpAndCancel.nuspec @@ -13,7 +13,7 @@ Contains Adaptive Dialog assets to support Help and Cancel conversational flows in a bot built on the Azure Bot Framework. msbot-component msbot-content conversationalcore helpintent cancelintent preview - + diff --git a/packages/Teams/dotnet/Microsoft.Bot.Components.Teams.csproj b/packages/Teams/dotnet/Microsoft.Bot.Components.Teams.csproj index 467e2a77c6..d333f2f004 100644 --- a/packages/Teams/dotnet/Microsoft.Bot.Components.Teams.csproj +++ b/packages/Teams/dotnet/Microsoft.Bot.Components.Teams.csproj @@ -35,7 +35,7 @@ - + diff --git a/packages/Welcome/Microsoft.Bot.Components.Welcome.nuspec b/packages/Welcome/Microsoft.Bot.Components.Welcome.nuspec index 1ef9040ce5..43d5a1026d 100644 --- a/packages/Welcome/Microsoft.Bot.Components.Welcome.nuspec +++ b/packages/Welcome/Microsoft.Bot.Components.Welcome.nuspec @@ -13,7 +13,7 @@ An Adaptive Dialog for greeting new and returning users on first interaction with your bot built on the Azure Bot Framework. msbot-component msbot-content conversationalcore welcome preview - + diff --git a/skills/csharp/calendarskill/CalendarSkill.csproj b/skills/csharp/calendarskill/CalendarSkill.csproj index a7baab8a41..58f7186653 100644 --- a/skills/csharp/calendarskill/CalendarSkill.csproj +++ b/skills/csharp/calendarskill/CalendarSkill.csproj @@ -14,7 +14,7 @@ - + diff --git a/skills/csharp/tests/calendarskill.tests/CalendarSkill.Tests.csproj b/skills/csharp/tests/calendarskill.tests/CalendarSkill.Tests.csproj index 21708cf623..0abbdbf069 100644 --- a/skills/csharp/tests/calendarskill.tests/CalendarSkill.Tests.csproj +++ b/skills/csharp/tests/calendarskill.tests/CalendarSkill.Tests.csproj @@ -16,7 +16,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/skills/csharp/tests/musicskill.Tests/MusicSkill.Tests.csproj b/skills/csharp/tests/musicskill.Tests/MusicSkill.Tests.csproj index a1806ec2ae..0c3057ccf3 100644 --- a/skills/csharp/tests/musicskill.Tests/MusicSkill.Tests.csproj +++ b/skills/csharp/tests/musicskill.Tests/MusicSkill.Tests.csproj @@ -12,7 +12,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/skills/declarative/Calendar/Calendar/Calendar.csproj b/skills/declarative/Calendar/Calendar/Calendar.csproj index 7b60ce7cd5..7fe5d77eb9 100644 --- a/skills/declarative/Calendar/Calendar/Calendar.csproj +++ b/skills/declarative/Calendar/Calendar/Calendar.csproj @@ -12,7 +12,7 @@ - + diff --git a/skills/declarative/Calendar/Calendar/schemas/sdk.schema b/skills/declarative/Calendar/Calendar/schemas/sdk.schema index afe7be3149..a05f0fe923 100644 --- a/skills/declarative/Calendar/Calendar/schemas/sdk.schema +++ b/skills/declarative/Calendar/Calendar/schemas/sdk.schema @@ -421,7 +421,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -457,7 +457,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -566,7 +566,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -606,7 +606,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -686,7 +686,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "type": "object", "required": [ @@ -878,7 +878,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -969,7 +969,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -1091,7 +1091,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -1138,7 +1138,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -1205,7 +1205,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -1271,7 +1271,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -1311,7 +1311,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -1667,7 +1667,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -1717,7 +1717,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2016,7 +2016,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2054,7 +2054,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2128,7 +2128,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2191,7 +2191,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2239,7 +2239,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2287,7 +2287,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2324,7 +2324,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2370,7 +2370,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2537,7 +2537,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2588,7 +2588,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2644,7 +2644,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2702,7 +2702,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2754,7 +2754,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2793,7 +2793,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2871,7 +2871,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2959,7 +2959,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2997,7 +2997,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -3089,7 +3089,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3145,7 +3145,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3192,7 +3192,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3230,7 +3230,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -3307,7 +3307,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -3386,7 +3386,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3449,7 +3449,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3504,7 +3504,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3566,7 +3566,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -5838,7 +5838,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -5875,7 +5875,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -5914,7 +5914,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -6053,7 +6053,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.1" + "version": "4.13.2" } }, "Microsoft.IAdapter": { @@ -6063,7 +6063,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime", - "version": "4.13.1" + "version": "4.13.2" }, "properties": { "route": { @@ -6303,7 +6303,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.1" + "version": "4.13.2" } }, "Microsoft.IEntityRecognizer": { @@ -6313,7 +6313,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "oneOf": [ { @@ -6394,7 +6394,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" } }, "Microsoft.IRecognizer": { @@ -6483,7 +6483,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.1" + "version": "4.13.2" } }, "Microsoft.ITextTemplate": { @@ -6500,7 +6500,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.1" + "version": "4.13.2" } }, "Microsoft.ITrigger": { @@ -6509,7 +6509,7 @@ "description": "Components which derive from OnCondition class.", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "oneOf": [ { @@ -6612,7 +6612,7 @@ "description": "Components which derive from TriggerSelector class.", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "oneOf": [ { @@ -6648,7 +6648,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -6716,7 +6716,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -6860,7 +6860,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -6893,7 +6893,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -6940,7 +6940,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -7007,7 +7007,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.AI.Luis", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -7148,7 +7148,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7182,7 +7182,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7224,7 +7224,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -7279,7 +7279,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7319,7 +7319,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7496,7 +7496,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7537,7 +7537,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -7678,7 +7678,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -7748,7 +7748,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7831,7 +7831,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7899,7 +7899,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7967,7 +7967,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -8053,7 +8053,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8127,7 +8127,7 @@ "description": "Actions to take when there are multiple possible mappings of entities to properties and operations.", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "type": "object", "required": [ @@ -8199,7 +8199,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8267,7 +8267,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8332,7 +8332,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8400,7 +8400,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8468,7 +8468,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8537,7 +8537,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8606,7 +8606,7 @@ "description": "Actions to take when there are no more actions in the current dialog.", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "type": "object", "required": [ @@ -8681,7 +8681,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8746,7 +8746,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -8817,7 +8817,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8885,7 +8885,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8953,7 +8953,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9021,7 +9021,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9104,7 +9104,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9172,7 +9172,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9240,7 +9240,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9308,7 +9308,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9376,7 +9376,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9444,7 +9444,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9509,7 +9509,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -9580,7 +9580,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9648,7 +9648,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9713,7 +9713,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -9750,7 +9750,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -9787,7 +9787,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -9827,7 +9827,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.AI.QnA", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9992,7 +9992,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.AI.QnA", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10175,7 +10175,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10218,7 +10218,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10271,7 +10271,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10312,7 +10312,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10385,7 +10385,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10459,7 +10459,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10540,7 +10540,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10590,7 +10590,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10640,7 +10640,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10688,7 +10688,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10768,7 +10768,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10831,7 +10831,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10894,7 +10894,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10937,7 +10937,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -11043,7 +11043,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -11107,7 +11107,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -11141,7 +11141,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -11186,7 +11186,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -11360,7 +11360,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -11403,7 +11403,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -11452,7 +11452,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -11520,7 +11520,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -11554,7 +11554,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -11619,7 +11619,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" diff --git a/skills/declarative/People/People/People.csproj b/skills/declarative/People/People/People.csproj index bdd45f7c2b..9b4d6229b0 100644 --- a/skills/declarative/People/People/People.csproj +++ b/skills/declarative/People/People/People.csproj @@ -12,9 +12,9 @@ - - - + + + \ No newline at end of file diff --git a/skills/declarative/People/People/schemas/sdk.schema b/skills/declarative/People/People/schemas/sdk.schema index 8aae58c52e..c330ce743c 100644 --- a/skills/declarative/People/People/schemas/sdk.schema +++ b/skills/declarative/People/People/schemas/sdk.schema @@ -421,7 +421,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -457,7 +457,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -566,7 +566,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -606,7 +606,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -686,7 +686,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "type": "object", "required": [ @@ -878,7 +878,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -969,7 +969,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -1091,7 +1091,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -1138,7 +1138,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -1205,7 +1205,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -1271,7 +1271,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -1311,7 +1311,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -1667,7 +1667,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -1717,7 +1717,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2016,7 +2016,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2054,7 +2054,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2128,7 +2128,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2191,7 +2191,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2239,7 +2239,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2287,7 +2287,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2324,7 +2324,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2370,7 +2370,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2537,7 +2537,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2588,7 +2588,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2644,7 +2644,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2702,7 +2702,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2754,7 +2754,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2793,7 +2793,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2871,7 +2871,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2959,7 +2959,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2997,7 +2997,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -3089,7 +3089,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3145,7 +3145,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3192,7 +3192,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3230,7 +3230,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -3307,7 +3307,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -3386,7 +3386,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3449,7 +3449,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3504,7 +3504,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3566,7 +3566,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -5540,7 +5540,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -5577,7 +5577,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -5616,7 +5616,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -5755,7 +5755,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.1" + "version": "4.13.2" } }, "Microsoft.IAdapter": { @@ -5765,7 +5765,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime", - "version": "4.13.1" + "version": "4.13.2" }, "properties": { "route": { @@ -6005,7 +6005,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.1" + "version": "4.13.2" } }, "Microsoft.IEntityRecognizer": { @@ -6015,7 +6015,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "oneOf": [ { @@ -6096,7 +6096,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" } }, "Microsoft.IRecognizer": { @@ -6185,7 +6185,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.1" + "version": "4.13.2" } }, "Microsoft.ITextTemplate": { @@ -6202,7 +6202,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.1" + "version": "4.13.2" } }, "Microsoft.ITrigger": { @@ -6211,7 +6211,7 @@ "description": "Components which derive from OnCondition class.", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "oneOf": [ { @@ -6314,7 +6314,7 @@ "description": "Components which derive from TriggerSelector class.", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "oneOf": [ { @@ -6350,7 +6350,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -6418,7 +6418,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -6562,7 +6562,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -6595,7 +6595,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -6642,7 +6642,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -6709,7 +6709,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.AI.Luis", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -6850,7 +6850,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -6884,7 +6884,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -6926,7 +6926,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -6981,7 +6981,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7021,7 +7021,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7198,7 +7198,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7239,7 +7239,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -7380,7 +7380,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -7450,7 +7450,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7533,7 +7533,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7601,7 +7601,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7669,7 +7669,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7755,7 +7755,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -7829,7 +7829,7 @@ "description": "Actions to take when there are multiple possible mappings of entities to properties and operations.", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "type": "object", "required": [ @@ -7901,7 +7901,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -7969,7 +7969,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8034,7 +8034,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8102,7 +8102,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8170,7 +8170,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8239,7 +8239,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8308,7 +8308,7 @@ "description": "Actions to take when there are no more actions in the current dialog.", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "type": "object", "required": [ @@ -8383,7 +8383,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8448,7 +8448,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -8519,7 +8519,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8587,7 +8587,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8655,7 +8655,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8723,7 +8723,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8806,7 +8806,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8874,7 +8874,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8942,7 +8942,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9010,7 +9010,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9078,7 +9078,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9146,7 +9146,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9211,7 +9211,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -9282,7 +9282,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9350,7 +9350,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9415,7 +9415,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -9452,7 +9452,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -9489,7 +9489,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -9529,7 +9529,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.AI.QnA", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9694,7 +9694,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.AI.QnA", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9877,7 +9877,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -9920,7 +9920,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9973,7 +9973,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10014,7 +10014,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10087,7 +10087,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10161,7 +10161,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10242,7 +10242,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10292,7 +10292,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10342,7 +10342,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10390,7 +10390,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10470,7 +10470,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10533,7 +10533,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10596,7 +10596,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10639,7 +10639,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10745,7 +10745,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10809,7 +10809,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10843,7 +10843,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10888,7 +10888,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -11062,7 +11062,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -11105,7 +11105,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -11154,7 +11154,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -11222,7 +11222,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -11256,7 +11256,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -11321,7 +11321,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Microsoft.Bot.Components.Teams.Tests.csproj b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Microsoft.Bot.Components.Teams.Tests.csproj index a7acbe328a..c49768951b 100644 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Microsoft.Bot.Components.Teams.Tests.csproj +++ b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Microsoft.Bot.Components.Teams.Tests.csproj @@ -10,8 +10,8 @@ - - + + diff --git a/tests/skills/calendar/Microsoft.Bot.Dialogs.Tests.Skills.Calendar.csproj b/tests/skills/calendar/Microsoft.Bot.Dialogs.Tests.Skills.Calendar.csproj index cd24e67d7e..2aa48c5aa1 100644 --- a/tests/skills/calendar/Microsoft.Bot.Dialogs.Tests.Skills.Calendar.csproj +++ b/tests/skills/calendar/Microsoft.Bot.Dialogs.Tests.Skills.Calendar.csproj @@ -7,10 +7,10 @@ - - - - + + + + diff --git a/tests/skills/calendar/app.schema b/tests/skills/calendar/app.schema index afe7be3149..a05f0fe923 100644 --- a/tests/skills/calendar/app.schema +++ b/tests/skills/calendar/app.schema @@ -421,7 +421,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -457,7 +457,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -566,7 +566,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -606,7 +606,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -686,7 +686,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "type": "object", "required": [ @@ -878,7 +878,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -969,7 +969,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -1091,7 +1091,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -1138,7 +1138,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -1205,7 +1205,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -1271,7 +1271,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -1311,7 +1311,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -1667,7 +1667,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -1717,7 +1717,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2016,7 +2016,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2054,7 +2054,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2128,7 +2128,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2191,7 +2191,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2239,7 +2239,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2287,7 +2287,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2324,7 +2324,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2370,7 +2370,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2537,7 +2537,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2588,7 +2588,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2644,7 +2644,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2702,7 +2702,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2754,7 +2754,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2793,7 +2793,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2871,7 +2871,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2959,7 +2959,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2997,7 +2997,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -3089,7 +3089,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3145,7 +3145,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3192,7 +3192,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3230,7 +3230,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -3307,7 +3307,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -3386,7 +3386,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3449,7 +3449,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3504,7 +3504,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3566,7 +3566,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -5838,7 +5838,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -5875,7 +5875,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -5914,7 +5914,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -6053,7 +6053,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.1" + "version": "4.13.2" } }, "Microsoft.IAdapter": { @@ -6063,7 +6063,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime", - "version": "4.13.1" + "version": "4.13.2" }, "properties": { "route": { @@ -6303,7 +6303,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.1" + "version": "4.13.2" } }, "Microsoft.IEntityRecognizer": { @@ -6313,7 +6313,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "oneOf": [ { @@ -6394,7 +6394,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" } }, "Microsoft.IRecognizer": { @@ -6483,7 +6483,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.1" + "version": "4.13.2" } }, "Microsoft.ITextTemplate": { @@ -6500,7 +6500,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.1" + "version": "4.13.2" } }, "Microsoft.ITrigger": { @@ -6509,7 +6509,7 @@ "description": "Components which derive from OnCondition class.", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "oneOf": [ { @@ -6612,7 +6612,7 @@ "description": "Components which derive from TriggerSelector class.", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "oneOf": [ { @@ -6648,7 +6648,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -6716,7 +6716,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -6860,7 +6860,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -6893,7 +6893,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -6940,7 +6940,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -7007,7 +7007,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.AI.Luis", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -7148,7 +7148,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7182,7 +7182,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7224,7 +7224,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -7279,7 +7279,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7319,7 +7319,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7496,7 +7496,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7537,7 +7537,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -7678,7 +7678,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -7748,7 +7748,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7831,7 +7831,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7899,7 +7899,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7967,7 +7967,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -8053,7 +8053,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8127,7 +8127,7 @@ "description": "Actions to take when there are multiple possible mappings of entities to properties and operations.", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "type": "object", "required": [ @@ -8199,7 +8199,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8267,7 +8267,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8332,7 +8332,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8400,7 +8400,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8468,7 +8468,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8537,7 +8537,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8606,7 +8606,7 @@ "description": "Actions to take when there are no more actions in the current dialog.", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "type": "object", "required": [ @@ -8681,7 +8681,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8746,7 +8746,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -8817,7 +8817,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8885,7 +8885,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8953,7 +8953,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9021,7 +9021,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9104,7 +9104,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9172,7 +9172,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9240,7 +9240,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9308,7 +9308,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9376,7 +9376,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9444,7 +9444,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9509,7 +9509,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -9580,7 +9580,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9648,7 +9648,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9713,7 +9713,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -9750,7 +9750,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -9787,7 +9787,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -9827,7 +9827,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.AI.QnA", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9992,7 +9992,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.AI.QnA", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10175,7 +10175,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10218,7 +10218,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10271,7 +10271,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10312,7 +10312,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10385,7 +10385,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10459,7 +10459,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10540,7 +10540,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10590,7 +10590,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10640,7 +10640,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10688,7 +10688,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10768,7 +10768,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10831,7 +10831,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10894,7 +10894,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10937,7 +10937,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -11043,7 +11043,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -11107,7 +11107,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -11141,7 +11141,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -11186,7 +11186,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -11360,7 +11360,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -11403,7 +11403,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -11452,7 +11452,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -11520,7 +11520,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -11554,7 +11554,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -11619,7 +11619,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" diff --git a/tests/skills/common/Microsoft.Bot.Dialogs.Tests.Common.csproj b/tests/skills/common/Microsoft.Bot.Dialogs.Tests.Common.csproj index b071378c69..d385a3800d 100644 --- a/tests/skills/common/Microsoft.Bot.Dialogs.Tests.Common.csproj +++ b/tests/skills/common/Microsoft.Bot.Dialogs.Tests.Common.csproj @@ -6,10 +6,10 @@ - - - - + + + + diff --git a/tests/skills/people/Microsoft.Bot.Dialogs.Tests.Skills.People.csproj b/tests/skills/people/Microsoft.Bot.Dialogs.Tests.Skills.People.csproj index caf377d591..b0624527cf 100644 --- a/tests/skills/people/Microsoft.Bot.Dialogs.Tests.Skills.People.csproj +++ b/tests/skills/people/Microsoft.Bot.Dialogs.Tests.Skills.People.csproj @@ -6,10 +6,10 @@ - - - - + + + + diff --git a/tests/skills/people/app.schema b/tests/skills/people/app.schema index afe7be3149..a05f0fe923 100644 --- a/tests/skills/people/app.schema +++ b/tests/skills/people/app.schema @@ -421,7 +421,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -457,7 +457,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -566,7 +566,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -606,7 +606,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -686,7 +686,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "type": "object", "required": [ @@ -878,7 +878,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -969,7 +969,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -1091,7 +1091,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -1138,7 +1138,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -1205,7 +1205,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -1271,7 +1271,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -1311,7 +1311,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -1667,7 +1667,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -1717,7 +1717,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2016,7 +2016,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2054,7 +2054,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2128,7 +2128,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2191,7 +2191,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2239,7 +2239,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2287,7 +2287,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2324,7 +2324,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2370,7 +2370,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2537,7 +2537,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2588,7 +2588,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2644,7 +2644,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2702,7 +2702,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2754,7 +2754,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2793,7 +2793,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2871,7 +2871,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -2959,7 +2959,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -2997,7 +2997,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -3089,7 +3089,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3145,7 +3145,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3192,7 +3192,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3230,7 +3230,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -3307,7 +3307,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -3386,7 +3386,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3449,7 +3449,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3504,7 +3504,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -3566,7 +3566,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -5838,7 +5838,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -5875,7 +5875,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -5914,7 +5914,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -6053,7 +6053,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.1" + "version": "4.13.2" } }, "Microsoft.IAdapter": { @@ -6063,7 +6063,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime", - "version": "4.13.1" + "version": "4.13.2" }, "properties": { "route": { @@ -6303,7 +6303,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.1" + "version": "4.13.2" } }, "Microsoft.IEntityRecognizer": { @@ -6313,7 +6313,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "oneOf": [ { @@ -6394,7 +6394,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" } }, "Microsoft.IRecognizer": { @@ -6483,7 +6483,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.1" + "version": "4.13.2" } }, "Microsoft.ITextTemplate": { @@ -6500,7 +6500,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.1" + "version": "4.13.2" } }, "Microsoft.ITrigger": { @@ -6509,7 +6509,7 @@ "description": "Components which derive from OnCondition class.", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "oneOf": [ { @@ -6612,7 +6612,7 @@ "description": "Components which derive from TriggerSelector class.", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "oneOf": [ { @@ -6648,7 +6648,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -6716,7 +6716,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -6860,7 +6860,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -6893,7 +6893,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -6940,7 +6940,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -7007,7 +7007,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.AI.Luis", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -7148,7 +7148,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7182,7 +7182,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7224,7 +7224,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -7279,7 +7279,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7319,7 +7319,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7496,7 +7496,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7537,7 +7537,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -7678,7 +7678,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -7748,7 +7748,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7831,7 +7831,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7899,7 +7899,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -7967,7 +7967,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -8053,7 +8053,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8127,7 +8127,7 @@ "description": "Actions to take when there are multiple possible mappings of entities to properties and operations.", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "type": "object", "required": [ @@ -8199,7 +8199,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8267,7 +8267,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8332,7 +8332,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8400,7 +8400,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8468,7 +8468,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8537,7 +8537,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8606,7 +8606,7 @@ "description": "Actions to take when there are no more actions in the current dialog.", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "type": "object", "required": [ @@ -8681,7 +8681,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8746,7 +8746,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -8817,7 +8817,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8885,7 +8885,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -8953,7 +8953,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9021,7 +9021,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9104,7 +9104,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9172,7 +9172,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9240,7 +9240,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9308,7 +9308,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9376,7 +9376,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9444,7 +9444,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9509,7 +9509,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -9580,7 +9580,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9648,7 +9648,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9713,7 +9713,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -9750,7 +9750,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -9787,7 +9787,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -9827,7 +9827,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.AI.QnA", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -9992,7 +9992,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.AI.QnA", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10175,7 +10175,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10218,7 +10218,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10271,7 +10271,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10312,7 +10312,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10385,7 +10385,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10459,7 +10459,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10540,7 +10540,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10590,7 +10590,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10640,7 +10640,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10688,7 +10688,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10768,7 +10768,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10831,7 +10831,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -10894,7 +10894,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -10937,7 +10937,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -11043,7 +11043,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -11107,7 +11107,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -11141,7 +11141,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -11186,7 +11186,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -11360,7 +11360,7 @@ ], "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -11403,7 +11403,7 @@ }, "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "additionalProperties": false, "patternProperties": { @@ -11452,7 +11452,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -11520,7 +11520,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -11554,7 +11554,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" @@ -11619,7 +11619,7 @@ "type": "object", "$package": { "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.1" + "version": "4.13.2" }, "required": [ "$kind" From 9de3d82cd6c3cb34ebc23699515acc465d3f41c0 Mon Sep 17 00:00:00 2001 From: Eric Dahlvang Date: Wed, 19 May 2021 06:50:01 -0700 Subject: [PATCH 16/39] chore: Add tags to Teams component project file (#1115) * Add tags to Teams component project file * Add config information to readme for Teams component --- .../Microsoft.Bot.Components.Teams.csproj | 2 +- packages/Teams/dotnet/README.md | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/packages/Teams/dotnet/Microsoft.Bot.Components.Teams.csproj b/packages/Teams/dotnet/Microsoft.Bot.Components.Teams.csproj index d333f2f004..0edf95a100 100644 --- a/packages/Teams/dotnet/Microsoft.Bot.Components.Teams.csproj +++ b/packages/Teams/dotnet/Microsoft.Bot.Components.Teams.csproj @@ -8,7 +8,7 @@ This library implements .NET support for adaptive dialogs with Microsoft Teams https://github.com/Microsoft/botframework-components/tree/main/packages/Teams/dotnet content - msbot-component;msbot-action;msbot-trigger + bots;botframework;botbuilder;msbot-component;msbot-action;msbot-trigger;msbot-middleware true ..\..\..\build\35MSSharedLib1024.snk true diff --git a/packages/Teams/dotnet/README.md b/packages/Teams/dotnet/README.md index 7394c558dc..9128e2c1b1 100644 --- a/packages/Teams/dotnet/README.md +++ b/packages/Teams/dotnet/README.md @@ -12,6 +12,34 @@ Once you've installed the package using [Bot Framework Composer](https://docs.mi Make sure you've enabled the connection to Microsoft Teams in the `Connections` tab of your `Project Settings` in Composer. +### Usage + +Once installed you should find a Microsoft.Bot.Components.Team in the Components section of the config. In order to use the Single Sign On Middleware, ensure there is also a root level section titled "Microsoft.Bot.Components.Team", with useSingleSignOnMiddleware set to true and the proper Bot Oauth connectionName: + +```json + "runtimeSettings": { + "components": [ + { + "name": "Microsoft.Bot.Components.Teams", + "settingsPrefix": "Microsoft.Bot.Components.Teams" + } + ], + ... + }, + + "Microsoft.Bot.Components.Teams":{ + "useSingleSignOnMiddleware": true, + "connectionName": "TestTeamsSSO" + }, + + "CosmosDbPartitionedStorage": { + "authKey": "YourCosmosDbAuthKey", + "containerId": "YourBotStateContainer", + "cosmosDBEndpoint": "https://yourcosmosdb.documents.azure.com:443/", + "databaseId": "YourDatabaseName" + }, +``` + ## Learn more Learn more about [creating bots for Microsoft Teams](https://docs.microsoft.com/microsoftteams/platform/bots/what-are-bots). From 7dff24e9ce6ee8fc558557e348ad2d9bcb2724ba Mon Sep 17 00:00:00 2001 From: Josh Gummersall <1235378+joshgummersall@users.noreply.github.com> Date: Wed, 19 May 2021 06:55:54 -0700 Subject: [PATCH 17/39] fix: orphaned schemas (#1068) Fixes #1067 --- .../TriggerConditions/Teams.OnTeamHardDeleted.uischema | 0 .../TriggerConditions/Teams.OnTeamHardDeleted.uischema | 7 +++++++ 2 files changed, 7 insertions(+) rename packages/Teams/{ => dotnet}/Schemas/TriggerConditions/Teams.OnTeamHardDeleted.uischema (100%) create mode 100644 packages/Teams/js/schemas/TriggerConditions/Teams.OnTeamHardDeleted.uischema diff --git a/packages/Teams/Schemas/TriggerConditions/Teams.OnTeamHardDeleted.uischema b/packages/Teams/dotnet/Schemas/TriggerConditions/Teams.OnTeamHardDeleted.uischema similarity index 100% rename from packages/Teams/Schemas/TriggerConditions/Teams.OnTeamHardDeleted.uischema rename to packages/Teams/dotnet/Schemas/TriggerConditions/Teams.OnTeamHardDeleted.uischema diff --git a/packages/Teams/js/schemas/TriggerConditions/Teams.OnTeamHardDeleted.uischema b/packages/Teams/js/schemas/TriggerConditions/Teams.OnTeamHardDeleted.uischema new file mode 100644 index 0000000000..18118caf37 --- /dev/null +++ b/packages/Teams/js/schemas/TriggerConditions/Teams.OnTeamHardDeleted.uischema @@ -0,0 +1,7 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema", + "trigger": { + "submenu": "Microsoft Teams", + "label": "On team hard deleted" + } +} From e16397c6b3d1ed03c432eedc03a77c0ebf9cd192 Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Thu, 20 May 2021 13:17:43 -0500 Subject: [PATCH 18/39] PR labeler corrections (#1125) --- .github/labeler.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/labeler.yml b/.github/labeler.yml index c401582ebc..c28435f13e 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -11,10 +11,10 @@ - generators/generator-bot-core-assistant/**/* "Area: Generators: Core Language": - - generators/generator-core-language/**/* + - generators/generator-bot-core-language/**/* "Area: Generators: Core QnA": - - generators/generator-bot-qna/**/* + - generators/generator-bot-core-qna/**/* "Area: Generators: Empty": - generators/generator-bot-empty/**/* @@ -25,6 +25,9 @@ "Area: Generators: Enterprise Calendar": - generators/generator-bot-enterprise-calendar/**/* +"Area: Generators: Enterprise People": + - generators/generator-bot-enterprise-people/**/* + "Area: Packages: Adaptive Cards": - packages/AdaptiveCards/**/* From 354d19e3d60f820a5d66555827d9c0304c995314 Mon Sep 17 00:00:00 2001 From: Andrew Clear <1139814+clearab@users.noreply.github.com> Date: Wed, 26 May 2021 11:51:15 -0700 Subject: [PATCH 19/39] cleanup (#1127) --- README.md | 2 +- assets/packageManager.PNG | Bin 114959 -> 0 bytes docs/assets/MultiplyDialog.cs | 81 ----------- docs/assets/MultiplyDialog.csproj | 27 ---- docs/assets/MultiplyDialog.schema | 25 ---- docs/assets/MultiplyDialogBotComponent.cs | 33 ----- docs/creating-packages.md | 104 -------------- docs/creating-templates.md | 11 -- docs/extending-with-code.md | 160 ---------------------- docs/extending-with-packages.md | 59 -------- docs/overview.md | 29 ---- 11 files changed, 1 insertion(+), 530 deletions(-) delete mode 100644 assets/packageManager.PNG delete mode 100644 docs/assets/MultiplyDialog.cs delete mode 100644 docs/assets/MultiplyDialog.csproj delete mode 100644 docs/assets/MultiplyDialog.schema delete mode 100644 docs/assets/MultiplyDialogBotComponent.cs delete mode 100644 docs/creating-packages.md delete mode 100644 docs/creating-templates.md delete mode 100644 docs/extending-with-code.md delete mode 100644 docs/extending-with-packages.md delete mode 100644 docs/overview.md diff --git a/README.md b/README.md index 7d05e49f79..57de73eeec 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ You'll primarily use components through [**Bot Framework Composer**](https://git ## Creating your own components -You can also create your own packages and templates for use from Composer. We document creating components [here](/docs/overview.md). You can use this repository as examples for building your own components. +You can also create your own packages and templates for use from Composer. We document creating components [here](https://docs.microsoft.com/composer/concept-packages). You can also check out [our samples](https://github.com/microsoft/BotBuilder-Samples/tree/main/composer_samples). ## Index of Content diff --git a/assets/packageManager.PNG b/assets/packageManager.PNG deleted file mode 100644 index 414d6d4797062a058c8d947456a0e8ce5705e39b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114959 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≫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ℑhVq=cElNC=3Ge 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 - /// Custom command which takes takes 2 data bound arguments (arg1 and arg2) and multiplies them returning that as a databound result. - /// - public class MultiplyDialog : Dialog - { - [JsonConstructor] - public MultiplyDialog([CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0) - : base() - { - // enable instances of this command as debug break point - this.RegisterSourceLocation(sourceFilePath, sourceLineNumber); - } - - /// - /// Gets the unique name of this Adaptive Dialog. - /// - [JsonProperty("$kind")] - public const string Kind = "MultiplyDialog"; - - /// - /// Gets or sets memory path to bind to arg1 (ex: action.arg1). - /// - /// - /// Memory path to bind to arg1 (ex: action.arg1). - /// - [JsonProperty("arg1")] - public NumberExpression Arg1 { get; set; } - - /// - /// Gets or sets memory path to bind to arg2 (ex: action.arg2). - /// - /// - /// Memory path to bind to arg2 (ex: action.arg2). - /// - [JsonProperty("arg2")] - public NumberExpression Arg2 { get; set; } - - /// - /// Gets or sets caller's memory path to store the result of this step in (ex: dialog.result). - /// - /// - /// Caller's memory path to store the result of this step in (ex: dialog.result). - /// - /// - /// This is where the result of the Dialog is stored and accessible in Composer. - /// - [JsonProperty("resultProperty")] - public StringExpression ResultProperty { get; set; } - - /// - /// Override BeginDialogAsync to provide the custom action functionality. The inputs, in this case, - /// are define in Arg1 and Arg2. The result of the the dialog is stored in ResultProperty. - /// - public override Task BeginDialogAsync(DialogContext dc, object options = null, CancellationToken cancellationToken = default(CancellationToken)) - { - var arg1 = Arg1.GetValue(dc.State); - var arg2 = Arg2.GetValue(dc.State); - - var result = Convert.ToInt32(arg1) * Convert.ToInt32(arg2); - if (this.ResultProperty != null) - { - dc.State.SetValue(this.ResultProperty.GetValue(dc.State), result); - } - - return dc.EndDialogAsync(result: result, cancellationToken: cancellationToken); - } - } -} diff --git a/docs/assets/MultiplyDialog.csproj b/docs/assets/MultiplyDialog.csproj deleted file mode 100644 index b070533348..0000000000 --- a/docs/assets/MultiplyDialog.csproj +++ /dev/null @@ -1,27 +0,0 @@ - - - - Library - netcoreapp3.1 - CustomAction.MultiplyDialog - This library implements .NET support for the MultiplyDialog custom action sample BotComponent. - This library implements .NET support for the MultiplyDialog custom action sample BotComponent. - content - - msbot-component;msbot-action - - - - - - - - - - - - - - - - diff --git a/docs/assets/MultiplyDialog.schema b/docs/assets/MultiplyDialog.schema deleted file mode 100644 index f2928a25aa..0000000000 --- a/docs/assets/MultiplyDialog.schema +++ /dev/null @@ -1,25 +0,0 @@ -{ - "$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema", - "$role": "implements(Microsoft.IDialog)", - "title": "Multiply", - "description": "This will return the result of arg1*arg2", - "type": "object", - "additionalProperties": false, - "properties": { - "arg1": { - "$ref": "schema:#/definitions/integerExpression", - "title": "Arg1", - "description": "Value from callers memory to use as arg 1" - }, - "arg2": { - "$ref": "schema:#/definitions/integerExpression", - "title": "Arg2", - "description": "Value from callers memory to use as arg 2" - }, - "resultProperty": { - "$ref": "schema:#/definitions/stringExpression", - "title": "Result", - "description": "Value from callers memory to store the result" - } - } -} \ No newline at end of file diff --git a/docs/assets/MultiplyDialogBotComponent.cs b/docs/assets/MultiplyDialogBotComponent.cs deleted file mode 100644 index 2d5903e7dd..0000000000 --- a/docs/assets/MultiplyDialogBotComponent.cs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs.Declarative; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; - -namespace CustomAction.MultiplyDialog -{ - /// - /// Definition of a that allows registration of - /// services, custom actions, memory scopes and adapters. - /// - /// To make your components available to the system you derive from BotComponent and register services to add functionality. - /// These components then are consumed in appropriate places by the systems that need them. When using Composer, Startup gets called - /// automatically on the components by the bot runtime, as long as the components are registered in the configuration. - public class MultiplyDialogBotComponent : BotComponent - { - /// - /// Entry point for bot components to register types in resource explorer, consume configuration and register services in the - /// services collection. - /// - /// Services collection to register dependency injection. - /// Configuration for the bot component. - public override void ConfigureServices(IServiceCollection services, IConfiguration configuration) - { - // Anything that could be done in Startup.ConfigureServices can be done here. - // In this case, the MultiplyDialog needs to be added as a new DeclarativeType. - services.AddSingleton(sp => new DeclarativeType(MultiplyDialog.Kind)); - } - } -} diff --git a/docs/creating-packages.md b/docs/creating-packages.md deleted file mode 100644 index 322a2ccc94..0000000000 --- a/docs/creating-packages.md +++ /dev/null @@ -1,104 +0,0 @@ -# Creating packages - ->Note: If you are not familiar with creating [NuGet](https://nuget.org) or [npm](https://npmjs.com) packages in general, you may want to consult their documentation to ensure you understand the basics. - -Packages are bits of bots that you want to reuse and/or share. They are simply standard NuGet or npm packages that contain any combination of the items listed below. - -- Complete sets of dialog files -- Coded extensions like - - Custom actions and triggers - - Middleware - - Adapters - -At a high level, the steps for creating a package are: - -1. Create your dialog files (use Composer to create them). -2. Create your code extensions (use your favorite IDE to create them). -3. Let Composer know about your package contents with schema files. -4. Register your code extensions with the runtime through the `BotComponent` class. -5. Package your files (use NuGet for C# runtime bots, and npm for bots using the JavaScript runtime). -6. Publish your package to a package feed (public, private, or local). - -When your package is added to a bot from Package Manager in Composer, the following steps happen: - -1. The package is installed using `nuget|npm install`. -2. Your declarative files are merged using the [Bot Frameowork CLI's](https://github.com/microsoft/botframework-cli) `dialog:merge` command. - 1. `dialog:merge` adds a copy of any dialog assets (.lu/.lg/.qna/.dialog files) in your package to the corresponding folding in the bot project. - -> Note: While testing and debugging your package, you may find it useful to manually install and merge your package from the command line, rather than from Composer. - -## Declarative files in packages - -Declarative files can be added to your package by placing them in a an `exported` folder in your package. You need to include a complete set of dialog files in order for Composer to recognize them. Use Composer to create your dialog, then add the complete dialog folder to your package. The folder structure should look similar to the below (depending on language encoding): - -- Exported - - YourDialogName - - knowledge-base/en-us - - en-us - - YourDialogName.en-us.qna - - language-generation - - en-us - - YourDialogName.en-us.lg - - language-understanding - - en-us - - YourDialogName.en-us.lu - - recognizers - - YourDialogName.en-us.dialog - - YourDialogName.lu.dialog - - YourDialogName.qna.dialog - - YourDialogName.dialog - -See the [Help and Cancel](/packages/HelpAndCancel) package for an example of a package containing a dialog. - -## Code extensions in packages - -The contents of your package are essentially the same as what you would create if you were [extending your bot with code](/docs/extending-with-code.md). Just make sure you're using the `BotComponent` class to register your components. - -### BotComponent - -To dynamically register your action with the Adaptive Runtime, you'll need to define a BotComponent by inheriting from the Microsoft.Bot.Builder.BotComponent class. For example, here is how you register a simple custom action called MyCustomAction: - -```c# -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs.Declarative; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; - -namespace MyBot -{ - public class MyBotComponent : BotComponent - { - public override void ConfigureServices(IServiceCollection services, IConfiguration configuration) - { - // Component type - services.AddSingleton(sp => new DeclarativeType(MyCustomAction.Kind)); - } - } -} -``` - -## Packaging your files - -You'll package your components using the normal `pack` command for your package type (NuGet or npm). Be sure to include any necessary declarative files, as they are typically not included by default (for NuGet, you'd add them in either the .proj or .nuspec file). - -## Publishing your package - -You can publish your package to a local feed, or to a hosted feed (private or public). If you are planning to publish to NuGet or npm, and wish to make your package available from the default feeds in Package Manager in Composer, then you'll need to use the 'msbot-component' tag on your package. - -Optionally, you can also use one or more of the following tags based on the contents of your package. - -- msbot-content -- msbot-middleware -- msbot-action -- msbot-trigger -- msbot-adapter - -The easiest thing to do is to publish to a local feed. Read about doing that here: [Setting up Local NuGet Feeds](https://docs.microsoft.com/nuget/hosting-packages/local-feeds). - -## Docs table of contents - -1. [Overview](/docs/overview.md) -2. [Extending your bot using packages](/docs/extending-with-packages.md) -3. [Extending your bot with code](/docs/extending-with-code.md) -4. [Creating your own packages](/docs/creating-packages.md) -5. [Creating your own templates](/docs/creating-templates.md) diff --git a/docs/creating-templates.md b/docs/creating-templates.md deleted file mode 100644 index 1e970740b4..0000000000 --- a/docs/creating-templates.md +++ /dev/null @@ -1,11 +0,0 @@ -# Creating templates - -Coming Soon! - -## Docs table of contents - -1. [Overview](/docs/overview.md) -2. [Extending your bot using packages](/docs/extending-with-packages.md) -3. [Extending your bot with code](/docs/extending-with-code.md) -4. [Creating your own packages](/docs/creating-packages.md) -5. [Creating your own templates](/docs/creating-templates.md) diff --git a/docs/extending-with-code.md b/docs/extending-with-code.md deleted file mode 100644 index 30672bad5b..0000000000 --- a/docs/extending-with-code.md +++ /dev/null @@ -1,160 +0,0 @@ -# Extending your bot with code - -# Add custom actions in C# - -## In this article - -In Bot Framework Composer, [actions](concept-dialog#action) are the main -contents of a [trigger](concept-dialog#trigger). Actions help maintain -conversation flow and instruct bots on how to fulfill user requests. -Composer provides different types of actions, such as **Send a -response**, **Ask a question**, and **Create a condition**. Besides -these built-in actions, you can create and customize your own actions in -Composer. - -This article shows you how to include a custom action named -`MultiplyDialog`. - -#### Note - -Composer currently supports the C\# runtime and JavaScript (preview) -Adaptive Runtimes. - -## Prerequisites - -- A basic understanding of [actions](concept-dialog#action) in Composer. -- [A basic bot built using Composer](quickstart-create-bot). -- [Bot Framework CLI 4.10](https://botbuilder.myget.org/feed/botframework-cli/package/npm/@microsoft/botframework-cli) or later. - -## Setup the Bot Framework CLI tool ----------------------- - -The Bot Framework CLI tools include the *bf-dialog* tool which will -create a *schema file* that describes the built-in and custom -capabilities of your bot project. It does this by merging partial schema -files included with each component with the root schema provided by Bot -Framework. - -Open a command line and run the following command to install the Bot -Framework tools: - - npm i -g @microsoft/botframework-cli - -## About this custom action ----------------------- - -This C\# custom action consists of the following: - -- A Composer project targeted for Dotnet. This can be any Composer project. One that already exists, or a new one you create. If you want to experiment risk free, create a new Blank Bot in Composer. This document assumes you create a Blank Bot named "MyBlankBot". - -- The custom action code [MultiplyDialog.cs](assets/MultiplyDialog.cs) class, which defines the business logic of the custom action. In this example, two numbers passed as inputs are multiplied, and the result is the output. - -- The custom action schema [MultiplyDialog.schema](assets/MultiplyDialog.schema), which describes the operations available. - - [Bot Framework Schemas](https://github.com/microsoft/botframework-sdk/tree/master/schemas) - are specifications for JSON data. They define the shape of the data - and can be used to validate JSON. All of Bot Framework's [adaptive - dialogs](/en-us/azure/bot-service/bot-builder-adaptive-dialog-introduction) - are defined using this JSON schema. The schema files tell Composer - what capabilities the bot runtime supports. Composer uses the schema - to help it render the user interface when using the action in a - dialog. Read the section about [creating schema files in adaptive - dialogs](/en-us/azure/bot-service/bot-builder-dialogs-declarative) - for more information. - -- A BotComponent, [MultiplyDialogBotComponent.cs](assets/MultiplyDialogBotComponent.cs) code file for component registration. BotComponents are loaded by your bot (specifically by Adaptive Runtime), and made available to Composer. - - **Note** You can create a custom action without implementing BotComponent. However, the Component Model in Bot Framework allows for easier reuse and is only slightly more work. In a BotComponent, you add the needed services and objects via Dependency Injection, just as you would in Startup.cs. - -## Adding the custom action to your bot project ------------------------------- - -1. Navigate to your Composer bot project folder (eg. C:\MyBlankBot) and create a new folder for the custom action project. For example, C:\MyBlankBot\MultiplyDialog. - -1. Save [MultiplyDialog.cs](assets/MultiplyDialog.cs), [MultiplyDialog.schema](assets/MultiplyDialog.schema), [MultiplyDialog.csproj](assets/MultiplyDialog.csproj), and [MultiplyDialogBotComponent.cs](assets/MultiplyDialogBotComponent.cs) to this new folder. - -1. Open your Blank Bot solution (C:\MyBlankBot) in Visual Studio. - -1. Add Existing project to the solution. - -1. In the MyBlankBot project, add a project reference to the MultiplyDialog project. Alternatively, you can add `` to the appropriate `ItemGroup` in MyBlankBot.csproj. - -1. Run the command `dotnet build` on the project to - verify if it passes build after adding custom actions to it. You - should be able to see the "Build succeeded" message after this - command. - -1. Edit MyBlankBot\settings\appsettings.json to include the MultiplyDialogBotComponent in the `runtimeSettings/components` list. - - ```json - "runtimeSettings": { - "components": [ - { - "name": "CustomAction.MultiplyDialog" - } - ] - } - ``` - -## Update the schema file ----------------------- - -Now you have customized your bot, the next step is to update the -`sdk.schema` file to include the `MultiplyDialog.Schema` file. This makes your custom action available for use in Composer. - -**You only need to perform these steps when adding new code extensions, or when the Schema for a component changes.** - -1) Navigate to the `C:\MyBlankBot\MyBlankBot\schemas` folder. This -folder contains a PowerShell script and a bash script. Run either one of -the following commands: - - ./update-schema.ps1 - - **Note** - - The above steps should generate a new `sdk.schema` file inside the - `schemas` folder. - -1) Search for `MultiplyDialog` inside the `MyBlankBot\schemas\sdk.schema` file and - validate that the partial schema for [MultiplyDialog.schema](assets/MultiplyDialog.schema) is included in `sdk.schema`. - -### Tip - -Alternatively, you can select the `update-schema.sh` file inside the -`MyBlankBot\schemas` folder to run the bash script. You can't click and run the -`powershell` file directly. - -## Test ----- - -Open the bot project in Composer and you should be able to test your -added custom action. If the project is already loaded, return to `Home` in Composer, and reload the project. - -1. Open your bot in Composer. Select a trigger you want to associate this custom action with. - -2. Select **+** under the trigger node to see the actions menu. You - will see **Custom Actions** added to the menu. Select **Multiply** - from the menu. - -3. On the **Properties** panel on the right side, enter two numbers in - the argument fields: **Arg1** and **Arg2**. Enter **dialog.result** - in the **Result** property field. For example, enter `99` for each field. - -4. Add a **Send a response** action. Enter `99*99=${dialog.result}` in the Language Generation editor. - -5. Select **Restart Bot** to test the bot in the Emulator. Your bot - will respond with the test result. - -## Additional information ----------------------- - -- [Bot Framework SDK Schemas](https://github.com/microsoft/botframework-sdk/tree/master/schemas) -- [Create schema files](/en-us/azure/bot-service/bot-builder-dialogs-declarative) - -## Docs table of contents - -1. [Overview](/docs/overview.md) -2. [Extending your bot using packages](/docs/extending-with-packages.md) -3. Extending your bot with code (this document) -4. [Creating your own packages](/docs/creating-packages.md) -5. [Creating your own templates](/docs/creating-templates.md) diff --git a/docs/extending-with-packages.md b/docs/extending-with-packages.md deleted file mode 100644 index 09729adfb0..0000000000 --- a/docs/extending-with-packages.md +++ /dev/null @@ -1,59 +0,0 @@ -# Extending your bot with packages - -Packages are bits of a bot you want to share/import like declarative dialog assets, coded dialogs, custom adapters, middleware or custom actions. They are just regular NuGet or npm packages (depending on the code language for your bot). You'll use the Bot Framework CLI tool to merge the package's declarative contents with your bot (package management in Composer will handle this for you, or you could do it yourself using the Bot Framework CLI tool). They can be made up of any combination of declarative assets (.dialog, .lu, .lg, .qna files), coded extensions (custom actions, middleware, adapters), or just plain old package libraries. - -Packages that contain dialog assets **differ from packages you've worked with in the past** slightly. Normally files and libraries contained in a package are not intended to be edited directly, however with declarative assets it is very likely that you will want to alter them to meet your needs. To support this, declarative assets from packages are _merged_ into your bot project, and a copy is created for you to edit. Once you've edited those assets, attempting to upgrade your package will cause a conflict and you'll need to determine manually how to manage merging your edits with the new version of the package. - -## Using Bot Framework Composer - -> Not seeing the Package Manager? Make sure you've enabled the Component Model feature flag in your Composer settings. - -You can open Package Manager with the bottom icon on the left navigation rail. - -![Package Manager](./assets/packageManager.png) - -From there, you can search for, add, update, or remove packages from your bot project. Package manager filters the list of packages to those tagged with `msbot-component` when connected to a public feed, so you will not see all packages your bot project takes a dependency on (you can open your project with an IDE like Visual Studio to see all your package dependencies). - -Remember, because declarative assets are merged from a package into your bot project, there may be conflicts. Pay attention if Composer warns you that an action may be destructive. - -### Connecting to custom feeds - -Package Manager will connect to the primary public package feed based on your bot project's language (for example, C# bots will be connected to NuGet by default). You can however connect to other public feeds, private feeds, or even local feeds to source your packages from. To do so, click on the **Edit Feeds** button and add your feed to the list. When working with local packages, make sure you've created a feed and added your package to it. See the [NuGet documentation](https://docs.microsoft.com/en-us/nuget/hosting-packages/local-feeds) on local feeds for more information. - -## Using CLI Tooling - -To install packages from the command line, use the normal package installation tool for your bot's programming language: - -**With a Node.js runtime:** - -Navigate to the bot project folder containing the package.json file and run: - -```bash -cd {BOT_NAME} -npm install --save [some package] -``` - -**With a C# runtime:** - -Navigate to the bot project folder containing the .csproj file and run: - -```bash -cd {BOT_NAME} -dotnet add package [some package] --version=[some version] -``` - -After running one of these commands, the package will be listed in the appropriate place, either the `package.json` or the `.csproj` file of the project. Now, use the Bot Framework CLI tool to extract any included dialog, lu and lg files, as well as to merge any new schema items. Run the following command: - -```bash -bf dialog:merge [package.json or .csproj] --imports /dialogs/imported --output /schemas/sdk -``` - -The output of the CLI tool will include a list of the files that were added, deleted or updated. Note that **changes to existing files will be overwritten if newer versions are found in a package.** - -## Docs table of contents - -1. [Overview](/docs/overview.md) -2. [Extending your bot using packages](/docs/extending-with-packages.md) -3. [Extending your bot with code](/docs/extending-with-code.md) -4. [Creating your own packages](/docs/creating-packages.md) -5. [Creating your own templates](/docs/creating-templates.md) diff --git a/docs/overview.md b/docs/overview.md deleted file mode 100644 index 8c6a1f318b..0000000000 --- a/docs/overview.md +++ /dev/null @@ -1,29 +0,0 @@ -# The Component Model - -The component model for building bots is our framework for sharing and reusing bot functionality - through new bots with templates, using portions of bots in the form of packages, or as complete bots with skills. - -## Table of Contents - -1. [Overview](/docs/overview.md) -2. [Extending your bot using packages](/docs/extending-with-packages.md) -3. [Extending your bot with code](/docs/extending-with-code.md) -4. [Creating your own packages](/docs/creating-packages.md) -5. [Creating your own templates](/docs/creating-templates.md) - -## Adaptive Runtime - -At the core of the component model is the adaptive runtime - an extensible, configurable runtime for your bot that is treated as a black box to bot developers and taken as a dependency. The runtime wraps the Bot Framework SDK, and provides extensibility points to add additional functionality by importing packages, connection to skills, or adding your own coded extensions. - -## Packages - -Packages are bits of a bot you want to reuse. They can contain things like declarative dialogs, coded dialogs, custom adapters, or custom actions. They are just regular NuGet or npm packages (depending on the code language for your bot). You'll use the Bot Framework CLI tool to merge the package's declarative contents with your bot (package management in Composer will handle this for you, or you could do it yourself using the Bot Framework CLI tool). They can be made up of any combination of declarative dialogs, coded extensions (custom actions, adapters), or just plain old package libraries. - -## Templates - -Getting started templates are created on top of the component model. They are built primarily by composing packages - ensuring that no matter which template you start from you'll have the flexibility to grow and develop your bot to meet your needs. - -For example, the Conversational Core template will take a dependency on two packages - welcome and help & cancel. It will also include a root dialog that wires up the dialogs in those packages as well as a dialog for handling unknown intents. This represents the base set of functionality nearly all conversational bots include. If you were to start from the empty/echo bot template, you could choose to add these packages later - either way you'd get the same set of functionality (without the need to do something like compare code samples and try and stitch them together yourself). - -## Skills - -Skills are separate bots you connect your bot to in order to process messages for you. The skill manifest establishes a contract other bots can follow - defining messages and events the skill can handle and any data that will be returned when the skill completes its interaction with your user. From 3547fbd2a4771447ac13ed2828e452ebe5727e38 Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Fri, 4 Jun 2021 08:01:08 -0500 Subject: [PATCH 20/39] feat: generator-bot-adaptive: Added command line option to specify SDK version (#1137) * generator-bot-adaptive: Added command line option to specify SDK version * generator-bot-adaptive: Refactored platform values to objects. No longer default sdkVersion option. * generator-bot-adaptive: corrected lint errors --- .../generator-bot-adaptive/baseGenerator.js | 8 +++++++- .../generators/app/index.js | 20 ++++++++++++------- .../templates/dotnet/functions/botName.csproj | 6 +++--- .../templates/dotnet/webapp/botName.csproj | 6 +++--- .../generator-bot-adaptive/platforms.js | 11 ++++++++-- 5 files changed, 35 insertions(+), 16 deletions(-) diff --git a/generators/generator-bot-adaptive/baseGenerator.js b/generators/generator-bot-adaptive/baseGenerator.js index e17ce51ee0..1d838d6474 100644 --- a/generators/generator-bot-adaptive/baseGenerator.js +++ b/generators/generator-bot-adaptive/baseGenerator.js @@ -22,7 +22,7 @@ module.exports = class extends Generator { platforms ).join(', ')}`, type: String, - default: platforms.dotnet, + default: platforms.dotnet.name, alias: 'p', }); @@ -35,6 +35,12 @@ module.exports = class extends Generator { alias: 'i', }); + this.option('sdkVersion', { + desc: 'The Bot Framework SDK version to use', + type: String, + alias: 's', + }); + const { botName, platform, integration } = this.options; assert(botName, 'botName is required'); assert(typeof botName === 'string', 'botName must be a string'); diff --git a/generators/generator-bot-adaptive/generators/app/index.js b/generators/generator-bot-adaptive/generators/app/index.js index 4cf44f5691..0cbebf9ab3 100644 --- a/generators/generator-bot-adaptive/generators/app/index.js +++ b/generators/generator-bot-adaptive/generators/app/index.js @@ -23,6 +23,7 @@ const options = rt.Record({ version: rt.String, }) ), + sdkVersion: rt.String, }); const defaultOptions = { @@ -33,6 +34,7 @@ const defaultOptions = { }, modifyApplicationSettings: undefined, packageReferences: [], + sdkVersion: undefined, }; module.exports = class extends BaseGenerator { @@ -62,7 +64,7 @@ module.exports = class extends BaseGenerator { const includeAssets = ['schemas']; switch (this.options.platform) { - case platforms.dotnet: { + case platforms.dotnet.name: { this._copyPlatformTemplate({ defaultSettingsDirectory: 'string.Empty', includeAssets, @@ -70,6 +72,8 @@ module.exports = class extends BaseGenerator { packageReferences: this._formatDotnetPackageReferences( this.packageReferences ), + sdkVersion: + this.options.sdkVersion || platforms.dotnet.defaultSdkVersion, }, }); @@ -82,7 +86,7 @@ module.exports = class extends BaseGenerator { return; } - case platforms.js: { + case platforms.js.name: { this._copyPlatformTemplate({ defaultSettingsDirectory: 'process.cwd()', includeAssets, @@ -187,7 +191,7 @@ module.exports = class extends BaseGenerator { appSettings.runtime.key = `adaptive-runtime-${platform}-${integration}`; switch (platform) { - case platforms.dotnet: + case platforms.dotnet.name: switch (integration) { case integrations.functions: appSettings.runtime.command = `func start --script-root ${path.join( @@ -200,7 +204,7 @@ module.exports = class extends BaseGenerator { appSettings.runtime.command = `dotnet run --project ${botName}.csproj`; } break; - case platforms.js: + case platforms.js.name: appSettings.runtime.command = 'npm run dev --'; break; default: @@ -247,9 +251,11 @@ module.exports = class extends BaseGenerator { } _writeJsPackageJson() { - const { botName, integration } = this.options; - - const sdkVersion = '4.13.4-preview'; + const { + botName, + integration, + sdkVersion = platforms.js.defaultSdkVersion, + } = this.options; const dependencies = { [integrations.functions]: { diff --git a/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj b/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj index eee16f6272..b1dea0166e 100644 --- a/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj +++ b/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj @@ -14,9 +14,9 @@ - - - + + + <%- packageReferences %> diff --git a/generators/generator-bot-adaptive/generators/app/templates/dotnet/webapp/botName.csproj b/generators/generator-bot-adaptive/generators/app/templates/dotnet/webapp/botName.csproj index d312a50673..d3ef64ca79 100644 --- a/generators/generator-bot-adaptive/generators/app/templates/dotnet/webapp/botName.csproj +++ b/generators/generator-bot-adaptive/generators/app/templates/dotnet/webapp/botName.csproj @@ -11,8 +11,8 @@ - - - <%- packageReferences %> + + + <%- packageReferences %> \ No newline at end of file diff --git a/generators/generator-bot-adaptive/platforms.js b/generators/generator-bot-adaptive/platforms.js index b046839756..621dd9b47a 100644 --- a/generators/generator-bot-adaptive/platforms.js +++ b/generators/generator-bot-adaptive/platforms.js @@ -1,7 +1,14 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -const dotnet = 'dotnet'; -const js = 'js'; +const dotnet = { + name: 'dotnet', + defaultSdkVersion: '4.13.2', +}; + +const js = { + name: 'js', + defaultSdkVersion: '4.13.4-preview', +}; module.exports = { dotnet, js }; From c27784a2fed22f76f2374896102c312072257e92 Mon Sep 17 00:00:00 2001 From: Ryan Lengel Isgrig <43043272+ryanlengel@users.noreply.github.com> Date: Sat, 5 Jun 2021 10:31:22 -0700 Subject: [PATCH 21/39] chore: Update issue templates to reflect Components repository (#1141) * Rename and update bug report * Remove docs bug report (covered in bug report) * remove calendar v2 bug * Update pbx feature spec * Remove question issue and add to config yml * Update feature request and add other template for empty issues * Formatting changes after testing on private repo * Clean up pr template --- .github/ISSUE_TEMPLATE/-net-sdk-bug.md | 27 -------------- .../-net-sdk-feature-request.md | 21 ----------- .github/ISSUE_TEMPLATE/-net-sdk-question.md | 11 ------ .../ISSUE_TEMPLATE/calendar-skill-v2-bug.md | 22 ------------ .../ISSUE_TEMPLATE/components-bug-report.md | 35 +++++++++++++++++++ .../components-feature-request.md | 25 +++++++++++++ .github/ISSUE_TEMPLATE/components-other.md | 7 ++++ .github/ISSUE_TEMPLATE/config.yml | 5 +++ .github/ISSUE_TEMPLATE/docs-bug-report.md | 9 ----- ...c.md => prebuilt-experience-user-story.md} | 14 ++++---- .github/PULL_REQUEST_TEMPLATE.md | 22 ++++++------ 11 files changed, 90 insertions(+), 108 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/-net-sdk-bug.md delete mode 100644 .github/ISSUE_TEMPLATE/-net-sdk-feature-request.md delete mode 100644 .github/ISSUE_TEMPLATE/-net-sdk-question.md delete mode 100644 .github/ISSUE_TEMPLATE/calendar-skill-v2-bug.md create mode 100644 .github/ISSUE_TEMPLATE/components-bug-report.md create mode 100644 .github/ISSUE_TEMPLATE/components-feature-request.md create mode 100644 .github/ISSUE_TEMPLATE/components-other.md create mode 100644 .github/ISSUE_TEMPLATE/config.yml delete mode 100644 .github/ISSUE_TEMPLATE/docs-bug-report.md rename .github/ISSUE_TEMPLATE/{feature-spec.md => prebuilt-experience-user-story.md} (76%) diff --git a/.github/ISSUE_TEMPLATE/-net-sdk-bug.md b/.github/ISSUE_TEMPLATE/-net-sdk-bug.md deleted file mode 100644 index eaefeb99f1..0000000000 --- a/.github/ISSUE_TEMPLATE/-net-sdk-bug.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -name: "Bug" -about: Create a bug report for a bug you found in the Bot Framework Skills projects -title: "" -labels: "needs-triage, bug" -assignees: "" ---- - -### [Github issues](https://github.com/Microsoft/botframework-skills/issues) should be used for bugs and feature requests. Use [Stack Overflow](https://stackoverflow.com/questions/tagged/botframework) for general "how-to" questions. - -## Version -What package version of the SDK are you using. - -## Describe the bug -Give a clear and concise description of what the bug is. - -## To Reproduce -Steps to reproduce the behavior: - -## Expected behavior -Give a clear and concise description of what you expected to happen. - -## Screenshots -If applicable, add screenshots to help explain your problem. - -## Additional context -Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/-net-sdk-feature-request.md b/.github/ISSUE_TEMPLATE/-net-sdk-feature-request.md deleted file mode 100644 index 136ba70fbb..0000000000 --- a/.github/ISSUE_TEMPLATE/-net-sdk-feature-request.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -name: "Feature request" -about: Suggest a feature for the Bot Framework Skills projects -title: "" -labels: "needs-triage, feature-request" -assignees: "" ---- - -### Use this [query](https://github.com/Microsoft/botbuilder-dotnet/issues?q=is%3Aissue+is%3Aopen++label%3Afeature-request+) to search for the most popular feature requests. - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/-net-sdk-question.md b/.github/ISSUE_TEMPLATE/-net-sdk-question.md deleted file mode 100644 index 58c7985686..0000000000 --- a/.github/ISSUE_TEMPLATE/-net-sdk-question.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -name: "Question" -about: The issue tracker is not for questions. Please ask questions on https://stackoverflow.com/questions/tagged/botframework - ---- - -🚨 The issue tracker is not for questions 🚨 - -If you have a question, please ask it on https://stackoverflow.com/questions/tagged/botframework - -[question] diff --git a/.github/ISSUE_TEMPLATE/calendar-skill-v2-bug.md b/.github/ISSUE_TEMPLATE/calendar-skill-v2-bug.md deleted file mode 100644 index 8f3f7566d1..0000000000 --- a/.github/ISSUE_TEMPLATE/calendar-skill-v2-bug.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -name: "Calendar Skill V2 Bug" -about: Create a bug report for a bug you found during Calendar Skill V2 testing -title: "[Calendar Skill V2] " -labels: "needs-triage, bug, Area: Calendar Skill" -assignees: "" ---- - -## Describe the bug -Give a clear and concise description of what the bug is. - -## To Reproduce -Steps to reproduce the behavior. What utterances or buttons didn't work? - -## Expected behavior -Give a clear and concise description of what you expected to happen. - -## Screenshots -If applicable, add screenshots to help explain your problem. - -## Additional context -Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/components-bug-report.md b/.github/ISSUE_TEMPLATE/components-bug-report.md new file mode 100644 index 0000000000..ba82285f25 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/components-bug-report.md @@ -0,0 +1,35 @@ +--- +name: "Bug" +about: Create a report for a bug you found in the Bot Framework Components projects (including documentation). +title: "" +labels: "needs-triage, bug" +assignees: "" +--- + + + +## Describe the bug + + + +## Version + + + + +## To Reproduce + + + +## Expected behavior + + + +## Screenshots + + + +## Additional context + + diff --git a/.github/ISSUE_TEMPLATE/components-feature-request.md b/.github/ISSUE_TEMPLATE/components-feature-request.md new file mode 100644 index 0000000000..c25d90f782 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/components-feature-request.md @@ -0,0 +1,25 @@ +--- +name: "Feature Request" +about: Suggest an idea a Bot Framework Components project. +title: "" +labels: "needs-triage, feature-request" +assignees: "" +--- + + + +## Is your feature request related to a problem? Please describe. + + + +## Describe the solution you'd like + + + +## Describe alternatives you've considered + + + +## Additional context + + diff --git a/.github/ISSUE_TEMPLATE/components-other.md b/.github/ISSUE_TEMPLATE/components-other.md new file mode 100644 index 0000000000..981db40f73 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/components-other.md @@ -0,0 +1,7 @@ +--- +name: Other +about: An empty issue template. +title: "" +labels: "needs-triage" +assignees: "" +--- diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000000..1064705749 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: Question + url: https://stackoverflow.com/questions/tagged/botframework + about: The issue tracker is not for questions, please ask general "how-to" questions on Stack Overflow. \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/docs-bug-report.md b/.github/ISSUE_TEMPLATE/docs-bug-report.md deleted file mode 100644 index a7fca37239..0000000000 --- a/.github/ISSUE_TEMPLATE/docs-bug-report.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -name: "Documentation Issue" -about: Create a report to help us improve our documentation -labels: "needs-triage, Area: Docs" ---- - -**Please describe your request** - -**Is this an issue with current documentation? If yes, please provide the link.** diff --git a/.github/ISSUE_TEMPLATE/feature-spec.md b/.github/ISSUE_TEMPLATE/prebuilt-experience-user-story.md similarity index 76% rename from .github/ISSUE_TEMPLATE/feature-spec.md rename to .github/ISSUE_TEMPLATE/prebuilt-experience-user-story.md index 3116722960..a06650bcf7 100644 --- a/.github/ISSUE_TEMPLATE/feature-spec.md +++ b/.github/ISSUE_TEMPLATE/prebuilt-experience-user-story.md @@ -1,8 +1,8 @@ --- -name: "Feature spec" -about: Detailed feature definition. +name: "Prebuilt Experiences User Story" +about: Detailed user story spec for prebuilt experiences. title: "" -labels: "" +labels: "Owner: PBX" assignees: "" --- @@ -14,22 +14,22 @@ assignees: "" ## Description ## Conversation Design -Links to conversation design diagrams and documents + ## Language Understanding | Intent | Sample Utterances | Prebuilt Entities | Custom Entities | Patterns | | ------ | ----------------------| ----------------- | ----------------- | --------- | ## Dialogs -Describe the different dialogs to be created as part of the feature and what each will do + ## Custom Actions -Describe any custom actions that will need to be created to support the feature + | Name | Input | Output | Notes | | ------ | ------ | -------- | ------- | ## Channels -Describe any channel specific functionality or limitations that will need to be taken into consideration + ## Acceptance Criteria - [ ] Flow should work in both Direct mode (connecting to the skill bot directly diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index f397c0b377..e25a784ea7 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,20 +1,20 @@ - + + + + ### Purpose -*What is the context of this pull request? Why is it being done?* + + ### Changes -*Are there any changes that need to be called out as significant or particularly difficult to grasp? (Include illustrative screenshots for context if applicable.)* + + ### Tests -*Is this covered by existing tests or new ones? If no, why not?* + + ### Feature Plan -*Are there any remaining steps or dependencies before this issue can be fully resolved? If so, describe and link to any relevant pull requests or issues.* -### Checklist + -#### General -- [ ] I have commented my code, particularly in hard-to-understand areas -- [ ] I have added or updated the appropriate tests -- [ ] I have updated related documentation From 17dec7e69f9b07418c4abbf8df9642c056783175 Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Mon, 7 Jun 2021 13:41:43 -0500 Subject: [PATCH 22/39] chore: Added FunctionalTests to repo (#1144) * Added FunctionalTests to repo * Adjusted some test file paths * Removed functional to clean up git settings * Readded functional without git dirs * Restricted dotnet-build-test-steps to /tests/unit --- .../templates/dotnet-build-test-steps.yml | 2 +- tests/functional/.editorconfig | 162 + tests/functional/.gitignore | 377 + .../functional/.yarn/releases/yarn-berry.cjs | 55 + tests/functional/.yarnrc.yml | 1 + .../BotFramework-FunctionalTests.ruleset | 198 + tests/functional/Bots/.gitignore | 2 + .../AdapterWithErrorHandler.cs | 155 + .../AllowedSkillsClaimsValidator.cs | 55 + .../SimpleHostBot-2.1/Bots/HostBot.cs | 241 + .../Controllers/BotController.cs | 42 + .../Controllers/SkillController.cs | 28 + .../SimpleHostBot-2.1/Dialogs/SetupDialog.cs | 119 + .../CodeFirst/SimpleHostBot-2.1/Program.cs | 29 + .../Properties/launchSettings.json | 28 + .../SimpleHostBot-2.1.csproj | 26 + .../SimpleHostBot-2.1/SkillsConfiguration.cs | 51 + .../CodeFirst/SimpleHostBot-2.1/Startup.cs | 99 + .../SimpleHostBot-2.1/appsettings.json | 43 + .../SimpleHostBot-2.1/wwwroot/default.htm | 420 + .../SimpleHostBot/AdapterWithErrorHandler.cs | 155 + .../AllowedSkillsClaimsValidator.cs | 55 + .../CodeFirst/SimpleHostBot/Bots/HostBot.cs | 242 + .../Controllers/BotController.cs | 42 + .../Controllers/SkillController.cs | 28 + .../SimpleHostBot/Dialogs/SetupDialog.cs | 119 + .../CodeFirst/SimpleHostBot/Program.cs | 32 + .../Properties/launchSettings.json | 28 + .../SimpleHostBot/SimpleHostBot.csproj | 29 + .../SimpleHostBot/SkillsConfiguration.cs | 55 + .../CodeFirst/SimpleHostBot/Startup.cs | 99 + .../CodeFirst/SimpleHostBot/appsettings.json | 43 + .../SimpleHostBot/wwwroot/default.htm | 420 + .../AdapterWithErrorHandler.cs | 124 + .../AllowedSkillsClaimsValidator.cs | 47 + .../WaterfallHostBot/Bots/RootBot.cs | 80 + .../WaterfallHostBot/Cards/welcomeCard.json | 29 + .../Controllers/BotController.cs | 48 + .../Controllers/SkillController.cs | 83 + .../WaterfallHostBot/Dialogs/MainDialog.cs | 345 + .../WaterfallHostBot/Dialogs/Sso/SsoDialog.cs | 141 + .../Dialogs/Sso/SsoSignInDialog.cs | 48 + .../WaterfallHostBot/Dialogs/TangentDialog.cs | 51 + .../Middleware/LoggerMiddleware.cs | 55 + .../CodeFirst/WaterfallHostBot/Program.cs | 23 + .../Properties/launchSettings.json | 28 + .../WaterfallHostBot/Skills/EchoSkill.cs | 37 + .../Skills/SkillDefinition.cs | 33 + .../WaterfallHostBot/Skills/TeamsSkill.cs | 45 + .../WaterfallHostBot/Skills/WaterfallSkill.cs | 42 + .../WaterfallHostBot/SkillsConfiguration.cs | 68 + .../CodeFirst/WaterfallHostBot/Startup.cs | 98 + .../TeamsAppManifest/icon-color.png | Bin 0 -> 1229 bytes .../TeamsAppManifest/icon-outline.png | Bin 0 -> 383 bytes .../TeamsAppManifest/manifest.json | 50 + .../TokenExchangeSkillHandler.cs | 178 + .../WaterfallHostBot/WaterfallHostBot.csproj | 24 + .../WaterfallHostBot/appsettings.json | 90 + .../WaterfallHostBot/wwwroot/default.htm | 420 + .../Consumers/Composer/Directory.Build.props | 15 + .../Composer/SimpleHostBotComposer/.gitignore | 5 + .../Controllers/BotController.cs | 76 + .../Controllers/SkillController.cs | 62 + .../Composer/SimpleHostBotComposer/Program.cs | 33 + .../Properties/launchSettings.json | 27 + .../Composer/SimpleHostBotComposer/README.md | 27 + .../SimpleHostBotComposer.botproj | 41 + .../SimpleHostBotComposer.csproj | 19 + .../Composer/SimpleHostBotComposer/Startup.cs | 56 + .../CallEchoSkill/CallEchoSkill.dialog | 244 + .../en-us/CallEchoSkill.en-us.qna | 0 .../en-us/CallEchoSkill.en-us.lg | 56 + .../en-us/CallEchoSkill.en-us.lu | 0 .../recognizers/CallEchoSkill.en-us.lu.dialog | 8 + .../recognizers/CallEchoSkill.lu.dialog | 5 + .../recognizers/CallEchoSkill.lu.qna.dialog | 4 + .../knowledge-base/en-us/emptyBot.en-us.qna | 0 .../interruption/CallEchoSkill.en-us.lu | 0 .../interruption/CallEchoSkill.en-us.qna | 0 .../SimpleHostBotComposer.en-us.lu | 0 .../SimpleHostBotComposer.en-us.qna | 0 .../en-us/simplehostbotcomposer.en-us.qna | 0 .../language-generation/en-us/common.en-us.lg | 0 .../en-us/simplehostbotcomposer.en-us.lg | 26 + .../en-us/simplehostbotcomposer.en-us.lu | 0 .../create-azure-resource-command-line.png | Bin 0 -> 13842 bytes .../media/publish-az-login.png | Bin 0 -> 16726 bytes .../SimpleHostBotComposer.en-us.lu.dialog | 8 + .../SimpleHostBotComposer.lu.dialog | 5 + .../SimpleHostBotComposer.lu.qna.dialog | 4 + .../SimpleHostBotComposer/schemas/sdk.schema | 10312 ++++++++++++++++ .../schemas/sdk.uischema | 1409 +++ .../schemas/update-schema.ps1 | 27 + .../schemas/update-schema.sh | 31 + .../settings/appsettings.json | 109 + .../simplehostbotcomposer.dialog | 104 + .../SimpleHostBotComposer/wwwroot/default.htm | 364 + .../Bots/DotNet/FunctionalTestsBots.sln | 106 + .../AllowedCallersClaimsValidator.cs | 70 + .../EchoSkillBot-2.1/Bots/EchoBot.cs | 50 + .../Controllers/BotController.cs | 43 + .../EchoSkillBot-2.1/EchoSkillBot-2.1.csproj | 25 + .../CodeFirst/EchoSkillBot-2.1/Program.cs | 29 + .../Properties/launchSettings.json | 28 + .../SkillAdapterWithErrorHandler.cs | 63 + .../CodeFirst/EchoSkillBot-2.1/Startup.cs | 76 + .../EchoSkillBot-2.1/appsettings.json | 11 + .../EchoSkillBot-2.1/wwwroot/default.htm | 420 + .../manifests/echoskillbot-manifest-1.0.json | 23 + ...ControllerActionInvokerWithErrorHandler.cs | 41 + .../EchoSkillBot-v3/App_Start/WebApiConfig.cs | 39 + .../CustomAllowedCallersClaimsValidator.cs | 72 + .../CustomSkillAuthenticationConfiguration.cs | 20 + .../Controllers/MessagesController.cs | 93 + .../EchoSkillBot-v3/Dialogs/RootDialog.cs | 88 + .../EchoSkillBot-v3/EchoSkillBot-v3.csproj | 232 + .../CodeFirst/EchoSkillBot-v3/Global.asax | 1 + .../CodeFirst/EchoSkillBot-v3/Global.asax.cs | 42 + .../Properties/AssemblyInfo.cs | 35 + .../EchoSkillBot-v3/Web.Debug.config | 30 + .../EchoSkillBot-v3/Web.Release.config | 31 + .../CodeFirst/EchoSkillBot-v3/Web.config | 57 + .../CodeFirst/EchoSkillBot-v3/default.htm | 12 + .../echoskillbotv3-manifest-1.0.json | 30 + .../CodeFirst/EchoSkillBot-v3/packages.config | 37 + .../AllowedCallersClaimsValidator.cs | 70 + .../CodeFirst/EchoSkillBot/Bots/EchoBot.cs | 50 + .../EchoSkillBot/Controllers/BotController.cs | 43 + .../EchoSkillBot/EchoSkillBot.csproj | 25 + .../Skills/CodeFirst/EchoSkillBot/Program.cs | 32 + .../Properties/launchSettings.json | 28 + .../SkillAdapterWithErrorHandler.cs | 62 + .../Skills/CodeFirst/EchoSkillBot/Startup.cs | 75 + .../CodeFirst/EchoSkillBot/appsettings.json | 11 + .../EchoSkillBot/wwwroot/default.htm | 420 + .../manifests/echoskillbot-manifest-1.0.json | 23 + .../AllowedCallersClaimsValidator.cs | 60 + .../WaterfallSkillBot/Bots/SkillBot.cs | 61 + .../Controllers/BotController.cs | 48 + .../Controllers/CardsController.cs | 28 + .../Controllers/ProactiveController.cs | 86 + .../Controllers/SkillController.cs | 53 + .../Dialogs/ActivityRouterDialog.cs | 148 + .../Dialogs/Auth/AuthDialog.cs | 83 + .../Dialogs/Cards/AdaptiveCardExtensions.cs | 75 + .../Dialogs/Cards/CardDialog.cs | 340 + .../Dialogs/Cards/CardOptions.cs | 88 + .../Dialogs/Cards/CardSampleHelper.cs | 508 + .../Dialogs/Cards/ChannelSupportedCards.cs | 57 + .../Cards/Files/buildreactionbotframework.jpg | Bin 0 -> 65992 bytes .../Dialogs/Cards/Files/music.mp3 | Bin 0 -> 647055 bytes .../Dialogs/Cards/Files/teams-logo.png | Bin 0 -> 6412 bytes .../Dialogs/Cards/SampleData.cs | 23 + .../Dialogs/Delete/DeleteDialog.cs | 46 + .../Dialogs/FileUpload/FileUploadDialog.cs | 83 + .../MessageWithAttachmentDialog.cs | 118 + .../Proactive/ContinuationParameters.cs | 20 + .../Proactive/WaitForProactiveDialog.cs | 76 + .../Dialogs/Sso/SsoSkillDialog.cs | 119 + .../Dialogs/Sso/SsoSkillSignInDialog.cs | 47 + .../Dialogs/Update/UpdateDialog.cs | 85 + .../Middleware/SsoSaveStateMiddleware.cs | 55 + .../CodeFirst/WaterfallSkillBot/Program.cs | 23 + .../Properties/launchSettings.json | 28 + .../SkillAdapterWithErrorHandler.cs | 100 + .../CodeFirst/WaterfallSkillBot/Startup.cs | 103 + .../WaterfallSkillBot.csproj | 46 + .../WaterfallSkillBot/appsettings.json | 20 + .../WaterfallSkillBot/wwwroot/default.htm | 420 + .../wwwroot/images/architecture-resize.png | Bin 0 -> 137666 bytes .../waterfallskillbot-manifest-1.0.json | 105 + .../Skills/Composer/Directory.Build.props | 15 + .../Composer/EchoSkillBotComposer/.gitignore | 5 + .../Controllers/BotController.cs | 76 + .../Controllers/SkillController.cs | 62 + .../EchoSkillBotComposer.botproj | 5 + .../EchoSkillBotComposer.csproj | 19 + .../Composer/EchoSkillBotComposer/Program.cs | 33 + .../Properties/launchSettings.json | 27 + .../Composer/EchoSkillBotComposer/README.md | 27 + .../Composer/EchoSkillBotComposer/Startup.cs | 56 + .../knowledge-base/en-us/emptyBot.en-us.qna | 0 .../echoskillbotcomposer.dialog | 115 + .../EchoSkillBotComposer.en-us.lu | 0 .../EchoSkillBotComposer.en-us.qna | 0 .../en-us/echoskillbotcomposer.en-us.qna | 0 .../language-generation/en-us/common.en-us.lg | 0 .../en-us/echoskillbotcomposer.en-us.lg | 31 + .../en-us/echoskillbotcomposer.en-us.lu | 0 .../echoskillbotcomposer-manifest.json | 23 + .../create-azure-resource-command-line.png | Bin 0 -> 13842 bytes .../media/publish-az-login.png | Bin 0 -> 16726 bytes .../EchoSkillBotComposer/schemas/sdk.schema | 10312 ++++++++++++++++ .../EchoSkillBotComposer/schemas/sdk.uischema | 1409 +++ .../schemas/update-schema.ps1 | 27 + .../schemas/update-schema.sh | 31 + .../settings/appsettings.json | 76 + .../EchoSkillBotComposer/wwwroot/default.htm | 364 + .../echoskillbotcomposer-manifest.json | 23 + tests/functional/Bots/JavaScript/.gitignore | 3 + .../Consumers/CodeFirst/SimpleHostBot/.env | 24 + .../allowedSkillsClaimsValidator.js | 25 + .../CodeFirst/SimpleHostBot/bots/hostBot.js | 168 + .../SimpleHostBot/dialogs/setupDialog.js | 122 + .../CodeFirst/SimpleHostBot/index.js | 164 + .../CodeFirst/SimpleHostBot/package.json | 26 + .../SimpleHostBot/skillsConfiguration.js | 53 + .../Consumers/CodeFirst/WaterfallHostBot/.env | 52 + .../WaterfallHostBot/Cards/welcomeCard.json | 29 + .../TokenExchangeSkillHandler.js | 123 + .../allowedSkillsClaimsValidator.js | 25 + .../WaterfallHostBot/bots/rootBot.js | 83 + .../WaterfallHostBot/dialogs/mainDialog.js | 314 + .../WaterfallHostBot/dialogs/sso/ssoDialog.js | 137 + .../dialogs/sso/ssoSignInDialog.js | 55 + .../WaterfallHostBot/dialogs/tangentDialog.js | 73 + .../CodeFirst/WaterfallHostBot/index.js | 204 + .../middleware/loggerMiddleware.js | 49 + .../CodeFirst/WaterfallHostBot/package.json | 26 + .../WaterfallHostBot/skills/echoSkill.js | 33 + .../skills/skillDefinition.js | 14 + .../WaterfallHostBot/skills/teamsSkill.js | 44 + .../WaterfallHostBot/skills/waterfallSkill.js | 41 + .../WaterfallHostBot/skillsConfiguration.js | 59 + .../Skills/CodeFirst/EchoSkillBot-v3/.env | 3 + .../Skills/CodeFirst/EchoSkillBot-v3/index.js | 75 + .../echoskillbotv3-manifest-1.0.json | 23 + .../CodeFirst/EchoSkillBot-v3/package.json | 29 + .../Skills/CodeFirst/EchoSkillBot/.env | 3 + .../allowedCallersClaimsValidator.js | 29 + .../Skills/CodeFirst/EchoSkillBot/bot.js | 38 + .../Skills/CodeFirst/EchoSkillBot/index.js | 109 + .../manifests/echoskillbot-manifest-1.0.json | 23 + .../CodeFirst/EchoSkillBot/package.json | 25 + .../Skills/CodeFirst/WaterfallSkillBot/.env | 11 + .../allowedCallersClaimsValidator.js | 29 + .../WaterfallSkillBot/bots/skillBot.js | 61 + .../dialogs/activityRouterDialog.js | 159 + .../dialogs/auth/authDialog.js | 90 + .../dialogs/cards/cardDialog.js | 223 + .../dialogs/cards/cardOptions.js | 69 + .../dialogs/cards/cardSampleHelper.js | 514 + .../dialogs/cards/channelSupportedCards.js | 46 + .../cards/files/buildreactionbotframework.jpg | Bin 0 -> 65992 bytes .../dialogs/cards/files/music.mp3 | Bin 0 -> 647055 bytes .../dialogs/cards/files/teams-logo.png | Bin 0 -> 6412 bytes .../dialogs/delete/deleteDialog.js | 60 + .../dialogs/fileUpload/fileUploadDialog.js | 91 + .../messageWithAttachmentDialog.js | 124 + .../proactive/continuationParameters.js | 20 + .../proactive/waitForProactiveDialog.js | 79 + .../dialogs/sso/ssoSkillDialog.js | 111 + .../dialogs/sso/ssoSkillSignInDialog.js | 53 + .../dialogs/update/updateDialog.js | 89 + .../images/architecture-resize.png | Bin 0 -> 137666 bytes .../CodeFirst/WaterfallSkillBot/index.js | 216 + .../waterfallskillbot-manifest-1.0.json | 105 + .../middleware/ssoSaveStateMiddleware.js | 41 + .../CodeFirst/WaterfallSkillBot/package.json | 27 + tests/functional/Bots/Python/.gitignore | 3 + .../Consumers/CodeFirst/SimpleHostBot/.env | 24 + .../adapter_with_error_handler.py | 141 + .../Consumers/CodeFirst/SimpleHostBot/app.py | 89 + .../SimpleHostBot/authentication/__init__.py | 6 + .../allowed_skills_claims_validator.py | 44 + .../CodeFirst/SimpleHostBot/bots/__init__.py | 7 + .../CodeFirst/SimpleHostBot/bots/host_bot.py | 186 + .../CodeFirst/SimpleHostBot/config.py | 71 + .../SimpleHostBot/dialogs/__init__.py | 6 + .../SimpleHostBot/dialogs/setup_dialog.py | 129 + .../SimpleHostBot/helpers/dialog_helper.py | 19 + .../CodeFirst/SimpleHostBot/requirements.txt | 3 + .../skill_conversation_id_factory.py | 75 + .../Consumers/CodeFirst/WaterfallHostBot/.env | 53 + .../CodeFirst/WaterfallHostBot/.pylintrc | 590 + .../adapter_with_error_handler.py | 140 + .../CodeFirst/WaterfallHostBot/app.py | 101 + .../authentication/__init__.py | 6 + .../allowed_skills_claims_validator.py | 33 + .../WaterfallHostBot/bots/__init__.py | 7 + .../WaterfallHostBot/bots/root_bot.py | 84 + .../WaterfallHostBot/cards/welcomeCard.json | 29 + .../WaterfallHostBot/dialogs/__init__.py | 8 + .../WaterfallHostBot/dialogs/main_dialog.py | 456 + .../WaterfallHostBot/dialogs/sso/__init__.py | 7 + .../dialogs/sso/sso_dialog.py | 137 + .../dialogs/sso/sso_signin_dialog.py | 57 + .../dialogs/tangent_dialog.py | 51 + .../WaterfallHostBot/helpers/dialog_helper.py | 19 + .../WaterfallHostBot/requirements.txt | 3 + .../skill_conversation_id_factory.py | 76 + .../WaterfallHostBot/skills/echo_skill.py | 25 + .../skills/skill_definition.py | 25 + .../WaterfallHostBot/skills/teams_skill.py | 36 + .../skills/waterfall_skill.py | 33 + .../WaterfallHostBot/skills_configuration.py | 88 + .../token_exchange_skill_handler.py | 199 + .../Skills/CodeFirst/EchoSkillBot/app.py | 135 + .../EchoSkillBot/authentication/__init__.py | 6 + .../allowed_callers_claims_validator.py | 29 + .../CodeFirst/EchoSkillBot/bots/__init__.py | 6 + .../CodeFirst/EchoSkillBot/bots/echo_bot.py | 32 + .../Skills/CodeFirst/EchoSkillBot/config.py | 17 + .../manifests/echoskillbot-manifest-1.0.json | 23 + .../CodeFirst/EchoSkillBot/requirements.txt | 1 + .../Skills/CodeFirst/WaterfallSkillBot/.env | 11 + .../CodeFirst/WaterfallSkillBot/.pylintrc | 582 + .../Skills/CodeFirst/WaterfallSkillBot/app.py | 176 + .../authentication/__init__.py | 6 + .../allowed_callers_claims_validator.py | 50 + .../WaterfallSkillBot/bots/__init__.py | 6 + .../WaterfallSkillBot/bots/skill_bot.py | 69 + .../CodeFirst/WaterfallSkillBot/config.py | 34 + .../WaterfallSkillBot/dialogs/__init__.py | 6 + .../dialogs/activity_router_dialog.py | 166 + .../dialogs/auth/__init__.py | 6 + .../dialogs/auth/auth_dialog.py | 106 + .../dialogs/cards/__init__.py | 9 + .../dialogs/cards/card_dialog.py | 282 + .../dialogs/cards/card_options.py | 23 + .../dialogs/cards/card_sample_helper.py | 557 + .../dialogs/cards/channel_supported_cards.py | 33 + .../cards/files/buildreactionbotframework.jpg | Bin 0 -> 65992 bytes .../dialogs/cards/files/music.mp3 | Bin 0 -> 647055 bytes .../dialogs/cards/files/teams-logo.png | Bin 0 -> 6412 bytes .../dialogs/delete/__init__.py | 6 + .../dialogs/delete/delete_dialog.py | 44 + .../dialogs/file_upload/__init__.py | 6 + .../dialogs/file_upload/file_upload_dialog.py | 86 + .../message_with_attachment/__init__.py | 6 + .../message_with_attachment_dialog.py | 125 + .../dialogs/proactive/__init__.py | 7 + .../proactive/continuation_parameters.py | 16 + .../proactive/wait_for_proactive_dialog.py | 77 + .../WaterfallSkillBot/dialogs/sso/__init__.py | 7 + .../dialogs/sso/sso_skill_dialog.py | 112 + .../dialogs/sso/sso_skill_signin_dialog.py | 56 + .../dialogs/update/__init__.py | 6 + .../dialogs/update/update_dialog.py | 90 + .../images/architecture-resize.png | Bin 0 -> 137666 bytes .../waterfallskillbot-manifest-1.0.json | 105 + .../WaterfallSkillBot/middleware/__init__.py | 6 + .../middleware/sso_save_state_middleware.py | 30 + .../WaterfallSkillBot/requirements.txt | 3 + .../skill_adapter_with_error_handler.py | 103 + .../skill_conversation_id_factory.py | 75 + tests/functional/CODE_OF_CONDUCT.md | 9 + tests/functional/Directory.Build.props | 34 + tests/functional/Docs/README.md | 12 + .../Docs/addARMServiceConnection.md | 24 + .../Docs/createWebAppDeploymentCredentials.md | 18 + .../Docs/getServicePrincipalObjectID.md | 14 + .../Docs/media/CreateAppRegistrations.ps1 | 39 + .../Docs/media/addARMServiceConnection1.png | Bin 0 -> 82762 bytes .../Docs/media/addARMServiceConnection2.png | Bin 0 -> 158714 bytes .../media/getServicePrincipalObjectID.png | Bin 0 -> 350836 bytes .../Docs/media/setupAppRegistrations1.png | Bin 0 -> 216602 bytes .../Docs/media/setupAppRegistrations2.png | Bin 0 -> 570822 bytes .../Docs/media/setupAppRegistrations3.png | Bin 0 -> 212791 bytes .../Docs/media/setupAppRegistrations4.png | Bin 0 -> 131289 bytes .../Docs/media/setupAppRegistrations5.png | Bin 0 -> 74008 bytes .../functional/Docs/media/setupPipelines1.png | Bin 0 -> 219442 bytes .../functional/Docs/media/setupPipelines2.png | Bin 0 -> 211699 bytes .../functional/Docs/media/setupPipelines3.png | Bin 0 -> 169772 bytes .../functional/Docs/media/setupPipelines4.png | Bin 0 -> 102426 bytes .../functional/Docs/media/setupPipelines5.png | Bin 0 -> 240037 bytes .../functional/Docs/media/setupPipelines6.png | Bin 0 -> 54426 bytes tests/functional/Docs/pipelines.md | 129 + .../functional/Docs/setupAppRegistrations.md | 88 + tests/functional/Docs/setupPipelines.md | 34 + tests/functional/LICENSE | 21 + .../Libraries/Directory.Build.props | 24 + .../ConvertTranscriptHandler.cs | 70 + .../TranscriptConverter/Converter.cs | 254 + .../Libraries/TranscriptConverter/Program.cs | 21 + .../TranscriptConverter/TestScript.cs | 23 + .../TranscriptConverter/TestScriptItem.cs | 59 + .../TranscriptConverter.csproj | 16 + .../Authentication/Session.cs | 22 + .../Authentication/SessionInfo.cs | 29 + .../TestClientAuthentication.cs | 119 + .../Authentication/TokenInfo.cs | 31 + .../Libraries/TranscriptTestRunner/README.md | 196 + .../TranscriptTestRunner/TestClientBase.cs | 52 + .../TranscriptTestRunner/TestClientFactory.cs | 54 + .../TestClients/DirectLineTestClient.cs | 448 + .../DirectLineTestClientOptions.cs | 39 + .../TranscriptTestRunner/TestRunner.cs | 324 + .../TranscriptTestRunner/TestScript.cs | 23 + .../TranscriptTestRunner/TestScriptItem.cs | 59 + .../TranscriptTestRunner.csproj | 24 + .../XUnit/XUnitTestRunner.cs | 60 + .../TranscriptTestRunner/testscript.schema | 171 + tests/functional/PackageReferences.props | 5 + tests/functional/README.md | 25 + tests/functional/SECURITY.md | 41 + tests/functional/SkillFunctionalTests.sln | 59 + tests/functional/Tests/Directory.Build.props | 16 + .../CardActions/CardActionsTests.cs | 120 + .../CardActions/TestScripts/Animation.json | 58 + .../TestScripts/Animation.transcript | 165 + .../CardActions/TestScripts/Audio.json | 58 + .../CardActions/TestScripts/Audio.transcript | 165 + .../CardActions/TestScripts/BotAction.json | 77 + .../TestScripts/BotAction.transcript | 216 + .../CardActions/TestScripts/Carousel.json | 76 + .../TestScripts/Carousel.transcript | 213 + .../CardActions/TestScripts/Hero.json | 62 + .../CardActions/TestScripts/Hero.transcript | 173 + .../CardActions/TestScripts/List.json | 76 + .../CardActions/TestScripts/List.transcript | 213 + .../CardActions/TestScripts/O365.json | 181 + .../CardActions/TestScripts/O365.transcript | 407 + .../CardActions/TestScripts/Receipt.json | 72 + .../TestScripts/Receipt.transcript | 197 + .../CardActions/TestScripts/SignIn.json | 60 + .../CardActions/TestScripts/SignIn.transcript | 166 + .../CardActions/TestScripts/SubmitAction.json | 64 + .../TestScripts/SubmitAction.transcript | 179 + .../CardActions/TestScripts/TaskModule.json | 62 + .../TestScripts/TaskModule.transcript | 178 + .../CardActions/TestScripts/Thumbnail.json | 62 + .../TestScripts/Thumbnail.transcript | 173 + .../CardActions/TestScripts/Video.json | 58 + .../CardActions/TestScripts/Video.transcript | 164 + .../TestScripts/WaterfallGreeting.json | 148 + .../TestScripts/WaterfallGreeting.transcript | 435 + .../SkillFunctionalTests/Common/HostBot.cs | 53 + .../Common/SkillBotNames.cs | 22 + .../SkillFunctionalTests/Common/TestCase.cs | 23 + .../Common/TestCaseBuilder.cs | 60 + .../Common/TestCaseDataObject.cs | 73 + .../FileUpload/FileUploadTests.cs | 110 + .../FileUpload/Media/TestFile.txt | 1 + .../FileUpload/TestScripts/FileUpload1.json | 148 + .../TestScripts/FileUpload1.transcript | 434 + .../FileUpload/TestScripts/FileUpload2.json | 59 + .../TestScripts/FileUpload2.transcript | 138 + .../MessageWithAttachmentTests.cs | 91 + .../TestScripts/MessageWithAttachment.json | 281 + .../MessageWithAttachment.transcript | 789 ++ .../ProactiveMessages/ProactiveTests.cs | 121 + .../TestScripts/ProactiveEnd.json | 47 + .../TestScripts/ProactiveEnd.transcript | 91 + .../TestScripts/ProactiveStart.json | 137 + .../TestScripts/ProactiveStart.transcript | 408 + .../Tests/SkillFunctionalTests/README.md | 7 + .../SkillFunctionalTests/ScriptTestBase.cs | 46 + .../SignIn/SignInTests.cs | 111 + .../SignIn/TestScripts/SignIn1.json | 112 + .../SignIn/TestScripts/SignIn1.transcript | 360 + .../SignIn/TestScripts/SignIn2.json | 77 + .../SignIn/TestScripts/signin2.transcript | 124 + .../SingleTurn/EchoTests.cs | 104 + .../TestScripts/EchoMultiSkill.json | 163 + .../TestScripts/EchoMultiSkill.transcript | 480 + .../SkillFunctionalTests.csproj | 60 + .../SkillFunctionalTests/Sso/SsoTests.cs | 80 + .../SkillFunctionalTests/appsettings.json | 45 + .../SkillFunctionalTests/xunit.runner.json | 3 + .../TestRunnerTests.cs | 21 + .../TranscriptTestRunnerTests.csproj | 21 + .../template-app-insights-resources.json | 35 + .../templates/template-bot-resources.json | 210 + .../template-cosmosdb-resources.json | 77 + .../template-key-vault-resources.json | 129 + .../template-python-bot-resources.json | 195 + ...template-service-plan-linux-resources.json | 61 + ...mplate-service-plan-windows-resources.json | 61 + .../cleanupResources/cleanupResources.yml | 261 + .../deleteAppRegistrations.yml | 62 + .../build/yaml/common/deleteResourceGroup.yml | 37 + .../common/configureOAuth.yml | 45 + .../common/createAppService.yml | 62 + .../common/createDirectLine.yml | 26 + .../common/deleteResources.yml | 40 + .../common/getAppRegistration.yml | 62 + .../common/prepareResources.yml | 29 + .../common/tagBotBuilderVersion.yml | 15 + .../deployBotResources/deployBotResources.yml | 510 + .../yaml/deployBotResources/dotnet/deploy.yml | 260 + .../dotnet/deployComposer.yml | 167 + .../dotnet/evaluateDependenciesVariables.yml | 67 + .../dotnet/installDependencies.yml | 60 + .../dotnet/installDependenciesV3.yml | 44 + .../yaml/deployBotResources/js/deploy.yml | 218 + .../js/evaluateDependenciesVariables.yml | 69 + .../yaml/deployBotResources/python/deploy.yml | 183 + .../python/evaluateDependenciesVariables.yml | 110 + .../build/yaml/dotnetBotsBuild-CI.yml | 53 + .../build/yaml/functionalTests-CI.yml | 31 + .../build/yaml/functionalTestsBuild-CI.yml | 56 + tests/functional/build/yaml/jsBotsBuildCI.yml | 6 + .../build/yaml/pythonBotsBuild-CI.yml | 14 + .../createAppRegistrations.yml | 132 + .../sharedResources/createSharedResources.yml | 172 + .../yaml/testScenarios/configureConsumers.yml | 618 + .../build/yaml/testScenarios/runScenario.yml | 83 + .../yaml/testScenarios/runTestScenarios.yml | 102 + tests/functional/package.json | 15 + tests/functional/specs/TransciptTestRunner.md | 59 + .../specs/media/TestRunnerClassDiagram.png | Bin 0 -> 30562 bytes .../specs/media/TestRunnerClassDiagram2.png | Bin 0 -> 35869 bytes .../specs/media/src/TestRunnerDiagrams.vsdx | Bin 0 -> 35765 bytes tests/functional/yarn.lock | 2032 +++ .../ActionTests.cs | 592 - .../ConditionalTests.cs | 40 - ...icrosoft.Bot.Components.Teams.Tests.csproj | 35 - .../ResourceExplorerFixture.cs | 38 - .../TestUtils.cs | 98 - .../Action_GetMeetingParticipant.test.dialog | 66 - ...ion_GetMeetingParticipantError.test.dialog | 42 - ...ingParticipantErrorWithAdapter.test.dialog | 43 - .../ActionTests/Action_GetMember.test.dialog | 65 - .../Action_GetMemberError.test.dialog | 42 - ...tion_GetMemberErrorWithAdapter.test.dialog | 43 - .../Action_GetPagedMembers.test.dialog | 68 - .../Action_GetPagedMembersError.test.dialog | 42 - .../Action_GetPagedTeamMembers.test.dialog | 65 - ...ction_GetPagedTeamMembersError.test.dialog | 42 - .../Action_GetTeamChannels.test.dialog | 58 - .../Action_GetTeamChannelsError.test.dialog | 42 - .../Action_GetTeamDetails.test.dialog | 52 - .../Action_GetTeamDetailsError.test.dialog | 42 - .../Action_GetTeamMember.test.dialog | 64 - .../Action_GetTeamMemberError.test.dialog | 42 - ..._GetTeamMemberErrorWithAdapter.test.dialog | 43 - ..._SendAppBasedLinkQueryResponse.test.dialog | 50 - ...AppBasedLinkQueryResponseError.test.dialog | 79 - .../Action_SendMEActionResponse.test.dialog | 56 - ...tion_SendMEActionResponseError.test.dialog | 54 - ...tion_SendMEAttachmentsResponse.test.dialog | 50 - ...SendMEAttachmentsResponseError.test.dialog | 44 - .../Action_SendMEAuthResponse.test.dialog | 41 - ...Action_SendMEAuthResponseError.test.dialog | 43 - ...MEAuthResponseErrorWithAdapter.test.dialog | 88 - ...endMEBotMessagePreviewResponse.test.dialog | 52 - ...BotMessagePreviewResponseError.test.dialog | 79 - ...EConfigQuerySettingUrlResponse.test.dialog | 39 - ...igQuerySettingUrlResponseError.test.dialog | 32 - .../Action_SendMEMessageResponse.test.dialog | 38 - ...ion_SendMEMessageResponseError.test.dialog | 32 - ...ction_SendMESelectItemResponse.test.dialog | 50 - ..._SendMESelectItemResponseError.test.dialog | 79 - ...tion_SendMessageToTeamsChannel.test.dialog | 63 - ...SendMessageToTeamsChannelError.test.dialog | 37 - ...ction_SendTabAuthResponseError.test.dialog | 43 - ...abAuthResponseErrorWithAdapter.test.dialog | 88 - .../Action_SendTabCardResponse.test.dialog | 66 - ...ction_SendTabCardResponseError.test.dialog | 79 - ...ion_SendTaskModuleCardResponse.test.dialog | 56 - ...endTaskModuleCardResponseError.test.dialog | 79 - ..._SendTaskModuleMessageResponse.test.dialog | 37 - ...tion_SendTaskModuleUrlResponse.test.dialog | 47 - ...SendTaskModuleUrlResponseError.test.dialog | 42 - ...nalsTests_OnTeamsActivityTypes.test.dialog | 616 - tests/skills/common/NuGet.Config | 7 - .../Microsoft.Bot.Components.Tests.sln | 4 +- .../skills/calendar/AvailabilityTests.cs | 0 .../skills/calendar/CalendarSkillTestBase.cs | 0 .../skills/calendar/CreateEventTests.cs | 0 .../skills/calendar/CustomActionTests.cs | 0 .../skills/calendar/GetEventTests.cs | 0 ...t.Bot.Dialogs.Tests.Skills.Calendar.csproj | 2 +- .../skills/calendar}/NuGet.Config | 0 .../skills/calendar/RespondToEventTests.cs | 0 .../GetAvailabilityBreaks.test.dialog | 0 .../GetAvailabilityFirst.test.dialog | 0 .../GetAvailabilityLast.test.dialog | 0 .../findMeetingTimes.mock.dialog | 0 .../HttpRequestMock/getContact.mock.dialog | 0 .../HttpRequestMock/getEvent.mock.dialog | 0 .../HttpRequestMock/getEvents.mock.dialog | 0 .../HttpRequestMock/getPeople.mock.dialog | 0 .../HttpRequestMock/getProfile.mock.dialog | 0 .../getWorkingHours.mock.dialog | 0 .../UserTokenMock/nomagiccode.mock.dialog | 0 .../Calendar_en_us_lu/1322656655.json | 0 .../Calendar_en_us_lu/565125802.json | 0 .../Calendar_en_us_lu/686230913.json | 0 .../CreateEventTests/CreateEvent.test.dialog | 0 ...ateEvent_interruption_multiple.test.dialog | 0 ...nt_interruption_setAttendeeAdd.test.dialog | 0 ...interruption_setAttendeeRemove.test.dialog | 0 ...Event_interruption_setDateTime.test.dialog | 0 ...nt_interruption_setDescription.test.dialog | 0 ...Event_interruption_setDuration.test.dialog | 0 ...Event_interruption_setLocation.test.dialog | 0 ...terruption_setOnlineMeetingAdd.test.dialog | 0 ...ruption_setOnlineMeetingRemove.test.dialog | 0 ...ateEvent_interruption_setTitle.test.dialog | 0 .../CreateEvent_interruption_skip.test.dialog | 0 .../CreateEvent_noEntities.test.dialog | 0 ...CreateEvent_withEntity_contact.test.dialog | 0 ...reateEvent_withEntity_datetime.test.dialog | 0 ...reateEvent_withEntity_location.test.dialog | 0 .../CreateEvent_withEntity_title.test.dialog | 0 ...Event_withEntity_title_contact.test.dialog | 0 ...hEntity_title_contact_datetime.test.dialog | 0 .../HttpRequestMock/createEvent.mock.dialog | 0 .../findMeetingTimes.mock.dialog | 0 .../HttpRequestMock/getContact.mock.dialog | 0 .../HttpRequestMock/getPeople.mock.dialog | 0 .../HttpRequestMock/getProfile.mock.dialog | 0 .../getWorkingHours.mock.dialog | 0 .../UserTokenMock/nomagiccode.mock.dialog | 0 .../Calendar_en_us_lu/1039170905.json | 0 .../Calendar_en_us_lu/1082755164.json | 0 .../Calendar_en_us_lu/1127709374.json | 0 .../Calendar_en_us_lu/2937641126.json | 0 .../Calendar_en_us_lu/3617381462.json | 0 .../Calendar_en_us_lu/3672480022.json | 0 .../Calendar_en_us_lu/3897990621.json | 0 .../Calendar_en_us_lu/4011733239.json | 0 .../Calendar_en_us_lu/4107782572.json | 0 .../Calendar_en_us_lu/503597261.json | 0 .../Calendar_en_us_lu/565993014.json | 0 .../Calendar_en_us_lu/641530942.json | 0 .../1039170905.json | 0 .../1134332707.json | 0 .../1413756758.json | 0 .../1556687899.json | 0 .../1695466276.json | 0 .../1847842841.json | 0 .../1869746525.json | 0 .../2540704622.json | 0 .../2542755548.json | 0 .../2553583282.json | 0 .../2564825304.json | 0 .../2603715459.json | 0 .../2937641126.json | 0 .../3081695755.json | 0 .../3430243042.json | 0 .../3665878675.json | 0 .../3672480022.json | 0 .../3886812449.json | 0 .../CreateEventDialog_en_us_lu/428143476.json | 0 .../1392353970.json | 0 .../1484328397.json | 0 .../1542622736.json | 0 .../4085864143.json | 0 .../GetContactsDialog_en_us_lu/430240736.json | 0 .../ListDialog_en_us_lu/3723765839.json | 0 ...CalendarSkillTests_AcceptEvent.test.dialog | 0 ...CalendarSkillTests_CreateEvent.test.dialog | 0 ...alendarSkillTests_DeclineEvent.test.dialog | 0 ...CalendarSkillTests_DeleteEvent.test.dialog | 0 ...darSkillTests_FindMeetingTimes.test.dialog | 0 ...CalendarSkillTests_GetContacts.test.dialog | 0 .../CalendarSkillTests_GetEvents.test.dialog | 0 .../CalendarSkillTests_GetProfile.test.dialog | 0 ...ndarSkillTests_GetWorkingHours.test.dialog | 0 ...alendarSkillTests_SettingsTest.test.dialog | 0 ...llTests_TentativelyAcceptEvent.test.dialog | 0 ...CalendarSkillTests_UpdateEvent.test.dialog | 0 .../HttpRequestMock/acceptEvent.mock.dialog | 0 .../HttpRequestMock/createEvent.mock.dialog | 0 .../HttpRequestMock/declineEvent.mock.dialog | 0 .../HttpRequestMock/deleteEvent.mock.dialog | 0 .../findMeetingTimes.mock.dialog | 0 .../HttpRequestMock/getContact.mock.dialog | 0 .../HttpRequestMock/getEvents.mock.dialog | 0 .../HttpRequestMock/getPeople.mock.dialog | 0 .../HttpRequestMock/getProfile.mock.dialog | 0 .../getWorkingHours.mock.dialog | 0 .../tentativelyAcceptEvent.mock.dialog | 0 .../HttpRequestMock/updateEvent.mock.dialog | 0 .../UserTokenMock/nomagiccode.mock.dialog | 0 .../GetEventAttendees.test.dialog | 0 .../GetEventDateTime.test.dialog | 0 .../GetEventLocation.test.dialog | 0 .../GetEvents_multipleResults.test.dialog | 0 .../GetEvents_noResults.test.dialog | 0 .../GetEvents_singleResult.test.dialog | 0 .../GetEvents_withEntity_contact.test.dialog | 0 .../GetEvents_withEntity_datetime.test.dialog | 0 .../HttpRequestMock/getContact.mock.dialog | 0 .../HttpRequestMock/getEvent.mock.dialog | 0 .../HttpRequestMock/getEvents.mock.dialog | 0 .../getEventsNotOrganizer.mock.dialog | 0 .../getEventsOnlineMeeting.mock.dialog | 0 .../getEvents_noResults.mock.dialog | 0 .../HttpRequestMock/getPeople.mock.dialog | 0 .../HttpRequestMock/getProfile.mock.dialog | 0 .../getWorkingHours.mock.dialog | 0 .../UserTokenMock/nomagiccode.mock.dialog | 0 .../Calendar_en_us_lu/1526748840.json | 0 .../Calendar_en_us_lu/1662191128.json | 0 .../Calendar_en_us_lu/1938006685.json | 0 .../Calendar_en_us_lu/2117736667.json | 0 .../Calendar_en_us_lu/3989091574.json | 0 .../Calendar_en_us_lu/904626561.json | 0 .../ListDialog_en_us_lu/3723765839.json | 0 .../CancelEvent_asAttendee.test.dialog | 0 .../CancelEvent_asOrganizer.test.dialog | 0 .../HttpRequestMock/acceptEvent.mock.dialog | 0 .../HttpRequestMock/declineEvent.mock.dialog | 0 .../HttpRequestMock/deleteEvent.mock.dialog | 0 .../HttpRequestMock/getContact.mock.dialog | 0 .../HttpRequestMock/getEvent.mock.dialog | 0 .../HttpRequestMock/getEvents.mock.dialog | 0 .../getEventsNotOrganizer.mock.dialog | 0 .../HttpRequestMock/getPeople.mock.dialog | 0 .../HttpRequestMock/getProfile.mock.dialog | 0 .../getWorkingHours.mock.dialog | 0 .../tentativelyAcceptEvent.mock.dialog | 0 .../RespondToEvent_Accept.test.dialog | 0 .../RespondToEvent_Decline.test.dialog | 0 ...spondToEvent_TentativelyAccept.test.dialog | 0 .../UserTokenMock/nomagiccode.mock.dialog | 0 .../Calendar_en_us_lu/1290152274.json | 0 .../Calendar_en_us_lu/2454555038.json | 0 .../Calendar_en_us_lu/2818238401.json | 0 .../Calendar_en_us_lu/3653033598.json | 0 .../HttpRequestMock/getContact.mock.dialog | 0 .../HttpRequestMock/getEvent.mock.dialog | 0 .../HttpRequestMock/getEvents.mock.dialog | 0 .../getEventsNotOrganizer.mock.dialog | 0 .../getEventsOnlineMeeting.mock.dialog | 0 .../HttpRequestMock/getPeople.mock.dialog | 0 .../HttpRequestMock/getProfile.mock.dialog | 0 .../getWorkingHours.mock.dialog | 0 .../HttpRequestMock/updateEvent.mock.dialog | 0 .../UpdateEvent_basic_attendees.test.dialog | 0 .../UpdateEvent_basic_datetime.test.dialog | 0 .../UpdateEvent_basic_description.test.dialog | 0 .../UpdateEvent_basic_duration.test.dialog | 0 .../UpdateEvent_basic_location.test.dialog | 0 ...pdateEvent_basic_onlineMeeting.test.dialog | 0 .../UpdateEvent_basic_title.test.dialog | 0 ...t_interruption_setAttendeesAdd.test.dialog | 0 ...nterruption_setAttendeesRemove.test.dialog | 0 ...Event_interruption_setDateTime.test.dialog | 0 ...nt_interruption_setDescription.test.dialog | 0 ...Event_interruption_setDuration.test.dialog | 0 ...Event_interruption_setLocation.test.dialog | 0 ..._interruption_setOnlineMeeting.test.dialog | 0 ...ateEvent_interruption_setTitle.test.dialog | 0 ...eEvent_trigger_setAttendeesAdd.test.dialog | 0 ...ent_trigger_setAttendeesRemove.test.dialog | 0 ...pdateEvent_trigger_setDateTime.test.dialog | 0 ...teEvent_trigger_setDescription.test.dialog | 0 ...pdateEvent_trigger_setDuration.test.dialog | 0 ...pdateEvent_trigger_setLocation.test.dialog | 0 ...Event_trigger_setOnlineMeeting.test.dialog | 0 .../UpdateEvent_trigger_setTitle.test.dialog | 0 .../UserTokenMock/nomagiccode.mock.dialog | 0 .../Calendar_en_us_lu/1145996603.json | 0 .../Calendar_en_us_lu/1544134286.json | 0 .../Calendar_en_us_lu/1664405117.json | 0 .../Calendar_en_us_lu/2122886558.json | 0 .../Calendar_en_us_lu/2359587634.json | 0 .../Calendar_en_us_lu/2392124786.json | 0 .../Calendar_en_us_lu/274526507.json | 0 .../Calendar_en_us_lu/2860054276.json | 0 .../Calendar_en_us_lu/2937641126.json | 0 .../Calendar_en_us_lu/4148905213.json | 0 .../Calendar_en_us_lu/463684775.json | 0 .../Calendar_en_us_lu/493543230.json | 0 .../Calendar_en_us_lu/717479241.json | 0 .../1392353970.json | 0 .../4085864143.json | 0 .../GetEventsDialog_en_us_lu/2993157681.json | 0 .../ListDialog_en_us_lu/3723765839.json | 0 .../1145996603.json | 0 .../1392353970.json | 0 .../1490330477.json | 0 .../1544134286.json | 0 .../1639066482.json | 0 .../1704462493.json | 0 .../2250432073.json | 0 .../2338442885.json | 0 .../2359587634.json | 0 .../2395873221.json | 0 .../2464902023.json | 0 .../2564825304.json | 0 .../2903480491.json | 0 .../2937641126.json | 0 .../3216421296.json | 0 .../3255472636.json | 0 .../3386169890.json | 0 .../3558312640.json | 0 .../3857112431.json | 0 .../4278021066.json | 0 .../UpdateEventDialog_en_us_lu/428143476.json | 0 .../UpdateEventDialog_en_us_lu/457420302.json | 0 .../UpdateEventDialog_en_us_lu/766092102.json | 0 .../skills/calendar/UpdateEventTests.cs | 0 tests/{ => unit}/skills/calendar/app.schema | 0 .../skills/calendar/testsettings.json | 0 .../common/GraphComponentRegistration.cs | 0 .../Microsoft.Bot.Dialogs.Tests.Common.csproj | 2 +- .../skills/common}/NuGet.Config | 0 .../skills/common/PbxDialogTestBase.cs | 0 .../skills/people/GetCollaboratorsTests.cs | 0 .../skills/people/GetDirectReportsTests.cs | 0 .../skills/people/GetManagerTests.cs | 0 .../{ => unit}/skills/people/GetPeersTests.cs | 0 .../skills/people/GetProfileTests.cs | 0 ...oft.Bot.Dialogs.Tests.Skills.People.csproj | 4 +- ...aborators_CollaboratorNotFound.test.dialog | 0 ...Collaborators_MoreThanOneFound.test.dialog | 0 .../GetCollaborators_OneFound.test.dialog | 0 .../UserTokenMock/nomagiccode.mock.dialog | 0 .../ListDialog_en_us_lu/1176839528.json | 0 .../ListDialog_en_us_lu/3723765839.json | 0 .../people_en_us_lu/1916631299.json | 0 ...tReports_DirectReportsNotFound.test.dialog | 0 ...DirectReports_MoreThanOneFound.test.dialog | 0 .../GetDirectReports_OneFound.test.dialog | 0 .../GetDirectReports_UserNotFound.test.dialog | 0 .../UserTokenMock/nomagiccode.mock.dialog | 0 .../ListDialog_en_us_lu/1221289675.json | 0 .../ListDialog_en_us_lu/3723765839.json | 0 .../people_en_us_lu/1541877400.json | 0 .../people_en_us_lu/1968135638.json | 0 .../people_en_us_lu/2599657509.json | 0 .../GetManager_HappyPath.test.dialog | 0 .../GetManager_NoManager.test.dialog | 0 .../GetManager_UserNotFound.test.dialog | 0 .../UserTokenMock/nomagiccode.mock.dialog | 0 .../people_en_us_lu/1541877400.json | 0 .../people_en_us_lu/2918515466.json | 0 .../people_en_us_lu/780636099.json | 0 .../GetPeers_MoreThanOneFound.test.dialog | 0 .../GetPeers_OneFound.test.dialog | 0 .../GetPeers_PeersNotFound.test.dialog | 0 .../GetPeers_UserNotFound.test.dialog | 0 .../UserTokenMock/nomagiccode.mock.dialog | 0 .../ListDialog_en_us_lu/1221289675.json | 0 .../ListDialog_en_us_lu/3723765839.json | 0 .../people_en_us_lu/1175234241.json | 0 .../people_en_us_lu/2875849222.json | 0 .../people_en_us_lu/3817055125.json | 0 .../GetProfile_HappyPath.test.dialog | 0 ...rofile_HappyPath_MultipleUsers.test.dialog | 0 .../GetProfile_UserNotFound.test.dialog | 0 .../UserTokenMock/nomagiccode.mock.dialog | 0 .../ListDialog_en_us_lu/3914016862.json | 0 .../people_en_us_lu/1667363801.json | 0 .../people_en_us_lu/2122046538.json | 0 .../people_en_us_lu/2126032743.json | 0 .../skills/people/WhoSkillTestBase.cs | 0 tests/{ => unit}/skills/people/app.schema | 0 .../skills/people/testsettings.json | 0 845 files changed, 66536 insertions(+), 3837 deletions(-) create mode 100644 tests/functional/.editorconfig create mode 100644 tests/functional/.gitignore create mode 100644 tests/functional/.yarn/releases/yarn-berry.cjs create mode 100644 tests/functional/.yarnrc.yml create mode 100644 tests/functional/BotFramework-FunctionalTests.ruleset create mode 100644 tests/functional/Bots/.gitignore create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/AdapterWithErrorHandler.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Authentication/AllowedSkillsClaimsValidator.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Bots/HostBot.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Controllers/BotController.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Controllers/SkillController.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Dialogs/SetupDialog.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Program.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Properties/launchSettings.json create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/SimpleHostBot-2.1.csproj create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/SkillsConfiguration.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Startup.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/appsettings.json create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/wwwroot/default.htm create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/AdapterWithErrorHandler.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Authentication/AllowedSkillsClaimsValidator.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Bots/HostBot.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Controllers/BotController.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Controllers/SkillController.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Dialogs/SetupDialog.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Program.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Properties/launchSettings.json create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/SimpleHostBot.csproj create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/SkillsConfiguration.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Startup.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/appsettings.json create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/wwwroot/default.htm create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/AdapterWithErrorHandler.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Authentication/AllowedSkillsClaimsValidator.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Bots/RootBot.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Cards/welcomeCard.json create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Controllers/BotController.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Controllers/SkillController.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/MainDialog.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/Sso/SsoDialog.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/Sso/SsoSignInDialog.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/TangentDialog.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Middleware/LoggerMiddleware.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Program.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Properties/launchSettings.json create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/EchoSkill.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/SkillDefinition.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/TeamsSkill.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/WaterfallSkill.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/SkillsConfiguration.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Startup.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/TeamsAppManifest/icon-color.png create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/TeamsAppManifest/icon-outline.png create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/TeamsAppManifest/manifest.json create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/TokenExchangeSkillHandler.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/WaterfallHostBot.csproj create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/appsettings.json create mode 100644 tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/wwwroot/default.htm create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/Directory.Build.props create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/.gitignore create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Controllers/BotController.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Controllers/SkillController.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Program.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Properties/launchSettings.json create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/README.md create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/SimpleHostBotComposer.botproj create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/SimpleHostBotComposer.csproj create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Startup.cs create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/CallEchoSkill.dialog create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/knowledge-base/en-us/CallEchoSkill.en-us.qna create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/language-generation/en-us/CallEchoSkill.en-us.lg create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/language-understanding/en-us/CallEchoSkill.en-us.lu create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/recognizers/CallEchoSkill.en-us.lu.dialog create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/recognizers/CallEchoSkill.lu.dialog create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/recognizers/CallEchoSkill.lu.qna.dialog create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/emptyBot/knowledge-base/en-us/emptyBot.en-us.qna create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/generated/interruption/CallEchoSkill.en-us.lu create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/generated/interruption/CallEchoSkill.en-us.qna create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/generated/interruption/SimpleHostBotComposer.en-us.lu create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/generated/interruption/SimpleHostBotComposer.en-us.qna create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/knowledge-base/en-us/simplehostbotcomposer.en-us.qna create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/language-generation/en-us/common.en-us.lg create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/language-generation/en-us/simplehostbotcomposer.en-us.lg create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/language-understanding/en-us/simplehostbotcomposer.en-us.lu create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/media/create-azure-resource-command-line.png create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/media/publish-az-login.png create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/recognizers/SimpleHostBotComposer.en-us.lu.dialog create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/recognizers/SimpleHostBotComposer.lu.dialog create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/recognizers/SimpleHostBotComposer.lu.qna.dialog create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/schemas/sdk.schema create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/schemas/sdk.uischema create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/schemas/update-schema.ps1 create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/schemas/update-schema.sh create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/settings/appsettings.json create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/simplehostbotcomposer.dialog create mode 100644 tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/wwwroot/default.htm create mode 100644 tests/functional/Bots/DotNet/FunctionalTestsBots.sln create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Authentication/AllowedCallersClaimsValidator.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Bots/EchoBot.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Controllers/BotController.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/EchoSkillBot-2.1.csproj create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Program.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Properties/launchSettings.json create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/SkillAdapterWithErrorHandler.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Startup.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/appsettings.json create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/wwwroot/default.htm create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/wwwroot/manifests/echoskillbot-manifest-1.0.json create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/ApiControllerActionInvokerWithErrorHandler.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/App_Start/WebApiConfig.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Authentication/CustomAllowedCallersClaimsValidator.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Authentication/CustomSkillAuthenticationConfiguration.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Controllers/MessagesController.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Dialogs/RootDialog.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/EchoSkillBot-v3.csproj create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Global.asax create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Global.asax.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Properties/AssemblyInfo.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Web.Debug.config create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Web.Release.config create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Web.config create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/default.htm create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/manifests/echoskillbotv3-manifest-1.0.json create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/packages.config create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Authentication/AllowedCallersClaimsValidator.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Bots/EchoBot.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Controllers/BotController.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/EchoSkillBot.csproj create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Program.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Properties/launchSettings.json create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/SkillAdapterWithErrorHandler.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Startup.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/appsettings.json create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/wwwroot/default.htm create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/wwwroot/manifests/echoskillbot-manifest-1.0.json create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Authentication/AllowedCallersClaimsValidator.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Bots/SkillBot.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/BotController.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/CardsController.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/ProactiveController.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/SkillController.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/ActivityRouterDialog.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Auth/AuthDialog.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/AdaptiveCardExtensions.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/CardDialog.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/CardOptions.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/CardSampleHelper.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/ChannelSupportedCards.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/Files/buildreactionbotframework.jpg create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/Files/music.mp3 create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/Files/teams-logo.png create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/SampleData.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Delete/DeleteDialog.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/FileUpload/FileUploadDialog.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/MessageWithAttachment/MessageWithAttachmentDialog.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Proactive/ContinuationParameters.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Proactive/WaitForProactiveDialog.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Sso/SsoSkillDialog.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Sso/SsoSkillSignInDialog.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Update/UpdateDialog.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Middleware/SsoSaveStateMiddleware.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Program.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Properties/launchSettings.json create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/SkillAdapterWithErrorHandler.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Startup.cs create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/WaterfallSkillBot.csproj create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/appsettings.json create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/wwwroot/default.htm create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/wwwroot/images/architecture-resize.png create mode 100644 tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/wwwroot/manifests/waterfallskillbot-manifest-1.0.json create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/Directory.Build.props create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/.gitignore create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Controllers/BotController.cs create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Controllers/SkillController.cs create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/EchoSkillBotComposer.botproj create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/EchoSkillBotComposer.csproj create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Program.cs create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Properties/launchSettings.json create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/README.md create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Startup.cs create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/dialogs/emptyBot/knowledge-base/en-us/emptyBot.en-us.qna create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/echoskillbotcomposer.dialog create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/generated/interruption/EchoSkillBotComposer.en-us.lu create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/generated/interruption/EchoSkillBotComposer.en-us.qna create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/knowledge-base/en-us/echoskillbotcomposer.en-us.qna create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/language-generation/en-us/common.en-us.lg create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/language-generation/en-us/echoskillbotcomposer.en-us.lg create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/language-understanding/en-us/echoskillbotcomposer.en-us.lu create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/manifests/echoskillbotcomposer-manifest.json create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/media/create-azure-resource-command-line.png create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/media/publish-az-login.png create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/schemas/sdk.schema create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/schemas/sdk.uischema create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/schemas/update-schema.ps1 create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/schemas/update-schema.sh create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/settings/appsettings.json create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/wwwroot/default.htm create mode 100644 tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/wwwroot/manifests/echoskillbotcomposer-manifest.json create mode 100644 tests/functional/Bots/JavaScript/.gitignore create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/.env create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/authentication/allowedSkillsClaimsValidator.js create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/bots/hostBot.js create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/dialogs/setupDialog.js create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/index.js create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/package.json create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/skillsConfiguration.js create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/.env create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/Cards/welcomeCard.json create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/TokenExchangeSkillHandler.js create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/authentication/allowedSkillsClaimsValidator.js create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/bots/rootBot.js create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/dialogs/mainDialog.js create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/ssoDialog.js create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/ssoSignInDialog.js create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/dialogs/tangentDialog.js create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/index.js create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/middleware/loggerMiddleware.js create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/package.json create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/skills/echoSkill.js create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/skills/skillDefinition.js create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/skills/teamsSkill.js create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/skills/waterfallSkill.js create mode 100644 tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/skillsConfiguration.js create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot-v3/.env create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot-v3/index.js create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot-v3/manifests/echoskillbotv3-manifest-1.0.json create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot-v3/package.json create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/.env create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/authentication/allowedCallersClaimsValidator.js create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/bot.js create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/index.js create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/manifests/echoskillbot-manifest-1.0.json create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/package.json create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/.env create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/authentication/allowedCallersClaimsValidator.js create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/bots/skillBot.js create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/activityRouterDialog.js create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/auth/authDialog.js create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/cardDialog.js create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/cardOptions.js create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/cardSampleHelper.js create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/channelSupportedCards.js create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/files/buildreactionbotframework.jpg create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/files/music.mp3 create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/files/teams-logo.png create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/delete/deleteDialog.js create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/fileUpload/fileUploadDialog.js create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/messageWithAttachment/messageWithAttachmentDialog.js create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/continuationParameters.js create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/waitForProactiveDialog.js create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/ssoSkillDialog.js create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/ssoSkillSignInDialog.js create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/update/updateDialog.js create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/images/architecture-resize.png create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/index.js create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/manifests/waterfallskillbot-manifest-1.0.json create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/middleware/ssoSaveStateMiddleware.js create mode 100644 tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/package.json create mode 100644 tests/functional/Bots/Python/.gitignore create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/.env create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/adapter_with_error_handler.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/app.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/authentication/__init__.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/authentication/allowed_skills_claims_validator.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/bots/__init__.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/bots/host_bot.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/config.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/dialogs/__init__.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/dialogs/setup_dialog.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/helpers/dialog_helper.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/requirements.txt create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/skill_conversation_id_factory.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/.env create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/.pylintrc create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/adapter_with_error_handler.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/app.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/authentication/__init__.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/authentication/allowed_skills_claims_validator.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/bots/__init__.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/bots/root_bot.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/cards/welcomeCard.json create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/__init__.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/main_dialog.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/__init__.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/sso_dialog.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/sso_signin_dialog.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/tangent_dialog.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/helpers/dialog_helper.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/requirements.txt create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skill_conversation_id_factory.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/echo_skill.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/skill_definition.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/teams_skill.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/waterfall_skill.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills_configuration.py create mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/token_exchange_skill_handler.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/app.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/authentication/__init__.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/authentication/allowed_callers_claims_validator.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/bots/__init__.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/bots/echo_bot.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/config.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/manifests/echoskillbot-manifest-1.0.json create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/requirements.txt create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/.env create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/.pylintrc create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/app.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/authentication/__init__.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/authentication/allowed_callers_claims_validator.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/bots/__init__.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/bots/skill_bot.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/config.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/__init__.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/activity_router_dialog.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/auth/__init__.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/auth/auth_dialog.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/__init__.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_dialog.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_options.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_sample_helper.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/channel_supported_cards.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/files/buildreactionbotframework.jpg create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/files/music.mp3 create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/files/teams-logo.png create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/delete/__init__.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/delete/delete_dialog.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/file_upload/__init__.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/file_upload/file_upload_dialog.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/message_with_attachment/__init__.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/message_with_attachment/message_with_attachment_dialog.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/__init__.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/continuation_parameters.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/wait_for_proactive_dialog.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/__init__.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/sso_skill_dialog.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/sso_skill_signin_dialog.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/update/__init__.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/update/update_dialog.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/images/architecture-resize.png create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/manifests/waterfallskillbot-manifest-1.0.json create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/middleware/__init__.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/middleware/sso_save_state_middleware.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/requirements.txt create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/skill_adapter_with_error_handler.py create mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/skill_conversation_id_factory.py create mode 100644 tests/functional/CODE_OF_CONDUCT.md create mode 100644 tests/functional/Directory.Build.props create mode 100644 tests/functional/Docs/README.md create mode 100644 tests/functional/Docs/addARMServiceConnection.md create mode 100644 tests/functional/Docs/createWebAppDeploymentCredentials.md create mode 100644 tests/functional/Docs/getServicePrincipalObjectID.md create mode 100644 tests/functional/Docs/media/CreateAppRegistrations.ps1 create mode 100644 tests/functional/Docs/media/addARMServiceConnection1.png create mode 100644 tests/functional/Docs/media/addARMServiceConnection2.png create mode 100644 tests/functional/Docs/media/getServicePrincipalObjectID.png create mode 100644 tests/functional/Docs/media/setupAppRegistrations1.png create mode 100644 tests/functional/Docs/media/setupAppRegistrations2.png create mode 100644 tests/functional/Docs/media/setupAppRegistrations3.png create mode 100644 tests/functional/Docs/media/setupAppRegistrations4.png create mode 100644 tests/functional/Docs/media/setupAppRegistrations5.png create mode 100644 tests/functional/Docs/media/setupPipelines1.png create mode 100644 tests/functional/Docs/media/setupPipelines2.png create mode 100644 tests/functional/Docs/media/setupPipelines3.png create mode 100644 tests/functional/Docs/media/setupPipelines4.png create mode 100644 tests/functional/Docs/media/setupPipelines5.png create mode 100644 tests/functional/Docs/media/setupPipelines6.png create mode 100644 tests/functional/Docs/pipelines.md create mode 100644 tests/functional/Docs/setupAppRegistrations.md create mode 100644 tests/functional/Docs/setupPipelines.md create mode 100644 tests/functional/LICENSE create mode 100644 tests/functional/Libraries/Directory.Build.props create mode 100644 tests/functional/Libraries/TranscriptConverter/ConvertTranscriptHandler.cs create mode 100644 tests/functional/Libraries/TranscriptConverter/Converter.cs create mode 100644 tests/functional/Libraries/TranscriptConverter/Program.cs create mode 100644 tests/functional/Libraries/TranscriptConverter/TestScript.cs create mode 100644 tests/functional/Libraries/TranscriptConverter/TestScriptItem.cs create mode 100644 tests/functional/Libraries/TranscriptConverter/TranscriptConverter.csproj create mode 100644 tests/functional/Libraries/TranscriptTestRunner/Authentication/Session.cs create mode 100644 tests/functional/Libraries/TranscriptTestRunner/Authentication/SessionInfo.cs create mode 100644 tests/functional/Libraries/TranscriptTestRunner/Authentication/TestClientAuthentication.cs create mode 100644 tests/functional/Libraries/TranscriptTestRunner/Authentication/TokenInfo.cs create mode 100644 tests/functional/Libraries/TranscriptTestRunner/README.md create mode 100644 tests/functional/Libraries/TranscriptTestRunner/TestClientBase.cs create mode 100644 tests/functional/Libraries/TranscriptTestRunner/TestClientFactory.cs create mode 100644 tests/functional/Libraries/TranscriptTestRunner/TestClients/DirectLineTestClient.cs create mode 100644 tests/functional/Libraries/TranscriptTestRunner/TestClients/DirectLineTestClientOptions.cs create mode 100644 tests/functional/Libraries/TranscriptTestRunner/TestRunner.cs create mode 100644 tests/functional/Libraries/TranscriptTestRunner/TestScript.cs create mode 100644 tests/functional/Libraries/TranscriptTestRunner/TestScriptItem.cs create mode 100644 tests/functional/Libraries/TranscriptTestRunner/TranscriptTestRunner.csproj create mode 100644 tests/functional/Libraries/TranscriptTestRunner/XUnit/XUnitTestRunner.cs create mode 100644 tests/functional/Libraries/TranscriptTestRunner/testscript.schema create mode 100644 tests/functional/PackageReferences.props create mode 100644 tests/functional/README.md create mode 100644 tests/functional/SECURITY.md create mode 100644 tests/functional/SkillFunctionalTests.sln create mode 100644 tests/functional/Tests/Directory.Build.props create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/CardActionsTests.cs create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Animation.json create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Animation.transcript create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Audio.json create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Audio.transcript create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/BotAction.json create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/BotAction.transcript create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Carousel.json create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Carousel.transcript create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Hero.json create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Hero.transcript create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/List.json create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/List.transcript create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/O365.json create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/O365.transcript create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Receipt.json create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Receipt.transcript create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SignIn.json create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SignIn.transcript create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SubmitAction.json create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SubmitAction.transcript create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/TaskModule.json create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/TaskModule.transcript create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Thumbnail.json create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Thumbnail.transcript create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Video.json create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Video.transcript create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/WaterfallGreeting.json create mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/WaterfallGreeting.transcript create mode 100644 tests/functional/Tests/SkillFunctionalTests/Common/HostBot.cs create mode 100644 tests/functional/Tests/SkillFunctionalTests/Common/SkillBotNames.cs create mode 100644 tests/functional/Tests/SkillFunctionalTests/Common/TestCase.cs create mode 100644 tests/functional/Tests/SkillFunctionalTests/Common/TestCaseBuilder.cs create mode 100644 tests/functional/Tests/SkillFunctionalTests/Common/TestCaseDataObject.cs create mode 100644 tests/functional/Tests/SkillFunctionalTests/FileUpload/FileUploadTests.cs create mode 100644 tests/functional/Tests/SkillFunctionalTests/FileUpload/Media/TestFile.txt create mode 100644 tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload1.json create mode 100644 tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload1.transcript create mode 100644 tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload2.json create mode 100644 tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload2.transcript create mode 100644 tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/MessageWithAttachmentTests.cs create mode 100644 tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/TestScripts/MessageWithAttachment.json create mode 100644 tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/TestScripts/MessageWithAttachment.transcript create mode 100644 tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/ProactiveTests.cs create mode 100644 tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveEnd.json create mode 100644 tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveEnd.transcript create mode 100644 tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveStart.json create mode 100644 tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveStart.transcript create mode 100644 tests/functional/Tests/SkillFunctionalTests/README.md create mode 100644 tests/functional/Tests/SkillFunctionalTests/ScriptTestBase.cs create mode 100644 tests/functional/Tests/SkillFunctionalTests/SignIn/SignInTests.cs create mode 100644 tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn1.json create mode 100644 tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn1.transcript create mode 100644 tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn2.json create mode 100644 tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/signin2.transcript create mode 100644 tests/functional/Tests/SkillFunctionalTests/SingleTurn/EchoTests.cs create mode 100644 tests/functional/Tests/SkillFunctionalTests/SingleTurn/TestScripts/EchoMultiSkill.json create mode 100644 tests/functional/Tests/SkillFunctionalTests/SingleTurn/TestScripts/EchoMultiSkill.transcript create mode 100644 tests/functional/Tests/SkillFunctionalTests/SkillFunctionalTests.csproj create mode 100644 tests/functional/Tests/SkillFunctionalTests/Sso/SsoTests.cs create mode 100644 tests/functional/Tests/SkillFunctionalTests/appsettings.json create mode 100644 tests/functional/Tests/SkillFunctionalTests/xunit.runner.json create mode 100644 tests/functional/Tests/TranscriptTestRunnerTests/TestRunnerTests.cs create mode 100644 tests/functional/Tests/TranscriptTestRunnerTests/TranscriptTestRunnerTests.csproj create mode 100644 tests/functional/build/templates/template-app-insights-resources.json create mode 100644 tests/functional/build/templates/template-bot-resources.json create mode 100644 tests/functional/build/templates/template-cosmosdb-resources.json create mode 100644 tests/functional/build/templates/template-key-vault-resources.json create mode 100644 tests/functional/build/templates/template-python-bot-resources.json create mode 100644 tests/functional/build/templates/template-service-plan-linux-resources.json create mode 100644 tests/functional/build/templates/template-service-plan-windows-resources.json create mode 100644 tests/functional/build/yaml/cleanupResources/cleanupResources.yml create mode 100644 tests/functional/build/yaml/cleanupResources/deleteAppRegistrations.yml create mode 100644 tests/functional/build/yaml/common/deleteResourceGroup.yml create mode 100644 tests/functional/build/yaml/deployBotResources/common/configureOAuth.yml create mode 100644 tests/functional/build/yaml/deployBotResources/common/createAppService.yml create mode 100644 tests/functional/build/yaml/deployBotResources/common/createDirectLine.yml create mode 100644 tests/functional/build/yaml/deployBotResources/common/deleteResources.yml create mode 100644 tests/functional/build/yaml/deployBotResources/common/getAppRegistration.yml create mode 100644 tests/functional/build/yaml/deployBotResources/common/prepareResources.yml create mode 100644 tests/functional/build/yaml/deployBotResources/common/tagBotBuilderVersion.yml create mode 100644 tests/functional/build/yaml/deployBotResources/deployBotResources.yml create mode 100644 tests/functional/build/yaml/deployBotResources/dotnet/deploy.yml create mode 100644 tests/functional/build/yaml/deployBotResources/dotnet/deployComposer.yml create mode 100644 tests/functional/build/yaml/deployBotResources/dotnet/evaluateDependenciesVariables.yml create mode 100644 tests/functional/build/yaml/deployBotResources/dotnet/installDependencies.yml create mode 100644 tests/functional/build/yaml/deployBotResources/dotnet/installDependenciesV3.yml create mode 100644 tests/functional/build/yaml/deployBotResources/js/deploy.yml create mode 100644 tests/functional/build/yaml/deployBotResources/js/evaluateDependenciesVariables.yml create mode 100644 tests/functional/build/yaml/deployBotResources/python/deploy.yml create mode 100644 tests/functional/build/yaml/deployBotResources/python/evaluateDependenciesVariables.yml create mode 100644 tests/functional/build/yaml/dotnetBotsBuild-CI.yml create mode 100644 tests/functional/build/yaml/functionalTests-CI.yml create mode 100644 tests/functional/build/yaml/functionalTestsBuild-CI.yml create mode 100644 tests/functional/build/yaml/jsBotsBuildCI.yml create mode 100644 tests/functional/build/yaml/pythonBotsBuild-CI.yml create mode 100644 tests/functional/build/yaml/sharedResources/createAppRegistrations.yml create mode 100644 tests/functional/build/yaml/sharedResources/createSharedResources.yml create mode 100644 tests/functional/build/yaml/testScenarios/configureConsumers.yml create mode 100644 tests/functional/build/yaml/testScenarios/runScenario.yml create mode 100644 tests/functional/build/yaml/testScenarios/runTestScenarios.yml create mode 100644 tests/functional/package.json create mode 100644 tests/functional/specs/TransciptTestRunner.md create mode 100644 tests/functional/specs/media/TestRunnerClassDiagram.png create mode 100644 tests/functional/specs/media/TestRunnerClassDiagram2.png create mode 100644 tests/functional/specs/media/src/TestRunnerDiagrams.vsdx create mode 100644 tests/functional/yarn.lock delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/ActionTests.cs delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/ConditionalTests.cs delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Microsoft.Bot.Components.Teams.Tests.csproj delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/ResourceExplorerFixture.cs delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/TestUtils.cs delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipant.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipantError.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipantErrorWithAdapter.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMember.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMemberError.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMemberErrorWithAdapter.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedMembers.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedMembersError.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedTeamMembers.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedTeamMembersError.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamChannels.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamChannelsError.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamDetails.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamDetailsError.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMember.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMemberError.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMemberErrorWithAdapter.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendAppBasedLinkQueryResponse.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendAppBasedLinkQueryResponseError.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEActionResponse.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEActionResponseError.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAttachmentsResponse.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAttachmentsResponseError.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponse.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponseError.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponseErrorWithAdapter.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEBotMessagePreviewResponse.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEBotMessagePreviewResponseError.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponse.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponseError.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEMessageResponse.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEMessageResponseError.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMESelectItemResponse.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMESelectItemResponseError.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMessageToTeamsChannel.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMessageToTeamsChannelError.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabAuthResponseError.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabAuthResponseErrorWithAdapter.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabCardResponse.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabCardResponseError.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleCardResponse.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleCardResponseError.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleMessageResponse.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleUrlResponse.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleUrlResponseError.test.dialog delete mode 100644 tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ConditionalTests/ConditionalsTests_OnTeamsActivityTypes.test.dialog delete mode 100644 tests/skills/common/NuGet.Config rename tests/{ => unit}/Microsoft.Bot.Components.Tests.sln (94%) rename tests/{ => unit}/skills/calendar/AvailabilityTests.cs (100%) rename tests/{ => unit}/skills/calendar/CalendarSkillTestBase.cs (100%) rename tests/{ => unit}/skills/calendar/CreateEventTests.cs (100%) rename tests/{ => unit}/skills/calendar/CustomActionTests.cs (100%) rename tests/{ => unit}/skills/calendar/GetEventTests.cs (100%) rename tests/{ => unit}/skills/calendar/Microsoft.Bot.Dialogs.Tests.Skills.Calendar.csproj (91%) rename tests/{packages/Microsoft.Bot.Components.Teams.Tests => unit/skills/calendar}/NuGet.Config (100%) rename tests/{ => unit}/skills/calendar/RespondToEventTests.cs (100%) rename tests/{ => unit}/skills/calendar/TestAssets/AvailabilityTests/GetAvailabilityBreaks.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/AvailabilityTests/GetAvailabilityFirst.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/AvailabilityTests/GetAvailabilityLast.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/findMeetingTimes.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getContact.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getEvent.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getEvents.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getPeople.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getProfile.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getWorkingHours.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/AvailabilityTests/UserTokenMock/nomagiccode.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/AvailabilityTests/cachedResponses/Calendar_en_us_lu/1322656655.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/AvailabilityTests/cachedResponses/Calendar_en_us_lu/565125802.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/AvailabilityTests/cachedResponses/Calendar_en_us_lu/686230913.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/CreateEvent.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_multiple.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setAttendeeAdd.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setAttendeeRemove.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setDateTime.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setDescription.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setDuration.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setLocation.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setOnlineMeetingAdd.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setOnlineMeetingRemove.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setTitle.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_skip.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/CreateEvent_noEntities.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_contact.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_datetime.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_location.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_title.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_title_contact.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_title_contact_datetime.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/createEvent.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/findMeetingTimes.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/getContact.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/getPeople.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/getProfile.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/getWorkingHours.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/UserTokenMock/nomagiccode.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/1039170905.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/1082755164.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/1127709374.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/2937641126.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/3617381462.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/3672480022.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/3897990621.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/4011733239.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/4107782572.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/503597261.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/565993014.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/641530942.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1039170905.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1134332707.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1413756758.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1556687899.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1695466276.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1847842841.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1869746525.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2540704622.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2542755548.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2553583282.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2564825304.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2603715459.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2937641126.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3081695755.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3430243042.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3665878675.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3672480022.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3886812449.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/428143476.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/1392353970.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/1484328397.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/1542622736.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/4085864143.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/430240736.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CreateEventTests/cachedResponses/ListDialog_en_us_lu/3723765839.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_AcceptEvent.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_CreateEvent.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_DeclineEvent.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_DeleteEvent.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_FindMeetingTimes.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_GetContacts.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_GetEvents.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_GetProfile.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_GetWorkingHours.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_SettingsTest.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_TentativelyAcceptEvent.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_UpdateEvent.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/acceptEvent.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/createEvent.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/declineEvent.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/deleteEvent.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/findMeetingTimes.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getContact.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getEvents.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getPeople.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getProfile.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getWorkingHours.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/tentativelyAcceptEvent.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/updateEvent.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/CustomActionTests/UserTokenMock/nomagiccode.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/GetEventAttendees.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/GetEventDateTime.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/GetEventLocation.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/GetEvents_multipleResults.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/GetEvents_noResults.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/GetEvents_singleResult.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/GetEvents_withEntity_contact.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/GetEvents_withEntity_datetime.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getContact.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEvent.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEvents.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEventsNotOrganizer.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEventsOnlineMeeting.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEvents_noResults.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getPeople.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getProfile.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getWorkingHours.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/UserTokenMock/nomagiccode.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/1526748840.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/1662191128.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/1938006685.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/2117736667.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/3989091574.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/904626561.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/GetEventTests/cachedResponses/ListDialog_en_us_lu/3723765839.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/RespondToEventTests/CancelEvent_asAttendee.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/RespondToEventTests/CancelEvent_asOrganizer.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/acceptEvent.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/declineEvent.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/deleteEvent.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getContact.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getEvent.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getEvents.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getEventsNotOrganizer.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getPeople.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getProfile.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getWorkingHours.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/tentativelyAcceptEvent.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/RespondToEventTests/RespondToEvent_Accept.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/RespondToEventTests/RespondToEvent_Decline.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/RespondToEventTests/RespondToEvent_TentativelyAccept.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/RespondToEventTests/UserTokenMock/nomagiccode.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/RespondToEventTests/cachedResponses/Calendar_en_us_lu/1290152274.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/RespondToEventTests/cachedResponses/Calendar_en_us_lu/2454555038.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/RespondToEventTests/cachedResponses/Calendar_en_us_lu/2818238401.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/RespondToEventTests/cachedResponses/Calendar_en_us_lu/3653033598.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getContact.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getEvent.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getEvents.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getEventsNotOrganizer.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getEventsOnlineMeeting.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getPeople.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getProfile.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getWorkingHours.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/updateEvent.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_attendees.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_datetime.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_description.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_duration.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_location.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_onlineMeeting.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_title.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setAttendeesAdd.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setAttendeesRemove.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setDateTime.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setDescription.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setDuration.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setLocation.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setOnlineMeeting.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setTitle.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setAttendeesAdd.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setAttendeesRemove.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setDateTime.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setDescription.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setDuration.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setLocation.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setOnlineMeeting.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setTitle.test.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/UserTokenMock/nomagiccode.mock.dialog (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/1145996603.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/1544134286.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/1664405117.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2122886558.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2359587634.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2392124786.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/274526507.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2860054276.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2937641126.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/4148905213.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/463684775.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/493543230.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/717479241.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/GetContactsDialog_en_us_lu/1392353970.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/GetContactsDialog_en_us_lu/4085864143.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/GetEventsDialog_en_us_lu/2993157681.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/ListDialog_en_us_lu/3723765839.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1145996603.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1392353970.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1490330477.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1544134286.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1639066482.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1704462493.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2250432073.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2338442885.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2359587634.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2395873221.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2464902023.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2564825304.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2903480491.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2937641126.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3216421296.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3255472636.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3386169890.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3558312640.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3857112431.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/4278021066.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/428143476.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/457420302.json (100%) rename tests/{ => unit}/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/766092102.json (100%) rename tests/{ => unit}/skills/calendar/UpdateEventTests.cs (100%) rename tests/{ => unit}/skills/calendar/app.schema (100%) rename tests/{ => unit}/skills/calendar/testsettings.json (100%) rename tests/{ => unit}/skills/common/GraphComponentRegistration.cs (100%) rename tests/{ => unit}/skills/common/Microsoft.Bot.Dialogs.Tests.Common.csproj (90%) rename tests/{skills/calendar => unit/skills/common}/NuGet.Config (100%) rename tests/{ => unit}/skills/common/PbxDialogTestBase.cs (100%) rename tests/{ => unit}/skills/people/GetCollaboratorsTests.cs (100%) rename tests/{ => unit}/skills/people/GetDirectReportsTests.cs (100%) rename tests/{ => unit}/skills/people/GetManagerTests.cs (100%) rename tests/{ => unit}/skills/people/GetPeersTests.cs (100%) rename tests/{ => unit}/skills/people/GetProfileTests.cs (100%) rename tests/{ => unit}/skills/people/Microsoft.Bot.Dialogs.Tests.Skills.People.csproj (86%) rename tests/{ => unit}/skills/people/TestAssets/GetCollaboratorsTests/GetCollaborators_CollaboratorNotFound.test.dialog (100%) rename tests/{ => unit}/skills/people/TestAssets/GetCollaboratorsTests/GetCollaborators_MoreThanOneFound.test.dialog (100%) rename tests/{ => unit}/skills/people/TestAssets/GetCollaboratorsTests/GetCollaborators_OneFound.test.dialog (100%) rename tests/{ => unit}/skills/people/TestAssets/GetCollaboratorsTests/UserTokenMock/nomagiccode.mock.dialog (100%) rename tests/{ => unit}/skills/people/TestAssets/GetCollaboratorsTests/cachedResponses/ListDialog_en_us_lu/1176839528.json (100%) rename tests/{ => unit}/skills/people/TestAssets/GetCollaboratorsTests/cachedResponses/ListDialog_en_us_lu/3723765839.json (100%) rename tests/{ => unit}/skills/people/TestAssets/GetCollaboratorsTests/cachedResponses/people_en_us_lu/1916631299.json (100%) rename tests/{ => unit}/skills/people/TestAssets/GetDirectReportsTests/GetDirectReports_DirectReportsNotFound.test.dialog (100%) rename tests/{ => unit}/skills/people/TestAssets/GetDirectReportsTests/GetDirectReports_MoreThanOneFound.test.dialog (100%) rename tests/{ => unit}/skills/people/TestAssets/GetDirectReportsTests/GetDirectReports_OneFound.test.dialog (100%) rename tests/{ => unit}/skills/people/TestAssets/GetDirectReportsTests/GetDirectReports_UserNotFound.test.dialog (100%) rename tests/{ => unit}/skills/people/TestAssets/GetDirectReportsTests/UserTokenMock/nomagiccode.mock.dialog (100%) rename tests/{ => unit}/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/ListDialog_en_us_lu/1221289675.json (100%) rename tests/{ => unit}/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/ListDialog_en_us_lu/3723765839.json (100%) rename tests/{ => unit}/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/people_en_us_lu/1541877400.json (100%) rename tests/{ => unit}/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/people_en_us_lu/1968135638.json (100%) rename tests/{ => unit}/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/people_en_us_lu/2599657509.json (100%) rename tests/{ => unit}/skills/people/TestAssets/GetManagerTests/GetManager_HappyPath.test.dialog (100%) rename tests/{ => unit}/skills/people/TestAssets/GetManagerTests/GetManager_NoManager.test.dialog (100%) rename tests/{ => unit}/skills/people/TestAssets/GetManagerTests/GetManager_UserNotFound.test.dialog (100%) rename tests/{ => unit}/skills/people/TestAssets/GetManagerTests/UserTokenMock/nomagiccode.mock.dialog (100%) rename tests/{ => unit}/skills/people/TestAssets/GetManagerTests/cachedResponses/people_en_us_lu/1541877400.json (100%) rename tests/{ => unit}/skills/people/TestAssets/GetManagerTests/cachedResponses/people_en_us_lu/2918515466.json (100%) rename tests/{ => unit}/skills/people/TestAssets/GetManagerTests/cachedResponses/people_en_us_lu/780636099.json (100%) rename tests/{ => unit}/skills/people/TestAssets/GetPeersTests/GetPeers_MoreThanOneFound.test.dialog (100%) rename tests/{ => unit}/skills/people/TestAssets/GetPeersTests/GetPeers_OneFound.test.dialog (100%) rename tests/{ => unit}/skills/people/TestAssets/GetPeersTests/GetPeers_PeersNotFound.test.dialog (100%) rename tests/{ => unit}/skills/people/TestAssets/GetPeersTests/GetPeers_UserNotFound.test.dialog (100%) rename tests/{ => unit}/skills/people/TestAssets/GetPeersTests/UserTokenMock/nomagiccode.mock.dialog (100%) rename tests/{ => unit}/skills/people/TestAssets/GetPeersTests/cachedResponses/ListDialog_en_us_lu/1221289675.json (100%) rename tests/{ => unit}/skills/people/TestAssets/GetPeersTests/cachedResponses/ListDialog_en_us_lu/3723765839.json (100%) rename tests/{ => unit}/skills/people/TestAssets/GetPeersTests/cachedResponses/people_en_us_lu/1175234241.json (100%) rename tests/{ => unit}/skills/people/TestAssets/GetPeersTests/cachedResponses/people_en_us_lu/2875849222.json (100%) rename tests/{ => unit}/skills/people/TestAssets/GetPeersTests/cachedResponses/people_en_us_lu/3817055125.json (100%) rename tests/{ => unit}/skills/people/TestAssets/GetProfileTests/GetProfile_HappyPath.test.dialog (100%) rename tests/{ => unit}/skills/people/TestAssets/GetProfileTests/GetProfile_HappyPath_MultipleUsers.test.dialog (100%) rename tests/{ => unit}/skills/people/TestAssets/GetProfileTests/GetProfile_UserNotFound.test.dialog (100%) rename tests/{ => unit}/skills/people/TestAssets/GetProfileTests/UserTokenMock/nomagiccode.mock.dialog (100%) rename tests/{ => unit}/skills/people/TestAssets/GetProfileTests/cachedResponses/ListDialog_en_us_lu/3914016862.json (100%) rename tests/{ => unit}/skills/people/TestAssets/GetProfileTests/cachedResponses/people_en_us_lu/1667363801.json (100%) rename tests/{ => unit}/skills/people/TestAssets/GetProfileTests/cachedResponses/people_en_us_lu/2122046538.json (100%) rename tests/{ => unit}/skills/people/TestAssets/GetProfileTests/cachedResponses/people_en_us_lu/2126032743.json (100%) rename tests/{ => unit}/skills/people/WhoSkillTestBase.cs (100%) rename tests/{ => unit}/skills/people/app.schema (100%) rename tests/{ => unit}/skills/people/testsettings.json (100%) diff --git a/build/yaml/templates/dotnet-build-test-steps.yml b/build/yaml/templates/dotnet-build-test-steps.yml index 679bc36bc0..cf6901e5b2 100644 --- a/build/yaml/templates/dotnet-build-test-steps.yml +++ b/build/yaml/templates/dotnet-build-test-steps.yml @@ -18,5 +18,5 @@ steps: displayName: 'Run `dotnet test`' inputs: command: test - projects: 'tests\**\*.csproj' + projects: 'tests\unit\**\*.csproj' arguments: '--configuration $(BuildConfiguration)' diff --git a/tests/functional/.editorconfig b/tests/functional/.editorconfig new file mode 100644 index 0000000000..6e13120105 --- /dev/null +++ b/tests/functional/.editorconfig @@ -0,0 +1,162 @@ +# EditorConfig is awesome:http://EditorConfig.org + +############################### +# Core EditorConfig Options # +############################### +root = true + +# All files +[*] +indent_style = space +# (Please don't specify an indent_size here; that has too many unintended consequences.) + +# Xml project files +[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}] +indent_size = 2 + +# Xml config files +[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}] +indent_size = 2 + +# JSON files +[*.json] +indent_size = 2 + +# Schema files +[*.{schema,uischema}] +indent_size = 4 + +# Code files +[*.{cs,csx,vb,vbx}] +indent_size = 4 +insert_final_newline = true +charset = utf-8-bom + +############################### +# .NET Coding Conventions # +############################### +[*.{cs,vb}] +# Organize usings +dotnet_sort_system_directives_first = true +dotnet_separate_import_directive_groups = false + +# this. preferences +dotnet_style_qualification_for_field = false:suggestion +dotnet_style_qualification_for_property = false:suggestion +dotnet_style_qualification_for_method = false:suggestion +dotnet_style_qualification_for_event = false:suggestion + +# Language keywords vs BCL types preferences +dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion +dotnet_style_predefined_type_for_member_access = true:suggestion + +# Parentheses preferences +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent +# Modifier preferences +dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion +dotnet_style_readonly_field = true:suggestion + +# Expression-level preferences +dotnet_style_object_initializer = true:suggestion +dotnet_style_collection_initializer = true:suggestion +dotnet_style_explicit_tuple_names = true:suggestion +dotnet_style_null_propagation = true:suggestion +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:none +dotnet_prefer_inferred_tuple_names = true:suggestion +dotnet_prefer_inferred_anonymous_type_member_names = true:suggestion +dotnet_style_prefer_auto_properties = true:suggestion +dotnet_style_prefer_conditional_expression_over_assignment = true:silent +dotnet_style_prefer_conditional_expression_over_return = true:silent + +############################### +# Naming Conventions # +############################### + +# Style Definitions +dotnet_naming_style.pascal_case_style.capitalization = pascal_case + +# Use PascalCase for constant fields +dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields +dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style +dotnet_naming_symbols.constant_fields.applicable_kinds = field +dotnet_naming_symbols.constant_fields.applicable_accessibilities = * +dotnet_naming_symbols.constant_fields.required_modifiers = const + +############################### +# C# Code Style Rules # +############################### +[*.cs] +# var preferences +csharp_style_var_for_built_in_types = true:suggestion +csharp_style_var_when_type_is_apparent = true:suggestion +csharp_style_var_elsewhere = true:suggestion + +# Expression-bodied members +csharp_style_expression_bodied_methods = false:none +csharp_style_expression_bodied_constructors = false:none +csharp_style_expression_bodied_operators = true:suggestion +csharp_style_expression_bodied_properties = true:suggestion +csharp_style_expression_bodied_indexers = true:suggestion +csharp_style_expression_bodied_accessors = true:suggestion + +# Pattern-matching preferences +csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion +csharp_style_pattern_matching_over_as_with_null_check = true:suggestion + +# Null-checking preferences +csharp_style_throw_expression = true:suggestion +csharp_style_conditional_delegate_call = true:suggestion + +# Modifier preferences +csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion + +# Expression-level preferences +csharp_prefer_braces = true:suggestion +csharp_style_deconstructed_variable_declaration = true:suggestion +csharp_prefer_simple_default_expression = true:suggestion +csharp_style_pattern_local_over_anonymous_function = true:suggestion +csharp_style_inlined_variable_declaration = true:suggestion + +############################### +# C# Formatting Rules # +############################### +# New line preferences +csharp_new_line_before_open_brace = all +csharp_new_line_before_else = true +csharp_new_line_before_catch = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_between_query_expression_clauses = true + +# Indentation preferences +csharp_indent_case_contents = true +csharp_indent_switch_labels = true +csharp_indent_labels = flush_left + +# Space preferences +csharp_space_after_cast = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_parentheses = false +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_around_binary_operators = before_and_after +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_after_comma = true +csharp_space_after_dot = false + +# Wrapping preferences +csharp_preserve_single_line_statements = true +csharp_preserve_single_line_blocks = true + +# CS0618: Type or member is obsolete +dotnet_diagnostic.CS0618.severity = none diff --git a/tests/functional/.gitignore b/tests/functional/.gitignore new file mode 100644 index 0000000000..70b79471d0 --- /dev/null +++ b/tests/functional/.gitignore @@ -0,0 +1,377 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj +PublishProfiles/ +**/Properties/ServiceDependencies/ +**/.config + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +/**/package-lock.json + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Python virtual env +venv/ +virtualenv/ + +# Local appsettings +appsettings.Development.json + +# VS code settings +.vscode/ + +# PyCharm settings +.idea/ + +# Ignore correct yarn files (no zero install support) +.yarn/* +!.yarn/patches +!.yarn/releases +!.yarn/plugins +!.yarn/sdks +!.yarn/versions +.pnp.* diff --git a/tests/functional/.yarn/releases/yarn-berry.cjs b/tests/functional/.yarn/releases/yarn-berry.cjs new file mode 100644 index 0000000000..65ec5dde19 --- /dev/null +++ b/tests/functional/.yarn/releases/yarn-berry.cjs @@ -0,0 +1,55 @@ +#!/usr/bin/env node +module.exports=(()=>{var e={25545:e=>{function t(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}t.keys=()=>[],t.resolve=t,t.id=25545,e.exports=t},44692:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>g});var A=r(54143);const n={optional:!0},o=[["@samverschueren/stream-to-observable@<0.3.1",{peerDependenciesMeta:{rxjs:n,zenObservable:n}}],["any-observable@<0.5.1",{peerDependenciesMeta:{rxjs:n,zenObservable:n}}],["@pm2/agent@<1.0.4",{dependencies:{debug:"*"}}],["debug@<4.2.0",{peerDependenciesMeta:{"supports-color":n}}],["got@<11",{dependencies:{"@types/responselike":"^1.0.0","@types/keyv":"^3.1.1"}}],["cacheable-lookup@<4.1.2",{dependencies:{"@types/keyv":"^3.1.1"}}],["http-link-dataloader@*",{peerDependencies:{graphql:"^0.13.1 || ^14.0.0"}}],["typescript-language-server@*",{dependencies:{"vscode-jsonrpc":"^5.0.1","vscode-languageserver-protocol":"^3.15.0"}}],["postcss-syntax@*",{peerDependenciesMeta:{"postcss-html":n,"postcss-jsx":n,"postcss-less":n,"postcss-markdown":n,"postcss-scss":n}}],["jss-plugin-rule-value-function@<=10.1.1",{dependencies:{"tiny-warning":"^1.0.2"}}],["ink-select-input@<4.1.0",{peerDependencies:{react:"^16.8.2"}}],["promise-inflight@*",{peerDependenciesMeta:{bluebird:n}}],["reactcss@*",{peerDependencies:{react:"*"}}],["react-color@<=2.19.0",{peerDependencies:{react:"*"}}],["gatsby-plugin-i18n@*",{dependencies:{ramda:"^0.24.1"}}],["useragent@^2.0.0",{dependencies:{request:"^2.88.0",yamlparser:"0.0.x",semver:"5.5.x"}}],["@apollographql/apollo-tools@*",{peerDependencies:{graphql:"^14.2.1 || ^15.0.0"}}],["material-table@^2.0.0",{dependencies:{"@babel/runtime":"^7.11.2"}}],["@babel/parser@*",{dependencies:{"@babel/types":"^7.8.3"}}],["fork-ts-checker-webpack-plugin@*",{peerDependencies:{eslint:">= 6",typescript:">= 2.7",webpack:">= 4"},peerDependenciesMeta:{eslint:n}}],["rc-animate@*",{peerDependencies:{react:"^15.0.0 || ^16.0.0","react-dom":"^15.0.0 || ^16.0.0"}}],["react-bootstrap-table2-paginator@*",{dependencies:{classnames:"^2.2.6"}}],["react-draggable@<=4.4.3",{peerDependencies:{react:">= 16.3.0","react-dom":">= 16.3.0"}}],["apollo-upload-client@<14",{peerDependencies:{graphql:"14 - 15"}}],["react-instantsearch-core@<=6.7.0",{peerDependencies:{algoliasearch:">= 3.1 < 5"}}],["react-instantsearch-dom@<=6.7.0",{dependencies:{"react-fast-compare":"^3.0.0"}}],["ws@<7.2.1",{peerDependencies:{bufferutil:"^4.0.1","utf-8-validate":"^5.0.2"},peerDependenciesMeta:{bufferutil:n,"utf-8-validate":n}}],["react-portal@*",{peerDependencies:{"react-dom":"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0"}}]];let i,s,a;const c=new Map([[A.makeIdent(null,"fsevents").identHash,function(){return void 0===i&&(i=r(78761).brotliDecompressSync(Buffer.from("G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==","base64")).toString()),i}],[A.makeIdent(null,"resolve").identHash,function(){return void 0===s&&(s=r(78761).brotliDecompressSync(Buffer.from("G1QTIIzURnVBnGa0VPvr81orV8AFIqdU0sqrdcVgCdukgAZwi8a50gLk9+19Z2NcUILjmzXkzt4dzm5a6Yoys+/9qnKiaApXukOiuoyUaMcynG4X7X4vBaIE/PL30gwG6HSGJkLxb9PnLjfMr+748n7sM6C/NycK6ber/bX1reVVxta6W/31tZIhfrS+upoE/TPRHj0S/l0T59gTGdtKOp1OmMOJt9rhfucDdLJ2tgyfnO+u4YMkQAcYq/nebTcDmbXhqhgo6iQA4M3m4xya4Cos3p6klmkmQT+S4DLDZfwfMF+sUCx36KleOtaHLQfEIz0Bmncj/Ngi3lqOl4391EWEfIss6gVp3oDUGwsSZJKeOVONJWZg+Mue3KUMV3aMqYJ+7b2219D+GFDi8EV5y/Y+5J+He0oNjKAgqLsJziEsS9uIaCu3BHBKSXxNKKa2ShbfglcWoiiVT2kfGI7Gw+YJ/Sqy1H6wdFWtyVUQIa82JPwbeV25YKLzc5ZIFM6GCPSA+J9dTvJbs5LuuKnLP3f09gCu2jxqsAv6CA+ZySVaUJr2d3A70BC/uBCKr2OVrWgC3fSwb7NlfkgSEEiejrMGvhya9lMbVI6lMsFKN330A1/FOaefHQdNGLEZ3IwFF87H3xVlM0Xxsmbi/7A60oymRcIe0tH90alG6ez/yA7jwYotxuHWZdR+1HlMcddGHAV6QD/gXYPV0wnNv47I+5FGevzZFMqWSO8GU4nQ3FjsdgdJcD+c1rvudERKuLyd7bxiBpnsMDHsvPP4nXdXkld/gUNks3GAE1Otmb90bavDyiw4Mrx496Iw+jbLTgsCZGZXSZ9vM55C7KGe4HyJAKXEk0iT/Cj/PFwLJBN7pcP7ZFfYtUApGTWKkYhI9IE2zt/5ByH72wdvH+88b71zuv/FMCX3w6x5nzhY44Cg5IYv9LeKwHuHIWgPbfgrAcUxOlKkPRdQOIDF/aBuLPJAXD+TgxCNXx4jQxeR/qlBWVikFPfEI4rXMUc4kZ2w9KbPKYRvFUag0dVlVoyUP4zfidbTXAdZF88jAckl+NHjLFCNdX7EQ1PbLSOl+P+MqgwEOCi6dxgWZ7NCwJBjWKpk1LaxwKrhZ4aEC/0lMPJYe5S8xAakDcmA2kSS86GjEMTrv3VEu0S0YGZcxToMV524G4WAc4CReePePdipvs4aXRL5p+aeN96yfMGjsiTbQNxgbdRKc+keQ+NxYIEm1mBtEO29WrcbrqNbQRMR66KpGG4aG0NtmRyZ2JhUvu0paCklRlID8PT3gSiwZrqr4XZXoBBzBMrveWCuOg7iTgGDXDdbGi8XHkQf5KXDGFUxWueu5wkSa6gMWY1599g2piQjwBKIAPt4N5cOZdFBidz2feGwEAy1j1UydGxDSCCUsh314cUIIRV/dWCheceubL2gU8CibewmP7UxmN5kN4I7zfQhPxkP0NCcei8GXQpw4c3krEzW7PR2hgi/hqqqR58UJ/ZVfWxfcH5ZKMo4itkmPK0FCGxzzIRP20lK/gz28Y03sY233KvSVWUKl9rcbX6MbHjpUG8MvNlw72p6FwTejv92zgpnCxVJnIHHZhCBxNcHF5RTveRp513hUtTHHq4BIndlytZT5xoTSYfHKqKNr4o9kcGINIz6tZSKRdtbON3Ydr9cgqxHIeisMNIsvPg/IFMZuBbSqqDLeSO5dak1cGr76FtH2PC7hs0S0Oq3GsmF1Ga4YABAMGcdPAWzTk26B7cKV91I2b0V/GYvnsEQ1YGntRqi5EQqTlgZszbV/32GuZtUF49JOA/r4jAdwUOsbPo6mNoBlJPYjM5axrZaWQf33bFsLWqiyvvDOM4x0Ng802T7cuP2a3q98GWq6yiq6q3M77hcZlOUnmryctRYmI4Hb2F5XixFohkBmySCjU+M7/WQVE5YAtnlxiUJDhFN0y1tNeMWY9E0MfZi2rQ4eC72WXjsAA==","base64")).toString()),s}],[A.makeIdent(null,"typescript").identHash,function(){return void 0===a&&(a=r(78761).brotliDecompressSync(Buffer.from("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","base64")).toString()),a}]]),g={hooks:{registerPackageExtensions:async(e,t)=>{for(const[e,r]of o)t(A.parseDescriptor(e,!0),r)},getBuiltinPatch:async(e,t)=>{var r;if(!t.startsWith("compat/"))return;const n=A.parseIdent(t.slice("compat/".length)),o=null===(r=c.get(n.identHash))||void 0===r?void 0:r();return void 0!==o?o:null},reduceDependency:async(e,t,r,n)=>void 0===c.get(e.identHash)?e:A.makeDescriptor(e,A.makeRange({protocol:"patch:",source:A.stringifyDescriptor(e),selector:`builtin`,params:null}))}}},10189:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>p});var A=r(36370),n=r(25413),o=r(54143),i=r(40822);class s extends n.BaseCommand{constructor(){super(...arguments),this.quiet=!1,this.args=[]}async execute(){const e=[];this.pkg&&e.push("--package",this.pkg),this.quiet&&e.push("--quiet");const t=o.parseIdent(this.command),r=o.makeIdent(t.scope,"create-"+t.name);return this.cli.run(["dlx",...e,o.stringifyIdent(r),...this.args])}}(0,A.gn)([i.Command.String("-p,--package",{description:"The package to run the provided command from"})],s.prototype,"pkg",void 0),(0,A.gn)([i.Command.Boolean("-q,--quiet",{description:"Only report critical errors instead of printing the full install logs"})],s.prototype,"quiet",void 0),(0,A.gn)([i.Command.String()],s.prototype,"command",void 0),(0,A.gn)([i.Command.Proxy()],s.prototype,"args",void 0),(0,A.gn)([i.Command.Path("create")],s.prototype,"execute",null);var a=r(39922),c=r(85824),g=r(63088),l=r(43896),u=r(46009);class h extends n.BaseCommand{constructor(){super(...arguments),this.quiet=!1,this.args=[]}async execute(){return a.VK.telemetry=null,await l.xfs.mktempPromise(async e=>{const t=u.y1.join(e,"dlx-"+process.pid);await l.xfs.mkdirPromise(t),await l.xfs.writeFilePromise(u.y1.join(t,"package.json"),"{}\n"),await l.xfs.writeFilePromise(u.y1.join(t,"yarn.lock"),"");const r=u.y1.join(t,".yarnrc.yml"),A=await a.VK.findProjectCwd(this.context.cwd,u.QS.lockfile),i=null!==A?u.y1.join(A,".yarnrc.yml"):null;null!==i&&l.xfs.existsSync(i)?(await l.xfs.copyFilePromise(i,r),await a.VK.updateConfiguration(t,e=>{const t={...e,enableGlobalCache:!0,enableTelemetry:!1};return Array.isArray(e.plugins)&&(t.plugins=e.plugins.map(e=>{const t="string"==typeof e?e:e.path,r=u.cS.isAbsolute(t)?t:u.cS.resolve(u.cS.fromPortablePath(A),t);return"string"==typeof e?r:{path:r,spec:e.spec}})),t})):await l.xfs.writeFilePromise(r,"enableGlobalCache: true\nenableTelemetry: false\n");const s=void 0!==this.pkg?[this.pkg]:[this.command],h=o.parseDescriptor(this.command).name,p=await this.cli.run(["add","--",...s],{cwd:t,quiet:this.quiet});if(0!==p)return p;this.quiet||this.context.stdout.write("\n");const d=await a.VK.find(t,this.context.plugins),{project:C,workspace:f}=await c.I.find(d,t);if(null===f)throw new n.WorkspaceRequiredError(C.cwd,t);return await C.restoreInstallState(),await g.executeWorkspaceAccessibleBinary(f,h,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}}h.usage=i.Command.Usage({description:"run a package in a temporary environment",details:"\n This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\n\n By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\n\n Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\n ",examples:[["Use create-react-app to create a new React app","yarn dlx create-react-app ./my-app"]]}),(0,A.gn)([i.Command.String("-p,--package",{description:"The package to run the provided command from"})],h.prototype,"pkg",void 0),(0,A.gn)([i.Command.Boolean("-q,--quiet",{description:"Only report critical errors instead of printing the full install logs"})],h.prototype,"quiet",void 0),(0,A.gn)([i.Command.String()],h.prototype,"command",void 0),(0,A.gn)([i.Command.Proxy()],h.prototype,"args",void 0),(0,A.gn)([i.Command.Path("dlx")],h.prototype,"execute",null);const p={commands:[s,h]}},34777:(e,t,r)=>{"use strict";r.r(t),r.d(t,{dedupeUtils:()=>A,default:()=>We,suggestUtils:()=>A});var A={};r.r(A),r.d(A,{Modifier:()=>o,Strategy:()=>i,Target:()=>n,applyModifier:()=>S,extractDescriptorFromPath:()=>N,extractRangeModifier:()=>v,fetchDescriptorFrom:()=>K,findProjectDescriptors:()=>k,getModifier:()=>D,getSuggestedDescriptors:()=>F});var n,o,i,s=r(39922),a=r(36370),c=r(25413),g=r(28148),l=r(62152),u=r(92659),h=r(85824),p=r(15815),d=r(54143),C=r(40822),f=r(61899),I=r(33720),E=r(46611),B=r(71643),y=r(43896),m=r(46009),w=r(53887),Q=r.n(w);function D(e,t){return e.exact?o.EXACT:e.caret?o.CARET:e.tilde?o.TILDE:t.configuration.get("defaultSemverRangePrefix")}!function(e){e.REGULAR="dependencies",e.DEVELOPMENT="devDependencies",e.PEER="peerDependencies"}(n||(n={})),function(e){e.CARET="^",e.TILDE="~",e.EXACT=""}(o||(o={})),function(e){e.KEEP="keep",e.REUSE="reuse",e.PROJECT="project",e.LATEST="latest",e.CACHE="cache"}(i||(i={}));const b=/^([\^~]?)[0-9]+(?:\.[0-9]+){0,2}(?:-\S+)?$/;function v(e,{project:t}){const r=e.match(b);return r?r[1]:t.configuration.get("defaultSemverRangePrefix")}function S(e,t){let{protocol:r,source:A,params:n,selector:o}=d.parseRange(e.range);return Q().valid(o)&&(o=`${t}${e.range}`),d.makeDescriptor(e,d.makeRange({protocol:r,source:A,params:n,selector:o}))}async function k(e,{project:t,target:r}){const A=new Map,o=e=>{let t=A.get(e.descriptorHash);return t||A.set(e.descriptorHash,t={descriptor:e,locators:[]}),t};for(const A of t.workspaces)if(r===n.PEER){const t=A.manifest.peerDependencies.get(e.identHash);void 0!==t&&o(t).locators.push(A.locator)}else{const t=A.manifest.dependencies.get(e.identHash),i=A.manifest.devDependencies.get(e.identHash);r===n.DEVELOPMENT?void 0!==i?o(i).locators.push(A.locator):void 0!==t&&o(t).locators.push(A.locator):void 0!==t?o(t).locators.push(A.locator):void 0!==i&&o(i).locators.push(A.locator)}return A}async function N(e,{cwd:t,workspace:r}){return await async function(e){return await y.xfs.mktempPromise(async t=>{const r=s.VK.create(t);return r.useWithSource(t,{enableMirror:!1,compressionLevel:0},t,{overwrite:!0}),await e(new g.C(t,{configuration:r,check:!1,immutable:!1}))})}(async A=>{m.y1.isAbsolute(e)||(e=m.y1.relative(r.cwd,m.y1.resolve(t,e))).match(/^\.{0,2}\//)||(e="./"+e);const{project:n}=r,o=await K(d.makeIdent(null,"archive"),e,{project:r.project,cache:A,workspace:r});if(!o)throw new Error("Assertion failed: The descriptor should have been found");const i=new I.$,s=n.configuration.makeResolver(),a=n.configuration.makeFetcher(),c={checksums:n.storedChecksums,project:n,cache:A,fetcher:a,report:i,resolver:s},g=s.bindDescriptor(o,r.anchoredLocator,c),l=d.convertDescriptorToLocator(g),u=await a.fetch(l,c),h=await E.G.find(u.prefixPath,{baseFs:u.packageFs});if(!h.name)throw new Error("Target path doesn't have a name");return d.makeDescriptor(h.name,e)})}async function F(e,{project:t,workspace:r,cache:A,target:o,modifier:s,strategies:a,maxResults:c=1/0}){if(!(c>=0))throw new Error(`Invalid maxResults (${c})`);if("unknown"!==e.range)return{suggestions:[{descriptor:e,name:"Use "+d.prettyDescriptor(t.configuration,e),reason:"(unambiguous explicit request)"}],rejections:[]};const g=null!=r&&r.manifest[o].get(e.identHash)||null,l=[],u=[],h=async e=>{try{await e()}catch(e){u.push(e)}};for(const u of a){if(l.length>=c)break;switch(u){case i.KEEP:await h(async()=>{g&&l.push({descriptor:g,name:"Keep "+d.prettyDescriptor(t.configuration,g),reason:"(no changes)"})});break;case i.REUSE:await h(async()=>{for(const{descriptor:A,locators:n}of(await k(e,{project:t,target:o})).values()){if(1===n.length&&n[0].locatorHash===r.anchoredLocator.locatorHash&&a.includes(i.KEEP))continue;let e="(originally used by "+d.prettyLocator(t.configuration,n[0]);e+=n.length>1?` and ${n.length-1} other${n.length>2?"s":""})`:")",l.push({descriptor:A,name:"Reuse "+d.prettyDescriptor(t.configuration,A),reason:e})}});break;case i.CACHE:await h(async()=>{for(const r of t.storedDescriptors.values())r.identHash===e.identHash&&l.push({descriptor:r,name:"Reuse "+d.prettyDescriptor(t.configuration,r),reason:"(already used somewhere in the lockfile)"})});break;case i.PROJECT:await h(async()=>{if(null!==r.manifest.name&&e.identHash===r.manifest.name.identHash)return;const A=t.tryWorkspaceByIdent(e);null!==A&&l.push({descriptor:A.anchoredDescriptor,name:"Attach "+d.prettyWorkspace(t.configuration,A),reason:`(local workspace at ${A.cwd})`})});break;case i.LATEST:await h(async()=>{if("unknown"!==e.range)l.push({descriptor:e,name:"Use "+d.prettyRange(t.configuration,e.range),reason:"(explicit range requested)"});else if(o===n.PEER)l.push({descriptor:d.makeDescriptor(e,"*"),name:"Use *",reason:"(catch-all peer dependency pattern)"});else if(t.configuration.get("enableNetwork")){let n=await K(e,"latest",{project:t,cache:A,workspace:r,preserveModifier:!1});n&&(n=S(n,s),l.push({descriptor:n,name:"Use "+d.prettyDescriptor(t.configuration,n),reason:"(resolved from latest)"}))}else l.push({descriptor:null,name:"Resolve from latest",reason:B.pretty(t.configuration,"(unavailable because enableNetwork is toggled off)","grey")})})}}return{suggestions:l.slice(0,c),rejections:u.slice(0,c)}}async function K(e,t,{project:r,cache:A,workspace:n,preserveModifier:o=!0}){const i=d.makeDescriptor(e,t),s=new I.$,a=r.configuration.makeFetcher(),c=r.configuration.makeResolver(),g={project:r,fetcher:a,cache:A,checksums:r.storedChecksums,report:s,skipIntegrityCheck:!0},l={...g,resolver:c,fetchOptions:g},u=c.bindDescriptor(i,n.anchoredLocator,l),h=await c.getCandidates(u,new Map,l);if(0===h.length)return null;const p=h[0];let{protocol:C,source:f,params:E,selector:B}=d.parseRange(d.convertToManifestRange(p.reference));if(C===r.configuration.get("defaultProtocol")&&(C=null),Q().valid(B)&&!1!==o){B=v("string"==typeof o?o:i.range,{project:r})+B}return d.makeDescriptor(p,d.makeRange({protocol:C,source:f,params:E,selector:B}))}class M extends c.BaseCommand{constructor(){super(...arguments),this.packages=[],this.json=!1,this.exact=!1,this.tilde=!1,this.caret=!1,this.dev=!1,this.peer=!1,this.optional=!1,this.preferDev=!1,this.interactive=null,this.cached=!1}async execute(){var e;const t=await s.VK.find(this.context.cwd,this.context.plugins),{project:r,workspace:A}=await h.I.find(t,this.context.cwd),o=await g.C.find(t);if(!A)throw new c.WorkspaceRequiredError(r.cwd,this.context.cwd);await r.restoreInstallState({restoreResolutions:!1});const a=null!==(e=this.interactive)&&void 0!==e?e:t.get("preferInteractive"),I=D(this,r),E=[...a?[i.REUSE]:[],i.PROJECT,...this.cached?[i.CACHE]:[],i.LATEST],B=a?1/0:1,y=await Promise.all(this.packages.map(async e=>{const t=e.match(/^\.{0,2}\//)?await N(e,{cwd:this.context.cwd,workspace:A}):d.parseDescriptor(e),i=function(e,t,{dev:r,peer:A,preferDev:o,optional:i}){const s=e.manifest[n.REGULAR].has(t.identHash),a=e.manifest[n.DEVELOPMENT].has(t.identHash),c=e.manifest[n.PEER].has(t.identHash);if((r||A)&&s)throw new C.UsageError(`Package "${d.prettyIdent(e.project.configuration,t)}" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!r&&!A&&c)throw new C.UsageError(`Package "${d.prettyIdent(e.project.configuration,t)}" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(i&&a)throw new C.UsageError(`Package "${d.prettyIdent(e.project.configuration,t)}" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(i&&!A&&c)throw new C.UsageError(`Package "${d.prettyIdent(e.project.configuration,t)}" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((r||o)&&i)throw new C.UsageError(`Package "${d.prettyIdent(e.project.configuration,t)}" cannot simultaneously be a dev dependency and an optional dependency`);return A?n.PEER:r||o?n.DEVELOPMENT:s?n.REGULAR:a?n.DEVELOPMENT:n.REGULAR}(A,t,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return[t,await F(t,{project:r,workspace:A,cache:o,target:i,modifier:I,strategies:E,maxResults:B}),i]})),m=await l.h.start({configuration:t,stdout:this.context.stdout,suggestInstall:!1},async e=>{for(const[A,{suggestions:n,rejections:o}]of y){if(0===n.filter(e=>null!==e.descriptor).length){const[n]=o;if(void 0===n)throw new Error("Assertion failed: Expected an error to have been set");const i=this.cli.error(n);r.configuration.get("enableNetwork")?e.reportError(u.b.CANT_SUGGEST_RESOLUTIONS,`${d.prettyDescriptor(t,A)} can't be resolved to a satisfying range:\n\n${i}`):e.reportError(u.b.CANT_SUGGEST_RESOLUTIONS,`${d.prettyDescriptor(t,A)} can't be resolved to a satisfying range (note: network resolution has been disabled):\n\n${i}`)}}});if(m.hasErrors())return m.exitCode();let w=!1;const Q=[],b=[];for(const[,{suggestions:e},t]of y){let r;const n=e.filter(e=>null!==e.descriptor),o=n[0].descriptor,i=n.every(e=>d.areDescriptorsEqual(e.descriptor,o));1===n.length||i?r=o:(w=!0,({answer:r}=await(0,f.prompt)({type:"select",name:"answer",message:"Which range do you want to use?",choices:e.map(({descriptor:e,name:t,reason:r})=>e?{name:t,hint:r,descriptor:e}:{name:t,hint:r,disabled:!0}),onCancel:()=>process.exit(130),result(e){return this.find(e,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout})));const s=A.manifest[t].get(r.identHash);void 0!==s&&s.descriptorHash===r.descriptorHash||(A.manifest[t].set(r.identHash,r),this.optional&&("dependencies"===t?A.manifest.ensureDependencyMeta({...r,range:"unknown"}).optional=!0:"peerDependencies"===t&&(A.manifest.ensurePeerDependencyMeta({...r,range:"unknown"}).optional=!0)),void 0===s?Q.push([A,t,r,E]):b.push([A,t,s,r]))}await t.triggerMultipleHooks(e=>e.afterWorkspaceDependencyAddition,Q),await t.triggerMultipleHooks(e=>e.afterWorkspaceDependencyReplacement,b),w&&this.context.stdout.write("\n");return(await p.Pk.start({configuration:t,json:this.json,stdout:this.context.stdout,includeLogs:!this.context.quiet},async e=>{await r.install({cache:o,report:e})})).exitCode()}}M.usage=C.Command.Usage({description:"add dependencies to the project",details:"\n This command adds a package to the package.json for the nearest workspace.\n\n - If it didn't exist before, the package will by default be added to the regular `dependencies` field, but this behavior can be overriden thanks to the `-D,--dev` flag (which will cause the dependency to be added to the `devDependencies` field instead) and the `-P,--peer` flag (which will do the same but for `peerDependencies`).\n\n - If the package was already listed in your dependencies, it will by default be upgraded whether it's part of your `dependencies` or `devDependencies` (it won't ever update `peerDependencies`, though).\n\n - If set, the `--prefer-dev` flag will operate as a more flexible `-D,--dev` in that it will add the package to your `devDependencies` if it isn't already listed in either `dependencies` or `devDependencies`, but it will also happily upgrade your `dependencies` if that's what you already use (whereas `-D,--dev` would throw an exception).\n\n - If set, the `-O,--optional` flag will add the package to the `optionalDependencies` field and, in combination with the `-P,--peer` flag, it will add the package as an optional peer dependency. If the package was already listed in your `dependencies`, it will be upgraded to `optionalDependencies`. If the package was already listed in your `peerDependencies`, in combination with the `-P,--peer` flag, it will be upgraded to an optional peer dependency: `\"peerDependenciesMeta\": { \"\": { \"optional\": true } }`\n\n - If the added package doesn't specify a range at all its `latest` tag will be resolved and the returned version will be used to generate a new semver range (using the `^` modifier by default unless otherwise configured via the `defaultSemverRangePrefix` configuration, or the `~` modifier if `-T,--tilde` is specified, or no modifier at all if `-E,--exact` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use `-P,--peer` the default range will be `*` and won't be resolved at all.\n\n - If the added package specifies a range (such as `^1.0.0`, `latest`, or `rc`), Yarn will add this range as-is in the resulting package.json entry (in particular, tags such as `rc` will be encoded as-is rather than being converted into a semver range).\n\n If the `--cached` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency.\n\n If the `-i,--interactive` option is used (or if the `preferInteractive` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them.\n\n For a compilation of all the supported protocols, please consult the dedicated page from our website: https://yarnpkg.com/features/protocols.\n ",examples:[["Add a regular package to the current workspace","$0 add lodash"],["Add a specific version for a package to the current workspace","$0 add lodash@1.2.3"],["Add a package from a GitHub repository (the master branch) to the current workspace using a URL","$0 add lodash@https://github.com/lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol","$0 add lodash@github:lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol (shorthand)","$0 add lodash@lodash/lodash"],["Add a package from a specific branch of a GitHub repository to the current workspace using the GitHub protocol (shorthand)","$0 add lodash-es@lodash/lodash#es"]]}),(0,a.gn)([C.Command.Rest()],M.prototype,"packages",void 0),(0,a.gn)([C.Command.Boolean("--json",{description:"Format the output as an NDJSON stream"})],M.prototype,"json",void 0),(0,a.gn)([C.Command.Boolean("-E,--exact",{description:"Don't use any semver modifier on the resolved range"})],M.prototype,"exact",void 0),(0,a.gn)([C.Command.Boolean("-T,--tilde",{description:"Use the `~` semver modifier on the resolved range"})],M.prototype,"tilde",void 0),(0,a.gn)([C.Command.Boolean("-C,--caret",{description:"Use the `^` semver modifier on the resolved range"})],M.prototype,"caret",void 0),(0,a.gn)([C.Command.Boolean("-D,--dev",{description:"Add a package as a dev dependency"})],M.prototype,"dev",void 0),(0,a.gn)([C.Command.Boolean("-P,--peer",{description:"Add a package as a peer dependency"})],M.prototype,"peer",void 0),(0,a.gn)([C.Command.Boolean("-O,--optional",{description:"Add / upgrade a package to an optional regular / peer dependency"})],M.prototype,"optional",void 0),(0,a.gn)([C.Command.Boolean("--prefer-dev",{description:"Add / upgrade a package to a dev dependency"})],M.prototype,"preferDev",void 0),(0,a.gn)([C.Command.Boolean("-i,--interactive",{description:"Reuse the specified package from other workspaces in the project"})],M.prototype,"interactive",void 0),(0,a.gn)([C.Command.Boolean("--cached",{description:"Reuse the highest version already used somewhere within the project"})],M.prototype,"cached",void 0),(0,a.gn)([C.Command.Path("add")],M.prototype,"execute",null);var R=r(63088);class x extends c.BaseCommand{constructor(){super(...arguments),this.verbose=!1,this.json=!1}async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins),{project:t,locator:r}=await h.I.find(e,this.context.cwd);if(await t.restoreInstallState(),this.name){const A=(await R.getPackageAccessibleBinaries(r,{project:t})).get(this.name);if(!A)throw new C.UsageError(`Couldn't find a binary named "${this.name}" for package "${d.prettyLocator(e,r)}"`);const[,n]=A;return this.context.stdout.write(n+"\n"),0}return(await p.Pk.start({configuration:e,json:this.json,stdout:this.context.stdout},async A=>{const n=await R.getPackageAccessibleBinaries(r,{project:t}),o=Array.from(n.keys()).reduce((e,t)=>Math.max(e,t.length),0);for(const[e,[t,r]]of n)A.reportJson({name:e,source:d.stringifyIdent(t),path:r});if(this.verbose)for(const[t,[r]]of n)A.reportInfo(null,`${t.padEnd(o," ")} ${d.prettyLocator(e,r)}`);else for(const e of n.keys())A.reportInfo(null,e)})).exitCode()}}x.usage=C.Command.Usage({description:"get the path to a binary script",details:"\n When used without arguments, this command will print the list of all the binaries available in the current workspace. Adding the `-v,--verbose` flag will cause the output to contain both the binary name and the locator of the package that provides the binary.\n\n When an argument is specified, this command will just print the path to the binary on the standard output and exit. Note that the reported path may be stored within a zip archive.\n ",examples:[["List all the available binaries","$0 bin"],["Print the path to a specific binary","$0 bin eslint"]]}),(0,a.gn)([C.Command.String({required:!1})],x.prototype,"name",void 0),(0,a.gn)([C.Command.Boolean("-v,--verbose",{description:"Print both the binary name and the locator of the package that provides the binary"})],x.prototype,"verbose",void 0),(0,a.gn)([C.Command.Boolean("--json",{description:"Format the output as an NDJSON stream"})],x.prototype,"json",void 0),(0,a.gn)([C.Command.Path("bin")],x.prototype,"execute",null);class L extends c.BaseCommand{constructor(){super(...arguments),this.mirror=!1,this.all=!1}async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins),t=await g.C.find(e);return(await p.Pk.start({configuration:e,stdout:this.context.stdout},async()=>{const e=(this.all||this.mirror)&&null!==t.mirrorCwd,r=!this.mirror;e&&await y.xfs.removePromise(t.mirrorCwd),r&&await y.xfs.removePromise(t.cwd)})).exitCode()}}L.usage=C.Command.Usage({description:"remove the shared cache files",details:"\n This command will remove all the files from the cache.\n ",examples:[["Remove all the local archives","$0 cache clean"],["Remove all the archives stored in the ~/.yarn directory","$0 cache clean --mirror"]]}),(0,a.gn)([C.Command.Boolean("--mirror",{description:"Remove the global cache files instead of the local cache files"})],L.prototype,"mirror",void 0),(0,a.gn)([C.Command.Boolean("--all",{description:"Remove both the global cache files and the local cache files of the current project"})],L.prototype,"all",void 0),(0,a.gn)([C.Command.Path("cache","clean")],L.prototype,"execute",null);var P=r(73632),O=r(44674),U=r.n(O),T=r(31669);class j extends c.BaseCommand{constructor(){super(...arguments),this.json=!1,this.unsafe=!1}async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins),t=this.name.replace(/[.[].*$/,""),r=this.name.replace(/^[^.[]*/,"");if(void 0===e.settings.get(t))throw new C.UsageError(`Couldn't find a configuration settings named "${t}"`);const A=e.getSpecial(t,{hideSecrets:!this.unsafe,getNativePaths:!0}),n=P.convertMapsToIndexableObjects(A),o=r?U()(n,r):n,i=await p.Pk.start({configuration:e,includeFooter:!1,json:this.json,stdout:this.context.stdout},async e=>{e.reportJson(o)});if(!this.json){if("string"==typeof o)return this.context.stdout.write(o+"\n"),i.exitCode();T.inspect.styles.name="cyan",this.context.stdout.write((0,T.inspect)(o,{depth:1/0,colors:e.get("enableColors"),compact:!1})+"\n")}return i.exitCode()}}j.usage=C.Command.Usage({description:"read a configuration settings",details:"\n This command will print a configuration setting.\n\n Secrets (such as tokens) will be redacted from the output by default. If this behavior isn't desired, set the `--no-redacted` to get the untransformed value.\n ",examples:[["Print a simple configuration setting","yarn config get yarnPath"],["Print a complex configuration setting","yarn config get packageExtensions"],["Print a nested field from the configuration","yarn config get 'npmScopes[\"my-company\"].npmRegistryServer'"],["Print a token from the configuration","yarn config get npmAuthToken --no-redacted"],["Print a configuration setting as JSON","yarn config get packageExtensions --json"]]}),(0,a.gn)([C.Command.String()],j.prototype,"name",void 0),(0,a.gn)([C.Command.Boolean("--json",{description:"Format the output as an NDJSON stream"})],j.prototype,"json",void 0),(0,a.gn)([C.Command.Boolean("--no-redacted",{description:"Don't redact secrets (such as tokens) from the output"})],j.prototype,"unsafe",void 0),(0,a.gn)([C.Command.Path("config","get")],j.prototype,"execute",null);var Y=r(82558),G=r.n(Y),H=r(81534),J=r.n(H);class q extends c.BaseCommand{constructor(){super(...arguments),this.json=!1,this.home=!1}async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins);if(!e.projectCwd)throw new C.UsageError("This command must be run from within a project folder");const t=this.name.replace(/[.[].*$/,""),r=this.name.replace(/^[^.[]*\.?/,"");if(void 0===e.settings.get(t))throw new C.UsageError(`Couldn't find a configuration settings named "${t}"`);const A=this.json?JSON.parse(this.value):this.value,n=this.home?e=>s.VK.updateHomeConfiguration(e):t=>s.VK.updateConfiguration(e.projectCwd,t);await n(e=>{if(r){const t=G()(e);return J()(t,this.name,A),t}return{...e,[t]:A}});const o=(await s.VK.find(this.context.cwd,this.context.plugins)).getSpecial(t,{hideSecrets:!0,getNativePaths:!0}),i=P.convertMapsToIndexableObjects(o),a=r?U()(i,r):i;return(await p.Pk.start({configuration:e,includeFooter:!1,stdout:this.context.stdout},async t=>{T.inspect.styles.name="cyan",t.reportInfo(u.b.UNNAMED,`Successfully set ${this.name} to ${(0,T.inspect)(a,{depth:1/0,colors:e.get("enableColors"),compact:!1})}`)})).exitCode()}}q.usage=C.Command.Usage({description:"change a configuration settings",details:"\n This command will set a configuration setting.\n\n When used without the `--json` flag, it can only set a simple configuration setting (a string, a number, or a boolean).\n\n When used with the `--json` flag, it can set both simple and complex configuration settings, including Arrays and Objects.\n ",examples:[["Set a simple configuration setting (a string, a number, or a boolean)","yarn config set initScope myScope"],["Set a simple configuration setting (a string, a number, or a boolean) using the `--json` flag",'yarn config set initScope --json \\"myScope\\"'],["Set a complex configuration setting (an Array) using the `--json` flag",'yarn config set unsafeHttpWhitelist --json \'["*.example.com", "example.com"]\''],["Set a complex configuration setting (an Object) using the `--json` flag",'yarn config set packageExtensions --json \'{ "@babel/parser@*": { "dependencies": { "@babel/types": "*" } } }\''],["Set a nested configuration setting",'yarn config set npmScopes.company.npmRegistryServer "https://npm.example.com"'],["Set a nested configuration setting using indexed access for non-simple keys",'yarn config set \'npmRegistries["//npm.example.com"].npmAuthToken\' "ffffffff-ffff-ffff-ffff-ffffffffffff"']]}),(0,a.gn)([C.Command.String()],q.prototype,"name",void 0),(0,a.gn)([C.Command.String()],q.prototype,"value",void 0),(0,a.gn)([C.Command.Boolean("--json",{description:"Set complex configuration settings to JSON values"})],q.prototype,"json",void 0),(0,a.gn)([C.Command.Boolean("-H,--home",{description:"Update the home configuration instead of the project configuration"})],q.prototype,"home",void 0),(0,a.gn)([C.Command.Path("config","set")],q.prototype,"execute",null);class z extends c.BaseCommand{constructor(){super(...arguments),this.verbose=!1,this.why=!1,this.json=!1}async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins,{strict:!1});return(await p.Pk.start({configuration:e,json:this.json,stdout:this.context.stdout},async t=>{if(e.invalid.size>0&&!this.json){for(const[r,A]of e.invalid)t.reportError(u.b.INVALID_CONFIGURATION_KEY,`Invalid configuration key "${r}" in ${A}`);t.reportSeparator()}if(this.json){const r=P.sortMap(e.settings.keys(),e=>e);for(const A of r){const r=e.settings.get(A),n=e.getSpecial(A,{hideSecrets:!0,getNativePaths:!0}),o=e.sources.get(A);this.verbose?t.reportJson({key:A,effective:n,source:o}):t.reportJson({key:A,effective:n,source:o,...r})}}else{const r=P.sortMap(e.settings.keys(),e=>e),A=r.reduce((e,t)=>Math.max(e,t.length),0),n={breakLength:1/0,colors:e.get("enableColors"),maxArrayLength:2};if(this.why||this.verbose){const o=r.map(t=>{const r=e.settings.get(t);if(!r)throw new Error(`Assertion failed: This settings ("${t}") should have been registered`);return[t,this.why?e.sources.get(t)||"":r.description]}),i=o.reduce((e,[,t])=>Math.max(e,t.length),0);for(const[r,s]of o)t.reportInfo(null,`${r.padEnd(A," ")} ${s.padEnd(i," ")} ${(0,T.inspect)(e.getSpecial(r,{hideSecrets:!0,getNativePaths:!0}),n)}`)}else for(const o of r)t.reportInfo(null,`${o.padEnd(A," ")} ${(0,T.inspect)(e.getSpecial(o,{hideSecrets:!0,getNativePaths:!0}),n)}`)}})).exitCode()}}z.usage=C.Command.Usage({description:"display the current configuration",details:"\n This command prints the current active configuration settings.\n ",examples:[["Print the active configuration settings","$0 config"]]}),(0,a.gn)([C.Command.Boolean("-v,--verbose",{description:"Print the setting description on top of the regular key/value information"})],z.prototype,"verbose",void 0),(0,a.gn)([C.Command.Boolean("--why",{description:"Print the reason why a setting is set a particular way"})],z.prototype,"why",void 0),(0,a.gn)([C.Command.Boolean("--json",{description:"Format the output as an NDJSON stream"})],z.prototype,"json",void 0),(0,a.gn)([C.Command.Path("config")],z.prototype,"execute",null);var W,V=r(15966),X=r(35691),_=r(2401),Z=r.n(_);!function(e){e.HIGHEST="highest"}(W||(W={}));const $=new Set(Object.values(W)),ee={highest:async(e,t,{resolver:r,fetcher:A,resolveOptions:n,fetchOptions:o})=>{const i=new Map;for(const[t,r]of e.storedResolutions){const A=e.storedDescriptors.get(t);if(void 0===A)throw new Error(`Assertion failed: The descriptor (${t}) should have been registered`);P.getSetWithDefault(i,A.identHash).add(r)}return Array.from(e.storedDescriptors.values(),async A=>{if(t.length&&!Z().isMatch(d.stringifyIdent(A),t))return null;const o=e.storedResolutions.get(A.descriptorHash);if(void 0===o)throw new Error(`Assertion failed: The resolution (${A.descriptorHash}) should have been registered`);const s=e.originalPackages.get(o);if(void 0===s)return null;if(!r.shouldPersistResolution(s,n))return null;const a=i.get(A.identHash);if(void 0===a)throw new Error(`Assertion failed: The resolutions (${A.identHash}) should have been registered`);if(1===a.size)return null;const c=[...a].map(t=>{const r=e.originalPackages.get(t);if(void 0===r)throw new Error(`Assertion failed: The package (${t}) should have been registered`);return r.reference}),g=await r.getSatisfying(A,c,n),l=null==g?void 0:g[0];if(void 0===l)return null;const u=l.locatorHash,h=e.originalPackages.get(u);if(void 0===h)throw new Error(`Assertion failed: The package (${u}) should have been registered`);return u===o?null:{descriptor:A,currentPackage:s,updatedPackage:h}})}};class te extends c.BaseCommand{constructor(){super(...arguments),this.patterns=[],this.strategy=W.HIGHEST,this.check=!1,this.json=!1}async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins),{project:t}=await h.I.find(e,this.context.cwd),r=await g.C.find(e);let A=0;const n=await p.Pk.start({configuration:e,includeFooter:!1,stdout:this.context.stdout,json:this.json},async e=>{A=await async function(e,{strategy:t,patterns:r,cache:A,report:n}){const{configuration:o}=e,i=new I.$,s=o.makeResolver(),a=o.makeFetcher(),c={cache:A,checksums:e.storedChecksums,fetcher:a,project:e,report:i,skipIntegrityCheck:!0},g={project:e,resolver:s,report:i,fetchOptions:c};return await n.startTimerPromise("Deduplication step",async()=>{const A=ee[t],i=await A(e,r,{resolver:s,resolveOptions:g,fetcher:a,fetchOptions:c}),l=X.yG.progressViaCounter(i.length);n.reportProgress(l);let h,p=0;switch(await Promise.all(i.map(t=>t.then(t=>{if(null===t)return;p++;const{descriptor:r,currentPackage:A,updatedPackage:i}=t;n.reportInfo(u.b.UNNAMED,`${d.prettyDescriptor(o,r)} can be deduped from ${d.prettyLocator(o,A)} to ${d.prettyLocator(o,i)}`),n.reportJson({descriptor:d.stringifyDescriptor(r),currentResolution:d.stringifyLocator(A),updatedResolution:d.stringifyLocator(i)}),e.storedResolutions.set(r.descriptorHash,i.locatorHash)}).finally(()=>l.tick()))),p){case 0:h="No packages";break;case 1:h="One package";break;default:h=p+" packages"}const C=B.pretty(o,t,B.Type.CODE);return n.reportInfo(u.b.UNNAMED,`${h} can be deduped using the ${C} strategy`),p})}(t,{strategy:this.strategy,patterns:this.patterns,cache:r,report:e})});if(n.hasErrors())return n.exitCode();if(this.check)return A?1:0;return(await p.Pk.start({configuration:e,stdout:this.context.stdout,json:this.json},async e=>{await t.install({cache:r,report:e})})).exitCode()}}te.schema=V.object().shape({strategy:V.string().test({name:"strategy",message:"${path} must be one of ${strategies}",params:{strategies:[...$].join(", ")},test:e=>$.has(e)})}),te.usage=C.Command.Usage({description:"deduplicate dependencies with overlapping ranges",details:"\n Duplicates are defined as descriptors with overlapping ranges being resolved and locked to different locators. They are a natural consequence of Yarn's deterministic installs, but they can sometimes pile up and unnecessarily increase the size of your project.\n\n This command dedupes dependencies in the current project using different strategies (only one is implemented at the moment):\n\n - `highest`: Reuses (where possible) the locators with the highest versions. This means that dependencies can only be upgraded, never downgraded. It's also guaranteed that it never takes more than a single pass to dedupe the entire dependency tree.\n\n **Note:** Even though it never produces a wrong dependency tree, this command should be used with caution, as it modifies the dependency tree, which can sometimes cause problems when packages don't strictly follow semver recommendations. Because of this, it is recommended to also review the changes manually.\n\n If set, the `-c,--check` flag will only report the found duplicates, without persisting the modified dependency tree. If changes are found, the command will exit with a non-zero exit code, making it suitable for CI purposes.\n\n This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n ### In-depth explanation:\n\n Yarn doesn't deduplicate dependencies by default, otherwise installs wouldn't be deterministic and the lockfile would be useless. What it actually does is that it tries to not duplicate dependencies in the first place.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@*`will cause Yarn to reuse `foo@2.3.4`, even if the latest `foo` is actually `foo@2.10.14`, thus preventing unnecessary duplication.\n\n Duplication happens when Yarn can't unlock dependencies that have already been locked inside the lockfile.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@2.10.14` will cause Yarn to install `foo@2.10.14` because the existing resolution doesn't satisfy the range `2.10.14`. This behavior can lead to (sometimes) unwanted duplication, since now the lockfile contains 2 separate resolutions for the 2 `foo` descriptors, even though they have overlapping ranges, which means that the lockfile can be simplified so that both descriptors resolve to `foo@2.10.14`.\n ",examples:[["Dedupe all packages","$0 dedupe"],["Dedupe all packages using a specific strategy","$0 dedupe --strategy highest"],["Dedupe a specific package","$0 dedupe lodash"],["Dedupe all packages with the `@babel/*` scope","$0 dedupe '@babel/*'"],["Check for duplicates (can be used as a CI step)","$0 dedupe --check"]]}),(0,a.gn)([C.Command.Rest()],te.prototype,"patterns",void 0),(0,a.gn)([C.Command.String("-s,--strategy",{description:"The strategy to use when deduping dependencies"})],te.prototype,"strategy",void 0),(0,a.gn)([C.Command.Boolean("-c,--check",{description:"Exit with exit code 1 when duplicates are found, without persisting the dependency tree"})],te.prototype,"check",void 0),(0,a.gn)([C.Command.Boolean("--json",{description:"Format the output as an NDJSON stream"})],te.prototype,"json",void 0),(0,a.gn)([C.Command.Path("dedupe")],te.prototype,"execute",null);class re extends C.Command{async execute(){const{plugins:e}=await s.VK.find(this.context.cwd,this.context.plugins),t=[];for(const r of e){const{commands:e}=r[1];if(e){const A=C.Cli.from(e).definitions();t.push([r[0],A])}}const A=this.cli.definitions(),n=r(60306)["@yarnpkg/builder"].bundles.standard;for(const e of t){const t=e[1];for(const r of t)A.find(e=>{return t=e.path,A=r.path,t.split(" ").slice(1).join()===A.split(" ").slice(1).join();var t,A}).plugin={name:e[0],isDefault:n.includes(e[0])}}this.context.stdout.write(JSON.stringify({commands:A},null,2)+"\n")}}(0,a.gn)([C.Command.Path("--clipanion=definitions")],re.prototype,"execute",null);class Ae extends C.Command{async execute(){this.context.stdout.write(this.cli.usage(null))}}(0,a.gn)([C.Command.Path("help"),C.Command.Path("--help"),C.Command.Path("-h")],Ae.prototype,"execute",null);class ne extends C.Command{constructor(){super(...arguments),this.args=[]}async execute(){if(this.leadingArgument.match(/[\\/]/)&&!d.tryParseIdent(this.leadingArgument)){const e=m.y1.resolve(this.context.cwd,m.cS.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:e})}return await this.cli.run(["run",this.leadingArgument,...this.args])}}(0,a.gn)([C.Command.String()],ne.prototype,"leadingArgument",void 0),(0,a.gn)([C.Command.Proxy()],ne.prototype,"args",void 0);var oe=r(59355);class ie extends C.Command{async execute(){this.context.stdout.write((oe.o||"")+"\n")}}(0,a.gn)([C.Command.Path("-v"),C.Command.Path("--version")],ie.prototype,"execute",null);var se=r(6220);class ae extends c.BaseCommand{constructor(){super(...arguments),this.args=[]}async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins),{project:t}=await h.I.find(e,this.context.cwd);return await y.xfs.mktempPromise(async e=>{const{code:r}=await se.pipevp(this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await R.makeScriptEnv({project:t,binFolder:e})});return r})}}ae.usage=C.Command.Usage({description:"execute a shell command",details:"\n This command simply executes a shell binary within the context of the root directory of the active workspace.\n\n It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment).\n ",examples:[["Execute a shell command","$0 exec echo Hello World"]]}),(0,a.gn)([C.Command.String()],ae.prototype,"commandName",void 0),(0,a.gn)([C.Command.Proxy()],ae.prototype,"args",void 0),(0,a.gn)([C.Command.Path("exec")],ae.prototype,"execute",null);var ce=r(36545);class ge extends c.BaseCommand{async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins),{project:t}=await h.I.find(e,this.context.cwd);if(await t.applyLightResolution(),void 0!==this.hash)return await async function(e,t,r){const{configuration:A}=t,n=t.peerRequirements.get(e);if(void 0===n)throw new Error(`No peerDependency requirements found for hash: "${e}"`);return(await p.Pk.start({configuration:A,stdout:r.stdout,includeFooter:!1},async e=>{var r,o;const i=t.storedPackages.get(n.subject);if(void 0===i)throw new Error("Assertion failed: Expected the subject package to have been registered");const s=t.storedPackages.get(n.rootRequester);if(void 0===s)throw new Error("Assertion failed: Expected the root package to have been registered");const a=null!==(r=i.dependencies.get(n.requested.identHash))&&void 0!==r?r:null,c=null!==a?t.storedResolutions.get(a.descriptorHash):null;if(void 0===c)throw new Error("Assertion failed: Expected the resolution to have been registered");const g=null!==c?t.storedPackages.get(c):null;if(void 0===g)throw new Error("Assertion failed: Expected the provided package to have been registered");const l=[...n.allRequesters.values()].map(e=>{const r=t.storedPackages.get(e);if(void 0===r)throw new Error("Assertion failed: Expected the package to be registered");const A=d.devirtualizeLocator(r),o=t.storedPackages.get(A.locatorHash);if(void 0===o)throw new Error("Assertion failed: Expected the package to be registered");const i=o.peerDependencies.get(n.requested.identHash);if(void 0===i)throw new Error("Assertion failed: Expected the peer dependency to be registered");return{pkg:r,peerDependency:i}});if(null!==g){const t=l.every(({peerDependency:e})=>ce.satisfiesWithPrereleases(g.version,e.range));e.reportInfo(u.b.UNNAMED,`${d.prettyLocator(A,i)} provides ${d.prettyLocator(A,g)} with version ${d.prettyReference(A,null!==(o=g.version)&&void 0!==o?o:"")}, which ${t?"satisfies":"doesn't satisfy"} the following requirements:`)}else e.reportInfo(u.b.UNNAMED,`${d.prettyLocator(A,i)} doesn't provide ${d.prettyIdent(A,n.requested)}, breaking the following requirements:`);e.reportSeparator();const h=B.mark(A),p=[];for(const{pkg:e,peerDependency:t}of P.sortMap(l,e=>d.stringifyLocator(e.pkg))){const r=null!==g&&ce.satisfiesWithPrereleases(g.version,t.range)?h.Check:h.Cross;p.push({stringifiedLocator:d.stringifyLocator(e),prettyLocator:d.prettyLocator(A,e),prettyRange:d.prettyRange(A,t.range),mark:r})}const C=Math.max(...p.map(({stringifiedLocator:e})=>e.length)),f=Math.max(...p.map(({prettyRange:e})=>e.length));for(const{stringifiedLocator:t,prettyLocator:r,prettyRange:A,mark:n}of P.sortMap(p,({stringifiedLocator:e})=>e))e.reportInfo(null,`${r.padEnd(C+(r.length-t.length)," ")} → ${A.padEnd(f," ")} ${n}`);p.length>1&&(e.reportSeparator(),e.reportInfo(u.b.UNNAMED,"Note: these requirements start with "+d.prettyLocator(t.configuration,s)))})).exitCode()}(this.hash,t,{stdout:this.context.stdout});return(await p.Pk.start({configuration:e,stdout:this.context.stdout,includeFooter:!1},async r=>{var A;const n=[([,e])=>d.stringifyLocator(t.storedPackages.get(e.subject)),([,e])=>d.stringifyIdent(e.requested)];for(const[o,i]of P.sortMap(t.peerRequirements,n)){const n=t.storedPackages.get(i.subject);if(void 0===n)throw new Error("Assertion failed: Expected the subject package to have been registered");const s=t.storedPackages.get(i.rootRequester);if(void 0===s)throw new Error("Assertion failed: Expected the root package to have been registered");const a=null!==(A=n.dependencies.get(i.requested.identHash))&&void 0!==A?A:null,c=B.pretty(e,o,B.Type.CODE),g=d.prettyLocator(e,n),l=d.prettyIdent(e,i.requested),u=d.prettyIdent(e,s),h=i.allRequesters.length-1,p="descendant"+(1===h?"":"s"),C=h>0?` and ${h} ${p}`:"",f=null!==a?"provides":"doesn't provide";r.reportInfo(null,`${c} → ${g} ${f} ${l} to ${u}${C}`)}})).exitCode()}}ge.schema=V.object().shape({hash:V.string().matches(/^p[0-9a-f]{5}$/)}),ge.usage=C.Command.Usage({description:"explain a set of peer requirements",details:"\n A set of peer requirements represents all peer requirements that a dependent must satisfy when providing a given peer request to a requester and its descendants.\n\n When the hash argument is specified, this command prints a detailed explanation of all requirements of the set corresponding to the hash and whether they're satisfied or not.\n\n When used without arguments, this command lists all sets of peer requirements and the corresponding hash that can be used to get detailed information about a given set.\n\n **Note:** A hash is a six-letter p-prefixed code that can be obtained from peer dependency warnings or from the list of all peer requirements (`yarn explain peer-requirements`).\n ",examples:[["Explain the corresponding set of peer requirements for a hash","$0 explain peer-requirements p1a4ed"],["List all sets of peer requirements","$0 explain peer-requirements"]]}),(0,a.gn)([C.Command.String({required:!1})],ge.prototype,"hash",void 0),(0,a.gn)([C.Command.Path("explain","peer-requirements")],ge.prototype,"execute",null);var le=r(85875);class ue extends c.BaseCommand{constructor(){super(...arguments),this.all=!1,this.recursive=!1,this.extra=[],this.cache=!1,this.dependents=!1,this.manifest=!1,this.nameOnly=!1,this.virtuals=!1,this.json=!1,this.patterns=[]}async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins),{project:t,workspace:r}=await h.I.find(e,this.context.cwd),A=await g.C.find(e);if(!r&&!this.all)throw new c.WorkspaceRequiredError(t.cwd,this.context.cwd);await t.restoreInstallState();const n=new Set(this.extra);this.cache&&n.add("cache"),this.dependents&&n.add("dependents"),this.manifest&&n.add("manifest");const o=(e,{recursive:r})=>{const A=e.anchoredLocator.locatorHash,n=new Map,o=[A];for(;o.length>0;){const e=o.shift();if(n.has(e))continue;const i=t.storedPackages.get(e);if(void 0===i)throw new Error("Assertion failed: Expected the package to be registered");if(n.set(e,i),d.isVirtualLocator(i)&&o.push(d.devirtualizeLocator(i).locatorHash),r||e===A)for(const e of i.dependencies.values()){const r=t.storedResolutions.get(e.descriptorHash);if(void 0===r)throw new Error("Assertion failed: Expected the resolution to be registered");o.push(r)}}return n.values()},i=({all:e,recursive:A})=>e&&A?t.storedPackages.values():e?(({recursive:e})=>{const r=new Map;for(const A of t.workspaces)for(const t of o(A,{recursive:e}))r.set(t.locatorHash,t);return r.values()})({recursive:A}):o(r,{recursive:A}),{selection:a,sortedLookup:l}=(({all:e,recursive:t})=>{const r=i({all:e,recursive:t}),A=this.patterns.map(e=>{const t=d.parseLocator(e),r=Z().makeRe(d.stringifyIdent(t)),A=d.isVirtualLocator(t),n=A?d.devirtualizeLocator(t):t;return e=>{const o=d.stringifyIdent(e);if(!r.test(o))return!1;if("unknown"===t.reference)return!0;const i=d.isVirtualLocator(e),s=i?d.devirtualizeLocator(e):e;return(!A||!i||t.reference===e.reference)&&n.reference===s.reference}}),n=P.sortMap([...r],e=>d.stringifyLocator(e));return{selection:n.filter(e=>0===A.length||A.some(t=>t(e))),sortedLookup:n}})({all:this.all,recursive:this.recursive});if(0===a.length)throw new C.UsageError("No package matched your request");const u=new Map;if(this.dependents)for(const e of l)for(const r of e.dependencies.values()){const A=t.storedResolutions.get(r.descriptorHash);if(void 0===A)throw new Error("Assertion failed: Expected the resolution to be registered");P.getArrayWithDefault(u,A).push(e)}const p=new Map;for(const e of l){if(!d.isVirtualLocator(e))continue;const t=d.devirtualizeLocator(e);P.getArrayWithDefault(p,t.locatorHash).push(e)}const f={},m={children:f},w=e.makeFetcher(),Q={project:t,fetcher:w,cache:A,checksums:t.storedChecksums,report:new I.$,skipIntegrityCheck:!0},D=[async(e,t,r)=>{var A,n;if(!t.has("manifest"))return;const o=await w.fetch(e,Q);let i;try{i=await E.G.find(o.prefixPath,{baseFs:o.packageFs})}finally{null===(A=o.releaseFs)||void 0===A||A.call(o)}r("Manifest",{License:B.tuple(B.Type.NO_HINT,i.license),Homepage:B.tuple(B.Type.URL,null!==(n=i.raw.homepage)&&void 0!==n?n:null)})},async(e,r,n)=>{var o;if(!r.has("cache"))return;const i=null!==(o=t.storedChecksums.get(e.locatorHash))&&void 0!==o?o:null,s=A.getLocatorPath(e,i);let a;if(null!==s)try{a=y.xfs.statSync(s)}catch(e){}const c=void 0!==a?[a.size,B.Type.SIZE]:void 0;n("Cache",{Checksum:B.tuple(B.Type.NO_HINT,i),Path:B.tuple(B.Type.PATH,s),Size:c})}];for(const r of a){const A=d.isVirtualLocator(r);if(!this.virtuals&&A)continue;const o={},i={value:[r,B.Type.LOCATOR],children:o};if(f[d.stringifyLocator(r)]=i,this.nameOnly){delete i.children;continue}const s=p.get(r.locatorHash);void 0!==s&&(o.Instances={label:"Instances",value:B.tuple(B.Type.NUMBER,s.length)}),o.Version={label:"Version",value:B.tuple(B.Type.NO_HINT,r.version)};const a=(e,t)=>{const r={};if(o[e]=r,Array.isArray(t))r.children=t.map(e=>({value:e}));else{const e={};r.children=e;for(const[r,A]of Object.entries(t))void 0!==A&&(e[r]={label:r,value:A})}};if(!A){for(const e of D)await e(r,n,a);await e.triggerHook(e=>e.fetchPackageInfo,r,n,a)}r.bin.size>0&&!A&&a("Exported Binaries",[...r.bin.keys()].map(e=>B.tuple(B.Type.PATH,e)));const c=u.get(r.locatorHash);void 0!==c&&c.length>0&&a("Dependents",c.map(e=>B.tuple(B.Type.LOCATOR,e))),r.dependencies.size>0&&!A&&a("Dependencies",[...r.dependencies.values()].map(e=>{var r;const A=t.storedResolutions.get(e.descriptorHash),n=void 0!==A&&null!==(r=t.storedPackages.get(A))&&void 0!==r?r:null;return B.tuple(B.Type.RESOLUTION,{descriptor:e,locator:n})})),r.peerDependencies.size>0&&A&&a("Peer dependencies",[...r.peerDependencies.values()].map(e=>{var A,n;const o=r.dependencies.get(e.identHash),i=void 0!==o&&null!==(A=t.storedResolutions.get(o.descriptorHash))&&void 0!==A?A:null,s=null!==i&&null!==(n=t.storedPackages.get(i))&&void 0!==n?n:null;return B.tuple(B.Type.RESOLUTION,{descriptor:e,locator:s})}))}le.emitTree(m,{configuration:e,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}}ue.usage=C.Command.Usage({description:"see information related to packages",details:"\n This command prints various information related to the specified packages, accepting glob patterns.\n\n By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\n\n Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\n\n Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\n ",examples:[["Show information about Lodash","$0 info lodash"]]}),(0,a.gn)([C.Command.Boolean("-A,--all",{description:"Print versions of a package from the whole project"})],ue.prototype,"all",void 0),(0,a.gn)([C.Command.Boolean("-R,--recursive",{description:"Print information for all packages, including transitive dependencies"})],ue.prototype,"recursive",void 0),(0,a.gn)([C.Command.Array("-X,--extra",{description:"An array of requests of extra data provided by plugins"})],ue.prototype,"extra",void 0),(0,a.gn)([C.Command.Boolean("--cache",{description:"Print information about the cache entry of a package (path, size, checksum)"})],ue.prototype,"cache",void 0),(0,a.gn)([C.Command.Boolean("--dependents",{description:"Print all dependents for each matching package"})],ue.prototype,"dependents",void 0),(0,a.gn)([C.Command.Boolean("--manifest",{description:"Print data obtained by looking at the package archive (license, homepage, ...)"})],ue.prototype,"manifest",void 0),(0,a.gn)([C.Command.Boolean("--name-only",{description:"Only print the name for the matching packages"})],ue.prototype,"nameOnly",void 0),(0,a.gn)([C.Command.Boolean("--virtuals",{description:"Print each instance of the virtual packages"})],ue.prototype,"virtuals",void 0),(0,a.gn)([C.Command.Boolean("--json",{description:"Format the output as an NDJSON stream"})],ue.prototype,"json",void 0),(0,a.gn)([C.Command.Rest()],ue.prototype,"patterns",void 0),(0,a.gn)([C.Command.Path("info")],ue.prototype,"execute",null);var he=r(11640),pe=r(5864);class de extends c.BaseCommand{constructor(){super(...arguments),this.json=!1,this.checkCache=!1,this.skipBuilds=!1,this.silent=!1}async execute(){var e,t,r;const A=await s.VK.find(this.context.cwd,this.context.plugins);void 0!==this.inlineBuilds&&A.useWithSource("",{enableInlineBuilds:this.inlineBuilds},A.startingCwd,{overwrite:!0});const n=!!process.env.NOW_BUILDER,o=!!process.env.NETLIFY,i=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,a=async(e,{error:t})=>{const r=await p.Pk.start({configuration:A,stdout:this.context.stdout,includeFooter:!1},async r=>{t?r.reportError(u.b.DEPRECATED_CLI_SETTINGS,e):r.reportWarning(u.b.DEPRECATED_CLI_SETTINGS,e)});return r.hasErrors()?r.exitCode():null};if(void 0!==this.ignoreEngines){const e=await a("The --ignore-engines option is deprecated; engine checking isn't a core feature anymore",{error:!n});if(null!==e)return e}if(void 0!==this.registry){const e=await a("The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file",{error:!1});if(null!==e)return e}if(void 0!==this.preferOffline){const e=await a("The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead",{error:!n});if(null!==e)return e}if(void 0!==this.production){const e=await a("The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead",{error:!0});if(null!==e)return e}if(void 0!==this.nonInteractive){const e=await a("The --non-interactive option is deprecated",{error:!i});if(null!==e)return e}if(void 0!==this.frozenLockfile){const e=await a("The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead",{error:!i&&!pe.TRAVIS});if(null!==e)return e}if(void 0!==this.cacheFolder){const e=await a("The cache-folder option has been deprecated; use rc settings instead",{error:!o});if(null!==e)return e}const l=void 0===this.immutable&&void 0===this.frozenLockfile?null!==(e=A.get("enableImmutableInstalls"))&&void 0!==e&&e:null!==(r=null!==(t=this.immutable)&&void 0!==t?t:this.frozenLockfile)&&void 0!==r&&r;if(null!==A.projectCwd){const e=await p.Pk.start({configuration:A,json:this.json,stdout:this.context.stdout,includeFooter:!1},async e=>{await async function(e,t){if(!e.projectCwd)return!1;const r=m.y1.join(e.projectCwd,e.get("lockfileFilename"));if(!await y.xfs.existsPromise(r))return!1;const A=await y.xfs.readFilePromise(r,"utf8");if(!A.includes("<<<<<<<"))return!1;if(t)throw new X.lk(u.b.AUTOMERGE_IMMUTABLE,"Cannot autofix a lockfile when running an immutable install");const[n,o]=function(e){const t=[[],[]],r=e.split(/\r?\n/g);let A=!1;for(;r.length>0;){const e=r.shift();if(void 0===e)throw new Error("Assertion failed: Some lines should remain");if(e.startsWith("<<<<<<<")){for(;r.length>0;){const e=r.shift();if(void 0===e)throw new Error("Assertion failed: Some lines should remain");if("======="===e){A=!1;break}A||e.startsWith("|||||||")?A=!0:t[0].push(e)}for(;r.length>0;){const e=r.shift();if(void 0===e)throw new Error("Assertion failed: Some lines should remain");if(e.startsWith(">>>>>>>"))break;t[1].push(e)}}else t[0].push(e),t[1].push(e)}return[t[0].join("\n"),t[1].join("\n")]}(A);let i,s;try{i=(0,he.parseSyml)(n),s=(0,he.parseSyml)(o)}catch(e){throw new X.lk(u.b.AUTOMERGE_FAILED_TO_PARSE,"The individual variants of the lockfile failed to parse")}const a={...i,...s};for(const[e,t]of Object.entries(a))"string"==typeof t&&delete a[e];return await y.xfs.changeFilePromise(r,(0,he.stringifySyml)(a),{automaticNewlines:!0}),!0}(A,l)&&(e.reportInfo(u.b.AUTOMERGE_SUCCESS,"Automatically fixed merge conflicts 👍"),e.reportSeparator())});if(e.hasErrors())return e.exitCode()}if(null!==A.projectCwd){const e=await p.Pk.start({configuration:A,json:this.json,stdout:this.context.stdout,includeFooter:!1},async e=>{var t;(null===(t=s.VK.telemetry)||void 0===t?void 0:t.isNew)&&(e.reportInfo(u.b.TELEMETRY_NOTICE,"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry"),e.reportInfo(u.b.TELEMETRY_NOTICE,`Run ${B.pretty(A,"yarn config set --home enableTelemetry 0",B.Type.CODE)} to disable`),e.reportSeparator())});if(e.hasErrors())return e.exitCode()}const{project:d,workspace:C}=await h.I.find(A,this.context.cwd),f=await g.C.find(A,{immutable:this.immutableCache,check:this.checkCache});if(!C)throw new c.WorkspaceRequiredError(d.cwd,this.context.cwd);await d.restoreInstallState({restoreResolutions:!1});return(await p.Pk.start({configuration:A,json:this.json,stdout:this.context.stdout,includeLogs:!0},async e=>{await d.install({cache:f,report:e,immutable:l,skipBuild:this.skipBuilds})})).exitCode()}}de.usage=C.Command.Usage({description:"install the project dependencies",details:"\n This command setup your project if needed. The installation is splitted in four different steps that each have their own characteristics:\n\n - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ).\n\n - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of `cacheFolder` in `yarn config` to see where are stored the cache files).\n\n - **Link:** Then we send the dependency tree information to internal plugins tasked from writing them on the disk in some form (for example by generating the .pnp.js file you might know).\n\n - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another.\n\n Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your .pnp.js file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches.\n\n If the `--immutable` option is set, Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the `immutablePaths` configuration setting). For backward compatibility we offer an alias under the name of `--frozen-lockfile`, but it will be removed in a later release.\n\n If the `--immutable-cache` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed).\n\n If the `--check-cache` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them.\n\n If the `--inline-builds` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments.\n\n If the `--skip-builds` option is set, Yarn will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the later will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n ",examples:[["Install the project","$0 install"],["Validate a project when using Zero-Installs","$0 install --immutable --immutable-cache"],["Validate a project when using Zero-Installs (slightly safer if you accept external PRs)","$0 install --immutable --immutable-cache --check-cache"]]}),(0,a.gn)([C.Command.Boolean("--json",{description:"Format the output as an NDJSON stream"})],de.prototype,"json",void 0),(0,a.gn)([C.Command.Boolean("--immutable",{description:"Abort with an error exit code if the lockfile was to be modified"})],de.prototype,"immutable",void 0),(0,a.gn)([C.Command.Boolean("--immutable-cache",{description:"Abort with an error exit code if the cache folder was to be modified"})],de.prototype,"immutableCache",void 0),(0,a.gn)([C.Command.Boolean("--check-cache",{description:"Always refetch the packages and ensure that their checksums are consistent"})],de.prototype,"checkCache",void 0),(0,a.gn)([C.Command.Boolean("--production",{hidden:!0})],de.prototype,"production",void 0),(0,a.gn)([C.Command.Boolean("--non-interactive",{hidden:!0})],de.prototype,"nonInteractive",void 0),(0,a.gn)([C.Command.Boolean("--frozen-lockfile",{hidden:!0})],de.prototype,"frozenLockfile",void 0),(0,a.gn)([C.Command.Boolean("--prefer-offline",{hidden:!0})],de.prototype,"preferOffline",void 0),(0,a.gn)([C.Command.Boolean("--ignore-engines",{hidden:!0})],de.prototype,"ignoreEngines",void 0),(0,a.gn)([C.Command.String("--registry",{hidden:!0})],de.prototype,"registry",void 0),(0,a.gn)([C.Command.Boolean("--inline-builds",{description:"Verbosely print the output of the build steps of dependencies"})],de.prototype,"inlineBuilds",void 0),(0,a.gn)([C.Command.Boolean("--skip-builds",{description:"Skip the build step altogether"})],de.prototype,"skipBuilds",void 0),(0,a.gn)([C.Command.String("--cache-folder",{hidden:!0})],de.prototype,"cacheFolder",void 0),(0,a.gn)([C.Command.Boolean("--silent",{hidden:!0})],de.prototype,"silent",void 0),(0,a.gn)([C.Command.Path(),C.Command.Path("install")],de.prototype,"execute",null);class Ce extends c.BaseCommand{constructor(){super(...arguments),this.all=!1,this.private=!1,this.relative=!1}async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins),{project:t,workspace:r}=await h.I.find(e,this.context.cwd),A=await g.C.find(e);if(!r)throw new c.WorkspaceRequiredError(t.cwd,this.context.cwd);const n=m.y1.resolve(this.context.cwd,m.cS.toPortablePath(this.destination)),o=await s.VK.find(n,this.context.plugins),{project:i,workspace:a}=await h.I.find(o,n);if(!a)throw new c.WorkspaceRequiredError(i.cwd,n);const l=t.topLevelWorkspace,u=[];if(this.all){for(const e of i.workspaces)!e.manifest.name||e.manifest.private&&!this.private||u.push(e);if(0===u.length)throw new C.UsageError("No workspace found to be linked in the target project")}else{if(!a.manifest.name)throw new C.UsageError("The target workspace doesn't have a name and thus cannot be linked");if(a.manifest.private&&!this.private)throw new C.UsageError("The target workspace is marked private - use the --private flag to link it anyway");u.push(a)}for(const e of u){const r=d.stringifyIdent(e.locator),A=this.relative?m.y1.relative(t.cwd,e.cwd):e.cwd;l.manifest.resolutions.push({pattern:{descriptor:{fullName:r}},reference:"portal:"+A})}return(await p.Pk.start({configuration:e,stdout:this.context.stdout},async e=>{await t.install({cache:A,report:e})})).exitCode()}}Ce.usage=C.Command.Usage({description:"connect the local project to another one",details:"\n This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\n\n There is no `yarn unlink` command. To unlink the workspaces from the current project one must revert the changes made to the `resolutions` field.\n ",examples:[["Register a remote workspace for use in the current project","$0 link ~/ts-loader"],["Register all workspaces from a remote project for use in the current project","$0 link ~/jest --all"]]}),(0,a.gn)([C.Command.String()],Ce.prototype,"destination",void 0),(0,a.gn)([C.Command.Boolean("-A,--all",{description:"Link all workspaces belonging to the target project to the current one"})],Ce.prototype,"all",void 0),(0,a.gn)([C.Command.Boolean("-p,--private",{description:"Also link private workspaces belonging to the target project to the current one"})],Ce.prototype,"private",void 0),(0,a.gn)([C.Command.Boolean("-r,--relative",{description:"Link workspaces using relative paths instead of absolute paths"})],Ce.prototype,"relative",void 0),(0,a.gn)([C.Command.Path("link")],Ce.prototype,"execute",null);class fe extends c.BaseCommand{constructor(){super(...arguments),this.args=[]}async execute(){return this.cli.run(["exec","node",...this.args])}}fe.usage=C.Command.Usage({description:"run node with the hook already setup",details:"\n This command simply runs Node. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment).\n\n The Node process will use the exact same version of Node as the one used to run Yarn itself, which might be a good way to ensure that your commands always use a consistent Node version.\n ",examples:[["Run a Node script","$0 node ./my-script.js"]]}),(0,a.gn)([C.Command.Proxy()],fe.prototype,"args",void 0),(0,a.gn)([C.Command.Path("node")],fe.prototype,"execute",null);var Ie=r(20624),Ee=r(12087),Be=r(85622),ye=r.n(Be),me=r(79669);class we extends c.BaseCommand{constructor(){super(...arguments),this.onlyIfNeeded=!1}async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins);if(e.get("yarnPath")&&this.onlyIfNeeded)return 0;let t;if("latest"===this.version||"berry"===this.version)t="https://github.com/yarnpkg/berry/raw/master/packages/yarnpkg-cli/bin/yarn.js";else if("classic"===this.version)t="https://nightly.yarnpkg.com/latest.js";else if(ce.satisfiesWithPrereleases(this.version,">=2.0.0"))t=`https://github.com/yarnpkg/berry/raw/%40yarnpkg/cli/${this.version}/packages/yarnpkg-cli/bin/yarn.js`;else{if(!ce.satisfiesWithPrereleases(this.version,"^0.x || ^1.x"))throw Q().validRange(this.version)?new C.UsageError("Support for ranges got removed - please use the exact version you want to install, or 'latest' to get the latest build available"):new C.UsageError(`Invalid version descriptor "${this.version}"`);t=`https://github.com/yarnpkg/yarn/releases/download/v${this.version}/yarn-${this.version}.js`}return(await p.Pk.start({configuration:e,stdout:this.context.stdout},async r=>{r.reportInfo(u.b.UNNAMED,"Downloading "+B.pretty(e,t,"green"));const A=await me.get(t,{configuration:e});await Qe(e,null,A,{report:r})})).exitCode()}}async function Qe(e,t,r,{report:A}){const n=e.projectCwd?e.projectCwd:e.startingCwd;null===t&&await y.xfs.mktempPromise(async e=>{const A=m.y1.join(e,"yarn.cjs");await y.xfs.writeFilePromise(A,r);const{stdout:o}=await se.execvp(process.execPath,[m.cS.fromPortablePath(A),"--version"],{cwd:n,env:{...process.env,YARN_IGNORE_PATH:"1"}});if(t=o.trim(),!Q().valid(t))throw new Error("Invalid semver version")});const o=m.y1.resolve(n,".yarn/releases"),i=m.y1.resolve(o,`yarn-${t}.cjs`),a=m.y1.relative(e.startingCwd,i),c=m.y1.relative(n,i),g=e.get("yarnPath"),l=null===g||g.startsWith(o+"/");A.reportInfo(u.b.UNNAMED,"Saving the new release in "+B.pretty(e,a,"magenta")),await y.xfs.removePromise(m.y1.dirname(i)),await y.xfs.mkdirPromise(m.y1.dirname(i),{recursive:!0}),await y.xfs.writeFilePromise(i,r),await y.xfs.chmodPromise(i,493),l&&await s.VK.updateConfiguration(n,{yarnPath:c})}we.usage=C.Command.Usage({description:"lock the Yarn version used by the project",details:"\n This command will download a specific release of Yarn directly from the Yarn GitHub repository, will store it inside your project, and will change the `yarnPath` settings from your project `.yarnrc.yml` file to point to the new file.\n\n A very good use case for this command is to enforce the version of Yarn used by the any single member of your team inside a same project - by doing this you ensure that you have control on Yarn upgrades and downgrades (including on your deployment servers), and get rid of most of the headaches related to someone using a slightly different version and getting a different behavior than you.\n ",examples:[["Download the latest release from the Yarn repository","$0 set version latest"],["Download the latest classic release from the Yarn repository","$0 set version classic"],["Download a specific Yarn 2 build","$0 set version 2.0.0-rc.30"],["Switch back to a specific Yarn 1 release","$0 set version 1.22.1"]]}),(0,a.gn)([C.Command.Boolean("--only-if-needed",{description:"Only lock the Yarn version if it isn't already locked"})],we.prototype,"onlyIfNeeded",void 0),(0,a.gn)([C.Command.String()],we.prototype,"version",void 0),(0,a.gn)([C.Command.Path("policies","set-version"),C.Command.Path("set","version")],we.prototype,"execute",null);const De=/^[0-9]+$/;function be(e){return De.test(e)?`pull/${e}/head`:e}class ve extends c.BaseCommand{constructor(){super(...arguments),this.repository="https://github.com/yarnpkg/berry.git",this.branch="master",this.plugins=[],this.noMinify=!1,this.force=!1}async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins),t=void 0!==this.installPath?m.y1.resolve(this.context.cwd,m.cS.toPortablePath(this.installPath)):m.y1.resolve(m.cS.toPortablePath((0,Ee.tmpdir)()),"yarnpkg-sources",Ie.makeHash(this.repository).slice(0,6));return(await p.Pk.start({configuration:e,stdout:this.context.stdout},async r=>{await ke(this,{configuration:e,report:r,target:t}),r.reportSeparator(),r.reportInfo(u.b.UNNAMED,"Building a fresh bundle"),r.reportSeparator(),await Se((({plugins:e,noMinify:t},r)=>[["yarn","build:cli",...(new Array).concat(...e.map(e=>["--plugin",ye().resolve(r,e)])),...t?["--no-minify"]:[],"|"]])(this,t),{configuration:e,context:this.context,target:t}),r.reportSeparator();const A=m.y1.resolve(t,"packages/yarnpkg-cli/bundles/yarn.js"),n=await y.xfs.readFilePromise(A);await Qe(e,"sources",n,{report:r})})).exitCode()}}async function Se(e,{configuration:t,context:r,target:A}){for(const[n,...o]of e){const e="|"===o[o.length-1];if(e&&o.pop(),e)await se.pipevp(n,o,{cwd:A,stdin:r.stdin,stdout:r.stdout,stderr:r.stderr,strict:!0});else{r.stdout.write(B.pretty(t," $ "+[n,...o].join(" "),"grey")+"\n");try{await se.execvp(n,o,{cwd:A,strict:!0})}catch(e){throw r.stdout.write(e.stdout||e.stack),e}}}}async function ke(e,{configuration:t,report:r,target:A}){let n=!1;if(!e.force&&y.xfs.existsSync(m.y1.join(A,".git"))){r.reportInfo(u.b.UNNAMED,"Fetching the latest commits"),r.reportSeparator();try{await Se((({branch:e})=>[["git","fetch","origin",be(e),"--force"],["git","reset","--hard","FETCH_HEAD"],["git","clean","-dfx"]])(e),{configuration:t,context:e.context,target:A}),n=!0}catch(e){r.reportSeparator(),r.reportWarning(u.b.UNNAMED,"Repository update failed; we'll try to regenerate it")}}n||(r.reportInfo(u.b.UNNAMED,"Cloning the remote repository"),r.reportSeparator(),await y.xfs.removePromise(A),await y.xfs.mkdirPromise(A,{recursive:!0}),await Se((({repository:e,branch:t},r)=>[["git","init",m.cS.fromPortablePath(r)],["git","remote","add","origin",e],["git","fetch","origin",be(t)],["git","reset","--hard","FETCH_HEAD"]])(e,A),{configuration:t,context:e.context,target:A}))}ve.usage=C.Command.Usage({description:"build Yarn from master",details:"\n This command will clone the Yarn repository into a temporary folder, then build it. The resulting bundle will then be copied into the local project.\n ",examples:[["Build Yarn from master","$0 set version from sources"]]}),(0,a.gn)([C.Command.String("--path",{description:"The path where the repository should be cloned to"})],ve.prototype,"installPath",void 0),(0,a.gn)([C.Command.String("--repository",{description:"The repository that should be cloned"})],ve.prototype,"repository",void 0),(0,a.gn)([C.Command.String("--branch",{description:"The branch of the repository that should be cloned"})],ve.prototype,"branch",void 0),(0,a.gn)([C.Command.Array("--plugin",{description:"An array of additional plugins that should be included in the bundle"})],ve.prototype,"plugins",void 0),(0,a.gn)([C.Command.Boolean("--no-minify",{description:"Build a bundle for development (debugging) - non-minified and non-mangled"})],ve.prototype,"noMinify",void 0),(0,a.gn)([C.Command.Boolean("-f,--force",{description:"Always clone the repository instead of trying to fetch the latest commits"})],ve.prototype,"force",void 0),(0,a.gn)([C.Command.Path("set","version","from","sources")],ve.prototype,"execute",null);var Ne=r(78835);const Fe=require("vm");async function Ke(e){const t=await me.get("https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml",{configuration:e});return(0,he.parseSyml)(t.toString())}class Me extends c.BaseCommand{constructor(){super(...arguments),this.json=!1}async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins);return(await p.Pk.start({configuration:e,json:this.json,stdout:this.context.stdout},async t=>{const r=await Ke(e);for(const[e,{experimental:A,...n}]of Object.entries(r)){let r=e;A&&(r+=" [experimental]"),t.reportJson({name:e,experimental:A,...n}),t.reportInfo(null,r)}})).exitCode()}}Me.usage=C.Command.Usage({category:"Plugin-related commands",description:"list the available official plugins",details:"\n This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\n ",examples:[["List the official plugins","$0 plugin list"]]}),(0,a.gn)([C.Command.Boolean("--json",{description:"Format the output as an NDJSON stream"})],Me.prototype,"json",void 0),(0,a.gn)([C.Command.Path("plugin","list")],Me.prototype,"execute",null);class Re extends c.BaseCommand{async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins);return(await p.Pk.start({configuration:e,stdout:this.context.stdout},async t=>{const{project:r}=await h.I.find(e,this.context.cwd);let A,n;if(this.name.match(/^\.{0,2}[\\/]/)||m.cS.isAbsolute(this.name)){const o=m.y1.resolve(this.context.cwd,m.cS.toPortablePath(this.name));t.reportInfo(u.b.UNNAMED,"Reading "+B.pretty(e,o,B.Type.PATH)),A=m.y1.relative(r.cwd,o),n=await y.xfs.readFilePromise(o)}else{let r;if(this.name.match(/^https?:/)){try{new Ne.URL(this.name)}catch(e){throw new X.lk(u.b.INVALID_PLUGIN_REFERENCE,`Plugin specifier "${this.name}" is neither a plugin name nor a valid url`)}A=this.name,r=this.name}else{const t=d.parseIdent(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-")),n=d.stringifyIdent(t),o=await Ke(e);if(!Object.prototype.hasOwnProperty.call(o,n))throw new X.lk(u.b.PLUGIN_NAME_NOT_FOUND,`Couldn't find a plugin named "${n}" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be referenced by their name; any other plugin will have to be referenced through its public url (for example https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js).`);A=n,r=o[n].url}t.reportInfo(u.b.UNNAMED,"Downloading "+B.pretty(e,r,"green")),n=await me.get(r,{configuration:e})}await xe(A,n,{project:r,report:t})})).exitCode()}}async function xe(e,t,{project:r,report:A}){const{configuration:n}=r,o={},i={exports:o};(0,Fe.runInNewContext)(t.toString(),{module:i,exports:o});const a=i.exports.name,c=`.yarn/plugins/${a}.cjs`,g=m.y1.resolve(r.cwd,c);A.reportInfo(u.b.UNNAMED,"Saving the new plugin in "+B.pretty(n,c,"magenta")),await y.xfs.mkdirPromise(m.y1.dirname(g),{recursive:!0}),await y.xfs.writeFilePromise(g,t);const l={path:c,spec:e};await s.VK.updateConfiguration(r.cwd,e=>{const t=[];let A=!1;for(const n of e.plugins||[]){const e="string"!=typeof n?n.path:n,o=m.y1.resolve(r.cwd,m.cS.toPortablePath(e)),{name:i}=P.dynamicRequire(m.cS.fromPortablePath(o));i!==a?t.push(n):(t.push(l),A=!0)}return A||t.push(l),{...e,plugins:t}})}Re.usage=C.Command.Usage({category:"Plugin-related commands",description:"download a plugin",details:"\n This command downloads the specified plugin from its remote location and updates the configuration to reference it in further CLI invocations.\n\n Three types of plugin references are accepted:\n\n - If the plugin is stored within the Yarn repository, it can be referenced by name.\n - Third-party plugins can be referenced directly through their public urls.\n - Local plugins can be referenced by their path on the disk.\n\n Plugins cannot be downloaded from the npm registry, and aren't allowed to have dependencies (they need to be bundled into a single file, possibly thanks to the `@yarnpkg/builder` package).\n ",examples:[['Download and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import @yarnpkg/plugin-exec"],['Download and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import exec"],["Download and activate a community plugin","$0 plugin import https://example.org/path/to/plugin.js"],["Activate a local plugin","$0 plugin import ./path/to/plugin.js"]]}),(0,a.gn)([C.Command.String()],Re.prototype,"name",void 0),(0,a.gn)([C.Command.Path("plugin","import")],Re.prototype,"execute",null);class Le extends c.BaseCommand{constructor(){super(...arguments),this.repository="https://github.com/yarnpkg/berry.git",this.branch="master",this.noMinify=!1,this.force=!1}async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins),t=void 0!==this.installPath?m.y1.resolve(this.context.cwd,m.cS.toPortablePath(this.installPath)):m.y1.resolve(m.cS.toPortablePath((0,Ee.tmpdir)()),"yarnpkg-sources",Ie.makeHash(this.repository).slice(0,6));return(await p.Pk.start({configuration:e,stdout:this.context.stdout},async r=>{const{project:A}=await h.I.find(e,this.context.cwd),n=d.parseIdent(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-")),o=d.stringifyIdent(n),i=await Ke(e);if(!Object.prototype.hasOwnProperty.call(i,o))throw new X.lk(u.b.PLUGIN_NAME_NOT_FOUND,`Couldn't find a plugin named "${o}" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);const s=o,a=s.replace(/@yarnpkg\//,"");await ke(this,{configuration:e,report:r,target:t}),r.reportSeparator(),r.reportInfo(u.b.UNNAMED,"Building a fresh "+a),r.reportSeparator(),await Se((({pluginName:e,noMinify:t},r)=>[["yarn","build:"+e,...t?["--no-minify"]:[],"|"]])({pluginName:a,noMinify:this.noMinify}),{configuration:e,context:this.context,target:t}),r.reportSeparator();const c=m.y1.resolve(t,`packages/${a}/bundles/${s}.js`),g=await y.xfs.readFilePromise(c);await xe(s,g,{project:A,report:r})})).exitCode()}}Le.usage=C.Command.Usage({category:"Plugin-related commands",description:"build a plugin from sources",details:"\n This command clones the Yarn repository into a temporary folder, builds the specified contrib plugin and updates the configuration to reference it in further CLI invocations.\n\n The plugins can be referenced by their short name if sourced from the official Yarn repository.\n ",examples:[['Build and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import from sources @yarnpkg/plugin-exec"],['Build and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import from sources exec"]]}),(0,a.gn)([C.Command.String()],Le.prototype,"name",void 0),(0,a.gn)([C.Command.String("--path",{description:"The path where the repository should be cloned to"})],Le.prototype,"installPath",void 0),(0,a.gn)([C.Command.String("--repository",{description:"The repository that should be cloned"})],Le.prototype,"repository",void 0),(0,a.gn)([C.Command.String("--branch",{description:"The branch of the repository that should be cloned"})],Le.prototype,"branch",void 0),(0,a.gn)([C.Command.Boolean("--no-minify",{description:"Build a plugin for development (debugging) - non-minified and non-mangled"})],Le.prototype,"noMinify",void 0),(0,a.gn)([C.Command.Boolean("-f,--force",{description:"Always clone the repository instead of trying to fetch the latest commits"})],Le.prototype,"force",void 0),(0,a.gn)([C.Command.Path("plugin","import","from","sources")],Le.prototype,"execute",null);class Pe extends c.BaseCommand{async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins),{project:t}=await h.I.find(e,this.context.cwd);return(await p.Pk.start({configuration:e,stdout:this.context.stdout},async r=>{const A=this.name,n=d.parseIdent(A);if(!e.plugins.has(A))throw new C.UsageError(d.prettyIdent(e,n)+" isn't referenced by the current configuration");const o=`.yarn/plugins/${A}.cjs`,i=m.y1.resolve(t.cwd,o);y.xfs.existsSync(i)&&(r.reportInfo(u.b.UNNAMED,`Removing ${B.pretty(e,o,B.Type.PATH)}...`),await y.xfs.removePromise(i)),r.reportInfo(u.b.UNNAMED,"Updating the configuration..."),await s.VK.updateConfiguration(t.cwd,e=>{if(!Array.isArray(e.plugins))return e;const t=e.plugins.filter(e=>e.path!==o);return e.plugins.length===t.length?e:{...e,plugins:t}})})).exitCode()}}Pe.usage=C.Command.Usage({category:"Plugin-related commands",description:"remove a plugin",details:"\n This command deletes the specified plugin from the .yarn/plugins folder and removes it from the configuration.\n\n **Note:** The plugins have to be referenced by their name property, which can be obtained using the `yarn plugin runtime` command. Shorthands are not allowed.\n ",examples:[["Remove a plugin imported from the Yarn repository","$0 plugin remove @yarnpkg/plugin-typescript"],["Remove a plugin imported from a local file","$0 plugin remove my-local-plugin"]]}),(0,a.gn)([C.Command.String()],Pe.prototype,"name",void 0),(0,a.gn)([C.Command.Path("plugin","remove")],Pe.prototype,"execute",null);class Oe extends c.BaseCommand{constructor(){super(...arguments),this.json=!1}async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins);return(await p.Pk.start({configuration:e,json:this.json,stdout:this.context.stdout},async t=>{for(const r of e.plugins.keys()){const e=this.context.plugins.plugins.has(r);let A=r;e&&(A+=" [builtin]"),t.reportJson({name:r,builtin:e}),t.reportInfo(null,""+A)}})).exitCode()}}Oe.usage=C.Command.Usage({category:"Plugin-related commands",description:"list the active plugins",details:"\n This command prints the currently active plugins. Will be displayed both builtin plugins and external plugins.\n ",examples:[["List the currently active plugins","$0 plugin runtime"]]}),(0,a.gn)([C.Command.Boolean("--json",{description:"Format the output as an NDJSON stream"})],Oe.prototype,"json",void 0),(0,a.gn)([C.Command.Path("plugin","runtime")],Oe.prototype,"execute",null);class Ue extends c.BaseCommand{constructor(){super(...arguments),this.idents=[]}async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins),{project:t,workspace:r}=await h.I.find(e,this.context.cwd),A=await g.C.find(e);if(!r)throw new c.WorkspaceRequiredError(t.cwd,this.context.cwd);const n=new Set;for(const e of this.idents)n.add(d.parseIdent(e).identHash);await t.resolveEverything({cache:A,report:new I.$});const o=e.get("bstatePath"),i=y.xfs.existsSync(o)?(0,he.parseSyml)(await y.xfs.readFilePromise(o,"utf8")):{},a=new Map;for(const e of t.storedPackages.values()){if(!Object.prototype.hasOwnProperty.call(i,e.locatorHash))continue;if(0===n.size||n.has(e.identHash))continue;const t=i[e.locatorHash];a.set(e.locatorHash,t)}if(a.size>0){const r=e.get("bstatePath"),A=h.I.generateBuildStateFile(a,t.storedPackages);await y.xfs.mkdirPromise(m.y1.dirname(r),{recursive:!0}),await y.xfs.changeFilePromise(r,A,{automaticNewlines:!0})}else await y.xfs.removePromise(o);return(await p.Pk.start({configuration:e,stdout:this.context.stdout,includeLogs:!this.context.quiet},async e=>{await t.install({cache:A,report:e})})).exitCode()}}Ue.usage=C.Command.Usage({description:"rebuild the project's native packages",details:"\n This command will automatically cause Yarn to forget about previous compilations of the given packages and to run them again.\n\n Note that while Yarn forgets the compilation, the previous artifacts aren't erased from the filesystem and may affect the next builds (in good or bad). To avoid this, you may remove the .yarn/unplugged folder, or any other relevant location where packages might have been stored (Yarn may offer a way to do that automatically in the future).\n\n By default all packages will be rebuilt, but you can filter the list by specifying the names of the packages you want to clear from memory.\n ",examples:[["Rebuild all packages","$0 rebuild"],["Rebuild fsevents only","$0 rebuild fsevents"]]}),(0,a.gn)([C.Command.Rest()],Ue.prototype,"idents",void 0),(0,a.gn)([C.Command.Path("rebuild")],Ue.prototype,"execute",null);class Te extends c.BaseCommand{constructor(){super(...arguments),this.all=!1,this.patterns=[]}async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins),{project:t,workspace:r}=await h.I.find(e,this.context.cwd),A=await g.C.find(e);if(!r)throw new c.WorkspaceRequiredError(t.cwd,this.context.cwd);await t.restoreInstallState({restoreResolutions:!1});const o=this.all?t.workspaces:[r],i=[n.REGULAR,n.DEVELOPMENT,n.PEER],a=[];let l=!1;const u=[];for(const e of this.patterns){let t=!1;const r=d.parseIdent(e);for(const A of o){const n=[...A.manifest.peerDependenciesMeta.keys()];for(const r of Z()(n,e))A.manifest.peerDependenciesMeta.delete(r),l=!0,t=!0;for(const e of i){const n=A.manifest.getForScope(e),o=[...n.values()].map(e=>d.stringifyIdent(e));for(const i of Z()(o,d.stringifyIdent(r))){const{identHash:r}=d.parseIdent(i),o=n.get(r);if(void 0===o)throw new Error("Assertion failed: Expected the descriptor to be registered");A.manifest[e].delete(r),u.push([A,e,o]),l=!0,t=!0}}}t||a.push(e)}const f=a.length>1?"Patterns":"Pattern",I=a.length>1?"don't":"doesn't",E=this.all?"any":"this";if(a.length>0)throw new C.UsageError(`${f} ${B.prettyList(e,a,s.a5.CODE)} ${I} match any packages referenced by ${E} workspace`);if(l){await e.triggerMultipleHooks(e=>e.afterWorkspaceDependencyRemoval,u);return(await p.Pk.start({configuration:e,stdout:this.context.stdout},async e=>{await t.install({cache:A,report:e})})).exitCode()}return 0}}Te.usage=C.Command.Usage({description:"remove dependencies from the project",details:"\n This command will remove the packages matching the specified patterns from the current workspace.\n\n This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n ",examples:[["Remove a dependency from the current project","$0 remove lodash"],["Remove a dependency from all workspaces at once","$0 remove lodash --all"],["Remove all dependencies starting with `eslint-`","$0 remove 'eslint-*'"],["Remove all dependencies with the `@babel` scope","$0 remove '@babel/*'"],["Remove all dependencies matching `react-dom` or `react-helmet`","$0 remove 'react-{dom,helmet}'"]]}),(0,a.gn)([C.Command.Boolean("-A,--all",{description:"Apply the operation to all workspaces from the current project"})],Te.prototype,"all",void 0),(0,a.gn)([C.Command.Rest()],Te.prototype,"patterns",void 0),(0,a.gn)([C.Command.Path("remove")],Te.prototype,"execute",null);class je extends c.BaseCommand{async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins),{project:t,workspace:r}=await h.I.find(e,this.context.cwd);if(!r)throw new c.WorkspaceRequiredError(t.cwd,this.context.cwd);return(await p.Pk.start({configuration:e,stdout:this.context.stdout},async t=>{const A=r.manifest.scripts,n=P.sortMap(A.keys(),e=>e),o={breakLength:1/0,colors:e.get("enableColors"),maxArrayLength:2},i=n.reduce((e,t)=>Math.max(e,t.length),0);for(const[e,r]of A.entries())t.reportInfo(null,`${e.padEnd(i," ")} ${(0,T.inspect)(r,o)}`)})).exitCode()}}(0,a.gn)([C.Command.Path("run")],je.prototype,"execute",null);class Ye extends c.BaseCommand{constructor(){super(...arguments),this.inspect=!1,this.inspectBrk=!1,this.topLevel=!1,this.binariesOnly=!1,this.args=[]}async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins),{project:t,workspace:r,locator:A}=await h.I.find(e,this.context.cwd);await t.restoreInstallState();const n=this.topLevel?t.topLevelWorkspace.anchoredLocator:A;if(!this.binariesOnly&&await R.hasPackageScript(n,this.scriptName,{project:t}))return await R.executePackageScript(n,this.scriptName,this.args,{project:t,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if((await R.getPackageAccessibleBinaries(n,{project:t})).get(this.scriptName)){const e=[];return this.inspect&&("string"==typeof this.inspect?e.push("--inspect="+this.inspect):e.push("--inspect")),this.inspectBrk&&("string"==typeof this.inspectBrk?e.push("--inspect-brk="+this.inspectBrk):e.push("--inspect-brk")),await R.executePackageAccessibleBinary(n,this.scriptName,this.args,{cwd:this.context.cwd,project:t,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:e})}if(!this.topLevel&&!this.binariesOnly&&r&&this.scriptName.includes(":")){const e=(await Promise.all(t.workspaces.map(async e=>e.manifest.scripts.has(this.scriptName)?e:null))).filter(e=>null!==e);if(1===e.length)return await R.executeWorkspaceScript(e[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw"node-gyp"===this.scriptName?new C.UsageError(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${d.prettyLocator(e,A)}). This typically happens because some package depends on "node-gyp" to build itself, but didn't list it in their dependencies. To fix that, please run "yarn add node-gyp" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new C.UsageError(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${d.prettyLocator(e,A)}).`);{if("global"===this.scriptName)throw new C.UsageError("The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead");const e=[this.scriptName].concat(this.args);for(const[t,r]of c.pluginCommands)for(const A of r)if(e.length>=A.length&&JSON.stringify(e.slice(0,A.length))===JSON.stringify(A))throw new C.UsageError(`Couldn't find a script named "${this.scriptName}", but a matching command can be found in the ${t} plugin. You can install it with "yarn plugin import ${t}".`);throw new C.UsageError(`Couldn't find a script named "${this.scriptName}".`)}}}Ye.usage=C.Command.Usage({description:"run a script defined in the package.json",details:"\n This command will run a tool. The exact tool that will be executed will depend on the current state of your workspace:\n\n - If the `scripts` field from your local package.json contains a matching script name, its definition will get executed.\n\n - Otherwise, if one of the local workspace's dependencies exposes a binary with a matching name, this binary will get executed.\n\n - Otherwise, if the specified name contains a colon character and if one of the workspaces in the project contains exactly one script with a matching name, then this script will get executed.\n\n Whatever happens, the cwd of the spawned process will be the workspace that declares the script (which makes it possible to call commands cross-workspaces using the third syntax).\n ",examples:[["Run the tests from the local workspace","$0 run test"],['Same thing, but without the "run" keyword',"$0 test"],["Inspect Webpack while running","$0 run --inspect-brk webpack"]]}),(0,a.gn)([C.Command.String("--inspect",{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"})],Ye.prototype,"inspect",void 0),(0,a.gn)([C.Command.String("--inspect-brk",{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"})],Ye.prototype,"inspectBrk",void 0),(0,a.gn)([C.Command.Boolean("-T,--top-level",{hidden:!0})],Ye.prototype,"topLevel",void 0),(0,a.gn)([C.Command.Boolean("-B,--binaries-only",{hidden:!0})],Ye.prototype,"binariesOnly",void 0),(0,a.gn)([C.Command.Boolean("--silent",{hidden:!0})],Ye.prototype,"silent",void 0),(0,a.gn)([C.Command.String()],Ye.prototype,"scriptName",void 0),(0,a.gn)([C.Command.Proxy()],Ye.prototype,"args",void 0),(0,a.gn)([C.Command.Path("run")],Ye.prototype,"execute",null);class Ge extends c.BaseCommand{constructor(){super(...arguments),this.save=!1}async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins),{project:t,workspace:r}=await h.I.find(e,this.context.cwd),A=await g.C.find(e);if(!r)throw new c.WorkspaceRequiredError(t.cwd,this.context.cwd);const n=d.parseDescriptor(this.descriptor,!0),o=d.makeDescriptor(n,this.resolution);t.storedDescriptors.set(n.descriptorHash,n),t.storedDescriptors.set(o.descriptorHash,o),t.resolutionAliases.set(n.descriptorHash,o.descriptorHash);return(await p.Pk.start({configuration:e,stdout:this.context.stdout},async e=>{await t.install({cache:A,report:e})})).exitCode()}}Ge.usage=C.Command.Usage({description:"enforce a package resolution",details:'\n This command updates the resolution table so that `descriptor` is resolved by `resolution`.\n\n Note that by default this command only affect the current resolution table - meaning that this "manual override" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, add the `-s,--save` flag which will also edit the `resolutions` field from your top-level manifest.\n\n Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\n ',examples:[["Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0","$0 set resolution lodash@npm:^1.2.3 1.5.0"]]}),(0,a.gn)([C.Command.String()],Ge.prototype,"descriptor",void 0),(0,a.gn)([C.Command.String()],Ge.prototype,"resolution",void 0),(0,a.gn)([C.Command.Boolean("-s,--save",{description:"Persist the resolution inside the top-level manifest"})],Ge.prototype,"save",void 0),(0,a.gn)([C.Command.Path("set","resolution")],Ge.prototype,"execute",null);class He extends c.BaseCommand{constructor(){super(...arguments),this.patterns=[],this.interactive=null,this.exact=!1,this.tilde=!1,this.caret=!1}async execute(){var e;const t=await s.VK.find(this.context.cwd,this.context.plugins),{project:r,workspace:A}=await h.I.find(t,this.context.cwd),o=await g.C.find(t);if(!A)throw new c.WorkspaceRequiredError(r.cwd,this.context.cwd);const a=null!==(e=this.interactive)&&void 0!==e?e:t.get("preferInteractive"),I=D(this,r),E=a?[i.KEEP,i.REUSE,i.PROJECT,i.LATEST]:[i.PROJECT,i.LATEST],y=[],m=[];for(const e of this.patterns){let t=!1;const A=d.parseDescriptor(e);for(const e of r.workspaces)for(const i of[n.REGULAR,n.DEVELOPMENT]){const n=[...e.manifest.getForScope(i).values()].map(e=>d.stringifyIdent(e));for(const s of Z()(n,d.stringifyIdent(A))){const n=d.parseIdent(s),a=e.manifest[i].get(n.identHash);if(void 0===a)throw new Error("Assertion failed: Expected the descriptor to be registered");const c=d.makeDescriptor(n,A.range);y.push(Promise.resolve().then(async()=>[e,i,a,await F(c,{project:r,workspace:e,cache:o,target:i,modifier:I,strategies:E})])),t=!0}}t||m.push(e)}if(m.length>1)throw new C.UsageError(`Patterns ${B.prettyList(t,m,s.a5.CODE)} don't match any packages referenced by any workspace`);if(m.length>0)throw new C.UsageError(`Pattern ${B.prettyList(t,m,s.a5.CODE)} doesn't match any packages referenced by any workspace`);const w=await Promise.all(y),Q=await l.h.start({configuration:t,stdout:this.context.stdout,suggestInstall:!1},async e=>{for(const[,,A,{suggestions:n,rejections:o}]of w){const i=n.filter(e=>null!==e.descriptor);if(0===i.length){const[n]=o;if(void 0===n)throw new Error("Assertion failed: Expected an error to have been set");const i=this.cli.error(n);r.configuration.get("enableNetwork")?e.reportError(u.b.CANT_SUGGEST_RESOLUTIONS,`${d.prettyDescriptor(t,A)} can't be resolved to a satisfying range\n\n${i}`):e.reportError(u.b.CANT_SUGGEST_RESOLUTIONS,`${d.prettyDescriptor(t,A)} can't be resolved to a satisfying range (note: network resolution has been disabled)\n\n${i}`)}else i.length>1&&!a&&e.reportError(u.b.CANT_SUGGEST_RESOLUTIONS,d.prettyDescriptor(t,A)+" has multiple possible upgrade strategies; use -i to disambiguate manually")}});if(Q.hasErrors())return Q.exitCode();let b=!1;const v=[];for(const[e,A,,{suggestions:n}]of w){let o;const i=n.filter(e=>null!==e.descriptor),s=i[0].descriptor,a=i.every(e=>d.areDescriptorsEqual(e.descriptor,s));1===i.length||a?o=s:(b=!0,({answer:o}=await(0,f.prompt)({type:"select",name:"answer",message:`Which range to you want to use in ${d.prettyWorkspace(t,e)} ❯ ${A}?`,choices:n.map(({descriptor:e,name:t,reason:r})=>e?{name:t,hint:r,descriptor:e}:{name:t,hint:r,disabled:!0}),onCancel:()=>process.exit(130),result(e){return this.find(e,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout})));const c=e.manifest[A].get(o.identHash);if(void 0===c)throw new Error("Assertion failed: This descriptor should have a matching entry");if(c.descriptorHash!==o.descriptorHash)e.manifest[A].set(o.identHash,o),v.push([e,A,c,o]);else{const A=t.makeResolver(),n={project:r,resolver:A},o=A.bindDescriptor(c,e.anchoredLocator,n);r.forgetResolution(o)}}await t.triggerMultipleHooks(e=>e.afterWorkspaceDependencyReplacement,v),b&&this.context.stdout.write("\n");return(await p.Pk.start({configuration:t,stdout:this.context.stdout},async e=>{await r.install({cache:o,report:e})})).exitCode()}}He.usage=C.Command.Usage({description:"upgrade dependencies across the project",details:"\n This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\n\n If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\n\n The, `-C,--caret`, `-E,--exact` and `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\n\n Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\n\n This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\n ",examples:[["Upgrade all instances of lodash to the latest release","$0 up lodash"],["Upgrade all instances of lodash to the latest release, but ask confirmation for each","$0 up lodash -i"],["Upgrade all instances of lodash to 1.2.3","$0 up lodash@1.2.3"],["Upgrade all instances of packages with the `@babel` scope to the latest release","$0 up '@babel/*'"],["Upgrade all instances of packages containing the word `jest` to the latest release","$0 up '*jest*'"],["Upgrade all instances of packages with the `@babel` scope to 7.0.0","$0 up '@babel/*@7.0.0'"]]}),(0,a.gn)([C.Command.Rest()],He.prototype,"patterns",void 0),(0,a.gn)([C.Command.Boolean("-i,--interactive",{description:"Offer various choices, depending on the detected upgrade paths"})],He.prototype,"interactive",void 0),(0,a.gn)([C.Command.Boolean("-E,--exact",{description:"Don't use any semver modifier on the resolved range"})],He.prototype,"exact",void 0),(0,a.gn)([C.Command.Boolean("-T,--tilde",{description:"Use the `~` semver modifier on the resolved range"})],He.prototype,"tilde",void 0),(0,a.gn)([C.Command.Boolean("-C,--caret",{description:"Use the `^` semver modifier on the resolved range"})],He.prototype,"caret",void 0),(0,a.gn)([C.Command.Path("up")],He.prototype,"execute",null);class Je extends c.BaseCommand{constructor(){super(...arguments),this.recursive=!1,this.json=!1,this.peers=!1}async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins),{project:t,workspace:r}=await h.I.find(e,this.context.cwd);if(!r)throw new c.WorkspaceRequiredError(t.cwd,this.context.cwd);await t.restoreInstallState();const A=d.parseIdent(this.package).identHash,n=this.recursive?function(e,t,{configuration:r,peers:A}){const n=P.sortMap(e.workspaces,e=>d.stringifyLocator(e.anchoredLocator)),o=new Set,i=new Set,s=r=>{if(o.has(r.locatorHash))return i.has(r.locatorHash);if(o.add(r.locatorHash),r.identHash===t)return i.add(r.locatorHash),!0;let n=!1;r.identHash===t&&(n=!0);for(const t of r.dependencies.values()){if(!A&&r.peerDependencies.has(t.identHash))continue;const o=e.storedResolutions.get(t.descriptorHash);if(!o)throw new Error("Assertion failed: The resolution should have been registered");const i=e.storedPackages.get(o);if(!i)throw new Error("Assertion failed: The package should have been registered");s(i)&&(n=!0)}return n&&i.add(r.locatorHash),n};for(const t of n){const r=e.storedPackages.get(t.anchoredLocator.locatorHash);if(!r)throw new Error("Assertion failed: The package should have been registered");s(r)}const a=new Set,c={},g={children:c},l=(t,r,n)=>{if(!i.has(t.locatorHash))return;const o={},s={value:null!==n?B.tuple(B.Type.DEPENDENT,{locator:t,descriptor:n}):B.tuple(B.Type.LOCATOR,t),children:o};if(r[d.stringifyLocator(t)]=s,!a.has(t.locatorHash)&&(a.add(t.locatorHash),null===n||!e.tryWorkspaceByLocator(t)))for(const r of t.dependencies.values()){if(!A&&t.peerDependencies.has(r.identHash))continue;const n=e.storedResolutions.get(r.descriptorHash);if(!n)throw new Error("Assertion failed: The resolution should have been registered");const i=e.storedPackages.get(n);if(!i)throw new Error("Assertion failed: The package should have been registered");l(i,o,r)}};for(const t of n){const r=e.storedPackages.get(t.anchoredLocator.locatorHash);if(!r)throw new Error("Assertion failed: The package should have been registered");l(r,c,null)}return g}(t,A,{configuration:e,peers:this.peers}):function(e,t,{configuration:r,peers:A}){const n=P.sortMap(e.storedPackages.values(),e=>d.stringifyLocator(e)),o={},i={children:o};for(const r of n){const n={},i=null;for(const s of r.dependencies.values()){if(!A&&r.peerDependencies.has(s.identHash))continue;const a=e.storedResolutions.get(s.descriptorHash);if(!a)throw new Error("Assertion failed: The resolution should have been registered");const c=e.storedPackages.get(a);if(!c)throw new Error("Assertion failed: The package should have been registered");if(c.identHash!==t)continue;if(null===i){const e=d.stringifyLocator(r);o[e]={value:[r,B.Type.LOCATOR],children:n}}const g=d.stringifyLocator(c);n[g]={value:[{descriptor:s,locator:c},B.Type.DEPENDENT]}}}return i}(t,A,{configuration:e,peers:this.peers});le.emitTree(n,{configuration:e,stdout:this.context.stdout,json:this.json,separators:1})}}Je.usage=C.Command.Usage({description:"display the reason why a package is needed",details:'\n This command prints the exact reasons why a package appears in the dependency tree.\n\n If `-R,--recursive` is set, the listing will go in depth and will list, for each workspaces, what are all the paths that lead to the dependency. Note that the display is somewhat optimized in that it will not print the package listing twice for a single package, so if you see a leaf named "Foo" when looking for "Bar", it means that "Foo" already got printed higher in the tree.\n ',examples:[["Explain why lodash is used in your project","$0 why lodash"]]}),(0,a.gn)([C.Command.String()],Je.prototype,"package",void 0),(0,a.gn)([C.Command.Boolean("-R,--recursive",{description:"List, for each workspace, what are all the paths that lead to the dependency"})],Je.prototype,"recursive",void 0),(0,a.gn)([C.Command.Boolean("--json",{description:"Format the output as an NDJSON stream"})],Je.prototype,"json",void 0),(0,a.gn)([C.Command.Boolean("--peers",{description:"Also print the peer dependencies that match the specified name"})],Je.prototype,"peers",void 0),(0,a.gn)([C.Command.Path("why")],Je.prototype,"execute",null);class qe extends c.BaseCommand{constructor(){super(...arguments),this.verbose=!1,this.json=!1}async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins),{project:t}=await h.I.find(e,this.context.cwd);return(await p.Pk.start({configuration:e,json:this.json,stdout:this.context.stdout},async e=>{for(const r of t.workspaces){const{manifest:A}=r;let n;if(this.verbose){const e=new Set,r=new Set;for(const n of E.G.hardDependencies)for(const[o,i]of A.getForScope(n)){const A=t.tryWorkspaceByDescriptor(i);null===A?t.workspacesByIdent.has(o)&&r.add(i):e.add(A)}n={workspaceDependencies:Array.from(e).map(e=>e.relativeCwd),mismatchedWorkspaceDependencies:Array.from(r).map(e=>d.stringifyDescriptor(e))}}e.reportInfo(null,""+r.relativeCwd),e.reportJson({location:r.relativeCwd,name:A.name?d.stringifyIdent(A.name):null,...n})}})).exitCode()}}qe.usage=C.Command.Usage({category:"Workspace-related commands",description:"list all available workspaces",details:"\n This command will print the list of all workspaces in the project. If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\n "}),(0,a.gn)([C.Command.Boolean("-v,--verbose",{description:"Also return the cross-dependencies between workspaces"})],qe.prototype,"verbose",void 0),(0,a.gn)([C.Command.Boolean("--json",{description:"Format the output as an NDJSON stream"})],qe.prototype,"json",void 0),(0,a.gn)([C.Command.Path("workspaces","list")],qe.prototype,"execute",null);class ze extends C.Command{constructor(){super(...arguments),this.args=[]}async execute(){const e=await s.VK.find(this.context.cwd,this.context.plugins),{project:t,workspace:r}=await h.I.find(e,this.context.cwd);if(!r)throw new c.WorkspaceRequiredError(t.cwd,this.context.cwd);const A=t.workspaces,n=new Map(A.map(e=>{const t=d.convertToIdent(e.locator);return[d.stringifyIdent(t),e]})),o=n.get(this.workspaceName);if(void 0===o){const e=Array.from(n.keys()).sort();throw new C.UsageError(`Workspace '${this.workspaceName}' not found. Did you mean any of the following:\n - ${e.join("\n - ")}?`)}return this.cli.run([this.commandName,...this.args],{cwd:o.cwd})}}ze.usage=C.Command.Usage({category:"Workspace-related commands",description:"run a command within the specified workspace",details:"\n This command will run a given sub-command on a single workspace.\n ",examples:[["Add a package to a single workspace","yarn workspace components add -D react"],["Run build script on a single workspace","yarn workspace components run build"]]}),(0,a.gn)([C.Command.String()],ze.prototype,"workspaceName",void 0),(0,a.gn)([C.Command.String()],ze.prototype,"commandName",void 0),(0,a.gn)([C.Command.Proxy()],ze.prototype,"args",void 0),(0,a.gn)([C.Command.Path("workspace")],ze.prototype,"execute",null);const We={configuration:{enableImmutableInstalls:{description:"If true, prevents the install command from modifying the lockfile",type:s.a2.BOOLEAN,default:!1},defaultSemverRangePrefix:{description:"The default save prefix: '^', '~' or ''",type:s.a2.STRING,values:["^","~",""],default:o.CARET}},commands:[L,j,q,Ge,ve,we,qe,re,Ae,ne,ie,M,x,z,te,ae,ge,ue,de,Ce,fe,Le,Re,Pe,Me,Oe,Ue,Te,je,Ye,He,Je,ze]}},68023:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>E,fileUtils:()=>A});var A={};r.r(A),r.d(A,{makeArchiveFromLocator:()=>p,makeBufferFromLocator:()=>d,makeLocator:()=>h,makeSpec:()=>u,parseSpec:()=>l});var n=r(54143),o=r(46009);const i=/^(?:[a-zA-Z]:[\\/]|\.{0,2}\/)/,s=/^[^?]*\.(?:tar\.gz|tgz)(?:::.*)?$/;var a=r(73632),c=r(72785),g=r(75448);function l(e){const{params:t,selector:r}=n.parseRange(e),A=o.cS.toPortablePath(r);return{parentLocator:t&&"string"==typeof t.locator?n.parseLocator(t.locator):null,path:A}}function u({parentLocator:e,path:t,folderHash:r,protocol:A}){const o=null!==e?{locator:n.stringifyLocator(e)}:{},i=void 0!==r?{hash:r}:{};return n.makeRange({protocol:A,source:t,selector:t,params:{...i,...o}})}function h(e,{parentLocator:t,path:r,folderHash:A,protocol:o}){return n.makeLocator(e,u({parentLocator:t,path:r,folderHash:A,protocol:o}))}async function p(e,{protocol:t,fetchOptions:r,inMemory:A=!1}){const{parentLocator:i,path:s}=n.parseFileStyleRange(e.reference,{protocol:t}),l=o.y1.isAbsolute(s)?{packageFs:new g.M(o.LZ.root),prefixPath:o.LZ.dot,localPath:o.LZ.root}:await r.fetcher.fetch(i,r),u=l.localPath?{packageFs:new g.M(o.LZ.root),prefixPath:o.y1.relative(o.LZ.root,l.localPath)}:l;l!==u&&l.releaseFs&&l.releaseFs();const h=u.packageFs,p=o.y1.join(u.prefixPath,s);return await a.releaseAfterUseAsync(async()=>await c.makeArchiveFromDirectory(p,{baseFs:h,prefixPath:n.getIdentVendorPath(e),compressionLevel:r.project.configuration.get("compressionLevel"),inMemory:A}),u.releaseFs)}async function d(e,{protocol:t,fetchOptions:r}){return(await p(e,{protocol:t,fetchOptions:r,inMemory:!0})).getBufferAndClose()}var C=r(20624),f=r(32485),I=r(46611);const E={fetchers:[class{supports(e,t){return!!s.test(e.reference)&&!!e.reference.startsWith("file:")}getLocalPath(e,t){return null}async fetch(e,t){const r=t.checksums.get(e.locatorHash)||null,[A,o,i]=await t.cache.fetchPackageFromCache(e,r,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,n.prettyLocator(t.project.configuration,e)+" can't be found in the cache and will be fetched from the disk"),loader:()=>this.fetchFromDisk(e,t),skipIntegrityCheck:t.skipIntegrityCheck});return{packageFs:A,releaseFs:o,prefixPath:n.getIdentVendorPath(e),checksum:i}}async fetchFromDisk(e,t){const{parentLocator:r,path:A}=n.parseFileStyleRange(e.reference,{protocol:"file:"}),i=o.y1.isAbsolute(A)?{packageFs:new g.M(o.LZ.root),prefixPath:o.LZ.dot,localPath:o.LZ.root}:await t.fetcher.fetch(r,t),s=i.localPath?{packageFs:new g.M(o.LZ.root),prefixPath:o.y1.relative(o.LZ.root,i.localPath)}:i;i!==s&&i.releaseFs&&i.releaseFs();const l=s.packageFs,u=o.y1.join(s.prefixPath,A),h=await l.readFilePromise(u);return await a.releaseAfterUseAsync(async()=>await c.convertToZip(h,{compressionLevel:t.project.configuration.get("compressionLevel"),prefixPath:n.getIdentVendorPath(e),stripComponents:1}),s.releaseFs)}},class{supports(e,t){return!!e.reference.startsWith("file:")}getLocalPath(e,t){const{parentLocator:r,path:A}=n.parseFileStyleRange(e.reference,{protocol:"file:"});if(o.y1.isAbsolute(A))return A;const i=t.fetcher.getLocalPath(r,t);return null===i?null:o.y1.resolve(i,A)}async fetch(e,t){const r=t.checksums.get(e.locatorHash)||null,[A,o,i]=await t.cache.fetchPackageFromCache(e,r,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,n.prettyLocator(t.project.configuration,e)+" can't be found in the cache and will be fetched from the disk"),loader:()=>this.fetchFromDisk(e,t),skipIntegrityCheck:t.skipIntegrityCheck});return{packageFs:A,releaseFs:o,prefixPath:n.getIdentVendorPath(e),localPath:this.getLocalPath(e,t),checksum:i}}async fetchFromDisk(e,t){return p(e,{protocol:"file:",fetchOptions:t})}}],resolvers:[class{supportsDescriptor(e,t){return!!s.test(e.range)&&(!!e.range.startsWith("file:")||!!i.test(e.range))}supportsLocator(e,t){return!!s.test(e.reference)&&!!e.reference.startsWith("file:")}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,r){return i.test(e.range)&&(e=n.makeDescriptor(e,"file:"+e.range)),n.bindDescriptor(e,{locator:n.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,r){let A=e.range;return A.startsWith("file:")&&(A=A.slice("file:".length)),[n.makeLocator(e,"file:"+o.cS.toPortablePath(A))]}async getSatisfying(e,t,r){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");const r=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),A=await a.releaseAfterUseAsync(async()=>await I.G.find(r.prefixPath,{baseFs:r.packageFs}),r.releaseFs);return{...e,version:A.version||"0.0.0",languageName:t.project.configuration.get("defaultLanguageName"),linkType:f.Un.HARD,dependencies:A.dependencies,peerDependencies:A.peerDependencies,dependenciesMeta:A.dependenciesMeta,peerDependenciesMeta:A.peerDependenciesMeta,bin:A.bin}}},class{supportsDescriptor(e,t){return!!e.range.match(i)||!!e.range.startsWith("file:")}supportsLocator(e,t){return!!e.reference.startsWith("file:")}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,r){return i.test(e.range)&&(e=n.makeDescriptor(e,"file:"+e.range)),n.bindDescriptor(e,{locator:n.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");const{path:A,parentLocator:o}=l(e.range);if(null===o)throw new Error("Assertion failed: The descriptor should have been bound");const i=await d(n.makeLocator(e,n.makeRange({protocol:"file:",source:A,selector:A,params:{locator:n.stringifyLocator(o)}})),{protocol:"file:",fetchOptions:r.fetchOptions});return[h(e,{parentLocator:o,path:A,folderHash:C.makeHash("1",i).slice(0,6),protocol:"file:"})]}async getSatisfying(e,t,r){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");const r=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),A=await a.releaseAfterUseAsync(async()=>await I.G.find(r.prefixPath,{baseFs:r.packageFs}),r.releaseFs);return{...e,version:A.version||"0.0.0",languageName:t.project.configuration.get("defaultLanguageName"),linkType:f.Un.HARD,dependencies:A.dependencies,peerDependencies:A.peerDependencies,dependenciesMeta:A.dependenciesMeta,peerDependenciesMeta:A.peerDependenciesMeta,bin:A.bin}}}]}},75641:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>F,gitUtils:()=>A});var A={};r.r(A),r.d(A,{TreeishProtocols:()=>y,clone:()=>S,isGitUrl:()=>m,lsRemote:()=>b,normalizeLocator:()=>D,normalizeRepoUrl:()=>Q,resolveUrl:()=>v,splitRepoUrl:()=>w});var n=r(39922),o=r(54143),i=r(63088),s=r(73632),a=r(72785),c=r(43896),g=r(46009),l=r(79669),u=r(6220),h=r(71191),p=r.n(h),d=r(53887),C=r.n(d),f=r(78835),I=r.n(f);function E(){return{...process.env,GIT_SSH_COMMAND:"ssh -o BatchMode=yes"}}const B=[/^ssh:/,/^git(?:\+[^:]+)?:/,/^(?:git\+)?https?:[^#]+\/[^#]+(?:\.git)(?:#.*)?$/,/^git@[^#]+\/[^#]+\.git(?:#.*)?$/,/^(?:github:|https:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z._0-9-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\.git)?(?:#.*)?$/,/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/];var y;function m(e){return!!e&&B.some(t=>!!e.match(t))}function w(e){const t=(e=Q(e)).indexOf("#");if(-1===t)return{repo:e,treeish:{protocol:y.Head,request:"master"},extra:{}};const r=e.slice(0,t),A=e.slice(t+1);if(A.match(/^[a-z]+=/)){const e=p().parse(A);for(const[t,r]of Object.entries(e))if("string"!=typeof r)throw new Error(`Assertion failed: The ${t} parameter must be a literal string`);const t=Object.values(y).find(t=>Object.prototype.hasOwnProperty.call(e,t));let n,o;void 0!==t?(n=t,o=e[t]):(n=y.Head,o="master");for(const t of Object.values(y))delete e[t];return{repo:r,treeish:{protocol:n,request:o},extra:e}}{const e=A.indexOf(":");let t,n;return-1===e?(t=null,n=A):(t=A.slice(0,e),n=A.slice(e+1)),{repo:r,treeish:{protocol:t,request:n},extra:{}}}}function Q(e,{git:t=!1}={}){var r;if(e=(e=(e=e.replace(/^git\+https:/,"https:")).replace(/^(?:github:|https:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\.git)?(#.*)?$/,"https://github.com/$1/$2.git$3")).replace(/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/,"https://github.com/$1/$2.git#$3"),t){let t;e=e.replace(/^git\+([^:]+):/,"$1:");try{t=I().parse(e)}catch(e){t=null}t&&"ssh:"===t.protocol&&(null===(r=t.path)||void 0===r?void 0:r.startsWith("/:"))&&(e=e.replace(/^ssh:\/\//,""))}return e}function D(e){return o.makeLocator(e,Q(e.reference))}async function b(e,t){const r=Q(e,{git:!0});if(!l.getNetworkSettings(r,{configuration:t}).enableNetwork)throw new Error(`Request to '${r}' has been blocked because of your configuration settings`);let A;try{A=await u.execvp("git",["ls-remote","--refs",r],{cwd:t.startingCwd,env:E(),strict:!0})}catch(t){throw t.message=`Listing the refs for ${e} failed`,t}const n=new Map,o=/^([a-f0-9]{40})\t(refs\/[^\n]+)/gm;let i;for(;null!==(i=o.exec(A.stdout));)n.set(i[2],i[1]);return n}async function v(e,t){const{repo:r,treeish:{protocol:A,request:n},extra:o}=w(e),i=await b(r,t),s=(e,t)=>{switch(e){case y.Commit:if(!t.match(/^[a-f0-9]{40}$/))throw new Error("Invalid commit hash");return p().stringify({...o,commit:t});case y.Head:{const e=i.get("refs/heads/"+t);if(void 0===e)throw new Error(`Unknown head ("${t}")`);return p().stringify({...o,commit:e})}case y.Tag:{const e=i.get("refs/tags/"+t);if(void 0===e)throw new Error(`Unknown tag ("${t}")`);return p().stringify({...o,commit:e})}case y.Semver:{if(!C().validRange(t))throw new Error(`Invalid range ("${t}")`);const e=new Map([...i.entries()].filter(([e])=>e.startsWith("refs/tags/")).map(([e,t])=>[C().parse(e.slice(10)),t]).filter(e=>null!==e[0])),r=C().maxSatisfying([...e.keys()],t);if(null===r)throw new Error(`No matching range ("${t}")`);return p().stringify({...o,commit:e.get(r)})}case null:{let e;if(null!==(e=a(y.Commit,t)))return e;if(null!==(e=a(y.Tag,t)))return e;if(null!==(e=a(y.Head,t)))return e;throw t.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve "${t}" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve "${t}" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol ("${e}")`)}},a=(e,t)=>{try{return s(e,t)}catch(e){return null}};return`${r}#${s(A,n)}`}async function S(e,t){return await t.getLimit("cloneConcurrency")(async()=>{const{repo:r,treeish:{protocol:A,request:n}}=w(e);if("commit"!==A)throw new Error("Invalid treeish protocol when cloning");const o=Q(r,{git:!0});if(!1===l.getNetworkSettings(o,{configuration:t}).enableNetwork)throw new Error(`Request to '${o}' has been blocked because of your configuration settings`);const i=await c.xfs.mktempPromise(),s={cwd:i,env:E(),strict:!0};try{await u.execvp("git",["clone","-c core.autocrlf=false",o,g.cS.fromPortablePath(i)],s),await u.execvp("git",["checkout",""+n],s)}catch(e){throw e.message="Repository clone failed: "+e.message,e}return i})}!function(e){e.Commit="commit",e.Head="head",e.Tag="tag",e.Semver="semver"}(y||(y={}));var k=r(32485),N=r(46611);const F={configuration:{cloneConcurrency:{description:"Maximal number of concurrent clones",type:n.a2.NUMBER,default:2}},fetchers:[class{supports(e,t){return m(e.reference)}getLocalPath(e,t){return null}async fetch(e,t){const r=t.checksums.get(e.locatorHash)||null,A=D(e),n=new Map(t.checksums);n.set(A.locatorHash,r);const i={...t,checksums:n},s=await this.downloadHosted(A,i);if(null!==s)return s;const[a,c,g]=await t.cache.fetchPackageFromCache(e,r,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,o.prettyLocator(t.project.configuration,e)+" can't be found in the cache and will be fetched from the remote repository"),loader:()=>this.cloneFromRemote(A,i),skipIntegrityCheck:t.skipIntegrityCheck});return{packageFs:a,releaseFs:c,prefixPath:o.getIdentVendorPath(e),checksum:g}}async downloadHosted(e,t){return t.project.configuration.reduceHook(e=>e.fetchHostedRepository,null,e,t)}async cloneFromRemote(e,t){const r=await S(e.reference,t.project.configuration),A=w(e.reference),n=g.y1.join(r,"package.tgz");await i.prepareExternalProject(r,n,{configuration:t.project.configuration,report:t.report,workspace:A.extra.workspace});const l=await c.xfs.readFilePromise(n);return await s.releaseAfterUseAsync(async()=>await a.convertToZip(l,{compressionLevel:t.project.configuration.get("compressionLevel"),prefixPath:o.getIdentVendorPath(e),stripComponents:1}))}}],resolvers:[class{supportsDescriptor(e,t){return m(e.range)}supportsLocator(e,t){return m(e.reference)}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,r){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,r){const A=await v(e.range,r.project.configuration);return[o.makeLocator(e,A)]}async getSatisfying(e,t,r){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");const r=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),A=await s.releaseAfterUseAsync(async()=>await N.G.find(r.prefixPath,{baseFs:r.packageFs}),r.releaseFs);return{...e,version:A.version||"0.0.0",languageName:t.project.configuration.get("defaultLanguageName"),linkType:k.Un.HARD,dependencies:A.dependencies,peerDependencies:A.peerDependencies,dependenciesMeta:A.dependenciesMeta,peerDependenciesMeta:A.peerDependenciesMeta,bin:A.bin}}}]}},68126:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>d});var A=r(54143),n=r(79669),o=r(72785),i=r(63088),s=r(43896),a=r(75448),c=r(46009),g=r(75641),l=r(71191),u=r.n(l);const h=[/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+)\/tarball\/([^/#]+)(?:#(.*))?$/,/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+?)(?:\.git)?(?:#(.*))?$/];class p{supports(e,t){return!(!(r=e.reference)||!h.some(e=>!!r.match(e)));var r}getLocalPath(e,t){return null}async fetch(e,t){const r=t.checksums.get(e.locatorHash)||null,[n,o,i]=await t.cache.fetchPackageFromCache(e,r,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,A.prettyLocator(t.project.configuration,e)+" can't be found in the cache and will be fetched from GitHub"),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck});return{packageFs:n,releaseFs:o,prefixPath:A.getIdentVendorPath(e),checksum:i}}async fetchFromNetwork(e,t){const r=await n.get(this.getLocatorUrl(e,t),{configuration:t.project.configuration});return await s.xfs.mktempPromise(async n=>{const l=new a.M(n);await o.extractArchiveTo(r,l,{stripComponents:1});const u=g.gitUtils.splitRepoUrl(e.reference),h=c.y1.join(n,"package.tgz");await i.prepareExternalProject(n,h,{configuration:t.project.configuration,report:t.report,workspace:u.extra.workspace});const p=await s.xfs.readFilePromise(h);return await o.convertToZip(p,{compressionLevel:t.project.configuration.get("compressionLevel"),prefixPath:A.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,t){const{auth:r,username:A,reponame:n,treeish:o}=function(e){let t;for(const r of h)if(t=e.match(r),t)break;if(!t)throw new Error(`Input cannot be parsed as a valid GitHub URL ('${e}').`);let[,r,A,n,o="master"]=t;const{commit:i}=u().parse(o);return o=i||o.replace(/[^:]*:/,""),{auth:r,username:A,reponame:n,treeish:o}}(e.reference);return`https://${r?r+"@":""}github.com/${A}/${n}/archive/${o}.tar.gz`}}const d={hooks:{async fetchHostedRepository(e,t,r){if(null!==e)return e;const A=new p;if(!A.supports(t,r))return null;try{return await A.fetch(t,r)}catch(e){return null}}}}},99148:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>l});var A=r(54143),n=r(79669),o=r(72785);const i=/^[^?]*\.(?:tar\.gz|tgz)(?:\?.*)?$/,s=/^https?:/;var a=r(46611),c=r(32485),g=r(73632);const l={fetchers:[class{supports(e,t){return!!i.test(e.reference)&&!!s.test(e.reference)}getLocalPath(e,t){return null}async fetch(e,t){const r=t.checksums.get(e.locatorHash)||null,[n,o,i]=await t.cache.fetchPackageFromCache(e,r,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,A.prettyLocator(t.project.configuration,e)+" can't be found in the cache and will be fetched from the remote server"),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck});return{packageFs:n,releaseFs:o,prefixPath:A.getIdentVendorPath(e),checksum:i}}async fetchFromNetwork(e,t){const r=await n.get(e.reference,{configuration:t.project.configuration});return await o.convertToZip(r,{compressionLevel:t.project.configuration.get("compressionLevel"),prefixPath:A.getIdentVendorPath(e),stripComponents:1})}}],resolvers:[class{supportsDescriptor(e,t){return!!i.test(e.range)&&!!s.test(e.range)}supportsLocator(e,t){return!!i.test(e.reference)&&!!s.test(e.reference)}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,r){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,r){return[A.convertDescriptorToLocator(e)]}async getSatisfying(e,t,r){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");const r=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),A=await g.releaseAfterUseAsync(async()=>await a.G.find(r.prefixPath,{baseFs:r.packageFs}),r.releaseFs);return{...e,version:A.version||"0.0.0",languageName:t.project.configuration.get("defaultLanguageName"),linkType:c.Un.HARD,dependencies:A.dependencies,peerDependencies:A.peerDependencies,dependenciesMeta:A.dependenciesMeta,peerDependenciesMeta:A.peerDependenciesMeta,bin:A.bin}}}]}},64314:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>I});var A=r(39922),n=r(36370),o=r(25413),i=r(46611),s=r(85824),a=r(6220),c=r(63088),g=r(54143),l=r(43896),u=r(46009),h=r(40822),p=r(80305),d=r.n(p),C=r(31669);class f extends o.BaseCommand{constructor(){super(...arguments),this.usev2=!1,this.assumeFreshProject=!1,this.yes=!1,this.private=!1,this.workspace=!1,this.install=!1}async execute(){if(l.xfs.existsSync(u.y1.join(this.context.cwd,i.G.fileName)))throw new h.UsageError("A package.json already exists in the specified directory");const e=await A.VK.find(this.context.cwd,this.context.plugins),t=this.install?!0===this.install?"latest":this.install:null;return null!==t?await this.executeProxy(e,t):await this.executeRegular(e)}async executeProxy(e,t){if(null!==e.get("yarnPath"))throw new h.UsageError(`Cannot use the --install flag when the current directory already uses yarnPath (from ${e.sources.get("yarnPath")})`);if(null!==e.projectCwd)throw new h.UsageError("Cannot use the --install flag when the current directory is already part of a project");l.xfs.existsSync(this.context.cwd)||await l.xfs.mkdirPromise(this.context.cwd,{recursive:!0});const r=u.y1.join(this.context.cwd,e.get("lockfileFilename"));l.xfs.existsSync(r)||await l.xfs.writeFilePromise(r,"");const A=await this.cli.run(["set","version",t]);if(0!==A)return A;this.context.stdout.write("\n");const n=["--assume-fresh-project"];return this.private&&n.push("-p"),this.workspace&&n.push("-w"),this.yes&&n.push("-y"),await l.xfs.mktempPromise(async e=>{const{code:t}=await a.pipevp("yarn",["init",...n],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await c.makeScriptEnv({binFolder:e})});return t})}async executeRegular(e){let t=null;if(!this.assumeFreshProject)try{t=await s.I.find(e,this.context.cwd)}catch(e){t=null}l.xfs.existsSync(this.context.cwd)||await l.xfs.mkdirPromise(this.context.cwd,{recursive:!0});const r=new i.G,A=Object.fromEntries(e.get("initFields").entries());r.load(A),r.name=g.makeIdent(e.get("initScope"),u.y1.basename(this.context.cwd)),r.version=e.get("initVersion"),r.private=this.private||this.workspace,r.license=e.get("initLicense"),this.workspace&&(await l.xfs.mkdirPromise(u.y1.join(this.context.cwd,"packages"),{recursive:!0}),r.workspaceDefinitions=[{pattern:"packages/*"}]);const n={};r.exportTo(n),C.inspect.styles.name="cyan",this.context.stdout.write((0,C.inspect)(n,{depth:1/0,colors:!0,compact:!1})+"\n");const o=u.y1.join(this.context.cwd,i.G.fileName);await l.xfs.changeFilePromise(o,JSON.stringify(n,null,2)+"\n");const c=u.y1.join(this.context.cwd,"README.md");if(l.xfs.existsSync(c)||await l.xfs.writeFilePromise(c,`# ${g.stringifyIdent(r.name)}\n`),!t){const t=u.y1.join(this.context.cwd,u.QS.lockfile);await l.xfs.writeFilePromise(t,"");const r=["/.yarn/** linguist-vendored"].map(e=>e+"\n").join(""),A=u.y1.join(this.context.cwd,".gitattributes");l.xfs.existsSync(A)||await l.xfs.writeFilePromise(A,r);const n=["/.yarn/*","!/.yarn/releases","!/.yarn/plugins","!/.yarn/sdks","","# Swap the comments on the following lines if you don't wish to use zero-installs","# Documentation here: https://yarnpkg.com/features/zero-installs","!/.yarn/cache","#/.pnp.*"].map(e=>e+"\n").join(""),o=u.y1.join(this.context.cwd,".gitignore");l.xfs.existsSync(o)||await l.xfs.writeFilePromise(o,n);const i={"*":{endOfLine:"lf",insertFinalNewline:!0},"*.{js,json,.yml}":{charset:"utf-8",indentStyle:"space",indentSize:2}};d()(i,e.get("initEditorConfig"));let s="root = true\n";for(const[e,t]of Object.entries(i)){s+=`\n[${e}]\n`;for(const[e,r]of Object.entries(t)){s+=`${e.replace(/[A-Z]/g,e=>"_"+e.toLowerCase())} = ${r}\n`}}const c=u.y1.join(this.context.cwd,".editorconfig");l.xfs.existsSync(c)||await l.xfs.writeFilePromise(c,s),await a.execvp("git",["init"],{cwd:this.context.cwd})}}}f.usage=h.Command.Usage({description:"create a new package",details:"\n This command will setup a new package in your local directory.\n\n If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\n\n If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\n\n If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\n\n The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\n ",examples:[["Create a new package in the local directory","yarn init"],["Create a new private package in the local directory","yarn init -p"],["Create a new package and store the Yarn release inside","yarn init -i latest"],["Create a new private package and defines it as a workspace root","yarn init -w"]]}),(0,n.gn)([h.Command.Boolean("-2",{hidden:!0})],f.prototype,"usev2",void 0),(0,n.gn)([h.Command.Boolean("--assume-fresh-project",{hidden:!0})],f.prototype,"assumeFreshProject",void 0),(0,n.gn)([h.Command.Boolean("-y,--yes",{hidden:!0})],f.prototype,"yes",void 0),(0,n.gn)([h.Command.Boolean("-p,--private",{description:"Initialize a private package"})],f.prototype,"private",void 0),(0,n.gn)([h.Command.Boolean("-w,--workspace",{description:"Initialize a private workspace root with a `packages/` directory"})],f.prototype,"workspace",void 0),(0,n.gn)([h.Command.String("-i,--install",{tolerateBoolean:!0,description:"Initialize a package with a specific bundle that will be locked in the project"})],f.prototype,"install",void 0),(0,n.gn)([h.Command.Path("init")],f.prototype,"execute",null);const I={configuration:{initLicense:{description:"License used when creating packages via the init command",type:A.a2.STRING,default:null},initScope:{description:"Scope used when creating packages via the init command",type:A.a2.STRING,default:null},initVersion:{description:"Version used when creating packages via the init command",type:A.a2.STRING,default:null},initFields:{description:"Additional fields to set when creating packages via the init command",type:A.a2.MAP,valueDefinition:{description:"",type:A.a2.ANY}},initEditorConfig:{description:"Extra rules to define in the generator editorconfig",type:A.a2.MAP,valueDefinition:{description:"",type:A.a2.ANY}}},commands:[f]}},92994:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>g});var A=r(54143),n=r(46009),o=r(75448),i=r(10489);var s=r(46611),a=r(32485),c=r(73632);const g={fetchers:[class{supports(e,t){return!!e.reference.startsWith("link:")}getLocalPath(e,t){const{parentLocator:r,path:o}=A.parseFileStyleRange(e.reference,{protocol:"link:"});if(n.y1.isAbsolute(o))return o;const i=t.fetcher.getLocalPath(r,t);return null===i?null:n.y1.resolve(i,o)}async fetch(e,t){const{parentLocator:r,path:s}=A.parseFileStyleRange(e.reference,{protocol:"link:"}),a=n.y1.isAbsolute(s)?{packageFs:new o.M(n.LZ.root),prefixPath:n.LZ.dot,localPath:n.LZ.root}:await t.fetcher.fetch(r,t),c=a.localPath?{packageFs:new o.M(n.LZ.root),prefixPath:n.y1.relative(n.LZ.root,a.localPath)}:a;a!==c&&a.releaseFs&&a.releaseFs();const g=c.packageFs,l=n.y1.join(c.prefixPath,s);return a.localPath?{packageFs:new o.M(l,{baseFs:g}),releaseFs:c.releaseFs,prefixPath:n.LZ.dot,discardFromLookup:!0,localPath:l}:{packageFs:new i.n(l,{baseFs:g}),releaseFs:c.releaseFs,prefixPath:n.LZ.dot,discardFromLookup:!0}}},class{supports(e,t){return!!e.reference.startsWith("portal:")}getLocalPath(e,t){const{parentLocator:r,path:o}=A.parseFileStyleRange(e.reference,{protocol:"portal:"});if(n.y1.isAbsolute(o))return o;const i=t.fetcher.getLocalPath(r,t);return null===i?null:n.y1.resolve(i,o)}async fetch(e,t){const{parentLocator:r,path:s}=A.parseFileStyleRange(e.reference,{protocol:"portal:"}),a=n.y1.isAbsolute(s)?{packageFs:new o.M(n.LZ.root),prefixPath:n.LZ.dot,localPath:n.LZ.root}:await t.fetcher.fetch(r,t),c=a.localPath?{packageFs:new o.M(n.LZ.root),prefixPath:n.y1.relative(n.LZ.root,a.localPath)}:a;a!==c&&a.releaseFs&&a.releaseFs();const g=c.packageFs,l=n.y1.join(c.prefixPath,s);return a.localPath?{packageFs:new o.M(l,{baseFs:g}),releaseFs:c.releaseFs,prefixPath:n.LZ.dot,localPath:l}:{packageFs:new i.n(l,{baseFs:g}),releaseFs:c.releaseFs,prefixPath:n.LZ.dot}}}],resolvers:[class{supportsDescriptor(e,t){return!!e.range.startsWith("link:")}supportsLocator(e,t){return!!e.reference.startsWith("link:")}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,r){return A.bindDescriptor(e,{locator:A.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,r){const o=e.range.slice("link:".length);return[A.makeLocator(e,"link:"+n.cS.toPortablePath(o))]}async getSatisfying(e,t,r){return null}async resolve(e,t){return{...e,version:"0.0.0",languageName:t.project.configuration.get("defaultLanguageName"),linkType:a.Un.SOFT,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}},class{supportsDescriptor(e,t){return!!e.range.startsWith("portal:")}supportsLocator(e,t){return!!e.reference.startsWith("portal:")}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,r){return A.bindDescriptor(e,{locator:A.stringifyLocator(t)})}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,r){const o=e.range.slice("portal:".length);return[A.makeLocator(e,"portal:"+n.cS.toPortablePath(o))]}async getSatisfying(e,t,r){return null}async resolve(e,t){if(!t.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");const r=await t.fetchOptions.fetcher.fetch(e,t.fetchOptions),A=await c.releaseAfterUseAsync(async()=>await s.G.find(r.prefixPath,{baseFs:r.packageFs}),r.releaseFs);return{...e,version:A.version||"0.0.0",languageName:t.project.configuration.get("defaultLanguageName"),linkType:a.Un.SOFT,dependencies:new Map([...A.dependencies,...A.devDependencies]),peerDependencies:A.peerDependencies,dependenciesMeta:A.dependenciesMeta,peerDependenciesMeta:A.peerDependenciesMeta,bin:A.bin}}}]}},8375:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>ne,getPnpPath:()=>Ae});var A,n=r(39922),o=r(46009),i=r(54143);!function(e){e[e.YES=0]="YES",e[e.NO=1]="NO",e[e.DEPENDS=2]="DEPENDS"}(A||(A={}));const s=(e,t)=>`${e}@${t}`,a=(e,t)=>{const r=t.indexOf("#"),A=r>=0?t.substring(r+1):t;return s(e,A)};var c;!function(e){e[e.NONE=-1]="NONE",e[e.PERF=0]="PERF",e[e.CHECK=1]="CHECK",e[e.REASONS=2]="REASONS",e[e.INTENSIVE_CHECK=9]="INTENSIVE_CHECK"}(c||(c={}));const g=(e,t)=>{if(t.decoupled)return t;const{name:r,references:A,ident:n,locator:o,dependencies:i,originalDependencies:s,hoistedDependencies:a,peerNames:c,reasons:g,isHoistBorder:l}=t,u={name:r,references:new Set(A),ident:n,locator:o,dependencies:new Map(i),originalDependencies:new Map(s),hoistedDependencies:new Map(a),peerNames:new Set(c),reasons:new Map(g),decoupled:!0,isHoistBorder:l},h=u.dependencies.get(r);return h&&h.ident==u.ident&&u.dependencies.set(r,u),e.dependencies.set(u.name,u),u},l=e=>{const t=new Set,r=(A,n=new Set)=>{if(!n.has(A)){n.add(A);for(const o of A.peerNames)if(!e.peerNames.has(o)){const A=e.dependencies.get(o);A&&!t.has(A)&&r(A,n)}t.add(A)}};for(const t of e.dependencies.values())e.peerNames.has(t.name)||r(t);return t},u=(e,t,r,A,n=new Set)=>{const o=t[t.length-1];if(n.has(o))return;n.add(o);const i=((e,t)=>{const r=new Map([[e.name,[e.ident]]]);for(const t of e.dependencies.values())e.peerNames.has(t.name)||r.set(t.name,[t.ident]);const A=Array.from(t.keys());A.sort((e,r)=>{const A=t.get(e),n=t.get(r);return n.peerDependents.size!==A.peerDependents.size?n.peerDependents.size-A.peerDependents.size:n.dependents.size-A.dependents.size});for(const t of A){const A=t.substring(0,t.indexOf("@",1)),n=t.substring(A.length+1);if(!e.peerNames.has(A)){let e=r.get(A);e||(e=[],r.set(A,e)),e.indexOf(n)<0&&e.push(n)}}return r})(o,E(o)),s=new Map(Array.from(i.entries()).map(([e,t])=>[e,t[0]])),a=o===e?new Map:(e=>{const t=new Map,r=new Set,A=n=>{if(!r.has(n)){r.add(n);for(const r of n.hoistedDependencies.values())e.dependencies.has(r.name)||t.set(r.name,r);for(const e of n.dependencies.values())n.peerNames.has(e.name)||A(e)}};return A(e),t})(o);let c;do{p(e,t,r,a,s,i,A),c=!1;for(const[e,t]of i)t.length>1&&!o.dependencies.has(e)&&(s.delete(e),t.shift(),s.set(e,t[0]),c=!0)}while(c);for(const n of o.dependencies.values())o.peerNames.has(n.name)||r.has(n.locator)||(r.add(n.locator),u(e,[...t,n],r,A),r.delete(n.locator))},h=(e,t,r,n,o,i,{outputReason:s})=>{let a,c=null,g=new Set;s&&(a=""+Array.from(e).map(e=>B(e)).join("→"));const l=t[t.length-1],u=r.ident===l.ident,h=o.get(r.name);let p=h===r.ident&&!u;if(s&&!p&&h&&!u&&(c=`- filled by: ${B(i.get(r.name)[0])} at ${a}`),p){let e=!1;const A=n.get(r.name);if(e=!A||A.ident===r.ident,s&&!e&&(c=`- filled by: ${B(A.locator)} at ${a}`),e)for(let A=1;A=1;r--){const n=t[r];for(const o of A){if(n.peerNames.has(o)&&n.originalDependencies.has(o))continue;const i=n.dependencies.get(o);i&&(r===t.length-1?g.add(i):(g=null,e=!1,s&&(c=`- peer dependency ${B(i.locator)} from parent ${B(n.locator)} was not hoisted to ${a}`))),A.delete(o)}if(!e)break}p=e}return null!==g&&g.size>0?{isHoistable:A.DEPENDS,dependsOn:g,reason:c}:{isHoistable:p?A.YES:A.NO,reason:c}},p=(e,t,r,n,o,i,s)=>{const a=t[t.length-1],u=new Set,p=(t,C,I,E)=>{if(u.has(I))return;const m=[...C,I.locator],w=new Map,Q=new Map;for(const e of l(I)){let g=null;if(g||(g=h(r,[a,...t,I],e,n,o,i,{outputReason:s.debugLevel>=c.REASONS})),Q.set(e,g),g.isHoistable===A.DEPENDS)for(const t of g.dependsOn){const r=w.get(t.name)||new Set;r.add(e.name),w.set(t.name,r)}}const D=new Set,b=(e,t,r)=>{if(!D.has(e)){D.add(e),e.ident!==I.ident&&Q.set(e,{isHoistable:A.NO,reason:r});for(const A of w.get(e.name)||[])b(I.dependencies.get(A),t,r)}};let v;s.debugLevel>=c.REASONS&&(v=""+Array.from(r).map(e=>B(e)).join("→"));for(const[e,t]of Q)t.isHoistable===A.NO&&b(e,t,`- peer dependency ${B(e.locator)} from parent ${B(I.locator)} was not hoisted to ${v}`);for(const e of Q.keys())if(!D.has(e)){I.dependencies.delete(e.name),I.hoistedDependencies.set(e.name,e),I.reasons.delete(e.name);const t=a.dependencies.get(e.name);if(t)for(const r of e.references)t.references.add(r);else a.ident!==e.ident&&(a.dependencies.set(e.name,e),E.add(e))}if(s.check){const r=d(e);if(r)throw new Error(`${r}, after hoisting dependencies of ${[a,...t,I].map(e=>B(e.locator)).join("→")}:\n${y(e)}`)}const S=l(I);for(const e of S)if(D.has(e)&&m.indexOf(e.locator)<0){const r=Q.get(e);if(r.isHoistable!==A.YES&&I.reasons.set(e.name,r.reason),!e.isHoistBorder){u.add(I);const r=g(I,e);p([...t,I],[...C,I.locator],r,f),u.delete(I)}}};let C,f=new Set(l(a));do{C=f,f=new Set;for(const e of C){if(e.locator===a.locator||e.isHoistBorder)continue;const t=g(a,e);p([],Array.from(r),t,f)}}while(f.size>0)},d=e=>{const t=[],r=new Set,A=new Set,n=(e,o)=>{if(r.has(e))return;if(r.add(e),A.has(e))return;const i=new Map(o);for(const t of e.dependencies.values())e.peerNames.has(t.name)||i.set(t.name,t);for(const r of e.originalDependencies.values()){const n=i.get(r.name),s=()=>""+Array.from(A).concat([e]).map(e=>B(e.locator)).join("→");if(e.peerNames.has(r.name)){const e=o.get(r.name);e===n&&e&&e.ident===r.ident||t.push(`${s()} - broken peer promise: expected ${r.ident} but found ${e?e.ident:e}`)}else n?n.ident!==r.ident&&t.push(`${s()} - broken require promise for ${r.name}: expected ${r.ident}, but found: ${n.ident}`):t.push(`${s()} - broken require promise: no required dependency ${r.locator} found`)}A.add(e);for(const t of e.dependencies.values())e.peerNames.has(t.name)||n(t,i);A.delete(e)};return n(e,e.dependencies),t.join("\n")},C=(e,t)=>{const{identName:r,name:A,reference:n,peerNames:o}=e,i={name:A,references:new Set([n]),locator:s(r,n),ident:a(r,n),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(o),reasons:new Map,decoupled:!0,isHoistBorder:!0},c=new Map([[e,i]]),g=(e,r)=>{let A=c.get(e);const n=!!A;if(!A){const{name:n,identName:o,reference:i,peerNames:g}=e,l=t.hoistingLimits.get(r.locator);A={name:n,references:new Set([i]),locator:s(o,i),ident:a(o,i),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(g),reasons:new Map,decoupled:!0,isHoistBorder:!!l&&l.has(n)},c.set(e,A)}if(r.dependencies.set(e.name,A),r.originalDependencies.set(e.name,A),n){const e=new Set,t=r=>{if(!e.has(r)){e.add(r),r.decoupled=!1;for(const e of r.dependencies.values())r.peerNames.has(e.name)||t(e)}};t(A)}else for(const t of e.dependencies)g(t,A)};for(const t of e.dependencies)g(t,i);return i},f=e=>e.substring(0,e.indexOf("@",1)),I=e=>{const t={name:e.name,identName:f(e.locator),references:new Set(e.references),dependencies:new Set},r=new Set([e]),A=(e,t,n)=>{const o=r.has(e);let i;if(t===e)i=n;else{const{name:t,references:r,locator:A}=e;i={name:t,identName:f(A),references:r,dependencies:new Set}}if(n.dependencies.add(i),!o){r.add(e);for(const t of e.dependencies.values())e.peerNames.has(t.name)||A(t,e,i);r.delete(e)}};for(const r of e.dependencies.values())A(r,e,t);return t},E=e=>{const t=new Map,r=new Set([e]),A=e=>{const r=(e=>`${e.name}@${e.ident}`)(e);let A=t.get(r);return A||(A={dependents:new Set,peerDependents:new Set},t.set(r,A)),A},n=(e,t)=>{const o=!!r.has(t);if(A(t).dependents.add(e.ident),!o){r.add(t);for(const e of t.dependencies.values())if(t.peerNames.has(e.name)){A(e).peerDependents.add(t.ident)}else n(t,e)}};for(const t of e.dependencies.values())e.peerNames.has(t.name)||n(e,t);return t},B=e=>{const t=e.indexOf("@",1),r=e.substring(0,t),A=e.substring(t+1);if("workspace:."===A)return".";if(A){const e=(A.indexOf("#")>0?A.split("#")[1]:A).replace("npm:","");return A.startsWith("virtual")?`v:${r}@${e}`:`${r}@${e}`}return""+r},y=e=>{let t=0;const r=(e,A,n="")=>{if(t>5e4||A.has(e))return"";t++;const o=Array.from(e.dependencies.values());let i="";A.add(e);for(let t=0;t":"")+(c!==s.name?`a:${s.name}:`:"")+B(s.locator)+(a?" "+a:"")}\n`,i+=r(s,A,`${n}${t5e4?"\nTree is too large, part of the tree has been dunped\n":"")};var m,w;!function(e){e.HARD="HARD",e.SOFT="SOFT"}(m||(m={})),function(e){e.WORKSPACES="workspaces",e.DEPENDENCIES="dependencies",e.NONE="none"}(w||(w={}));const Q=(e,t)=>{const{packageTree:r,hoistingLimits:A}=b(e,t),n=((e,t={})=>{const r=t.debugLevel||Number(process.env.NM_DEBUG_LEVEL||c.NONE),A={check:t.check||r>=c.INTENSIVE_CHECK,debugLevel:r,hoistingLimits:t.hoistingLimits||new Map};A.debugLevel>=c.PERF&&console.time("hoist");const n=C(e,A);if(u(n,[n],new Set([n.locator]),A),A.debugLevel>=c.PERF&&console.timeEnd("hoist"),A.debugLevel>=c.CHECK){const e=d(n);if(e)throw new Error(`${e}, after hoisting finished:\n${y(n)}`)}return A.debugLevel>=c.REASONS&&console.log(y(n)),I(n)})(r,{hoistingLimits:A});return v(e,n,t)},D=e=>`${e.name}@${e.reference}`;const b=(e,t)=>{const r=e.getDependencyTreeRoots(),A=new Map,n=new Map,s=e.getPackageInformation(e.topLevel);if(null===s)throw new Error("Assertion failed: Expected the top-level package to have been registered");const a=e.findPackageLocator(s.packageLocation);if(null===a)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");const c=o.cS.toPortablePath(s.packageLocation),g=D(a);if(t.project){const e={children:new Map},r=t.project.cwd.split(o.y1.sep);for(const[A,n]of t.project.workspacesByCwd){const t=A.split(o.y1.sep).slice(r.length);let s=e;for(const e of t){let t=s.children.get(e);t||(t={children:new Map},s.children.set(e,t)),s=t}s.workspaceLocator={name:i.stringifyIdent(n.anchoredLocator),reference:n.anchoredLocator.reference}}const A=(e,t)=>{if(e.workspaceLocator){const r=D(t);let A=n.get(r);A||(A=new Set,n.set(r,A)),A.add(e.workspaceLocator)}for(const r of e.children.values())A(r,e.workspaceLocator||t)};for(const t of e.children.values())A(t,e.workspaceLocator)}else for(const e of r)if(e.name!==a.name||e.reference!==a.reference){let t=n.get(g);t||(t=new Set,n.set(g,t)),t.add(e)}const l={name:a.name,identName:a.name,reference:a.reference,peerNames:s.packagePeers,dependencies:new Set},u=new Map,h=(r,s,g,p,d,C,f)=>{var I,E;const B=((e,t)=>`${D(t)}:${e}`)(r,g);let y=u.get(B);const m=!!y;if(m||g.name!==a.name||g.reference!==a.reference||(y=l,u.set(B,l)),y||(y={name:r,identName:g.name,reference:g.reference,dependencies:new Set,peerNames:s.packagePeers},u.set(B,y)),f){const e=D({name:p.identName,reference:p.reference}),t=A.get(e)||new Set;A.set(e,t),t.add(y.name)}const Q=new Map(s.packageDependencies);if(t.project){const e=t.project.workspacesByCwd.get(o.cS.toPortablePath(s.packageLocation.slice(0,-1)));if(e){const t=new Set([...Array.from(e.manifest.peerDependencies.values(),e=>i.stringifyIdent(e)),...Array.from(e.manifest.peerDependenciesMeta.keys())]);for(const e of t)Q.has(e)||(Q.set(e,d.get(e)||null),y.peerNames.add(e))}}const b=D(g),v=n.get(b);if(v)for(const e of v)Q.set(e.name+"$wsroot$",e.reference);p.dependencies.add(y);const S=t.pnpifyFs||!function(e){let t=i.parseDescriptor(e);return i.isVirtualDescriptor(t)&&(t=i.devirtualizeDescriptor(t)),t.range.startsWith("portal:")}(B);if(!m&&S)for(const[r,A]of Q)if(null!==A){const n=e.getLocator(r,A),i=e.getLocator(r.replace("$wsroot$",""),A),s=e.getPackageInformation(i);if(null===s)throw new Error("Assertion failed: Expected the package to have been registered");const a=null===(I=t.hoistingLimitsByCwd)||void 0===I?void 0:I.get(C),g=o.y1.relative(c,o.cS.toPortablePath(s.packageLocation))||o.LZ.dot,l=null===(E=t.hoistingLimitsByCwd)||void 0===E?void 0:E.get(g),u=a===w.DEPENDENCIES||l===w.DEPENDENCIES||l===w.WORKSPACES;h(r,s,n,y,Q,g,u)}};return h(a.name,s,a,l,s.packageDependencies,o.LZ.dot,!1),{packageTree:l,hoistingLimits:A}};const v=(e,t,r)=>{const A=new Map,n=(t,A)=>{const{linkType:n,target:i}=function(e,t,r){const A=t.getLocator(e.name.replace("$wsroot$",""),e.reference),n=t.getPackageInformation(A);if(null===n)throw new Error("Assertion failed: Expected the package to be registered");let i,s;if(r.pnpifyFs)s=o.cS.toPortablePath(n.packageLocation),i=m.SOFT;else{const r=t.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?t.resolveVirtual(n.packageLocation):n.packageLocation;s=o.cS.toPortablePath(r||n.packageLocation),i=n.linkType}return{linkType:i,target:s}}(t,e,r);return{locator:D(t),target:i,linkType:n,aliases:A}},s=e=>{const[t,r]=e.split("/");return r?{scope:(0,o.Zu)(t),name:(0,o.Zu)(r)}:{scope:null,name:(0,o.Zu)(t)}},a=new Set,c=(e,t)=>{if(!a.has(e)){a.add(e);for(const r of e.dependencies){if(r===e||e.identName.endsWith("$wsroot$")&&r.identName===e.identName.replace("$wsroot$",""))continue;const a=Array.from(r.references).sort(),g={name:r.identName,reference:a[0]},{name:l,scope:u}=s(r.name),h=u?[u,l]:[l],p=o.y1.join(t,"node_modules"),d=o.y1.join(p,...h),C=n(g,a.slice(1));if(!r.name.endsWith("$wsroot$")){const e=A.get(d);if(e){if(e.dirList)throw new Error(`Assertion failed: ${d} cannot merge dir node with leaf node`);{const t=i.parseLocator(e.locator),r=i.parseLocator(C.locator);if(e.linkType!==C.linkType)throw new Error(`Assertion failed: ${d} cannot merge nodes with different link types`);if(t.identHash!==r.identHash)throw new Error(`Assertion failed: ${d} cannot merge nodes with different idents ${i.stringifyLocator(t)} and ${i.stringifyLocator(r)}`);C.aliases=[...C.aliases,...e.aliases,i.parseLocator(e.locator).reference]}}A.set(d,C);const t=d.split("/"),r=t.indexOf("node_modules");let n=t.length-1;for(;r>=0&&n>r;){const e=o.cS.toPortablePath(t.slice(0,n).join(o.y1.sep)),r=(0,o.Zu)(t[n]),i=A.get(e);if(i){if(i.dirList){if(i.dirList.has(r))break;i.dirList.add(r)}}else A.set(e,{dirList:new Set([r])});n--}}c(r,C.linkType===m.SOFT?C.target:d)}}},g=n({name:t.name,reference:Array.from(t.references)[0]},[]),l=g.target;return A.set(l,g),c(t,l),A};var S=r(92659),k=r(32485),N=r(73632),F=r(46611),K=r(35691),M=r(43896),R=r(17674),x=r(53660),L=r(65281),P=r(11640),O=r(83228),U=r(58069),T=r.n(U),j=r(40822),Y=r(35747),G=r.n(Y);const H="node_modules";class J{constructor(e){this.opts=e,this.localStore=new Map,this.customData={store:new Map}}getCustomDataKey(){return JSON.stringify({name:"NodeModulesInstaller",version:1})}attachCustomData(e){this.customData=e}async installPackage(e,t){var r;const A=o.y1.resolve(t.packageFs.getRealPath(),t.prefixPath);let n=this.customData.store.get(e.locatorHash);if(void 0===n&&(n=await async function(e,t){var r;const A=null!==(r=await F.G.tryFind(t.prefixPath,{baseFs:t.packageFs}))&&void 0!==r?r:new F.G,n=new Set(["preinstall","install","postinstall"]);for(const e of A.scripts.keys())n.has(e)||A.scripts.delete(e);return{manifest:{bin:A.bin,os:A.os,cpu:A.cpu,scripts:A.scripts},misc:{extractHint:O.jsInstallUtils.getExtractHint(t),hasBindingGyp:O.jsInstallUtils.hasBindingGyp(t)}}}(0,t),e.linkType===k.Un.HARD&&this.customData.store.set(e.locatorHash,n)),!O.jsInstallUtils.checkAndReportManifestCompatibility(e,n,"link",{configuration:this.opts.project.configuration,report:this.opts.report}))return{packageLocation:null,buildDirective:null};const s=new Map,a=new Set;if(s.has(i.stringifyIdent(e))||s.set(i.stringifyIdent(e),e.reference),i.isVirtualLocator(e))for(const t of e.peerDependencies.values())s.set(i.stringifyIdent(t),null),a.add(i.stringifyIdent(t));const c={packageLocation:o.cS.fromPortablePath(A)+"/",packageDependencies:s,packagePeers:a,linkType:e.linkType,discardFromLookup:null!==(r=t.discardFromLookup)&&void 0!==r&&r};return this.localStore.set(e.locatorHash,{pkg:e,customPackageData:n,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:c}),{packageLocation:A,buildDirective:null}}async attachInternalDependencies(e,t){const r=this.localStore.get(e.locatorHash);if(void 0===r)throw new Error("Assertion failed: Expected information object to have been registered");for(const[e,A]of t){const t=i.areIdentsEqual(e,A)?A.reference:[i.requirableIdent(A),A.reference];r.pnpNode.packageDependencies.set(i.requirableIdent(e),t)}}async attachExternalDependents(e,t){throw new Error("External dependencies haven't been implemented for the node-modules linker")}async finalizeInstall(){if("node-modules"!==this.opts.project.configuration.get("nodeLinker"))return;const e=new R.p({baseFs:new x.A({libzip:await(0,L.getLibzipPromise)(),maxOpenFiles:80,readOnlyArchives:!0})});let t=await q(this.opts.project);if(null===t){const e=this.opts.project.configuration.get("bstatePath");await M.xfs.existsPromise(e)&&await M.xfs.unlinkPromise(e),t={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map}}const r=new Map(this.opts.project.workspaces.map(e=>{var t,r;let A=this.opts.project.configuration.get("nmHoistingLimits");try{A=N.validateEnum(w,null!==(r=null===(t=e.manifest.installConfig)||void 0===t?void 0:t.hoistingLimits)&&void 0!==r?r:A)}catch(t){const r=i.prettyWorkspace(this.opts.project.configuration,e);this.opts.report.reportWarning(S.b.INVALID_MANIFEST,`${r}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(w).join(", ")}, using default: "${A}"`)}return[e.relativeCwd,A]})),A=(e=>{const t=new Map;for(const[r,A]of e.entries())if(!A.dirList){let e=t.get(A.locator);e||(e={target:A.target,linkType:A.linkType,locations:[],aliases:A.aliases},t.set(A.locator,e)),e.locations.push(r)}for(const e of t.values())e.locations=e.locations.sort((e,t)=>{const r=e.split(o.y1.delimiter).length,A=t.split(o.y1.delimiter).length;return r!==A?A-r:t.localeCompare(e)});return t})(Q({VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(e,t)=>Array.isArray(t)?{name:t[0],reference:t[1]}:{name:e,reference:t},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(e=>{const t=e.anchoredLocator;return{name:i.stringifyIdent(e.locator),reference:t.reference}}),getPackageInformation:e=>{const t=null===e.reference?this.opts.project.topLevelWorkspace.anchoredLocator:i.makeLocator(i.parseIdent(e.name),e.reference),r=this.localStore.get(t.locatorHash);if(void 0===r)throw new Error("Assertion failed: Expected the package reference to have been registered");return r.pnpNode},findPackageLocator:e=>{const t=this.opts.project.tryWorkspaceByCwd(o.cS.toPortablePath(e));if(null!==t){const e=t.anchoredLocator;return{name:i.stringifyIdent(e),reference:e.reference}}throw new Error("Assertion failed: Unimplemented")},resolveToUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveRequest:()=>{throw new Error("Assertion failed: Unimplemented")},resolveVirtual:e=>o.cS.fromPortablePath(R.p.resolveVirtual(o.cS.toPortablePath(e)))},{pnpifyFs:!1,hoistingLimitsByCwd:r,project:this.opts.project}));await async function(e,t,{baseFs:r,project:A,report:n,loadManifest:s}){const a=o.y1.join(A.cwd,H),{locationTree:c,binSymlinks:g}=function(e,t){const r=new Map([...e]),A=new Map([...t]);for(const[t,r]of e){const e=o.y1.join(t,H);if(!M.xfs.existsSync(e)){r.children.delete(H);for(const t of A.keys())null!==o.y1.contains(e,t)&&A.delete(t)}}return{locationTree:r,binSymlinks:A}}(e.locationTree,e.binSymlinks),l=V(t,{skipPrefix:A.cwd}),u=[],h=async({srcDir:e,dstDir:t,linkType:A})=>{const n=(async()=>{try{A===k.Un.SOFT?(await M.xfs.mkdirPromise(o.y1.dirname(t),{recursive:!0}),await X(o.y1.resolve(e),t)):await _(t,e,{baseFs:r})}catch(r){throw r.message=`While persisting ${e} -> ${t} ${r.message}`,r}finally{I.tick()}})().then(()=>u.splice(u.indexOf(n),1));u.push(n),u.length>4&&await Promise.race(u)},p=async(e,t,r)=>{const A=(async()=>{const A=async(e,t,r)=>{try{r&&r.innerLoop||await M.xfs.mkdirPromise(t,{recursive:!0});const n=await M.xfs.readdirPromise(e,{withFileTypes:!0});for(const i of n){if(!(r&&r.innerLoop||".bin"!==i.name))continue;const n=o.y1.join(e,i.name),s=o.y1.join(t,i.name);i.isDirectory()?(i.name!==H||r&&r.innerLoop)&&(await M.xfs.mkdirPromise(s,{recursive:!0}),await A(n,s,{innerLoop:!0})):await M.xfs.copyFilePromise(n,s,G().constants.COPYFILE_FICLONE)}}catch(A){throw r&&r.innerLoop||(A.message=`While cloning ${e} -> ${t} ${A.message}`),A}finally{r&&r.innerLoop||I.tick()}};await A(e,t,r)})().then(()=>u.splice(u.indexOf(A),1));u.push(A),u.length>4&&await Promise.race(u)},d=async(e,t,r)=>{if(r)for(const[A,n]of t.children){const t=r.children.get(A);await d(o.y1.join(e,A),n,t)}else t.children.has(H)&&await z(o.y1.join(e,H),{contentsOnly:!1}),await z(e,{contentsOnly:e===a})};for(const[e,t]of c){const r=l.get(e);for(const[A,n]of t.children){if("."===A)continue;const t=r?r.children.get(A):r;await d(o.y1.join(e,A),n,t)}}const C=async(e,t,r)=>{if(r){$(t.locator,r.locator)||await z(e,{contentsOnly:t.linkType===k.Un.HARD});for(const[A,n]of t.children){const t=r.children.get(A);await C(o.y1.join(e,A),n,t)}}else t.children.has(H)&&await z(o.y1.join(e,H),{contentsOnly:!0}),await z(e,{contentsOnly:t.linkType===k.Un.HARD})};for(const[e,t]of l){const r=c.get(e);for(const[A,n]of t.children){if("."===A)continue;const t=r?r.children.get(A):r;await C(o.y1.join(e,A),n,t)}}const f=[];for(const[r,{locations:n}]of e.locatorMap.entries())for(const e of n){const{locationRoot:n,segments:i}=W(e,{skipPrefix:A.cwd});let s=l.get(n),a=n;if(s){for(const e of i)if(a=o.y1.join(a,e),s=s.children.get(e),!s)break;if(s&&!$(s.locator,r)){const e=t.get(s.locator),r=e.target,A=a,n=e.linkType;r!==A&&f.push({srcDir:r,dstDir:A,linkType:n})}}}for(const[e,{locations:r}]of t.entries())for(const n of r){const{locationRoot:r,segments:i}=W(n,{skipPrefix:A.cwd});let s=c.get(r),a=l.get(r),g=r;const u=t.get(e),h=u.target,p=n;if(h===p)continue;const d=u.linkType;for(const e of i)a=a.children.get(e);if(s){for(const e of i)if(g=o.y1.join(g,e),s=s.children.get(e),!s){f.push({srcDir:h,dstDir:p,linkType:d});break}}else f.push({srcDir:h,dstDir:p,linkType:d})}const I=K.yG.progressViaCounter(f.length),E=n.reportProgress(I);try{const e=new Map;for(const t of f)t.linkType!==k.Un.SOFT&&e.has(t.srcDir)||(e.set(t.srcDir,t.dstDir),await h({...t}));await Promise.all(u),u.length=0;for(const t of f){const r=e.get(t.srcDir);t.linkType!==k.Un.SOFT&&t.dstDir!==r&&await p(r,t.dstDir)}await Promise.all(u),await M.xfs.mkdirPromise(a,{recursive:!0});const r=await async function(e,t,r,{loadManifest:A}){const n=new Map;for(const[t,{locations:r}]of e){const e=Z(t)?null:await A(t,r[0]),i=new Map;if(e)for(const[t,A]of e.bin){const e=o.y1.join(r[0],A);""!==A&&M.xfs.existsSync(e)&&i.set(t,A)}n.set(t,i)}const i=new Map,s=(e,t,A)=>{const a=new Map,c=o.y1.contains(r,e);if(A.locator&&null!==c){const t=n.get(A.locator);for(const[r,A]of t){const t=o.y1.join(e,o.cS.toPortablePath(A));a.set((0,o.Zu)(r),t)}for(const[t,r]of A.children){const A=o.y1.join(e,t),n=s(A,A,r);n.size>0&&i.set(e,new Map([...i.get(e)||new Map,...n]))}}else for(const[r,n]of A.children){const A=s(o.y1.join(e,r),t,n);for(const[e,t]of A)a.set(e,t)}return a};for(const[e,r]of t){const t=s(e,e,r);t.size>0&&i.set(e,new Map([...i.get(e)||new Map,...t]))}return i}(t,l,A.cwd,{loadManifest:s});await async function(e,t){for(const r of e.keys())if(!t.has(r)){const e=o.y1.join(r,H,".bin");await M.xfs.removePromise(e)}for(const[r,A]of t){const t=o.y1.join(r,H,".bin"),n=e.get(r)||new Map;await M.xfs.mkdirPromise(t,{recursive:!0});for(const e of n.keys())A.has(e)||(await M.xfs.removePromise(o.y1.join(t,e)),"win32"===process.platform&&await M.xfs.removePromise(o.y1.join(t,(0,o.Zu)(e+".cmd"))));for(const[e,r]of A){const A=n.get(e),i=o.y1.join(t,e);A!==r&&("win32"===process.platform?await T()(o.cS.fromPortablePath(r),o.cS.fromPortablePath(i),{createPwshFile:!1}):(await M.xfs.removePromise(i),await X(r,i),await M.xfs.chmodPromise(r,493)))}}}(g,r),await async function(e,t,r){let A="";A+="# Warning: This file is automatically generated. Removing it is fine, but will\n",A+="# cause your node_modules installation to become invalidated.\n",A+="\n",A+="__metadata:\n",A+=" version: 1\n";const n=Array.from(t.keys()).sort(),s=i.stringifyLocator(e.topLevelWorkspace.anchoredLocator);for(const i of n){const n=t.get(i);A+="\n",A+=JSON.stringify(i)+":\n",A+=" locations:\n";for(const t of n.locations){const r=o.y1.contains(e.cwd,t);if(null===r)throw new Error(`Assertion failed: Expected the path to be within the project (${t})`);A+=` - ${JSON.stringify(r)}\n`}if(n.aliases.length>0){A+=" aliases:\n";for(const e of n.aliases)A+=` - ${JSON.stringify(e)}\n`}if(i===s&&r.size>0){A+=" bin:\n";for(const[t,n]of r){const r=o.y1.contains(e.cwd,t);if(null===r)throw new Error(`Assertion failed: Expected the path to be within the project (${t})`);A+=` ${JSON.stringify(r)}:\n`;for(const[e,r]of n){const n=o.y1.relative(o.y1.join(t,H),r);A+=` ${JSON.stringify(e)}: ${JSON.stringify(n)}\n`}}}}const a=e.cwd,c=o.y1.join(a,H,".yarn-state.yml");await M.xfs.changeFilePromise(c,A,{automaticNewlines:!0})}(A,t,r)}finally{E.stop()}}(t,A,{baseFs:e,project:this.opts.project,report:this.opts.report,loadManifest:async e=>{const t=i.parseLocator(e),r=this.localStore.get(t.locatorHash);if(void 0===r)throw new Error("Assertion failed: Expected the slot to exist");return r.customPackageData.manifest}});const n=[];for(const[e,t]of A.entries()){if(Z(e))continue;const r=i.parseLocator(e),A=this.localStore.get(r.locatorHash);if(void 0===A)throw new Error("Assertion failed: Expected the slot to exist");const o=O.jsInstallUtils.extractBuildScripts(A.pkg,A.customPackageData,A.dependencyMeta,{configuration:this.opts.project.configuration,report:this.opts.report});0!==o.length&&n.push({buildLocations:t.locations,locatorHash:r.locatorHash,buildDirective:o})}return{customData:this.customData,records:n}}}async function q(e,{unrollAliases:t=!1}={}){const r=e.cwd,A=o.y1.join(r,H,".yarn-state.yml");if(!M.xfs.existsSync(A))return null;const n=(0,P.parseSyml)(await M.xfs.readFilePromise(A,"utf8"));if(n.__metadata.version>1)return null;const s=new Map,a=new Map;delete n.__metadata;for(const[e,A]of Object.entries(n)){const n=A.locations.map(e=>o.y1.join(r,e)),c=A.bin;if(c)for(const[e,t]of Object.entries(c)){const A=o.y1.join(r,o.cS.toPortablePath(e)),n=N.getMapWithDefault(a,A);for(const[e,r]of Object.entries(t))n.set((0,o.Zu)(e),o.cS.toPortablePath([A,H,r].join(o.y1.delimiter)))}if(s.set(e,{target:o.LZ.dot,linkType:k.Un.HARD,locations:n,aliases:A.aliases||[]}),t&&A.aliases)for(const t of A.aliases){const{scope:r,name:A}=i.parseLocator(e),a=i.makeLocator(i.makeIdent(r,A),t),c=i.stringifyLocator(a);s.set(c,{target:o.LZ.dot,linkType:k.Un.HARD,locations:n,aliases:[]})}}return{locatorMap:s,binSymlinks:a,locationTree:V(s,{skipPrefix:e.cwd})}}const z=async(e,t)=>{if(e.split(o.y1.sep).indexOf(H)<0)throw new Error("Assertion failed: trying to remove dir that doesn't contain node_modules: "+e);try{if(!t.innerLoop){if((await M.xfs.lstatPromise(e)).isSymbolicLink())return void await M.xfs.unlinkPromise(e)}const r=await M.xfs.readdirPromise(e,{withFileTypes:!0});for(const A of r){const r=o.y1.join(e,(0,o.Zu)(A.name));A.isDirectory()?(A.name!==H||t&&t.innerLoop)&&await z(r,{innerLoop:!0,contentsOnly:!1}):await M.xfs.unlinkPromise(r)}t.contentsOnly||await M.xfs.rmdirPromise(e)}catch(e){if("ENOENT"!==e.code&&"ENOTEMPTY"!==e.code)throw e}},W=(e,{skipPrefix:t})=>{const r=o.y1.contains(t,e);if(null===r)throw new Error(`Assertion failed: Cannot process a path that isn't part of the requested prefix (${e} isn't within ${t})`);const A=r.split(o.y1.sep).filter(e=>""!==e),n=A.indexOf(H),i=A.slice(0,n).join(o.y1.sep);return{locationRoot:o.y1.join(t,i),segments:A.slice(n)}},V=(e,{skipPrefix:t})=>{const r=new Map;if(null===e)return r;const A=()=>({children:new Map,linkType:k.Un.HARD});for(const[n,i]of e.entries()){if(i.linkType===k.Un.SOFT){if(null!==o.y1.contains(t,i.target)){const e=N.getFactoryWithDefault(r,i.target,A);e.locator=n,e.linkType=i.linkType}}for(const e of i.locations){const{locationRoot:o,segments:s}=W(e,{skipPrefix:t});let a=N.getFactoryWithDefault(r,o,A);for(let e=0;e{let r;try{"win32"===process.platform&&(r=M.xfs.lstatSync(e))}catch(e){}"win32"!=process.platform||r&&!r.isDirectory()?M.xfs.symlinkPromise(o.y1.relative(o.y1.dirname(t),e),t):M.xfs.symlinkPromise(e,t,"junction")},_=async(e,t,{baseFs:r,innerLoop:A})=>{await M.xfs.mkdirPromise(e,{recursive:!0});const n=await r.readdirPromise(t,{withFileTypes:!0}),i=async(e,t,A)=>{if(A.isFile()){const A=await r.lstatPromise(t);await r.copyFilePromise(t,e);const n=511&A.mode;420!==n&&await M.xfs.chmodPromise(e,n)}else{if(!A.isSymbolicLink())throw new Error(`Unsupported file type (file: ${t}, mode: 0o${await M.xfs.statSync(t).mode.toString(8).padStart(6,"0")})`);{const A=await r.readlinkPromise(t);await X(o.y1.resolve(o.y1.dirname(e),A),e)}}};for(const s of n){const n=o.y1.join(t,(0,o.Zu)(s.name)),a=o.y1.join(e,(0,o.Zu)(s.name));s.isDirectory()?(s.name!==H||A)&&await _(a,n,{baseFs:r,innerLoop:!0}):await i(a,n,s)}};function Z(e){let t=i.parseDescriptor(e);return i.isVirtualDescriptor(t)&&(t=i.devirtualizeDescriptor(t)),t.range.startsWith("link:")}const $=(e,t)=>{if(!e||!t)return e===t;let r=i.parseLocator(e);i.isVirtualLocator(r)&&(r=i.devirtualizeLocator(r));let A=i.parseLocator(t);return i.isVirtualLocator(A)&&(A=i.devirtualizeLocator(A)),i.areLocatorsEqual(r,A)};var ee=r(34432);class te extends O.PnpLinker{constructor(){super(...arguments),this.mode="loose"}makeInstaller(e){return new re(e)}}class re extends O.PnpInstaller{constructor(){super(...arguments),this.mode="loose"}async finalizeInstallWithPnp(e){if(this.opts.project.configuration.get("pnpMode")!==this.mode)return;const t=new R.p({baseFs:new x.A({libzip:await(0,L.getLibzipPromise)(),maxOpenFiles:80,readOnlyArchives:!0})}),r=(0,ee.oC)(e,this.opts.project.cwd,t),A=Q(r,{pnpifyFs:!1,project:this.opts.project}),n=new Map;e.fallbackPool=n;const s=(e,t)=>{const r=i.parseLocator(t.locator),A=i.stringifyIdent(r);A===e?n.set(e,r.reference):n.set(e,[A,r.reference])},a=o.y1.join(this.opts.project.cwd,o.QS.nodeModules),c=A.get(a);if(void 0===c)throw new Error("Assertion failed: Expected a root junction point");if("target"in c)throw new Error("Assertion failed: Expected the root junction point to be a directory");for(const e of c.dirList){const t=o.y1.join(a,e),r=A.get(t);if(void 0===r)throw new Error("Assertion failed: Expected the child to have been registered");if("target"in r)s(e,r);else for(const n of r.dirList){const r=o.y1.join(t,n),i=A.get(r);if(void 0===i)throw new Error("Assertion failed: Expected the subchild to have been registered");if(!("target"in i))throw new Error("Assertion failed: Expected the leaf junction to be a package");s(`${e}/${n}`,i)}}return super.finalizeInstallWithPnp(e)}}const Ae=e=>o.y1.join(e.cwd,".pnp.js"),ne={configuration:{nmHoistingLimits:{description:"Prevent packages can be hoisted past specific levels",type:n.a2.STRING,values:[w.WORKSPACES,w.DEPENDENCIES,w.NONE],default:"none"}},linkers:[class{supportsPackage(e,t){return"node-modules"===t.project.configuration.get("nodeLinker")}async findPackageLocation(e,t){const r=t.project.tryWorkspaceByLocator(e);if(r)return r.cwd;const A=await q(t.project,{unrollAliases:!0});if(null===A)throw new j.UsageError("Couldn't find the node_modules state file - running an install might help (findPackageLocation)");const n=A.locatorMap.get(i.stringifyLocator(e));if(!n){const r=new j.UsageError(`Couldn't find ${i.prettyLocator(t.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw r.code="LOCATOR_NOT_INSTALLED",r}return n.locations[0]}async findPackageLocator(e,t){const r=await q(t.project,{unrollAliases:!0});if(null===r)return null;const{locationRoot:A,segments:n}=W(o.y1.resolve(e),{skipPrefix:t.project.cwd});let s=r.locationTree.get(A);if(!s)return null;let a=s.locator;for(const e of n){if(s=s.children.get(e),!s)break;a=s.locator||a}return i.parseLocator(a)}makeInstaller(e){return new J(e)}},te]}},8190:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>X});var A,n,o=r(39922),i=r(36370),s=r(25413),a=r(85824),c=r(62152),g=r(35691),l=r(92659),u=r(85875),h=r(15815),p=r(14224),d=r(40822);!function(e){e.All="all",e.Production="production",e.Development="development"}(A||(A={})),function(e){e.Info="info",e.Low="low",e.Moderate="moderate",e.High="high",e.Critical="critical"}(n||(n={}));var C=r(54143),f=r(73632),I=r(71643);const E=[n.Info,n.Low,n.Moderate,n.High,n.Critical];function B(e,t){const r=[],A=new Set,n=e=>{A.has(e)||(A.add(e),r.push(e))};for(const e of t)n(e);const o=new Set;for(;r.length>0;){const t=r.shift(),A=e.storedResolutions.get(t);if(void 0===A)throw new Error("Assertion failed: Expected the resolution to have been registered");const i=e.storedPackages.get(A);if(i){o.add(t);for(const e of i.dependencies.values())n(e.descriptorHash)}}return o}function y(e,t,{all:r}){const A=r?e.workspaces:[t],n=A.map(e=>e.manifest),o=new Set(n.map(e=>[...e.dependencies].map(([e,t])=>e)).flat()),i=new Set(n.map(e=>[...e.devDependencies].map(([e,t])=>e)).flat()),s=A.map(e=>[...e.dependencies.values()]).flat(),a=s.filter(e=>o.has(e.identHash)).map(e=>e.descriptorHash),c=s.filter(e=>i.has(e.identHash)).map(e=>e.descriptorHash),g=B(e,a),l=B(e,c);return u=l,h=g,new Set([...u].filter(e=>!h.has(e)));var u,h}function m(e){const t={};for(const r of e)t[C.stringifyIdent(r)]=C.parseRange(r.range).selector;return t}function w(e){if(void 0===e)return new Set;const t=E.indexOf(e),r=E.slice(t);return new Set(r)}function Q(e,t){var r;const A=function(e,t){const r=w(t),A={};for(const t of r)A[t]=e[t];return A}(e,t);for(const e of Object.keys(A))if(null!==(r=A[e])&&void 0!==r&&r)return!0;return!1}class D extends s.BaseCommand{constructor(){super(...arguments),this.all=!1,this.recursive=!1,this.environment=A.All,this.json=!1,this.severity=n.Info}async execute(){const e=await o.VK.find(this.context.cwd,this.context.plugins),{project:t,workspace:r}=await a.I.find(e,this.context.cwd);if(!r)throw new s.WorkspaceRequiredError(t.cwd,this.context.cwd);await t.restoreInstallState();const n=function(e,t,{all:r,environment:n}){const o=r?e.workspaces:[t],i=[];if([A.All,A.Production].includes(n))for(const e of o)for(const t of e.manifest.dependencies.values())i.push(t);const s=[];if([A.All,A.Development].includes(n))for(const e of o)for(const t of e.manifest.devDependencies.values())s.push(t);return m([...i,...s].filter(e=>null===C.parseRange(e.range).protocol))}(t,r,{all:this.all,environment:this.environment}),i=function(e,t,{all:r}){var A;const n=y(e,t,{all:r}),o={};for(const t of e.storedPackages.values())o[C.stringifyIdent(t)]={version:null!==(A=t.version)&&void 0!==A?A:"0.0.0",integrity:t.identHash,requires:m(t.dependencies.values()),dev:n.has(C.convertLocatorToDescriptor(t).descriptorHash)};return o}(t,r,{all:this.all});if(!this.recursive)for(const e of Object.keys(i))Object.prototype.hasOwnProperty.call(n,e)?i[e].requires={}:delete i[e];const d={requires:n,dependencies:i},E=p.npmConfigUtils.getPublishRegistry(r.manifest,{configuration:e});let B;const D=await c.h.start({configuration:e,stdout:this.context.stdout},async()=>{try{B=await p.npmHttpUtils.post("/-/npm/v1/security/audits/quick",d,{authType:p.npmHttpUtils.AuthType.NO_AUTH,configuration:e,jsonResponse:!0,registry:E})}catch(e){throw"HTTPError"!==e.name?e:new g.lk(l.b.EXCEPTION,e.toString())}});if(D.hasErrors())return D.exitCode();const b=Q(B.metadata.vulnerabilities,this.severity);if(!this.json&&b)return u.emitTree(function(e,t){const r={},A={children:r};let n=Object.values(e.advisories);if(null!=t){const e=w(t);n=n.filter(t=>e.has(t.severity))}for(const e of f.sortMap(n,e=>e.module_name))r[e.module_name]={label:e.module_name,value:I.tuple(I.Type.RANGE,e.findings.map(e=>e.version).join(", ")),children:{Issue:{label:"Issue",value:I.tuple(I.Type.NO_HINT,e.title)},URL:{label:"URL",value:I.tuple(I.Type.URL,e.url)},Severity:{label:"Severity",value:I.tuple(I.Type.NO_HINT,e.severity)},"Vulnerable Versions":{label:"Vulnerable Versions",value:I.tuple(I.Type.RANGE,e.vulnerable_versions)},"Patched Versions":{label:"Patched Versions",value:I.tuple(I.Type.RANGE,e.patched_versions)},Via:{label:"Via",value:I.tuple(I.Type.NO_HINT,Array.from(new Set(e.findings.map(e=>e.paths).flat().map(e=>e.split(">")[0]))).join(", "))},Recommendation:{label:"Recommendation",value:I.tuple(I.Type.NO_HINT,e.recommendation.replace(/\n/g," "))}}};return A}(B,this.severity),{configuration:e,json:this.json,stdout:this.context.stdout,separators:2}),1;return(await h.Pk.start({configuration:e,includeFooter:!1,json:this.json,stdout:this.context.stdout},async e=>{e.reportJson(B),b||e.reportInfo(l.b.EXCEPTION,"No audit suggestions")})).exitCode()}}D.usage=d.Command.Usage({description:"perform a vulnerability audit against the installed packages",details:`\n This command checks for known security reports on the packages you use. The reports are by default extracted from the npm registry, and may or may not be relevant to your actual program (not all vulnerabilities affect all code paths).\n\n For consistency with our other commands the default is to only check the direct dependencies for the active workspace. To extend this search to all workspaces, use \`-A,--all\`. To extend this search to both direct and transitive dependencies, use \`-R,--recursive\`.\n\n Applying the \`--severity\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${E.map(e=>`\`${e}\``).join(", ")}.\n\n If the \`--json\` flag is set, Yarn will print the output exactly as received from the registry. Regardless of this flag, the process will exit with a non-zero exit code if a report is found for the selected packages.\n\n To understand the dependency tree requiring vulnerable packages, check the raw report with the \`--json\` flag or use \`yarn why \` to get more information as to who depends on them.\n `,examples:[["Checks for known security issues with the installed packages. The output is a list of known issues.","yarn npm audit"],["Audit dependencies in all workspaces","yarn npm audit --all"],["Limit auditing to `dependencies` (excludes `devDependencies`)","yarn npm audit --environment production"],["Show audit report as valid JSON","yarn npm audit --json"],["Audit all direct and transitive dependencies","yarn npm audit --recursive"],["Output moderate (or more severe) vulnerabilities","yarn npm audit --severity moderate"]]}),(0,i.gn)([d.Command.Boolean("-A,--all")],D.prototype,"all",void 0),(0,i.gn)([d.Command.Boolean("-R,--recursive")],D.prototype,"recursive",void 0),(0,i.gn)([d.Command.String("--environment")],D.prototype,"environment",void 0),(0,i.gn)([d.Command.Boolean("--json")],D.prototype,"json",void 0),(0,i.gn)([d.Command.String("--severity")],D.prototype,"severity",void 0),(0,i.gn)([d.Command.Path("npm","audit")],D.prototype,"execute",null);var b=r(85622),v=r.n(b),S=r(53887),k=r.n(S),N=r(31669);class F extends s.BaseCommand{constructor(){super(...arguments),this.json=!1}async execute(){const e=await o.VK.find(this.context.cwd,this.context.plugins),{project:t}=await a.I.find(e,this.context.cwd),r=void 0!==this.fields?new Set(["name",...this.fields.split(/\s*,\s*/)]):null,A=[];let n=!1;const i=await h.Pk.start({configuration:e,includeFooter:!1,json:this.json,stdout:this.context.stdout},async o=>{for(const i of this.packages){let s;if("."===i){const e=t.topLevelWorkspace;if(!e.manifest.name)throw new d.UsageError("Missing 'name' field in "+v().join(e.cwd,"package.json"));s=C.makeDescriptor(e.manifest.name,"unknown")}else s=C.parseDescriptor(i);const a=p.npmHttpUtils.getIdentUrl(s);let c;try{c=K(await p.npmHttpUtils.get(a,{configuration:e,ident:s,jsonResponse:!0}))}catch(e){throw"HTTPError"!==e.name?e:404===e.response.statusCode?new g.lk(l.b.EXCEPTION,"Package not found"):new g.lk(l.b.EXCEPTION,e.toString())}const u=Object.keys(c.versions).sort(k().compareLoose);let h=c["dist-tags"].latest||u[u.length-1];if(k().validRange(s.range)){const t=k().maxSatisfying(u,s.range);null!==t?h=t:(o.reportWarning(l.b.UNNAMED,`Unmet range ${C.prettyRange(e,s.range)}; falling back to the latest version`),n=!0)}else"unknown"!==s.range&&(o.reportWarning(l.b.UNNAMED,`Invalid range ${C.prettyRange(e,s.range)}; falling back to the latest version`),n=!0);const f=c.versions[h],I={...c,...f,version:h,versions:u};let E;if(null!==r){E={};for(const t of r){const r=I[t];void 0!==r?E[t]=r:(o.reportWarning(l.b.EXCEPTION,`The '${t}' field doesn't exist inside ${C.prettyIdent(e,s)}'s informations`),n=!0)}}else this.json||(delete I.dist,delete I.readme,delete I.users),E=I;o.reportJson(E),this.json||A.push(E)}});N.inspect.styles.name="cyan";for(const e of A)(e!==A[0]||n)&&this.context.stdout.write("\n"),this.context.stdout.write((0,N.inspect)(e,{depth:1/0,colors:!0,compact:!1})+"\n");return i.exitCode()}}function K(e){if(Array.isArray(e)){const t=[];for(let r of e)r=K(r),r&&t.push(r);return t}if("object"==typeof e&&null!==e){const t={};for(const r of Object.keys(e)){if(r.startsWith("_"))continue;const A=K(e[r]);A&&(t[r]=A)}return t}return e||null}F.usage=d.Command.Usage({category:"Npm-related commands",description:"show information about a package",details:"\n This command will fetch information about a package from the npm registry, and prints it in a tree format.\n\n The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\n\n Append `@` to the package argument to provide information specific to the latest version that satisfies the range. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\n\n If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package informations.\n\n By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\n ",examples:[["Show all available information about react (except the `dist`, `readme`, and `users` fields)","yarn npm info react"],["Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)","yarn npm info react --json"],["Show all available information about react 16.12.0","yarn npm info react@16.12.0"],["Show the description of react","yarn npm info react --fields description"],["Show all available versions of react","yarn npm info react --fields versions"],["Show the readme of react","yarn npm info react --fields readme"],["Show a few fields of react","yarn npm info react --fields homepage,repository"]]}),(0,i.gn)([d.Command.Rest()],F.prototype,"packages",void 0),(0,i.gn)([d.Command.String("-f,--fields",{description:"A comma-separated list of manifest fields that should be displayed"})],F.prototype,"fields",void 0),(0,i.gn)([d.Command.Boolean("--json",{description:"Format the output as an NDJSON stream"})],F.prototype,"json",void 0),(0,i.gn)([d.Command.Path("npm","info")],F.prototype,"execute",null);var M=r(61899);class R extends s.BaseCommand{constructor(){super(...arguments),this.publish=!1}async execute(){const e=await o.VK.find(this.context.cwd,this.context.plugins),t=await x({configuration:e,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await h.Pk.start({configuration:e,stdout:this.context.stdout},async r=>{const A=await async function({registry:e,report:t,stdin:r,stdout:A}){if(process.env.TEST_ENV)return{name:process.env.TEST_NPM_USER||"",password:process.env.TEST_NPM_PASSWORD||""};t.reportInfo(l.b.UNNAMED,"Logging in to "+e);let n=!1;e.match(/^https:\/\/npm\.pkg\.github\.com(\/|$)/)&&(t.reportInfo(l.b.UNNAMED,"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions."),n=!0);t.reportSeparator();const{username:o,password:i}=await(0,M.prompt)([{type:"input",name:"username",message:"Username:",required:!0,onCancel:()=>process.exit(130),stdin:r,stdout:A},{type:"password",name:"password",message:n?"Token:":"Password:",required:!0,onCancel:()=>process.exit(130),stdin:r,stdout:A}]);return t.reportSeparator(),{name:o,password:i}}({registry:t,report:r,stdin:this.context.stdin,stdout:this.context.stdout}),n="/-/user/org.couchdb.user:"+encodeURIComponent(A.name),i=await p.npmHttpUtils.put(n,A,{attemptedAs:A.name,configuration:e,registry:t,jsonResponse:!0,authType:p.npmHttpUtils.AuthType.NO_AUTH});return await async function(e,t,{configuration:r,scope:A}){const n=e=>r=>{const A=f.isIndexableObject(r)?r:{},n=A[e],o=f.isIndexableObject(n)?n:{};return{...A,[e]:{...o,npmAuthToken:t}}},i=A?{npmScopes:n(A)}:{npmRegistries:n(e)};return await o.VK.updateHomeConfiguration(i)}(t,i.token,{configuration:e,scope:this.scope}),r.reportInfo(l.b.UNNAMED,"Successfully logged in")})).exitCode()}}async function x({scope:e,publish:t,configuration:r,cwd:A}){return e&&t?p.npmConfigUtils.getScopeRegistry(e,{configuration:r,type:p.npmConfigUtils.RegistryType.PUBLISH_REGISTRY}):e?p.npmConfigUtils.getScopeRegistry(e,{configuration:r}):t?p.npmConfigUtils.getPublishRegistry((await(0,s.openWorkspace)(r,A)).manifest,{configuration:r}):p.npmConfigUtils.getDefaultRegistry({configuration:r})}R.usage=d.Command.Usage({category:"Npm-related commands",description:"store new login info to access the npm registry",details:"\n This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\n\n Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n ",examples:[["Login to the default registry","yarn npm login"],["Login to the registry linked to the @my-scope registry","yarn npm login --scope my-scope"],["Login to the publish registry for the current package","yarn npm login --publish"]]}),(0,i.gn)([d.Command.String("-s,--scope",{description:"Login to the registry configured for a given scope"})],R.prototype,"scope",void 0),(0,i.gn)([d.Command.Boolean("--publish",{description:"Login to the publish registry"})],R.prototype,"publish",void 0),(0,i.gn)([d.Command.Path("npm","login")],R.prototype,"execute",null);const L=new Set(["npmAuthIdent","npmAuthToken"]);class P extends s.BaseCommand{constructor(){super(...arguments),this.publish=!1,this.all=!1}async execute(){const e=await o.VK.find(this.context.cwd,this.context.plugins),t=async()=>{var t;const r=await x({configuration:e,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),A=await o.VK.find(this.context.cwd,this.context.plugins),n=C.makeIdent(null!==(t=this.scope)&&void 0!==t?t:null,"pkg");return!p.npmConfigUtils.getAuthConfiguration(r,{configuration:A,ident:n}).get("npmAuthToken")};return(await h.Pk.start({configuration:e,stdout:this.context.stdout},async r=>{if(this.all&&(await async function(){const e=e=>{let t=!1;const r=f.isIndexableObject(e)?{...e}:{};r.npmAuthToken&&(delete r.npmAuthToken,t=!0);for(const e of Object.keys(r))O(r,e)&&(t=!0);if(0!==Object.keys(r).length)return t?r:e};return await o.VK.updateHomeConfiguration({npmRegistries:e,npmScopes:e})}(),r.reportInfo(l.b.UNNAMED,"Successfully logged out from everything")),this.scope)return await U("npmScopes",this.scope),void(await t()?r.reportInfo(l.b.UNNAMED,"Successfully logged out from "+this.scope):r.reportWarning(l.b.UNNAMED,"Scope authentication settings removed, but some other ones settings still apply to it"));const A=await x({configuration:e,cwd:this.context.cwd,publish:this.publish});await U("npmRegistries",A),await t()?r.reportInfo(l.b.UNNAMED,"Successfully logged out from "+A):r.reportWarning(l.b.UNNAMED,"Registry authentication settings removed, but some other ones settings still apply to it")})).exitCode()}}function O(e,t){const r=e[t];if(!f.isIndexableObject(r))return!1;const A=new Set(Object.keys(r));if([...L].every(e=>!A.has(e)))return!1;for(const e of L)A.delete(e);if(0===A.size)return e[t]=void 0,!0;const n={...r};for(const e of L)delete n[e];return e[t]=n,!0}async function U(e,t){return await o.VK.updateHomeConfiguration({[e]:e=>{const r=f.isIndexableObject(e)?e:{};if(!Object.prototype.hasOwnProperty.call(r,t))return e;const A=r[t],n=f.isIndexableObject(A)?A:{},o=new Set(Object.keys(n));if([...L].every(e=>!o.has(e)))return e;for(const e of L)o.delete(e);if(0===o.size){if(1===Object.keys(r).length)return;return{...r,[t]:void 0}}const i={};for(const e of L)i[e]=void 0;return{...r,[t]:{...n,...i}}}})}P.usage=d.Command.Usage({category:"Npm-related commands",description:"logout of the npm registry",details:"\n This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\n\n Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n\n Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\n ",examples:[["Logout of the default registry","yarn npm logout"],["Logout of the @my-scope scope","yarn npm logout --scope my-scope"],["Logout of the publish registry for the current package","yarn npm logout --publish"],["Logout of all registries","yarn npm logout --all"]]}),(0,i.gn)([d.Command.String("-s,--scope",{description:"Logout of the registry configured for a given scope"})],P.prototype,"scope",void 0),(0,i.gn)([d.Command.Boolean("--publish",{description:"Logout of the publish registry"})],P.prototype,"publish",void 0),(0,i.gn)([d.Command.Boolean("-A,--all",{description:"Logout of all registries"})],P.prototype,"all",void 0),(0,i.gn)([d.Command.Path("npm","logout")],P.prototype,"execute",null);var T=r(63088),j=r(49881);class Y extends s.BaseCommand{constructor(){super(...arguments),this.tag="latest",this.tolerateRepublish=!1}async execute(){const e=await o.VK.find(this.context.cwd,this.context.plugins),{project:t,workspace:r}=await a.I.find(e,this.context.cwd);if(!r)throw new s.WorkspaceRequiredError(t.cwd,this.context.cwd);if(r.manifest.private)throw new d.UsageError("Private workspaces cannot be published");if(null===r.manifest.name||null===r.manifest.version)throw new d.UsageError("Workspaces must have valid names and versions to be published on an external registry");await t.restoreInstallState();const A=r.manifest.name,n=r.manifest.version,i=p.npmConfigUtils.getPublishRegistry(r.manifest,{configuration:e});return(await h.Pk.start({configuration:e,stdout:this.context.stdout},async t=>{if(this.tolerateRepublish)try{const r=await p.npmHttpUtils.get(p.npmHttpUtils.getIdentUrl(A),{configuration:e,registry:i,ident:A,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(r,"versions"))throw new g.lk(l.b.REMOTE_INVALID,'Registry returned invalid data for - missing "versions" field');if(Object.prototype.hasOwnProperty.call(r.versions,n))return void t.reportWarning(l.b.UNNAMED,`Registry already knows about version ${n}; skipping.`)}catch(e){if("HTTPError"!==e.name)throw e;if(404!==e.response.statusCode)throw new g.lk(l.b.NETWORK_ERROR,`The remote server answered with HTTP ${e.response.statusCode} ${e.response.statusMessage}`)}await T.maybeExecuteWorkspaceLifecycleScript(r,"prepublish",{report:t}),await j.packUtils.prepareForPack(r,{report:t},async()=>{const n=await j.packUtils.genPackList(r);for(const e of n)t.reportInfo(null,e);const o=await j.packUtils.genPackStream(r,n),s=await f.bufferStream(o),a=await p.npmPublishUtils.makePublishBody(r,s,{access:this.access,tag:this.tag,registry:i});try{await p.npmHttpUtils.put(p.npmHttpUtils.getIdentUrl(A),a,{configuration:e,registry:i,ident:A,jsonResponse:!0})}catch(e){if("HTTPError"!==e.name)throw e;{const r=e.response.body&&e.response.body.error?e.response.body.error:`The remote server answered with HTTP ${e.response.statusCode} ${e.response.statusMessage}`;t.reportError(l.b.NETWORK_ERROR,r)}}}),t.hasErrors()||t.reportInfo(l.b.UNNAMED,"Package archive published")})).exitCode()}}Y.usage=d.Command.Usage({category:"Npm-related commands",description:"publish the active workspace to the npm registry",details:'\n This command will pack the active workspace into a fresh archive and upload it to the npm registry.\n\n The package will by default be attached to the `latest` tag on the registry, but this behavior can be overriden by using the `--tag` option.\n\n Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka "private packages"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\n ',examples:[["Publish the active workspace","yarn npm publish"]]}),(0,i.gn)([d.Command.String("--access",{description:"The access for the published package (public or restricted)"})],Y.prototype,"access",void 0),(0,i.gn)([d.Command.String("--tag",{description:"The tag on the registry that the package should be attached to"})],Y.prototype,"tag",void 0),(0,i.gn)([d.Command.Boolean("--tolerate-republish",{description:"Warn and exit when republishing an already existing version of a package"})],Y.prototype,"tolerateRepublish",void 0),(0,i.gn)([d.Command.Path("npm","publish")],Y.prototype,"execute",null);var G=r(46009);class H extends s.BaseCommand{constructor(){super(...arguments),this.json=!1}async execute(){const e=await o.VK.find(this.context.cwd,this.context.plugins),{project:t,workspace:r}=await a.I.find(e,this.context.cwd);let A;if(void 0!==this.package)A=C.parseIdent(this.package);else{if(!r)throw new s.WorkspaceRequiredError(t.cwd,this.context.cwd);if(!r.manifest.name)throw new d.UsageError("Missing 'name' field in "+G.y1.join(r.cwd,G.QS.manifest));A=r.manifest.name}const n=await J(A,e),i={children:f.sortMap(Object.entries(n),([e])=>e).map(([e,t])=>({value:I.tuple(I.Type.RESOLUTION,{descriptor:C.makeDescriptor(A,e),locator:C.makeLocator(A,t)})}))};return u.emitTree(i,{configuration:e,json:this.json,stdout:this.context.stdout})}}async function J(e,t){const r=`/-/package${p.npmHttpUtils.getIdentUrl(e)}/dist-tags`;return p.npmHttpUtils.get(r,{configuration:t,ident:e,jsonResponse:!0}).catch(e=>{throw"HTTPError"!==e.name?e:404===e.response.statusCode?new g.lk(l.b.EXCEPTION,"Package not found"):new g.lk(l.b.EXCEPTION,e.toString())})}H.usage=d.Command.Usage({category:"Npm-related commands",description:"list all dist-tags of a package",details:"\n This command will list all tags of a package from the npm registry.\n\n If the package is not specified, Yarn will default to the current workspace.\n ",examples:[["List all tags of package `my-pkg`","yarn npm tag list my-pkg"]]}),(0,i.gn)([d.Command.String({required:!1})],H.prototype,"package",void 0),(0,i.gn)([d.Command.Boolean("--json",{description:"Format the output as an NDJSON stream"})],H.prototype,"json",void 0),(0,i.gn)([d.Command.Path("npm","tag","list")],H.prototype,"execute",null);class q extends s.BaseCommand{async execute(){const e=await o.VK.find(this.context.cwd,this.context.plugins),{project:t,workspace:r}=await a.I.find(e,this.context.cwd);if(!r)throw new s.WorkspaceRequiredError(t.cwd,this.context.cwd);const A=C.parseDescriptor(this.package,!0),n=A.range;if(!k().valid(n))throw new d.UsageError(`The range ${I.pretty(e,A.range,I.Type.RANGE)} must be a valid semver version`);const i=p.npmConfigUtils.getPublishRegistry(r.manifest,{configuration:e}),c=I.pretty(e,A,I.Type.IDENT),g=I.pretty(e,n,I.Type.RANGE),u=I.pretty(e,this.tag,I.Type.CODE);return(await h.Pk.start({configuration:e,stdout:this.context.stdout},async t=>{const r=await J(A,e);Object.prototype.hasOwnProperty.call(r,this.tag)&&r[this.tag]===n&&t.reportWarning(l.b.UNNAMED,`Tag ${u} is already set to version ${g}`);try{const t=`/-/package${p.npmHttpUtils.getIdentUrl(A)}/dist-tags/${encodeURIComponent(this.tag)}`;await p.npmHttpUtils.put(t,n,{configuration:e,registry:i,ident:A,jsonRequest:!0,jsonResponse:!0})}catch(e){if("HTTPError"!==e.name)throw e;{const r=e.response.body&&e.response.body.error?e.response.body.error:`The remote server answered with HTTP ${e.response.statusCode} ${e.response.statusMessage}`;t.reportError(l.b.NETWORK_ERROR,r)}}t.hasErrors()||t.reportInfo(l.b.UNNAMED,`Tag ${u} added to version ${g} of package ${c}`)})).exitCode()}}q.usage=d.Command.Usage({category:"Npm-related commands",description:"add a tag for a specific version of a package",details:"\n This command will add a tag to the npm registry for a specific version of a package. If the tag already exists, it will be overwritten.\n ",examples:[["Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`","yarn npm tag add my-pkg@2.3.4-beta.4 beta"]]}),(0,i.gn)([d.Command.String()],q.prototype,"package",void 0),(0,i.gn)([d.Command.String()],q.prototype,"tag",void 0),(0,i.gn)([d.Command.Path("npm","tag","add")],q.prototype,"execute",null);var z=r(15966);class W extends s.BaseCommand{async execute(){const e=await o.VK.find(this.context.cwd,this.context.plugins),{project:t,workspace:r}=await a.I.find(e,this.context.cwd);if(!r)throw new s.WorkspaceRequiredError(t.cwd,this.context.cwd);const A=C.parseIdent(this.package),n=p.npmConfigUtils.getPublishRegistry(r.manifest,{configuration:e}),i=I.pretty(e,this.tag,I.Type.CODE),c=I.pretty(e,A,I.Type.IDENT),g=await J(A,e);if(!Object.prototype.hasOwnProperty.call(g,this.tag))throw new d.UsageError(`${i} is not a tag of package ${c}`);return(await h.Pk.start({configuration:e,stdout:this.context.stdout},async t=>{try{const t=`/-/package${p.npmHttpUtils.getIdentUrl(A)}/dist-tags/${encodeURIComponent(this.tag)}`;await p.npmHttpUtils.del(t,{configuration:e,registry:n,ident:A,jsonResponse:!0})}catch(e){if("HTTPError"!==e.name)throw e;{const r=e.response.body&&e.response.body.error?e.response.body.error:`The remote server answered with HTTP ${e.response.statusCode} ${e.response.statusMessage}`;t.reportError(l.b.NETWORK_ERROR,r)}}t.hasErrors()||t.reportInfo(l.b.UNNAMED,`Tag ${i} removed from package ${c}`)})).exitCode()}}W.schema=z.object().shape({tag:z.string().notOneOf(["latest"])}),W.usage=d.Command.Usage({category:"Npm-related commands",description:"remove a tag from a package",details:"\n This command will remove a tag from a package from the npm registry.\n ",examples:[["Remove the `beta` tag from package `my-pkg`","yarn npm tag remove my-pkg beta"]]}),(0,i.gn)([d.Command.String()],W.prototype,"package",void 0),(0,i.gn)([d.Command.String()],W.prototype,"tag",void 0),(0,i.gn)([d.Command.Path("npm","tag","remove")],W.prototype,"execute",null);class V extends s.BaseCommand{constructor(){super(...arguments),this.publish=!1}async execute(){const e=await o.VK.find(this.context.cwd,this.context.plugins);let t;t=this.scope&&this.publish?p.npmConfigUtils.getScopeRegistry(this.scope,{configuration:e,type:p.npmConfigUtils.RegistryType.PUBLISH_REGISTRY}):this.scope?p.npmConfigUtils.getScopeRegistry(this.scope,{configuration:e}):this.publish?p.npmConfigUtils.getPublishRegistry((await(0,s.openWorkspace)(e,this.context.cwd)).manifest,{configuration:e}):p.npmConfigUtils.getDefaultRegistry({configuration:e});return(await h.Pk.start({configuration:e,stdout:this.context.stdout},async r=>{try{const A=await p.npmHttpUtils.get("/-/whoami",{configuration:e,registry:t,authType:p.npmHttpUtils.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?C.makeIdent(this.scope,""):void 0});r.reportInfo(l.b.UNNAMED,A.username)}catch(e){if("HTTPError"!==e.name)throw e;401===e.response.statusCode||403===e.response.statusCode?r.reportError(l.b.AUTHENTICATION_INVALID,"Authentication failed - your credentials may have expired"):r.reportError(l.b.AUTHENTICATION_INVALID,e.toString())}})).exitCode()}}V.usage=d.Command.Usage({category:"Npm-related commands",description:"display the name of the authenticated user",details:"\n Print the username associated with the current authentication settings to the standard output.\n\n When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\n\n When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\n ",examples:[["Print username for the default registry","yarn npm whoami"],["Print username for the registry on a given scope","yarn npm whoami --scope company"]]}),(0,i.gn)([d.Command.String("-s,--scope",{description:"Print username for the registry configured for a given scope"})],V.prototype,"scope",void 0),(0,i.gn)([d.Command.Boolean("--publish",{description:"Print username for the publish registry"})],V.prototype,"publish",void 0),(0,i.gn)([d.Command.Path("npm","whoami")],V.prototype,"execute",null);const X={configuration:{npmPublishAccess:{description:"Default access of the published packages",type:o.a2.STRING,default:null}},commands:[D,F,R,P,Y,q,H,W,V]}},14224:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>W,npmConfigUtils:()=>A,npmHttpUtils:()=>n,npmPublishUtils:()=>o});var A={};r.r(A),r.d(A,{RegistryType:()=>l,getAuthConfiguration:()=>Q,getDefaultRegistry:()=>y,getPublishRegistry:()=>E,getRegistryConfiguration:()=>m,getScopeConfiguration:()=>w,getScopeRegistry:()=>B,normalizeRegistry:()=>I});var n={};r.r(n),r.d(n,{AuthType:()=>u,del:()=>N,get:()=>v,getIdentUrl:()=>b,handleInvalidAuthenticationError:()=>D,post:()=>S,put:()=>k});var o={};r.r(o),r.d(o,{makePublishBody:()=>J});var i=r(39922),s=r(54143),a=r(72785),c=r(53887),g=r.n(c);var l,u,h=r(79669),p=r(35691),d=r(92659),C=r(61899),f=r(78835);function I(e){return e.replace(/\/$/,"")}function E(e,{configuration:t}){return e.publishConfig&&e.publishConfig.registry?I(e.publishConfig.registry):e.name?B(e.name.scope,{configuration:t,type:l.PUBLISH_REGISTRY}):y({configuration:t,type:l.PUBLISH_REGISTRY})}function B(e,{configuration:t,type:r=l.FETCH_REGISTRY}){const A=w(e,{configuration:t});if(null===A)return y({configuration:t,type:r});const n=A.get(r);return null===n?y({configuration:t,type:r}):I(n)}function y({configuration:e,type:t=l.FETCH_REGISTRY}){const r=e.get(t);return I(null!==r?r:e.get(l.FETCH_REGISTRY))}function m(e,{configuration:t}){const r=t.get("npmRegistries"),A=r.get(e);if(void 0!==A)return A;const n=r.get(e.replace(/^[a-z]+:/,""));return void 0!==n?n:null}function w(e,{configuration:t}){if(null===e)return null;const r=t.get("npmScopes").get(e);return r||null}function Q(e,{configuration:t,ident:r}){const A=r&&w(r.scope,{configuration:t});if((null==A?void 0:A.get("npmAuthIdent"))||(null==A?void 0:A.get("npmAuthToken")))return A;return m(e,{configuration:t})||t}async function D(e,{attemptedAs:t,registry:r,headers:A,configuration:n}){if("HTTPError"===e.name&&401===e.response.statusCode)throw new p.lk(d.b.AUTHENTICATION_INVALID,`Invalid authentication (${"string"!=typeof t?"as "+await async function(e,t,{configuration:r}){var A;if(void 0===t||void 0===t.authorization)return"an anonymous user";try{const n=await h.get(new f.URL(e+"/-/whoami").href,{configuration:r,headers:t,jsonResponse:!0});return null!==(A=n.username)&&void 0!==A?A:"an unknown user"}catch(e){return"an unknown user"}}(r,A,{configuration:n}):"attempted as "+t})`)}function b(e){return e.scope?`/@${e.scope}%2f${e.name}`:"/"+e.name}async function v(e,{configuration:t,headers:r,ident:A,authType:n,registry:o,...i}){if(A&&void 0===o&&(o=B(A.scope,{configuration:t})),A&&A.scope&&void 0===n&&(n=u.BEST_EFFORT),"string"!=typeof o)throw new Error("Assertion failed: The registry should be a string");const s=F(o,{authType:n,configuration:t,ident:A});let a;s&&(r={...r,authorization:s});try{a=new f.URL(e)}catch(t){a=new f.URL(o+e)}try{return await h.get(a.href,{configuration:t,headers:r,...i})}catch(e){throw await D(e,{registry:o,configuration:t,headers:r}),e}}async function S(e,t,{attemptedAs:r,configuration:A,headers:n,ident:o,authType:i=u.ALWAYS_AUTH,registry:s,...a}){if(o&&void 0===s&&(s=B(o.scope,{configuration:A})),"string"!=typeof s)throw new Error("Assertion failed: The registry should be a string");const c=F(s,{authType:i,configuration:A,ident:o});c&&(n={...n,authorization:c});try{return await h.post(s+e,t,{configuration:A,headers:n,...a})}catch(o){if(!M(o))throw await D(o,{attemptedAs:r,registry:s,configuration:A,headers:n}),o;const i=await K(),c={...n,...R(i)};try{return await h.post(`${s}${e}`,t,{configuration:A,headers:c,...a})}catch(e){throw await D(e,{attemptedAs:r,registry:s,configuration:A,headers:n}),e}}}async function k(e,t,{attemptedAs:r,configuration:A,headers:n,ident:o,authType:i=u.ALWAYS_AUTH,registry:s,...a}){if(o&&void 0===s&&(s=B(o.scope,{configuration:A})),"string"!=typeof s)throw new Error("Assertion failed: The registry should be a string");const c=F(s,{authType:i,configuration:A,ident:o});c&&(n={...n,authorization:c});try{return await h.put(s+e,t,{configuration:A,headers:n,...a})}catch(o){if(!M(o))throw await D(o,{attemptedAs:r,registry:s,configuration:A,headers:n}),o;const i=await K(),c={...n,...R(i)};try{return await h.put(`${s}${e}`,t,{configuration:A,headers:c,...a})}catch(e){throw await D(e,{attemptedAs:r,registry:s,configuration:A,headers:n}),e}}}async function N(e,{attemptedAs:t,configuration:r,headers:A,ident:n,authType:o=u.ALWAYS_AUTH,registry:i,...s}){if(n&&void 0===i&&(i=B(n.scope,{configuration:r})),"string"!=typeof i)throw new Error("Assertion failed: The registry should be a string");const a=F(i,{authType:o,configuration:r,ident:n});a&&(A={...A,authorization:a});try{return await h.del(i+e,{configuration:r,headers:A,...s})}catch(n){if(!M(n))throw await D(n,{attemptedAs:t,registry:i,configuration:r,headers:A}),n;const o=await K(),a={...A,...R(o)};try{return await h.del(`${i}${e}`,{configuration:r,headers:a,...s})}catch(e){throw await D(e,{attemptedAs:t,registry:i,configuration:r,headers:A}),e}}}function F(e,{authType:t=u.CONFIGURATION,configuration:r,ident:A}){const n=Q(e,{configuration:r,ident:A}),o=function(e,t){switch(t){case u.CONFIGURATION:return e.get("npmAlwaysAuth");case u.BEST_EFFORT:case u.ALWAYS_AUTH:return!0;case u.NO_AUTH:return!1;default:throw new Error("Unreachable")}}(n,t);if(!o)return null;if(n.get("npmAuthToken"))return"Bearer "+n.get("npmAuthToken");if(n.get("npmAuthIdent"))return"Basic "+n.get("npmAuthIdent");if(o&&t!==u.BEST_EFFORT)throw new p.lk(d.b.AUTHENTICATION_NOT_FOUND,"No authentication configured for request");return null}async function K(){if(process.env.TEST_ENV)return process.env.TEST_NPM_2FA_TOKEN||"";const{otp:e}=await(0,C.prompt)({type:"password",name:"otp",message:"One-time password:",required:!0,onCancel:()=>process.exit(130)});return e}function M(e){if("HTTPError"!==e.name)return!1;try{return e.response.headers["www-authenticate"].split(/,\s*/).map(e=>e.toLowerCase()).includes("otp")}catch(e){return!1}}function R(e){return{"npm-otp":e}}!function(e){e.FETCH_REGISTRY="npmRegistryServer",e.PUBLISH_REGISTRY="npmPublishRegistry"}(l||(l={})),function(e){e[e.NO_AUTH=0]="NO_AUTH",e[e.BEST_EFFORT=1]="BEST_EFFORT",e[e.CONFIGURATION=2]="CONFIGURATION",e[e.ALWAYS_AUTH=3]="ALWAYS_AUTH"}(u||(u={}));class x{supports(e,t){if(!e.reference.startsWith("npm:"))return!1;const r=new f.URL(e.reference);return!!g().valid(r.pathname)&&!r.searchParams.has("__archiveUrl")}getLocalPath(e,t){return null}async fetch(e,t){const r=t.checksums.get(e.locatorHash)||null,[A,n,o]=await t.cache.fetchPackageFromCache(e,r,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,s.prettyLocator(t.project.configuration,e)+" can't be found in the cache and will be fetched from the remote registry"),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck});return{packageFs:A,releaseFs:n,prefixPath:s.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){let r;try{r=await v(x.getLocatorUrl(e),{configuration:t.project.configuration,ident:e})}catch(A){r=await v(x.getLocatorUrl(e).replace(/%2f/g,"/"),{configuration:t.project.configuration,ident:e})}return await a.convertToZip(r,{compressionLevel:t.project.configuration.get("compressionLevel"),prefixPath:s.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,t,{configuration:r}){let A=B(e.scope,{configuration:r});const n=x.getLocatorUrl(e);return t=t.replace(/^https?:(\/\/(?:[^/]+\.)?npmjs.org(?:$|\/))/,"https:$1"),A=A.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),(t=t.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"))===A+n||t===A+n.replace(/%2f/g,"/")}static getLocatorUrl(e){const t=g().clean(e.reference.slice("npm:".length));if(null===t)throw new p.lk(d.b.RESOLVER_NOT_FOUND,"The npm semver resolver got selected, but the version isn't semver");return`${b(e)}/-/${e.name}-${t}.tgz`}}var L=r(46611),P=r(36545),O=r(32485);const U=s.makeIdent(null,"node-gyp"),T=/\b(node-gyp|prebuild-install)\b/;var j=r(52779);var Y=r(49881),G=r(76417),H=r(10129);async function J(e,t,{access:r,tag:A,registry:n}){const o=e.project.configuration,i=e.manifest.name,a=e.manifest.version,c=s.stringifyIdent(i),g=(0,G.createHash)("sha1").update(t).digest("hex"),l=H.Sd(t).toString();void 0===r&&(r=e.manifest.publishConfig&&"string"==typeof e.manifest.publishConfig.access?e.manifest.publishConfig.access:null!==o.get("npmPublishAccess")?o.get("npmPublishAccess"):i.scope?"restricted":"public");const u=await Y.packUtils.genPackageManifest(e),h=`${c}-${a}.tgz`,p=new f.URL(`${c}/-/${h}`,n);return{_id:c,_attachments:{[h]:{content_type:"application/octet-stream",data:t.toString("base64"),length:t.length}},name:c,access:r,"dist-tags":{[A]:a},versions:{[a]:{...u,_id:`${c}@${a}`,name:c,version:a,dist:{shasum:g,integrity:l,tarball:p.toString()}}}}}const q={npmAlwaysAuth:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:i.a2.BOOLEAN,default:!1},npmAuthIdent:{description:"Authentication identity for the npm registry (_auth in npm and yarn v1)",type:i.a2.SECRET,default:null},npmAuthToken:{description:"Authentication token for the npm registry (_authToken in npm and yarn v1)",type:i.a2.SECRET,default:null}},z={npmPublishRegistry:{description:"Registry to push packages to",type:i.a2.STRING,default:null},npmRegistryServer:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:i.a2.STRING,default:"https://registry.yarnpkg.com"}},W={configuration:{...q,...z,npmScopes:{description:"Settings per package scope",type:i.a2.MAP,valueDefinition:{description:"",type:i.a2.SHAPE,properties:{...q,...z}}},npmRegistries:{description:"Settings per registry",type:i.a2.MAP,normalizeKeys:I,valueDefinition:{description:"",type:i.a2.SHAPE,properties:{...q}}}},fetchers:[class{supports(e,t){if(!e.reference.startsWith("npm:"))return!1;const{selector:r,params:A}=s.parseRange(e.reference);return!!g().valid(r)&&(null!==A&&"string"==typeof A.__archiveUrl)}getLocalPath(e,t){return null}async fetch(e,t){const r=t.checksums.get(e.locatorHash)||null,[A,n,o]=await t.cache.fetchPackageFromCache(e,r,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,s.prettyLocator(t.project.configuration,e)+" can't be found in the cache and will be fetched from the remote server"),loader:()=>this.fetchFromNetwork(e,t),skipIntegrityCheck:t.skipIntegrityCheck});return{packageFs:A,releaseFs:n,prefixPath:s.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,t){const{params:r}=s.parseRange(e.reference);if(null===r||"string"!=typeof r.__archiveUrl)throw new Error("Assertion failed: The archiveUrl querystring parameter should have been available");const A=await v(r.__archiveUrl,{configuration:t.project.configuration,ident:e});return await a.convertToZip(A,{compressionLevel:t.project.configuration.get("compressionLevel"),prefixPath:s.getIdentVendorPath(e),stripComponents:1})}},x],resolvers:[class{supportsDescriptor(e,t){return!!e.range.startsWith("npm:")&&!!s.tryParseDescriptor(e.range.slice("npm:".length),!0)}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error("Unreachable")}bindDescriptor(e,t,r){return e}getResolutionDependencies(e,t){const r=s.parseDescriptor(e.range.slice("npm:".length),!0);return t.resolver.getResolutionDependencies(r,t)}async getCandidates(e,t,r){const A=s.parseDescriptor(e.range.slice("npm:".length),!0);return await r.resolver.getCandidates(A,t,r)}async getSatisfying(e,t,r){const A=s.parseDescriptor(e.range.slice("npm:".length),!0);return r.resolver.getSatisfying(A,t,r)}resolve(e,t){throw new Error("Unreachable")}},class{supportsDescriptor(e,t){return!!e.range.startsWith("npm:")&&!!P.validRange(e.range.slice("npm:".length))}supportsLocator(e,t){if(!e.reference.startsWith("npm:"))return!1;const{selector:r}=s.parseRange(e.reference);return!!g().valid(r)}shouldPersistResolution(e,t){return!0}bindDescriptor(e,t,r){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,r){const A=P.validRange(e.range.slice("npm:".length));if(null===A)throw new Error("Expected a valid range, got "+e.range.slice("npm:".length));const n=await v(b(e),{configuration:r.project.configuration,ident:e,jsonResponse:!0}),o=Object.keys(n.versions).map(e=>new(g().SemVer)(e)).filter(e=>A.test(e)),i=o.filter(e=>!n.versions[e.raw].deprecated),a=i.length>0?i:o;return a.sort((e,t)=>-e.compare(t)),a.map(t=>{const A=s.makeLocator(e,"npm:"+t.raw),o=n.versions[t.raw].dist.tarball;return x.isConventionalTarballUrl(A,o,{configuration:r.project.configuration})?A:s.bindLocator(A,{__archiveUrl:o})})}async getSatisfying(e,t,r){const A=P.validRange(e.range.slice("npm:".length));if(null===A)throw new Error("Expected a valid range, got "+e.range.slice("npm:".length));return t.map(e=>{try{return new(g().SemVer)(e.slice("npm:".length))}catch(e){return null}}).filter(e=>null!==e).filter(e=>A.test(e)).sort((e,t)=>-e.compare(t)).map(t=>s.makeLocator(e,"npm:"+t.raw))}async resolve(e,t){const{selector:r}=s.parseRange(e.reference),A=g().clean(r);if(null===A)throw new p.lk(d.b.RESOLVER_NOT_FOUND,"The npm semver resolver got selected, but the version isn't semver");const n=await v(b(e),{configuration:t.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(n,"versions"))throw new p.lk(d.b.REMOTE_INVALID,'Registry returned invalid data for - missing "versions" field');if(!Object.prototype.hasOwnProperty.call(n.versions,A))throw new p.lk(d.b.REMOTE_NOT_FOUND,`Registry failed to return reference "${A}"`);const o=new L.G;if(o.load(n.versions[A]),!o.dependencies.has(U.identHash)&&!o.peerDependencies.has(U.identHash))for(const r of o.scripts.values())if(r.match(T)){o.dependencies.set(U.identHash,s.makeDescriptor(U,"latest")),t.report.reportWarning(d.b.NODE_GYP_INJECTED,s.prettyLocator(t.project.configuration,e)+": Implicit dependencies on node-gyp are discouraged");break}return"string"==typeof o.raw.deprecated&&t.report.reportWarning(d.b.DEPRECATED_PACKAGE,`${s.prettyLocator(t.project.configuration,e)} is deprecated: ${o.raw.deprecated}`),{...e,version:A,languageName:"node",linkType:O.Un.HARD,dependencies:o.dependencies,peerDependencies:o.peerDependencies,dependenciesMeta:o.dependenciesMeta,peerDependenciesMeta:o.peerDependenciesMeta,bin:o.bin}}},class{supportsDescriptor(e,t){return!!e.range.startsWith("npm:")&&!!j.c.test(e.range.slice("npm:".length))}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error("Unreachable")}bindDescriptor(e,t,r){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,r){const A=e.range.slice("npm:".length),n=await v(b(e),{configuration:r.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(n,"dist-tags"))throw new p.lk(d.b.REMOTE_INVALID,'Registry returned invalid data - missing "dist-tags" field');const o=n["dist-tags"];if(!Object.prototype.hasOwnProperty.call(o,A))throw new p.lk(d.b.REMOTE_NOT_FOUND,`Registry failed to return tag "${A}"`);const i=o[A],a=s.makeLocator(e,"npm:"+i),c=n.versions[i].dist.tarball;return x.isConventionalTarballUrl(a,c,{configuration:r.project.configuration})?[a]:[s.bindLocator(a,{__archiveUrl:c})]}async getSatisfying(e,t,r){return null}async resolve(e,t){throw new Error("Unreachable")}}]}},49881:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>T,packUtils:()=>A});var A={};r.r(A),r.d(A,{genPackList:()=>K,genPackStream:()=>N,genPackageManifest:()=>F,hasPackScripts:()=>S,prepareForPack:()=>k});var n=r(54143),o=r(35691),i=r(92659),s=r(36370),a=r(40822);class c extends a.Command{}(0,s.gn)([a.Command.String("--cwd",{hidden:!0})],c.prototype,"cwd",void 0);var g=r(46611),l=r(46009);class u extends a.UsageError{constructor(e,t){super(`This command can only be run from within a workspace of your project (${l.y1.relative(e,t)} isn't a workspace of ${l.y1.join(e,g.G.fileName)}).`)}}r(63129),r(5864),r(35747);new Map([["constraints",[["constraints","query"],["constraints","source"],["constraints"]]],["exec",[]],["interactive-tools",[["search"],["upgrade-interactive"]]],["stage",[["stage"]]],["typescript",[]],["version",[["version","apply"],["version","check"],["version"]]],["workspace-tools",[["workspaces","focus"],["workspaces","foreach"]]]]);var h=r(71643),p=r(39922);(0,s.gn)([a.Command.Path("--welcome")],class extends c{async execute(){const e=await p.VK.find(this.context.cwd,this.context.plugins);this.context.stdout.write((e=>`\n${h.pretty(e,"Welcome on Yarn 2!","bold")} 🎉 Thanks for helping us shape our vision of how projects\nshould be managed going forward.\n\nBeing still in RC, Yarn 2 isn't completely stable yet. Some features might be\nmissing, and some behaviors may have received major overhaul. In case of doubt,\nuse the following URLs to get some insight:\n\n - The changelog:\n ${h.pretty(e,"https://github.com/yarnpkg/berry/tree/CHANGELOG.md","cyan")}\n\n - Our issue tracker:\n ${h.pretty(e,"https://github.com/yarnpkg/berry","cyan")}\n\n - Our Discord server:\n ${h.pretty(e,"https://discord.gg/yarnpkg","cyan")}\n\nWe're hoping you will enjoy the experience. For now, a good start is to run\nthe two following commands:\n\n ${h.pretty(e,"find . -name node_modules -prune -exec rm -r {} \\;","magenta")}\n ${h.pretty(e,"yarn install","magenta")}\n\nOne last trick! If you need at some point to upgrade Yarn to a nightly build,\nthe following command will install the CLI straight from master:\n\n ${h.pretty(e,"yarn set version from sources","magenta")}\n\nSee you later 👋\n`)(e).trim()+"\n")}}.prototype,"execute",null);var d=r(85824),C=r(28148),f=r(33720),I=r(15815),E=r(43896),B=r(63088),y=r(10489),m=r(2401),w=r.n(m),Q=r(59938),D=r(78761);const b=["/package.json","/readme","/readme.*","/license","/license.*","/licence","/licence.*","/changelog","/changelog.*"],v=["/package.tgz",".github",".git",".hg","node_modules",".npmignore",".gitignore",".#*",".DS_Store"];async function S(e){return!!B.hasWorkspaceScript(e,"prepack")||!!B.hasWorkspaceScript(e,"postpack")}async function k(e,{report:t},r){await B.maybeExecuteWorkspaceLifecycleScript(e,"prepack",{report:t});try{await r()}finally{await B.maybeExecuteWorkspaceLifecycleScript(e,"postpack",{report:t})}}async function N(e,t){var r,A;void 0===t&&(t=await K(e));const n=new Set;for(const t of null!==(A=null===(r=e.manifest.publishConfig)||void 0===r?void 0:r.executableFiles)&&void 0!==A?A:new Set)n.add(l.y1.normalize(t));for(const t of e.manifest.bin.values())n.add(l.y1.normalize(t));const o=Q.pack();process.nextTick(async()=>{for(const r of t){const t=l.y1.normalize(r),A=l.y1.resolve(e.cwd,t),i=l.y1.join("package",t),s=await E.xfs.lstatPromise(A),a={name:i,mtime:new Date(3155328e5)},c=n.has(t)?493:420;let g,u;const h=new Promise((e,t)=>{g=e,u=t}),p=e=>{e?u(e):g()};if(s.isFile()){let r;r="package.json"===t?Buffer.from(JSON.stringify(await F(e),null,2)):await E.xfs.readFilePromise(A),o.entry({...a,mode:c,type:"file"},r,p)}else s.isSymbolicLink()?o.entry({...a,mode:c,type:"symlink",linkname:await E.xfs.readlinkPromise(A)},p):p(new Error(`Unsupported file type ${s.mode} for ${l.cS.fromPortablePath(t)}`));await h}o.finalize()});const i=(0,D.createGzip)();return o.pipe(i),i}async function F(e){const t=JSON.parse(JSON.stringify(e.manifest.raw));return await e.project.configuration.triggerHook(e=>e.beforeWorkspacePacking,e,t),t}async function K(e){var t,r,A,n,o,i,s,a;const c=e.project,g=c.configuration,u={accept:[],reject:[]};for(const e of v)u.reject.push(e);for(const e of b)u.accept.push(e);u.reject.push(g.get("rcFilename"));const h=t=>{if(null===t||!t.startsWith(e.cwd+"/"))return;const r=l.y1.relative(e.cwd,t),A=l.y1.resolve(l.LZ.root,r);u.reject.push(A)};h(l.y1.resolve(c.cwd,g.get("lockfileFilename"))),h(g.get("bstatePath")),h(g.get("cacheFolder")),h(g.get("globalFolder")),h(g.get("installStatePath")),h(g.get("virtualFolder")),h(g.get("yarnPath")),await g.triggerHook(e=>e.populateYarnPaths,c,e=>{h(e)});for(const t of c.workspaces){const r=l.y1.relative(e.cwd,t.cwd);""===r||r.match(/^(\.\.)?\//)||u.reject.push("/"+r)}const p={accept:[],reject:[]},d=null!==(r=null===(t=e.manifest.publishConfig)||void 0===t?void 0:t.main)&&void 0!==r?r:e.manifest.main,C=null!==(n=null===(A=e.manifest.publishConfig)||void 0===A?void 0:A.module)&&void 0!==n?n:e.manifest.module,f=null!==(i=null===(o=e.manifest.publishConfig)||void 0===o?void 0:o.browser)&&void 0!==i?i:e.manifest.browser,I=null!==(a=null===(s=e.manifest.publishConfig)||void 0===s?void 0:s.bin)&&void 0!==a?a:e.manifest.bin;null!=d&&p.accept.push(l.y1.resolve(l.LZ.root,d)),null!=C&&p.accept.push(l.y1.resolve(l.LZ.root,C)),"string"==typeof f&&p.accept.push(l.y1.resolve(l.LZ.root,f));for(const e of I.values())p.accept.push(l.y1.resolve(l.LZ.root,e));if(f instanceof Map)for(const[e,t]of f.entries())p.accept.push(l.y1.resolve(l.LZ.root,e)),"string"==typeof t&&p.accept.push(l.y1.resolve(l.LZ.root,t));const E=null!==e.manifest.files;if(E){p.reject.push("/*");for(const t of e.manifest.files)R(p.accept,t,{cwd:l.LZ.root})}return await async function(e,{hasExplicitFileList:t,globalList:r,ignoreList:A}){const n=[],o=new y.n(e),i=[[l.LZ.root,[A]]];for(;i.length>0;){const[e,A]=i.pop(),s=await o.lstatPromise(e);if(!x(e,{globalList:r,ignoreLists:s.isDirectory()?null:A}))if(s.isDirectory()){const n=await o.readdirPromise(e);let s=!1,a=!1;if(!t||e!==l.LZ.root)for(const e of n)s=s||".gitignore"===e,a=a||".npmignore"===e;const c=a?await M(o,e,".npmignore"):s?await M(o,e,".gitignore"):null;let g=null!==c?[c].concat(A):A;x(e,{globalList:r,ignoreLists:A})&&(g=[...A,{accept:[],reject:["**/*"]}]);for(const t of n)i.push([l.y1.resolve(e,t),g])}else(s.isFile()||s.isSymbolicLink())&&n.push(l.y1.relative(l.LZ.root,e))}return n.sort()}(e.cwd,{hasExplicitFileList:E,globalList:u,ignoreList:p})}async function M(e,t,r){const A={accept:[],reject:[]},n=await e.readFilePromise(l.y1.join(t,r),"utf8");for(const e of n.split(/\n/g))R(A.reject,e,{cwd:t});return A}function R(e,t,{cwd:r}){const A=t.trim();""!==A&&"#"!==A[0]&&e.push(function(e,{cwd:t}){const r="!"===e[0];return r&&(e=e.slice(1)),e.match(/\.{0,1}\//)&&(e=l.y1.resolve(t,e)),r&&(e="!"+e),e}(A,{cwd:r}))}function x(e,{globalList:t,ignoreLists:r}){if(L(e,t.accept))return!1;if(L(e,t.reject))return!0;if(null!==r)for(const t of r){if(L(e,t.accept))return!1;if(L(e,t.reject))return!0}return!1}function L(e,t){let r=t;const A=[];for(let e=0;e{await k(r,{report:t},async()=>{t.reportJson({base:r.cwd});const e=await K(r);for(const r of e)t.reportInfo(null,r),t.reportJson({location:r});if(!this.dryRun){const t=await N(r,e),n=E.xfs.createWriteStream(A);t.pipe(n),await new Promise(e=>{n.on("finish",e)})}}),this.dryRun||(t.reportInfo(i.b.UNNAMED,"Package archive generated in "+h.pretty(e,A,h.Type.PATH)),t.reportJson({output:A}))})).exitCode()}}O.usage=a.Command.Usage({description:"generate a tarball from the active workspace",details:"\n This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\n\n If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\n ",examples:[["Create an archive from the active workspace","yarn pack"],["List the files that would be made part of the workspace's archive","yarn pack --dry-run"],["Name and output the archive in a dedicated folder","yarn pack --out /artifacts/%s-%v.tgz"]]}),(0,s.gn)([a.Command.Boolean("--install-if-needed",{description:"Run a preliminary `yarn install` if the package contains build scripts"})],O.prototype,"installIfNeeded",void 0),(0,s.gn)([a.Command.Boolean("-n,--dry-run",{description:"Print the file paths without actually generating the package archive"})],O.prototype,"dryRun",void 0),(0,s.gn)([a.Command.Boolean("--json",{description:"Format the output as an NDJSON stream"})],O.prototype,"json",void 0),(0,s.gn)([a.Command.String("--filename",{hidden:!1,description:"Create the archive at the specified path"}),a.Command.String("-o,--out",{description:"Create the archive at the specified path"})],O.prototype,"out",void 0),(0,s.gn)([a.Command.Path("pack")],O.prototype,"execute",null);const U=["dependencies","devDependencies","peerDependencies"],T={hooks:{beforeWorkspacePacking:(e,t)=>{t.publishConfig&&(t.publishConfig.main&&(t.main=t.publishConfig.main),t.publishConfig.browser&&(t.browser=t.publishConfig.browser),t.publishConfig.module&&(t.module=t.publishConfig.module),t.publishConfig.browser&&(t.browser=t.publishConfig.browser),t.publishConfig.bin&&(t.bin=t.publishConfig.bin));const r=e.project;for(const A of U)for(const s of e.manifest.getForScope(A).values()){const e=r.tryWorkspaceByDescriptor(s),a=n.parseRange(s.range);if("workspace:"===a.protocol)if(null===e){if(null===r.tryWorkspaceByIdent(s))throw new o.lk(i.b.WORKSPACE_NOT_FOUND,n.prettyDescriptor(r.configuration,s)+": No local workspace found for this range")}else{let r;r=n.areDescriptorsEqual(s,e.anchoredDescriptor)||"*"===a.selector?e.manifest.version:a.selector,t[A][n.stringifyIdent(s)]=r}}}},commands:[O]}},29936:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>re,patchUtils:()=>A});var A={};r.r(A),r.d(A,{applyPatchFile:()=>S,diffFolders:()=>H,extractPackageToDisk:()=>G,isParentRequired:()=>j,loadPatchFiles:()=>Y,makeDescriptor:()=>O,makeLocator:()=>U,parseDescriptor:()=>x,parseLocator:()=>L,parsePatchFile:()=>D});var n=r(39922),o=r(35691),i=r(92659),s=r(54143),a=r(73632),c=r(43896),g=r(46009),l=r(90739),u=r(75448),h=r(65281),p=r(33720),d=r(6220),C=r(36545),f=r(78420);class I extends Error{constructor(e,t){super("Cannot apply hunk #"+(e+1)),this.hunk=t}}const E=/^@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@.*/;function B(e){return g.y1.relative(g.LZ.root,g.y1.resolve(g.LZ.root,g.cS.toPortablePath(e)))}function y(e){const t=e.trim().match(E);if(!t)throw new Error(`Bad header line: '${e}'`);return{original:{start:Math.max(Number(t[1]),1),length:Number(t[3]||1)},patched:{start:Math.max(Number(t[4]),1),length:Number(t[6]||1)}}}var m;!function(e){e.Context="context",e.Insertion="insertion",e.Deletion="deletion"}(m||(m={}));const w={"@":"header","-":m.Deletion,"+":m.Insertion," ":m.Context,"\\":"pragma",undefined:m.Context};function Q(e){const t=511&parseInt(e,8);if(420!==t&&493!==t)throw new Error("Unexpected file mode string: "+e);return t}function D(e){const t=e.split(/\n/g);return""===t[t.length-1]&&t.pop(),function(e){const t=[];for(const r of e){const{semverExclusivity:e,diffLineFromPath:A,diffLineToPath:n,oldMode:o,newMode:i,deletedFileMode:s,newFileMode:c,renameFrom:g,renameTo:l,beforeHash:u,afterHash:h,fromPath:p,toPath:d,hunks:C}=r,f=g?"rename":s?"file deletion":c?"file creation":C&&C.length>0?"patch":"mode change";let I=null;switch(f){case"rename":if(!g||!l)throw new Error("Bad parser state: rename from & to not given");t.push({type:"rename",semverExclusivity:e,fromPath:B(g),toPath:B(l)}),I=l;break;case"file deletion":{const r=A||p;if(!r)throw new Error("Bad parse state: no path given for file deletion");t.push({type:"file deletion",semverExclusivity:e,hunk:C&&C[0]||null,path:B(r),mode:Q(s),hash:u})}break;case"file creation":{const r=n||d;if(!r)throw new Error("Bad parse state: no path given for file creation");t.push({type:"file creation",semverExclusivity:e,hunk:C&&C[0]||null,path:B(r),mode:Q(c),hash:h})}break;case"patch":case"mode change":I=d||n;break;default:a.assertNever(f)}I&&o&&i&&o!==i&&t.push({type:"mode change",semverExclusivity:e,path:B(I),oldMode:Q(o),newMode:Q(i)}),I&&C&&C.length&&t.push({type:"patch",semverExclusivity:e,path:B(I),hunks:C,beforeHash:u,afterHash:h})}return t}(function(e){const t=[];let r={semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null},A="parsing header",n=null,o=null;function i(){n&&(o&&(n.parts.push(o),o=null),r.hunks.push(n),n=null)}function s(){i(),t.push(r),r={semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}}for(let t=0;te<0?e:"+"+e;throw new Error(`hunk header integrity check failed (expected @@ ${A(e.header.original.length)} ${A(e.header.patched.length)} @@, got @@ ${A(t)} ${A(r)} @@)`)}}async function v(e,t,r){const A=await e.lstatPromise(t),n=await r();if(void 0!==n&&(t=n),e.lutimesPromise)await e.lutimesPromise(t,A.atime,A.mtime);else{if(A.isSymbolicLink())throw new Error("Cannot preserve the time values of a symlink");await e.utimesPromise(t,A.atime,A.mtime)}}async function S(e,{baseFs:t=new f.S,dryRun:r=!1,version:A=null}={}){for(const n of e)if(null===n.semverExclusivity||null===A||C.satisfiesWithPrereleases(A,n.semverExclusivity))switch(n.type){case"file deletion":if(r){if(!t.existsSync(n.path))throw new Error("Trying to delete a file that doesn't exist: "+n.path)}else await v(t,g.y1.dirname(n.path),async()=>{await t.unlinkPromise(n.path)});break;case"rename":if(r){if(!t.existsSync(n.fromPath))throw new Error("Trying to move a file that doesn't exist: "+n.fromPath)}else await v(t,g.y1.dirname(n.fromPath),async()=>{await v(t,g.y1.dirname(n.toPath),async()=>{await v(t,n.fromPath,async()=>(await t.movePromise(n.fromPath,n.toPath),n.toPath))})});break;case"file creation":if(r){if(t.existsSync(n.path))throw new Error("Trying to create a file that already exists: "+n.path)}else{const e=n.hunk?n.hunk.parts[0].lines.join("\n")+(n.hunk.parts[0].noNewlineAtEndOfFile?"":"\n"):"";await t.mkdirpPromise(g.y1.dirname(n.path),{chmod:493,utimes:[315532800,315532800]}),await t.writeFilePromise(n.path,e,{mode:n.mode}),await t.utimesPromise(n.path,315532800,315532800)}break;case"patch":await v(t,n.path,async()=>{await F(n,{baseFs:t,dryRun:r})});break;case"mode change":{const e=(await t.statPromise(n.path)).mode;if(k(n.newMode)!==k(e))continue;await v(t,n.path,async()=>{await t.chmodPromise(n.path,n.newMode)})}break;default:a.assertNever(n)}}function k(e){return(64&e)>0}function N(e){return e.replace(/\s+$/,"")}async function F({hunks:e,path:t},{baseFs:r,dryRun:A=!1}){const n=await r.statSync(t).mode,o=(await r.readFileSync(t,"utf8")).split(/\n/),i=[];let s=0,c=0;for(const t of e){const r=Math.max(c,t.header.patched.start+s),A=Math.max(0,r-c),n=Math.max(0,o.length-r-t.header.original.length),a=Math.max(A,n);let g=0,l=0,u=null;for(;g<=a;){if(g<=A&&(l=r-g,u=K(t,o,l),null!==u)){g=-g;break}if(g<=n&&(l=r+g,u=K(t,o,l),null!==u))break;g+=1}if(null===u)throw new I(e.indexOf(t),t);i.push(u),s+=g,c=l+t.header.original.length}if(A)return;let g=0;for(const e of i)for(const t of e)switch(t.type){case"splice":{const e=t.index+g;o.splice(e,t.numToDelete,...t.linesToInsert),g+=t.linesToInsert.length-t.numToDelete}break;case"pop":o.pop();break;case"push":o.push(t.line);break;default:a.assertNever(t)}await r.writeFilePromise(t,o.join("\n"),{mode:n})}function K(e,t,r){const A=[];for(const o of e.parts)switch(o.type){case m.Context:case m.Deletion:for(const e of o.lines){const A=t[r];if(null==A||(n=e,N(A)!==N(n)))return null;r+=1}o.type===m.Deletion&&(A.push({type:"splice",index:r-o.lines.length,numToDelete:o.lines.length,linesToInsert:[]}),o.noNewlineAtEndOfFile&&A.push({type:"push",line:""}));break;case m.Insertion:A.push({type:"splice",index:r,numToDelete:0,linesToInsert:o.lines}),o.noNewlineAtEndOfFile&&A.push({type:"pop"});break;default:a.assertNever(o.type)}var n;return A}const M=/^builtin<([^>]+)>$/;function R(e,t){const{source:r,selector:A,params:n}=s.parseRange(e);if(null===r)throw new Error("Patch locators must explicitly define their source");const o=A?A.split(/&/).map(e=>g.cS.toPortablePath(e)):[],i=n&&"string"==typeof n.locator?s.parseLocator(n.locator):null,a=n&&"string"==typeof n.version?n.version:null;return{parentLocator:i,sourceItem:t(r),patchPaths:o,sourceVersion:a}}function x(e){const{sourceItem:t,...r}=R(e.range,s.parseDescriptor);return{...r,sourceDescriptor:t}}function L(e){const{sourceItem:t,...r}=R(e.reference,s.parseLocator);return{...r,sourceLocator:t}}function P({parentLocator:e,sourceItem:t,patchPaths:r,sourceVersion:A,patchHash:n},o){const i=null!==e?{locator:s.stringifyLocator(e)}:{},a=void 0!==A?{version:A}:{},c=void 0!==n?{hash:n}:{};return s.makeRange({protocol:"patch:",source:o(t),selector:r.join("&"),params:{...a,...c,...i}})}function O(e,{parentLocator:t,sourceDescriptor:r,patchPaths:A}){return s.makeLocator(e,P({parentLocator:t,sourceItem:r,patchPaths:A},s.stringifyDescriptor))}function U(e,{parentLocator:t,sourcePackage:r,patchPaths:A,patchHash:n}){return s.makeLocator(e,P({parentLocator:t,sourceItem:r,sourceVersion:r.version,patchPaths:A,patchHash:n},s.stringifyLocator))}function T({onAbsolute:e,onRelative:t,onBuiltin:r},A){const n=A.match(M);return null!==n?r(n[1]):g.y1.isAbsolute(A)?e(A):t(A)}function j(e){return T({onAbsolute:()=>!1,onRelative:()=>!0,onBuiltin:()=>!1},e)}async function Y(e,t,r){const A=null!==e?await r.fetcher.fetch(e,r):null,n=A&&A.localPath?{packageFs:new u.M(g.LZ.root),prefixPath:g.y1.relative(g.LZ.root,A.localPath)}:A;A&&A!==n&&A.releaseFs&&A.releaseFs();return(await a.releaseAfterUseAsync(async()=>await Promise.all(t.map(async e=>T({onAbsolute:async()=>await c.xfs.readFilePromise(e,"utf8"),onRelative:async()=>{if(null===A)throw new Error("Assertion failed: The parent locator should have been fetched");return await A.packageFs.readFilePromise(e,"utf8")},onBuiltin:async e=>await r.project.configuration.firstHook(e=>e.getBuiltinPatch,r.project,e)},e))))).map(e=>"string"==typeof e?e.replace(/\r\n?/g,"\n"):e)}async function G(e,{cache:t,project:r}){const A=r.storedChecksums,n=new p.$,o=r.configuration.makeFetcher(),i=await o.fetch(e,{cache:t,project:r,fetcher:o,checksums:A,report:n}),a=await c.xfs.mktempPromise();return await c.xfs.copyPromise(a,i.prefixPath,{baseFs:i.packageFs}),await c.xfs.writeJsonPromise(g.y1.join(a,".yarn-patch.json"),{locator:s.stringifyLocator(e)}),c.xfs.detachTemp(a),a}async function H(e,t){const r=g.cS.fromPortablePath(e).replace(/\\/g,"/"),A=g.cS.fromPortablePath(t).replace(/\\/g,"/"),{stdout:n}=await d.execvp("git",["diff","--src-prefix=a/","--dst-prefix=b/","--ignore-cr-at-eol","--full-index","--no-index",r,A],{cwd:g.cS.toPortablePath(process.cwd())}),o=r.startsWith("/")?e=>e.slice(1):e=>e;return n.replace(new RegExp(`(a|b)(${a.escapeRegExp(`/${o(r)}/`)})`,"g"),"$1/").replace(new RegExp("(a|b)"+a.escapeRegExp(`/${o(A)}/`),"g"),"$1/").replace(new RegExp(a.escapeRegExp(r+"/"),"g"),"").replace(new RegExp(a.escapeRegExp(A+"/"),"g"),"")}var J=r(71643);function q(e,{configuration:t,report:r}){for(const A of e.parts)for(const e of A.lines)switch(A.type){case m.Context:r.reportInfo(null," "+J.pretty(t,e,"grey"));break;case m.Deletion:r.reportError(i.b.FROZEN_LOCKFILE_EXCEPTION,"- "+J.pretty(t,e,J.Type.REMOVED));break;case m.Insertion:r.reportError(i.b.FROZEN_LOCKFILE_EXCEPTION,"+ "+J.pretty(t,e,J.Type.ADDED));break;default:a.assertNever(A.type)}}var z=r(20624);var W=r(36370),V=r(25413),X=r(85824),_=r(28148),Z=r(40822);class $ extends V.BaseCommand{async execute(){const e=await n.VK.find(this.context.cwd,this.context.plugins),{project:t,workspace:r}=await X.I.find(e,this.context.cwd),A=await _.C.find(e);if(!r)throw new V.WorkspaceRequiredError(t.cwd,this.context.cwd);await t.restoreInstallState();const o=g.y1.resolve(this.context.cwd,g.cS.toPortablePath(this.patchFolder)),i=g.y1.join(o,".yarn-patch.json");if(!c.xfs.existsSync(i))throw new Z.UsageError("The argument folder didn't get created by 'yarn patch'");const a=await c.xfs.readJsonPromise(i),l=s.parseLocator(a.locator,!0);if(!t.storedPackages.has(l.locatorHash))throw new Z.UsageError("No package found in the project for the given locator");const u=await G(l,{cache:A,project:t});this.context.stdout.write(await H(u,o))}}$.usage=Z.Command.Usage({description:"\n This will turn the folder passed in parameter into a patchfile suitable for consumption with the `patch:` protocol.\n\n Only folders generated through `yarn patch` are accepted as valid input for `yarn patch-commit`.\n "}),(0,W.gn)([Z.Command.String()],$.prototype,"patchFolder",void 0),(0,W.gn)([Z.Command.Path("patch-commit")],$.prototype,"execute",null);var ee=r(15815);class te extends V.BaseCommand{async execute(){const e=await n.VK.find(this.context.cwd,this.context.plugins),{project:t,workspace:r}=await X.I.find(e,this.context.cwd),A=await _.C.find(e);if(!r)throw new V.WorkspaceRequiredError(t.cwd,this.context.cwd);await t.restoreInstallState();let o=s.parseLocator(this.package);if("unknown"===o.reference){const r=a.mapAndFilter([...t.storedPackages.values()],e=>e.identHash!==o.identHash||s.isVirtualLocator(e)?a.mapAndFilter.skip:e);if(0===r.length)throw new Z.UsageError("No package found in the project for the given locator");if(r.length>1)throw new Z.UsageError("Multiple candidate packages found; explicitly choose one of them (use `yarn why ` to get more information as to who depends on them):\n"+r.map(t=>"\n- "+s.prettyLocator(e,t)).join(""));o=r[0]}if(!t.storedPackages.has(o.locatorHash))throw new Z.UsageError("No package found in the project for the given locator");await ee.Pk.start({configuration:e,stdout:this.context.stdout},async r=>{const n=await G(o,{cache:A,project:t});r.reportInfo(i.b.UNNAMED,`Package ${s.prettyLocator(e,o)} got extracted with success!`),r.reportInfo(i.b.UNNAMED,"You can now edit the following folder: "+J.pretty(e,g.cS.fromPortablePath(n),"magenta")),r.reportInfo(i.b.UNNAMED,`Once you are done run ${J.pretty(e,"yarn patch-commit "+g.cS.fromPortablePath(n),"cyan")} and Yarn will store a patchfile based on your changes.`)})}}te.usage=Z.Command.Usage({description:'\n This command will cause a package to be extracted in a temporary directory (under a folder named "patch-workdir"). This folder will be editable at will; running `yarn patch` inside it will then cause Yarn to generate a patchfile and register it into your top-level manifest (cf the `patch:` protocol).\n '}),(0,W.gn)([Z.Command.String()],te.prototype,"package",void 0),(0,W.gn)([Z.Command.Path("patch")],te.prototype,"execute",null);const re={configuration:{enableInlineHunks:{description:"If true, the installs will print unmatched patch hunks",type:n.a2.BOOLEAN,default:!1}},commands:[$,te],fetchers:[class{supports(e,t){return!!e.reference.startsWith("patch:")}getLocalPath(e,t){return null}async fetch(e,t){const r=t.checksums.get(e.locatorHash)||null,[A,n,o]=await t.cache.fetchPackageFromCache(e,r,{onHit:()=>t.report.reportCacheHit(e),onMiss:()=>t.report.reportCacheMiss(e,s.prettyLocator(t.project.configuration,e)+" can't be found in the cache and will be fetched from the disk"),loader:()=>this.patchPackage(e,t),skipIntegrityCheck:t.skipIntegrityCheck});return{packageFs:A,releaseFs:n,prefixPath:s.getIdentVendorPath(e),localPath:this.getLocalPath(e,t),checksum:o}}async patchPackage(e,t){const{parentLocator:r,sourceLocator:A,sourceVersion:n,patchPaths:p}=L(e),d=await Y(r,p,t),C=await c.xfs.mktempPromise(),f=g.y1.join(C,"patched.zip"),E=await t.fetcher.fetch(A,t),B=s.getIdentVendorPath(e),y=await(0,h.getLibzipPromise)(),m=new l.d(f,{libzip:y,create:!0,level:t.project.configuration.get("compressionLevel")});await m.mkdirpPromise(B),await a.releaseAfterUseAsync(async()=>{await m.copyPromise(B,E.prefixPath,{baseFs:E.packageFs,stableSort:!0})},E.releaseFs);const w=new u.M(g.y1.resolve(g.LZ.root,B),{baseFs:m});for(const e of d)if(null!==e)try{await S(D(e),{baseFs:w,version:n})}catch(e){if(!(e instanceof I))throw e;const r=t.project.configuration.get("enableInlineHunks"),A=r?"":" (set enableInlineHunks for details)";throw new o.lk(i.b.PATCH_HUNK_FAILED,e.message+A,A=>{r&&q(e.hunk,{configuration:t.project.configuration,report:A})})}return m}}],resolvers:[class{supportsDescriptor(e,t){return!!e.range.startsWith("patch:")}supportsLocator(e,t){return!!e.reference.startsWith("patch:")}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,r){const{patchPaths:A}=x(e);return A.every(e=>!j(e))?e:s.bindDescriptor(e,{locator:s.stringifyLocator(t)})}getResolutionDependencies(e,t){const{sourceDescriptor:r}=x(e);return[r]}async getCandidates(e,t,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");const{parentLocator:A,sourceDescriptor:n,patchPaths:o}=x(e),i=await Y(A,o,r.fetchOptions),s=t.get(n.descriptorHash);if(void 0===s)throw new Error("Assertion failed: The dependency should have been resolved");return[U(e,{parentLocator:A,sourcePackage:s,patchPaths:o,patchHash:z.makeHash("2",...i).slice(0,6)})]}async getSatisfying(e,t,r){return null}async resolve(e,t){const{sourceLocator:r}=L(e);return{...await t.resolver.resolve(r,t),...e}}}]}},83228:(e,t,r)=>{"use strict";r.r(t),r.d(t,{PnpInstaller:()=>k,PnpLinker:()=>S,default:()=>Y,getPnpPath:()=>T,jsInstallUtils:()=>A,pnpUtils:()=>n,quotePathIfNeeded:()=>j});var A={};r.r(A),r.d(A,{checkAndReportManifestCompatibility:()=>y,extractBuildScripts:()=>m,getExtractHint:()=>Q,hasBindingGyp:()=>D});var n={};r.r(n),r.d(n,{getUnpluggedPath:()=>b});var o=r(39922),i=r(43896),s=r(46009),a=r(53887),c=r.n(a),g=r(54143),l=r(71643),u=r(73632),h=r(32485),p=r(92659),d=r(46611),C=r(17674),f=r(75448),I=r(34432),E=r(40822),B=r(92409);function y(e,t,r,{configuration:A,report:n}){return d.G.isManifestFieldCompatible(t.manifest.os,process.platform)?!!d.G.isManifestFieldCompatible(t.manifest.cpu,process.arch)||(null==n||n.reportWarningOnce(p.b.INCOMPATIBLE_CPU,`${g.prettyLocator(A,e)} The CPU architecture ${process.arch} is incompatible with this module, ${r} skipped.`),!1):(null==n||n.reportWarningOnce(p.b.INCOMPATIBLE_OS,`${g.prettyLocator(A,e)} The platform ${process.platform} is incompatible with this module, ${r} skipped.`),!1)}function m(e,t,r,{configuration:A,report:n}){const o=[];for(const e of["preinstall","install","postinstall"])t.manifest.scripts.has(e)&&o.push([B.k.SCRIPT,e]);if(!t.manifest.scripts.has("install")&&t.misc.hasBindingGyp&&o.push([B.k.SHELLCODE,"node-gyp rebuild"]),0===o.length)return[];if(!A.get("enableScripts")&&!r.built)return null==n||n.reportWarningOnce(p.b.DISABLED_BUILD_SCRIPTS,g.prettyLocator(A,e)+" lists build scripts, but all build scripts have been disabled."),[];if(e.linkType!==h.Un.HARD)return null==n||n.reportWarningOnce(p.b.SOFT_LINK_BUILD,g.prettyLocator(A,e)+" lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored."),[];if(r&&!1===r.built)return null==n||n.reportInfoOnce(p.b.BUILD_DISABLED,g.prettyLocator(A,e)+" lists build scripts, but its build has been explicitly disabled through configuration."),[];return y(e,t,"build",{configuration:A,report:n})?o:[]}const w=new Set([".exe",".h",".hh",".hpp",".c",".cc",".cpp",".java",".jar",".node"]);function Q(e){return e.packageFs.getExtractHint({relevantExtensions:w})}function D(e){const t=s.y1.join(e.prefixPath,"binding.gyp");return e.packageFs.existsSync(t)}function b(e,{configuration:t}){return s.y1.resolve(t.get("pnpUnpluggedFolder"),g.slugifyLocator(e))}const v=new Set([g.makeIdent(null,"nan").identHash,g.makeIdent(null,"node-gyp").identHash,g.makeIdent(null,"node-pre-gyp").identHash,g.makeIdent(null,"node-addon-api").identHash,g.makeIdent(null,"fsevents").identHash]);class S{constructor(){this.mode="strict"}supportsPackage(e,t){return"pnp"===t.project.configuration.get("nodeLinker")&&t.project.configuration.get("pnpMode")===this.mode}async findPackageLocation(e,t){const r=T(t.project).main;if(!i.xfs.existsSync(r))throw new E.UsageError(`The project in ${l.pretty(t.project.configuration,t.project.cwd+"/package.json",l.Type.PATH)} doesn't seem to have been installed - running an install there might help`);const A=u.dynamicRequireNoCache(r),n={name:g.requirableIdent(e),reference:e.reference},o=A.getPackageInformation(n);if(!o)throw new E.UsageError(`Couldn't find ${g.prettyLocator(t.project.configuration,e)} in the currently installed PnP map - running an install might help`);return s.cS.toPortablePath(o.packageLocation)}async findPackageLocator(e,t){const A=T(t.project).main;if(!i.xfs.existsSync(A))return null;const n=s.cS.fromPortablePath(A),o=u.dynamicRequire(n);delete r.c[n];const a=o.findPackageLocator(s.cS.fromPortablePath(e));return a?g.makeLocator(g.parseIdent(a.name),a.reference):null}makeInstaller(e){return new k(e)}}class k{constructor(e){this.opts=e,this.mode="strict",this.packageRegistry=new Map,this.virtualTemplates=new Map,this.customData={store:new Map},this.unpluggedPaths=new Set,this.opts=e}getCustomDataKey(){return JSON.stringify({name:"PnpInstaller",version:1})}attachCustomData(e){this.customData=e}async installPackage(e,t){const r=g.requirableIdent(e),A=e.reference,n=!!this.opts.project.tryWorkspaceByLocator(e),o=e.peerDependencies.size>0&&!g.isVirtualLocator(e),i=!o&&!n,a=!o&&e.linkType!==h.Un.SOFT;let c=this.customData.store.get(e.locatorHash);void 0===c&&(c=await async function(e,t){var r;const A=null!==(r=await d.G.tryFind(t.prefixPath,{baseFs:t.packageFs}))&&void 0!==r?r:new d.G,n=new Set(["preinstall","install","postinstall"]);for(const e of A.scripts.keys())n.has(e)||A.scripts.delete(e);return{manifest:{os:A.os,cpu:A.cpu,scripts:A.scripts,preferUnplugged:A.preferUnplugged},misc:{extractHint:Q(t),hasBindingGyp:D(t)}}}(0,t),e.linkType===h.Un.HARD&&this.customData.store.set(e.locatorHash,c));const l=this.opts.project.getDependencyMeta(e,e.version),p=i?m(e,c,l,{configuration:this.opts.project.configuration,report:this.opts.report}):[],f=a?await this.unplugPackageIfNeeded(e,c,t,l):t.packageFs;if(s.y1.isAbsolute(t.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${t.prefixPath}) to be relative to the parent`);const I=s.y1.resolve(f.getRealPath(),t.prefixPath),E=N(this.opts.project.cwd,I),B=new Map,y=new Set;if(g.isVirtualLocator(e)){for(const t of e.peerDependencies.values())B.set(g.requirableIdent(t),null),y.add(g.stringifyIdent(t));if(!this.opts.project.tryWorkspaceByLocator(e)){const t=g.devirtualizeLocator(e);this.virtualTemplates.set(t.locatorHash,{location:N(this.opts.project.cwd,C.p.resolveVirtual(I)),locator:t})}}return u.getMapWithDefault(this.packageRegistry,r).set(A,{packageLocation:E,packageDependencies:B,packagePeers:y,linkType:e.linkType,discardFromLookup:t.discardFromLookup||!1}),{packageLocation:I,buildDirective:p.length>0?p:null}}async attachInternalDependencies(e,t){const r=this.getPackageInformation(e);for(const[e,A]of t){const t=g.areIdentsEqual(e,A)?A.reference:[g.requirableIdent(A),A.reference];r.packageDependencies.set(g.requirableIdent(e),t)}}async attachExternalDependents(e,t){for(const r of t){this.getDiskInformation(r).packageDependencies.set(g.requirableIdent(e),e.reference)}}async finalizeInstall(){const e=new Set;for(const{locator:e,location:t}of this.virtualTemplates.values())u.getMapWithDefault(this.packageRegistry,g.stringifyIdent(e)).set(e.reference,{packageLocation:t,packageDependencies:new Map,packagePeers:new Set,linkType:h.Un.SOFT,discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));const t=this.opts.project.configuration.get("pnpFallbackMode"),r=e,A=this.opts.project.workspaces.map(({anchoredLocator:e})=>({name:g.requirableIdent(e),reference:e.reference})),n="none"!==t,o=[],i=new Map,s=u.buildIgnorePattern([".yarn/sdks/**",...this.opts.project.configuration.get("pnpIgnorePatterns")]),a=this.packageRegistry,c=this.opts.project.configuration.get("pnpShebang");if("dependencies-only"===t)for(const e of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(e)&&o.push({name:g.requirableIdent(e),reference:e.reference});return await this.finalizeInstallWithPnp({blacklistedLocations:r,dependencyTreeRoots:A,enableTopLevelFallback:n,fallbackExclusionList:o,fallbackPool:i,ignorePattern:s,packageRegistry:a,shebang:c}),{customData:this.customData}}async finalizeInstallWithPnp(e){if(this.opts.project.configuration.get("pnpMode")!==this.mode)return;const t=T(this.opts.project),r=this.opts.project.configuration.get("pnpDataPath");if(await i.xfs.removePromise(t.other),"pnp"!==this.opts.project.configuration.get("nodeLinker"))return await i.xfs.removePromise(t.main),void await i.xfs.removePromise(r);const A=await this.locateNodeModules(e.ignorePattern);if(A.length>0){this.opts.report.reportWarning(p.b.DANGEROUS_NODE_MODULES,"One or more node_modules have been detected and will be removed. This operation may take some time.");for(const e of A)await i.xfs.removePromise(e)}if(this.opts.project.configuration.get("pnpEnableInlining")){const A=(0,I.gY)(e);await i.xfs.changeFilePromise(t.main,A,{automaticNewlines:!0}),await i.xfs.chmodPromise(t.main,493),await i.xfs.removePromise(r)}else{const A=s.y1.relative(s.y1.dirname(t.main),r),{dataFile:n,loaderFile:o}=(0,I.Q$)({...e,dataLocation:A});await i.xfs.changeFilePromise(t.main,o,{automaticNewlines:!0}),await i.xfs.chmodPromise(t.main,493),await i.xfs.changeFilePromise(r,n,{automaticNewlines:!0}),await i.xfs.chmodPromise(r,420)}const n=this.opts.project.configuration.get("pnpUnpluggedFolder");if(0===this.unpluggedPaths.size)await i.xfs.removePromise(n);else for(const e of await i.xfs.readdirPromise(n)){const t=s.y1.resolve(n,e);this.unpluggedPaths.has(t)||await i.xfs.removePromise(t)}}async locateNodeModules(e){const t=[],r=e?new RegExp(e):null;for(const e of this.opts.project.workspaces){const A=s.y1.join(e.cwd,"node_modules");if(r&&r.test(s.y1.relative(this.opts.project.cwd,e.cwd))||!i.xfs.existsSync(A))continue;const n=await i.xfs.readdirPromise(A,{withFileTypes:!0}),o=n.filter(e=>!e.isDirectory()||".bin"===e.name||!e.name.startsWith("."));if(o.length===n.length)t.push(A);else for(const e of o)t.push(s.y1.join(A,e.name))}return t}async unplugPackageIfNeeded(e,t,r,A){return this.shouldBeUnplugged(e,t,A)?this.unplugPackage(e,r):r.packageFs}shouldBeUnplugged(e,t,r){return void 0!==r.unplugged?r.unplugged:!!v.has(e.identHash)||(null!==t.manifest.preferUnplugged?t.manifest.preferUnplugged:!!(m(e,t,r,{configuration:this.opts.project.configuration}).length>0||t.misc.extractHint))}async unplugPackage(e,t){const r=b(e,{configuration:this.opts.project.configuration});this.unpluggedPaths.add(r);const A=s.y1.join(r,t.prefixPath,".ready");return await i.xfs.existsPromise(A)||(await i.xfs.mkdirPromise(r,{recursive:!0}),await i.xfs.copyPromise(r,s.LZ.dot,{baseFs:t.packageFs,overwrite:!1}),await i.xfs.writeFilePromise(A,"")),new f.M(r)}getPackageInformation(e){const t=g.requirableIdent(e),r=e.reference,A=this.packageRegistry.get(t);if(!A)throw new Error(`Assertion failed: The package information store should have been available (for ${g.prettyIdent(this.opts.project.configuration,e)})`);const n=A.get(r);if(!n)throw new Error(`Assertion failed: The package information should have been available (for ${g.prettyLocator(this.opts.project.configuration,e)})`);return n}getDiskInformation(e){const t=u.getMapWithDefault(this.packageRegistry,"@@disk"),r=N(this.opts.project.cwd,e);return u.getFactoryWithDefault(t,r,()=>({packageLocation:r,packageDependencies:new Map,packagePeers:new Set,linkType:h.Un.SOFT,discardFromLookup:!1}))}}function N(e,t){let r=s.y1.relative(e,t);return r.match(/^\.{0,2}\//)||(r="./"+r),r.replace(/\/?$/,"/")}var F=r(36370),K=r(25413),M=r(85824),R=r(28148),x=r(15815),L=r(36545),P=r(2401),O=r.n(P);class U extends K.BaseCommand{constructor(){super(...arguments),this.patterns=[],this.all=!1,this.recursive=!1,this.json=!1}async execute(){const e=await o.VK.find(this.context.cwd,this.context.plugins),{project:t,workspace:r}=await M.I.find(e,this.context.cwd),A=await R.C.find(e);if(!r)throw new K.WorkspaceRequiredError(t.cwd,this.context.cwd);if("pnp"!==e.get("nodeLinker"))throw new E.UsageError("This command can only be used if the `nodeLinker` option is set to `pnp`");await t.restoreInstallState();const n=new Set(this.patterns),i=this.patterns.map(t=>{const r=g.parseDescriptor(t),A="unknown"!==r.range?r:g.makeDescriptor(r,"*");if(!c().validRange(A.range))throw new E.UsageError(`The range of the descriptor patterns must be a valid semver range (${g.prettyDescriptor(e,A)})`);return e=>{const r=g.stringifyIdent(e);return!!O().isMatch(r,g.stringifyIdent(A))&&(!(e.version&&!L.satisfiesWithPrereleases(e.version,A.range))&&(n.delete(t),!0))}}),s=e=>{const r=new Set,A=[],n=(e,o)=>{if(!r.has(e.locatorHash)&&(r.add(e.locatorHash),!t.tryWorkspaceByLocator(e)&&i.some(t=>t(e))&&A.push(e),!(o>0)||this.recursive))for(const r of e.dependencies.values()){const e=t.storedResolutions.get(r.descriptorHash);if(!e)throw new Error("Assertion failed: The resolution should have been registered");const A=t.storedPackages.get(e);if(!A)throw new Error("Assertion failed: The package should have been registered");n(A,o+1)}};for(const r of e){const e=t.storedPackages.get(r.anchoredLocator.locatorHash);if(!e)throw new Error("Assertion failed: The package should have been registered");n(e,0)}return A};let a,h;if(this.all&&this.recursive?(a=(()=>{const e=[];for(const r of t.storedPackages.values())t.tryWorkspaceByLocator(r)||g.isVirtualLocator(r)||!i.some(e=>e(r))||e.push(r);return e})(),h="the project"):this.all?(a=s(t.workspaces),h="any workspace"):(a=s([r]),h="this workspace"),n.size>1)throw new E.UsageError(`Patterns ${l.prettyList(e,n,l.Type.CODE)} don't match any packages referenced by ${h}`);if(n.size>0)throw new E.UsageError(`Pattern ${l.prettyList(e,n,l.Type.CODE)} doesn't match any packages referenced by ${h}`);a=u.sortMap(a,e=>g.stringifyLocator(e));return(await x.Pk.start({configuration:e,stdout:this.context.stdout,json:this.json},async r=>{var n;for(const A of a){const o=null!==(n=A.version)&&void 0!==n?n:"unknown";t.topLevelWorkspace.manifest.ensureDependencyMeta(g.makeDescriptor(A,o)).unplugged=!0,r.reportInfo(p.b.UNNAMED,`Will unpack ${g.prettyLocator(e,A)} to ${l.pretty(e,b(A,{configuration:e}),l.Type.PATH)}`),r.reportJson({locator:g.stringifyLocator(A),version:o})}await t.topLevelWorkspace.persistManifest(),r.reportSeparator(),await t.install({cache:A,report:r})})).exitCode()}}U.usage=E.Command.Usage({description:"force the unpacking of a list of packages",details:"\n This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\n\n A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\n\n Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\n\n By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\n\n This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\n ",examples:[["Unplug the lodash dependency from the active workspace","yarn unplug lodash"],["Unplug all instances of lodash referenced by any workspace","yarn unplug lodash -A"],["Unplug all instances of lodash referenced by the active workspace and its dependencies","yarn unplug lodash -R"],["Unplug all instances of lodash, anywhere","yarn unplug lodash -AR"],["Unplug one specific version of lodash","yarn unplug lodash@1.2.3"],["Unplug all packages with the `@babel` scope","yarn unplug '@babel/*'"],["Unplug all packages (only for testing, not recommended)","yarn unplug -R '*'"]]}),(0,F.gn)([E.Command.Rest()],U.prototype,"patterns",void 0),(0,F.gn)([E.Command.Boolean("-A,--all",{description:"Unplug direct dependencies from the entire project"})],U.prototype,"all",void 0),(0,F.gn)([E.Command.Boolean("-R,--recursive",{description:"Unplug both direct and transitive dependencies"})],U.prototype,"recursive",void 0),(0,F.gn)([E.Command.Boolean("--json",{description:"Format the output as an NDJSON stream"})],U.prototype,"json",void 0),(0,F.gn)([E.Command.Path("unplug")],U.prototype,"execute",null);const T=e=>{let t,r;return"module"===e.topLevelWorkspace.manifest.type?(t=".pnp.cjs",r=".pnp.js"):(t=".pnp.js",r=".pnp.cjs"),{main:s.y1.join(e.cwd,t),other:s.y1.join(e.cwd,r)}},j=e=>/\s/.test(e)?JSON.stringify(e):e;const Y={hooks:{populateYarnPaths:async function(e,t){t(T(e).main),t(T(e).other),t(e.configuration.get("pnpDataPath")),t(e.configuration.get("pnpUnpluggedFolder"))},setupScriptEnvironment:async function(e,t,r){const A=T(e).main,n="--require "+j(s.cS.fromPortablePath(A));if(A.includes(" ")&&c().lt(process.versions.node,"12.0.0"))throw new Error(`Expected the build location to not include spaces when using Node < 12.0.0 (${process.versions.node})`);if(i.xfs.existsSync(A)){let e=t.NODE_OPTIONS||"";const r=/\s*--require\s+\S*\.pnp\.c?js\s*/g;e=e.replace(r," ").trim(),e=e?`${n} ${e}`:n,t.NODE_OPTIONS=e}}},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: "pnp", "node-modules"',type:o.a2.STRING,default:"pnp"},pnpMode:{description:"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.",type:o.a2.STRING,default:"strict"},pnpShebang:{description:"String to prepend to the generated PnP script",type:o.a2.STRING,default:"#!/usr/bin/env node"},pnpIgnorePatterns:{description:"Array of glob patterns; files matching them will use the classic resolution",type:o.a2.STRING,default:[],isArray:!0},pnpEnableInlining:{description:"If true, the PnP data will be inlined along with the generated loader",type:o.a2.BOOLEAN,default:!0},pnpFallbackMode:{description:"If true, the generated PnP loader will follow the top-level fallback rule",type:o.a2.STRING,default:"dependencies-only"},pnpUnpluggedFolder:{description:"Folder where the unplugged packages must be stored",type:o.a2.ABSOLUTE_PATH,default:"./.yarn/unplugged"},pnpDataPath:{description:"Path of the file where the PnP data (used by the loader) must be written",type:o.a2.ABSOLUTE_PATH,default:"./.pnp.data.json"}},linkers:[S],commands:[U]}},43418:(e,t,r)=>{"use strict";r.r(t);var A=r(50683),n=r.n(A);Object.fromEntries||(Object.fromEntries=n());var o=r(59355),i=r(10419),s=r(45330);(0,i.D)({binaryVersion:o.o||"",pluginConfiguration:(0,s.e)()})},25413:(e,t,r)=>{"use strict";r.r(t),r.d(t,{BaseCommand:()=>A.F,WorkspaceRequiredError:()=>s,getDynamicLibs:()=>c,getPluginConfiguration:()=>g.e,main:()=>h.D,openWorkspace:()=>u,pluginCommands:()=>p.f});var A=r(56087),n=r(46611),o=r(46009),i=r(40822);class s extends i.UsageError{constructor(e,t){super(`This command can only be run from within a workspace of your project (${o.y1.relative(e,t)} isn't a workspace of ${o.y1.join(e,n.G.fileName)}).`)}}const a=["@yarnpkg/cli","@yarnpkg/core","@yarnpkg/fslib","@yarnpkg/libzip","@yarnpkg/parsers","@yarnpkg/shell","clipanion","semver","yup"],c=()=>new Map(a.map(e=>[e,r(98497)(e)]));var g=r(45330),l=r(85824);async function u(e,t){const{project:r,workspace:A}=await l.I.find(e,t);if(!A)throw new s(r.cwd,t);return A}var h=r(10419),p=r(15683)},10419:(e,t,r)=>{"use strict";r.d(t,{D:()=>f});var A=r(36545),n=r(39922),o=r(81832),i=r(43896),s=r(46009),a=r(63129),c=r(5864),g=r(40822),l=r(35747),u=r(15683),h=r(36370),p=r(71643),d=r(56087);class C extends d.F{async execute(){const e=await n.VK.find(this.context.cwd,this.context.plugins);this.context.stdout.write((e=>`\n${p.pretty(e,"Welcome on Yarn 2!","bold")} 🎉 Thanks for helping us shape our vision of how projects\nshould be managed going forward.\n\nBeing still in RC, Yarn 2 isn't completely stable yet. Some features might be\nmissing, and some behaviors may have received major overhaul. In case of doubt,\nuse the following URLs to get some insight:\n\n - The changelog:\n ${p.pretty(e,"https://github.com/yarnpkg/berry/tree/CHANGELOG.md","cyan")}\n\n - Our issue tracker:\n ${p.pretty(e,"https://github.com/yarnpkg/berry","cyan")}\n\n - Our Discord server:\n ${p.pretty(e,"https://discord.gg/yarnpkg","cyan")}\n\nWe're hoping you will enjoy the experience. For now, a good start is to run\nthe two following commands:\n\n ${p.pretty(e,"find . -name node_modules -prune -exec rm -r {} \\;","magenta")}\n ${p.pretty(e,"yarn install","magenta")}\n\nOne last trick! If you need at some point to upgrade Yarn to a nightly build,\nthe following command will install the CLI straight from master:\n\n ${p.pretty(e,"yarn set version from sources","magenta")}\n\nSee you later 👋\n`)(e).trim()+"\n")}}async function f({binaryVersion:e,pluginConfiguration:t}){async function r(){const h=new g.Cli({binaryLabel:"Yarn Package Manager",binaryName:"yarn",binaryVersion:e});h.register(C);try{await async function h(p){var d,C,f,I,E;const B=process.versions.node,y=">=10.17 <14 || >14.1";if("1"!==process.env.YARN_IGNORE_NODE&&!A.satisfiesWithPrereleases(B,y))throw new g.UsageError(`This tool requires a Node version compatible with ${y} (got ${B}). Upgrade Node, or set \`YARN_IGNORE_NODE=1\` in your environment.`);const m=await n.VK.find(s.cS.toPortablePath(process.cwd()),t,{usePath:!0,strict:!1}),w=m.get("yarnPath"),Q=m.get("ignorePath"),D=m.get("ignoreCwd");if(!Q&&!D&&w===s.cS.toPortablePath(s.cS.resolve(process.argv[1])))return process.env.YARN_IGNORE_PATH="1",process.env.YARN_IGNORE_CWD="1",void await h(p);if(null===w||Q){Q&&delete process.env.YARN_IGNORE_PATH;m.get("enableTelemetry")&&!c.isCI&&process.stdout.isTTY&&(n.VK.telemetry=new o.E(m,"puba9cdc10ec5790a2cf4969dd413a47270")),null===(d=n.VK.telemetry)||void 0===d||d.reportVersion(e);for(const[e,t]of m.plugins.entries()){u.f.has(null!==(f=null===(C=e.match(/^@yarnpkg\/plugin-(.*)$/))||void 0===C?void 0:C[1])&&void 0!==f?f:"")&&(null===(I=n.VK.telemetry)||void 0===I||I.reportPluginName(e));for(const e of t.commands||[])p.register(e)}const A=p.process(process.argv.slice(2));A.help||null===(E=n.VK.telemetry)||void 0===E||E.reportCommandName(A.path.join(" "));const i=A.cwd;if(void 0!==i&&!D){const e=(0,l.realpathSync)(process.cwd()),t=(0,l.realpathSync)(i);if(e!==t)return process.chdir(i),void await r()}await p.runExit(A,{cwd:s.cS.toPortablePath(process.cwd()),plugins:t,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr})}else if(i.xfs.existsSync(w))try{!function(e){const t=s.cS.fromPortablePath(e);process.on("SIGINT",()=>{}),t?(0,a.execFileSync)(process.execPath,[t,...process.argv.slice(2)],{stdio:"inherit",env:{...process.env,YARN_IGNORE_PATH:"1",YARN_IGNORE_CWD:"1"}}):(0,a.execFileSync)(t,process.argv.slice(2),{stdio:"inherit",env:{...process.env,YARN_IGNORE_PATH:"1",YARN_IGNORE_CWD:"1"}})}(w)}catch(e){process.exitCode=e.code||1}else process.stdout.write(p.error(new Error(`The "yarn-path" option has been set (in ${m.sources.get("yarnPath")}), but the specified location doesn't exist (${w}).`))),process.exitCode=1}(h)}catch(e){process.stdout.write(h.error(e)),process.exitCode=1}}return r().catch(e=>{process.stdout.write(e.stack||e.message),process.exitCode=1}).finally(()=>i.xfs.rmtempPromise())}(0,h.gn)([g.Command.Path("--welcome")],C.prototype,"execute",null)},15683:(e,t,r)=>{"use strict";r.d(t,{f:()=>A});const A=new Map([["constraints",[["constraints","query"],["constraints","source"],["constraints"]]],["exec",[]],["interactive-tools",[["search"],["upgrade-interactive"]]],["stage",[["stage"]]],["typescript",[]],["version",[["version","apply"],["version","check"],["version"]]],["workspace-tools",[["workspaces","focus"],["workspaces","foreach"]]]])},56087:(e,t,r)=>{"use strict";r.d(t,{F:()=>o});var A=r(36370),n=r(40822);class o extends n.Command{}(0,A.gn)([n.Command.String("--cwd",{hidden:!0})],o.prototype,"cwd",void 0)},28148:(e,t,r)=>{"use strict";r.d(t,{C:()=>I});var A=r(78420),n=r(15037),o=r(90739),i=r(14626),s=r(46009),a=r(43896),c=r(65281),g=r(35747),l=r.n(g),u=r(92659),h=r(35691),p=r(20624),d=r(73632),C=r(54143);const f=7;class I{constructor(e,{configuration:t,immutable:r=t.get("enableImmutableCache"),check:A=!1}){this.markedFiles=new Set,this.mutexes=new Map,this.configuration=t,this.cwd=e,this.immutable=r,this.check=A;const n=t.get("cacheKeyOverride");if(null!==n)this.cacheKey=""+n;else{const e=t.get("compressionLevel"),r=e!==o.k?"c"+e:"";this.cacheKey=[f,r].join("")}}static async find(e,{immutable:t,check:r}={}){const A=new I(e.get("cacheFolder"),{configuration:e,immutable:t,check:r});return await A.setup(),A}get mirrorCwd(){if(!this.configuration.get("enableMirror"))return null;const e=this.configuration.get("globalFolder")+"/cache";return e!==this.cwd?e:null}getVersionFilename(e){return`${C.slugifyLocator(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,t){const r=function(e){const t=e.indexOf("/");return-1!==t?e.slice(t+1):e}(t).slice(0,10);return`${C.slugifyLocator(e)}-${r}.zip`}getLocatorPath(e,t){if(null===this.mirrorCwd)return s.y1.resolve(this.cwd,this.getVersionFilename(e));if(null===t)return null;return E(t)!==this.cacheKey?null:s.y1.resolve(this.cwd,this.getChecksumFilename(e,t))}getLocatorMirrorPath(e){const t=this.mirrorCwd;return null!==t?s.y1.resolve(t,this.getVersionFilename(e)):null}async setup(){if(!this.configuration.get("enableGlobalCache")){await a.xfs.mkdirPromise(this.cwd,{recursive:!0});const e=s.y1.resolve(this.cwd,".gitignore");await a.xfs.changeFilePromise(e,"/.gitignore\n*.flock\n")}}async fetchPackageFromCache(e,t,{onHit:r,onMiss:g,loader:f,skipIntegrityCheck:I}){const B=this.getLocatorMirrorPath(e),y=new A.S,m=async(e,r=null)=>{const A=I&&t?t:`${this.cacheKey}/${await p.checksumFile(e)}`;if(null!==r){if(A!==(I&&t?t:`${this.cacheKey}/${await p.checksumFile(r)}`))throw new h.lk(u.b.CACHE_CHECKSUM_MISMATCH,"The remote archive doesn't match the local checksum - has the local cache been corrupted?")}if(null!==t&&A!==t){let e;switch(e=this.check?"throw":E(t)!==E(A)?"update":this.configuration.get("checksumBehavior"),e){case"ignore":return t;case"update":return A;default:case"throw":throw new h.lk(u.b.CACHE_CHECKSUM_MISMATCH,"The remote archive doesn't match the expected checksum")}}return A},w=async t=>{if(!f)throw new Error("Cache check required but no loader configured for "+C.prettyLocator(this.configuration,e));const r=await f(),A=r.getRealPath();return r.saveAndClose(),await a.xfs.chmodPromise(A,420),await m(t,A)},Q=async()=>{if(null===B||!await a.xfs.existsPromise(B)){const e=await f(),t=e.getRealPath();return e.saveAndClose(),t}const t=await a.xfs.mktempPromise(),r=s.y1.join(t,this.getVersionFilename(e));return await a.xfs.copyFilePromise(B,r,l().constants.COPYFILE_FICLONE),r},D=async()=>{if(!f)throw new Error("Cache entry required but missing for "+C.prettyLocator(this.configuration,e));if(this.immutable)throw new h.lk(u.b.IMMUTABLE_CACHE,"Cache entry required but missing for "+C.prettyLocator(this.configuration,e));const t=await Q();await a.xfs.chmodPromise(t,420);const r=await m(t),A=this.getLocatorPath(e,r);if(!A)throw new Error("Assertion failed: Expected the cache path to be available");return await this.writeFileWithLock(A,async()=>await this.writeFileWithLock(B,async()=>(await a.xfs.movePromise(t,A),null!==B&&await a.xfs.copyFilePromise(A,B,l().constants.COPYFILE_FICLONE),[A,r])))};for(let t;t=this.mutexes.get(e.locatorHash);)await t;const[b,v]=await(async()=>{const A=(async()=>{const A=this.getLocatorPath(e,t),n=null!==A&&await y.existsPromise(A),o=n?r:g;if(o&&o(),n){let e=null;const t=A;return e=this.check?await w(t):await m(t),[t,e]}return D()})();this.mutexes.set(e.locatorHash,A);try{return await A}finally{this.mutexes.delete(e.locatorHash)}})();this.markedFiles.add(b);let S=null;const k=await(0,c.getLibzipPromise)(),N=new n.v(()=>d.prettifySyncErrors(()=>S=new o.d(b,{baseFs:y,libzip:k,readOnly:!0}),t=>`Failed to open the cache entry for ${C.prettyLocator(this.configuration,e)}: ${t}`),s.y1);return[new i.K(b,{baseFs:N,pathUtils:s.y1}),()=>{null!==S&&S.discardAndClose()},v]}async writeFileWithLock(e,t){return null===e?await t():(await a.xfs.mkdirPromise(s.y1.dirname(e),{recursive:!0}),await a.xfs.lockPromise(e,async()=>await t()))}}function E(e){const t=e.indexOf("/");return-1!==t?e.slice(0,t):null}},39922:(e,t,r)=>{"use strict";r.d(t,{VK:()=>W,nh:()=>U,tr:()=>O,a5:()=>j,EW:()=>z,a2:()=>T});var A=r(43896),n=r(46009),o=r(90739),i=r(11640),s=r(54738),a=r.n(s),c=r(5864),g=r(40822),l=r(61578),u=r.n(l),h=r(53887),p=r.n(h),d=r(92413),C=r(92659),f=r(54143);const I={hooks:{reduceDependency:(e,t,r,A,{resolver:n,resolveOptions:o})=>{for(const{pattern:A,reference:i}of t.topLevelWorkspace.manifest.resolutions){if(A.from&&A.from.fullName!==f.requirableIdent(r))continue;if(A.from&&A.from.description&&A.from.description!==r.reference)continue;if(A.descriptor.fullName!==f.requirableIdent(e))continue;if(A.descriptor.description&&A.descriptor.description!==e.range)continue;return n.bindDescriptor(f.makeDescriptor(e,i),t.topLevelWorkspace.anchoredLocator,o)}return e},validateProject:async(e,t)=>{for(const r of e.workspaces){const A=f.prettyWorkspace(e.configuration,r);await e.configuration.triggerHook(e=>e.validateWorkspace,r,{reportWarning:(e,r)=>t.reportWarning(e,`${A}: ${r}`),reportError:(e,r)=>t.reportError(e,`${A}: ${r}`)})}},validateWorkspace:async(e,t)=>{const{manifest:r}=e;r.resolutions.length&&e.cwd!==e.project.cwd&&r.errors.push(new Error("Resolutions field will be ignored"));for(const e of r.errors)t.reportWarning(C.b.INVALID_MANIFEST,e.message)}}};var E=r(46611),B=r(35691);class y{constructor(e){this.fetchers=e}supports(e,t){return!!this.tryFetcher(e,t)}getLocalPath(e,t){return this.getFetcher(e,t).getLocalPath(e,t)}async fetch(e,t){const r=this.getFetcher(e,t);return await r.fetch(e,t)}tryFetcher(e,t){const r=this.fetchers.find(r=>r.supports(e,t));return r||null}getFetcher(e,t){const r=this.fetchers.find(r=>r.supports(e,t));if(!r)throw new B.lk(C.b.FETCHER_NOT_FOUND,f.prettyLocator(t.project.configuration,e)+" isn't supported by any available fetcher");return r}}var m=r(27092),w=r(52779),Q=r(60895);class D{static isVirtualDescriptor(e){return!!e.range.startsWith(D.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(D.protocol)}supportsDescriptor(e,t){return D.isVirtualDescriptor(e)}supportsLocator(e,t){return D.isVirtualLocator(e)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,r){throw new Error('Assertion failed: calling "bindDescriptor" on a virtual descriptor is unsupported')}getResolutionDependencies(e,t){throw new Error('Assertion failed: calling "getResolutionDependencies" on a virtual descriptor is unsupported')}async getCandidates(e,t,r){throw new Error('Assertion failed: calling "getCandidates" on a virtual descriptor is unsupported')}async getSatisfying(e,t,r){throw new Error('Assertion failed: calling "getSatisfying" on a virtual descriptor is unsupported')}async resolve(e,t){throw new Error('Assertion failed: calling "resolve" on a virtual locator is unsupported')}}D.protocol="virtual:";var b=r(75448),v=r(94538);class S{supports(e){return!!e.reference.startsWith(v.d.protocol)}getLocalPath(e,t){return this.getWorkspace(e,t).cwd}async fetch(e,t){const r=this.getWorkspace(e,t).cwd;return{packageFs:new b.M(r),prefixPath:n.LZ.dot,localPath:r}}getWorkspace(e,t){return t.project.getWorkspaceByCwd(e.reference.slice(v.d.protocol.length))}}var k=r(81111),N=r(71643),F=r(73632),K=r(32282),M=r.n(K);function R(e){return("undefined"!=typeof require?require:r(32178))(e)}var x=r(36545),L=r(32485);const P=new Set(["binFolder","version","flags","profile","gpg","ignoreNode","wrapOutput"]),O=".yarnrc.yml",U="yarn.lock";var T;!function(e){e.ANY="ANY",e.BOOLEAN="BOOLEAN",e.ABSOLUTE_PATH="ABSOLUTE_PATH",e.LOCATOR="LOCATOR",e.LOCATOR_LOOSE="LOCATOR_LOOSE",e.NUMBER="NUMBER",e.STRING="STRING",e.SECRET="SECRET",e.SHAPE="SHAPE",e.MAP="MAP"}(T||(T={}));const j=N.Type,Y={lastUpdateCheck:{description:"Last timestamp we checked whether new Yarn versions were available",type:T.STRING,default:null},yarnPath:{description:"Path to the local executable that must be used over the global one",type:T.ABSOLUTE_PATH,default:null},ignorePath:{description:"If true, the local executable will be ignored when using the global one",type:T.BOOLEAN,default:!1},ignoreCwd:{description:"If true, the `--cwd` flag will be ignored",type:T.BOOLEAN,default:!1},cacheKeyOverride:{description:"A global cache key override; used only for test purposes",type:T.STRING,default:null},globalFolder:{description:"Folder where are stored the system-wide settings",type:T.ABSOLUTE_PATH,default:k.getDefaultGlobalFolder()},cacheFolder:{description:"Folder where the cache files must be written",type:T.ABSOLUTE_PATH,default:"./.yarn/cache"},compressionLevel:{description:"Zip files compression level, from 0 to 9 or mixed (a variant of 9, which stores some files uncompressed, when compression doesn't yield good results)",type:T.NUMBER,values:["mixed",0,1,2,3,4,5,6,7,8,9],default:o.k},virtualFolder:{description:"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named $$virtual)",type:T.ABSOLUTE_PATH,default:"./.yarn/$$virtual"},bstatePath:{description:"Path of the file where the current state of the built packages must be stored",type:T.ABSOLUTE_PATH,default:"./.yarn/build-state.yml"},lockfileFilename:{description:"Name of the files where the Yarn dependency tree entries must be stored",type:T.STRING,default:U},installStatePath:{description:"Path of the file where the install state will be persisted",type:T.ABSOLUTE_PATH,default:"./.yarn/install-state.gz"},immutablePatterns:{description:"Array of glob patterns; files matching them won't be allowed to change during immutable installs",type:T.STRING,default:[],isArray:!0},rcFilename:{description:"Name of the files where the configuration can be found",type:T.STRING,default:q()},enableGlobalCache:{description:"If true, the system-wide cache folder will be used regardless of `cache-folder`",type:T.BOOLEAN,default:!1},enableAbsoluteVirtuals:{description:"If true, the virtual symlinks will use absolute paths if required [non portable!!]",type:T.BOOLEAN,default:!1},enableColors:{description:"If true, the CLI is allowed to use colors in its output",type:T.BOOLEAN,default:N.supportsColor,defaultText:""},enableHyperlinks:{description:"If true, the CLI is allowed to use hyperlinks in its output",type:T.BOOLEAN,default:N.supportsHyperlinks,defaultText:""},enableInlineBuilds:{description:"If true, the CLI will print the build output on the command line",type:T.BOOLEAN,default:c.isCI,defaultText:""},enableProgressBars:{description:"If true, the CLI is allowed to show a progress bar for long-running events",type:T.BOOLEAN,default:!c.isCI&&process.stdout.isTTY&&process.stdout.columns>22,defaultText:""},enableTimers:{description:"If true, the CLI is allowed to print the time spent executing commands",type:T.BOOLEAN,default:!0},preferAggregateCacheInfo:{description:"If true, the CLI will only print a one-line report of any cache changes",type:T.BOOLEAN,default:c.isCI},preferInteractive:{description:"If true, the CLI will automatically use the interactive mode when called from a TTY",type:T.BOOLEAN,default:!1},preferTruncatedLines:{description:"If true, the CLI will truncate lines that would go beyond the size of the terminal",type:T.BOOLEAN,default:!1},progressBarStyle:{description:"Which style of progress bar should be used (only when progress bars are enabled)",type:T.STRING,default:void 0,defaultText:""},defaultLanguageName:{description:"Default language mode that should be used when a package doesn't offer any insight",type:T.STRING,default:"node"},defaultProtocol:{description:"Default resolution protocol used when resolving pure semver and tag ranges",type:T.STRING,default:"npm:"},enableTransparentWorkspaces:{description:"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol",type:T.BOOLEAN,default:!0},enableMirror:{description:"If true, the downloaded packages will be retrieved and stored in both the local and global folders",type:T.BOOLEAN,default:!0},enableNetwork:{description:"If false, the package manager will refuse to use the network if required to",type:T.BOOLEAN,default:!0},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:T.STRING,default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:T.STRING,default:null},unsafeHttpWhitelist:{description:"List of the hostnames for which http queries are allowed (glob patterns are supported)",type:T.STRING,default:[],isArray:!0},httpTimeout:{description:"Timeout of each http request in milliseconds",type:T.NUMBER,default:6e4},httpRetry:{description:"Retry times on http failure",type:T.NUMBER,default:3},networkConcurrency:{description:"Maximal number of concurrent requests",type:T.NUMBER,default:1/0},networkSettings:{description:"Network settings per hostname (glob patterns are supported)",type:T.MAP,valueDefinition:{description:"",type:T.SHAPE,properties:{caFilePath:{description:"Path to file containing one or multiple Certificate Authority signing certificates",type:T.ABSOLUTE_PATH,default:null},enableNetwork:{description:"If false, the package manager will refuse to use the network if required to",type:T.BOOLEAN,default:null},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:T.STRING,default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:T.STRING,default:null}}}},caFilePath:{description:"A path to a file containing one or multiple Certificate Authority signing certificates",type:T.ABSOLUTE_PATH,default:null},enableStrictSsl:{description:"If false, SSL certificate errors will be ignored",type:T.BOOLEAN,default:!0},logFilters:{description:"Overrides for log levels",type:T.SHAPE,isArray:!0,concatenateValues:!0,properties:{code:{description:"Code of the messages covered by this override",type:T.STRING,default:void 0},text:{description:"Code of the texts covered by this override",type:T.STRING,default:void 0},level:{description:"Log level override, set to null to remove override",type:T.STRING,values:Object.values(N.LogLevel),isNullable:!0,default:void 0}}},enableTelemetry:{description:"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry",type:T.BOOLEAN,default:!0},telemetryInterval:{description:"Minimal amount of time between two telemetry uploads, in days",type:T.NUMBER,default:7},telemetryUserId:{description:"If you desire to tell us which project you are, you can set this field. Completely optional and opt-in.",type:T.STRING,default:null},enableScripts:{description:"If true, packages are allowed to have install scripts by default",type:T.BOOLEAN,default:!0},enableImmutableCache:{description:"If true, the cache is reputed immutable and actions that would modify it will throw",type:T.BOOLEAN,default:!1},checksumBehavior:{description:"Enumeration defining what to do when a checksum doesn't match expectations",type:T.STRING,default:"throw"},packageExtensions:{description:"Map of package corrections to apply on the dependency tree",type:T.MAP,valueDefinition:{description:"The extension that will be applied to any package whose version matches the specified range",type:T.SHAPE,properties:{dependencies:{description:"The set of dependencies that must be made available to the current package in order for it to work properly",type:T.MAP,valueDefinition:{description:"A range",type:T.STRING}},peerDependencies:{description:"Inherited dependencies - the consumer of the package will be tasked to provide them",type:T.MAP,valueDefinition:{description:"A semver range",type:T.STRING}},peerDependenciesMeta:{description:"Extra information related to the dependencies listed in the peerDependencies field",type:T.MAP,valueDefinition:{description:"The peerDependency meta",type:T.SHAPE,properties:{optional:{description:"If true, the selected peer dependency will be marked as optional by the package manager and the consumer omitting it won't be reported as an error",type:T.BOOLEAN,default:!1}}}}}}}};function G(e,t,r,A,n){if(A.isArray)return Array.isArray(r)?r.map((r,o)=>H(e,`${t}[${o}]`,r,A,n)):String(r).split(/,/).map(r=>H(e,t,r,A,n));if(Array.isArray(r))throw new Error(`Non-array configuration settings "${t}" cannot be an array`);return H(e,t,r,A,n)}function H(e,t,r,A,o){var i;switch(A.type){case T.ANY:return r;case T.SHAPE:return function(e,t,r,A,n){if("object"!=typeof r||Array.isArray(r))throw new g.UsageError(`Object configuration settings "${t}" must be an object`);const o=J(e,A,{ignoreArrays:!0});if(null===r)return o;for(const[i,s]of Object.entries(r)){const r=`${t}.${i}`;if(!A.properties[i])throw new g.UsageError(`Unrecognized configuration settings found: ${t}.${i} - run "yarn config -v" to see the list of settings supported in Yarn`);o.set(i,G(e,r,s,A.properties[i],n))}return o}(e,t,r,A,o);case T.MAP:return function(e,t,r,A,n){const o=new Map;if("object"!=typeof r||Array.isArray(r))throw new g.UsageError(`Map configuration settings "${t}" must be an object`);if(null===r)return o;for(const[i,s]of Object.entries(r)){const r=A.normalizeKeys?A.normalizeKeys(i):i,a=`${t}['${r}']`,c=A.valueDefinition;o.set(r,G(e,a,s,c,n))}return o}(e,t,r,A,o)}if(null===r&&!A.isNullable&&null!==A.default)throw new Error(`Non-nullable configuration settings "${t}" cannot be set to null`);if(null===(i=A.values)||void 0===i?void 0:i.includes(r))return r;const s=(()=>{if(A.type===T.BOOLEAN)return F.parseBoolean(r);if("string"!=typeof r)throw new Error(`Expected value (${r}) to be a string`);const e=F.replaceEnvVariables(r,{env:process.env});switch(A.type){case T.ABSOLUTE_PATH:return n.y1.resolve(o,n.cS.toPortablePath(e));case T.LOCATOR_LOOSE:return f.parseLocator(e,!1);case T.NUMBER:return parseInt(e);case T.LOCATOR:return f.parseLocator(e);default:return e}})();if(A.values&&!A.values.includes(s))throw new Error("Invalid value, expected one of "+A.values.join(", "));return s}function J(e,t,{ignoreArrays:r=!1}={}){switch(t.type){case T.SHAPE:{if(t.isArray&&!r)return[];const A=new Map;for(const[r,n]of Object.entries(t.properties))A.set(r,J(e,n));return A}case T.MAP:return t.isArray&&!r?[]:new Map;case T.ABSOLUTE_PATH:return null===t.default?null:null===e.projectCwd?n.y1.isAbsolute(t.default)?n.y1.normalize(t.default):t.isNullable?null:void 0:Array.isArray(t.default)?t.default.map(t=>n.y1.resolve(e.projectCwd,t)):n.y1.resolve(e.projectCwd,t.default);default:return t.default}}function q(){for(const[e,t]of Object.entries(process.env))if("yarn_rc_filename"===e.toLowerCase()&&"string"==typeof t)return t;return O}var z;!function(e){e[e.LOCKFILE=0]="LOCKFILE",e[e.MANIFEST=1]="MANIFEST",e[e.NONE=2]="NONE"}(z||(z={}));class W{constructor(e){this.projectCwd=null,this.plugins=new Map,this.settings=new Map,this.values=new Map,this.sources=new Map,this.invalid=new Map,this.packageExtensions=new Map,this.limits=new Map,this.startingCwd=e}static create(e,t,r){const A=new W(e);void 0===t||t instanceof Map||(A.projectCwd=t),A.importSettings(Y);const n=void 0!==r?r:t instanceof Map?t:new Map;for(const[e,t]of n)A.activatePlugin(e,t);return A}static async find(e,t,{lookup:r=z.LOCKFILE,strict:o=!0,usePath:i=!1,useRc:s=!0}={}){const c=function(){const e={};for(let[t,r]of Object.entries(process.env))t=t.toLowerCase(),t.startsWith("yarn_")&&(t=a()(t.slice("yarn_".length)),e[t]=r);return e}();delete c.rcFilename;const l=await W.findRcFiles(e),u=await W.findHomeRcFile(),h=({ignoreCwd:e,yarnPath:t,ignorePath:r,lockfileFilename:A})=>({ignoreCwd:e,yarnPath:t,ignorePath:r,lockfileFilename:A}),p=({ignoreCwd:e,yarnPath:t,ignorePath:r,lockfileFilename:A,...n})=>n,d=new W(e);d.importSettings(h(Y)),d.useWithSource("",h(c),e,{strict:!1});for(const{path:e,cwd:t,data:r}of l)d.useWithSource(e,h(r),t,{strict:!1});if(u&&d.useWithSource(u.path,h(u.data),u.cwd,{strict:!1}),i){const e=d.get("yarnPath"),t=d.get("ignorePath");if(null!==e&&!t)return d}const C=d.get("lockfileFilename");let f;switch(r){case z.LOCKFILE:f=await W.findProjectCwd(e,C);break;case z.MANIFEST:f=await W.findProjectCwd(e,null);break;case z.NONE:f=A.xfs.existsSync(n.y1.join(e,"package.json"))?n.y1.resolve(e):null}d.startingCwd=e,d.projectCwd=f,d.importSettings(p(Y));const E=new Map([["@@core",I]]);if(null!==t){for(const e of t.plugins.keys())E.set(e,(B=t.modules.get(e)).__esModule?B.default:B);const r=new Map;for(const e of new Set(M().builtinModules||Object.keys(process.binding("natives"))))r.set(e,()=>R(e));for(const[e,A]of t.modules)r.set(e,()=>A);const A=new Set,o=e=>e.default||e,i=(e,t)=>{const{factory:i,name:s}=R(n.cS.fromPortablePath(e));if(A.has(s))return;const a=new Map(r),c=e=>{if(a.has(e))return a.get(e)();throw new g.UsageError(`This plugin cannot access the package referenced via ${e} which is neither a builtin, nor an exposed entry`)},l=F.prettifySyncErrors(()=>o(i(c)),e=>`${e} (when initializing ${s}, defined in ${t})`);r.set(s,()=>l),A.add(s),E.set(s,l)};if(c.plugins)for(const t of c.plugins.split(";")){i(n.y1.resolve(e,n.cS.toPortablePath(t)),"")}for(const{path:e,cwd:t,data:r}of l)if(s&&Array.isArray(r.plugins))for(const A of r.plugins){const r="string"!=typeof A?A.path:A;i(n.y1.resolve(t,n.cS.toPortablePath(r)),e)}}var B;for(const[e,t]of E)d.activatePlugin(e,t);d.useWithSource("",p(c),e,{strict:o});for(const{path:e,cwd:t,data:r}of l)d.useWithSource(e,p(r),t,{strict:o});return u&&d.useWithSource(u.path,p(u.data),u.cwd,{strict:!1}),d.get("enableGlobalCache")&&(d.values.set("cacheFolder",d.get("globalFolder")+"/cache"),d.sources.set("cacheFolder","")),await d.refreshPackageExtensions(),d}static async findRcFiles(e){const t=q(),r=[];let o=e,s=null;for(;o!==s;){s=o;const e=n.y1.join(s,t);if(A.xfs.existsSync(e)){const t=await A.xfs.readFilePromise(e,"utf8");let n;try{n=(0,i.parseSyml)(t)}catch(r){let A="";throw t.match(/^\s+(?!-)[^:]+\s+\S+/m)&&(A=" (in particular, make sure you list the colons after each key name)"),new g.UsageError(`Parse error when loading ${e}; please check it's proper Yaml${A}`)}r.push({path:e,cwd:s,data:n})}o=n.y1.dirname(s)}return r}static async findHomeRcFile(){const e=q(),t=k.getHomeFolder(),r=n.y1.join(t,e);if(A.xfs.existsSync(r)){const e=await A.xfs.readFilePromise(r,"utf8");return{path:r,cwd:t,data:(0,i.parseSyml)(e)}}return null}static async findProjectCwd(e,t){let r=null,o=e,i=null;for(;o!==i;){if(i=o,A.xfs.existsSync(n.y1.join(i,"package.json"))&&(r=i),null!==t){if(A.xfs.existsSync(n.y1.join(i,t))){r=i;break}}else if(null!==r)break;o=n.y1.dirname(i)}return r}static async updateConfiguration(e,t){const r=q(),o=n.y1.join(e,r),s=A.xfs.existsSync(o)?(0,i.parseSyml)(await A.xfs.readFilePromise(o,"utf8")):{};let a,c=!1;if("function"==typeof t){try{a=t(s)}catch(e){a=t({})}if(a===s)return}else{a=s;for(const e of Object.keys(t)){const r=s[e],A=t[e];let n;if("function"==typeof A)try{n=A(r)}catch(e){n=A(void 0)}else n=A;r!==n&&(a[e]=n,c=!0)}if(!c)return}await A.xfs.changeFilePromise(o,(0,i.stringifySyml)(a),{automaticNewlines:!0})}static async updateHomeConfiguration(e){const t=k.getHomeFolder();return await W.updateConfiguration(t,e)}activatePlugin(e,t){this.plugins.set(e,t),void 0!==t.configuration&&this.importSettings(t.configuration)}importSettings(e){for(const[t,r]of Object.entries(e))if(null!=r){if(this.settings.has(t))throw new Error(`Cannot redefine settings "${t}"`);this.settings.set(t,r),this.values.set(t,J(this,r))}}useWithSource(e,t,r,A){try{this.use(e,t,r,A)}catch(t){throw t.message+=` (in ${N.pretty(this,e,N.Type.PATH)})`,t}}use(e,t,r,{strict:A=!0,overwrite:n=!1}={}){for(const o of Object.keys(t)){if(void 0===t[o])continue;if("plugins"===o)continue;if(""===e&&P.has(o))continue;if("rcFilename"===o)throw new g.UsageError(`The rcFilename settings can only be set via ${"yarn_RC_FILENAME".toUpperCase()}, not via a rc file`);const i=this.settings.get(o);if(!i){if(A)throw new g.UsageError(`Unrecognized or legacy configuration settings found: ${o} - run "yarn config -v" to see the list of settings supported in Yarn`);this.invalid.set(o,e);continue}if(this.sources.has(o)&&!(n||i.type===T.MAP||i.isArray&&i.concatenateValues))continue;let s;try{s=G(this,o,t[o],i,r)}catch(t){throw t.message+=" in "+N.pretty(this,e,N.Type.PATH),t}if(i.type===T.MAP){const t=this.values.get(o);this.values.set(o,new Map(n?[...t,...s]:[...s,...t])),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else if(i.isArray&&i.concatenateValues){const t=this.values.get(o);this.values.set(o,n?[...t,...s]:[...s,...t]),this.sources.set(o,`${this.sources.get(o)}, ${e}`)}else this.values.set(o,s),this.sources.set(o,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key "${e}"`);return this.values.get(e)}getSpecial(e,{hideSecrets:t=!1,getNativePaths:r=!1}){const A=this.get(e),o=this.settings.get(e);if(void 0===o)throw new g.UsageError(`Couldn't find a configuration settings named "${e}"`);return function e(t,r,A){if(r.type===T.SECRET&&"string"==typeof t&&A.hideSecrets)return"********";if(r.type===T.ABSOLUTE_PATH&&"string"==typeof t&&A.getNativePaths)return n.cS.fromPortablePath(t);if(r.isArray&&Array.isArray(t)){const n=[];for(const o of t)n.push(e(o,r,A));return n}if(r.type===T.MAP&&t instanceof Map){const n=new Map;for(const[o,i]of t.entries())n.set(o,e(i,r.valueDefinition,A));return n}if(r.type===T.SHAPE&&t instanceof Map){const n=new Map;for(const[o,i]of t.entries()){const t=r.properties[o];n.set(o,e(i,t,A))}return n}return t}(A,o,{hideSecrets:t,getNativePaths:r})}getSubprocessStreams(e,{header:t,prefix:r,report:n}){let o,i;const s=A.xfs.createWriteStream(e);if(this.get("enableInlineBuilds")){const e=n.createStreamReporter(`${r} ${N.pretty(this,"STDOUT","green")}`),t=n.createStreamReporter(`${r} ${N.pretty(this,"STDERR","red")}`);o=new d.PassThrough,o.pipe(e),o.pipe(s),i=new d.PassThrough,i.pipe(t),i.pipe(s)}else o=s,i=s,void 0!==t&&o.write(t+"\n");return{stdout:o,stderr:i}}makeResolver(){const e=[];for(const t of this.plugins.values())for(const r of t.resolvers||[])e.push(new r);return new m.B([new D,new v.d,new w.O,...e])}makeFetcher(){const e=[];for(const t of this.plugins.values())for(const r of t.fetchers||[])e.push(new r);return new y([new Q.N,new S,...e])}getLinkers(){const e=[];for(const t of this.plugins.values())for(const r of t.linkers||[])e.push(new r);return e}async refreshPackageExtensions(){this.packageExtensions=new Map;const e=this.packageExtensions,t=(t,r,{userProvided:A=!1}={})=>{if(!p().validRange(t.range))throw new Error("Only semver ranges are allowed as keys for the lockfileExtensions setting");const n=new E.G;n.load(r,{yamlCompatibilityMode:!0});const o=[];F.getArrayWithDefault(e,t.identHash).push([t.range,o]);const i={status:L._u.Inactive,userProvided:A,parentDescriptor:t};for(const e of n.dependencies.values())o.push({...i,type:L.HN.Dependency,descriptor:e,description:`${f.stringifyIdent(t)} > ${f.stringifyIdent(e)}`});for(const e of n.peerDependencies.values())o.push({...i,type:L.HN.PeerDependency,descriptor:e,description:`${f.stringifyIdent(t)} >> ${f.stringifyIdent(e)}`});for(const[e,r]of n.peerDependenciesMeta)for(const[A,n]of Object.entries(r))o.push({...i,type:L.HN.PeerDependencyMeta,selector:e,key:A,value:n,description:`${f.stringifyIdent(t)} >> ${e} / ${A}`})};await this.triggerHook(e=>e.registerPackageExtensions,this,t);for(const[e,r]of this.get("packageExtensions"))t(f.parseDescriptor(e,!0),F.convertMapsToIndexableObjects(r),{userProvided:!0})}normalizePackage(e){const t=f.copyPackage(e);if(null==this.packageExtensions)throw new Error("refreshPackageExtensions has to be called before normalizing packages");const r=this.packageExtensions.get(e.identHash);if(void 0!==r){const A=e.version;if(null!==A)for(const[e,n]of r)if(x.satisfiesWithPrereleases(A,e))for(const e of n)switch(e.status===L._u.Inactive&&(e.status=L._u.Redundant),e.type){case L.HN.Dependency:void 0===t.dependencies.get(e.descriptor.identHash)&&(e.status=L._u.Active,t.dependencies.set(e.descriptor.identHash,e.descriptor));break;case L.HN.PeerDependency:void 0===t.peerDependencies.get(e.descriptor.identHash)&&(e.status=L._u.Active,t.peerDependencies.set(e.descriptor.identHash,e.descriptor));break;case L.HN.PeerDependencyMeta:{const r=t.peerDependenciesMeta.get(e.selector);void 0!==r&&Object.prototype.hasOwnProperty.call(r,e.key)&&r[e.key]===e.value||(e.status=L._u.Active,F.getFactoryWithDefault(t.peerDependenciesMeta,e.selector,()=>({}))[e.key]=e.value)}break;default:F.assertNever(e)}}const A=e=>e.scope?`${e.scope}__${e.name}`:""+e.name;for(const e of t.peerDependencies.values()){if("@types"===e.scope)continue;const r=A(e),n=f.makeIdent("types",r);t.peerDependencies.has(n.identHash)||t.peerDependenciesMeta.has(n.identHash)||t.peerDependenciesMeta.set(f.stringifyIdent(n),{optional:!0})}for(const e of t.peerDependenciesMeta.keys()){const r=f.parseIdent(e);t.peerDependencies.has(r.identHash)||t.peerDependencies.set(r.identHash,f.makeDescriptor(r,"*"))}return t.dependencies=new Map(F.sortMap(t.dependencies,([,e])=>f.stringifyDescriptor(e))),t.peerDependencies=new Map(F.sortMap(t.peerDependencies,([,e])=>f.stringifyDescriptor(e))),t}getLimit(e){return F.getFactoryWithDefault(this.limits,e,()=>u()(this.get(e)))}async triggerHook(e,...t){for(const r of this.plugins.values()){const A=r.hooks;if(!A)continue;const n=e(A);n&&await n(...t)}}async triggerMultipleHooks(e,t){for(const r of t)await this.triggerHook(e,...r)}async reduceHook(e,t,...r){let A=t;for(const t of this.plugins.values()){const n=t.hooks;if(!n)continue;const o=e(n);o&&(A=await o(A,...r))}return A}async firstHook(e,...t){for(const r of this.plugins.values()){const A=r.hooks;if(!A)continue;const n=e(A);if(!n)continue;const o=await n(...t);if(void 0!==o)return o}return null}format(e,t){return N.pretty(this,e,t)}}W.telemetry=null},92409:(e,t,r)=>{"use strict";var A;r.d(t,{k:()=>A}),function(e){e[e.SCRIPT=0]="SCRIPT",e[e.SHELLCODE=1]="SHELLCODE"}(A||(A={}))},62152:(e,t,r)=>{"use strict";r.d(t,{h:()=>i});var A=r(35691),n=r(15815),o=r(71643);class i extends A.yG{constructor({configuration:e,stdout:t,suggestInstall:r=!0}){super(),this.errorCount=0,o.addLogFilterSupport(this,{configuration:e}),this.configuration=e,this.stdout=t,this.suggestInstall=r}static async start(e,t){const r=new this(e);try{await t(r)}catch(e){r.reportExceptionOnce(e)}finally{await r.finalize()}return r}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(e){}reportCacheMiss(e){}startTimerSync(e,t,r){return("function"==typeof t?t:r)()}async startTimerPromise(e,t,r){const A="function"==typeof t?t:r;return await A()}async startCacheReport(e){return await e()}reportSeparator(){}reportInfo(e,t){}reportWarning(e,t){}reportError(e,t){this.errorCount+=1,this.stdout.write(`${o.pretty(this.configuration,"➤","redBright")} ${this.formatNameWithHyperlink(e)}: ${t}\n`)}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(const{}of e);}),stop:()=>{}}}reportJson(e){}async finalize(){this.errorCount>0&&(this.stdout.write(o.pretty(this.configuration,"➤","redBright")+" Errors happened when preparing the environment required to run this command.\n"),this.suggestInstall&&this.stdout.write(o.pretty(this.configuration,"➤","redBright")+' This might be caused by packages being missing from the lockfile, in which case running "yarn install" might help.\n'))}formatNameWithHyperlink(e){return(0,n.Qw)(e,{configuration:this.configuration,json:!1})}}},46611:(e,t,r)=>{"use strict";r.d(t,{G:()=>l});var A=r(78420),n=r(46009),o=r(11640),i=r(53887),s=r.n(i),a=r(73632),c=r(36545),g=r(54143);class l{constructor(){this.indent=" ",this.name=null,this.version=null,this.os=null,this.cpu=null,this.type=null,this.private=!1,this.license=null,this.main=null,this.module=null,this.browser=null,this.languageName=null,this.bin=new Map,this.scripts=new Map,this.dependencies=new Map,this.devDependencies=new Map,this.peerDependencies=new Map,this.workspaceDefinitions=[],this.dependenciesMeta=new Map,this.peerDependenciesMeta=new Map,this.resolutions=[],this.files=null,this.publishConfig=null,this.installConfig=null,this.preferUnplugged=null,this.raw={},this.errors=[]}static async tryFind(e,{baseFs:t=new A.S}={}){const r=n.y1.join(e,"package.json");return await t.existsPromise(r)?await l.fromFile(r,{baseFs:t}):null}static async find(e,{baseFs:t}={}){const r=await l.tryFind(e,{baseFs:t});if(null===r)throw new Error("Manifest not found");return r}static async fromFile(e,{baseFs:t=new A.S}={}){const r=new l;return await r.loadFile(e,{baseFs:t}),r}static fromText(e){const t=new l;return t.loadFromText(e),t}static isManifestFieldCompatible(e,t){if(null===e)return!0;let r=!0,A=!1;for(const n of e)if("!"===n[0]){if(A=!0,t===n.slice(1))return!1}else if(r=!1,n===t)return!0;return A&&r}loadFromText(e){let t;try{t=JSON.parse(h(e)||"{}")}catch(t){throw t.message+=` (when parsing ${e})`,t}this.load(t),this.indent=u(e)}async loadFile(e,{baseFs:t=new A.S}){const r=await t.readFilePromise(e,"utf8");let n;try{n=JSON.parse(h(r)||"{}")}catch(t){throw t.message+=` (when parsing ${e})`,t}this.load(n),this.indent=u(r)}load(e,{yamlCompatibilityMode:t=!1}={}){if("object"!=typeof e||null===e)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;const r=[];if("string"==typeof e.name)try{this.name=g.parseIdent(e.name)}catch(e){r.push(new Error("Parsing failed for the 'name' field"))}if("string"==typeof e.version&&(this.version=e.version),Array.isArray(e.os)){const t=[];this.os=t;for(const A of e.os)"string"!=typeof A?r.push(new Error("Parsing failed for the 'os' field")):t.push(A)}if(Array.isArray(e.cpu)){const t=[];this.cpu=t;for(const A of e.cpu)"string"!=typeof A?r.push(new Error("Parsing failed for the 'cpu' field")):t.push(A)}if("string"==typeof e.type&&(this.type=e.type),"boolean"==typeof e.private&&(this.private=e.private),"string"==typeof e.license&&(this.license=e.license),"string"==typeof e.languageName&&(this.languageName=e.languageName),"string"==typeof e.main&&(this.main=p(e.main)),"string"==typeof e.module&&(this.module=p(e.module)),null!=e.browser)if("string"==typeof e.browser)this.browser=p(e.browser);else{this.browser=new Map;for(const[t,r]of Object.entries(e.browser))this.browser.set(p(t),"string"==typeof r?p(r):r)}if("string"==typeof e.bin)null!==this.name?this.bin=new Map([[this.name.name,p(e.bin)]]):r.push(new Error("String bin field, but no attached package name"));else if("object"==typeof e.bin&&null!==e.bin)for(const[t,A]of Object.entries(e.bin))"string"==typeof A?this.bin.set(t,p(A)):r.push(new Error(`Invalid bin definition for '${t}'`));if("object"==typeof e.scripts&&null!==e.scripts)for(const[t,A]of Object.entries(e.scripts))"string"==typeof A?this.scripts.set(t,A):r.push(new Error(`Invalid script definition for '${t}'`));if("object"==typeof e.dependencies&&null!==e.dependencies)for(const[t,A]of Object.entries(e.dependencies)){if("string"!=typeof A){r.push(new Error(`Invalid dependency range for '${t}'`));continue}let e;try{e=g.parseIdent(t)}catch(e){r.push(new Error(`Parsing failed for the dependency name '${t}'`));continue}const n=g.makeDescriptor(e,A);this.dependencies.set(n.identHash,n)}if("object"==typeof e.devDependencies&&null!==e.devDependencies)for(const[t,A]of Object.entries(e.devDependencies)){if("string"!=typeof A){r.push(new Error(`Invalid dependency range for '${t}'`));continue}let e;try{e=g.parseIdent(t)}catch(e){r.push(new Error(`Parsing failed for the dependency name '${t}'`));continue}const n=g.makeDescriptor(e,A);this.devDependencies.set(n.identHash,n)}if("object"==typeof e.peerDependencies&&null!==e.peerDependencies)for(let[t,A]of Object.entries(e.peerDependencies)){let e;try{e=g.parseIdent(t)}catch(e){r.push(new Error(`Parsing failed for the dependency name '${t}'`));continue}"string"==typeof A&&c.validRange(A)||(r.push(new Error(`Invalid dependency range for '${t}'`)),A="*");const n=g.makeDescriptor(e,A);this.peerDependencies.set(n.identHash,n)}"object"==typeof e.workspaces&&e.workspaces.nohoist&&r.push(new Error("'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead"));const A=Array.isArray(e.workspaces)?e.workspaces:"object"==typeof e.workspaces&&null!==e.workspaces&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];for(const e of A)"string"==typeof e?this.workspaceDefinitions.push({pattern:e}):r.push(new Error(`Invalid workspace definition for '${e}'`));if("object"==typeof e.dependenciesMeta&&null!==e.dependenciesMeta)for(const[A,n]of Object.entries(e.dependenciesMeta)){if("object"!=typeof n||null===n){r.push(new Error("Invalid meta field for '"+A));continue}const e=g.parseDescriptor(A),o=this.ensureDependencyMeta(e),i=d(n.built,{yamlCompatibilityMode:t});if(null===i){r.push(new Error(`Invalid built meta field for '${A}'`));continue}const s=d(n.optional,{yamlCompatibilityMode:t});if(null===s){r.push(new Error(`Invalid optional meta field for '${A}'`));continue}const a=d(n.unplugged,{yamlCompatibilityMode:t});null!==a?Object.assign(o,{built:i,optional:s,unplugged:a}):r.push(new Error(`Invalid unplugged meta field for '${A}'`))}if("object"==typeof e.peerDependenciesMeta&&null!==e.peerDependenciesMeta)for(const[A,n]of Object.entries(e.peerDependenciesMeta)){if("object"!=typeof n||null===n){r.push(new Error(`Invalid meta field for '${A}'`));continue}const e=g.parseDescriptor(A),o=this.ensurePeerDependencyMeta(e),i=d(n.optional,{yamlCompatibilityMode:t});null!==i?Object.assign(o,{optional:i}):r.push(new Error(`Invalid optional meta field for '${A}'`))}if("object"==typeof e.resolutions&&null!==e.resolutions)for(const[t,A]of Object.entries(e.resolutions))if("string"==typeof A)try{this.resolutions.push({pattern:(0,o.parseResolution)(t),reference:A})}catch(e){r.push(e);continue}else r.push(new Error(`Invalid resolution entry for '${t}'`));if(Array.isArray(e.files)){this.files=new Set;for(const t of e.files)"string"==typeof t?this.files.add(t):r.push(new Error(`Invalid files entry for '${t}'`))}if("object"==typeof e.publishConfig&&null!==e.publishConfig){if(this.publishConfig={},"string"==typeof e.publishConfig.access&&(this.publishConfig.access=e.publishConfig.access),"string"==typeof e.publishConfig.main&&(this.publishConfig.main=p(e.publishConfig.main)),"string"==typeof e.publishConfig.module&&(this.publishConfig.module=p(e.publishConfig.module)),null!=e.publishConfig.browser)if("string"==typeof e.publishConfig.browser)this.publishConfig.browser=p(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(const[t,r]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set(p(t),"string"==typeof r?p(r):r)}if("string"==typeof e.publishConfig.registry&&(this.publishConfig.registry=e.publishConfig.registry),"string"==typeof e.publishConfig.bin)null!==this.name?this.publishConfig.bin=new Map([[this.name.name,p(e.publishConfig.bin)]]):r.push(new Error("String bin field, but no attached package name"));else if("object"==typeof e.publishConfig.bin&&null!==e.publishConfig.bin){this.publishConfig.bin=new Map;for(const[t,A]of Object.entries(e.publishConfig.bin))"string"==typeof A?this.publishConfig.bin.set(t,p(A)):r.push(new Error(`Invalid bin definition for '${t}'`))}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(const t of e.publishConfig.executableFiles)"string"==typeof t?this.publishConfig.executableFiles.add(p(t)):r.push(new Error("Invalid executable file definition"))}}if("object"==typeof e.installConfig&&null!==e.installConfig){this.installConfig={};for(const t of Object.keys(e.installConfig))"hoistingLimits"===t?"string"==typeof e.installConfig.hoistingLimits?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:r.push(new Error("Invalid hoisting limits definition")):r.push(new Error("Unrecognized installConfig key: "+t))}if("object"==typeof e.optionalDependencies&&null!==e.optionalDependencies)for(const[t,A]of Object.entries(e.optionalDependencies)){if("string"!=typeof A){r.push(new Error(`Invalid dependency range for '${t}'`));continue}let e;try{e=g.parseIdent(t)}catch(e){r.push(new Error(`Parsing failed for the dependency name '${t}'`));continue}const n=g.makeDescriptor(e,A);this.dependencies.set(n.identHash,n);const o=g.makeDescriptor(e,"unknown"),i=this.ensureDependencyMeta(o);Object.assign(i,{optional:!0})}"boolean"==typeof e.preferUnplugged&&(this.preferUnplugged=e.preferUnplugged),this.errors=r}getForScope(e){switch(e){case"dependencies":return this.dependencies;case"devDependencies":return this.devDependencies;case"peerDependencies":return this.peerDependencies;default:throw new Error(`Unsupported value ("${e}")`)}}hasConsumerDependency(e){return!!this.dependencies.has(e.identHash)||!!this.peerDependencies.has(e.identHash)}hasHardDependency(e){return!!this.dependencies.has(e.identHash)||!!this.devDependencies.has(e.identHash)}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!this.hasHardDependency(e)||!!this.hasSoftDependency(e)}isCompatibleWithOS(e){return l.isManifestFieldCompatible(this.os,e)}isCompatibleWithCPU(e){return l.isManifestFieldCompatible(this.cpu,e)}ensureDependencyMeta(e){if("unknown"!==e.range&&!s().valid(e.range))throw new Error(`Invalid meta field range for '${g.stringifyDescriptor(e)}'`);const t=g.stringifyIdent(e),r="unknown"!==e.range?e.range:null;let A=this.dependenciesMeta.get(t);A||this.dependenciesMeta.set(t,A=new Map);let n=A.get(r);return n||A.set(r,n={}),n}ensurePeerDependencyMeta(e){if("unknown"!==e.range)throw new Error(`Invalid meta field range for '${g.stringifyDescriptor(e)}'`);const t=g.stringifyIdent(e);let r=this.peerDependenciesMeta.get(t);return r||this.peerDependenciesMeta.set(t,r={}),r}setRawField(e,t,{after:r=[]}={}){const A=new Set(r.filter(e=>Object.prototype.hasOwnProperty.call(this.raw,e)));if(0===A.size||Object.prototype.hasOwnProperty.call(this.raw,e))this.raw[e]=t;else{const r=this.raw,n=this.raw={};let o=!1;for(const i of Object.keys(r))n[i]=r[i],o||(A.delete(i),0===A.size&&(n[e]=t,o=!0))}}exportTo(e,{compatibilityMode:t=!0}={}){if(Object.assign(e,this.raw),null!==this.name?e.name=g.stringifyIdent(this.name):delete e.name,null!==this.version?e.version=this.version:delete e.version,null!==this.os?e.os=this.os:delete e.os,null!==this.cpu?e.cpu=this.cpu:delete e.cpu,null!==this.type?e.type=this.type:delete e.type,this.private?e.private=!0:delete e.private,null!==this.license?e.license=this.license:delete e.license,null!==this.languageName?e.languageName=this.languageName:delete e.languageName,null!==this.main?e.main=this.main:delete e.main,null!==this.module?e.module=this.module:delete e.module,null!==this.browser){const t=this.browser;"string"==typeof t?e.browser=t:t instanceof Map&&(e.browser=Object.assign({},...Array.from(t.keys()).sort().map(e=>({[e]:t.get(e)}))))}else delete e.browser;1===this.bin.size&&null!==this.name&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(e=>({[e]:this.bin.get(e)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:e})=>e)}:e.workspaces=this.workspaceDefinitions.map(({pattern:e})=>e):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;const r=[],A=[];for(const e of this.dependencies.values()){const n=this.dependenciesMeta.get(g.stringifyIdent(e));let o=!1;if(t&&n){const e=n.get(null);e&&e.optional&&(o=!0)}o?A.push(e):r.push(e)}r.length>0?e.dependencies=Object.assign({},...g.sortDescriptors(r).map(e=>({[g.stringifyIdent(e)]:e.range}))):delete e.dependencies,A.length>0?e.optionalDependencies=Object.assign({},...g.sortDescriptors(A).map(e=>({[g.stringifyIdent(e)]:e.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...g.sortDescriptors(this.devDependencies.values()).map(e=>({[g.stringifyIdent(e)]:e.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...g.sortDescriptors(this.peerDependencies.values()).map(e=>({[g.stringifyIdent(e)]:e.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(const[r,A]of a.sortMap(this.dependenciesMeta.entries(),([e,t])=>e))for(const[n,o]of a.sortMap(A.entries(),([e,t])=>null!==e?"0"+e:"1")){const A=null!==n?g.stringifyDescriptor(g.makeDescriptor(g.parseIdent(r),n)):r,i={...o};t&&null===n&&delete i.optional,0!==Object.keys(i).length&&(e.dependenciesMeta[A]=i)}return 0===Object.keys(e.dependenciesMeta).length&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...a.sortMap(this.peerDependenciesMeta.entries(),([e,t])=>e).map(([e,t])=>({[e]:t}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:e,reference:t})=>({[(0,o.stringifyResolution)(e)]:t}))):delete e.resolutions,null!==this.files?e.files=Array.from(this.files):delete e.files,null!==this.preferUnplugged?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,e}}function u(e){const t=e.match(/^[ \t]+/m);return t?t[0]:" "}function h(e){return 65279===e.charCodeAt(0)?e.slice(1):e}function p(e){return e.replace(/\\/g,"/")}function d(e,{yamlCompatibilityMode:t}){return t?a.tryParseOptionalBoolean(e):void 0===e||"boolean"==typeof e?e:null}l.fileName="package.json",l.allDependencies=["dependencies","devDependencies","peerDependencies"],l.hardDependencies=["dependencies","devDependencies"]},92659:(e,t,r)=>{"use strict";var A;function n(e){return"YN"+e.toString(10).padStart(4,"0")}r.d(t,{b:()=>A,i:()=>n}),function(e){e[e.UNNAMED=0]="UNNAMED",e[e.EXCEPTION=1]="EXCEPTION",e[e.MISSING_PEER_DEPENDENCY=2]="MISSING_PEER_DEPENDENCY",e[e.CYCLIC_DEPENDENCIES=3]="CYCLIC_DEPENDENCIES",e[e.DISABLED_BUILD_SCRIPTS=4]="DISABLED_BUILD_SCRIPTS",e[e.BUILD_DISABLED=5]="BUILD_DISABLED",e[e.SOFT_LINK_BUILD=6]="SOFT_LINK_BUILD",e[e.MUST_BUILD=7]="MUST_BUILD",e[e.MUST_REBUILD=8]="MUST_REBUILD",e[e.BUILD_FAILED=9]="BUILD_FAILED",e[e.RESOLVER_NOT_FOUND=10]="RESOLVER_NOT_FOUND",e[e.FETCHER_NOT_FOUND=11]="FETCHER_NOT_FOUND",e[e.LINKER_NOT_FOUND=12]="LINKER_NOT_FOUND",e[e.FETCH_NOT_CACHED=13]="FETCH_NOT_CACHED",e[e.YARN_IMPORT_FAILED=14]="YARN_IMPORT_FAILED",e[e.REMOTE_INVALID=15]="REMOTE_INVALID",e[e.REMOTE_NOT_FOUND=16]="REMOTE_NOT_FOUND",e[e.RESOLUTION_PACK=17]="RESOLUTION_PACK",e[e.CACHE_CHECKSUM_MISMATCH=18]="CACHE_CHECKSUM_MISMATCH",e[e.UNUSED_CACHE_ENTRY=19]="UNUSED_CACHE_ENTRY",e[e.MISSING_LOCKFILE_ENTRY=20]="MISSING_LOCKFILE_ENTRY",e[e.WORKSPACE_NOT_FOUND=21]="WORKSPACE_NOT_FOUND",e[e.TOO_MANY_MATCHING_WORKSPACES=22]="TOO_MANY_MATCHING_WORKSPACES",e[e.CONSTRAINTS_MISSING_DEPENDENCY=23]="CONSTRAINTS_MISSING_DEPENDENCY",e[e.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]="CONSTRAINTS_INCOMPATIBLE_DEPENDENCY",e[e.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]="CONSTRAINTS_EXTRANEOUS_DEPENDENCY",e[e.CONSTRAINTS_INVALID_DEPENDENCY=26]="CONSTRAINTS_INVALID_DEPENDENCY",e[e.CANT_SUGGEST_RESOLUTIONS=27]="CANT_SUGGEST_RESOLUTIONS",e[e.FROZEN_LOCKFILE_EXCEPTION=28]="FROZEN_LOCKFILE_EXCEPTION",e[e.CROSS_DRIVE_VIRTUAL_LOCAL=29]="CROSS_DRIVE_VIRTUAL_LOCAL",e[e.FETCH_FAILED=30]="FETCH_FAILED",e[e.DANGEROUS_NODE_MODULES=31]="DANGEROUS_NODE_MODULES",e[e.NODE_GYP_INJECTED=32]="NODE_GYP_INJECTED",e[e.AUTHENTICATION_NOT_FOUND=33]="AUTHENTICATION_NOT_FOUND",e[e.INVALID_CONFIGURATION_KEY=34]="INVALID_CONFIGURATION_KEY",e[e.NETWORK_ERROR=35]="NETWORK_ERROR",e[e.LIFECYCLE_SCRIPT=36]="LIFECYCLE_SCRIPT",e[e.CONSTRAINTS_MISSING_FIELD=37]="CONSTRAINTS_MISSING_FIELD",e[e.CONSTRAINTS_INCOMPATIBLE_FIELD=38]="CONSTRAINTS_INCOMPATIBLE_FIELD",e[e.CONSTRAINTS_EXTRANEOUS_FIELD=39]="CONSTRAINTS_EXTRANEOUS_FIELD",e[e.CONSTRAINTS_INVALID_FIELD=40]="CONSTRAINTS_INVALID_FIELD",e[e.AUTHENTICATION_INVALID=41]="AUTHENTICATION_INVALID",e[e.PROLOG_UNKNOWN_ERROR=42]="PROLOG_UNKNOWN_ERROR",e[e.PROLOG_SYNTAX_ERROR=43]="PROLOG_SYNTAX_ERROR",e[e.PROLOG_EXISTENCE_ERROR=44]="PROLOG_EXISTENCE_ERROR",e[e.STACK_OVERFLOW_RESOLUTION=45]="STACK_OVERFLOW_RESOLUTION",e[e.AUTOMERGE_FAILED_TO_PARSE=46]="AUTOMERGE_FAILED_TO_PARSE",e[e.AUTOMERGE_IMMUTABLE=47]="AUTOMERGE_IMMUTABLE",e[e.AUTOMERGE_SUCCESS=48]="AUTOMERGE_SUCCESS",e[e.AUTOMERGE_REQUIRED=49]="AUTOMERGE_REQUIRED",e[e.DEPRECATED_CLI_SETTINGS=50]="DEPRECATED_CLI_SETTINGS",e[e.PLUGIN_NAME_NOT_FOUND=51]="PLUGIN_NAME_NOT_FOUND",e[e.INVALID_PLUGIN_REFERENCE=52]="INVALID_PLUGIN_REFERENCE",e[e.CONSTRAINTS_AMBIGUITY=53]="CONSTRAINTS_AMBIGUITY",e[e.CACHE_OUTSIDE_PROJECT=54]="CACHE_OUTSIDE_PROJECT",e[e.IMMUTABLE_INSTALL=55]="IMMUTABLE_INSTALL",e[e.IMMUTABLE_CACHE=56]="IMMUTABLE_CACHE",e[e.INVALID_MANIFEST=57]="INVALID_MANIFEST",e[e.PACKAGE_PREPARATION_FAILED=58]="PACKAGE_PREPARATION_FAILED",e[e.INVALID_RANGE_PEER_DEPENDENCY=59]="INVALID_RANGE_PEER_DEPENDENCY",e[e.INCOMPATIBLE_PEER_DEPENDENCY=60]="INCOMPATIBLE_PEER_DEPENDENCY",e[e.DEPRECATED_PACKAGE=61]="DEPRECATED_PACKAGE",e[e.INCOMPATIBLE_OS=62]="INCOMPATIBLE_OS",e[e.INCOMPATIBLE_CPU=63]="INCOMPATIBLE_CPU",e[e.FROZEN_ARTIFACT_EXCEPTION=64]="FROZEN_ARTIFACT_EXCEPTION",e[e.TELEMETRY_NOTICE=65]="TELEMETRY_NOTICE",e[e.PATCH_HUNK_FAILED=66]="PATCH_HUNK_FAILED",e[e.INVALID_CONFIGURATION_VALUE=67]="INVALID_CONFIGURATION_VALUE",e[e.UNUSED_PACKAGE_EXTENSION=68]="UNUSED_PACKAGE_EXTENSION",e[e.REDUNDANT_PACKAGE_EXTENSION=69]="REDUNDANT_PACKAGE_EXTENSION"}(A||(A={}))},27092:(e,t,r)=>{"use strict";r.d(t,{B:()=>n});var A=r(54143);class n{constructor(e){this.resolvers=e.filter(e=>e)}supportsDescriptor(e,t){return!!this.tryResolverByDescriptor(e,t)}supportsLocator(e,t){return!!this.tryResolverByLocator(e,t)}shouldPersistResolution(e,t){return this.getResolverByLocator(e,t).shouldPersistResolution(e,t)}bindDescriptor(e,t,r){return this.getResolverByDescriptor(e,r).bindDescriptor(e,t,r)}getResolutionDependencies(e,t){return this.getResolverByDescriptor(e,t).getResolutionDependencies(e,t)}async getCandidates(e,t,r){const A=this.getResolverByDescriptor(e,r);return await A.getCandidates(e,t,r)}async getSatisfying(e,t,r){return this.getResolverByDescriptor(e,r).getSatisfying(e,t,r)}async resolve(e,t){const r=this.getResolverByLocator(e,t);return await r.resolve(e,t)}tryResolverByDescriptor(e,t){const r=this.resolvers.find(r=>r.supportsDescriptor(e,t));return r||null}getResolverByDescriptor(e,t){const r=this.resolvers.find(r=>r.supportsDescriptor(e,t));if(!r)throw new Error(A.prettyDescriptor(t.project.configuration,e)+" isn't supported by any available resolver");return r}tryResolverByLocator(e,t){const r=this.resolvers.find(r=>r.supportsLocator(e,t));return r||null}getResolverByLocator(e,t){const r=this.resolvers.find(r=>r.supportsLocator(e,t));if(!r)throw new Error(A.prettyLocator(t.project.configuration,e)+" isn't supported by any available resolver");return r}}},85824:(e,t,r)=>{"use strict";r.d(t,{I:()=>ie});var A=r(43896),n=r(46009),o=r(5944),i=r(11640),s=r(40822),a=r(76417);function c(){}function g(e,t,r,A,n){for(var o=0,i=t.length,s=0,a=0;oe.length?r:e})),c.value=e.join(l)}else c.value=e.join(r.slice(s,s+c.count));s+=c.count,c.added||(a+=c.count)}}var u=t[i-1];return i>1&&"string"==typeof u.value&&(u.added||u.removed)&&e.equals("",u.value)&&(t[i-2].value+=u.value,t.pop()),t}function l(e){return{newPos:e.newPos,components:e.components.slice(0)}}c.prototype={diff:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},A=r.callback;"function"==typeof r&&(A=r,r={}),this.options=r;var n=this;function o(e){return A?(setTimeout((function(){A(void 0,e)}),0),!0):e}e=this.castInput(e),t=this.castInput(t),e=this.removeEmpty(this.tokenize(e));var i=(t=this.removeEmpty(this.tokenize(t))).length,s=e.length,a=1,c=i+s,u=[{newPos:-1,components:[]}],h=this.extractCommon(u[0],t,e,0);if(u[0].newPos+1>=i&&h+1>=s)return o([{value:this.join(t),count:t.length}]);function p(){for(var r=-1*a;r<=a;r+=2){var A=void 0,c=u[r-1],h=u[r+1],p=(h?h.newPos:0)-r;c&&(u[r-1]=void 0);var d=c&&c.newPos+1=i&&p+1>=s)return o(g(n,A.components,t,e,n.useLongestToken));u[r]=A}else u[r]=void 0}a++}if(A)!function e(){setTimeout((function(){if(a>c)return A();p()||e()}),0)}();else for(;a<=c;){var d=p();if(d)return d}},pushComponent:function(e,t,r){var A=e[e.length-1];A&&A.added===t&&A.removed===r?e[e.length-1]={count:A.count+1,added:t,removed:r}:e.push({count:1,added:t,removed:r})},extractCommon:function(e,t,r,A){for(var n=t.length,o=r.length,i=e.newPos,s=i-A,a=0;i+10?a(d.lines.slice(-i.context)):[],g-=u.length,l-=u.length)}(o=u).push.apply(o,E(n.map((function(e){return(t.added?"+":"-")+e})))),t.added?p+=n.length:h+=n.length}else{if(g)if(n.length<=2*i.context&&e=s.length-2&&n.length<=i.context){var y=/\n$/.test(r),m=/\n$/.test(A),w=0==n.length&&u.length>B.oldLines;!y&&w&&u.splice(B.oldLines,0,"\\ No newline at end of file"),(y||w)&&m||u.push("\\ No newline at end of file")}c.push(B),g=0,l=0,u=[]}h+=n.length,p+=n.length}},f=0;f`${r}#commit=${A}`],[/^https:\/\/((?:[^/]+?)@)?codeload\.github\.com\/([^/]+\/[^/]+)\/tar\.gz\/([0-9a-f]+)$/,(e,t,r="",A,n)=>`https://${r}github.com/${A}.git#commit=${n}`],[/^https:\/\/((?:[^/]+?)@)?github\.com\/([^/]+\/[^/]+?)(?:\.git)?#([0-9a-f]+)$/,(e,t,r="",A,n)=>`https://${r}github.com/${A}.git#commit=${n}`],[/^https?:\/\/[^/]+\/(?:[^/]+\/)*(?:@[^/]+\/)?([^/]+)\/(?:-|download)\/\1-[^/]+\.tgz(?:#|$)/,e=>"npm:"+e],[/^https:\/\/npm\.pkg\.github\.com\/download\/(?:@[^/]+)\/(?:[^/]+)\/(?:[^/]+)\/(?:[0-9a-f]+)$/,e=>"npm:"+e],[/^https:\/\/npm\.fontawesome\.com\/(?:@[^/]+)\/([^/]+)\/-\/([^/]+)\/\1-\2.tgz(?:#|$)/,e=>"npm:"+e],[/^[^/]+\.tgz#[0-9a-f]+$/,e=>"npm:"+e]];class T{constructor(){this.resolutions=null}async setup(e,{report:t}){const r=n.y1.join(e.cwd,e.configuration.get("lockfileFilename"));if(!A.xfs.existsSync(r))return;const o=await A.xfs.readFilePromise(r,"utf8"),s=(0,i.parseSyml)(o);if(Object.prototype.hasOwnProperty.call(s,"__metadata"))return;const a=this.resolutions=new Map;for(const r of Object.keys(s)){let A=O.tryParseDescriptor(r);if(!A){t.reportWarning(P.b.YARN_IMPORT_FAILED,`Failed to parse the string "${r}" into a proper descriptor`);continue}k().validRange(A.range)&&(A=O.makeDescriptor(A,"npm:"+A.range));const{version:n,resolved:o}=s[r];if(!o)continue;let i;for(const[e,t]of U){const r=o.match(e);if(r){i=t(n,...r);break}}if(!i){t.reportWarning(P.b.YARN_IMPORT_FAILED,`${O.prettyDescriptor(e.configuration,A)}: Only some patterns can be imported from legacy lockfiles (not "${o}")`);continue}const c=O.makeLocator(A,i);a.set(A.descriptorHash,c)}}supportsDescriptor(e,t){return!!this.resolutions&&this.resolutions.has(e.descriptorHash)}supportsLocator(e,t){return!1}shouldPersistResolution(e,t){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}bindDescriptor(e,t,r){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,r){if(!this.resolutions)throw new Error("Assertion failed: The resolution store should have been setup");const A=this.resolutions.get(e.descriptorHash);if(!A)throw new Error("Assertion failed: The resolution should have been registered");return[A]}async getSatisfying(e,t,r){return null}async resolve(e,t){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}}class j{supportsDescriptor(e,t){return!!t.project.storedResolutions.get(e.descriptorHash)||!!t.project.originalPackages.has(O.convertDescriptorToLocator(e).locatorHash)}supportsLocator(e,t){return!!t.project.originalPackages.has(e.locatorHash)}shouldPersistResolution(e,t){throw new Error("The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes")}bindDescriptor(e,t,r){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,r){let A=r.project.originalPackages.get(O.convertDescriptorToLocator(e).locatorHash);if(A)return[A];const n=r.project.storedResolutions.get(e.descriptorHash);if(!n)throw new Error("Expected the resolution to have been successful - resolution not found");if(A=r.project.originalPackages.get(n),!A)throw new Error("Expected the resolution to have been successful - package not found");return[A]}async getSatisfying(e,t,r){return null}async resolve(e,t){const r=t.project.originalPackages.get(e.locatorHash);if(!r)throw new Error("The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache");return r}}var Y=r(46611),G=r(27092),H=r(35691);class J{constructor(e){this.resolver=e}supportsDescriptor(e,t){return this.resolver.supportsDescriptor(e,t)}supportsLocator(e,t){return this.resolver.supportsLocator(e,t)}shouldPersistResolution(e,t){return this.resolver.shouldPersistResolution(e,t)}bindDescriptor(e,t,r){return this.resolver.bindDescriptor(e,t,r)}getResolutionDependencies(e,t){return this.resolver.getResolutionDependencies(e,t)}async getCandidates(e,t,r){throw new H.lk(P.b.MISSING_LOCKFILE_ENTRY,"This package doesn't seem to be present in your lockfile; try to make an install to update your resolutions")}async getSatisfying(e,t,r){throw new H.lk(P.b.MISSING_LOCKFILE_ENTRY,"This package doesn't seem to be present in your lockfile; try to make an install to update your resolutions")}async resolve(e,t){throw new H.lk(P.b.MISSING_LOCKFILE_ENTRY,"This package doesn't seem to be present in your lockfile; try to make an install to update your resolutions")}}var q=r(33720),z=r(17722),W=r(81111),V=r(71643),X=r(20624),_=r(73632),Z=r(63088),$=r(36545),ee=r(32485);const te=/ *, */g,re=/\/$/,Ae=(0,N.promisify)(R().gzip),ne=(0,N.promisify)(R().gunzip),oe={restoreInstallersCustomData:["installersCustomData"],restoreResolutions:["accessibleLocators","optionalBuilds","storedDescriptors","storedResolutions","storedPackages","lockFileChecksum"]};class ie{constructor(e,{configuration:t}){this.resolutionAliases=new Map,this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map,this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.storedChecksums=new Map,this.accessibleLocators=new Set,this.originalPackages=new Map,this.optionalBuilds=new Set,this.peerRequirements=new Map,this.installersCustomData=new Map,this.lockFileChecksum=null,this.configuration=t,this.cwd=e}static async find(e,t){var r,o,i;if(!e.projectCwd)throw new s.UsageError("No project found in "+t);let a=e.projectCwd,c=t,g=null;for(;g!==e.projectCwd;){if(g=c,A.xfs.existsSync(n.y1.join(g,n.QS.manifest))){a=g;break}c=n.y1.dirname(g)}const l=new ie(e.projectCwd,{configuration:e});null===(r=x.VK.telemetry)||void 0===r||r.reportProject(l.cwd),await l.setupResolutions(),await l.setupWorkspaces(),null===(o=x.VK.telemetry)||void 0===o||o.reportWorkspaceCount(l.workspaces.length),null===(i=x.VK.telemetry)||void 0===i||i.reportDependencyCount(l.workspaces.reduce((e,t)=>e+t.manifest.dependencies.size+t.manifest.devDependencies.size,0));const u=l.tryWorkspaceByCwd(a);if(u)return{project:l,workspace:u,locator:u.anchoredLocator};const h=await l.findLocatorForLocation(a+"/",{strict:!0});if(h)return{project:l,locator:h,workspace:null};throw new s.UsageError(`The nearest package directory (${V.pretty(e,a,V.Type.PATH)}) doesn't seem to be part of the project declared in ${V.pretty(e,l.cwd,V.Type.PATH)}.\n\n- If the project directory is right, it might be that you forgot to list ${V.pretty(e,n.y1.relative(l.cwd,a),V.Type.PATH)} as a workspace.\n- If it isn't, it's likely because you have a yarn.lock or package.json file there, confusing the project root detection.`)}static generateBuildStateFile(e,t){let r="# Warning: This file is automatically generated. Removing it is fine, but will\n# cause all your builds to become invalidated.\n";const A=[...e].map(([e,r])=>{const A=t.get(e);if(void 0===A)throw new Error("Assertion failed: The locator should have been registered");return[O.stringifyLocator(A),A.locatorHash,r]});for(const[e,t,n]of _.sortMap(A,[e=>e[0],e=>e[1]]))r+="\n",r+=`# ${e}\n`,r+=JSON.stringify(t)+":\n",r+=` ${n}\n`;return r}async setupResolutions(){this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;const e=n.y1.join(this.cwd,this.configuration.get("lockfileFilename")),t=this.configuration.get("defaultLanguageName");if(A.xfs.existsSync(e)){const r=await A.xfs.readFilePromise(e,"utf8");this.lockFileChecksum=X.makeHash("1",r);const n=(0,i.parseSyml)(r);if(n.__metadata){const e=n.__metadata.version,r=n.__metadata.cacheKey;for(const A of Object.keys(n)){if("__metadata"===A)continue;const o=n[A];if(void 0===o.resolution)throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${A})`);const i=O.parseLocator(o.resolution,!0),s=new Y.G;s.load(o,{yamlCompatibilityMode:!0});const a=s.version,c=s.languageName||t,g=o.linkType.toUpperCase(),l=s.dependencies,u=s.peerDependencies,h=s.dependenciesMeta,p=s.peerDependenciesMeta,d=s.bin;if(null!=o.checksum){const e=void 0===r||o.checksum.includes("/")?o.checksum:`${r}/${o.checksum}`;this.storedChecksums.set(i.locatorHash,e)}if(e>=4){const e={...i,version:a,languageName:c,linkType:g,dependencies:l,peerDependencies:u,dependenciesMeta:h,peerDependenciesMeta:p,bin:d};this.originalPackages.set(e.locatorHash,e)}for(const t of A.split(te)){const r=O.parseDescriptor(t);if(this.storedDescriptors.set(r.descriptorHash,r),e>=4)this.storedResolutions.set(r.descriptorHash,i.locatorHash);else{const e=O.convertLocatorToDescriptor(i);e.descriptorHash!==r.descriptorHash&&(this.storedDescriptors.set(e.descriptorHash,e),this.resolutionAliases.set(r.descriptorHash,e.descriptorHash))}}}}}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=[this.cwd];for(;e.length>0;){const t=e;e=[];for(const r of t){if(this.workspacesByCwd.has(r))continue;const t=await this.addWorkspace(r),A=this.storedPackages.get(t.anchoredLocator.locatorHash);A&&(t.dependencies=A.dependencies);for(const r of t.workspacesCwds)e.push(r)}}}async addWorkspace(e){const t=new z.j(e,{project:this});await t.setup();const r=this.workspacesByIdent.get(t.locator.identHash);if(void 0!==r)throw new Error(`Duplicate workspace name ${O.prettyIdent(this.configuration,t.locator)}: ${e} conflicts with ${r.cwd}`);return this.workspaces.push(t),this.workspacesByCwd.set(e,t),this.workspacesByIdent.set(t.locator.identHash,t),t}get topLevelWorkspace(){return this.getWorkspaceByCwd(this.cwd)}tryWorkspaceByCwd(e){n.y1.isAbsolute(e)||(e=n.y1.resolve(this.cwd,e)),e=n.y1.normalize(e).replace(/\/+$/,"");const t=this.workspacesByCwd.get(e);return t||null}getWorkspaceByCwd(e){const t=this.tryWorkspaceByCwd(e);if(!t)throw new Error(`Workspace not found (${e})`);return t}tryWorkspaceByFilePath(e){let t=null;for(const r of this.workspaces){n.y1.relative(r.cwd,e).startsWith("../")||(t&&t.cwd.length>=r.cwd.length||(t=r))}return t||null}getWorkspaceByFilePath(e){const t=this.tryWorkspaceByFilePath(e);if(!t)throw new Error(`Workspace not found (${e})`);return t}tryWorkspaceByIdent(e){const t=this.workspacesByIdent.get(e.identHash);return void 0===t?null:t}getWorkspaceByIdent(e){const t=this.tryWorkspaceByIdent(e);if(!t)throw new Error(`Workspace not found (${O.prettyIdent(this.configuration,e)})`);return t}tryWorkspaceByDescriptor(e){const t=this.tryWorkspaceByIdent(e);return null!==t&&t.accepts(e.range)?t:null}getWorkspaceByDescriptor(e){const t=this.tryWorkspaceByDescriptor(e);if(null===t)throw new Error(`Workspace not found (${O.prettyDescriptor(this.configuration,e)})`);return t}tryWorkspaceByLocator(e){O.isVirtualLocator(e)&&(e=O.devirtualizeLocator(e));const t=this.tryWorkspaceByIdent(e);return null===t||t.locator.locatorHash!==e.locatorHash&&t.anchoredLocator.locatorHash!==e.locatorHash?null:t}getWorkspaceByLocator(e){const t=this.tryWorkspaceByLocator(e);if(!t)throw new Error(`Workspace not found (${O.prettyLocator(this.configuration,e)})`);return t}refreshWorkspaceDependencies(){for(const e of this.workspaces){const t=this.storedPackages.get(e.anchoredLocator.locatorHash);if(!t)throw new Error("Assertion failed: Expected workspace to have been resolved");e.dependencies=new Map(t.dependencies)}}forgetResolution(e){const t=e=>{this.storedResolutions.delete(e),this.storedDescriptors.delete(e)},r=e=>{this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)};if("descriptorHash"in e){const A=this.storedResolutions.get(e.descriptorHash);t(e.descriptorHash);const n=new Set(this.storedResolutions.values());void 0===A||n.has(A)||r(A)}if("locatorHash"in e){r(e.locatorHash);for(const[r,A]of this.storedResolutions)A===e.locatorHash&&t(r)}}forgetTransientResolutions(){const e=this.configuration.makeResolver();for(const t of this.originalPackages.values()){let r;try{r=e.shouldPersistResolution(t,{project:this,resolver:e})}catch(e){r=!1}r||this.forgetResolution(t)}}forgetVirtualResolutions(){for(const e of this.storedPackages.values())for(const[t,r]of e.dependencies)O.isVirtualDescriptor(r)&&e.dependencies.set(t,O.devirtualizeDescriptor(r))}getDependencyMeta(e,t){const r={},A=this.topLevelWorkspace.manifest.dependenciesMeta.get(O.stringifyIdent(e));if(!A)return r;const n=A.get(null);if(n&&Object.assign(r,n),null===t||!k().valid(t))return r;for(const[e,n]of A)null!==e&&e===t&&Object.assign(r,n);return r}async findLocatorForLocation(e,{strict:t=!1}={}){const r=new q.$,A=this.configuration.getLinkers(),n={project:this,report:r};for(const r of A){const A=await r.findPackageLocator(e,n);if(A){if(t){if((await r.findPackageLocation(A,n)).replace(re,"")!==e.replace(re,""))continue}return A}}return null}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error("Workspaces must have been setup before calling this function");this.forgetVirtualResolutions(),e.lockfileOnly||this.forgetTransientResolutions();const t=e.resolver||this.configuration.makeResolver(),r=new T;await r.setup(this,{report:e.report});const o=e.lockfileOnly?new G.B([new j,new J(t)]):new G.B([new j,r,t]),i=this.configuration.makeFetcher(),s=e.lockfileOnly?{project:this,report:e.report,resolver:o}:{project:this,report:e.report,resolver:o,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:i}},a=new Map,c=new Map,g=new Map,l=new Map,u=new Map,h=new Map,p=[],d=async e=>{const t=await _.prettifyAsyncErrors(async()=>await o.resolve(e,s),t=>`${O.prettyLocator(this.configuration,e)}: ${t}`);if(!O.areLocatorsEqual(e,t))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${O.prettyLocator(this.configuration,e)} to ${O.prettyLocator(this.configuration,t)})`);l.set(t.locatorHash,t);const r=this.configuration.normalizePackage(t);for(const[t,A]of r.dependencies){const n=await this.configuration.reduceHook(e=>e.reduceDependency,A,this,r,A,{resolver:o,resolveOptions:s});if(!O.areIdentsEqual(A,n))throw new Error("Assertion failed: The descriptor ident cannot be changed through aliases");const i=o.bindDescriptor(n,e,s);r.dependencies.set(t,i)}return p.push(Promise.all([...r.dependencies.values()].map(e=>f(e)))),c.set(r.locatorHash,r),r},C=async e=>{const t=this.resolutionAliases.get(e.descriptorHash);if(void 0!==t)return(async(e,t)=>{const r=await f(t);return a.set(e.descriptorHash,e),g.set(e.descriptorHash,r.locatorHash),r})(e,this.storedDescriptors.get(t));const r=o.getResolutionDependencies(e,s),A=new Map(await Promise.all(r.map(async e=>[e.descriptorHash,await f(e)]))),n=(await _.prettifyAsyncErrors(async()=>await o.getCandidates(e,A,s),t=>`${O.prettyDescriptor(this.configuration,e)}: ${t}`))[0];if(void 0===n)throw new Error(O.prettyDescriptor(this.configuration,e)+": No candidates found");return a.set(e.descriptorHash,e),g.set(e.descriptorHash,n.locatorHash),(async e=>{const t=u.get(e.locatorHash);if(void 0!==t)return t;const r=Promise.resolve().then(()=>d(e));return u.set(e.locatorHash,r),r})(n)},f=e=>{const t=h.get(e.descriptorHash);if(void 0!==t)return t;a.set(e.descriptorHash,e);const r=Promise.resolve().then(()=>C(e));return h.set(e.descriptorHash,r),r};for(const e of this.workspaces){const t=e.anchoredDescriptor;p.push(f(t))}for(;p.length>0;){const e=[...p];p.length=0,await Promise.all(e)}const I=new Set(this.resolutionAliases.values()),E=new Set(c.keys()),B=new Set,y=new Map;!function({project:e,allDescriptors:t,allResolutions:r,allPackages:o,accessibleLocators:i=new Set,optionalBuilds:s=new Set,volatileDescriptors:a=new Set,peerRequirements:c=new Map,report:g,tolerateMissingPackages:l=!1}){var u;const h=new Map,p=[],d=new Map,C=new Map,f=new Map,I=new Map,E=new Map,B=new Map(e.workspaces.map(e=>{const t=e.anchoredLocator.locatorHash,r=o.get(t);if(void 0===r){if(l)return[t,null];throw new Error("Assertion failed: The workspace should have an associated package")}return[t,O.copyPackage(r)]})),y=()=>{const e=A.xfs.mktempSync(),t=n.y1.join(e,"stacktrace.log"),r=String(p.length+1).length,o=p.map((e,t)=>`${(t+1+".").padStart(r," ")} ${O.stringifyLocator(e)}\n`).join("");throw A.xfs.writeFileSync(t,o),new H.lk(P.b.STACK_OVERFLOW_RESOLUTION,"Encountered a stack overflow when resolving peer dependencies; cf "+t)},m=e=>{const t=r.get(e.descriptorHash);if(void 0===t)throw new Error("Assertion failed: The resolution should have been registered");const A=o.get(t);if(!A)throw new Error("Assertion failed: The package could not be found");return A},w=(e,t,{first:r,optional:A})=>{p.length>1e3&&y(),p.push(e);const n=Q(e,t,{first:r,optional:A});return p.pop(),n},Q=(A,n,{first:c,optional:g})=>{if(i.has(A.locatorHash))return;i.add(A.locatorHash),g||s.delete(A.locatorHash);const u=o.get(A.locatorHash);if(!u){if(l)return;throw new Error(`Assertion failed: The package (${O.prettyLocator(e.configuration,A)}) should have been registered`)}const p=[],m=[],Q=[],D=[],b=[];for(const i of Array.from(u.dependencies.values())){if(u.peerDependencies.has(i.identHash)&&!c)continue;if(O.isVirtualDescriptor(i))throw new Error("Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch");a.delete(i.descriptorHash);let s=g;if(!s){const e=u.dependenciesMeta.get(O.stringifyIdent(i));if(void 0!==e){const t=e.get(null);void 0!==t&&t.optional&&(s=!0)}}const C=r.get(i.descriptorHash);if(!C){if(l)continue;throw new Error(`Assertion failed: The resolution (${O.prettyDescriptor(e.configuration,i)}) should have been registered`)}const v=B.get(C)||o.get(C);if(!v)throw new Error(`Assertion failed: The package (${C}, resolved from ${O.prettyDescriptor(e.configuration,i)}) should have been registered`);if(0===v.peerDependencies.size){w(v,new Map,{first:!1,optional:s});continue}const S=h.get(v.locatorHash);let k,N;"number"==typeof S&&S>=2&&y();const F=new Set;let K;m.push(()=>{k=O.virtualizeDescriptor(i,A.locatorHash),N=O.virtualizePackage(v,A.locatorHash),u.dependencies.delete(i.identHash),u.dependencies.set(k.identHash,k),r.set(k.descriptorHash,N.locatorHash),t.set(k.descriptorHash,k),o.set(N.locatorHash,N),p.push([v,k,N])}),Q.push(()=>{var e;K=new Map;for(const o of N.peerDependencies.values()){let i=u.dependencies.get(o.identHash);if(!i&&O.areIdentsEqual(A,o)&&(i=O.convertLocatorToDescriptor(A),t.set(i.descriptorHash,i),r.set(i.descriptorHash,A.locatorHash),a.delete(i.descriptorHash)),i||!N.dependencies.has(o.identHash)){if(i||(i=O.makeDescriptor(o,"missing:")),N.dependencies.set(i.identHash,i),O.isVirtualDescriptor(i)){_.getSetWithDefault(f,i.descriptorHash).add(N.locatorHash)}d.set(i.identHash,i),"missing:"===i.range&&F.add(i.identHash),K.set(o.identHash,null!==(e=n.get(o.identHash))&&void 0!==e?e:N.locatorHash)}else N.peerDependencies.delete(o.identHash)}N.dependencies=new Map(_.sortMap(N.dependencies,([e,t])=>O.stringifyIdent(t)))}),D.push(()=>{if(!o.has(N.locatorHash))return;const e=h.get(v.locatorHash),t=void 0!==e?e+1:1;h.set(v.locatorHash,t),w(N,K,{first:!1,optional:s}),h.set(v.locatorHash,t-1)}),b.push(()=>{const e=u.dependencies.get(i.identHash);if(void 0===e)throw new Error("Assertion failed: Expected the peer dependency to have been turned into a dependency");const t=r.get(e.descriptorHash);if(void 0===t)throw new Error("Assertion failed: Expected the descriptor to be registered");if(_.getSetWithDefault(E,t).add(A.locatorHash),o.has(N.locatorHash)){for(const e of N.peerDependencies.values()){const t=K.get(e.identHash);if(void 0===t)throw new Error("Assertion failed: Expected the peer dependency ident to be registered");_.getArrayWithDefault(_.getMapWithDefault(I,t),O.stringifyIdent(e)).push(N.locatorHash)}for(const e of F)N.dependencies.delete(e)}})}for(const e of[...m,...Q])e();let v;do{v=!0;for(const[A,n,s]of p){if(!o.has(s.locatorHash))continue;const a=_.getMapWithDefault(C,A.locatorHash),c=X.makeHash(...[...s.dependencies.values()].map(t=>{const A="missing:"!==t.range?r.get(t.descriptorHash):"missing:";if(void 0===A)throw new Error(`Assertion failed: Expected the resolution for ${O.prettyDescriptor(e.configuration,t)} to have been registered`);return A}),n.identHash),g=a.get(c);if(void 0===g){a.set(c,n);continue}if(g===n)continue;v=!1,o.delete(s.locatorHash),t.delete(n.descriptorHash),r.delete(n.descriptorHash),i.delete(s.locatorHash);const l=f.get(n.descriptorHash)||[],h=[u.locatorHash,...l];f.delete(n.descriptorHash);for(const e of h){const t=o.get(e);void 0!==t&&t.dependencies.set(n.identHash,g)}}}while(!v);for(const e of[...D,...b])e()};for(const t of e.workspaces)a.delete(t.anchoredDescriptor.descriptorHash),w(t.anchoredLocator,new Map,{first:!0,optional:!1});let D;!function(e){e[e.NotProvided=0]="NotProvided",e[e.NotCompatible=1]="NotCompatible"}(D||(D={}));const b=[];for(const[e,t]of E){const r=o.get(e);if(void 0===r)throw new Error("Assertion failed: Expected the root to be registered");const A=I.get(e);if(void 0!==A)for(const n of t){const t=o.get(n);if(void 0!==t)for(const[i,s]of A){const A=O.parseIdent(i);if(t.peerDependencies.has(A.identHash))continue;const a="p"+X.makeHash(n,i,e).slice(0,5);c.set(a,{subject:n,requested:A,rootRequester:e,allRequesters:s});const g=r.dependencies.get(A.identHash);if(void 0!==g){const e=m(g),n=null!==(u=e.version)&&void 0!==u?u:"0.0.0",i=new Set;for(const e of s){const t=o.get(e);if(void 0===t)throw new Error("Assertion failed: Expected the link to be registered");const r=t.peerDependencies.get(A.identHash);if(void 0===r)throw new Error("Assertion failed: Expected the ident to be registered");i.add(r.range)}[...i].every(e=>$.satisfiesWithPrereleases(n,e))||b.push({type:D.NotCompatible,subject:t,requested:A,requester:r,version:n,hash:a,requirementCount:s.length})}else{const e=r.peerDependenciesMeta.get(i);(null==e?void 0:e.optional)||b.push({type:D.NotProvided,subject:t,requested:A,requester:r,hash:a})}}}}const v=[e=>O.prettyLocatorNoColors(e.subject),e=>O.stringifyIdent(e.requested),e=>""+e.type];for(const t of _.sortMap(b,v))switch(t.type){case D.NotProvided:null==g||g.reportWarning(P.b.MISSING_PEER_DEPENDENCY,`${O.prettyLocator(e.configuration,t.subject)} doesn't provide ${O.prettyIdent(e.configuration,t.requested)} (${V.pretty(e.configuration,t.hash,V.Type.CODE)}), requested by ${O.prettyIdent(e.configuration,t.requester)}`);break;case D.NotCompatible:{const r=t.requirementCount>1?"and some of its descendants request":"requests";null==g||g.reportWarning(P.b.INCOMPATIBLE_PEER_DEPENDENCY,`${O.prettyLocator(e.configuration,t.subject)} provides ${O.prettyIdent(e.configuration,t.requested)} (${V.pretty(e.configuration,t.hash,V.Type.CODE)}) with version ${O.prettyReference(e.configuration,t.version)}, which doesn't satisfy what ${O.prettyIdent(e.configuration,t.requester)} ${r}`)}}b.length>0&&(null==g||g.reportWarning(P.b.UNNAMED,`Some peer dependencies are incorrectly met; run ${V.pretty(e.configuration,"yarn explain peer-requirements ",V.Type.CODE)} for details, where ${V.pretty(e.configuration,"",V.Type.CODE)} is the six-letter p-prefixed code`))}({project:this,report:e.report,accessibleLocators:B,volatileDescriptors:I,optionalBuilds:E,peerRequirements:y,allDescriptors:a,allResolutions:g,allPackages:c});for(const e of I)a.delete(e),g.delete(e);this.storedResolutions=g,this.storedDescriptors=a,this.storedPackages=c,this.accessibleLocators=B,this.originalPackages=l,this.optionalBuilds=E,this.peerRequirements=y,this.refreshWorkspaceDependencies()}async fetchEverything({cache:e,report:t,fetcher:r}){const A=r||this.configuration.makeFetcher(),n={checksums:this.storedChecksums,project:this,cache:e,fetcher:A,report:t},o=Array.from(new Set(_.sortMap(this.storedResolutions.values(),[e=>{const t=this.storedPackages.get(e);if(!t)throw new Error("Assertion failed: The locator should have been registered");return O.stringifyLocator(t)}])));let i=!1;const s=H.yG.progressViaCounter(o.length);t.reportProgress(s);const a=v()(32);if(await t.startCacheReport(async()=>{await Promise.all(o.map(e=>a(async()=>{const r=this.storedPackages.get(e);if(!r)throw new Error("Assertion failed: The locator should have been registered");if(O.isVirtualLocator(r))return;let o;try{o=await A.fetch(r,n)}catch(e){return e.message=`${O.prettyLocator(this.configuration,r)}: ${e.message}`,t.reportExceptionOnce(e),void(i=e)}o.checksum?this.storedChecksums.set(r.locatorHash,o.checksum):this.storedChecksums.delete(r.locatorHash),o.releaseFs&&o.releaseFs()}).finally(()=>{s.tick()})))}),i)throw i}async linkEverything({cache:e,report:t,fetcher:r,skipBuild:o}){var s;const c=r||this.configuration.makeFetcher(),g={checksums:this.storedChecksums,project:this,cache:e,fetcher:c,report:t,skipIntegrityCheck:!0},l=this.configuration.getLinkers(),u={project:this,report:t},h=new Map(l.map(e=>{const t=e.makeInstaller(u),r=t.getCustomDataKey(),A=this.installersCustomData.get(r);return void 0!==A&&t.attachCustomData(A),[e,t]})),p=new Map,d=new Map,C=new Map,f=new Map(await Promise.all([...this.accessibleLocators].map(async e=>{const t=this.storedPackages.get(e);if(!t)throw new Error("Assertion failed: The locator should have been registered");return[e,await c.fetch(t,g)]})));for(const e of this.accessibleLocators){const t=this.storedPackages.get(e);if(void 0===t)throw new Error("Assertion failed: The locator should have been registered");const r=f.get(t.locatorHash);if(void 0===r)throw new Error("Assertion failed: The fetch result should have been registered");const A=this.tryWorkspaceByLocator(t);if(null!==A){const e=[],{scripts:o}=A.manifest;for(const t of["preinstall","install","postinstall"])o.has(t)&&e.push([L.k.SCRIPT,t]);try{for(const e of h.values()){if(null!==(await e.installPackage(t,r)).buildDirective)throw new Error("Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core")}}finally{r.releaseFs&&r.releaseFs()}const i=n.y1.join(r.packageFs.getRealPath(),r.prefixPath);d.set(t.locatorHash,i),e.length>0&&C.set(t.locatorHash,{directives:e,buildLocations:[i]})}else{const e=l.find(e=>e.supportsPackage(t,u));if(!e)throw new H.lk(P.b.LINKER_NOT_FOUND,O.prettyLocator(this.configuration,t)+" isn't supported by any available linker");const A=h.get(e);if(!A)throw new Error("Assertion failed: The installer should have been registered");let n;try{n=await A.installPackage(t,r)}finally{r.releaseFs&&r.releaseFs()}p.set(t.locatorHash,e),d.set(t.locatorHash,n.packageLocation),n.buildDirective&&n.packageLocation&&C.set(t.locatorHash,{directives:n.buildDirective,buildLocations:[n.packageLocation]})}}const I=new Map;for(const e of this.accessibleLocators){const t=this.storedPackages.get(e);if(!t)throw new Error("Assertion failed: The locator should have been registered");const r=null!==this.tryWorkspaceByLocator(t),A=async(e,A)=>{const n=d.get(t.locatorHash);if(void 0===n)throw new Error(`Assertion failed: The package (${O.prettyLocator(this.configuration,t)}) should have been registered`);const o=[];for(const A of t.dependencies.values()){const i=this.storedResolutions.get(A.descriptorHash);if(void 0===i)throw new Error(`Assertion failed: The resolution (${O.prettyDescriptor(this.configuration,A)}, from ${O.prettyLocator(this.configuration,t)})should have been registered`);const s=this.storedPackages.get(i);if(void 0===s)throw new Error(`Assertion failed: The package (${i}, resolved from ${O.prettyDescriptor(this.configuration,A)}) should have been registered`);const a=null===this.tryWorkspaceByLocator(s)?p.get(i):null;if(void 0===a)throw new Error(`Assertion failed: The package (${i}, resolved from ${O.prettyDescriptor(this.configuration,A)}) should have been registered`);const c=null===a;if(a===e||r||c)null!==d.get(s.locatorHash)&&o.push([A,s]);else if(null!==n){_.getArrayWithDefault(I,i).push(n)}}null!==n&&await A.attachInternalDependencies(t,o)};if(r)for(const[e,t]of h)await A(e,t);else{const e=p.get(t.locatorHash);if(!e)throw new Error("Assertion failed: The linker should have been found");const r=h.get(e);if(!r)throw new Error("Assertion failed: The installer should have been registered");await A(e,r)}}for(const[e,t]of I){const r=this.storedPackages.get(e);if(!r)throw new Error("Assertion failed: The package should have been registered");const A=p.get(r.locatorHash);if(!A)throw new Error("Assertion failed: The linker should have been found");const n=h.get(A);if(!n)throw new Error("Assertion failed: The installer should have been registered");await n.attachExternalDependents(r,t)}const E=new Map;for(const e of h.values()){const t=await e.finalizeInstall();for(const e of null!==(s=null==t?void 0:t.records)&&void 0!==s?s:[])C.set(e.locatorHash,{directives:e.buildDirective,buildLocations:e.buildLocations});void 0!==(null==t?void 0:t.customData)&&E.set(e.getCustomDataKey(),t.customData)}if(this.installersCustomData=E,await this.persistInstallStateFile(),o)return;const B=new Set(this.storedPackages.keys()),y=new Set(C.keys());for(const e of y)B.delete(e);const m=(0,a.createHash)("sha512");m.update(process.versions.node),this.configuration.triggerHook(e=>e.globalHashGeneration,this,e=>{m.update("\0"),m.update(e)});const w=m.digest("hex"),Q=new Map,D=e=>{let t=Q.get(e.locatorHash);if(void 0!==t)return t;const r=this.storedPackages.get(e.locatorHash);if(void 0===r)throw new Error("Assertion failed: The package should have been registered");const A=(0,a.createHash)("sha512");A.update(e.locatorHash),Q.set(e.locatorHash,"");for(const e of r.dependencies.values()){const t=this.storedResolutions.get(e.descriptorHash);if(void 0===t)throw new Error(`Assertion failed: The resolution (${O.prettyDescriptor(this.configuration,e)}) should have been registered`);const r=this.storedPackages.get(t);if(void 0===r)throw new Error("Assertion failed: The package should have been registered");A.update(D(r))}return t=A.digest("hex"),Q.set(e.locatorHash,t),t},b=(e,t)=>{const r=(0,a.createHash)("sha512");r.update(w),r.update(D(e));for(const e of t)r.update(e);return r.digest("hex")},v=this.configuration.get("bstatePath"),S=A.xfs.existsSync(v)?(0,i.parseSyml)(await A.xfs.readFilePromise(v,"utf8")):{},k=new Map;for(;y.size>0;){const e=y.size,r=[];for(const e of y){const o=this.storedPackages.get(e);if(!o)throw new Error("Assertion failed: The package should have been registered");let i=!0;for(const e of o.dependencies.values()){const t=this.storedResolutions.get(e.descriptorHash);if(!t)throw new Error(`Assertion failed: The resolution (${O.prettyDescriptor(this.configuration,e)}) should have been registered`);if(y.has(t)){i=!1;break}}if(!i)continue;y.delete(e);const s=C.get(o.locatorHash);if(!s)throw new Error("Assertion failed: The build directive should have been registered");const a=b(o,s.buildLocations);if(Object.prototype.hasOwnProperty.call(S,o.locatorHash)&&S[o.locatorHash]===a)k.set(o.locatorHash,a);else{Object.prototype.hasOwnProperty.call(S,o.locatorHash)?t.reportInfo(P.b.MUST_REBUILD,O.prettyLocator(this.configuration,o)+" must be rebuilt because its dependency tree changed"):t.reportInfo(P.b.MUST_BUILD,O.prettyLocator(this.configuration,o)+" must be built because it never did before or the last one failed");for(const e of s.buildLocations){if(!n.y1.isAbsolute(e))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${e})`);r.push((async()=>{for(const[r,i]of s.directives){let s=`# This file contains the result of Yarn building a package (${O.stringifyLocator(o)})\n`;switch(r){case L.k.SCRIPT:s+=`# Script name: ${i}\n`;break;case L.k.SHELLCODE:s+=`# Script code: ${i}\n`}const c=null;await A.xfs.mktempPromise(async g=>{const l=n.y1.join(g,"build.log"),{stdout:u,stderr:h}=this.configuration.getSubprocessStreams(l,{header:s,prefix:O.prettyLocator(this.configuration,o),report:t});let p;try{switch(r){case L.k.SCRIPT:p=await Z.executePackageScript(o,i,[],{cwd:e,project:this,stdin:c,stdout:u,stderr:h});break;case L.k.SHELLCODE:p=await Z.executePackageShellcode(o,i,[],{cwd:e,project:this,stdin:c,stdout:u,stderr:h})}}catch(e){h.write(e.stack),p=1}if(u.end(),h.end(),0===p)return k.set(o.locatorHash,a),!0;A.xfs.detachTemp(g);const d=`${O.prettyLocator(this.configuration,o)} couldn't be built successfully (exit code ${V.pretty(this.configuration,p,V.Type.NUMBER)}, logs can be found here: ${V.pretty(this.configuration,l,V.Type.PATH)})`;return t.reportInfo(P.b.BUILD_FAILED,d),this.optionalBuilds.has(o.locatorHash)?(k.set(o.locatorHash,a),!0):(t.reportError(P.b.BUILD_FAILED,d),!1)})}})())}}}if(await Promise.all(r),e===y.size){const e=Array.from(y).map(e=>{const t=this.storedPackages.get(e);if(!t)throw new Error("Assertion failed: The package should have been registered");return O.prettyLocator(this.configuration,t)}).join(", ");t.reportError(P.b.CYCLIC_DEPENDENCIES,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${e})`);break}}if(k.size>0){const e=this.configuration.get("bstatePath"),t=ie.generateBuildStateFile(k,this.storedPackages);await A.xfs.mkdirPromise(n.y1.dirname(e),{recursive:!0}),await A.xfs.changeFilePromise(e,t,{automaticNewlines:!0})}else await A.xfs.removePromise(v)}async install(e){var t,r;const i=this.configuration.get("nodeLinker");null===(t=x.VK.telemetry)||void 0===t||t.reportInstall(i),await e.report.startTimerPromise("Project validation",{skipIfEmpty:!0},async()=>{await this.configuration.triggerHook(e=>e.validateProject,this,{reportWarning:e.report.reportWarning.bind(e.report),reportError:e.report.reportError.bind(e.report)})});for(const e of this.configuration.packageExtensions.values())for(const[,t]of e)for(const e of t)e.status=ee._u.Inactive;const s=n.y1.join(this.cwd,this.configuration.get("lockfileFilename"));let a=null;if(e.immutable)try{a=await A.xfs.readFilePromise(s,"utf8")}catch(e){throw"ENOENT"===e.code?new H.lk(P.b.FROZEN_LOCKFILE_EXCEPTION,"The lockfile would have been created by this install, which is explicitly forbidden."):e}await e.report.startTimerPromise("Resolution step",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise("Post-resolution validation",{skipIfEmpty:!0},async()=>{for(const[,t]of this.configuration.packageExtensions)for(const[,r]of t)for(const t of r)if(t.userProvided){const r=V.pretty(this.configuration,t,V.Type.PACKAGE_EXTENSION);switch(t.status){case ee._u.Inactive:e.report.reportWarning(P.b.UNUSED_PACKAGE_EXTENSION,r+": No matching package in the dependency tree; you may not need this rule anymore.");break;case ee._u.Redundant:e.report.reportWarning(P.b.REDUNDANT_PACKAGE_EXTENSION,r+": This rule seems redundant when applied on the original package; the extension may have been applied upstream.")}}if(null!==a){const t=(0,o.qH)(a,this.generateLockfile());if(t!==a){const r=w(s,s,a,t);e.report.reportSeparator();for(const t of r.hunks){e.report.reportInfo(null,`@@ -${t.oldStart},${t.oldLines} +${t.newStart},${t.newLines} @@`);for(const r of t.lines)r.startsWith("+")?e.report.reportError(P.b.FROZEN_LOCKFILE_EXCEPTION,V.pretty(this.configuration,r,V.Type.ADDED)):r.startsWith("-")?e.report.reportError(P.b.FROZEN_LOCKFILE_EXCEPTION,V.pretty(this.configuration,r,V.Type.REMOVED)):e.report.reportInfo(null,V.pretty(this.configuration,r,"grey"))}throw e.report.reportSeparator(),new H.lk(P.b.FROZEN_LOCKFILE_EXCEPTION,"The lockfile would have been modified by this install, which is explicitly forbidden.")}}});for(const e of this.configuration.packageExtensions.values())for(const[,t]of e)for(const e of t)e.userProvided&&e.status===ee._u.Active&&(null===(r=x.VK.telemetry)||void 0===r||r.reportPackageExtension(V.json(e,V.Type.PACKAGE_EXTENSION)));await e.report.startTimerPromise("Fetch step",async()=>{await this.fetchEverything(e),(void 0===e.persistProject||e.persistProject)&&await this.cacheCleanup(e)}),(void 0===e.persistProject||e.persistProject)&&await this.persist(),await e.report.startTimerPromise("Link step",async()=>{const t=e.immutable?[...new Set(this.configuration.get("immutablePatterns"))].sort():[],r=await Promise.all(t.map(async e=>X.checksumPattern(e,{cwd:this.cwd})));await this.linkEverything(e);const A=await Promise.all(t.map(async e=>X.checksumPattern(e,{cwd:this.cwd})));for(let n=0;ne.afterAllInstalled,this,e)}generateLockfile(){const e=new Map;for(const[t,r]of this.storedResolutions.entries()){let A=e.get(r);A||e.set(r,A=new Set),A.add(t)}const t={__metadata:{version:4}};for(const[r,A]of e.entries()){const e=this.originalPackages.get(r);if(!e)continue;const n=[];for(const e of A){const t=this.storedDescriptors.get(e);if(!t)throw new Error("Assertion failed: The descriptor should have been registered");n.push(t)}const o=n.map(e=>O.stringifyDescriptor(e)).sort().join(", "),i=new Y.G;let s;i.version=e.linkType===ee.Un.HARD?e.version:"0.0.0-use.local",i.languageName=e.languageName,i.dependencies=new Map(e.dependencies),i.peerDependencies=new Map(e.peerDependencies),i.dependenciesMeta=new Map(e.dependenciesMeta),i.peerDependenciesMeta=new Map(e.peerDependenciesMeta),i.bin=new Map(e.bin);const a=this.storedChecksums.get(e.locatorHash);if(void 0!==a){const e=a.indexOf("/");if(-1===e)throw new Error("Assertion failed: Expecte the checksum to reference its cache key");const r=a.slice(0,e),A=a.slice(e+1);void 0===t.__metadata.cacheKey&&(t.__metadata.cacheKey=r),s=r===t.__metadata.cacheKey?A:a}t[o]={...i.exportTo({},{compatibilityMode:!1}),linkType:e.linkType.toLowerCase(),resolution:O.stringifyLocator(e),checksum:s}}return['# This file is generated by running "yarn install" inside your project.\n',"# Manual changes might be lost - proceed with caution!\n"].join("")+"\n"+(0,i.stringifySyml)(t)}async persistLockfile(){const e=n.y1.join(this.cwd,this.configuration.get("lockfileFilename")),t=this.generateLockfile();await A.xfs.changeFilePromise(e,t,{automaticNewlines:!0})}async persistInstallStateFile(){const e=[];for(const t of Object.values(oe))e.push(...t);const t=D()(this,e),r=await Ae(K().serialize(t)),o=this.configuration.get("installStatePath");await A.xfs.mkdirPromise(n.y1.dirname(o),{recursive:!0}),await A.xfs.changeFilePromise(o,r)}async restoreInstallState({restoreInstallersCustomData:e=!0,restoreResolutions:t=!0}={}){const r=this.configuration.get("installStatePath");if(!A.xfs.existsSync(r))return void(t&&await this.applyLightResolution());const n=await A.xfs.readFilePromise(r),o=K().deserialize(await ne(n));e&&void 0!==o.installersCustomData&&(this.installersCustomData=o.installersCustomData),t&&(o.lockFileChecksum===this.lockFileChecksum?(Object.assign(this,D()(o,oe.restoreResolutions)),this.refreshWorkspaceDependencies()):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new q.$}),await this.persistInstallStateFile()}async persist(){await this.persistLockfile();for(const e of this.workspacesByCwd.values())await e.persistManifest()}async cacheCleanup({cache:e,report:t}){const r=new Set([".gitignore"]);if(A.xfs.existsSync(e.cwd)&&(0,W.isFolderInside)(e.cwd,this.cwd)){for(const o of await A.xfs.readdirPromise(e.cwd)){if(r.has(o))continue;const i=n.y1.resolve(e.cwd,o);e.markedFiles.has(i)||(e.immutable?t.reportError(P.b.IMMUTABLE_CACHE,V.pretty(this.configuration,n.y1.basename(i),"magenta")+" appears to be unused and would marked for deletion, but the cache is immutable"):(t.reportInfo(P.b.UNUSED_CACHE_ENTRY,V.pretty(this.configuration,n.y1.basename(i),"magenta")+" appears to be unused - removing"),await A.xfs.removePromise(i)))}e.markedFiles.clear()}}}},52779:(e,t,r)=>{"use strict";r.d(t,{c:()=>s,O:()=>a});var A=r(53887),n=r.n(A),o=r(36545),i=r(54143);const s=/^(?!v)[a-z0-9-.]+$/i;class a{supportsDescriptor(e,t){return!!o.validRange(e.range)||!!s.test(e.range)}supportsLocator(e,t){return!!n().valid(e.reference)||!!s.test(e.reference)}shouldPersistResolution(e,t){return t.resolver.shouldPersistResolution(this.forwardLocator(e,t),t)}bindDescriptor(e,t,r){return r.resolver.bindDescriptor(this.forwardDescriptor(e,r),t,r)}getResolutionDependencies(e,t){return t.resolver.getResolutionDependencies(this.forwardDescriptor(e,t),t)}async getCandidates(e,t,r){return await r.resolver.getCandidates(this.forwardDescriptor(e,r),t,r)}async getSatisfying(e,t,r){return await r.resolver.getSatisfying(this.forwardDescriptor(e,r),t,r)}async resolve(e,t){const r=await t.resolver.resolve(this.forwardLocator(e,t),t);return i.renamePackage(r,e)}forwardDescriptor(e,t){return i.makeDescriptor(e,`${t.project.configuration.get("defaultProtocol")}${e.range}`)}forwardLocator(e,t){return i.makeLocator(e,`${t.project.configuration.get("defaultProtocol")}${e.reference}`)}}},35691:(e,t,r)=>{"use strict";r.d(t,{lk:()=>i,yG:()=>s});var A=r(92413),n=r(24304),o=r(92659);class i extends Error{constructor(e,t,r){super(t),this.reportExtra=r,this.reportCode=e}}class s{constructor(){this.reportedInfos=new Set,this.reportedWarnings=new Set,this.reportedErrors=new Set}static progressViaCounter(e){let t,r=0,A=new Promise(e=>{t=e});const n=e=>{const n=t;A=new Promise(e=>{t=e}),r=e,n()},o=async function*(){for(;ro,set:n,tick:(e=0)=>{n(r+1)}}}reportInfoOnce(e,t,r){const A=r&&r.key?r.key:t;this.reportedInfos.has(A)||(this.reportedInfos.add(A),this.reportInfo(e,t))}reportWarningOnce(e,t,r){const A=r&&r.key?r.key:t;this.reportedWarnings.has(A)||(this.reportedWarnings.add(A),this.reportWarning(e,t))}reportErrorOnce(e,t,r){var A;const n=r&&r.key?r.key:t;this.reportedErrors.has(n)||(this.reportedErrors.add(n),this.reportError(e,t),null===(A=null==r?void 0:r.reportExtra)||void 0===A||A.call(r,this))}reportExceptionOnce(e){!function(e){return void 0!==e.reportCode}(e)?this.reportErrorOnce(o.b.EXCEPTION,e.stack||e.message,{key:e}):this.reportErrorOnce(e.reportCode,e.message,{key:e,reportExtra:e.reportExtra})}createStreamReporter(e=null){const t=new A.PassThrough,r=new n.StringDecoder;let o="";return t.on("data",t=>{let A,n=r.write(t);do{if(A=n.indexOf("\n"),-1!==A){const t=o+n.substr(0,A);n=n.substr(A+1),o="",null!==e?this.reportInfo(null,`${e} ${t}`):this.reportInfo(null,t)}}while(-1!==A);o+=n}),t.on("end",()=>{const t=r.end();""!==t&&(null!==e?this.reportInfo(null,`${e} ${t}`):this.reportInfo(null,t))}),t}}},15815:(e,t,r)=>{"use strict";r.d(t,{Qw:()=>C,Pk:()=>f});var A=r(29148),n=r.n(A),o=r(92659),i=r(35691),s=r(71643);const a=["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"],c=new Set([o.b.FETCH_NOT_CACHED,o.b.UNUSED_CACHE_ENTRY]),g=process.env.GITHUB_ACTIONS?{start:e=>`::group::${e}\n`,end:e=>"::endgroup::\n"}:process.env.TRAVIS?{start:e=>`travis_fold:start:${e}\n`,end:e=>`travis_fold:end:${e}\n`}:process.env.GITLAB_CI?{start:e=>`section_start:${Math.floor(Date.now()/1e3)}:${e.toLowerCase().replace(/\W+/g,"_")}\r${e}\n`,end:e=>`section_end:${Math.floor(Date.now()/1e3)}:${e.toLowerCase().replace(/\W+/g,"_")}\r`}:null,l=new Date,u=["iTerm.app","Apple_Terminal"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,h={patrick:{date:[17,3],chars:["🍀","🌱"],size:40},simba:{date:[19,7],chars:["🦁","🌴"],size:40},jack:{date:[31,10],chars:["🎃","🦇"],size:40},hogsfather:{date:[31,12],chars:["🎉","🎄"],size:40},default:{chars:["=","-"],size:80}},p=u&&Object.keys(h).find(e=>{const t=h[e];return!t.date||t.date[0]===l.getDate()&&t.date[1]===l.getMonth()+1})||"default";function d(e,{configuration:t,json:r}){const A=null===e?0:e,n=(0,o.i)(A);return r||null!==e?n:s.pretty(t,n,"grey")}function C(e,{configuration:t,json:r}){const A=d(e,{configuration:t,json:r});if(!t.get("enableHyperlinks"))return A;if(null===e||e===o.b.UNNAMED)return A;return`]8;;${`https://yarnpkg.com/advanced/error-codes#${A}---${o.b[e]}`.toLowerCase()}${A}]8;;`}class f extends i.yG{constructor({configuration:e,stdout:t,json:r=!1,includeFooter:A=!0,includeLogs:n=!r,includeInfos:o=n,includeWarnings:i=n,forgettableBufferSize:a=5,forgettableNames:g=new Set}){super(),this.uncommitted=new Set,this.cacheHitCount=0,this.cacheMissCount=0,this.warningCount=0,this.errorCount=0,this.startTime=Date.now(),this.indent=0,this.progress=new Map,this.progressTime=0,this.progressFrame=0,this.progressTimeout=null,this.forgettableLines=[],s.addLogFilterSupport(this,{configuration:e}),this.configuration=e,this.forgettableBufferSize=a,this.forgettableNames=new Set([...g,...c]),this.includeFooter=A,this.includeInfos=o,this.includeWarnings=i,this.json=r,this.stdout=t;const l=this.configuration.get("progressBarStyle")||p;if(!Object.prototype.hasOwnProperty.call(h,l))throw new Error("Assertion failed: Invalid progress bar style");this.progressStyle=h[l];const u="➤ YN0000: ┌ ".length,d=Math.max(0,Math.min(process.stdout.columns-u,80));this.progressMaxScaledSize=Math.floor(this.progressStyle.size*d/80)}static async start(e,t){const r=new this(e),A=process.emitWarning;process.emitWarning=(e,t)=>{if("string"!=typeof e){const r=e;e=r.message,t=null!=t?t:r.name}const A=void 0!==t?`${t}: ${e}`:e;r.reportWarning(o.b.UNNAMED,A)};try{await t(r)}catch(e){r.reportExceptionOnce(e)}finally{await r.finalize(),process.emitWarning=A}return r}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(e){this.cacheHitCount+=1}reportCacheMiss(e,t){this.cacheMissCount+=1,void 0===t||this.configuration.get("preferAggregateCacheInfo")||this.reportInfo(o.b.FETCH_NOT_CACHED,t)}startTimerSync(e,t,r){const A="function"==typeof t?t:r,n={committed:!1,action:()=>{this.reportInfo(null,"┌ "+e),this.indent+=1,null!==g&&this.stdout.write(g.start(e))}};("function"==typeof t?{}:t).skipIfEmpty?this.uncommitted.add(n):(n.action(),n.committed=!0);const o=Date.now();try{return A()}catch(e){throw this.reportExceptionOnce(e),e}finally{const t=Date.now();this.uncommitted.delete(n),n.committed&&(this.indent-=1,null!==g&&this.stdout.write(g.end(e)),this.configuration.get("enableTimers")&&t-o>200?this.reportInfo(null,"└ Completed in "+s.pretty(this.configuration,t-o,s.Type.DURATION)):this.reportInfo(null,"└ Completed"))}}async startTimerPromise(e,t,r){const A="function"==typeof t?t:r,n={committed:!1,action:()=>{this.reportInfo(null,"┌ "+e),this.indent+=1,null!==g&&this.stdout.write(g.start(e))}};("function"==typeof t?{}:t).skipIfEmpty?this.uncommitted.add(n):(n.action(),n.committed=!0);const o=Date.now();try{return await A()}catch(e){throw this.reportExceptionOnce(e),e}finally{const t=Date.now();this.uncommitted.delete(n),n.committed&&(this.indent-=1,null!==g&&this.stdout.write(g.end(e)),this.configuration.get("enableTimers")&&t-o>200?this.reportInfo(null,"└ Completed in "+s.pretty(this.configuration,t-o,s.Type.DURATION)):this.reportInfo(null,"└ Completed"))}}async startCacheReport(e){const t=this.configuration.get("preferAggregateCacheInfo")?{cacheHitCount:this.cacheHitCount,cacheMissCount:this.cacheMissCount}:null;try{return await e()}catch(e){throw this.reportExceptionOnce(e),e}finally{null!==t&&this.reportCacheChanges(t)}}reportSeparator(){0===this.indent?this.writeLineWithForgettableReset(""):this.reportInfo(null,"")}reportInfo(e,t){if(!this.includeInfos)return;this.commit();const r=`${s.pretty(this.configuration,"➤","blueBright")} ${this.formatNameWithHyperlink(e)}: ${this.formatIndent()}${t}`;if(this.json)this.reportJson({type:"info",name:e,displayName:this.formatName(e),indent:this.formatIndent(),data:t});else if(this.forgettableNames.has(e))if(this.forgettableLines.push(r),this.forgettableLines.length>this.forgettableBufferSize){for(;this.forgettableLines.length>this.forgettableBufferSize;)this.forgettableLines.shift();this.writeLines(this.forgettableLines,{truncate:!0})}else this.writeLine(r,{truncate:!0});else this.writeLineWithForgettableReset(r)}reportWarning(e,t){this.warningCount+=1,this.includeWarnings&&(this.commit(),this.json?this.reportJson({type:"warning",name:e,displayName:this.formatName(e),indent:this.formatIndent(),data:t}):this.writeLineWithForgettableReset(`${s.pretty(this.configuration,"➤","yellowBright")} ${this.formatNameWithHyperlink(e)}: ${this.formatIndent()}${t}`))}reportError(e,t){this.errorCount+=1,this.commit(),this.json?this.reportJson({type:"error",name:e,displayName:this.formatName(e),indent:this.formatIndent(),data:t}):this.writeLineWithForgettableReset(`${s.pretty(this.configuration,"➤","redBright")} ${this.formatNameWithHyperlink(e)}: ${this.formatIndent()}${t}`,{truncate:!1})}reportProgress(e){let t=!1;const r=Promise.resolve().then(async()=>{const r={progress:0,title:void 0};this.progress.set(e,{definition:r,lastScaledSize:-1}),this.refreshProgress(-1);for await(const{progress:A,title:n}of e)t||r.progress===A&&r.title===n||(r.progress=A,r.title=n,this.refreshProgress());A()}),A=()=>{t||(t=!0,this.progress.delete(e),this.refreshProgress(1))};return{...r,stop:A}}reportJson(e){this.json&&this.writeLineWithForgettableReset(""+JSON.stringify(e))}async finalize(){if(!this.includeFooter)return;let e="";e=this.errorCount>0?"Failed with errors":this.warningCount>0?"Done with warnings":"Done";const t=s.pretty(this.configuration,Date.now()-this.startTime,s.Type.DURATION),r=this.configuration.get("enableTimers")?`${e} in ${t}`:e;this.errorCount>0?this.reportError(o.b.UNNAMED,r):this.warningCount>0?this.reportWarning(o.b.UNNAMED,r):this.reportInfo(o.b.UNNAMED,r)}writeLine(e,{truncate:t}={}){this.clearProgress({clear:!0}),this.stdout.write(this.truncate(e,{truncate:t})+"\n"),this.writeProgress()}writeLineWithForgettableReset(e,{truncate:t}={}){this.forgettableLines=[],this.writeLine(e,{truncate:t})}writeLines(e,{truncate:t}={}){this.clearProgress({delta:e.length});for(const r of e)this.stdout.write(this.truncate(r,{truncate:t})+"\n");this.writeProgress()}reportCacheChanges({cacheHitCount:e,cacheMissCount:t}){const r=this.cacheHitCount-e,A=this.cacheMissCount-t;if(0===r&&0===A)return;let n="";this.cacheHitCount>1?n+=this.cacheHitCount+" packages were already cached":1===this.cacheHitCount?n+=" - one package was already cached":n+="No packages were cached",this.cacheHitCount>0?this.cacheMissCount>1?n+=`, ${this.cacheMissCount} had to be fetched`:1===this.cacheMissCount&&(n+=", one had to be fetched"):this.cacheMissCount>1?n+=` - ${this.cacheMissCount} packages had to be fetched`:1===this.cacheMissCount&&(n+=" - one package had to be fetched"),this.reportInfo(o.b.FETCH_NOT_CACHED,n)}commit(){const e=this.uncommitted;this.uncommitted=new Set;for(const t of e)t.committed=!0,t.action()}clearProgress({delta:e=0,clear:t=!1}){this.configuration.get("enableProgressBars")&&!this.json&&this.progress.size+e>0&&(this.stdout.write(`[${this.progress.size+e}A`),(e>0||t)&&this.stdout.write(""))}writeProgress(){if(!this.configuration.get("enableProgressBars")||this.json)return;if(null!==this.progressTimeout&&clearTimeout(this.progressTimeout),this.progressTimeout=null,0===this.progress.size)return;const e=Date.now();e-this.progressTime>80&&(this.progressFrame=(this.progressFrame+1)%a.length,this.progressTime=e);const t=a[this.progressFrame];for(const e of this.progress.values()){const r=this.progressStyle.chars[0].repeat(e.lastScaledSize),A=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-e.lastScaledSize);this.stdout.write(`${s.pretty(this.configuration,"➤","blueBright")} ${this.formatName(null)}: ${t} ${r}${A}\n`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress()},80)}refreshProgress(e=0){let t=!1;if(0===this.progress.size)t=!0;else for(const e of this.progress.values()){const r=Math.trunc(this.progressMaxScaledSize*e.definition.progress),A=e.lastScaledSize;if(e.lastScaledSize=r,r!==A){t=!0;break}}t&&(this.clearProgress({delta:e}),this.writeProgress())}truncate(e,{truncate:t}={}){return this.configuration.get("enableProgressBars")||(t=!1),void 0===t&&(t=this.configuration.get("preferTruncatedLines")),t&&(e=n()(e,0,process.stdout.columns-1)),e}formatName(e){return d(e,{configuration:this.configuration,json:this.json})}formatNameWithHyperlink(e){return C(e,{configuration:this.configuration,json:this.json})}formatIndent(){return"│ ".repeat(this.indent)}}},81832:(e,t,r)=>{"use strict";r.d(t,{E:()=>a});var A,n=r(43896),o=r(46009),i=r(79669),s=r(73632);!function(e){e.VERSION="version",e.COMMAND_NAME="commandName",e.PLUGIN_NAME="pluginName",e.INSTALL_COUNT="installCount",e.PROJECT_COUNT="projectCount",e.WORKSPACE_COUNT="workspaceCount",e.DEPENDENCY_COUNT="dependencyCount",e.EXTENSION="packageExtension"}(A||(A={}));class a{constructor(e,t){this.values=new Map,this.hits=new Map,this.enumerators=new Map,this.configuration=e;const r=this.getRegistryPath();this.isNew=!n.xfs.existsSync(r),this.sendReport(t),this.startBuffer()}reportVersion(e){this.reportValue(A.VERSION,e)}reportCommandName(e){this.reportValue(A.COMMAND_NAME,e||"")}reportPluginName(e){this.reportValue(A.PLUGIN_NAME,e)}reportProject(e){this.reportEnumerator(A.PROJECT_COUNT,e)}reportInstall(e){this.reportHit(A.INSTALL_COUNT,e)}reportPackageExtension(e){this.reportValue(A.EXTENSION,e)}reportWorkspaceCount(e){this.reportValue(A.WORKSPACE_COUNT,String(e))}reportDependencyCount(e){this.reportValue(A.DEPENDENCY_COUNT,String(e))}reportValue(e,t){s.getSetWithDefault(this.values,e).add(t)}reportEnumerator(e,t){s.getSetWithDefault(this.enumerators,e).add(t)}reportHit(e,t="*"){const r=s.getMapWithDefault(this.hits,e),A=s.getFactoryWithDefault(r,t,()=>0);r.set(t,A+1)}getRegistryPath(){const e=this.configuration.get("globalFolder");return o.y1.join(e,"telemetry.json")}sendReport(e){var t,r,A;const s=this.getRegistryPath();let a;try{a=n.xfs.readJsonSync(s)}catch(e){a={}}const c=Date.now(),g=24*this.configuration.get("telemetryInterval")*60*60*1e3,l=(null!==(t=a.lastUpdate)&&void 0!==t?t:c+g+Math.floor(g*Math.random()))+g;if(!(l>c&&null!=a.lastUpdate)){try{n.xfs.mkdirSync(o.y1.dirname(s),{recursive:!0}),n.xfs.writeJsonSync(s,{lastUpdate:c})}catch(e){return}if(!(l>c)&&a.blocks)for(const[t,n]of Object.entries(null!==(r=a.blocks)&&void 0!==r?r:{})){if(0===Object.keys(n).length)continue;const r=n;r.userId=t;for(const e of Object.keys(null!==(A=r.enumerators)&&void 0!==A?A:{}))r.enumerators[e]=r.enumerators[e].length;const o=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`;i.post(o,r,{configuration:this.configuration}).catch(()=>{})}}}applyChanges(){var e,t,r,A,i,s,a,c,g;const l=this.getRegistryPath();let u;try{u=n.xfs.readJsonSync(l)}catch(e){u={}}const h=null!==(e=this.configuration.get("telemetryUserId"))&&void 0!==e?e:"*",p=u.blocks=null!==(t=u.blocks)&&void 0!==t?t:{},d=p[h]=null!==(r=p[h])&&void 0!==r?r:{};for(const e of this.hits.keys()){const t=d.hits=null!==(A=d.hits)&&void 0!==A?A:{},r=t[e]=null!==(i=t[e])&&void 0!==i?i:{};for(const[t,A]of this.hits.get(e))r[t]=(null!==(s=r[t])&&void 0!==s?s:0)+A}for(const e of["values","enumerators"])for(const t of this[e].keys()){const r=d[e]=null!==(a=d[e])&&void 0!==a?a:{};r[t]=[...new Set([...null!==(c=r[t])&&void 0!==c?c:[],...null!==(g=this[e].get(t))&&void 0!==g?g:[]])]}n.xfs.mkdirSync(o.y1.dirname(l),{recursive:!0}),n.xfs.writeJsonSync(l,u)}startBuffer(){process.on("exit",()=>{try{this.applyChanges()}catch(e){}})}}},33720:(e,t,r)=>{"use strict";r.d(t,{$:()=>n});var A=r(35691);class n extends A.yG{reportCacheHit(e){}reportCacheMiss(e){}startTimerSync(e,t,r){return("function"==typeof t?t:r)()}async startTimerPromise(e,t,r){const A="function"==typeof t?t:r;return await A()}async startCacheReport(e){return await e()}reportSeparator(){}reportInfo(e,t){}reportWarning(e,t){}reportError(e,t){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(const{}of e);}),stop:()=>{}}}reportJson(e){}async finalize(){}}},60895:(e,t,r)=>{"use strict";r.d(t,{N:()=>s});var A=r(17674),n=r(14626),o=r(46009),i=r(54143);class s{supports(e){return!!e.reference.startsWith("virtual:")}getLocalPath(e,t){const r=e.reference.indexOf("#");if(-1===r)throw new Error("Invalid virtual package reference");const A=e.reference.slice(r+1),n=i.makeLocator(e,A);return t.fetcher.getLocalPath(n,t)}async fetch(e,t){const r=e.reference.indexOf("#");if(-1===r)throw new Error("Invalid virtual package reference");const A=e.reference.slice(r+1),n=i.makeLocator(e,A),o=await t.fetcher.fetch(n,t);return await this.ensureVirtualLink(e,o,t)}getLocatorFilename(e){return i.slugifyLocator(e)}async ensureVirtualLink(e,t,r){const i=t.packageFs.getRealPath(),s=r.project.configuration.get("virtualFolder"),a=this.getLocatorFilename(e),c=A.p.makeVirtualPath(s,a,i),g=new n.K(c,{baseFs:t.packageFs,pathUtils:o.y1});return{...t,packageFs:g}}}},17722:(e,t,r)=>{"use strict";r.d(t,{j:()=>h});var A=r(43896),n=r(46009),o=r(58592),i=r.n(o),s=r(53887),a=r.n(s),c=r(46611),g=r(94538),l=r(20624),u=r(54143);class h{constructor(e,{project:t}){this.workspacesCwds=new Set,this.dependencies=new Map,this.project=t,this.cwd=e}async setup(){this.manifest=A.xfs.existsSync(n.y1.join(this.cwd,c.G.fileName))?await c.G.find(this.cwd):new c.G,this.relativeCwd=n.y1.relative(this.project.cwd,this.cwd)||n.LZ.dot;const e=this.manifest.name?this.manifest.name:u.makeIdent(null,`${this.computeCandidateName()}-${l.makeHash(this.relativeCwd).substr(0,6)}`),t=this.manifest.version?this.manifest.version:"0.0.0";this.locator=u.makeLocator(e,t),this.anchoredDescriptor=u.makeDescriptor(this.locator,`${g.d.protocol}${this.relativeCwd}`),this.anchoredLocator=u.makeLocator(this.locator,`${g.d.protocol}${this.relativeCwd}`);const r=this.manifest.workspaceDefinitions.map(({pattern:e})=>e),o=await i()(r,{absolute:!0,cwd:n.cS.fromPortablePath(this.cwd),expandDirectories:!1,onlyDirectories:!0,onlyFiles:!1,ignore:["**/node_modules","**/.git","**/.yarn"]});o.sort();for(const e of o){const t=n.y1.resolve(this.cwd,n.cS.toPortablePath(e));A.xfs.existsSync(n.y1.join(t,"package.json"))&&this.workspacesCwds.add(t)}}accepts(e){const t=e.indexOf(":"),r=-1!==t?e.slice(0,t+1):null,A=-1!==t?e.slice(t+1):e;return r===g.d.protocol&&n.y1.normalize(A)===this.relativeCwd||(r===g.d.protocol&&"*"===A||!!a().validRange(A)&&(r===g.d.protocol?a().satisfies(null!==this.manifest.version?this.manifest.version:"0.0.0",A):!!this.project.configuration.get("enableTransparentWorkspaces")&&(null!==this.manifest.version&&a().satisfies(this.manifest.version,A))))}computeCandidateName(){return this.cwd===this.project.cwd?"root-workspace":""+n.y1.basename(this.cwd)||"unnamed-workspace"}async persistManifest(){const e={};this.manifest.exportTo(e);const t=n.y1.join(this.cwd,c.G.fileName),r=JSON.stringify(e,null,this.manifest.indent)+"\n";await A.xfs.changeFilePromise(t,r,{automaticNewlines:!0})}}},94538:(e,t,r)=>{"use strict";r.d(t,{d:()=>n});var A=r(32485);class n{supportsDescriptor(e,t){if(e.range.startsWith(n.protocol))return!0;return null!==t.project.tryWorkspaceByDescriptor(e)}supportsLocator(e,t){return!!e.reference.startsWith(n.protocol)}shouldPersistResolution(e,t){return!1}bindDescriptor(e,t,r){return e}getResolutionDependencies(e,t){return[]}async getCandidates(e,t,r){return[r.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,t,r){return null}async resolve(e,t){const r=t.project.getWorkspaceByCwd(e.reference.slice(n.protocol.length));return{...e,version:r.manifest.version||"0.0.0",languageName:"unknown",linkType:A.Un.SOFT,dependencies:new Map([...r.manifest.dependencies,...r.manifest.devDependencies]),peerDependencies:new Map([...r.manifest.peerDependencies]),dependenciesMeta:r.manifest.dependenciesMeta,peerDependenciesMeta:r.manifest.peerDependenciesMeta,bin:r.manifest.bin}}}n.protocol="workspace:"},59355:(e,t,r)=>{"use strict";r.d(t,{o:()=>A});const A="2.4.1"},6220:(e,t,r)=>{"use strict";r.r(t),r.d(t,{EndStrategy:()=>A,pipevp:()=>g,execvp:()=>l});var A,n=r(46009),o=r(67566),i=r.n(o);function s(e){return null!==e&&"number"==typeof e.fd}function a(){}!function(e){e[e.Never=0]="Never",e[e.ErrorCode=1]="ErrorCode",e[e.Always=2]="Always"}(A||(A={}));let c=0;async function g(e,t,{cwd:r,env:o=process.env,strict:g=!1,stdin:l=null,stdout:u,stderr:p,end:d=A.Always}){const C=["pipe","pipe","pipe"];null===l?C[0]="ignore":s(l)&&(C[0]=l),s(u)&&(C[1]=u),s(p)&&(C[2]=p),0==c++&&process.on("SIGINT",a);const f=i()(e,t,{cwd:n.cS.fromPortablePath(r),env:{...o,PWD:n.cS.fromPortablePath(r)},stdio:C});s(l)||null===l||l.pipe(f.stdin),s(u)||f.stdout.pipe(u,{end:!1}),s(p)||f.stderr.pipe(p,{end:!1});const I=()=>{for(const e of new Set([u,p]))s(e)||e.end()};return new Promise((t,r)=>{f.on("error",e=>{0==--c&&process.off("SIGINT",a),d!==A.Always&&d!==A.ErrorCode||I(),r(e)}),f.on("close",(n,o)=>{0==--c&&process.off("SIGINT",a),(d===A.Always||d===A.ErrorCode&&n>0)&&I(),0!==n&&g?r(null!==n?new Error(`Child "${e}" exited with exit code ${n}`):new Error(`Child "${e}" exited with signal ${o}`)):t({code:h(n,o)})})})}async function l(e,t,{cwd:r,env:A=process.env,encoding:o="utf8",strict:s=!1}){const a=["ignore","pipe","pipe"],c=[],g=[],l=n.cS.fromPortablePath(r);void 0!==A.PWD&&(A={...A,PWD:l});const u=i()(e,t,{cwd:l,env:A,stdio:a});return u.stdout.on("data",e=>{c.push(e)}),u.stderr.on("data",e=>{g.push(e)}),await new Promise((t,r)=>{u.on("error",r),u.on("close",(A,n)=>{const i="buffer"===o?Buffer.concat(c):Buffer.concat(c).toString(o),a="buffer"===o?Buffer.concat(g):Buffer.concat(g).toString(o);0!==A&&s?r(Object.assign(new Error(`Child "${e}" exited with exit code ${A}\n\n${a}`),{code:h(A,n),stdout:i,stderr:a})):t({code:h(A,n),stdout:i,stderr:a})})})}const u=new Map([["SIGINT",2],["SIGQUIT",3],["SIGKILL",9],["SIGTERM",15]]);function h(e,t){const r=u.get(t);return void 0!==r?128+r:null!=e?e:1}},81111:(e,t,r)=>{"use strict";r.r(t),r.d(t,{getDefaultGlobalFolder:()=>o,getHomeFolder:()=>i,isFolderInside:()=>s});var A=r(46009),n=r(12087);function o(){if("win32"===process.platform){const e=A.cS.toPortablePath(process.env.LOCALAPPDATA||A.cS.join((0,n.homedir)(),"AppData","Local"));return A.y1.resolve(e,"Yarn/Berry")}if(process.env.XDG_DATA_HOME){const e=A.cS.toPortablePath(process.env.XDG_DATA_HOME);return A.y1.resolve(e,"yarn/berry")}return A.y1.resolve(i(),".yarn/berry")}function i(){return A.cS.toPortablePath((0,n.homedir)()||"/usr/local/share")}function s(e,t){const r=A.y1.relative(t,e);return r&&!r.startsWith("..")&&!A.y1.isAbsolute(r)}},71643:(e,t,r)=>{"use strict";r.r(t),r.d(t,{Type:()=>A,Style:()=>n,supportsColor:()=>h,supportsHyperlinks:()=>p,tuple:()=>I,applyStyle:()=>E,applyColor:()=>B,pretty:()=>y,prettyList:()=>m,json:()=>w,mark:()=>Q,LogLevel:()=>D,addLogFilterSupport:()=>b});var A,n,o=r(46009),i=r(95882),s=r.n(i),a=r(92659),c=r(73632),g=r(54143),l=r(32485);!function(e){e.NO_HINT="NO_HINT",e.NULL="NULL",e.SCOPE="SCOPE",e.NAME="NAME",e.RANGE="RANGE",e.REFERENCE="REFERENCE",e.NUMBER="NUMBER",e.PATH="PATH",e.URL="URL",e.ADDED="ADDED",e.REMOVED="REMOVED",e.CODE="CODE",e.DURATION="DURATION",e.SIZE="SIZE",e.IDENT="IDENT",e.DESCRIPTOR="DESCRIPTOR",e.LOCATOR="LOCATOR",e.RESOLUTION="RESOLUTION",e.DEPENDENT="DEPENDENT",e.PACKAGE_EXTENSION="PACKAGE_EXTENSION"}(A||(A={})),function(e){e[e.BOLD=2]="BOLD"}(n||(n={}));const u=process.env.GITHUB_ACTIONS?{level:2}:s().supportsColor?{level:s().supportsColor.level}:{level:0},h=0!==u.level,p=h&&!process.env.GITHUB_ACTIONS,d=new(s().Instance)(u),C=new Map([[A.NO_HINT,null],[A.NULL,["#a853b5",129]],[A.SCOPE,["#d75f00",166]],[A.NAME,["#d7875f",173]],[A.RANGE,["#00afaf",37]],[A.REFERENCE,["#87afff",111]],[A.NUMBER,["#ffd700",220]],[A.PATH,["#d75fd7",170]],[A.URL,["#d75fd7",170]],[A.ADDED,["#5faf00",70]],[A.REMOVED,["#d70000",160]],[A.CODE,["#87afff",111]],[A.SIZE,["#ffd700",220]]]),f={[A.NUMBER]:{pretty:(e,t)=>""+t,json:e=>e},[A.IDENT]:{pretty:(e,t)=>g.prettyIdent(e,t),json:e=>g.stringifyIdent(e)},[A.LOCATOR]:{pretty:(e,t)=>g.prettyLocator(e,t),json:e=>g.stringifyLocator(e)},[A.DESCRIPTOR]:{pretty:(e,t)=>g.prettyDescriptor(e,t),json:e=>g.stringifyDescriptor(e)},[A.RESOLUTION]:{pretty:(e,{descriptor:t,locator:r})=>g.prettyResolution(e,t,r),json:({descriptor:e,locator:t})=>({descriptor:g.stringifyDescriptor(e),locator:null!==t?g.stringifyLocator(t):null})},[A.DEPENDENT]:{pretty:(e,{locator:t,descriptor:r})=>g.prettyDependent(e,t,r),json:({locator:e,descriptor:t})=>({locator:g.stringifyLocator(e),descriptor:g.stringifyDescriptor(t)})},[A.PACKAGE_EXTENSION]:{pretty:(e,t)=>{switch(t.type){case l.HN.Dependency:return`${g.prettyIdent(e,t.parentDescriptor)} ➤ ${B(e,"dependencies",A.CODE)} ➤ ${g.prettyIdent(e,t.descriptor)}`;case l.HN.PeerDependency:return`${g.prettyIdent(e,t.parentDescriptor)} ➤ ${B(e,"peerDependencies",A.CODE)} ➤ ${g.prettyIdent(e,t.descriptor)}`;case l.HN.PeerDependencyMeta:return`${g.prettyIdent(e,t.parentDescriptor)} ➤ ${B(e,"peerDependenciesMeta",A.CODE)} ➤ ${g.prettyIdent(e,g.parseIdent(t.selector))} ➤ ${B(e,t.key,A.CODE)}`;default:throw new Error("Assertion failed: Unsupported package extension type: "+t.type)}},json:e=>{switch(e.type){case l.HN.Dependency:return`${g.stringifyIdent(e.parentDescriptor)} > ${g.stringifyIdent(e.descriptor)}`;case l.HN.PeerDependency:return`${g.stringifyIdent(e.parentDescriptor)} >> ${g.stringifyIdent(e.descriptor)}`;case l.HN.PeerDependencyMeta:return`${g.stringifyIdent(e.parentDescriptor)} >> ${e.selector} / ${e.key}`;default:throw new Error("Assertion failed: Unsupported package extension type: "+e.type)}}},[A.DURATION]:{pretty:(e,t)=>{if(t>6e4){const e=Math.floor(t/1e3/60),r=Math.ceil((t-60*e*1e3)/1e3);return 0===r?e+"m":`${e}m ${r}s`}{const e=Math.floor(t/1e3),r=t-1e3*e;return 0===r?e+"s":`${e}s ${r}ms`}},json:e=>e},[A.SIZE]:{pretty:(e,t)=>{const r=["KB","MB","GB","TB"];let n=r.length;for(;n>1&&t<1024**n;)n-=1;const o=1024**n;return B(e,`${Math.floor(100*t/o)/100} ${r[n-1]}`,A.NUMBER)},json:e=>e},[A.PATH]:{pretty:(e,t)=>B(e,o.cS.fromPortablePath(t),A.PATH),json:e=>o.cS.fromPortablePath(e)}};function I(e,t){return[t,e]}function E(e,t,r){return e.get("enableColors")?(r&n.BOLD&&(t=s().bold(t)),t):t}function B(e,t,r){if(!e.get("enableColors"))return t;const A=C.get(r);if(null===A)return t;const n=void 0===A?r:u.level>=3?A[0]:A[1],o="number"==typeof n?d.ansi256(n):n.startsWith("#")?d.hex(n):d[n];if("function"!=typeof o)throw new Error("Invalid format type "+n);return o(t)}function y(e,t,r){if(null===t)return B(e,"null",A.NULL);if(Object.prototype.hasOwnProperty.call(f,r)){return f[r].pretty(e,t)}if("string"!=typeof t)throw new Error("Assertion failed: Expected the value to be a string, got "+typeof t);return B(e,t,r)}function m(e,t,r,{separator:A=", "}={}){return[...t].map(t=>y(e,t,r)).join(A)}function w(e,t){if(null===e)return null;if(Object.prototype.hasOwnProperty.call(f,t))return c.overrideType(t),f[t].json(e);if("string"!=typeof e)throw new Error("Assertion failed: Expected the value to be a string, got "+typeof e);return e}function Q(e){return{Check:B(e,"✓","green"),Cross:B(e,"✘","red"),Question:B(e,"?","cyan")}}var D;function b(e,{configuration:t}){const r=t.get("logFilters"),A=new Map,n=new Map;for(const e of r){const t=e.get("level");if(void 0===t)continue;const r=e.get("code");void 0!==r&&A.set(r,t);const o=e.get("text");void 0!==o&&n.set(o,t)}const o=e.reportInfo,i=e.reportWarning,c=e.reportError,g=function(e,t,r,g){switch(((e,t,r)=>{if(null===e||e===a.b.UNNAMED)return r;if(n.size>0){const e=n.get(s().reset(t));if(void 0!==e)return null!=e?e:r}if(A.size>0){const t=A.get((0,a.i)(e));if(void 0!==t)return null!=t?t:r}return r})(t,r,g)){case D.Info:o.call(e,t,r);break;case D.Warning:i.call(e,null!=t?t:a.b.UNNAMED,r);break;case D.Error:c.call(e,null!=t?t:a.b.UNNAMED,r)}};e.reportInfo=function(...e){return g(this,...e,D.Info)},e.reportWarning=function(...e){return g(this,...e,D.Warning)},e.reportError=function(...e){return g(this,...e,D.Error)}}!function(e){e.Error="error",e.Warning="warning",e.Info="info",e.Discard="discard"}(D||(D={}))},20624:(e,t,r)=>{"use strict";r.r(t),r.d(t,{makeHash:()=>a,checksumFile:()=>c,checksumPattern:()=>g});var A=r(43896),n=r(46009),o=r(76417),i=r(58592),s=r.n(i);function a(...e){const t=(0,o.createHash)("sha512");for(const r of e)t.update(r||"");return t.digest("hex")}function c(e){return new Promise((t,r)=>{const n=(0,o.createHash)("sha512"),i=A.xfs.createReadStream(e);i.on("data",e=>{n.update(e)}),i.on("error",e=>{r(e)}),i.on("end",()=>{t(n.digest("hex"))})})}async function g(e,{cwd:t}){const r=(await s()(e,{cwd:n.cS.fromPortablePath(t),expandDirectories:!1,onlyDirectories:!0,unique:!0})).map(e=>e+"/**/*"),i=await s()([e,...r],{cwd:n.cS.fromPortablePath(t),expandDirectories:!1,onlyFiles:!1,unique:!0});i.sort();const a=await Promise.all(i.map(async e=>{const t=[Buffer.from(e)],r=n.cS.toPortablePath(e),o=await A.xfs.lstatPromise(r);return o.isSymbolicLink()?t.push(Buffer.from(await A.xfs.readlinkPromise(r))):o.isFile()&&t.push(await A.xfs.readFilePromise(r)),t.join("\0")})),c=(0,o.createHash)("sha512");for(const e of a)c.update(e);return c.digest("hex")}},79669:(e,t,r)=>{"use strict";r.r(t),r.d(t,{getNetworkSettings:()=>d,Method:()=>C,request:()=>f,get:()=>I,put:()=>E,post:()=>B,del:()=>y});var A=r(43896),n=r(57211),o=r(98605),i=r(2401),s=r.n(i),a=r(98161),c=r(78835);const g=new Map,l=new Map,u=new o.Agent({keepAlive:!0}),h=new n.Agent({keepAlive:!0});function p(e){const t=new c.URL(e),r={host:t.hostname,headers:{}};return t.port&&(r.port=Number(t.port)),{proxy:r}}function d(e,t){const r=[...t.configuration.get("networkSettings")].sort(([e],[t])=>t.length-e.length),A={enableNetwork:void 0,caFilePath:void 0,httpProxy:void 0,httpsProxy:void 0},n=Object.keys(A),o=new c.URL(e);for(const[e,t]of r)if(s().isMatch(o.hostname,e))for(const e of n){const r=t.get(e);null!==r&&void 0===A[e]&&(A[e]=r)}for(const e of n)void 0===A[e]&&(A[e]=t.configuration.get(e));return A}var C;async function f(e,t,{configuration:n,headers:o,json:i,jsonRequest:g=i,jsonResponse:f=i,method:I=C.GET}){const E=d(e,{configuration:n});if(!1===E.enableNetwork)throw new Error(`Request to '${e}' has been blocked because of your configuration settings`);const B=new c.URL(e);if("http:"===B.protocol&&!s().isMatch(B.hostname,n.get("unsafeHttpWhitelist")))throw new Error(`Unsafe http requests must be explicitly whitelisted in your configuration (${B.hostname})`);const y={agent:{http:E.httpProxy?a.httpOverHttp(p(E.httpProxy)):u,https:E.httpsProxy?a.httpsOverHttp(p(E.httpsProxy)):h},headers:o,method:I};y.responseType=f?"json":"buffer",null!==t&&(Buffer.isBuffer(t)||!g&&"string"==typeof t?y.body=t:y.json=t);const m=n.get("httpTimeout"),w=n.get("httpRetry"),Q=n.get("enableStrictSsl"),D=E.caFilePath,{default:b}=await Promise.resolve().then(r.t.bind(r,48722,7)),v=D?await async function(e){let t=l.get(e);return t||(t=A.xfs.readFilePromise(e).then(t=>(l.set(e,t),t)),l.set(e,t)),t}(D):void 0,S=b.extend({timeout:{socket:m},retry:w,https:{rejectUnauthorized:Q,certificateAuthority:v},...y});return n.getLimit("networkConcurrency")(()=>S(e))}async function I(e,{configuration:t,json:r,jsonResponse:A=r,...n}){let o=g.get(e);return o||(o=f(e,null,{configuration:t,...n}).then(t=>(g.set(e,t.body),t.body)),g.set(e,o)),!1===Buffer.isBuffer(o)&&(o=await o),A?JSON.parse(o.toString()):o}async function E(e,t,r){return(await f(e,t,{...r,method:C.PUT})).body}async function B(e,t,r){return(await f(e,t,{...r,method:C.POST})).body}async function y(e,t){return(await f(e,null,{...t,method:C.DELETE})).body}!function(e){e.GET="GET",e.PUT="PUT",e.POST="POST",e.DELETE="DELETE"}(C||(C={}))},53836:(e,t,r)=>{"use strict";r.r(t),r.d(t,{Cache:()=>p.C,DEFAULT_RC_FILENAME:()=>d.tr,DEFAULT_LOCK_FILENAME:()=>d.nh,Configuration:()=>d.VK,FormatType:()=>d.a5,ProjectLookup:()=>d.EW,SettingsType:()=>d.a2,BuildType:()=>C.k,LightReport:()=>f.h,Manifest:()=>I.G,MessageName:()=>E.b,Project:()=>B.I,TAG_REGEXP:()=>y.c,ReportError:()=>m.lk,Report:()=>m.yG,StreamReport:()=>w.Pk,TelemetryManager:()=>Q.E,ThrowReport:()=>D.$,VirtualFetcher:()=>b.N,WorkspaceResolver:()=>v.d,Workspace:()=>S.j,YarnVersion:()=>k.o,LinkType:()=>N.Un,PackageExtensionType:()=>N.HN,PackageExtensionStatus:()=>N._u,hashUtils:()=>i,httpUtils:()=>s,execUtils:()=>A,folderUtils:()=>n,formatUtils:()=>o,miscUtils:()=>a,scriptUtils:()=>c,semverUtils:()=>g,structUtils:()=>l,tgzUtils:()=>u,treeUtils:()=>h});var A=r(6220),n=r(81111),o=r(71643),i=r(20624),s=r(79669),a=r(73632),c=r(63088),g=r(36545),l=r(54143),u=r(72785),h=r(85875),p=r(28148),d=r(39922),C=r(92409),f=r(62152),I=r(46611),E=r(92659),B=r(85824),y=r(52779),m=r(35691),w=r(15815),Q=r(81832),D=r(33720),b=r(60895),v=r(94538),S=r(17722),k=r(59355),N=r(32485)},73632:(e,t,r)=>{"use strict";r.r(t),r.d(t,{escapeRegExp:()=>a,overrideType:()=>c,assertNever:()=>g,validateEnum:()=>l,mapAndFilter:()=>u,mapAndFind:()=>p,isIndexableObject:()=>C,convertMapsToIndexableObjects:()=>f,getFactoryWithDefault:()=>I,getArrayWithDefault:()=>E,getSetWithDefault:()=>B,getMapWithDefault:()=>y,releaseAfterUseAsync:()=>m,prettifyAsyncErrors:()=>w,prettifySyncErrors:()=>Q,bufferStream:()=>D,BufferStream:()=>b,DefaultStream:()=>v,dynamicRequire:()=>S,dynamicRequireNoCache:()=>k,sortMap:()=>N,buildIgnorePattern:()=>F,replaceEnvVariables:()=>K,parseBoolean:()=>M,parseOptionalBoolean:()=>R,tryParseOptionalBoolean:()=>x});var A=r(46009),n=r(40822),o=r(2401),i=r.n(o),s=r(92413);function a(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function c(e){}function g(e){throw new Error(`Assertion failed: Unexpected object '${e}'`)}function l(e,t){if(!Object.values(e).includes(t))throw new Error("Assertion failed: Invalid value for enumeration");return t}function u(e,t){const r=[];for(const A of e){const e=t(A);e!==h&&r.push(e)}return r}e=r.hmd(e);const h=Symbol();function p(e,t){for(const r of e){const e=t(r);if(e!==d)return e}}u.skip=h;const d=Symbol();function C(e){return"object"==typeof e&&null!==e}function f(e){if(e instanceof Map&&(e=Object.fromEntries(e)),C(e))for(const t of Object.keys(e)){const r=e[t];C(r)&&(e[t]=f(r))}return e}function I(e,t,r){let A=e.get(t);return void 0===A&&e.set(t,A=r()),A}function E(e,t){let r=e.get(t);return void 0===r&&e.set(t,r=[]),r}function B(e,t){let r=e.get(t);return void 0===r&&e.set(t,r=new Set),r}function y(e,t){let r=e.get(t);return void 0===r&&e.set(t,r=new Map),r}async function m(e,t){if(null==t)return await e();try{return await e()}finally{await t()}}async function w(e,t){try{return await e()}catch(e){throw e.message=t(e.message),e}}function Q(e,t){try{return e()}catch(e){throw e.message=t(e.message),e}}async function D(e){return await new Promise((t,r)=>{const A=[];e.on("error",e=>{r(e)}),e.on("data",e=>{A.push(e)}),e.on("end",()=>{t(Buffer.concat(A))})})}p.skip=d;class b extends s.Transform{constructor(){super(...arguments),this.chunks=[]}_transform(e,t,r){if("buffer"!==t||!Buffer.isBuffer(e))throw new Error("Assertion failed: BufferStream only accept buffers");this.chunks.push(e),r(null,null)}_flush(e){e(null,Buffer.concat(this.chunks))}}class v extends s.Transform{constructor(e=Buffer.alloc(0)){super(),this.active=!0,this.ifEmpty=e}_transform(e,t,r){if("buffer"!==t||!Buffer.isBuffer(e))throw new Error("Assertion failed: DefaultStream only accept buffers");this.active=!1,r(null,e)}_flush(e){this.active&&this.ifEmpty.length>0&&e(null,this.ifEmpty)}}function S(e){return"undefined"!=typeof require?require(e):r(32178)(e)}function k(t){const n=A.cS.fromPortablePath(t),o=r.c[n];let i;delete r.c[n];try{i=S(n);const t=r.c[n],A=e.children.indexOf(t);-1!==A&&e.children.splice(A,1)}finally{r.c[n]=o}return i}function N(e,t){const r=Array.from(e);Array.isArray(t)||(t=[t]);const A=[];for(const e of t)A.push(r.map(t=>e(t)));const n=r.map((e,t)=>t);return n.sort((e,t)=>{for(const r of A){const A=r[e]r[t]?1:0;if(0!==A)return A}return 0}),n.map(e=>r[e])}function F(e){return 0===e.length?null:e.map(e=>`(${i().makeRe(e,{windows:!1}).source})`).join("|")}function K(e,{env:t}){return e.replace(/\${(?[\d\w_]+)(?:)?(?:-(?[^}]*))?}/g,(...e)=>{const{variableName:r,colon:A,fallback:o}=e[e.length-1],i=Object.prototype.hasOwnProperty.call(t,r),s=t[r];if(s)return s;if(i&&!A)return s;if(null!=o)return o;throw new n.UsageError(`Environment variable not found (${r})`)})}function M(e){switch(e){case"true":case"1":case 1:case!0:return!0;case"false":case"0":case 0:case!1:return!1;default:throw new Error(`Couldn't parse "${e}" as a boolean`)}}function R(e){return void 0===e?e:M(e)}function x(e){try{return R(e)}catch(e){return null}}},63088:(e,t,r)=>{"use strict";r.r(t),r.d(t,{makeScriptEnv:()=>b,prepareExternalProject:()=>S,hasPackageScript:()=>k,executePackageScript:()=>N,executePackageShellcode:()=>F,executeWorkspaceScript:()=>M,hasWorkspaceScript:()=>R,executeWorkspaceLifecycleScript:()=>x,maybeExecuteWorkspaceLifecycleScript:()=>L,getPackageAccessibleBinaries:()=>P,getWorkspaceAccessibleBinaries:()=>O,executePackageAccessibleBinary:()=>U,executeWorkspaceAccessibleBinary:()=>T});var A,n=r(46009),o=r(53660),i=r(75448),s=r(43896),a=r(65281),c=r(76756),g=r(50730),l=r(61814),u=r.n(l),h=r(61578),p=r.n(h),d=r(92413),C=r(46611),f=r(92659),I=r(35691),E=r(15815),B=r(59355),y=r(6220),m=r(71643),w=r(73632),Q=r(54143);async function D(e,t,r,A=[]){"win32"===process.platform&&await Promise.all([s.xfs.writeFilePromise(n.y1.format({dir:e,name:t,ext:".exe"}),(0,g.O9)()),s.xfs.writeFilePromise(n.y1.format({dir:e,name:t,ext:".exe.info"}),[r,...A].join("\n")),s.xfs.writeFilePromise(n.y1.format({dir:e,name:t,ext:".cmd"}),`@"${r}" ${A.map(e=>`"${e.replace('"','""')}"`).join(" ")} %*\n`)]),await s.xfs.writeFilePromise(n.y1.join(e,t),`#!/bin/sh\nexec "${r}" ${A.map(e=>`'${e.replace(/'/g,"'\"'\"'")}'`).join(" ")} "$@"\n`),await s.xfs.chmodPromise(n.y1.join(e,t),493)}async function b({project:e,binFolder:t,lifecycleScript:r}){const A={};for(const[e,t]of Object.entries(process.env))void 0!==t&&(A["path"!==e.toLowerCase()?e:"PATH"]=t);const o=n.cS.fromPortablePath(t);A.BERRY_BIN_FOLDER=n.cS.fromPortablePath(o),await D(t,"node",process.execPath),null!==B.o&&(await D(t,"run",process.execPath,[process.argv[1],"run"]),await D(t,"yarn",process.execPath,[process.argv[1]]),await D(t,"yarnpkg",process.execPath,[process.argv[1]]),await D(t,"node-gyp",process.execPath,[process.argv[1],"run","--top-level","node-gyp"])),e&&(A.INIT_CWD=n.cS.fromPortablePath(e.configuration.startingCwd)),A.PATH=A.PATH?`${o}${n.cS.delimiter}${A.PATH}`:""+o,A.npm_execpath=`${o}${n.cS.sep}yarn`,A.npm_node_execpath=`${o}${n.cS.sep}node`;const i=null!==B.o?"yarn/"+B.o:`yarn/${w.dynamicRequire("@yarnpkg/core").version}-core`;return A.npm_config_user_agent=`${i} npm/? node/${process.versions.node} ${process.platform} ${process.arch}`,r&&(A.npm_lifecycle_event=r),e&&await e.configuration.triggerHook(e=>e.setupScriptEnvironment,e,A,async(e,r,A)=>await D(t,(0,n.Zu)(e),r,A)),A}!function(e){e.Yarn1="Yarn Classic",e.Yarn2="Yarn",e.Npm="npm",e.Pnpm="pnpm"}(A||(A={}));const v=p()(2);async function S(e,t,{configuration:r,report:o,workspace:i=null}){await v(async()=>{await s.xfs.mktempPromise(async a=>{const c=n.y1.join(a,"pack.log"),{stdout:g,stderr:l}=r.getSubprocessStreams(c,{prefix:e,report:o}),u=await async function(e){let t=null;try{t=await s.xfs.readFilePromise(n.y1.join(e,n.QS.lockfile),"utf8")}catch(e){}return null!==t?t.match(/^__metadata:$/m)?A.Yarn2:A.Yarn1:s.xfs.existsSync(n.y1.join(e,"package-lock.json"))?A.Npm:s.xfs.existsSync(n.y1.join(e,"pnpm-lock.yaml"))?A.Pnpm:null}(e);let h;null!==u?(g.write(`Installing the project using ${u}\n\n`),h=u):(g.write("No package manager detected; defaulting to Yarn\n\n"),h=A.Yarn2),await s.xfs.mktempPromise(async r=>{const o=await b({binFolder:r}),u=new Map([[A.Yarn1,async()=>{const r=null!==i?["workspace",i]:[],A=await y.pipevp("yarn",["set","version","classic","--only-if-needed"],{cwd:e,env:o,stdin:null,stdout:g,stderr:l,end:y.EndStrategy.ErrorCode});if(0!==A.code)return A.code;await s.xfs.appendFilePromise(n.y1.join(e,".npmignore"),"/.yarn\n"),g.write("\n");const a=await y.pipevp("yarn",["install"],{cwd:e,env:o,stdin:null,stdout:g,stderr:l,end:y.EndStrategy.ErrorCode});if(0!==a.code)return a.code;g.write("\n");const c=await y.pipevp("yarn",[...r,"pack","--filename",n.cS.fromPortablePath(t)],{cwd:e,env:o,stdin:null,stdout:g,stderr:l});return 0!==c.code?c.code:0}],[A.Yarn2,async()=>{const r=null!==i?["workspace",i]:[];o.YARN_ENABLE_INLINE_BUILDS="1";const A=n.y1.join(e,n.QS.lockfile);await s.xfs.existsPromise(A)||await s.xfs.writeFilePromise(A,"");const a=await y.pipevp("yarn",[...r,"pack","--install-if-needed","--filename",n.cS.fromPortablePath(t)],{cwd:e,env:o,stdin:null,stdout:g,stderr:l});return 0!==a.code?a.code:0}],[A.Npm,async()=>{if(null!==i)throw new Error("Workspaces aren't supported by npm, which has been detected as the primary package manager for "+e);delete o.npm_config_user_agent;const r=await y.pipevp("npm",["install"],{cwd:e,env:o,stdin:null,stdout:g,stderr:l,end:y.EndStrategy.ErrorCode});if(0!==r.code)return r.code;const A=new d.PassThrough,a=w.bufferStream(A);A.pipe(g);const c=await y.pipevp("npm",["pack","--silent"],{cwd:e,env:o,stdin:null,stdout:A,stderr:l});if(0!==c.code)return c.code;const u=(await a).toString().trim(),h=n.y1.resolve(e,n.cS.toPortablePath(u));return await s.xfs.renamePromise(h,t),0}]]).get(h);if(void 0===u)throw new Error("Assertion failed: Unsupported workflow");const p=await u();if(0!==p&&void 0!==p)throw s.xfs.detachTemp(a),new I.lk(f.b.PACKAGE_PREPARATION_FAILED,`Packing the package failed (exit code ${p}, logs can be found here: ${c})`)})})})}async function k(e,t,{project:r}){const A=r.storedPackages.get(e.locatorHash);if(!A)throw new Error(`Package for ${Q.prettyLocator(r.configuration,e)} not found in the project`);return await o.A.openPromise(async e=>{const o=r.configuration,s=r.configuration.getLinkers(),a={project:r,report:new E.Pk({stdout:new d.PassThrough,configuration:o})},c=s.find(e=>e.supportsPackage(A,a));if(!c)throw new Error(`The package ${Q.prettyLocator(r.configuration,A)} isn't supported by any of the available linkers`);const g=await c.findPackageLocation(A,a),l=new i.M(g,{baseFs:e});return(await C.G.find(n.LZ.dot,{baseFs:l})).scripts.has(t)},{libzip:await(0,a.getLibzipPromise)()})}async function N(e,t,r,{cwd:A,project:n,stdin:o,stdout:i,stderr:a}){return await s.xfs.mktempPromise(async s=>{const{manifest:g,env:l,cwd:u}=await K(e,{project:n,binFolder:s,cwd:A,lifecycleScript:t}),h=g.scripts.get(t);if(void 0===h)return 1;const p=await n.configuration.reduceHook(e=>e.wrapScriptExecution,async()=>await(0,c.execute)(h,r,{cwd:u,env:l,stdin:o,stdout:i,stderr:a}),n,e,t,{script:h,args:r,cwd:u,env:l,stdin:o,stdout:i,stderr:a});return await p()})}async function F(e,t,r,{cwd:A,project:n,stdin:o,stdout:i,stderr:a}){return await s.xfs.mktempPromise(async s=>{const{env:g,cwd:l}=await K(e,{project:n,binFolder:s,cwd:A});return await(0,c.execute)(t,r,{cwd:l,env:g,stdin:o,stdout:i,stderr:a})})}async function K(e,{project:t,binFolder:r,cwd:A,lifecycleScript:s}){const c=t.storedPackages.get(e.locatorHash);if(!c)throw new Error(`Package for ${Q.prettyLocator(t.configuration,e)} not found in the project`);return await o.A.openPromise(async o=>{const a=t.configuration,g=t.configuration.getLinkers(),l={project:t,report:new E.Pk({stdout:new d.PassThrough,configuration:a})},u=g.find(e=>e.supportsPackage(c,l));if(!u)throw new Error(`The package ${Q.prettyLocator(t.configuration,c)} isn't supported by any of the available linkers`);const h=await b({project:t,binFolder:r,lifecycleScript:s});await Promise.all(Array.from(await P(e,{project:t}),([e,[,t]])=>D(r,(0,n.Zu)(e),process.execPath,[t])));const p=await u.findPackageLocation(c,l),f=new i.M(p,{baseFs:o}),I=await C.G.find(n.LZ.dot,{baseFs:f});return void 0===A&&(A=p),{manifest:I,binFolder:r,env:h,cwd:A}},{libzip:await(0,a.getLibzipPromise)()})}async function M(e,t,r,{cwd:A,stdin:n,stdout:o,stderr:i}){return await N(e.anchoredLocator,t,r,{cwd:A,project:e.project,stdin:n,stdout:o,stderr:i})}function R(e,t){return e.manifest.scripts.has(t)}async function x(e,t,{cwd:r,report:A}){const{configuration:o}=e.project;await s.xfs.mktempPromise(async i=>{const a=n.y1.join(i,t+".log"),c=`# This file contains the result of Yarn calling the "${t}" lifecycle script inside a workspace ("${e.cwd}")\n`,{stdout:g,stderr:l}=o.getSubprocessStreams(a,{report:A,prefix:Q.prettyLocator(o,e.anchoredLocator),header:c});A.reportInfo(f.b.LIFECYCLE_SCRIPT,`Calling the "${t}" lifecycle script`);const h=await M(e,t,[],{cwd:r,stdin:null,stdout:g,stderr:l});if(g.end(),l.end(),0!==h)throw s.xfs.detachTemp(i),new I.lk(f.b.LIFECYCLE_SCRIPT,`${u()(t)} script failed (exit code ${m.pretty(o,h,m.Type.NUMBER)}, logs can be found here: ${m.pretty(o,a,m.Type.PATH)}); run ${m.pretty(o,"yarn "+t,m.Type.CODE)} to investigate`)})}async function L(e,t,r){R(e,t)&&await x(e,t,r)}async function P(e,{project:t}){const r=t.configuration,A=new Map,o=t.storedPackages.get(e.locatorHash);if(!o)throw new Error(`Package for ${Q.prettyLocator(r,e)} not found in the project`);const i=new d.Writable,s=r.getLinkers(),a={project:t,report:new E.Pk({configuration:r,stdout:i})},c=new Set([e.locatorHash]);for(const e of o.dependencies.values()){const A=t.storedResolutions.get(e.descriptorHash);if(!A)throw new Error(`Assertion failed: The resolution (${Q.prettyDescriptor(r,e)}) should have been registered`);c.add(A)}for(const e of c){const r=t.storedPackages.get(e);if(!r)throw new Error(`Assertion failed: The package (${e}) should have been registered`);if(0===r.bin.size)continue;const o=s.find(e=>e.supportsPackage(r,a));if(!o)continue;let i=null;try{i=await o.findPackageLocation(r,a)}catch(e){if("LOCATOR_NOT_INSTALLED"===e.code)continue;throw e}for(const[e,t]of r.bin)A.set(e,[r,n.cS.fromPortablePath(n.y1.resolve(i,t))])}return A}async function O(e){return await P(e.anchoredLocator,{project:e.project})}async function U(e,t,r,{cwd:A,project:o,stdin:i,stdout:a,stderr:c,nodeArgs:g=[]}){const l=await P(e,{project:o}),u=l.get(t);if(!u)throw new Error(`Binary not found (${t}) for ${Q.prettyLocator(o.configuration,e)}`);return await s.xfs.mktempPromise(async e=>{const[,t]=u,h=await b({project:o,binFolder:e});let p;await Promise.all(Array.from(l,([e,[,t]])=>D(h.BERRY_BIN_FOLDER,(0,n.Zu)(e),process.execPath,[t])));try{p=await y.pipevp(process.execPath,[...g,t,...r],{cwd:A,env:h,stdin:i,stdout:a,stderr:c})}finally{await s.xfs.removePromise(h.BERRY_BIN_FOLDER)}return p.code})}async function T(e,t,r,{cwd:A,stdin:n,stdout:o,stderr:i}){return await U(e.anchoredLocator,t,r,{project:e.project,cwd:A,stdin:n,stdout:o,stderr:i})}},36545:(e,t,r)=>{"use strict";r.r(t),r.d(t,{satisfiesWithPrereleases:()=>o,validRange:()=>s});var A=r(53887),n=r.n(A);function o(e,t,r=!1){let A,o;try{A=new(n().Range)(t,{includePrerelease:!0,loose:r})}catch(e){return!1}if(!e)return!1;try{o=new(n().SemVer)(e,A),o.prerelease&&(o.prerelease=[])}catch(e){return!1}return A.set.some(e=>{for(const t of e)t.semver.prerelease&&(t.semver.prerelease=[]);return e.every(e=>e.test(o))})}const i=new Map;function s(e){if(-1!==e.indexOf(":"))return null;let t=i.get(e);if(void 0!==t)return t;try{t=new(n().Range)(e)}catch(e){t=null}return i.set(e,t),t}},54143:(e,t,r)=>{"use strict";r.r(t),r.d(t,{makeIdent:()=>u,makeDescriptor:()=>h,makeLocator:()=>p,convertToIdent:()=>d,convertDescriptorToLocator:()=>C,convertLocatorToDescriptor:()=>f,convertPackageToLocator:()=>I,renamePackage:()=>E,copyPackage:()=>B,virtualizeDescriptor:()=>y,virtualizePackage:()=>m,isVirtualDescriptor:()=>w,isVirtualLocator:()=>Q,devirtualizeDescriptor:()=>D,devirtualizeLocator:()=>b,bindDescriptor:()=>v,bindLocator:()=>S,areIdentsEqual:()=>k,areDescriptorsEqual:()=>N,areLocatorsEqual:()=>F,areVirtualPackagesEquivalent:()=>K,parseIdent:()=>M,tryParseIdent:()=>R,parseDescriptor:()=>x,tryParseDescriptor:()=>L,parseLocator:()=>P,tryParseLocator:()=>O,parseRange:()=>U,parseFileStyleRange:()=>T,makeRange:()=>Y,convertToManifestRange:()=>G,requirableIdent:()=>H,stringifyIdent:()=>J,stringifyDescriptor:()=>q,stringifyLocator:()=>z,slugifyIdent:()=>W,slugifyLocator:()=>V,prettyIdent:()=>X,prettyRange:()=>Z,prettyDescriptor:()=>$,prettyReference:()=>ee,prettyLocator:()=>te,prettyLocatorNoColors:()=>re,sortDescriptors:()=>Ae,prettyWorkspace:()=>ne,prettyResolution:()=>oe,prettyDependent:()=>ie,getIdentVendorPath:()=>se});var A=r(46009),n=r(71191),o=r.n(n),i=r(53887),s=r.n(i),a=r(71643),c=r(20624),g=r(73632),l=r(54143);function u(e,t){if(null==e?void 0:e.startsWith("@"))throw new Error("Invalid scope: don't prefix it with '@'");return{identHash:c.makeHash(e,t),scope:e,name:t}}function h(e,t){return{identHash:e.identHash,scope:e.scope,name:e.name,descriptorHash:c.makeHash(e.identHash,t),range:t}}function p(e,t){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:c.makeHash(e.identHash,t),reference:t}}function d(e){return{identHash:e.identHash,scope:e.scope,name:e.name}}function C(e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.descriptorHash,reference:e.range}}function f(e){return{identHash:e.identHash,scope:e.scope,name:e.name,descriptorHash:e.locatorHash,range:e.reference}}function I(e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference}}function E(e,t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.locatorHash,reference:t.reference,version:e.version,languageName:e.languageName,linkType:e.linkType,dependencies:new Map(e.dependencies),peerDependencies:new Map(e.peerDependencies),dependenciesMeta:new Map(e.dependenciesMeta),peerDependenciesMeta:new Map(e.peerDependenciesMeta),bin:new Map(e.bin)}}function B(e){return E(e,e)}function y(e,t){if(t.includes("#"))throw new Error("Invalid entropy");return h(e,`virtual:${t}#${e.range}`)}function m(e,t){if(t.includes("#"))throw new Error("Invalid entropy");return E(e,p(e,`virtual:${t}#${e.reference}`))}function w(e){return e.range.startsWith("virtual:")}function Q(e){return e.reference.startsWith("virtual:")}function D(e){if(!w(e))throw new Error("Not a virtual descriptor");return h(e,e.range.replace(/^[^#]*#/,""))}function b(e){if(!Q(e))throw new Error("Not a virtual descriptor");return p(e,e.reference.replace(/^[^#]*#/,""))}function v(e,t){return e.range.includes("::")?e:h(e,`${e.range}::${o().stringify(t)}`)}function S(e,t){return e.reference.includes("::")?e:p(e,`${e.reference}::${o().stringify(t)}`)}function k(e,t){return e.identHash===t.identHash}function N(e,t){return e.descriptorHash===t.descriptorHash}function F(e,t){return e.locatorHash===t.locatorHash}function K(e,t){if(!Q(e))throw new Error("Invalid package type");if(!Q(t))throw new Error("Invalid package type");if(!k(e,t))return!1;if(e.dependencies.size!==t.dependencies.size)return!1;for(const r of e.dependencies.values()){const e=t.dependencies.get(r.identHash);if(!e)return!1;if(!N(r,e))return!1}return!0}function M(e){const t=R(e);if(!t)throw new Error(`Invalid ident (${e})`);return t}function R(e){const t=e.match(/^(?:@([^/]+?)\/)?([^/]+)$/);if(!t)return null;const[,r,A]=t;return u(void 0!==r?r:null,A)}function x(e,t=!1){const r=L(e,t);if(!r)throw new Error(`Invalid descriptor (${e})`);return r}function L(e,t=!1){const r=t?e.match(/^(?:@([^/]+?)\/)?([^/]+?)(?:@(.+))$/):e.match(/^(?:@([^/]+?)\/)?([^/]+?)(?:@(.+))?$/);if(!r)return null;const[,A,n,o]=r;if("unknown"===o)throw new Error(`Invalid range (${e})`);const i=void 0!==o?o:"unknown";return h(u(void 0!==A?A:null,n),i)}function P(e,t=!1){const r=O(e,t);if(!r)throw new Error(`Invalid locator (${e})`);return r}function O(e,t=!1){const r=t?e.match(/^(?:@([^/]+?)\/)?([^/]+?)(?:@(.+))$/):e.match(/^(?:@([^/]+?)\/)?([^/]+?)(?:@(.+))?$/);if(!r)return null;const[,A,n,o]=r;if("unknown"===o)throw new Error(`Invalid reference (${e})`);const i=void 0!==o?o:"unknown";return p(u(void 0!==A?A:null,n),i)}function U(e,t){const r=e.match(/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/);if(null===r)throw new Error(`Invalid range (${e})`);const A=void 0!==r[1]?r[1]:null;if("string"==typeof(null==t?void 0:t.requireProtocol)&&A!==t.requireProtocol)throw new Error(`Invalid protocol (${A})`);if((null==t?void 0:t.requireProtocol)&&null===A)throw new Error(`Missing protocol (${A})`);const n=void 0!==r[3]?decodeURIComponent(r[2]):null;if((null==t?void 0:t.requireSource)&&null===n)throw new Error(`Missing source (${e})`);const i=void 0!==r[3]?decodeURIComponent(r[3]):decodeURIComponent(r[2]);return{protocol:A,source:n,selector:(null==t?void 0:t.parseSelector)?o().parse(i):i,params:void 0!==r[4]?o().parse(r[4]):null}}function T(e,{protocol:t}){const{selector:r,params:A}=U(e,{requireProtocol:t,requireBindings:!0});if("string"!=typeof A.locator)throw new Error("Assertion failed: Invalid bindings for "+e);return{parentLocator:P(A.locator,!0),path:r}}function j(e){return e=(e=(e=e.replace(/%/g,"%25")).replace(/:/g,"%3A")).replace(/#/g,"%23")}function Y({protocol:e,source:t,selector:r,params:A}){let n="";return null!==e&&(n+=""+e),null!==t&&(n+=j(t)+"#"),n+=j(r),function(e){return null!==e&&Object.entries(e).length>0}(A)&&(n+="::"+o().stringify(A)),n}function G(e){const{params:t,protocol:r,source:A,selector:n}=U(e);for(const e in t)e.startsWith("__")&&delete t[e];return Y({protocol:r,source:A,params:t,selector:n})}function H(e){return e.scope?`@${e.scope}/${e.name}`:""+e.name}function J(e){return e.scope?`@${e.scope}/${e.name}`:""+e.name}function q(e){return e.scope?`@${e.scope}/${e.name}@${e.range}`:`${e.name}@${e.range}`}function z(e){return e.scope?`@${e.scope}/${e.name}@${e.reference}`:`${e.name}@${e.reference}`}function W(e){return null!==e.scope?`@${e.scope}-${e.name}`:e.name}function V(e){const{protocol:t,selector:r}=U(e.reference),n=null!==t?t.replace(/:$/,""):"exotic",o=s().valid(r),i=null!==o?`${n}-${o}`:""+n,a=(e.scope,`${W(e)}-${i}-${e.locatorHash.slice(0,10)}`);return(0,A.Zu)(a)}function X(e,t){return t.scope?`${a.pretty(e,`@${t.scope}/`,a.Type.SCOPE)}${a.pretty(e,t.name,a.Type.NAME)}`:""+a.pretty(e,t.name,a.Type.NAME)}function _(e){if(e.startsWith("virtual:")){return`${_(e.substr(e.indexOf("#")+1))} [${e.substr("virtual:".length,5)}]`}return e.replace(/\?.*/,"?[...]")}function Z(e,t){return""+a.pretty(e,_(t),a.Type.RANGE)}function $(e,t){return`${X(e,t)}${a.pretty(e,"@",a.Type.RANGE)}${Z(e,t.range)}`}function ee(e,t){return""+a.pretty(e,_(t),a.Type.REFERENCE)}function te(e,t){return`${X(e,t)}${a.pretty(e,"@",a.Type.REFERENCE)}${ee(e,t.reference)}`}function re(e){return`${J(e)}@${_(e.reference)}`}function Ae(e){return g.sortMap(e,[e=>J(e),e=>e.range])}function ne(e,t){return X(e,t.locator)}function oe(e,t,r){const A=w(t)?D(t):t;return null===r?`${l.prettyDescriptor(e,A)} → ${a.mark(e).Cross}`:A.identHash===r.identHash?`${l.prettyDescriptor(e,A)} → ${ee(e,r.reference)}`:`${l.prettyDescriptor(e,A)} → ${te(e,r)}`}function ie(e,t,r){return null===r?""+te(e,t):`${te(e,t)} (via ${l.prettyRange(e,r.range)})`}function se(e){return"node_modules/"+H(e)}},72785:(e,t,r)=>{"use strict";r.r(t),r.d(t,{makeArchiveFromDirectory:()=>h,convertToZip:()=>p,extractArchiveTo:()=>d});var A=r(78420),n=r(46009),o=r(90739),i=r(43896),s=r(65281),a=r(59938),c=r(31669),g=r(78761),l=r.n(g);const u=(0,c.promisify)(l().gunzip);async function h(e,{baseFs:t=new A.S,prefixPath:r=n.LZ.root,compressionLevel:a,inMemory:c=!1}={}){const g=await(0,s.getLibzipPromise)();let l;if(c)l=new o.d(null,{libzip:g,level:a});else{const e=await i.xfs.mktempPromise(),t=n.y1.join(e,"archive.zip");l=new o.d(t,{create:!0,libzip:g,level:a})}const u=n.y1.resolve(n.LZ.root,r);return await l.copyPromise(u,e,{baseFs:t,stableTime:!0,stableSort:!0}),l}async function p(e,t){const r=await i.xfs.mktempPromise(),A=n.y1.join(r,"archive.zip"),{compressionLevel:a,...c}=t;return await d(e,new o.d(A,{create:!0,libzip:await(0,s.getLibzipPromise)(),level:a}),c)}async function d(e,t,{stripComponents:r=0,prefixPath:A=n.LZ.dot}={}){const o=a.extract();o.on("entry",(e,o,i)=>{var s,a;if(function(e){if("/"===e.name[0])return!0;const t=e.name.split(/\//g);return!!t.some(e=>".."===e)||t.length<=r}(e))return void i();const c=n.y1.normalize(n.cS.toPortablePath(e.name)).replace(/\/$/,"").split(/\//g);if(c.length<=r)return o.resume(),void i();const g=c.slice(r).join("/"),l=n.y1.join(A,g);let u=420;switch("directory"!==e.type&&0==(73&(null!==(s=e.mode)&&void 0!==s?s:0))||(u|=73),e.type){case"directory":t.mkdirpSync(n.y1.dirname(l),{chmod:493,utimes:[315532800,315532800]}),t.mkdirSync(l),t.chmodSync(l,u),t.utimesSync(l,315532800,315532800),i();break;case"file":{t.mkdirpSync(n.y1.dirname(l),{chmod:493,utimes:[315532800,315532800]});const e=[];o.on("data",t=>e.push(t)),o.on("end",()=>{t.writeFileSync(l,Buffer.concat(e)),t.chmodSync(l,u),t.utimesSync(l,315532800,315532800),i()})}break;case"symlink":t.mkdirpSync(n.y1.dirname(l),{chmod:493,utimes:[315532800,315532800]}),t.symlinkSync(e.linkname,l),null===(a=t.lutimesSync)||void 0===a||a.call(t,l,315532800,315532800),i();break;default:o.resume(),i()}});const i=await u(e);return await new Promise((e,r)=>{o.on("error",e=>{r(e)}),o.on("finish",()=>{e(t)}),o.end(i)})}},85875:(e,t,r)=>{"use strict";r.r(t),r.d(t,{treeNodeToTreeify:()=>o,treeNodeToJson:()=>i,emitList:()=>s,emitTree:()=>a});var A=r(94682),n=r(71643);function o(e,{configuration:t}){const r={},A=(e,r)=>{const o=Array.isArray(e)?e.entries():Object.entries(e);for(const[e,{label:i,value:s,children:a}]of o){const o=[];void 0!==i&&o.push(n.applyStyle(t,i,n.Style.BOLD)),void 0!==s&&o.push(n.pretty(t,s[0],s[1])),0===o.length&&o.push(n.applyStyle(t,""+e,n.Style.BOLD));const c=r[o.join(": ")]={};void 0!==a&&A(a,c)}};if(void 0===e.children)throw new Error("The root node must only contain children");return A(e.children,r),r}function i(e){const t=e=>{var r;if(void 0===e.children){if(void 0===e.value)throw new Error("Assertion failed: Expected a value to be set if the children are missing");return n.json(e.value[0],e.value[1])}const A=Array.isArray(e.children)?e.children.entries():Object.entries(null!==(r=e.children)&&void 0!==r?r:{}),o=Array.isArray(e.children)?[]:{};for(const[e,r]of A)o[e]=t(r);return void 0===e.value?o:{value:n.json(e.value[0],e.value[1]),children:o}};return t(e)}function s(e,{configuration:t,stdout:r,json:A}){a({children:e.map(e=>({value:e}))},{configuration:t,stdout:r,json:A})}function a(e,{configuration:t,stdout:r,json:n,separators:s=0}){var a;if(n){const t=Array.isArray(e.children)?e.children.values():Object.values(null!==(a=e.children)&&void 0!==a?a:{});for(const e of t)r.write(JSON.stringify(i(e))+"\n");return}let c=(0,A.asTree)(o(e,{configuration:t}),!1,!1);if(s>=1&&(c=c.replace(/^([├└]─)/gm,"│\n$1").replace(/^│\n/,"")),s>=2)for(let e=0;e<2;++e)c=c.replace(/^([│ ].{2}[├│ ].{2}[^\n]+\n)(([│ ]).{2}[├└].{2}[^\n]*\n[│ ].{2}[│ ].{2}[├└]─)/gm,"$1$3 │\n$2").replace(/^│\n/,"");if(s>=3)throw new Error("Only the first two levels are accepted by treeUtils.emitTree");r.write(c)}},32485:(e,t,r)=>{"use strict";var A,n,o;r.d(t,{Un:()=>A,HN:()=>n,_u:()=>o}),function(e){e.HARD="HARD",e.SOFT="SOFT"}(A||(A={})),function(e){e.Dependency="Dependency",e.PeerDependency="PeerDependency",e.PeerDependencyMeta="PeerDependencyMeta"}(n||(n={})),function(e){e.Inactive="inactive",e.Redundant="redundant",e.Active="active"}(o||(o={}))},14626:(e,t,r)=>{"use strict";r.d(t,{K:()=>n});var A=r(42096);class n extends A.p{constructor(e,{baseFs:t,pathUtils:r}){super(r),this.target=e,this.baseFs=t}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(e){return e}mapToBase(e){return e}}},75448:(e,t,r)=>{"use strict";r.d(t,{M:()=>i});var A=r(78420),n=r(42096),o=r(46009);class i extends n.p{constructor(e,{baseFs:t=new A.S}={}){super(o.y1),this.target=this.pathUtils.normalize(e),this.baseFs=t}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(e){return this.pathUtils.isAbsolute(e)?o.y1.normalize(e):this.baseFs.resolve(o.y1.join(this.target,e))}mapFromBase(e){return e}mapToBase(e){return this.pathUtils.isAbsolute(e)?e:this.pathUtils.join(this.target,e)}}},5944:(e,t,r)=>{"use strict";r.d(t,{fS:()=>g,uY:()=>c,qH:()=>l});var A=r(12087),n=r(35747),o=r.n(n),i=r(46009);const s=new Date(3155328e5);async function a(e,t,r,A,n,c,g,l){var u,h;const p=await async function(e,t){try{return await e.lstatPromise(t)}catch(e){return null}}(A,n),d=await c.lstatPromise(g),C=l.stableTime?{mtime:s,atime:s}:d;let f;switch(!0){case d.isDirectory():f=await async function(e,t,r,A,n,o,i,s,c,g){if(null!==o&&!o.isDirectory()){if(!g.overwrite)return!1;e.push(async()=>A.removePromise(n)),o=null}let l=!1;null===o&&(e.push(async()=>A.mkdirPromise(n,{mode:c.mode})),l=!0);const u=await i.readdirPromise(s);if(g.stableSort)for(const o of u.sort())await a(e,t,r,A,A.pathUtils.join(n,o),i,i.pathUtils.join(s,o),g)&&(l=!0);else{(await Promise.all(u.map(async o=>{await a(e,t,r,A,A.pathUtils.join(n,o),i,i.pathUtils.join(s,o),g)}))).some(e=>e)&&(l=!0)}return l}(e,t,r,A,n,p,c,g,d,l);break;case d.isFile():f=await async function(e,t,r,A,n,i,s,a,c,g){if(null!==i){if(!g.overwrite)return!1;e.push(async()=>A.removePromise(n)),i=null}const l=A===s?async()=>A.copyFilePromise(a,n,o().constants.COPYFILE_FICLONE):async()=>A.writeFilePromise(n,await s.readFilePromise(a));return e.push(async()=>l()),!0}(e,0,0,A,n,p,c,g,0,l);break;case d.isSymbolicLink():f=await async function(e,t,r,A,n,o,s,a,c,g){if(null!==o){if(!g.overwrite)return!1;e.push(async()=>A.removePromise(n)),o=null}return e.push(async()=>{await A.symlinkPromise((0,i.CI)(A.pathUtils,await s.readlinkPromise(a)),n)}),!0}(e,0,0,A,n,p,c,g,0,l);break;default:throw new Error(`Unsupported file type (${d.mode})`)}return(f||(null===(u=null==p?void 0:p.mtime)||void 0===u?void 0:u.getTime())!==C.mtime.getTime()||(null===(h=null==p?void 0:p.atime)||void 0===h?void 0:h.getTime())!==C.atime.getTime())&&(t.push(()=>r(n,C.atime,C.mtime)),f=!0),null!==p&&(511&p.mode)==(511&d.mode)||(t.push(()=>A.chmodPromise(n,511&d.mode)),f=!0),f}class c{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:t=!1}={}){const r=[e];for(;r.length>0;){const e=r.shift();if((await this.lstatPromise(e)).isDirectory()){const A=await this.readdirPromise(e);if(!t)throw new Error("Not supported");for(const t of A.sort())r.push(this.pathUtils.join(e,t))}else yield e}}async removePromise(e,{recursive:t=!0,maxRetries:r=5}={}){let A;try{A=await this.lstatPromise(e)}catch(e){if("ENOENT"===e.code)return;throw e}if(A.isDirectory()){if(t)for(const t of await this.readdirPromise(e))await this.removePromise(this.pathUtils.resolve(e,t));let A=0;do{try{await this.rmdirPromise(e);break}catch(e){if("EBUSY"===e.code||"ENOTEMPTY"===e.code){if(0===r)break;await new Promise(e=>setTimeout(e,100*A));continue}throw e}}while(A++e()))}(this,e,r,t,{overwrite:A,stableSort:n,stableTime:o})}copySync(e,t,{baseFs:r=this,overwrite:A=!0}={}){const n=r.lstatSync(t),o=this.existsSync(e);if(n.isDirectory()){this.mkdirpSync(e);const n=r.readdirSync(t);for(const o of n)this.copySync(this.pathUtils.join(e,o),r.pathUtils.join(t,o),{baseFs:r,overwrite:A})}else if(n.isFile()){if(!o||A){o&&this.removeSync(e);const A=r.readFileSync(t);this.writeFileSync(e,A)}}else{if(!n.isSymbolicLink())throw new Error(`Unsupported file type (file: ${t}, mode: 0o${n.mode.toString(8).padStart(6,"0")})`);if(!o||A){o&&this.removeSync(e);const A=r.readlinkSync(t);this.symlinkSync((0,i.CI)(this.pathUtils,A),e)}}const s=511&n.mode;this.chmodSync(e,s)}async changeFilePromise(e,t,r={}){return Buffer.isBuffer(t)?this.changeFileBufferPromise(e,t):this.changeFileTextPromise(e,t,r)}async changeFileBufferPromise(e,t){let r=Buffer.alloc(0);try{r=await this.readFilePromise(e)}catch(e){}0!==Buffer.compare(r,t)&&await this.writeFilePromise(e,t)}async changeFileTextPromise(e,t,{automaticNewlines:r}={}){let A="";try{A=await this.readFilePromise(e,"utf8")}catch(e){}const n=r?l(A,t):t;A!==n&&await this.writeFilePromise(e,n)}changeFileSync(e,t,r={}){return Buffer.isBuffer(t)?this.changeFileBufferSync(e,t):this.changeFileTextSync(e,t,r)}changeFileBufferSync(e,t){let r=Buffer.alloc(0);try{r=this.readFileSync(e)}catch(e){}0!==Buffer.compare(r,t)&&this.writeFileSync(e,t)}changeFileTextSync(e,t,{automaticNewlines:r=!1}={}){let A="";try{A=this.readFileSync(e,"utf8")}catch(e){}const n=r?l(A,t):t;A!==n&&this.writeFileSync(e,n)}async movePromise(e,t){try{await this.renamePromise(e,t)}catch(r){if("EXDEV"!==r.code)throw r;await this.copyPromise(t,e),await this.removePromise(e)}}moveSync(e,t){try{this.renameSync(e,t)}catch(r){if("EXDEV"!==r.code)throw r;this.copySync(t,e),this.removeSync(e)}}async lockPromise(e,t){const r=e+".flock",A=Date.now();let n=null;const o=async()=>{let e;try{[e]=await this.readJsonPromise(r)}catch(e){return Date.now()-A<500}try{return process.kill(e,0),!0}catch(e){return!1}};for(;null===n;)try{n=await this.openPromise(r,"wx")}catch(e){if("EEXIST"!==e.code)throw e;if(!await o())try{await this.unlinkPromise(r);continue}catch(e){}if(!(Date.now()-A<6e4))throw new Error(`Couldn't acquire a lock in a reasonable time (via ${r})`);await new Promise(e=>setTimeout(e,1e3/60))}await this.writePromise(n,JSON.stringify([process.pid]));try{return await t()}finally{try{await this.closePromise(n),await this.unlinkPromise(r)}catch(e){}}}async readJsonPromise(e){const t=await this.readFilePromise(e,"utf8");try{return JSON.parse(t)}catch(t){throw t.message+=` (in ${e})`,t}}readJsonSync(e){const t=this.readFileSync(e,"utf8");try{return JSON.parse(t)}catch(t){throw t.message+=` (in ${e})`,t}}async writeJsonPromise(e,t){return await this.writeFilePromise(e,JSON.stringify(t,null,2)+"\n")}writeJsonSync(e,t){return this.writeFileSync(e,JSON.stringify(t,null,2)+"\n")}async preserveTimePromise(e,t){const r=await this.lstatPromise(e),A=await t();void 0!==A&&(e=A),this.lutimesPromise?await this.lutimesPromise(e,r.atime,r.mtime):r.isSymbolicLink()||await this.utimesPromise(e,r.atime,r.mtime)}async preserveTimeSync(e,t){const r=this.lstatSync(e),A=t();void 0!==A&&(e=A),this.lutimesSync?this.lutimesSync(e,r.atime,r.mtime):r.isSymbolicLink()||this.utimesSync(e,r.atime,r.mtime)}}c.DEFAULT_TIME=315532800;class g extends c{constructor(){super(i.y1)}}function l(e,t){return t.replace(/\r?\n/g,function(e){const t=e.match(/\r?\n/g);if(null===t)return A.EOL;const r=t.filter(e=>"\r\n"===e).length;return r>t.length-r?"\r\n":"\n"}(e))}},10489:(e,t,r)=>{"use strict";r.d(t,{n:()=>s});var A=r(78420),n=r(42096),o=r(46009);const i=o.LZ.root;class s extends n.p{constructor(e,{baseFs:t=new A.S}={}){super(o.y1),this.target=this.pathUtils.resolve(o.LZ.root,e),this.baseFs=t}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(o.LZ.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(e){const t=this.pathUtils.normalize(e);if(this.pathUtils.isAbsolute(e))return this.pathUtils.resolve(this.target,this.pathUtils.relative(i,e));if(t.match(/^\.\.\/?/))throw new Error(`Resolving this path (${e}) would escape the jail`);return this.pathUtils.resolve(this.target,e)}mapFromBase(e){return this.pathUtils.resolve(i,this.pathUtils.relative(this.target,e))}}},15037:(e,t,r)=>{"use strict";r.d(t,{v:()=>n});var A=r(42096);class n extends A.p{constructor(e,t){super(t),this.instance=null,this.factory=e}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(e){this.instance=e}mapFromBase(e){return e}mapToBase(e){return e}}},78420:(e,t,r)=>{"use strict";r.d(t,{S:()=>a});var A=r(35747),n=r.n(A),o=r(5944),i=r(26984),s=r(46009);class a extends o.fS{constructor(e=n()){super(),this.realFs=e,void 0!==this.realFs.lutimes&&(this.lutimesPromise=this.lutimesPromiseImpl,this.lutimesSync=this.lutimesSyncImpl)}getExtractHint(){return!1}getRealPath(){return s.LZ.root}resolve(e){return s.y1.resolve(e)}async openPromise(e,t,r){return await new Promise((A,n)=>{this.realFs.open(s.cS.fromPortablePath(e),t,r,this.makeCallback(A,n))})}openSync(e,t,r){return this.realFs.openSync(s.cS.fromPortablePath(e),t,r)}async opendirPromise(e,t){return await new Promise((r,A)=>{void 0!==t?this.realFs.opendir(s.cS.fromPortablePath(e),t,this.makeCallback(r,A)):this.realFs.opendir(s.cS.fromPortablePath(e),this.makeCallback(r,A))}).then(t=>Object.defineProperty(t,"path",{value:e,configurable:!0,writable:!0}))}opendirSync(e,t){const r=void 0!==t?this.realFs.opendirSync(s.cS.fromPortablePath(e),t):this.realFs.opendirSync(s.cS.fromPortablePath(e));return Object.defineProperty(r,"path",{value:e,configurable:!0,writable:!0})}async readPromise(e,t,r=0,A=0,n=-1){return await new Promise((o,i)=>{this.realFs.read(e,t,r,A,n,(e,t)=>{e?i(e):o(t)})})}readSync(e,t,r,A,n){return this.realFs.readSync(e,t,r,A,n)}async writePromise(e,t,r,A,n){return await new Promise((o,i)=>"string"==typeof t?this.realFs.write(e,t,r,this.makeCallback(o,i)):this.realFs.write(e,t,r,A,n,this.makeCallback(o,i)))}writeSync(e,t,r,A,n){return"string"==typeof t?this.realFs.writeSync(e,t,r):this.realFs.writeSync(e,t,r,A,n)}async closePromise(e){await new Promise((t,r)=>{this.realFs.close(e,this.makeCallback(t,r))})}closeSync(e){this.realFs.closeSync(e)}createReadStream(e,t){const r=null!==e?s.cS.fromPortablePath(e):e;return this.realFs.createReadStream(r,t)}createWriteStream(e,t){const r=null!==e?s.cS.fromPortablePath(e):e;return this.realFs.createWriteStream(r,t)}async realpathPromise(e){return await new Promise((t,r)=>{this.realFs.realpath(s.cS.fromPortablePath(e),{},this.makeCallback(t,r))}).then(e=>s.cS.toPortablePath(e))}realpathSync(e){return s.cS.toPortablePath(this.realFs.realpathSync(s.cS.fromPortablePath(e),{}))}async existsPromise(e){return await new Promise(t=>{this.realFs.exists(s.cS.fromPortablePath(e),t)})}accessSync(e,t){return this.realFs.accessSync(s.cS.fromPortablePath(e),t)}async accessPromise(e,t){return await new Promise((r,A)=>{this.realFs.access(s.cS.fromPortablePath(e),t,this.makeCallback(r,A))})}existsSync(e){return this.realFs.existsSync(s.cS.fromPortablePath(e))}async statPromise(e){return await new Promise((t,r)=>{this.realFs.stat(s.cS.fromPortablePath(e),this.makeCallback(t,r))})}statSync(e){return this.realFs.statSync(s.cS.fromPortablePath(e))}async lstatPromise(e){return await new Promise((t,r)=>{this.realFs.lstat(s.cS.fromPortablePath(e),this.makeCallback(t,r))})}lstatSync(e){return this.realFs.lstatSync(s.cS.fromPortablePath(e))}async chmodPromise(e,t){return await new Promise((r,A)=>{this.realFs.chmod(s.cS.fromPortablePath(e),t,this.makeCallback(r,A))})}chmodSync(e,t){return this.realFs.chmodSync(s.cS.fromPortablePath(e),t)}async chownPromise(e,t,r){return await new Promise((A,n)=>{this.realFs.chown(s.cS.fromPortablePath(e),t,r,this.makeCallback(A,n))})}chownSync(e,t,r){return this.realFs.chownSync(s.cS.fromPortablePath(e),t,r)}async renamePromise(e,t){return await new Promise((r,A)=>{this.realFs.rename(s.cS.fromPortablePath(e),s.cS.fromPortablePath(t),this.makeCallback(r,A))})}renameSync(e,t){return this.realFs.renameSync(s.cS.fromPortablePath(e),s.cS.fromPortablePath(t))}async copyFilePromise(e,t,r=0){return await new Promise((A,n)=>{this.realFs.copyFile(s.cS.fromPortablePath(e),s.cS.fromPortablePath(t),r,this.makeCallback(A,n))})}copyFileSync(e,t,r=0){return this.realFs.copyFileSync(s.cS.fromPortablePath(e),s.cS.fromPortablePath(t),r)}async appendFilePromise(e,t,r){return await new Promise((A,n)=>{const o="string"==typeof e?s.cS.fromPortablePath(e):e;r?this.realFs.appendFile(o,t,r,this.makeCallback(A,n)):this.realFs.appendFile(o,t,this.makeCallback(A,n))})}appendFileSync(e,t,r){const A="string"==typeof e?s.cS.fromPortablePath(e):e;r?this.realFs.appendFileSync(A,t,r):this.realFs.appendFileSync(A,t)}async writeFilePromise(e,t,r){return await new Promise((A,n)=>{const o="string"==typeof e?s.cS.fromPortablePath(e):e;r?this.realFs.writeFile(o,t,r,this.makeCallback(A,n)):this.realFs.writeFile(o,t,this.makeCallback(A,n))})}writeFileSync(e,t,r){const A="string"==typeof e?s.cS.fromPortablePath(e):e;r?this.realFs.writeFileSync(A,t,r):this.realFs.writeFileSync(A,t)}async unlinkPromise(e){return await new Promise((t,r)=>{this.realFs.unlink(s.cS.fromPortablePath(e),this.makeCallback(t,r))})}unlinkSync(e){return this.realFs.unlinkSync(s.cS.fromPortablePath(e))}async utimesPromise(e,t,r){return await new Promise((A,n)=>{this.realFs.utimes(s.cS.fromPortablePath(e),t,r,this.makeCallback(A,n))})}utimesSync(e,t,r){this.realFs.utimesSync(s.cS.fromPortablePath(e),t,r)}async lutimesPromiseImpl(e,t,r){const A=this.realFs.lutimes;if(void 0===A)throw(0,i.bk)("unavailable Node binding",`lutimes '${e}'`);return await new Promise((n,o)=>{A.call(this.realFs,s.cS.fromPortablePath(e),t,r,this.makeCallback(n,o))})}lutimesSyncImpl(e,t,r){const A=this.realFs.lutimesSync;if(void 0===A)throw(0,i.bk)("unavailable Node binding",`lutimes '${e}'`);A.call(this.realFs,s.cS.fromPortablePath(e),t,r)}async mkdirPromise(e,t){return await new Promise((r,A)=>{this.realFs.mkdir(s.cS.fromPortablePath(e),t,this.makeCallback(r,A))})}mkdirSync(e,t){return this.realFs.mkdirSync(s.cS.fromPortablePath(e),t)}async rmdirPromise(e,t){return await new Promise((r,A)=>{t?this.realFs.rmdir(s.cS.fromPortablePath(e),t,this.makeCallback(r,A)):this.realFs.rmdir(s.cS.fromPortablePath(e),this.makeCallback(r,A))})}rmdirSync(e,t){return this.realFs.rmdirSync(s.cS.fromPortablePath(e),t)}async linkPromise(e,t){return await new Promise((r,A)=>{this.realFs.link(s.cS.fromPortablePath(e),s.cS.fromPortablePath(t),this.makeCallback(r,A))})}linkSync(e,t){return this.realFs.linkSync(s.cS.fromPortablePath(e),s.cS.fromPortablePath(t))}async symlinkPromise(e,t,r){const A=r||(e.endsWith("/")?"dir":"file");return await new Promise((r,n)=>{this.realFs.symlink(s.cS.fromPortablePath(e.replace(/\/+$/,"")),s.cS.fromPortablePath(t),A,this.makeCallback(r,n))})}symlinkSync(e,t,r){const A=r||(e.endsWith("/")?"dir":"file");return this.realFs.symlinkSync(s.cS.fromPortablePath(e.replace(/\/+$/,"")),s.cS.fromPortablePath(t),A)}async readFilePromise(e,t){return await new Promise((r,A)=>{const n="string"==typeof e?s.cS.fromPortablePath(e):e;this.realFs.readFile(n,t,this.makeCallback(r,A))})}readFileSync(e,t){const r="string"==typeof e?s.cS.fromPortablePath(e):e;return this.realFs.readFileSync(r,t)}async readdirPromise(e,{withFileTypes:t}={}){return await new Promise((r,A)=>{t?this.realFs.readdir(s.cS.fromPortablePath(e),{withFileTypes:!0},this.makeCallback(r,A)):this.realFs.readdir(s.cS.fromPortablePath(e),this.makeCallback(e=>r(e),A))})}readdirSync(e,{withFileTypes:t}={}){return t?this.realFs.readdirSync(s.cS.fromPortablePath(e),{withFileTypes:!0}):this.realFs.readdirSync(s.cS.fromPortablePath(e))}async readlinkPromise(e){return await new Promise((t,r)=>{this.realFs.readlink(s.cS.fromPortablePath(e),this.makeCallback(t,r))}).then(e=>s.cS.toPortablePath(e))}readlinkSync(e){return s.cS.toPortablePath(this.realFs.readlinkSync(s.cS.fromPortablePath(e)))}async truncatePromise(e,t){return await new Promise((r,A)=>{this.realFs.truncate(s.cS.fromPortablePath(e),t,this.makeCallback(r,A))})}truncateSync(e,t){return this.realFs.truncateSync(s.cS.fromPortablePath(e),t)}watch(e,t,r){return this.realFs.watch(s.cS.fromPortablePath(e),t,r)}watchFile(e,t,r){return this.realFs.watchFile(s.cS.fromPortablePath(e),t,r)}unwatchFile(e,t){return this.realFs.unwatchFile(s.cS.fromPortablePath(e),t)}makeCallback(e,t){return(r,A)=>{r?t(r):e(A)}}}},39725:(e,t,r)=>{"use strict";r.d(t,{i:()=>o});var A=r(42096),n=r(46009);class o extends A.p{constructor(e){super(n.cS),this.baseFs=e}mapFromBase(e){return n.cS.fromPortablePath(e)}mapToBase(e){return n.cS.toPortablePath(e)}}},42096:(e,t,r)=>{"use strict";r.d(t,{p:()=>n});var A=r(5944);class n extends A.uY{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,t,r){return this.baseFs.openPromise(this.mapToBase(e),t,r)}openSync(e,t,r){return this.baseFs.openSync(this.mapToBase(e),t,r)}async opendirPromise(e,t){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),t),{path:e})}opendirSync(e,t){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),t),{path:e})}async readPromise(e,t,r,A,n){return await this.baseFs.readPromise(e,t,r,A,n)}readSync(e,t,r,A,n){return this.baseFs.readSync(e,t,r,A,n)}async writePromise(e,t,r,A,n){return"string"==typeof t?await this.baseFs.writePromise(e,t,r):await this.baseFs.writePromise(e,t,r,A,n)}writeSync(e,t,r,A,n){return"string"==typeof t?this.baseFs.writeSync(e,t,r):this.baseFs.writeSync(e,t,r,A,n)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,t){return this.baseFs.createReadStream(null!==e?this.mapToBase(e):e,t)}createWriteStream(e,t){return this.baseFs.createWriteStream(null!==e?this.mapToBase(e):e,t)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,t){return this.baseFs.accessSync(this.mapToBase(e),t)}async accessPromise(e,t){return this.baseFs.accessPromise(this.mapToBase(e),t)}async statPromise(e){return this.baseFs.statPromise(this.mapToBase(e))}statSync(e){return this.baseFs.statSync(this.mapToBase(e))}async lstatPromise(e){return this.baseFs.lstatPromise(this.mapToBase(e))}lstatSync(e){return this.baseFs.lstatSync(this.mapToBase(e))}async chmodPromise(e,t){return this.baseFs.chmodPromise(this.mapToBase(e),t)}chmodSync(e,t){return this.baseFs.chmodSync(this.mapToBase(e),t)}async chownPromise(e,t,r){return this.baseFs.chownPromise(this.mapToBase(e),t,r)}chownSync(e,t,r){return this.baseFs.chownSync(this.mapToBase(e),t,r)}async renamePromise(e,t){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(t))}renameSync(e,t){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(t))}async copyFilePromise(e,t,r=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(t),r)}copyFileSync(e,t,r=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(t),r)}async appendFilePromise(e,t,r){return this.baseFs.appendFilePromise(this.fsMapToBase(e),t,r)}appendFileSync(e,t,r){return this.baseFs.appendFileSync(this.fsMapToBase(e),t,r)}async writeFilePromise(e,t,r){return this.baseFs.writeFilePromise(this.fsMapToBase(e),t,r)}writeFileSync(e,t,r){return this.baseFs.writeFileSync(this.fsMapToBase(e),t,r)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,t,r){return this.baseFs.utimesPromise(this.mapToBase(e),t,r)}utimesSync(e,t,r){return this.baseFs.utimesSync(this.mapToBase(e),t,r)}async mkdirPromise(e,t){return this.baseFs.mkdirPromise(this.mapToBase(e),t)}mkdirSync(e,t){return this.baseFs.mkdirSync(this.mapToBase(e),t)}async rmdirPromise(e,t){return this.baseFs.rmdirPromise(this.mapToBase(e),t)}rmdirSync(e,t){return this.baseFs.rmdirSync(this.mapToBase(e),t)}async linkPromise(e,t){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(t))}linkSync(e,t){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(t))}async symlinkPromise(e,t,r){return this.baseFs.symlinkPromise(this.mapToBase(e),this.mapToBase(t),r)}symlinkSync(e,t,r){return this.baseFs.symlinkSync(this.mapToBase(e),this.mapToBase(t),r)}async readFilePromise(e,t){return this.baseFs.readFilePromise(this.fsMapToBase(e),t)}readFileSync(e,t){return this.baseFs.readFileSync(this.fsMapToBase(e),t)}async readdirPromise(e,{withFileTypes:t}={}){return this.baseFs.readdirPromise(this.mapToBase(e),{withFileTypes:t})}readdirSync(e,{withFileTypes:t}={}){return this.baseFs.readdirSync(this.mapToBase(e),{withFileTypes:t})}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,t){return this.baseFs.truncatePromise(this.mapToBase(e),t)}truncateSync(e,t){return this.baseFs.truncateSync(this.mapToBase(e),t)}watch(e,t,r){return this.baseFs.watch(this.mapToBase(e),t,r)}watchFile(e,t,r){return this.baseFs.watchFile(this.mapToBase(e),t,r)}unwatchFile(e,t){return this.baseFs.unwatchFile(this.mapToBase(e),t)}fsMapToBase(e){return"number"==typeof e?e:this.mapToBase(e)}}},17674:(e,t,r)=>{"use strict";r.d(t,{p:()=>c});var A=r(78420),n=r(42096),o=r(46009);const i=/^[0-9]+$/,s=/^(\/(?:[^/]+\/)*?\$\$virtual)((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/,a=/^([^/]+-)?[a-f0-9]+$/;class c extends n.p{constructor({baseFs:e=new A.S}={}){super(o.y1),this.baseFs=e}static makeVirtualPath(e,t,r){if("$$virtual"!==o.y1.basename(e))throw new Error('Assertion failed: Virtual folders must be named "$$virtual"');if(!o.y1.basename(t).match(a))throw new Error("Assertion failed: Virtual components must be ended by an hexadecimal hash");const A=o.y1.relative(o.y1.dirname(e),r).split("/");let n=0;for(;n{"use strict";r.d(t,{k:()=>C,d:()=>f});var A=r(35747),n=r(92413),o=r(31669),i=r(78761),s=r.n(i),a=r(5944),c=r(78420),g=r(19697),l=r(38783),u=r(22004),h=r(26984),p=r(46009),d=r(65760);const C="mixed";class f extends a.fS{constructor(e,t){super(),this.lzSource=null,this.listings=new Map,this.entries=new Map,this.fileSources=new Map,this.fds=new Map,this.nextFd=0,this.ready=!1,this.readOnly=!1,this.libzip=t.libzip;const r=t;if(this.level=void 0!==r.level?r.level:C,null===e&&(e=Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])),"string"==typeof e){const{baseFs:t=new c.S}=r;this.baseFs=t,this.path=e}else this.path=null,this.baseFs=null;if(t.stats)this.stats=t.stats;else if("string"==typeof e)try{this.stats=this.baseFs.statSync(e)}catch(e){if("ENOENT"!==e.code||!r.create)throw e;this.stats=d.makeDefaultStats()}else this.stats=d.makeDefaultStats();const A=this.libzip.malloc(4);try{let n=0;if("string"==typeof e&&r.create&&(n|=this.libzip.ZIP_CREATE|this.libzip.ZIP_TRUNCATE),t.readOnly&&(n|=this.libzip.ZIP_RDONLY,this.readOnly=!0),"string"==typeof e)this.zip=this.libzip.open(p.cS.fromPortablePath(e),n,A);else{const t=this.allocateUnattachedSource(e);try{this.zip=this.libzip.openFromSource(t,n,A),this.lzSource=t}catch(e){throw this.libzip.source.free(t),e}}if(0===this.zip){const e=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(e,this.libzip.getValue(A,"i32")),this.makeLibzipError(e)}}finally{this.libzip.free(A)}this.listings.set(p.LZ.root,new Set);const n=this.libzip.getNumEntries(this.zip,0);for(let e=0;ee)throw new Error("Overread");const A=this.libzip.HEAPU8.subarray(t,t+e);return Buffer.from(A)}finally{this.libzip.free(t)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}prepareClose(){if(!this.ready)throw h.Vw("archive closed, close");(0,l.L)(this)}saveAndClose(){if(!this.path||!this.baseFs)throw new Error("ZipFS cannot be saved and must be discarded when loaded from a buffer");if(this.prepareClose(),this.readOnly)return void this.discardAndClose();const e=this.baseFs.existsSync(this.path)?511&this.baseFs.statSync(this.path).mode:null;if(-1===this.libzip.close(this.zip))throw this.makeLibzipError(this.libzip.getError(this.zip));null===e?this.baseFs.chmodSync(this.path,this.stats.mode):e!==(511&this.baseFs.statSync(this.path).mode)&&this.baseFs.chmodSync(this.path,e),this.ready=!1}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}resolve(e){return p.y1.resolve(p.LZ.root,e)}async openPromise(e,t,r){return this.openSync(e,t,r)}openSync(e,t,r){const A=this.nextFd++;return this.fds.set(A,{cursor:0,p:e}),A}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(e,t){return this.opendirSync(e,t)}opendirSync(e,t={}){const r=this.resolveFilename(`opendir '${e}'`,e);if(!this.entries.has(r)&&!this.listings.has(r))throw h.z6(`opendir '${e}'`);const A=this.listings.get(r);if(!A)throw h.Ab(`opendir '${e}'`);const n=[...A],o=this.openSync(r,"r");return(0,g.a)(this,r,n,{onClose:()=>{this.closeSync(o)}})}async readPromise(e,t,r,A,n){return this.readSync(e,t,r,A,n)}readSync(e,t,r=0,A=0,n=-1){const o=this.fds.get(e);if(void 0===o)throw h.Ch("read");let i;i=-1===n||null===n?o.cursor:n;const s=this.readFileSync(o.p);s.copy(t,r,i,i+A);const a=Math.max(0,Math.min(s.length-i,A));return-1!==n&&null!==n||(o.cursor+=a),a}async writePromise(e,t,r,A,n){return"string"==typeof t?this.writeSync(e,t,n):this.writeSync(e,t,r,A,n)}writeSync(e,t,r,A,n){if(void 0===this.fds.get(e))throw h.Ch("read");throw new Error("Unimplemented")}async closePromise(e){return this.closeSync(e)}closeSync(e){if(void 0===this.fds.get(e))throw h.Ch("read");this.fds.delete(e)}createReadStream(e,{encoding:t}={}){if(null===e)throw new Error("Unimplemented");const r=this.openSync(e,"r"),A=Object.assign(new n.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(e,t)=>{clearImmediate(o),this.closeSync(r),t(e)}}),{close(){A.destroy()},bytesRead:0,path:e}),o=setImmediate(async()=>{try{const r=await this.readFilePromise(e,t);A.bytesRead=r.length,A.end(r)}catch(e){A.destroy(e)}});return A}createWriteStream(e,{encoding:t}={}){if(this.readOnly)throw h.YW(`open '${e}'`);if(null===e)throw new Error("Unimplemented");const r=[],A=this.openSync(e,"w"),o=Object.assign(new n.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(n,o)=>{try{n?o(n):(this.writeFileSync(e,Buffer.concat(r),t),o(null))}catch(e){o(e)}finally{this.closeSync(A)}}}),{bytesWritten:0,path:e,close(){o.destroy()}});return o.on("data",e=>{const t=Buffer.from(e);o.bytesWritten+=t.length,r.push(t)}),o}async realpathPromise(e){return this.realpathSync(e)}realpathSync(e){const t=this.resolveFilename(`lstat '${e}'`,e);if(!this.entries.has(t)&&!this.listings.has(t))throw h.z6(`lstat '${e}'`);return t}async existsPromise(e){return this.existsSync(e)}existsSync(e){if(!this.ready)throw h.Vw(`archive closed, existsSync '${e}'`);if(0===this.symlinkCount){const t=p.y1.resolve(p.LZ.root,e);return this.entries.has(t)||this.listings.has(t)}let t;try{t=this.resolveFilename(`stat '${e}'`,e)}catch(e){return!1}return this.entries.has(t)||this.listings.has(t)}async accessPromise(e,t){return this.accessSync(e,t)}accessSync(e,t=A.constants.F_OK){const r=this.resolveFilename(`access '${e}'`,e);if(!this.entries.has(r)&&!this.listings.has(r))throw h.z6(`access '${e}'`);if(this.readOnly&&t&A.constants.W_OK)throw h.YW(`access '${e}'`)}async statPromise(e){return this.statSync(e)}statSync(e){const t=this.resolveFilename(`stat '${e}'`,e);if(!this.entries.has(t)&&!this.listings.has(t))throw h.z6(`stat '${e}'`);if("/"===e[e.length-1]&&!this.listings.has(t))throw h.Ab(`stat '${e}'`);return this.statImpl(`stat '${e}'`,t)}async lstatPromise(e){return this.lstatSync(e)}lstatSync(e){const t=this.resolveFilename(`lstat '${e}'`,e,!1);if(!this.entries.has(t)&&!this.listings.has(t))throw h.z6(`lstat '${e}'`);if("/"===e[e.length-1]&&!this.listings.has(t))throw h.Ab(`lstat '${e}'`);return this.statImpl(`lstat '${e}'`,t)}statImpl(e,t){const r=this.entries.get(t);if(void 0!==r){const e=this.libzip.struct.statS();if(-1===this.libzip.statIndex(this.zip,r,0,0,e))throw this.makeLibzipError(this.libzip.getError(this.zip));const A=this.stats.uid,n=this.stats.gid,o=this.libzip.struct.statSize(e)>>>0,i=512,s=Math.ceil(o/i),a=1e3*(this.libzip.struct.statMtime(e)>>>0),c=a,g=a,l=a,h=new Date(c),p=new Date(g),C=new Date(l),f=new Date(a),I=this.listings.has(t)?u.QB:this.isSymbolicLink(r)?u.Zv:u.Pe,E=I===u.QB?493:420,B=I|511&this.getUnixMode(r,E);return Object.assign(new d.StatEntry,{uid:A,gid:n,size:o,blksize:i,blocks:s,atime:h,birthtime:p,ctime:C,mtime:f,atimeMs:c,birthtimeMs:g,ctimeMs:l,mtimeMs:a,mode:B})}if(this.listings.has(t)){const e=this.stats.uid,t=this.stats.gid,r=0,A=512,n=0,o=this.stats.mtimeMs,i=this.stats.mtimeMs,s=this.stats.mtimeMs,a=this.stats.mtimeMs,c=new Date(o),g=new Date(i),l=new Date(s),h=new Date(a),p=493|u.QB;return Object.assign(new d.StatEntry,{uid:e,gid:t,size:r,blksize:A,blocks:n,atime:c,birthtime:g,ctime:l,mtime:h,atimeMs:o,birthtimeMs:i,ctimeMs:s,mtimeMs:a,mode:p})}throw new Error("Unreachable")}getUnixMode(e,t){if(-1===this.libzip.file.getExternalAttributes(this.zip,e,0,0,this.libzip.uint08S,this.libzip.uint32S))throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?t:this.libzip.getValue(this.libzip.uint32S,"i32")>>>16}registerListing(e){let t=this.listings.get(e);if(t)return t;const r=this.registerListing(p.y1.dirname(e));return t=new Set,r.add(p.y1.basename(e)),this.listings.set(e,t),t}registerEntry(e,t){this.registerListing(p.y1.dirname(e)).add(p.y1.basename(e)),this.entries.set(e,t)}unregisterListing(e){this.listings.delete(e);const t=this.listings.get(p.y1.dirname(e));null==t||t.delete(p.y1.basename(e))}unregisterEntry(e){this.unregisterListing(e);const t=this.entries.get(e);this.entries.delete(e),void 0!==t&&(this.fileSources.delete(t),this.isSymbolicLink(t)&&this.symlinkCount--)}deleteEntry(e,t){this.unregisterEntry(e);if(-1===this.libzip.delete(this.zip,t))throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(e,t,r=!0){if(!this.ready)throw h.Vw("archive closed, "+e);let A=p.y1.resolve(p.LZ.root,t);if("/"===A)return p.LZ.root;const n=this.entries.get(A);if(r&&void 0!==n){if(0!==this.symlinkCount&&this.isSymbolicLink(n)){const t=this.getFileSource(n).toString();return this.resolveFilename(e,p.y1.resolve(p.y1.dirname(A),t),!0)}return A}for(;;){const t=this.resolveFilename(e,p.y1.dirname(A),!0),n=this.listings.has(t),o=this.entries.has(t);if(!n&&!o)throw h.z6(e);if(!n)throw h.Ab(e);if(A=p.y1.resolve(t,p.y1.basename(A)),!r||0===this.symlinkCount)break;const i=this.libzip.name.locate(this.zip,A.slice(1));if(-1===i)break;if(!this.isSymbolicLink(i))break;{const e=this.getFileSource(i).toString();A=p.y1.resolve(p.y1.dirname(A),e)}}return A}allocateBuffer(e){Buffer.isBuffer(e)||(e=Buffer.from(e));const t=this.libzip.malloc(e.byteLength);if(!t)throw new Error("Couldn't allocate enough memory");return new Uint8Array(this.libzip.HEAPU8.buffer,t,e.byteLength).set(e),{buffer:t,byteLength:e.byteLength}}allocateUnattachedSource(e){const t=this.libzip.struct.errorS(),{buffer:r,byteLength:A}=this.allocateBuffer(e),n=this.libzip.source.fromUnattachedBuffer(r,A,0,!0,t);if(0===n)throw this.libzip.free(t),this.makeLibzipError(t);return n}allocateSource(e){const{buffer:t,byteLength:r}=this.allocateBuffer(e),A=this.libzip.source.fromBuffer(this.zip,t,r,0,!0);if(0===A)throw this.libzip.free(t),this.makeLibzipError(this.libzip.getError(this.zip));return A}setFileSource(e,t){const r=Buffer.isBuffer(t)?t:Buffer.from(t),A=p.y1.relative(p.LZ.root,e),n=this.allocateSource(t);try{const e=this.libzip.file.add(this.zip,A,n,this.libzip.ZIP_FL_OVERWRITE);if(-1===e)throw this.makeLibzipError(this.libzip.getError(this.zip));if("mixed"!==this.level){let t;t=0===this.level?this.libzip.ZIP_CM_STORE:this.libzip.ZIP_CM_DEFLATE;if(-1===this.libzip.file.setCompression(this.zip,e,0,t,this.level))throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(e,r),e}catch(e){throw this.libzip.source.free(n),e}}isSymbolicLink(e){if(0===this.symlinkCount)return!1;if(-1===this.libzip.file.getExternalAttributes(this.zip,e,0,0,this.libzip.uint08S,this.libzip.uint32S))throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX)return!1;return(this.libzip.getValue(this.libzip.uint32S,"i32")>>>16&u.wK)===u.Zv}getFileSource(e,t={asyncDecompress:!1}){const r=this.fileSources.get(e);if(void 0!==r)return r;const A=this.libzip.struct.statS();if(-1===this.libzip.statIndex(this.zip,e,0,0,A))throw this.makeLibzipError(this.libzip.getError(this.zip));const n=this.libzip.struct.statCompSize(A),o=this.libzip.struct.statCompMethod(A),i=this.libzip.malloc(n);try{const r=this.libzip.fopenIndex(this.zip,e,0,this.libzip.ZIP_FL_COMPRESSED);if(0===r)throw this.makeLibzipError(this.libzip.getError(this.zip));try{const A=this.libzip.fread(r,i,n,0);if(-1===A)throw this.makeLibzipError(this.libzip.file.getError(r));if(An)throw new Error("Overread");const a=this.libzip.HEAPU8.subarray(i,i+n),c=Buffer.from(a);if(0===o)return this.fileSources.set(e,c),c;if(t.asyncDecompress)return new Promise((t,r)=>{s().inflateRaw(c,(A,n)=>{A?r(A):(this.fileSources.set(e,n),t(n))})});{const t=s().inflateRawSync(c);return this.fileSources.set(e,t),t}}finally{this.libzip.fclose(r)}}finally{this.libzip.free(i)}}async chmodPromise(e,t){return this.chmodSync(e,t)}chmodSync(e,t){if(this.readOnly)throw h.YW(`chmod '${e}'`);t&=493;const r=this.resolveFilename(`chmod '${e}'`,e,!1),A=this.entries.get(r);if(void 0===A)throw new Error(`Assertion failed: The entry should have been registered (${r})`);const n=-512&this.getUnixMode(A,0|u.Pe)|t;if(-1===this.libzip.file.setExternalAttributes(this.zip,A,0,0,this.libzip.ZIP_OPSYS_UNIX,n<<16))throw this.makeLibzipError(this.libzip.getError(this.zip))}async chownPromise(e,t,r){return this.chownSync(e,t,r)}chownSync(e,t,r){throw new Error("Unimplemented")}async renamePromise(e,t){return this.renameSync(e,t)}renameSync(e,t){throw new Error("Unimplemented")}async copyFilePromise(e,t,r){const{indexSource:A,indexDest:n,resolvedDestP:o}=this.prepareCopyFile(e,t,r),i=await this.getFileSource(A,{asyncDecompress:!0}),s=this.setFileSource(o,i);s!==n&&this.registerEntry(o,s)}copyFileSync(e,t,r=0){const{indexSource:A,indexDest:n,resolvedDestP:o}=this.prepareCopyFile(e,t,r),i=this.getFileSource(A),s=this.setFileSource(o,i);s!==n&&this.registerEntry(o,s)}prepareCopyFile(e,t,r=0){if(this.readOnly)throw h.YW(`copyfile '${e} -> '${t}'`);if(0!=(r&A.constants.COPYFILE_FICLONE_FORCE))throw h.bk("unsupported clone operation",`copyfile '${e}' -> ${t}'`);const n=this.resolveFilename(`copyfile '${e} -> ${t}'`,e),o=this.entries.get(n);if(void 0===o)throw h.hq(`copyfile '${e}' -> '${t}'`);const i=this.resolveFilename(`copyfile '${e}' -> ${t}'`,t),s=this.entries.get(i);if(0!=(r&(A.constants.COPYFILE_EXCL|A.constants.COPYFILE_FICLONE_FORCE))&&void 0!==s)throw h.cT(`copyfile '${e}' -> '${t}'`);return{indexSource:o,resolvedDestP:i,indexDest:s}}async appendFilePromise(e,t,r){if(this.readOnly)throw h.YW(`open '${e}'`);return void 0===r?r={flag:"a"}:"string"==typeof r?r={flag:"a",encoding:r}:void 0===r.flag&&(r={flag:"a",...r}),this.writeFilePromise(e,t,r)}appendFileSync(e,t,r={}){if(this.readOnly)throw h.YW(`open '${e}'`);return void 0===r?r={flag:"a"}:"string"==typeof r?r={flag:"a",encoding:r}:void 0===r.flag&&(r={flag:"a",...r}),this.writeFileSync(e,t,r)}async writeFilePromise(e,t,r){const{encoding:A,index:n,resolvedP:o}=this.prepareWriteFile(e,r);void 0!==n&&"object"==typeof r&&r.flag&&r.flag.includes("a")&&(t=Buffer.concat([await this.getFileSource(n,{asyncDecompress:!0}),Buffer.from(t)])),null!==A&&(t=t.toString(A));const i=this.setFileSource(o,t);i!==n&&this.registerEntry(o,i)}writeFileSync(e,t,r){const{encoding:A,index:n,resolvedP:o}=this.prepareWriteFile(e,r);void 0!==n&&"object"==typeof r&&r.flag&&r.flag.includes("a")&&(t=Buffer.concat([this.getFileSource(n),Buffer.from(t)])),null!==A&&(t=t.toString(A));const i=this.setFileSource(o,t);i!==n&&this.registerEntry(o,i)}prepareWriteFile(e,t){if("string"!=typeof e)throw h.Ch("read");if(this.readOnly)throw h.YW(`open '${e}'`);const r=this.resolveFilename(`open '${e}'`,e);if(this.listings.has(r))throw h.GA(`open '${e}'`);let A=null;"string"==typeof t?A=t:"object"==typeof t&&t.encoding&&(A=t.encoding);return{encoding:A,resolvedP:r,index:this.entries.get(r)}}async unlinkPromise(e){return this.unlinkSync(e)}unlinkSync(e){if(this.readOnly)throw h.YW(`unlink '${e}'`);const t=this.resolveFilename(`unlink '${e}'`,e);if(this.listings.has(t))throw h.GA(`unlink '${e}'`);const r=this.entries.get(t);if(void 0===r)throw h.hq(`unlink '${e}'`);this.deleteEntry(t,r)}async utimesPromise(e,t,r){return this.utimesSync(e,t,r)}utimesSync(e,t,r){if(this.readOnly)throw h.YW(`utimes '${e}'`);const A=this.resolveFilename(`utimes '${e}'`,e);this.utimesImpl(A,r)}async lutimesPromise(e,t,r){return this.lutimesSync(e,t,r)}lutimesSync(e,t,r){if(this.readOnly)throw h.YW(`lutimes '${e}'`);const A=this.resolveFilename(`utimes '${e}'`,e,!1);this.utimesImpl(A,r)}utimesImpl(e,t){this.listings.has(e)&&(this.entries.has(e)||this.hydrateDirectory(e));const r=this.entries.get(e);if(void 0===r)throw new Error("Unreachable");if(-1===this.libzip.file.setMtime(this.zip,r,0,function(e){if("string"==typeof e&&String(+e)===e)return+e;if(Number.isFinite(e))return e<0?Date.now()/1e3:e;if((0,o.isDate)(e))return e.getTime()/1e3;throw new Error("Invalid time")}(t),0))throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(e,t){return this.mkdirSync(e,t)}mkdirSync(e,{mode:t=493,recursive:r=!1}={}){if(r)return void this.mkdirpSync(e,{chmod:t});if(this.readOnly)throw h.YW(`mkdir '${e}'`);const A=this.resolveFilename(`mkdir '${e}'`,e);if(this.entries.has(A)||this.listings.has(A))throw h.cT(`mkdir '${e}'`);this.hydrateDirectory(A),this.chmodSync(A,t)}async rmdirPromise(e,t){return this.rmdirSync(e,t)}rmdirSync(e,{recursive:t=!1}={}){if(this.readOnly)throw h.YW(`rmdir '${e}'`);if(t)return void this.removeSync(e);const r=this.resolveFilename(`rmdir '${e}'`,e),A=this.listings.get(r);if(!A)throw h.Ab(`rmdir '${e}'`);if(A.size>0)throw h.re(`rmdir '${e}'`);const n=this.entries.get(r);if(void 0===n)throw h.hq(`rmdir '${e}'`);this.deleteEntry(e,n)}hydrateDirectory(e){const t=this.libzip.dir.add(this.zip,p.y1.relative(p.LZ.root,e));if(-1===t)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(e),this.registerEntry(e,t),t}async linkPromise(e,t){return this.linkSync(e,t)}linkSync(e,t){throw h.Hs(`link '${e}' -> '${t}'`)}async symlinkPromise(e,t){return this.symlinkSync(e,t)}symlinkSync(e,t){if(this.readOnly)throw h.YW(`symlink '${e}' -> '${t}'`);const r=this.resolveFilename(`symlink '${e}' -> '${t}'`,t);if(this.listings.has(r))throw h.GA(`symlink '${e}' -> '${t}'`);if(this.entries.has(r))throw h.cT(`symlink '${e}' -> '${t}'`);const A=this.setFileSource(r,e);this.registerEntry(r,A);if(-1===this.libzip.file.setExternalAttributes(this.zip,A,0,0,this.libzip.ZIP_OPSYS_UNIX,(511|u.Zv)<<16))throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(e,t){"object"==typeof t&&(t=t?t.encoding:void 0);const r=await this.readFileBuffer(e,{asyncDecompress:!0});return t?r.toString(t):r}readFileSync(e,t){"object"==typeof t&&(t=t?t.encoding:void 0);const r=this.readFileBuffer(e);return t?r.toString(t):r}readFileBuffer(e,t={asyncDecompress:!1}){if("string"!=typeof e)throw h.Ch("read");const r=this.resolveFilename(`open '${e}'`,e);if(!this.entries.has(r)&&!this.listings.has(r))throw h.z6(`open '${e}'`);if("/"===e[e.length-1]&&!this.listings.has(r))throw h.Ab(`open '${e}'`);if(this.listings.has(r))throw h.GA("read");const A=this.entries.get(r);if(void 0===A)throw new Error("Unreachable");return this.getFileSource(A,t)}async readdirPromise(e,{withFileTypes:t}={}){return this.readdirSync(e,{withFileTypes:t})}readdirSync(e,{withFileTypes:t}={}){const r=this.resolveFilename(`scandir '${e}'`,e);if(!this.entries.has(r)&&!this.listings.has(r))throw h.z6(`scandir '${e}'`);const A=this.listings.get(r);if(!A)throw h.Ab(`scandir '${e}'`);const n=[...A];return t?n.map(t=>Object.assign(this.statImpl("lstat",p.y1.join(e,t)),{name:t})):n}async readlinkPromise(e){const t=this.prepareReadlink(e);return(await this.getFileSource(t,{asyncDecompress:!0})).toString()}readlinkSync(e){const t=this.prepareReadlink(e);return this.getFileSource(t).toString()}prepareReadlink(e){const t=this.resolveFilename(`readlink '${e}'`,e,!1);if(!this.entries.has(t)&&!this.listings.has(t))throw h.z6(`readlink '${e}'`);if("/"===e[e.length-1]&&!this.listings.has(t))throw h.Ab(`open '${e}'`);if(this.listings.has(t))throw h.hq(`readlink '${e}'`);const r=this.entries.get(t);if(void 0===r)throw new Error("Unreachable");if(!this.isSymbolicLink(r))throw h.hq(`readlink '${e}'`);return r}async truncatePromise(e,t=0){const r=this.resolveFilename(`open '${e}'`,e),A=this.entries.get(r);if(void 0===A)throw h.hq(`open '${e}'`);const n=await this.getFileSource(A,{asyncDecompress:!0}),o=Buffer.alloc(t,0);return n.copy(o),await this.writeFilePromise(e,o)}truncateSync(e,t=0){const r=this.resolveFilename(`open '${e}'`,e),A=this.entries.get(r);if(void 0===A)throw h.hq(`open '${e}'`);const n=this.getFileSource(A),o=Buffer.alloc(t,0);return n.copy(o),this.writeFileSync(e,o)}watch(e,t,r){let A;switch(typeof t){case"function":case"string":case"undefined":A=!0;break;default:({persistent:A=!0}=t)}if(!A)return{on:()=>{},close:()=>{}};const n=setInterval(()=>{},864e5);return{on:()=>{},close:()=>{clearInterval(n)}}}watchFile(e,t,r){const A=this.resolveFilename(`open '${e}'`,e);return(0,l._x)(this,A,t,r)}unwatchFile(e,t){const r=this.resolveFilename(`open '${e}'`,e);return(0,l.nd)(this,r,t)}}},53660:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var A=r(35747),n=r(5944),o=r(78420),i=r(90739),s=r(38783),a=r(46009);const c=2147483648,g=/.*?(?await this.baseFs.openPromise(e,t,r),async(e,{subPath:A})=>this.remapFd(e,await e.openPromise(A,t,r)))}openSync(e,t,r){return this.makeCallSync(e,()=>this.baseFs.openSync(e,t,r),(e,{subPath:A})=>this.remapFd(e,e.openSync(A,t,r)))}async opendirPromise(e,t){return await this.makeCallPromise(e,async()=>await this.baseFs.opendirPromise(e,t),async(e,{subPath:r})=>await e.opendirPromise(r,t),{requireSubpath:!1})}opendirSync(e,t){return this.makeCallSync(e,()=>this.baseFs.opendirSync(e,t),(e,{subPath:r})=>e.opendirSync(r,t),{requireSubpath:!1})}async readPromise(e,t,r,A,n){if(0==(e&c))return await this.baseFs.readPromise(e,t,r,A,n);const o=this.fdMap.get(e);if(void 0===o)throw Object.assign(new Error("EBADF: bad file descriptor, read"),{code:"EBADF"});const[i,s]=o;return await i.readPromise(s,t,r,A,n)}readSync(e,t,r,A,n){if(0==(e&c))return this.baseFs.readSync(e,t,r,A,n);const o=this.fdMap.get(e);if(void 0===o)throw Object.assign(new Error("EBADF: bad file descriptor, read"),{code:"EBADF"});const[i,s]=o;return i.readSync(s,t,r,A,n)}async writePromise(e,t,r,A,n){if(0==(e&c))return"string"==typeof t?await this.baseFs.writePromise(e,t,r):await this.baseFs.writePromise(e,t,r,A,n);const o=this.fdMap.get(e);if(void 0===o)throw Object.assign(new Error("EBADF: bad file descriptor, write"),{code:"EBADF"});const[i,s]=o;return"string"==typeof t?await i.writePromise(s,t,r):await i.writePromise(s,t,r,A,n)}writeSync(e,t,r,A,n){if(0==(e&c))return"string"==typeof t?this.baseFs.writeSync(e,t,r):this.baseFs.writeSync(e,t,r,A,n);const o=this.fdMap.get(e);if(void 0===o)throw Object.assign(new Error("EBADF: bad file descriptor, write"),{code:"EBADF"});const[i,s]=o;return"string"==typeof t?i.writeSync(s,t,r):i.writeSync(s,t,r,A,n)}async closePromise(e){if(0==(e&c))return await this.baseFs.closePromise(e);const t=this.fdMap.get(e);if(void 0===t)throw Object.assign(new Error("EBADF: bad file descriptor, close"),{code:"EBADF"});this.fdMap.delete(e);const[r,A]=t;return await r.closePromise(A)}closeSync(e){if(0==(e&c))return this.baseFs.closeSync(e);const t=this.fdMap.get(e);if(void 0===t)throw Object.assign(new Error("EBADF: bad file descriptor, close"),{code:"EBADF"});this.fdMap.delete(e);const[r,A]=t;return r.closeSync(A)}createReadStream(e,t){return null===e?this.baseFs.createReadStream(e,t):this.makeCallSync(e,()=>this.baseFs.createReadStream(e,t),(e,{subPath:r})=>e.createReadStream(r,t))}createWriteStream(e,t){return null===e?this.baseFs.createWriteStream(e,t):this.makeCallSync(e,()=>this.baseFs.createWriteStream(e,t),(e,{subPath:r})=>e.createWriteStream(r,t))}async realpathPromise(e){return await this.makeCallPromise(e,async()=>await this.baseFs.realpathPromise(e),async(e,{archivePath:t,subPath:r})=>{let A=this.realPaths.get(t);return void 0===A&&(A=await this.baseFs.realpathPromise(t),this.realPaths.set(t,A)),this.pathUtils.join(A,this.pathUtils.relative(a.LZ.root,await e.realpathPromise(r)))})}realpathSync(e){return this.makeCallSync(e,()=>this.baseFs.realpathSync(e),(e,{archivePath:t,subPath:r})=>{let A=this.realPaths.get(t);return void 0===A&&(A=this.baseFs.realpathSync(t),this.realPaths.set(t,A)),this.pathUtils.join(A,this.pathUtils.relative(a.LZ.root,e.realpathSync(r)))})}async existsPromise(e){return await this.makeCallPromise(e,async()=>await this.baseFs.existsPromise(e),async(e,{subPath:t})=>await e.existsPromise(t))}existsSync(e){return this.makeCallSync(e,()=>this.baseFs.existsSync(e),(e,{subPath:t})=>e.existsSync(t))}async accessPromise(e,t){return await this.makeCallPromise(e,async()=>await this.baseFs.accessPromise(e,t),async(e,{subPath:r})=>await e.accessPromise(r,t))}accessSync(e,t){return this.makeCallSync(e,()=>this.baseFs.accessSync(e,t),(e,{subPath:r})=>e.accessSync(r,t))}async statPromise(e){return await this.makeCallPromise(e,async()=>await this.baseFs.statPromise(e),async(e,{subPath:t})=>await e.statPromise(t))}statSync(e){return this.makeCallSync(e,()=>this.baseFs.statSync(e),(e,{subPath:t})=>e.statSync(t))}async lstatPromise(e){return await this.makeCallPromise(e,async()=>await this.baseFs.lstatPromise(e),async(e,{subPath:t})=>await e.lstatPromise(t))}lstatSync(e){return this.makeCallSync(e,()=>this.baseFs.lstatSync(e),(e,{subPath:t})=>e.lstatSync(t))}async chmodPromise(e,t){return await this.makeCallPromise(e,async()=>await this.baseFs.chmodPromise(e,t),async(e,{subPath:r})=>await e.chmodPromise(r,t))}chmodSync(e,t){return this.makeCallSync(e,()=>this.baseFs.chmodSync(e,t),(e,{subPath:r})=>e.chmodSync(r,t))}async chownPromise(e,t,r){return await this.makeCallPromise(e,async()=>await this.baseFs.chownPromise(e,t,r),async(e,{subPath:A})=>await e.chownPromise(A,t,r))}chownSync(e,t,r){return this.makeCallSync(e,()=>this.baseFs.chownSync(e,t,r),(e,{subPath:A})=>e.chownSync(A,t,r))}async renamePromise(e,t){return await this.makeCallPromise(e,async()=>await this.makeCallPromise(t,async()=>await this.baseFs.renamePromise(e,t),async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),async(e,{subPath:r})=>await this.makeCallPromise(t,async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},async(t,{subPath:A})=>{if(e!==t)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return await e.renamePromise(r,A)}))}renameSync(e,t){return this.makeCallSync(e,()=>this.makeCallSync(t,()=>this.baseFs.renameSync(e,t),async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),(e,{subPath:r})=>this.makeCallSync(t,()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},(t,{subPath:A})=>{if(e!==t)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return e.renameSync(r,A)}))}async copyFilePromise(e,t,r=0){const n=async(e,t,n,o)=>{if(0!=(r&A.constants.COPYFILE_FICLONE_FORCE))throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${t}' -> ${o}'`),{code:"EXDEV"});if(r&A.constants.COPYFILE_EXCL&&await this.existsPromise(t))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${t}' -> '${o}'`),{code:"EEXIST"});let i;try{i=await e.readFilePromise(t)}catch(e){throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${t}' -> '${o}'`),{code:"EINVAL"})}await n.writeFilePromise(o,i)};return await this.makeCallPromise(e,async()=>await this.makeCallPromise(t,async()=>await this.baseFs.copyFilePromise(e,t,r),async(t,{subPath:r})=>await n(this.baseFs,e,t,r)),async(e,{subPath:A})=>await this.makeCallPromise(t,async()=>await n(e,A,this.baseFs,t),async(t,{subPath:o})=>e!==t?await n(e,A,t,o):await e.copyFilePromise(A,o,r)))}copyFileSync(e,t,r=0){const n=(e,t,n,o)=>{if(0!=(r&A.constants.COPYFILE_FICLONE_FORCE))throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${t}' -> ${o}'`),{code:"EXDEV"});if(r&A.constants.COPYFILE_EXCL&&this.existsSync(t))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${t}' -> '${o}'`),{code:"EEXIST"});let i;try{i=e.readFileSync(t)}catch(e){throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${t}' -> '${o}'`),{code:"EINVAL"})}n.writeFileSync(o,i)};return this.makeCallSync(e,()=>this.makeCallSync(t,()=>this.baseFs.copyFileSync(e,t,r),(t,{subPath:r})=>n(this.baseFs,e,t,r)),(e,{subPath:A})=>this.makeCallSync(t,()=>n(e,A,this.baseFs,t),(t,{subPath:o})=>e!==t?n(e,A,t,o):e.copyFileSync(A,o,r)))}async appendFilePromise(e,t,r){return await this.makeCallPromise(e,async()=>await this.baseFs.appendFilePromise(e,t,r),async(e,{subPath:A})=>await e.appendFilePromise(A,t,r))}appendFileSync(e,t,r){return this.makeCallSync(e,()=>this.baseFs.appendFileSync(e,t,r),(e,{subPath:A})=>e.appendFileSync(A,t,r))}async writeFilePromise(e,t,r){return await this.makeCallPromise(e,async()=>await this.baseFs.writeFilePromise(e,t,r),async(e,{subPath:A})=>await e.writeFilePromise(A,t,r))}writeFileSync(e,t,r){return this.makeCallSync(e,()=>this.baseFs.writeFileSync(e,t,r),(e,{subPath:A})=>e.writeFileSync(A,t,r))}async unlinkPromise(e){return await this.makeCallPromise(e,async()=>await this.baseFs.unlinkPromise(e),async(e,{subPath:t})=>await e.unlinkPromise(t))}unlinkSync(e){return this.makeCallSync(e,()=>this.baseFs.unlinkSync(e),(e,{subPath:t})=>e.unlinkSync(t))}async utimesPromise(e,t,r){return await this.makeCallPromise(e,async()=>await this.baseFs.utimesPromise(e,t,r),async(e,{subPath:A})=>await e.utimesPromise(A,t,r))}utimesSync(e,t,r){return this.makeCallSync(e,()=>this.baseFs.utimesSync(e,t,r),(e,{subPath:A})=>e.utimesSync(A,t,r))}async mkdirPromise(e,t){return await this.makeCallPromise(e,async()=>await this.baseFs.mkdirPromise(e,t),async(e,{subPath:r})=>await e.mkdirPromise(r,t))}mkdirSync(e,t){return this.makeCallSync(e,()=>this.baseFs.mkdirSync(e,t),(e,{subPath:r})=>e.mkdirSync(r,t))}async rmdirPromise(e,t){return await this.makeCallPromise(e,async()=>await this.baseFs.rmdirPromise(e,t),async(e,{subPath:r})=>await e.rmdirPromise(r,t))}rmdirSync(e,t){return this.makeCallSync(e,()=>this.baseFs.rmdirSync(e,t),(e,{subPath:r})=>e.rmdirSync(r,t))}async linkPromise(e,t){return await this.makeCallPromise(t,async()=>await this.baseFs.linkPromise(e,t),async(t,{subPath:r})=>await t.linkPromise(e,r))}linkSync(e,t){return this.makeCallSync(t,()=>this.baseFs.linkSync(e,t),(t,{subPath:r})=>t.linkSync(e,r))}async symlinkPromise(e,t,r){return await this.makeCallPromise(t,async()=>await this.baseFs.symlinkPromise(e,t,r),async(t,{subPath:r})=>await t.symlinkPromise(e,r))}symlinkSync(e,t,r){return this.makeCallSync(t,()=>this.baseFs.symlinkSync(e,t,r),(t,{subPath:r})=>t.symlinkSync(e,r))}async readFilePromise(e,t){return this.makeCallPromise(e,async()=>{switch(t){case"utf8":default:return await this.baseFs.readFilePromise(e,t)}},async(e,{subPath:r})=>await e.readFilePromise(r,t))}readFileSync(e,t){return this.makeCallSync(e,()=>{switch(t){case"utf8":default:return this.baseFs.readFileSync(e,t)}},(e,{subPath:r})=>e.readFileSync(r,t))}async readdirPromise(e,{withFileTypes:t}={}){return await this.makeCallPromise(e,async()=>await this.baseFs.readdirPromise(e,{withFileTypes:t}),async(e,{subPath:r})=>await e.readdirPromise(r,{withFileTypes:t}),{requireSubpath:!1})}readdirSync(e,{withFileTypes:t}={}){return this.makeCallSync(e,()=>this.baseFs.readdirSync(e,{withFileTypes:t}),(e,{subPath:r})=>e.readdirSync(r,{withFileTypes:t}),{requireSubpath:!1})}async readlinkPromise(e){return await this.makeCallPromise(e,async()=>await this.baseFs.readlinkPromise(e),async(e,{subPath:t})=>await e.readlinkPromise(t))}readlinkSync(e){return this.makeCallSync(e,()=>this.baseFs.readlinkSync(e),(e,{subPath:t})=>e.readlinkSync(t))}async truncatePromise(e,t){return await this.makeCallPromise(e,async()=>await this.baseFs.truncatePromise(e,t),async(e,{subPath:r})=>await e.truncatePromise(r,t))}truncateSync(e,t){return this.makeCallSync(e,()=>this.baseFs.truncateSync(e,t),(e,{subPath:r})=>e.truncateSync(r,t))}watch(e,t,r){return this.makeCallSync(e,()=>this.baseFs.watch(e,t,r),(e,{subPath:A})=>e.watch(A,t,r))}watchFile(e,t,r){return this.makeCallSync(e,()=>this.baseFs.watchFile(e,t,r),()=>(0,s._x)(this,e,t,r))}unwatchFile(e,t){return this.makeCallSync(e,()=>this.baseFs.unwatchFile(e,t),()=>(0,s.nd)(this,e,t))}async makeCallPromise(e,t,r,{requireSubpath:A=!0}={}){if("string"!=typeof e)return await t();const n=this.resolve(e),o=this.findZip(n);return o?A&&"/"===o.subPath?await t():await this.getZipPromise(o.archivePath,async e=>await r(e,o)):await t()}makeCallSync(e,t,r,{requireSubpath:A=!0}={}){if("string"!=typeof e)return t();const n=this.resolve(e),o=this.findZip(n);return o?A&&"/"===o.subPath?t():this.getZipSync(o.archivePath,e=>r(e,o)):t()}findZip(e){if(this.filter&&!this.filter.test(e))return null;let t="";for(;;){const r=g.exec(e.substr(t.length));if(!r)return null;if(t=this.pathUtils.join(t,r[0]),!1===this.isZip.has(t)){if(this.notZip.has(t))continue;try{if(!this.baseFs.lstatSync(t).isFile()){this.notZip.add(t);continue}}catch(e){return null}this.isZip.add(t)}return{archivePath:t,subPath:this.pathUtils.join(a.LZ.root,e.substr(t.length))}}}limitOpenFiles(e){if(null===this.zipInstances)return;const t=Date.now();let r=t+this.maxAge,A=null===e?0:this.zipInstances.size-e;for(const[n,{zipFs:o,expiresAt:i,refCount:s}]of this.zipInstances.entries())if(0===s&&!o.hasOpenFileHandles())if(t>=i)o.saveAndClose(),this.zipInstances.delete(n),A-=1;else{if(null===e||A<=0){r=i;break}o.saveAndClose(),this.zipInstances.delete(n),A-=1}null===this.limitOpenFilesTimeout&&(null===e&&this.zipInstances.size>0||null!==e)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},r-t).unref())}async getZipPromise(e,t){const r=async()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:await this.baseFs.statPromise(e)});if(this.zipInstances){let A=this.zipInstances.get(e);if(!A){const t=await r();A=this.zipInstances.get(e),A||(A={zipFs:new i.d(e,t),expiresAt:0,refCount:0})}this.zipInstances.delete(e),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(e,A),A.expiresAt=Date.now()+this.maxAge,A.refCount+=1;try{return await t(A.zipFs)}finally{A.refCount-=1}}else{const A=new i.d(e,await r());try{return await t(A)}finally{A.saveAndClose()}}}getZipSync(e,t){const r=()=>({baseFs:this.baseFs,libzip:this.libzip,readOnly:this.readOnlyArchives,stats:this.baseFs.statSync(e)});if(this.zipInstances){let A=this.zipInstances.get(e);return A||(A={zipFs:new i.d(e,r()),expiresAt:0,refCount:0}),this.zipInstances.delete(e),this.limitOpenFiles(this.maxOpenFiles-1),this.zipInstances.set(e,A),A.expiresAt=Date.now()+this.maxAge,t(A.zipFs)}{const A=new i.d(e,r());try{return t(A)}finally{A.saveAndClose()}}}}},19697:(e,t,r)=>{"use strict";r.d(t,{a:()=>o});var A=r(26984);class n{constructor(e,t,r={}){this.path=e,this.nextDirent=t,this.opts=r,this.closed=!1}throwIfClosed(){if(this.closed)throw A.Xh()}async*[Symbol.asyncIterator](){try{let e;for(;null!==(e=await this.read());)yield e}finally{await this.close()}}read(e){const t=this.readSync();return void 0!==e?e(null,t):Promise.resolve(t)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),void 0!==e?e(null):Promise.resolve()}closeSync(){var e,t;this.throwIfClosed(),null===(t=(e=this.opts).onClose)||void 0===t||t.call(e),this.closed=!0}}function o(e,t,r,A){return new n(t,()=>{const A=r.shift();return void 0===A?null:Object.assign(e.statSync(e.pathUtils.join(t,A)),{name:A})},A)}},38783:(e,t,r)=>{"use strict";r.d(t,{L:()=>u,nd:()=>l,_x:()=>g});var A,n,o=r(28614),i=r(65760);function s(e,t){if(e!==t)throw new Error(`Invalid StatWatcher status: expected '${t}', got '${e}'`)}!function(e){e.Change="change",e.Stop="stop"}(A||(A={})),function(e){e.Ready="ready",e.Running="running",e.Stopped="stopped"}(n||(n={}));class a extends o.EventEmitter{constructor(e,t,{bigint:r=!1}={}){super(),this.status=n.Ready,this.changeListeners=new Map,this.startTimeout=null,this.fakeFs=e,this.path=t,this.bigint=r,this.lastStats=this.stat()}static create(e,t,r){const A=new a(e,t,r);return A.start(),A}start(){s(this.status,n.Ready),this.status=n.Running,this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit(A.Change,this.lastStats,this.lastStats)},3)}stop(){s(this.status,n.Running),this.status=n.Stopped,null!==this.startTimeout&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit(A.Stop)}stat(){try{return this.fakeFs.statSync(this.path)}catch(e){if("ENOENT"===e.code)return i.makeEmptyStats();throw e}}makeInterval(e){const t=setInterval(()=>{const e=this.stat(),t=this.lastStats;i.areStatsEqual(e,t)||(this.lastStats=e,this.emit(A.Change,e,t))},e.interval);return e.persistent?t:t.unref()}registerChangeListener(e,t){this.addListener(A.Change,e),this.changeListeners.set(e,this.makeInterval(t))}unregisterChangeListener(e){this.removeListener(A.Change,e);const t=this.changeListeners.get(e);void 0!==t&&clearInterval(t),this.changeListeners.delete(e)}unregisterAllChangeListeners(){for(const e of this.changeListeners.keys())this.unregisterChangeListener(e)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(const e of this.changeListeners.values())e.ref();return this}unref(){for(const e of this.changeListeners.values())e.unref();return this}}const c=new WeakMap;function g(e,t,r,A){let n,o,i,s;switch(typeof r){case"function":n=!1,o=!0,i=5007,s=r;break;default:({bigint:n=!1,persistent:o=!0,interval:i=5007}=r),s=A}let g=c.get(e);void 0===g&&c.set(e,g=new Map);let l=g.get(t);return void 0===l&&(l=a.create(e,t,{bigint:n}),g.set(t,l)),l.registerChangeListener(s,{persistent:o,interval:i}),l}function l(e,t,r){const A=c.get(e);if(void 0===A)return;const n=A.get(t);void 0!==n&&(void 0===r?n.unregisterAllChangeListeners():n.unregisterChangeListener(r),n.hasChangeListeners()||(n.stop(),A.delete(t)))}function u(e){const t=c.get(e);if(void 0!==t)for(const r of t.keys())l(e,r)}},22004:(e,t,r)=>{"use strict";r.d(t,{wK:()=>A,QB:()=>n,Pe:()=>o,Zv:()=>i});const A=61440,n=16384,o=32768,i=40960},26984:(e,t,r)=>{"use strict";function A(e,t){return Object.assign(new Error(`${e}: ${t}`),{code:e})}function n(e){return A("EBUSY",e)}function o(e,t){return A("ENOSYS",`${e}, ${t}`)}function i(e){return A("EINVAL","invalid argument, "+e)}function s(e){return A("EBADF","bad file descriptor, "+e)}function a(e){return A("ENOENT","no such file or directory, "+e)}function c(e){return A("ENOTDIR","not a directory, "+e)}function g(e){return A("EISDIR","illegal operation on a directory, "+e)}function l(e){return A("EEXIST","file already exists, "+e)}function u(e){return A("EROFS","read-only filesystem, "+e)}function h(e){return A("ENOTEMPTY","directory not empty, "+e)}function p(e){return A("EOPNOTSUPP","operation not supported, "+e)}function d(){return A("ERR_DIR_CLOSED","Directory handle was closed")}r.d(t,{Vw:()=>n,bk:()=>o,hq:()=>i,Ch:()=>s,z6:()=>a,Ab:()=>c,GA:()=>g,cT:()=>l,YW:()=>u,re:()=>h,Hs:()=>p,Xh:()=>d,Yn:()=>C});class C extends Error{constructor(e,t){super(e),this.name="Libzip Error",this.code=t}}},43896:(e,t,r)=>{"use strict";r.r(t),r.d(t,{AliasFS:()=>u.K,CwdFS:()=>h.M,DEFAULT_COMPRESSION_LEVEL:()=>l.k,FakeFS:()=>g.uY,Filename:()=>s.QS,JailFS:()=>p.n,LazyFS:()=>d.v,NoFS:()=>f,NodeFS:()=>i.S,PortablePath:()=>s.LZ,PosixFS:()=>I.i,ProxiedFS:()=>E.p,VirtualFS:()=>B.p,ZipFS:()=>l.d,ZipOpenFS:()=>y.A,extendFs:()=>Q,normalizeLineEndings:()=>g.qH,npath:()=>s.cS,opendir:()=>c.a,patchFs:()=>w,ppath:()=>s.y1,statUtils:()=>a,toFilename:()=>s.Zu,xfs:()=>S});var A=r(12087),n=r.n(A),o=r(31669),i=r(78420),s=r(46009),a=r(65760),c=r(19697),g=r(5944),l=r(90739),u=r(14626),h=r(75448),p=r(10489),d=r(15037);const C=()=>Object.assign(new Error("ENOSYS: unsupported filesystem access"),{code:"ENOSYS"});class f extends g.uY{constructor(){super(s.y1)}getExtractHint(){throw C()}getRealPath(){throw C()}resolve(){throw C()}async openPromise(){throw C()}openSync(){throw C()}async opendirPromise(){throw C()}opendirSync(){throw C()}async readPromise(){throw C()}readSync(){throw C()}async writePromise(){throw C()}writeSync(){throw C()}async closePromise(){throw C()}closeSync(){throw C()}createWriteStream(){throw C()}createReadStream(){throw C()}async realpathPromise(){throw C()}realpathSync(){throw C()}async readdirPromise(){throw C()}readdirSync(){throw C()}async existsPromise(e){throw C()}existsSync(e){throw C()}async accessPromise(){throw C()}accessSync(){throw C()}async statPromise(){throw C()}statSync(){throw C()}async lstatPromise(e){throw C()}lstatSync(e){throw C()}async chmodPromise(){throw C()}chmodSync(){throw C()}async chownPromise(){throw C()}chownSync(){throw C()}async mkdirPromise(){throw C()}mkdirSync(){throw C()}async rmdirPromise(){throw C()}rmdirSync(){throw C()}async linkPromise(){throw C()}linkSync(){throw C()}async symlinkPromise(){throw C()}symlinkSync(){throw C()}async renamePromise(){throw C()}renameSync(){throw C()}async copyFilePromise(){throw C()}copyFileSync(){throw C()}async appendFilePromise(){throw C()}appendFileSync(){throw C()}async writeFilePromise(){throw C()}writeFileSync(){throw C()}async unlinkPromise(){throw C()}unlinkSync(){throw C()}async utimesPromise(){throw C()}utimesSync(){throw C()}async readFilePromise(){throw C()}readFileSync(){throw C()}async readlinkPromise(){throw C()}readlinkSync(){throw C()}async truncatePromise(){throw C()}truncateSync(){throw C()}watch(){throw C()}watchFile(){throw C()}unwatchFile(){throw C()}}f.instance=new f;var I=r(39725),E=r(42096),B=r(17674),y=r(53660);function m(e){const t=s.cS.toPortablePath(n().tmpdir()),r=Math.ceil(4294967296*Math.random()).toString(16).padStart(8,"0");return s.y1.join(t,`${e}${r}`)}function w(e,t){const r=new Set(["accessSync","appendFileSync","createReadStream","chmodSync","chownSync","closeSync","copyFileSync","linkSync","lstatSync","lutimesSync","mkdirSync","openSync","opendirSync","readSync","readlinkSync","readFileSync","readdirSync","readlinkSync","realpathSync","renameSync","rmdirSync","statSync","symlinkSync","truncateSync","unlinkSync","unwatchFile","utimesSync","watch","watchFile","writeFileSync","writeSync"]),A=new Set(["accessPromise","appendFilePromise","chmodPromise","chownPromise","closePromise","copyFilePromise","linkPromise","lstatPromise","lutimesPromise","mkdirPromise","openPromise","opendirPromise","readdirPromise","realpathPromise","readFilePromise","readdirPromise","readlinkPromise","renamePromise","rmdirPromise","statPromise","symlinkPromise","truncatePromise","unlinkPromise","utimesPromise","writeFilePromise","writeSync"]),n=new Set(["appendFilePromise","chmodPromise","chownPromise","closePromise","readPromise","readFilePromise","statPromise","truncatePromise","utimesPromise","writePromise","writeFilePromise"]),i=(e,t,r)=>{const A=e[t];e[t]=r,void 0!==(null==A?void 0:A[o.promisify.custom])&&(r[o.promisify.custom]=A[o.promisify.custom])};i(e,"exists",(e,...r)=>{const A="function"==typeof r[r.length-1]?r.pop():()=>{};process.nextTick(()=>{t.existsPromise(e).then(e=>{A(e)},()=>{A(!1)})})}),i(e,"read",(e,r,...A)=>{const n="function"==typeof A[A.length-1]?A.pop():()=>{};process.nextTick(()=>{t.readPromise(e,r,...A).then(e=>{n(null,e,r)},e=>{n(e)})})});for(const r of A){const A=r.replace(/Promise$/,"");if(void 0===e[A])continue;const n=t[r];if(void 0===n)continue;i(e,A,(...e)=>{const r="function"==typeof e[e.length-1]?e.pop():()=>{};process.nextTick(()=>{n.apply(t,e).then(e=>{r(null,e)},e=>{r(e)})})})}e.realpath.native=e.realpath,i(e,"existsSync",e=>{try{return t.existsSync(e)}catch(e){return!1}});for(const A of r){const r=A;if(void 0===e[r])continue;const n=t[A];void 0!==n&&i(e,r,n.bind(t))}e.realpathSync.native=e.realpathSync;{const r=process.emitWarning;let o;process.emitWarning=()=>{};try{o=e.promises}finally{process.emitWarning=r}if(void 0!==o){for(const e of A){const r=e.replace(/Promise$/,"");if(void 0===o[r])continue;const A=t[e];void 0!==A&&("open"!==e&&i(o,r,A.bind(t)))}class e{constructor(e){this.fd=e}}for(const r of n){const A=r.replace(/Promise$/,""),n=t[r];void 0!==n&&i(e.prototype,A,(function(...e){return n.call(t,this.fd,...e)}))}i(o,"open",async(...r)=>{const A=await t.openPromise(...r);return new e(A)})}}e.read[o.promisify.custom]=async(e,r,...A)=>{const n=t.readPromise(e,r,...A);return{bytesRead:await n,buffer:r}}}function Q(e,t){const r=Object.create(e);return w(r,t),r}const D=new Set;let b=!1;function v(){b||(b=!0,process.once("exit",()=>{S.rmtempSync()}))}const S=Object.assign(new i.S,{detachTemp(e){D.delete(e)},mktempSync(e){for(v();;){const t=m("xfs-");try{this.mkdirSync(t)}catch(e){if("EEXIST"===e.code)continue;throw e}const r=this.realpathSync(t);if(D.add(r),void 0===e)return t;try{return e(r)}finally{if(D.has(r)){D.delete(r);try{this.removeSync(r)}catch(e){}}}}},async mktempPromise(e){for(v();;){const t=m("xfs-");try{await this.mkdirPromise(t)}catch(e){if("EEXIST"===e.code)continue;throw e}const r=await this.realpathPromise(t);if(D.add(r),void 0===e)return r;try{return await e(r)}finally{if(D.has(r)){D.delete(r);try{await this.removePromise(r)}catch(e){}}}}},async rmtempPromise(){await Promise.all(Array.from(D.values()).map(async e=>{try{await S.removePromise(e,{maxRetries:0}),D.delete(e)}catch(e){}}))},rmtempSync(){for(const e of D)try{S.removeSync(e),D.delete(e)}catch(e){}}})},46009:(e,t,r)=>{"use strict";r.d(t,{LZ:()=>i,QS:()=>s,cS:()=>a,y1:()=>c,CI:()=>f,Zu:()=>I});var A,n=r(85622),o=r.n(n);!function(e){e[e.File=0]="File",e[e.Portable=1]="Portable",e[e.Native=2]="Native"}(A||(A={}));const i={root:"/",dot:"."},s={nodeModules:"node_modules",manifest:"package.json",lockfile:"yarn.lock",pnpJs:".pnp.js",rc:".yarnrc.yml"},a=Object.create(o()),c=Object.create(o().posix);a.cwd=()=>process.cwd(),c.cwd=()=>C(process.cwd()),c.resolve=(...e)=>e.length>0&&c.isAbsolute(e[0])?o().posix.resolve(...e):o().posix.resolve(c.cwd(),...e);const g=function(e,t,r){return(t=e.normalize(t))===(r=e.normalize(r))?".":(t.endsWith(e.sep)||(t+=e.sep),r.startsWith(t)?r.slice(t.length):null)};a.fromPortablePath=d,a.toPortablePath=C,a.contains=(e,t)=>g(a,e,t),c.contains=(e,t)=>g(c,e,t);const l=/^([a-zA-Z]:.*)$/,u=/^\\\\(\.\\)?(.*)$/,h=/^\/([a-zA-Z]:.*)$/,p=/^\/unc\/(\.dot\/)?(.*)$/;function d(e){if("win32"!==process.platform)return e;if(e.match(h))e=e.replace(h,"$1");else{if(!e.match(p))return e;e=e.replace(p,(e,t,r)=>`\\\\${t?".\\":""}${r}`)}return e.replace(/\//g,"\\")}function C(e){return"win32"!==process.platform?e:(e.match(l)?e=e.replace(l,"/$1"):e.match(u)&&(e=e.replace(u,(e,t,r)=>`/unc/${t?".dot/":""}${r}`)),e.replace(/\\/g,"/"))}function f(e,t){return e===a?d(t):C(t)}function I(e){if(""!==a.parse(e).dir||""!==c.parse(e).dir)throw new Error(`Invalid filename: "${e}"`);return e}},65760:(e,t,r)=>{"use strict";r.r(t),r.d(t,{DirEntry:()=>n,StatEntry:()=>o,makeDefaultStats:()=>i,makeEmptyStats:()=>s,areStatsEqual:()=>a});var A=r(22004);class n{constructor(){this.name="",this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&A.wK)===A.QB}isFIFO(){return!1}isFile(){return(this.mode&A.wK)===A.Pe}isSocket(){return!1}isSymbolicLink(){return(this.mode&A.wK)===A.Zv}}class o{constructor(){this.dev=0,this.ino=0,this.mode=0,this.nlink=1,this.rdev=0,this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&A.wK)===A.QB}isFIFO(){return!1}isFile(){return(this.mode&A.wK)===A.Pe}isSocket(){return!1}isSymbolicLink(){return(this.mode&A.wK)===A.Zv}}function i(){return Object.assign(new o,{uid:0,gid:0,size:0,blksize:0,atimeMs:0,mtimeMs:0,ctimeMs:0,birthtimeMs:0,atime:new Date(0),mtime:new Date(0),ctime:new Date(0),birthtime:new Date(0),mode:420|A.Pe})}function s(){return Object.assign(i(),{nlink:0,blocks:0,mode:0})}function a(e,t){return e.atimeMs===t.atimeMs&&(e.birthtimeMs===t.birthtimeMs&&(e.blksize===t.blksize&&(e.blocks===t.blocks&&(e.ctimeMs===t.ctimeMs&&(e.dev===t.dev&&(e.gid===t.gid&&(e.ino===t.ino&&(e.isBlockDevice()===t.isBlockDevice()&&(e.isCharacterDevice()===t.isCharacterDevice()&&(e.isDirectory()===t.isDirectory()&&(e.isFIFO()===t.isFIFO()&&(e.isFile()===t.isFile()&&(e.isSocket()===t.isSocket()&&(e.isSymbolicLink()===t.isSymbolicLink()&&(e.mode===t.mode&&(e.mtimeMs===t.mtimeMs&&(e.nlink===t.nlink&&(e.rdev===t.rdev&&(e.size===t.size&&e.uid===t.uid)))))))))))))))))))}},65281:(e,t,r)=>{"use strict";r.r(t),r.d(t,{getLibzipPromise:()=>s,getLibzipSync:()=>i});const A=["number","number"];var n;!function(e){e[e.ZIP_ER_OK=0]="ZIP_ER_OK",e[e.ZIP_ER_MULTIDISK=1]="ZIP_ER_MULTIDISK",e[e.ZIP_ER_RENAME=2]="ZIP_ER_RENAME",e[e.ZIP_ER_CLOSE=3]="ZIP_ER_CLOSE",e[e.ZIP_ER_SEEK=4]="ZIP_ER_SEEK",e[e.ZIP_ER_READ=5]="ZIP_ER_READ",e[e.ZIP_ER_WRITE=6]="ZIP_ER_WRITE",e[e.ZIP_ER_CRC=7]="ZIP_ER_CRC",e[e.ZIP_ER_ZIPCLOSED=8]="ZIP_ER_ZIPCLOSED",e[e.ZIP_ER_NOENT=9]="ZIP_ER_NOENT",e[e.ZIP_ER_EXISTS=10]="ZIP_ER_EXISTS",e[e.ZIP_ER_OPEN=11]="ZIP_ER_OPEN",e[e.ZIP_ER_TMPOPEN=12]="ZIP_ER_TMPOPEN",e[e.ZIP_ER_ZLIB=13]="ZIP_ER_ZLIB",e[e.ZIP_ER_MEMORY=14]="ZIP_ER_MEMORY",e[e.ZIP_ER_CHANGED=15]="ZIP_ER_CHANGED",e[e.ZIP_ER_COMPNOTSUPP=16]="ZIP_ER_COMPNOTSUPP",e[e.ZIP_ER_EOF=17]="ZIP_ER_EOF",e[e.ZIP_ER_INVAL=18]="ZIP_ER_INVAL",e[e.ZIP_ER_NOZIP=19]="ZIP_ER_NOZIP",e[e.ZIP_ER_INTERNAL=20]="ZIP_ER_INTERNAL",e[e.ZIP_ER_INCONS=21]="ZIP_ER_INCONS",e[e.ZIP_ER_REMOVE=22]="ZIP_ER_REMOVE",e[e.ZIP_ER_DELETED=23]="ZIP_ER_DELETED",e[e.ZIP_ER_ENCRNOTSUPP=24]="ZIP_ER_ENCRNOTSUPP",e[e.ZIP_ER_RDONLY=25]="ZIP_ER_RDONLY",e[e.ZIP_ER_NOPASSWD=26]="ZIP_ER_NOPASSWD",e[e.ZIP_ER_WRONGPASSWD=27]="ZIP_ER_WRONGPASSWD",e[e.ZIP_ER_OPNOTSUPP=28]="ZIP_ER_OPNOTSUPP",e[e.ZIP_ER_INUSE=29]="ZIP_ER_INUSE",e[e.ZIP_ER_TELL=30]="ZIP_ER_TELL",e[e.ZIP_ER_COMPRESSED_DATA=31]="ZIP_ER_COMPRESSED_DATA"}(n||(n={}));let o=null;function i(){var e;return null===o&&(e=r(3368),o={get HEAP8(){return e.HEAP8},get HEAPU8(){return e.HEAPU8},errors:n,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_CREATE:1,ZIP_EXCL:2,ZIP_TRUNCATE:8,ZIP_RDONLY:16,ZIP_FL_OVERWRITE:8192,ZIP_FL_COMPRESSED:4,ZIP_OPSYS_DOS:0,ZIP_OPSYS_AMIGA:1,ZIP_OPSYS_OPENVMS:2,ZIP_OPSYS_UNIX:3,ZIP_OPSYS_VM_CMS:4,ZIP_OPSYS_ATARI_ST:5,ZIP_OPSYS_OS_2:6,ZIP_OPSYS_MACINTOSH:7,ZIP_OPSYS_Z_SYSTEM:8,ZIP_OPSYS_CPM:9,ZIP_OPSYS_WINDOWS_NTFS:10,ZIP_OPSYS_MVS:11,ZIP_OPSYS_VSE:12,ZIP_OPSYS_ACORN_RISC:13,ZIP_OPSYS_VFAT:14,ZIP_OPSYS_ALTERNATE_MVS:15,ZIP_OPSYS_BEOS:16,ZIP_OPSYS_TANDEM:17,ZIP_OPSYS_OS_400:18,ZIP_OPSYS_OS_X:19,ZIP_CM_DEFAULT:-1,ZIP_CM_STORE:0,ZIP_CM_DEFLATE:8,uint08S:e._malloc(1),uint16S:e._malloc(2),uint32S:e._malloc(4),uint64S:e._malloc(8),malloc:e._malloc,free:e._free,getValue:e.getValue,open:e.cwrap("zip_open","number",["string","number","number"]),openFromSource:e.cwrap("zip_open_from_source","number",["number","number","number"]),close:e.cwrap("zip_close","number",["number"]),discard:e.cwrap("zip_discard",null,["number"]),getError:e.cwrap("zip_get_error","number",["number"]),getName:e.cwrap("zip_get_name","string",["number","number","number"]),getNumEntries:e.cwrap("zip_get_num_entries","number",["number","number"]),delete:e.cwrap("zip_delete","number",["number","number"]),stat:e.cwrap("zip_stat","number",["number","string","number","number"]),statIndex:e.cwrap("zip_stat_index","number",["number",...A,"number","number"]),fopen:e.cwrap("zip_fopen","number",["number","string","number"]),fopenIndex:e.cwrap("zip_fopen_index","number",["number",...A,"number"]),fread:e.cwrap("zip_fread","number",["number","number","number","number"]),fclose:e.cwrap("zip_fclose","number",["number"]),dir:{add:e.cwrap("zip_dir_add","number",["number","string"])},file:{add:e.cwrap("zip_file_add","number",["number","string","number","number"]),getError:e.cwrap("zip_file_get_error","number",["number"]),getExternalAttributes:e.cwrap("zip_file_get_external_attributes","number",["number",...A,"number","number","number"]),setExternalAttributes:e.cwrap("zip_file_set_external_attributes","number",["number",...A,"number","number","number"]),setMtime:e.cwrap("zip_file_set_mtime","number",["number",...A,"number","number"]),setCompression:e.cwrap("zip_set_file_compression","number",["number",...A,"number","number"])},ext:{countSymlinks:e.cwrap("zip_ext_count_symlinks","number",["number"])},error:{initWithCode:e.cwrap("zip_error_init_with_code",null,["number","number"]),strerror:e.cwrap("zip_error_strerror","string",["number"])},name:{locate:e.cwrap("zip_name_locate","number",["number","string","number"])},source:{fromUnattachedBuffer:e.cwrap("zip_source_buffer_create","number",["number","number","number","number"]),fromBuffer:e.cwrap("zip_source_buffer","number",["number","number",...A,"number"]),free:e.cwrap("zip_source_free",null,["number"]),keep:e.cwrap("zip_source_keep",null,["number"]),open:e.cwrap("zip_source_open","number",["number"]),close:e.cwrap("zip_source_close","number",["number"]),seek:e.cwrap("zip_source_seek","number",["number",...A,"number"]),tell:e.cwrap("zip_source_tell","number",["number"]),read:e.cwrap("zip_source_read","number",["number","number","number"]),error:e.cwrap("zip_source_error","number",["number"]),setMtime:e.cwrap("zip_source_set_mtime","number",["number","number"])},struct:{stat:e.cwrap("zipstruct_stat","number",[]),statS:e.cwrap("zipstruct_statS","number",[]),statName:e.cwrap("zipstruct_stat_name","string",["number"]),statIndex:e.cwrap("zipstruct_stat_index","number",["number"]),statSize:e.cwrap("zipstruct_stat_size","number",["number"]),statCompSize:e.cwrap("zipstruct_stat_comp_size","number",["number"]),statCompMethod:e.cwrap("zipstruct_stat_comp_method","number",["number"]),statMtime:e.cwrap("zipstruct_stat_mtime","number",["number"]),error:e.cwrap("zipstruct_error","number",[]),errorS:e.cwrap("zipstruct_errorS","number",[]),errorCodeZip:e.cwrap("zipstruct_error_code_zip","number",["number"])}}),o}async function s(){return i()}},11640:(e,t,r)=>{"use strict";r.r(t),r.d(t,{parseResolution:()=>i,parseShell:()=>n,parseSyml:()=>I,stringifyResolution:()=>s,stringifySyml:()=>d});var A=r(92962);function n(e,t={isGlobPattern:()=>!1}){try{return(0,A.parse)(e,t)}catch(e){throw e.location&&(e.message=e.message.replace(/(\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}var o=r(98261);function i(e){const t=e.match(/^\*{1,2}\/(.*)/);if(t)throw new Error(`The override for '${e}' includes a glob pattern. Glob patterns have been removed since their behaviours don't match what you'd expect. Set the override to '${t[1]}' instead.`);try{return(0,o.parse)(e)}catch(e){throw e.location&&(e.message=e.message.replace(/(\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}function s(e){let t="";return e.from&&(t+=e.from.fullName,e.from.description&&(t+="@"+e.from.description),t+="/"),t+=e.descriptor.fullName,e.descriptor.description&&(t+="@"+e.descriptor.description),t}var a=r(21194),c=r(85443);const g=/^(?![-?:,\][{}#&*!|>'"%@` \t\r\n]).([ \t]*(?![,\][{}:# \t\r\n]).)*$/,l=["__metadata","version","resolution","dependencies","peerDependencies","dependenciesMeta","peerDependenciesMeta","binaries"];class u{constructor(e){this.data=e}}function h(e){return e.match(g)?e:JSON.stringify(e)}function p(e,t,r){if(null===e)return"null\n";if("number"==typeof e||"boolean"==typeof e)return e.toString()+"\n";if("string"==typeof e)return h(e)+"\n";if(Array.isArray(e)){if(0===e.length)return"[]\n";const r=" ".repeat(t);return"\n"+e.map(e=>`${r}- ${p(e,t+1,!1)}`).join("")}if("object"==typeof e&&e){let A,n;e instanceof u?(A=e.data,n=!1):(A=e,n=!0);const o=" ".repeat(t),i=Object.keys(A);n&&i.sort((e,t)=>{const r=l.indexOf(e),A=l.indexOf(t);return-1===r&&-1===A?et?1:0:-1!==r&&-1===A?-1:-1===r&&-1!==A?1:r-A});const s=i.filter(e=>!function e(t){return void 0===t||"object"==typeof t&&null!==t&&Object.keys(t).every(r=>e(t[r]))}(A[e])).map((e,n)=>{const i=A[e],s=h(e),a=p(i,t+1,!0),c=n>0||r?o:"";return a.startsWith("\n")?`${c}${s}:${a}`:`${c}${s}: ${a}`}).join(0===t?"\n":"")||"\n";return r?"\n"+s:""+s}throw new Error(`Unsupported value type (${e})`)}function d(e){try{const t=p(e,0,!1);return"\n"!==t?t:""}catch(e){throw e.location&&(e.message=e.message.replace(/(\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}d.PreserveOrdering=u;const C=/^(#.*(\r?\n))*?#\s+yarn\s+lockfile\s+v1\r?\n/i;function f(e){if(C.test(e))return function(e){return e.endsWith("\n")||(e+="\n"),(0,c.parse)(e)}(e);const t=(0,a.safeLoad)(e,{schema:a.FAILSAFE_SCHEMA});if(null==t)return{};if("object"!=typeof t)throw new Error(`Expected an indexed object, got a ${typeof t} instead. Does your file follow Yaml's rules?`);if(Array.isArray(t))throw new Error("Expected an indexed object, got an array instead. Does your file follow Yaml's rules?");return t}function I(e){return f(e)}},34432:(e,t,r)=>{"use strict";var A,n;r.d(t,{gY:()=>E,Q$:()=>B,oC:()=>F}),function(e){e.HARD="HARD",e.SOFT="SOFT"}(A||(A={})),function(e){e.DEFAULT="DEFAULT",e.TOP_LEVEL="TOP_LEVEL",e.FALLBACK_EXCLUSION_LIST="FALLBACK_EXCLUSION_LIST",e.FALLBACK_EXCLUSION_ENTRIES="FALLBACK_EXCLUSION_ENTRIES",e.FALLBACK_EXCLUSION_DATA="FALLBACK_EXCLUSION_DATA",e.PACKAGE_REGISTRY_DATA="PACKAGE_REGISTRY_DATA",e.PACKAGE_REGISTRY_ENTRIES="PACKAGE_REGISTRY_ENTRIES",e.PACKAGE_STORE_DATA="PACKAGE_STORE_DATA",e.PACKAGE_STORE_ENTRIES="PACKAGE_STORE_ENTRIES",e.PACKAGE_INFORMATION_DATA="PACKAGE_INFORMATION_DATA",e.PACKAGE_DEPENDENCIES="PACKAGE_DEPENDENCIES",e.PACKAGE_DEPENDENCY="PACKAGE_DEPENDENCY"}(n||(n={}));const o={[n.DEFAULT]:{collapsed:!1,next:{"*":n.DEFAULT}},[n.TOP_LEVEL]:{collapsed:!1,next:{fallbackExclusionList:n.FALLBACK_EXCLUSION_LIST,packageRegistryData:n.PACKAGE_REGISTRY_DATA,"*":n.DEFAULT}},[n.FALLBACK_EXCLUSION_LIST]:{collapsed:!1,next:{"*":n.FALLBACK_EXCLUSION_ENTRIES}},[n.FALLBACK_EXCLUSION_ENTRIES]:{collapsed:!0,next:{"*":n.FALLBACK_EXCLUSION_DATA}},[n.FALLBACK_EXCLUSION_DATA]:{collapsed:!0,next:{"*":n.DEFAULT}},[n.PACKAGE_REGISTRY_DATA]:{collapsed:!1,next:{"*":n.PACKAGE_REGISTRY_ENTRIES}},[n.PACKAGE_REGISTRY_ENTRIES]:{collapsed:!0,next:{"*":n.PACKAGE_STORE_DATA}},[n.PACKAGE_STORE_DATA]:{collapsed:!1,next:{"*":n.PACKAGE_STORE_ENTRIES}},[n.PACKAGE_STORE_ENTRIES]:{collapsed:!0,next:{"*":n.PACKAGE_INFORMATION_DATA}},[n.PACKAGE_INFORMATION_DATA]:{collapsed:!1,next:{packageDependencies:n.PACKAGE_DEPENDENCIES,"*":n.DEFAULT}},[n.PACKAGE_DEPENDENCIES]:{collapsed:!1,next:{"*":n.PACKAGE_DEPENDENCY}},[n.PACKAGE_DEPENDENCY]:{collapsed:!0,next:{"*":n.DEFAULT}}};function i(e,t,r,A){const{next:n}=o[r];return s(t,n[e]||n["*"],A)}function s(e,t,r){const{collapsed:A}=o[t];return Array.isArray(e)?A?function(e,t,r){let A="";A+="[";for(let n=0,o=e.length;ne(t)));const n=r.map((e,t)=>t);return n.sort((e,t)=>{for(const r of A){const A=r[e]r[t]?1:0;if(0!==A)return A}return 0}),n.map(e=>r[e])}function g(e){const t=new Map,r=c(e.fallbackExclusionList||[],[({name:e,reference:t})=>e,({name:e,reference:t})=>t]);for(const{name:e,reference:A}of r){let r=t.get(e);void 0===r&&t.set(e,r=new Set),r.add(A)}return Array.from(t).map(([e,t])=>[e,Array.from(t)])}function l(e){return c(e.fallbackPool||[],([e])=>e)}function u(e){const t=[];for(const[r,A]of c(e.packageRegistry,([e])=>null===e?"0":"1"+e)){const e=[];t.push([r,e]);for(const[t,{packageLocation:n,packageDependencies:o,packagePeers:i,linkType:s,discardFromLookup:a}]of c(A,([e])=>null===e?"0":"1"+e)){const A=[];null===r||null===t||o.has(r)||A.push([r,t]);for(const[e,t]of c(o.entries(),([e])=>e))A.push([e,t]);const g=i&&i.size>0?Array.from(i):void 0,l=a||void 0;e.push([t,{packageLocation:n,packageDependencies:A,packagePeers:g,linkType:s,discardFromLookup:l}])}}return t}function h(e){return c(e.blacklistedLocations||[],e=>e)}function p(e){return{__info:["This file is automatically generated. Do not touch it, or risk","your modifications being lost. We also recommend you not to read","it either without using the @yarnpkg/pnp package, as the data layout","is entirely unspecified and WILL change from a version to another."],dependencyTreeRoots:e.dependencyTreeRoots,enableTopLevelFallback:e.enableTopLevelFallback||!1,ignorePatternData:e.ignorePattern||null,fallbackExclusionList:g(e),fallbackPool:l(e),locationBlacklistData:h(e),packageRegistryData:u(e)}}var d=r(20103),C=r.n(d);function f(e,t){return[e?e+"\n":"","/* eslint-disable */\n\n","try {\n"," Object.freeze({}).detectStrictMode = true;\n","} catch (error) {\n"," throw new Error(`The whole PnP file got strict-mode-ified, which is known to break (Emscripten libraries aren't strict mode). This usually happens when the file goes through Babel.`);\n","}\n","\n","var __non_webpack_module__ = module;\n","\n","function $$SETUP_STATE(hydrateRuntimeState, basePath) {\n",t.replace(/^/gm," "),"}\n","\n",C()()].join("")}function I(e){return JSON.stringify(e,null,2)}function E(e){const t=function(e){return[`return hydrateRuntimeState(${a(e)}, {basePath: basePath || __dirname});\n`].join("")}(p(e));return f(e.shebang,t)}function B(e){const t=p(e),r=(A=e.dataLocation,["var path = require('path');\n",`var dataLocation = path.resolve(__dirname, ${JSON.stringify(A)});\n`,"return hydrateRuntimeState(require(dataLocation), {basePath: basePath || path.dirname(dataLocation)});\n"].join(""));var A;const n=f(e.shebang,r);return{dataFile:I(t),loaderFile:n}}var y=r(35747),m=(r(85622),r(31669)),w=r(46009);var Q,D=r(17674),b=r(32282);!function(e){e.API_ERROR="API_ERROR",e.BLACKLISTED="BLACKLISTED",e.BUILTIN_NODE_RESOLUTION_FAILED="BUILTIN_NODE_RESOLUTION_FAILED",e.MISSING_DEPENDENCY="MISSING_DEPENDENCY",e.MISSING_PEER_DEPENDENCY="MISSING_PEER_DEPENDENCY",e.QUALIFIED_PATH_RESOLUTION_FAILED="QUALIFIED_PATH_RESOLUTION_FAILED",e.INTERNAL="INTERNAL",e.UNDECLARED_DEPENDENCY="UNDECLARED_DEPENDENCY",e.UNSUPPORTED="UNSUPPORTED"}(Q||(Q={}));const v=new Set([Q.BLACKLISTED,Q.BUILTIN_NODE_RESOLUTION_FAILED,Q.MISSING_DEPENDENCY,Q.MISSING_PEER_DEPENDENCY,Q.QUALIFIED_PATH_RESOLUTION_FAILED,Q.UNDECLARED_DEPENDENCY]);function S(e,t,r={}){const A=v.has(e)?"MODULE_NOT_FOUND":e,n={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(t),{code:{...n,value:A},pnpCode:{...n,value:e},data:{...n,value:r}})}function k(e){return w.cS.normalize(w.cS.fromPortablePath(e))}function N(e,t){const r=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,A=Number(process.env.PNP_DEBUG_LEVEL),n=new Set(b.Module.builtinModules||Object.keys(process.binding("natives"))),o=/^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:@[^/]+\/)?[^/]+)\/*(.*|)$/,i=/^(\/|\.{1,2}(\/|$))/,s=/\/$/,a={name:null,reference:null},c=[],g=new Set;if(!0===e.enableTopLevelFallback&&c.push(a),!1!==t.compatibilityMode)for(const t of["react-scripts","gatsby"]){const r=e.packageRegistry.get(t);if(r)for(const e of r.keys()){if(null===e)throw new Error("Assertion failed: This reference shouldn't be null");c.push({name:t,reference:e})}}const{ignorePattern:l,packageRegistry:u,packageLocatorsByLocations:h,packageLocationLengths:p}=e;function d(e,t){return{fn:e,args:t,error:null,result:null}}function C(e,r){if(!1===t.allowDebug)return r;if(Number.isFinite(A)){if(A>=2)return(...t)=>{const A=d(e,t);try{return A.result=r(...t)}catch(e){throw A.error=e}finally{console.trace(A)}};if(A>=1)return(...t)=>{try{return r(...t)}catch(r){const A=d(e,t);throw A.error=r,console.trace(A),r}}}return r}function f(e){const t=y(e);if(!t)throw S(Q.INTERNAL,"Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)");return t}function I(t){if(null===t.name)return!0;for(const r of e.dependencyTreeRoots)if(r.name===t.name&&r.reference===t.reference)return!0;return!1}function E(e,t){return t.endsWith("/")&&(t=w.y1.join(t,"internal.js")),b.Module._resolveFilename(w.cS.fromPortablePath(e),function(e){const t=new b.Module(e,null);return t.filename=e,t.paths=b.Module._nodeModulePaths(e),t}(w.cS.fromPortablePath(t)),!1,{plugnplay:!1})}function B(t){if(null===l)return!1;const r=w.y1.contains(e.basePath,t);return null!==r&&!!l.test(r.replace(/\/$/,""))}function y({name:e,reference:t}){const r=u.get(e);if(!r)return null;const A=r.get(t);return A||null}function m(e,t){const r=new Map,A=new Set,n=t=>{const o=JSON.stringify(t.name);if(A.has(o))return;A.add(o);const i=function({name:e,reference:t}){const r=[];for(const[A,n]of u)if(null!==A)for(const[o,i]of n){if(null===o)continue;i.packageDependencies.get(e)===t&&(A===e&&o===t||r.push({name:A,reference:o}))}return r}(t);for(const t of i){if(f(t).packagePeers.has(e))n(t);else{let e=r.get(t.name);void 0===e&&r.set(t.name,e=new Set),e.add(t.reference)}}};n(t);const o=[];for(const e of[...r.keys()].sort())for(const t of[...r.get(e)].sort())o.push({name:e,reference:t});return o}function v(t){if(B(t))return null;let r=(A=w.y1.relative(e.basePath,t),w.cS.toPortablePath(A));var A;r.match(i)||(r="./"+r),t.match(s)&&!r.endsWith("/")&&(r+="/");let n=0;for(;nr.length;)n+=1;for(let e=n;eI(e))?S(Q.MISSING_PEER_DEPENDENCY,`${s.name} tried to access ${t} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound.\n\nRequired package: ${t} (via "${l}")\nRequired by: ${s.name}@${s.reference} (via ${u})\n${e.map(e=>`Ancestor breaking the chain: ${e.name}@${e.reference}\n`).join("")}\n`,{request:l,issuer:u,issuerLocator:Object.assign({},s),dependencyName:t,brokenAncestors:e}):S(Q.MISSING_PEER_DEPENDENCY,`${s.name} tried to access ${t} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound.\n\nRequired package: ${t} (via "${l}")\nRequired by: ${s.name}@${s.reference} (via ${u})\n${e.map(e=>`Ancestor breaking the chain: ${e.name}@${e.reference}\n`).join("")}\n`,{request:l,issuer:u,issuerLocator:Object.assign({},s),dependencyName:t,brokenAncestors:e})}else void 0===d&&(B=!a&&n.has(A)?I(s)?S(Q.UNDECLARED_DEPENDENCY,`Your application tried to access ${t}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${t} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound.\n\nRequired package: ${t} (via "${l}")\nRequired by: ${u}\n`,{request:l,issuer:u,dependencyName:t}):S(Q.UNDECLARED_DEPENDENCY,`${s.name} tried to access ${t}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${t} isn't otherwise declared in ${s.name}'s dependencies, this makes the require call ambiguous and unsound.\n\nRequired package: ${t} (via "${l}")\nRequired by: ${u}\n`,{request:l,issuer:u,issuerLocator:Object.assign({},s),dependencyName:t}):I(s)?S(Q.UNDECLARED_DEPENDENCY,`Your application tried to access ${t}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${t} (via "${l}")\nRequired by: ${u}\n`,{request:l,issuer:u,dependencyName:t}):S(Q.UNDECLARED_DEPENDENCY,`${s.name} tried to access ${t}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${t} (via "${l}")\nRequired by: ${s.name}@${s.reference} (via ${u})\n`,{request:l,issuer:u,issuerLocator:Object.assign({},s),dependencyName:t}));if(null==d){if(null===C||null===B)throw B||new Error("Assertion failed: Expected an error to have been set");d=C;const e=B.message.replace(/\n.*/g,"");B.message=e,g.has(e)||(g.add(e),process.emitWarning(B))}const y=Array.isArray(d)?{name:d[0],reference:d[1]}:{name:t,reference:d},D=f(y);if(!D.packageLocation)throw S(Q.MISSING_DEPENDENCY,`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod.\n\nRequired package: ${y.name}@${y.reference} (via "${l}")\nRequired by: ${s.name}@${s.reference} (via ${u})\n`,{request:l,issuer:u,dependencyLocator:Object.assign({},y)});const b=D.packageLocation;h=o?w.y1.join(b,o):b}else{if(w.y1.isAbsolute(A))h=w.y1.normalize(A);else{if(!i)throw S(Q.API_ERROR,"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:l,issuer:u});const e=w.y1.resolve(i);h=i.match(s)?w.y1.normalize(w.y1.join(e,A)):w.y1.normalize(w.y1.join(w.y1.dirname(e),A))}v(h)}return w.y1.normalize(h)}function F(e,{extensions:r=Object.keys(b.Module._extensions)}={}){const A=[],n=function e(r,A,{extensions:n}){let o;try{A.push(r),o=t.fakeFs.statSync(r)}catch(e){}if(o&&!o.isDirectory())return t.fakeFs.realpathSync(r);if(o&&o.isDirectory()){let o,i;try{o=JSON.parse(t.fakeFs.readFileSync(w.y1.join(r,"package.json"),"utf8"))}catch(e){}if(o&&o.main&&(i=w.y1.resolve(r,o.main)),i&&i!==r){const t=e(i,A,{extensions:n});if(null!==t)return t}}for(let e=0,o=n.length;e`Rejected candidate: ${k(e)}\n`).join("")}`,{unqualifiedPath:t})}}return{VERSIONS:{std:3,resolveVirtual:1,getAllLocators:1},topLevel:a,getLocator:(e,t)=>Array.isArray(t)?{name:t[0],reference:t[1]}:{name:e,reference:t},getDependencyTreeRoots:()=>[...e.dependencyTreeRoots],getAllLocators(){const e=[];for(const[t,r]of u)for(const A of r.keys())null!==t&&null!==A&&e.push({name:t,reference:A});return e},getPackageInformation:e=>{const t=y(e);if(null===t)return null;const r=w.cS.fromPortablePath(t.packageLocation);return{...t,packageLocation:r}},findPackageLocator:e=>v(w.cS.toPortablePath(e)),resolveToUnqualified:C("resolveToUnqualified",(e,t,r)=>{const A=null!==t?w.cS.toPortablePath(t):null,n=N(w.cS.toPortablePath(e),A,r);return null===n?null:w.cS.fromPortablePath(n)}),resolveUnqualified:C("resolveUnqualified",(e,t)=>w.cS.fromPortablePath(F(w.cS.toPortablePath(e),t))),resolveRequest:C("resolveRequest",(e,t,r)=>{const A=null!==t?w.cS.toPortablePath(t):null,n=function(e,t,{considerBuiltins:r,extensions:A}={}){const n=N(e,t,{considerBuiltins:r});if(null===n)return null;try{return F(n,{extensions:A})}catch(r){throw"QUALIFIED_PATH_RESOLUTION_FAILED"===r.pnpCode&&Object.assign(r.data,{request:k(e),issuer:t&&k(t)}),r}}(w.cS.toPortablePath(e),A,r);return null===n?null:w.cS.fromPortablePath(n)}),resolveVirtual:C("resolveVirtual",e=>{const t=function(e){const t=w.y1.normalize(e),r=D.p.resolveVirtual(t);return r!==t?r:null}(w.cS.toPortablePath(e));return null!==t?w.cS.fromPortablePath(t):null})}}(0,m.promisify)(y.readFile);const F=(e,t,r)=>N(function(e,{basePath:t}){const r=w.cS.toPortablePath(t),A=w.y1.resolve(r),n=null!==e.ignorePatternData?new RegExp(e.ignorePatternData):null,o=new Map(e.packageRegistryData.map(([e,t])=>[e,new Map(t.map(([e,t])=>[e,{packageLocation:w.y1.join(A,t.packageLocation),packageDependencies:new Map(t.packageDependencies),packagePeers:new Set(t.packagePeers),linkType:t.linkType,discardFromLookup:t.discardFromLookup||!1}]))])),i=new Map,s=new Set;for(const[t,r]of e.packageRegistryData)for(const[e,A]of r){if(null===t!=(null===e))throw new Error("Assertion failed: The name and reference should be null, or neither should");if(A.discardFromLookup)continue;const r={name:t,reference:e};i.set(A.packageLocation,r),s.add(A.packageLocation.length)}for(const t of e.locationBlacklistData)i.set(t,null);const a=new Map(e.fallbackExclusionList.map(([e,t])=>[e,new Set(t)])),c=new Map(e.fallbackPool);return{basePath:r,dependencyTreeRoots:e.dependencyTreeRoots,enableTopLevelFallback:e.enableTopLevelFallback,fallbackExclusionList:a,fallbackPool:c,ignorePattern:n,packageLocationLengths:[...s].sort((e,t)=>t-e),packageLocatorsByLocations:i,packageRegistry:o}}(p(e),{basePath:t}),{fakeFs:r,pnpapiResolution:w.cS.join(t,".pnp.js")})},76756:(e,t,r)=>{"use strict";r.r(t),r.d(t,{ShellError:()=>c,execute:()=>Z,globUtils:()=>A});var A={};r.r(A),r.d(A,{fastGlobOptions:()=>E,isBraceExpansion:()=>m,isGlobPattern:()=>B,match:()=>y,micromatchOptions:()=>I});var n=r(46009),o=r(78420),i=r(11640),s=r(12087),a=r(92413);class c extends Error{constructor(e){super(e),this.name="ShellError"}}var g=r(43896),l=r(39725),u=r(19347),h=r.n(u),p=r(35747),d=r.n(p),C=r(2401),f=r.n(C);const I={strictBrackets:!0},E={onlyDirectories:!1,onlyFiles:!1};function B(e){if(!f().scan(e,I).isGlob)return!1;try{f().parse(e,I)}catch(e){return!1}return!0}function y(e,{cwd:t,baseFs:r}){return h()(e,{...E,cwd:n.cS.fromPortablePath(t),fs:(0,g.extendFs)(d(),new l.i(r))})}function m(e){return f().scan(e,I).isBrace}var w,Q=r(67566),D=r.n(Q);function b(){}!function(e){e[e.STDIN=0]="STDIN",e[e.STDOUT=1]="STDOUT",e[e.STDERR=2]="STDERR"}(w||(w={}));let v=0;class S{constructor(e){this.stream=e}close(){}get(){return this.stream}}class k{constructor(){this.stream=null}close(){if(null===this.stream)throw new Error("Assertion failed: No stream attached");this.stream.end()}attach(e){this.stream=e}get(){if(null===this.stream)throw new Error("Assertion failed: No stream attached");return this.stream}}class N{constructor(e,t){this.stdin=null,this.stdout=null,this.stderr=null,this.pipe=null,this.ancestor=e,this.implementation=t}static start(e,{stdin:t,stdout:r,stderr:A}){const n=new N(null,e);return n.stdin=t,n.stdout=r,n.stderr=A,n}pipeTo(e,t=w.STDOUT){const r=new N(this,e),A=new k;return r.pipe=A,r.stdout=this.stdout,r.stderr=this.stderr,(t&w.STDOUT)===w.STDOUT?this.stdout=A:null!==this.ancestor&&(this.stderr=this.ancestor.stdout),(t&w.STDERR)===w.STDERR?this.stderr=A:null!==this.ancestor&&(this.stderr=this.ancestor.stderr),r}async exec(){const e=["ignore","ignore","ignore"];if(this.pipe)e[0]="pipe";else{if(null===this.stdin)throw new Error("Assertion failed: No input stream registered");e[0]=this.stdin.get()}let t,r;if(null===this.stdout)throw new Error("Assertion failed: No output stream registered");if(t=this.stdout,e[1]=t.get(),null===this.stderr)throw new Error("Assertion failed: No error stream registered");r=this.stderr,e[2]=r.get();const A=this.implementation(e);return this.pipe&&this.pipe.attach(A.stdin),await A.promise.then(e=>(t.close(),r.close(),e))}async run(){const e=[];for(let t=this;t;t=t.ancestor)e.push(t.exec());return(await Promise.all(e))[0]}}function F(e,t){return N.start(e,t)}var K;function M(e,t,r){const A=new a.PassThrough({autoDestroy:!0});switch(e){case w.STDIN:(t&K.Readable)===K.Readable&&r.stdin.pipe(A,{end:!1}),(t&K.Writable)===K.Writable&&r.stdin instanceof a.Writable&&A.pipe(r.stdin,{end:!1});break;case w.STDOUT:(t&K.Readable)===K.Readable&&r.stdout.pipe(A,{end:!1}),(t&K.Writable)===K.Writable&&A.pipe(r.stdout,{end:!1});break;case w.STDERR:(t&K.Readable)===K.Readable&&r.stderr.pipe(A,{end:!1}),(t&K.Writable)===K.Writable&&A.pipe(r.stderr,{end:!1});break;default:throw new c(`Bad file descriptor: "${e}"`)}return A}function R(e,t={}){const r={...e,...t};return r.environment={...e.environment,...t.environment},r.variables={...e.variables,...t.variables},r}!function(e){e[e.Readable=1]="Readable",e[e.Writable=2]="Writable"}(K||(K={}));const x=new Map([["cd",async([e=(0,s.homedir)(),...t],r,A)=>{const o=n.y1.resolve(A.cwd,n.cS.toPortablePath(e));return(await r.baseFs.statPromise(o)).isDirectory()?(A.cwd=o,0):(A.stderr.write("cd: not a directory\n"),1)}],["pwd",async(e,t,r)=>(r.stdout.write(n.cS.fromPortablePath(r.cwd)+"\n"),0)],[":",async(e,t,r)=>0],["true",async(e,t,r)=>0],["false",async(e,t,r)=>1],["exit",async([e,...t],r,A)=>A.exitCode=parseInt(null!=e?e:A.variables["?"],10)],["echo",async(e,t,r)=>(r.stdout.write(e.join(" ")+"\n"),0)],["__ysh_run_procedure",async(e,t,r)=>{const A=r.procedures[e[0]];return await F(A,{stdin:new S(r.stdin),stdout:new S(r.stdout),stderr:new S(r.stderr)}).run()}],["__ysh_set_redirects",async(e,t,r)=>{let A=r.stdin,o=r.stdout;const i=r.stderr,s=[],c=[];let g=0;for(;"--"!==e[g];){const A=e[g++],o=Number(e[g++]),i=g+o;for(let o=g;ot.baseFs.createReadStream(n.y1.resolve(r.cwd,n.cS.toPortablePath(e[o]))));break;case"<<<":s.push(()=>{const t=new a.PassThrough;return process.nextTick(()=>{t.write(e[o]+"\n"),t.end()}),t});break;case"<&":s.push(()=>M(Number(e[o]),K.Readable,r));break;case">":case">>":{const i=n.y1.resolve(r.cwd,n.cS.toPortablePath(e[o]));"/dev/null"===i?c.push(new a.Writable({autoDestroy:!0,emitClose:!0,write(e,t,r){setImmediate(r)}})):c.push(t.baseFs.createWriteStream(i,">>"===A?{flags:"a"}:void 0))}break;case">&":c.push(M(Number(e[o]),K.Writable,r));break;default:throw new Error(`Assertion failed: Unsupported redirection type: "${A}"`)}}if(s.length>0){const e=new a.PassThrough;A=e;const t=r=>{if(r===s.length)e.end();else{const A=s[r]();A.pipe(e,{end:!1}),A.on("end",()=>{t(r+1)})}};t(0)}if(c.length>0){const e=new a.PassThrough;o=e;for(const t of c)e.pipe(t)}const l=await F(G(e.slice(g+1),t,r),{stdin:new S(A),stdout:new S(o),stderr:new S(i)}).run();return await Promise.all(c.map(e=>new Promise(t=>{e.on("close",()=>{t()}),e.end()}))),l}]]);async function L(e,t,r){const A=[],n=new a.PassThrough;return n.on("data",e=>A.push(e)),await W(e,t,R(r,{stdout:n})),Buffer.concat(A).toString().replace(/[\r\n]+$/,"")}async function P(e,t,r){const A=e.map(async e=>{const A=await Y(e.args,t,r);return{name:e.name,value:A.join(" ")}});return(await Promise.all(A)).reduce((e,t)=>(e[t.name]=t.value,e),{})}function O(e){return e.match(/[^ \r\n\t]+/g)||[]}async function U(e,t,r,A,n=A){switch(e.name){case"$":A(String(process.pid));break;case"#":A(String(t.args.length));break;case"@":if(e.quoted)for(const e of t.args)n(e);else for(const e of t.args){const t=O(e);for(let e=0;e=0&&ne+t,subtraction:(e,t)=>e-t,multiplication:(e,t)=>e*t,division:(e,t)=>Math.trunc(e/t)};async function j(e,t,r){if("number"===e.type){if(Number.isInteger(e.value))return e.value;throw new Error(`Invalid number: "${e.value}", only integers are allowed`)}if("variable"===e.type){const A=[];await U({...e,quoted:!0},t,r,e=>A.push(e));const n=Number(A.join(" "));return Number.isNaN(n)?j({type:"variable",name:A.join(" ")},t,r):j({type:"number",value:n},t,r)}return T[e.type](await j(e.left,t,r),await j(e.right,t,r))}async function Y(e,t,r){const A=new Map,n=[];let o=[];const i=e=>{o.push(e)},s=()=>{o.length>0&&n.push(o.join("")),o=[]},a=e=>{i(e),s()},g=(e,t)=>{let r=A.get(e);void 0===r&&A.set(e,r=[]),r.push(t)};for(const A of e){let e=!1;switch(A.type){case"redirection":{const e=await Y(A.args,t,r);for(const t of e)g(A.subtype,t)}break;case"argument":for(const n of A.segments)switch(n.type){case"text":i(n.text);break;case"glob":i(n.pattern),e=!0;break;case"shell":{const e=await L(n.shell,t,r);if(n.quoted)i(e);else{const t=O(e);for(let e=0;e0){const e=[];for(const[t,r]of A.entries())e.splice(e.length,0,t,String(r.length),...r);n.splice(0,0,"__ysh_set_redirects",...e,"--")}return n}function G(e,t,r){t.builtins.has(e[0])||(e=["command",...e]);const A=n.cS.fromPortablePath(r.cwd);let o=r.environment;void 0!==o.PWD&&(o={...o,PWD:A});const[i,...s]=e;if("command"===i)return function(e,t,r,A){return r=>{const n=r[0]instanceof a.Transform?"pipe":r[0],o=r[1]instanceof a.Transform?"pipe":r[1],i=r[2]instanceof a.Transform?"pipe":r[2],s=D()(e,t,{...A,stdio:[n,o,i]});return 0==v++&&process.on("SIGINT",b),r[0]instanceof a.Transform&&r[0].pipe(s.stdin),r[1]instanceof a.Transform&&s.stdout.pipe(r[1],{end:!1}),r[2]instanceof a.Transform&&s.stderr.pipe(r[2],{end:!1}),{stdin:s.stdin,promise:new Promise(t=>{s.on("error",A=>{switch(0==--v&&process.off("SIGINT",b),A.code){case"ENOENT":r[2].write(`command not found: ${e}\n`),t(127);break;case"EACCES":r[2].write(`permission denied: ${e}\n`),t(128);break;default:r[2].write(`uncaught error: ${A.message}\n`),t(1)}}),s.on("exit",e=>{0==--v&&process.off("SIGINT",b),t(null!==e?e:129)})})}}}(s[0],s.slice(1),0,{cwd:A,env:o});const c=t.builtins.get(i);if(void 0===c)throw new Error(`Assertion failed: A builtin should exist for "${i}"`);return function(e){return t=>{const r="pipe"===t[0]?new a.PassThrough:t[0];return{stdin:r,promise:Promise.resolve().then(()=>e({stdin:r,stdout:t[1],stderr:t[2]}))}}}(async({stdin:e,stdout:A,stderr:n})=>(r.stdin=e,r.stdout=A,r.stderr=n,await c(s,t,r)))}function H(e,t,r){return A=>{const n=new a.PassThrough;return{stdin:n,promise:W(e,t,R(r,{stdin:n}))}}}function J(e,t,r){return A=>({stdin:new a.PassThrough,promise:W(e,t,r)})}function q(e,t,r,A){if(0===t.length)return e;{let n;do{n=String(Math.random())}while(Object.prototype.hasOwnProperty.call(A.procedures,n));return A.procedures={...A.procedures},A.procedures[n]=e,G([...t,"__ysh_run_procedure",n],r,A)}}async function z(e,t,r){let A;const n=e=>{A=e,r.variables["?"]=String(e)},o=async e=>{try{return await async function(e,t,r){let A=e,n=null,o=null;for(;A;){const e=A.then?{...r}:r;let i;switch(A.type){case"command":{const n=await Y(A.args,t,r),o=await P(A.envs,t,r);i=A.envs.length?G(n,t,R(e,{environment:o})):G(n,t,e)}break;case"subshell":{const n=await Y(A.args,t,r);i=q(H(A.subshell,t,e),n,t,e)}break;case"group":{const n=await Y(A.args,t,r);i=q(J(A.group,t,e),n,t,e)}break;case"envs":{const n=await P(A.envs,t,r);e.environment={...e.environment,...n},i=G(["true"],t,e)}}if(void 0===i)throw new Error("Assertion failed: An action should have been generated");if(null===n)o=F(i,{stdin:new S(e.stdin),stdout:new S(e.stdout),stderr:new S(e.stderr)});else{if(null===o)throw new Error("Assertion failed: The execution pipeline should have been setup");switch(n){case"|":o=o.pipeTo(i,w.STDOUT);break;case"|&":o=o.pipeTo(i,w.STDOUT|w.STDERR)}}A.then?(n=A.then.type,A=A.then.chain):A=null}if(null===o)throw new Error("Assertion failed: The execution pipeline should have been setup");return await o.run()}(e,t,r)}catch(e){if(!(e instanceof c))throw e;return r.stderr.write(e.message+"\n"),1}};for(n(await o(e.chain));e.then;){if(null!==r.exitCode)return r.exitCode;switch(e.then.type){case"&&":0===A&&n(await o(e.then.line.chain));break;case"||":0!==A&&n(await o(e.then.line.chain));break;default:throw new Error(`Assertion failed: Unsupported command type: "${e.then.type}"`)}e=e.then.line}return A}async function W(e,t,r){let A=0;for(const n of e){if(A=await z(n,t,r),null!==r.exitCode)return r.exitCode;r.variables["?"]=String(A)}return A}function V(e){switch(e.type){case"variable":return"@"===e.name||"#"===e.name||"*"===e.name||Number.isFinite(parseInt(e.name,10))||"defaultValue"in e&&!!e.defaultValue&&e.defaultValue.some(e=>X(e));case"arithmetic":return function e(t){switch(t.type){case"variable":return V(t);case"number":return!1;default:return e(t.left)||e(t.right)}}(e.arithmetic);case"shell":return _(e.shell);default:return!1}}function X(e){switch(e.type){case"redirection":return e.args.some(e=>X(e));case"argument":return e.segments.some(e=>V(e));default:throw new Error(`Assertion failed: Unsupported argument type: "${e.type}"`)}}function _(e){return e.some(e=>{for(;e;){let t=e.chain;for(;t;){let e;switch(t.type){case"subshell":e=_(t.subshell);break;case"command":e=t.envs.some(e=>e.args.some(e=>X(e)))||t.args.some(e=>X(e))}if(e)return!0;if(!t.then)break;t=t.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function Z(e,t=[],{baseFs:r=new o.S,builtins:s={},cwd:c=n.cS.toPortablePath(process.cwd()),env:g=process.env,stdin:l=process.stdin,stdout:u=process.stdout,stderr:h=process.stderr,variables:p={},glob:d=A}={}){const C={};for(const[e,t]of Object.entries(g))void 0!==t&&(C[e]=t);const f=new Map(x);for(const[e,t]of Object.entries(s))f.set(e,t);null===l&&(l=new a.PassThrough).end();const I=(0,i.parseShell)(e,d);if(!_(I)&&I.length>0&&t.length>0){let e=I[I.length-1];for(;e.then;)e=e.then.line;let r=e.chain;for(;r.then;)r=r.then.chain;"command"===r.type&&(r.args=r.args.concat(t.map(e=>({type:"argument",segments:[{type:"text",text:e}]}))))}return await W(I,{args:t,baseFs:r,builtins:f,initialStdin:l,initialStdout:u,initialStderr:h,glob:d},{cwd:c,environment:C,exitCode:null,procedures:{},stdin:l,stdout:u,stderr:h,variables:Object.assign({},p,{"?":0})})}},45330:(e,t,r)=>{t.e=()=>({modules:new Map([["@yarnpkg/cli",r(25413)],["@yarnpkg/core",r(53836)],["@yarnpkg/fslib",r(43896)],["@yarnpkg/libzip",r(65281)],["@yarnpkg/parsers",r(11640)],["@yarnpkg/shell",r(76756)],["clipanion",r(40822)],["semver",r(53887)],["yup",r(15966)],["@yarnpkg/plugin-essentials",r(34777)],["@yarnpkg/plugin-compat",r(44692)],["@yarnpkg/plugin-dlx",r(10189)],["@yarnpkg/plugin-file",r(68023)],["@yarnpkg/plugin-git",r(75641)],["@yarnpkg/plugin-github",r(68126)],["@yarnpkg/plugin-http",r(99148)],["@yarnpkg/plugin-init",r(64314)],["@yarnpkg/plugin-link",r(92994)],["@yarnpkg/plugin-node-modules",r(8375)],["@yarnpkg/plugin-npm",r(14224)],["@yarnpkg/plugin-npm-cli",r(8190)],["@yarnpkg/plugin-pack",r(49881)],["@yarnpkg/plugin-patch",r(29936)],["@yarnpkg/plugin-pnp",r(83228)]]),plugins:new Set(["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-dlx","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-link","@yarnpkg/plugin-node-modules","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp"])})},29148:(e,t,r)=>{const A=r(74988),n=/^(.*?)(\x1b\[[^m]+m|\x1b\]8;;.*?(\x1b\\|\u0007))/,o=new A;e.exports=(e,t=0,r=e.length)=>{if(t<0||r<0)throw new RangeError("Negative indices aren't supported by this implementation");const A=r-t;let i="",s=0,a=0;for(;e.length>0;){const r=e.match(n)||[e,e,void 0];let c=o.splitGraphemes(r[1]);const g=Math.min(t-s,c.length);c=c.slice(g);const l=Math.min(A-a,c.length);i+=c.slice(0,l).join(""),s+=g,a+=l,void 0!==r[2]&&(i+=r[2]),e=e.slice(r[0].length)}return i}},72912:e=>{function t(){return e.exports=t=Object.assign||function(e){for(var t=1;t{e.exports=function(e){return e&&e.__esModule?e:{default:e}}},19228:(e,t,r)=>{var A=r(54694);function n(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return n=function(){return e},e}e.exports=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==A(e)&&"function"!=typeof e)return{default:e};var t=n();if(t&&t.has(e))return t.get(e);var r={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){var s=o?Object.getOwnPropertyDescriptor(e,i):null;s&&(s.get||s.set)?Object.defineProperty(r,i,s):r[i]=e[i]}return r.default=e,t&&t.set(e,r),r}},74943:e=>{e.exports=function(e,t){if(null==e)return{};var r,A,n={},o=Object.keys(e);for(A=0;A=0||(n[r]=e[r]);return n}},62407:e=>{e.exports=function(e,t){return t||(t=e.slice(0)),e.raw=t,e}},54694:e=>{function t(r){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?e.exports=t=function(e){return typeof e}:e.exports=t=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t(r)}e.exports=t},96117:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(35747);t.FILE_SYSTEM_ADAPTER={lstat:A.lstat,stat:A.stat,lstatSync:A.lstatSync,statSync:A.statSync,readdir:A.readdir,readdirSync:A.readdirSync},t.createFileSystemAdapter=function(e){return void 0===e?t.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},t.FILE_SYSTEM_ADAPTER),e)}},79774:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=process.versions.node.split("."),A=parseInt(r[0],10),n=parseInt(r[1],10),o=A>10,i=10===A&&n>=10;t.IS_SUPPORT_READDIR_WITH_FILE_TYPES=o||i},85670:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(31020),n=r(35516),o=r(38844);function i(e={}){return e instanceof o.default?e:new o.default(e)}t.Settings=o.default,t.scandir=function(e,t,r){if("function"==typeof t)return A.read(e,i(),t);A.read(e,i(t),r)},t.scandirSync=function(e,t){const r=i(t);return n.read(e,r)}},31020:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(53403),n=r(69078),o=r(79774),i=r(65225);function s(e,t,r){t.fs.readdir(e,{withFileTypes:!0},(A,o)=>{if(null!==A)return c(r,A);const s=o.map(r=>({dirent:r,name:r.name,path:`${e}${t.pathSegmentSeparator}${r.name}`}));if(!t.followSymbolicLinks)return g(r,s);const a=s.map(e=>function(e,t){return r=>{if(!e.dirent.isSymbolicLink())return r(null,e);t.fs.stat(e.path,(A,n)=>null!==A?t.throwErrorOnBrokenSymbolicLink?r(A):r(null,e):(e.dirent=i.fs.createDirentFromStats(e.name,n),r(null,e)))}}(e,t));n(a,(e,t)=>{if(null!==e)return c(r,e);g(r,t)})})}function a(e,t,r){t.fs.readdir(e,(o,s)=>{if(null!==o)return c(r,o);const a=s.map(r=>`${e}${t.pathSegmentSeparator}${r}`),l=a.map(e=>r=>A.stat(e,t.fsStatSettings,r));n(l,(e,A)=>{if(null!==e)return c(r,e);const n=[];s.forEach((e,r)=>{const o=A[r],s={name:e,path:a[r],dirent:i.fs.createDirentFromStats(e,o)};t.stats&&(s.stats=o),n.push(s)}),g(r,n)})})}function c(e,t){e(t)}function g(e,t){e(null,t)}t.read=function(e,t,r){return!t.stats&&o.IS_SUPPORT_READDIR_WITH_FILE_TYPES?s(e,t,r):a(e,t,r)},t.readdirWithFileTypes=s,t.readdir=a},35516:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(53403),n=r(79774),o=r(65225);function i(e,t){return t.fs.readdirSync(e,{withFileTypes:!0}).map(r=>{const A={dirent:r,name:r.name,path:`${e}${t.pathSegmentSeparator}${r.name}`};if(A.dirent.isSymbolicLink()&&t.followSymbolicLinks)try{const e=t.fs.statSync(A.path);A.dirent=o.fs.createDirentFromStats(A.name,e)}catch(e){if(t.throwErrorOnBrokenSymbolicLink)throw e}return A})}function s(e,t){return t.fs.readdirSync(e).map(r=>{const n=`${e}${t.pathSegmentSeparator}${r}`,i=A.statSync(n,t.fsStatSettings),s={name:r,path:n,dirent:o.fs.createDirentFromStats(r,i)};return t.stats&&(s.stats=i),s})}t.read=function(e,t){return!t.stats&&n.IS_SUPPORT_READDIR_WITH_FILE_TYPES?i(e,t):s(e,t)},t.readdirWithFileTypes=i,t.readdir=s},38844:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(85622),n=r(53403),o=r(96117);t.default=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=o.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,A.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new n.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,t){return void 0===e?t:e}}},72156:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});class r{constructor(e,t){this.name=e,this.isBlockDevice=t.isBlockDevice.bind(t),this.isCharacterDevice=t.isCharacterDevice.bind(t),this.isDirectory=t.isDirectory.bind(t),this.isFIFO=t.isFIFO.bind(t),this.isFile=t.isFile.bind(t),this.isSocket=t.isSocket.bind(t),this.isSymbolicLink=t.isSymbolicLink.bind(t)}}t.createDirentFromStats=function(e,t){return new r(e,t)}},65225:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(72156);t.fs=A},71208:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(35747);t.FILE_SYSTEM_ADAPTER={lstat:A.lstat,stat:A.stat,lstatSync:A.lstatSync,statSync:A.statSync},t.createFileSystemAdapter=function(e){return void 0===e?t.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},t.FILE_SYSTEM_ADAPTER),e)}},53403:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(17790),n=r(34846),o=r(92687);function i(e={}){return e instanceof o.default?e:new o.default(e)}t.Settings=o.default,t.stat=function(e,t,r){if("function"==typeof t)return A.read(e,i(),t);A.read(e,i(t),r)},t.statSync=function(e,t){const r=i(t);return n.read(e,r)}},17790:(e,t)=>{"use strict";function r(e,t){e(t)}function A(e,t){e(null,t)}Object.defineProperty(t,"__esModule",{value:!0}),t.read=function(e,t,n){t.fs.lstat(e,(o,i)=>null!==o?r(n,o):i.isSymbolicLink()&&t.followSymbolicLink?void t.fs.stat(e,(e,o)=>{if(null!==e)return t.throwErrorOnBrokenSymbolicLink?r(n,e):A(n,i);t.markSymbolicLink&&(o.isSymbolicLink=()=>!0),A(n,o)}):A(n,i))}},34846:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.read=function(e,t){const r=t.fs.lstatSync(e);if(!r.isSymbolicLink()||!t.followSymbolicLink)return r;try{const r=t.fs.statSync(e);return t.markSymbolicLink&&(r.isSymbolicLink=()=>!0),r}catch(e){if(!t.throwErrorOnBrokenSymbolicLink)return r;throw e}}},92687:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(71208);t.default=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=A.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,t){return void 0===e?t:e}}},72897:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(42369),n=r(27696),o=r(22111),i=r(14954);function s(e={}){return e instanceof i.default?e:new i.default(e)}t.Settings=i.default,t.walk=function(e,t,r){if("function"==typeof t)return new A.default(e,s()).read(t);new A.default(e,s(t)).read(r)},t.walkSync=function(e,t){const r=s(t);return new o.default(e,r).read()},t.walkStream=function(e,t){const r=s(t);return new n.default(e,r).read()}},42369:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(98566);t.default=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new A.default(this._root,this._settings),this._storage=new Set}read(e){this._reader.onError(t=>{!function(e,t){e(t)}(e,t)}),this._reader.onEntry(e=>{this._storage.add(e)}),this._reader.onEnd(()=>{!function(e,t){e(null,t)}(e,[...this._storage])}),this._reader.read()}}},27696:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(92413),n=r(98566);t.default=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new n.default(this._root,this._settings),this._stream=new A.Readable({objectMode:!0,read:()=>{},destroy:this._reader.destroy.bind(this._reader)})}read(){return this._reader.onError(e=>{this._stream.emit("error",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}}},22111:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(97835);t.default=class{constructor(e,t){this._root=e,this._settings=t,this._reader=new A.default(this._root,this._settings)}read(){return this._reader.read()}}},98566:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(28614),n=r(85670),o=r(98360),i=r(10750),s=r(75504);class a extends s.default{constructor(e,t){super(e,t),this._settings=t,this._scandir=n.scandir,this._emitter=new A.EventEmitter,this._queue=o(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit("end")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}destroy(){if(this._isDestroyed)throw new Error("The reader is already destroyed");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on("entry",e)}onError(e){this._emitter.once("error",e)}onEnd(e){this._emitter.once("end",e)}_pushToQueue(e,t){const r={directory:e,base:t};this._queue.push(r,e=>{null!==e&&this._handleError(e)})}_worker(e,t){this._scandir(e.directory,this._settings.fsScandirSettings,(r,A)=>{if(null!==r)return t(r,void 0);for(const t of A)this._handleEntry(t,e.base);t(null,void 0)})}_handleError(e){i.isFatalError(this._settings,e)&&(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit("error",e))}_handleEntry(e,t){if(this._isDestroyed||this._isFatalError)return;const r=e.path;void 0!==t&&(e.path=i.joinPathSegments(t,e.name,this._settings.pathSegmentSeparator)),i.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&i.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(r,e.path)}_emitEntry(e){this._emitter.emit("entry",e)}}t.default=a},10750:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isFatalError=function(e,t){return null===e.errorFilter||!e.errorFilter(t)},t.isAppliedFilter=function(e,t){return null===e||e(t)},t.replacePathSegmentSeparator=function(e,t){return e.split(/[\\/]/).join(t)},t.joinPathSegments=function(e,t,r){return""===e?t:e+r+t}},75504:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(10750);t.default=class{constructor(e,t){this._root=e,this._settings=t,this._root=A.replacePathSegmentSeparator(e,t.pathSegmentSeparator)}}},97835:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(85670),n=r(10750),o=r(75504);class i extends o.default{constructor(){super(...arguments),this._scandir=A.scandirSync,this._storage=new Set,this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),[...this._storage]}_pushToQueue(e,t){this._queue.add({directory:e,base:t})}_handleQueue(){for(const e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,t){try{const r=this._scandir(e,this._settings.fsScandirSettings);for(const e of r)this._handleEntry(e,t)}catch(e){this._handleError(e)}}_handleError(e){if(n.isFatalError(this._settings,e))throw e}_handleEntry(e,t){const r=e.path;void 0!==t&&(e.path=n.joinPathSegments(t,e.name,this._settings.pathSegmentSeparator)),n.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&n.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(r,e.path)}_pushToStorage(e){this._storage.add(e)}}t.default=i},14954:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(85622),n=r(85670);t.default=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,1/0),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,A.sep),this.fsScandirSettings=new n.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,t){return void 0===e?t:e}}},7966:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];const A=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement",...r];const n=["null","undefined","string","number","bigint","boolean","symbol"];function o(e){return t=>typeof t===e}const{toString:i}=Object.prototype,s=e=>{const t=i.call(e).slice(8,-1);return/HTML\w+Element/.test(t)&&c.domElement(e)?"HTMLElement":(r=t,A.includes(r)?t:void 0);var r},a=e=>t=>s(t)===e;function c(e){if(null===e)return"null";switch(typeof e){case"undefined":return"undefined";case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"function":return"Function";case"bigint":return"bigint";case"symbol":return"symbol"}if(c.observable(e))return"Observable";if(c.array(e))return"Array";if(c.buffer(e))return"Buffer";const t=s(e);if(t)return t;if(e instanceof String||e instanceof Boolean||e instanceof Number)throw new TypeError("Please don't use object wrappers for primitive types");return"Object"}c.undefined=o("undefined"),c.string=o("string");const g=o("number");c.number=e=>g(e)&&!c.nan(e),c.bigint=o("bigint"),c.function_=o("function"),c.null_=e=>null===e,c.class_=e=>c.function_(e)&&e.toString().startsWith("class "),c.boolean=e=>!0===e||!1===e,c.symbol=o("symbol"),c.numericString=e=>c.string(e)&&!c.emptyStringOrWhitespace(e)&&!Number.isNaN(Number(e)),c.array=(e,t)=>!!Array.isArray(e)&&(!c.function_(t)||e.every(t)),c.buffer=e=>{var t,r,A,n;return null!==(n=null===(A=null===(r=null===(t=e)||void 0===t?void 0:t.constructor)||void 0===r?void 0:r.isBuffer)||void 0===A?void 0:A.call(r,e))&&void 0!==n&&n},c.nullOrUndefined=e=>c.null_(e)||c.undefined(e),c.object=e=>!c.null_(e)&&("object"==typeof e||c.function_(e)),c.iterable=e=>{var t;return c.function_(null===(t=e)||void 0===t?void 0:t[Symbol.iterator])},c.asyncIterable=e=>{var t;return c.function_(null===(t=e)||void 0===t?void 0:t[Symbol.asyncIterator])},c.generator=e=>c.iterable(e)&&c.function_(e.next)&&c.function_(e.throw),c.asyncGenerator=e=>c.asyncIterable(e)&&c.function_(e.next)&&c.function_(e.throw),c.nativePromise=e=>a("Promise")(e);c.promise=e=>c.nativePromise(e)||(e=>{var t,r;return c.function_(null===(t=e)||void 0===t?void 0:t.then)&&c.function_(null===(r=e)||void 0===r?void 0:r.catch)})(e),c.generatorFunction=a("GeneratorFunction"),c.asyncGeneratorFunction=e=>"AsyncGeneratorFunction"===s(e),c.asyncFunction=e=>"AsyncFunction"===s(e),c.boundFunction=e=>c.function_(e)&&!e.hasOwnProperty("prototype"),c.regExp=a("RegExp"),c.date=a("Date"),c.error=a("Error"),c.map=e=>a("Map")(e),c.set=e=>a("Set")(e),c.weakMap=e=>a("WeakMap")(e),c.weakSet=e=>a("WeakSet")(e),c.int8Array=a("Int8Array"),c.uint8Array=a("Uint8Array"),c.uint8ClampedArray=a("Uint8ClampedArray"),c.int16Array=a("Int16Array"),c.uint16Array=a("Uint16Array"),c.int32Array=a("Int32Array"),c.uint32Array=a("Uint32Array"),c.float32Array=a("Float32Array"),c.float64Array=a("Float64Array"),c.bigInt64Array=a("BigInt64Array"),c.bigUint64Array=a("BigUint64Array"),c.arrayBuffer=a("ArrayBuffer"),c.sharedArrayBuffer=a("SharedArrayBuffer"),c.dataView=a("DataView"),c.directInstanceOf=(e,t)=>Object.getPrototypeOf(e)===t.prototype,c.urlInstance=e=>a("URL")(e),c.urlString=e=>{if(!c.string(e))return!1;try{return new URL(e),!0}catch(e){return!1}},c.truthy=e=>Boolean(e),c.falsy=e=>!e,c.nan=e=>Number.isNaN(e),c.primitive=e=>{return c.null_(e)||(t=typeof e,n.includes(t));var t},c.integer=e=>Number.isInteger(e),c.safeInteger=e=>Number.isSafeInteger(e),c.plainObject=e=>{if("[object Object]"!==i.call(e))return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.getPrototypeOf({})},c.typedArray=e=>{return t=s(e),r.includes(t);var t};c.arrayLike=e=>!c.nullOrUndefined(e)&&!c.function_(e)&&(e=>c.safeInteger(e)&&e>=0)(e.length),c.inRange=(e,t)=>{if(c.number(t))return e>=Math.min(0,t)&&e<=Math.max(t,0);if(c.array(t)&&2===t.length)return e>=Math.min(...t)&&e<=Math.max(...t);throw new TypeError("Invalid range: "+JSON.stringify(t))};const l=["innerHTML","ownerDocument","style","attributes","nodeValue"];c.domElement=e=>c.object(e)&&1===e.nodeType&&c.string(e.nodeName)&&!c.plainObject(e)&&l.every(t=>t in e),c.observable=e=>{var t,r,A,n;return!!e&&(e===(null===(r=(t=e)[Symbol.observable])||void 0===r?void 0:r.call(t))||e===(null===(n=(A=e)["@@observable"])||void 0===n?void 0:n.call(A)))},c.nodeStream=e=>c.object(e)&&c.function_(e.pipe)&&!c.observable(e),c.infinite=e=>e===1/0||e===-1/0;const u=e=>t=>c.integer(t)&&Math.abs(t%2)===e;c.evenInteger=u(0),c.oddInteger=u(1),c.emptyArray=e=>c.array(e)&&0===e.length,c.nonEmptyArray=e=>c.array(e)&&e.length>0,c.emptyString=e=>c.string(e)&&0===e.length,c.nonEmptyString=e=>c.string(e)&&e.length>0;c.emptyStringOrWhitespace=e=>c.emptyString(e)||(e=>c.string(e)&&!/\S/.test(e))(e),c.emptyObject=e=>c.object(e)&&!c.map(e)&&!c.set(e)&&0===Object.keys(e).length,c.nonEmptyObject=e=>c.object(e)&&!c.map(e)&&!c.set(e)&&Object.keys(e).length>0,c.emptySet=e=>c.set(e)&&0===e.size,c.nonEmptySet=e=>c.set(e)&&e.size>0,c.emptyMap=e=>c.map(e)&&0===e.size,c.nonEmptyMap=e=>c.map(e)&&e.size>0;const h=(e,t,r)=>{if(!c.function_(t))throw new TypeError("Invalid predicate: "+JSON.stringify(t));if(0===r.length)throw new TypeError("Invalid number of values");return e.call(r,t)};c.any=(e,...t)=>(c.array(e)?e:[e]).some(e=>h(Array.prototype.some,e,t)),c.all=(e,...t)=>h(Array.prototype.every,e,t);const p=(e,t,r)=>{if(!e)throw new TypeError(`Expected value which is \`${t}\`, received value of type \`${c(r)}\`.`)};t.assert={undefined:e=>p(c.undefined(e),"undefined",e),string:e=>p(c.string(e),"string",e),number:e=>p(c.number(e),"number",e),bigint:e=>p(c.bigint(e),"bigint",e),function_:e=>p(c.function_(e),"Function",e),null_:e=>p(c.null_(e),"null",e),class_:e=>p(c.class_(e),"Class",e),boolean:e=>p(c.boolean(e),"boolean",e),symbol:e=>p(c.symbol(e),"symbol",e),numericString:e=>p(c.numericString(e),"string with a number",e),array:(e,t)=>{p(c.array(e),"Array",e),t&&e.forEach(t)},buffer:e=>p(c.buffer(e),"Buffer",e),nullOrUndefined:e=>p(c.nullOrUndefined(e),"null or undefined",e),object:e=>p(c.object(e),"Object",e),iterable:e=>p(c.iterable(e),"Iterable",e),asyncIterable:e=>p(c.asyncIterable(e),"AsyncIterable",e),generator:e=>p(c.generator(e),"Generator",e),asyncGenerator:e=>p(c.asyncGenerator(e),"AsyncGenerator",e),nativePromise:e=>p(c.nativePromise(e),"native Promise",e),promise:e=>p(c.promise(e),"Promise",e),generatorFunction:e=>p(c.generatorFunction(e),"GeneratorFunction",e),asyncGeneratorFunction:e=>p(c.asyncGeneratorFunction(e),"AsyncGeneratorFunction",e),asyncFunction:e=>p(c.asyncFunction(e),"AsyncFunction",e),boundFunction:e=>p(c.boundFunction(e),"Function",e),regExp:e=>p(c.regExp(e),"RegExp",e),date:e=>p(c.date(e),"Date",e),error:e=>p(c.error(e),"Error",e),map:e=>p(c.map(e),"Map",e),set:e=>p(c.set(e),"Set",e),weakMap:e=>p(c.weakMap(e),"WeakMap",e),weakSet:e=>p(c.weakSet(e),"WeakSet",e),int8Array:e=>p(c.int8Array(e),"Int8Array",e),uint8Array:e=>p(c.uint8Array(e),"Uint8Array",e),uint8ClampedArray:e=>p(c.uint8ClampedArray(e),"Uint8ClampedArray",e),int16Array:e=>p(c.int16Array(e),"Int16Array",e),uint16Array:e=>p(c.uint16Array(e),"Uint16Array",e),int32Array:e=>p(c.int32Array(e),"Int32Array",e),uint32Array:e=>p(c.uint32Array(e),"Uint32Array",e),float32Array:e=>p(c.float32Array(e),"Float32Array",e),float64Array:e=>p(c.float64Array(e),"Float64Array",e),bigInt64Array:e=>p(c.bigInt64Array(e),"BigInt64Array",e),bigUint64Array:e=>p(c.bigUint64Array(e),"BigUint64Array",e),arrayBuffer:e=>p(c.arrayBuffer(e),"ArrayBuffer",e),sharedArrayBuffer:e=>p(c.sharedArrayBuffer(e),"SharedArrayBuffer",e),dataView:e=>p(c.dataView(e),"DataView",e),urlInstance:e=>p(c.urlInstance(e),"URL",e),urlString:e=>p(c.urlString(e),"string with a URL",e),truthy:e=>p(c.truthy(e),"truthy",e),falsy:e=>p(c.falsy(e),"falsy",e),nan:e=>p(c.nan(e),"NaN",e),primitive:e=>p(c.primitive(e),"primitive",e),integer:e=>p(c.integer(e),"integer",e),safeInteger:e=>p(c.safeInteger(e),"integer",e),plainObject:e=>p(c.plainObject(e),"plain object",e),typedArray:e=>p(c.typedArray(e),"TypedArray",e),arrayLike:e=>p(c.arrayLike(e),"array-like",e),domElement:e=>p(c.domElement(e),"HTMLElement",e),observable:e=>p(c.observable(e),"Observable",e),nodeStream:e=>p(c.nodeStream(e),"Node.js Stream",e),infinite:e=>p(c.infinite(e),"infinite number",e),emptyArray:e=>p(c.emptyArray(e),"empty array",e),nonEmptyArray:e=>p(c.nonEmptyArray(e),"non-empty array",e),emptyString:e=>p(c.emptyString(e),"empty string",e),nonEmptyString:e=>p(c.nonEmptyString(e),"non-empty string",e),emptyStringOrWhitespace:e=>p(c.emptyStringOrWhitespace(e),"empty string or whitespace",e),emptyObject:e=>p(c.emptyObject(e),"empty object",e),nonEmptyObject:e=>p(c.nonEmptyObject(e),"non-empty object",e),emptySet:e=>p(c.emptySet(e),"empty set",e),nonEmptySet:e=>p(c.nonEmptySet(e),"non-empty set",e),emptyMap:e=>p(c.emptyMap(e),"empty map",e),nonEmptyMap:e=>p(c.nonEmptyMap(e),"non-empty map",e),evenInteger:e=>p(c.evenInteger(e),"even integer",e),oddInteger:e=>p(c.oddInteger(e),"odd integer",e),directInstanceOf:(e,t)=>p(c.directInstanceOf(e,t),"T",e),inRange:(e,t)=>p(c.inRange(e,t),"in range",e),any:(e,...t)=>p(c.any(e,...t),"predicate returns truthy for any value",t),all:(e,...t)=>p(c.all(e,...t),"predicate returns truthy for all values",t)},Object.defineProperties(c,{class:{value:c.class_},function:{value:c.function_},null:{value:c.null_}}),Object.defineProperties(t.assert,{class:{value:t.assert.class_},function:{value:t.assert.function_},null:{value:t.assert.null_}}),t.default=c,e.exports=c,e.exports.default=c,e.exports.assert=t.assert},98298:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(93121),n=Number(process.versions.node.split(".")[0]),o=e=>{const t={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};e.timings=t;const r=e=>{const r=e.emit.bind(e);e.emit=(A,...n)=>("error"===A&&(t.error=Date.now(),t.phases.total=t.error-t.start,e.emit=r),r(A,...n))};r(e),e.prependOnceListener("abort",()=>{t.abort=Date.now(),(!t.response||n>=13)&&(t.phases.total=Date.now()-t.start)});const o=e=>{t.socket=Date.now(),t.phases.wait=t.socket-t.start;const r=()=>{t.lookup=Date.now(),t.phases.dns=t.lookup-t.socket};e.prependOnceListener("lookup",r),A.default(e,{connect:()=>{t.connect=Date.now(),void 0===t.lookup&&(e.removeListener("lookup",r),t.lookup=t.connect,t.phases.dns=t.lookup-t.socket),t.phases.tcp=t.connect-t.lookup},secureConnect:()=>{t.secureConnect=Date.now(),t.phases.tls=t.secureConnect-t.connect}})};e.socket?o(e.socket):e.prependOnceListener("socket",o);const i=()=>{var e;t.upload=Date.now(),t.phases.request=t.upload-(null!=(e=t.secureConnect)?e:t.connect)};return("boolean"==typeof e.writableFinished?!e.writableFinished:!e.finished||0!==e.outputSize||e.socket&&0!==e.socket.writableLength)?e.prependOnceListener("finish",i):i(),e.prependOnceListener("response",e=>{t.response=Date.now(),t.phases.firstByte=t.response-t.upload,e.timings=t,r(e),e.prependOnceListener("end",()=>{t.end=Date.now(),t.phases.download=t.end-t.response,t.phases.total=t.end-t.start})}),t};t.default=o,e.exports=o,e.exports.default=o},58069:(e,t,r)=>{"use strict";l.ifExists=function(e,t,r){return l(e,t,r).catch(()=>{})};const A=r(31669),n=r(46227),o=r(85622),i=r(97369),s=/^#!\s*(?:\/usr\/bin\/env)?\s*([^ \t]+)(.*)$/,a={createPwshFile:!0,createCmdFile:i(),fs:r(35747)},c=new Map([[".js","node"],[".cmd","cmd"],[".bat","cmd"],[".ps1","pwsh"],[".sh","sh"]]);function g(e){const t={...a,...e},r=t.fs;return t.fs_={chmod:r.chmod?A.promisify(r.chmod):async()=>{},stat:A.promisify(r.stat),unlink:A.promisify(r.unlink),readFile:A.promisify(r.readFile),writeFile:A.promisify(r.writeFile)},t}async function l(e,t,r){const A=g(r);await A.fs_.stat(e),await async function(e,t,r){const A=await async function(e,t){const r=await t.fs_.readFile(e,"utf8"),A=r.trim().split(/\r*\n/)[0].match(s);if(!A){const t=o.extname(e).toLowerCase();return{program:c.get(t)||null,additionalArgs:""}}return{program:A[1],additionalArgs:A[2]}}(e,r);return await function(e,t){return n(o.dirname(e),{fs:t.fs})}(t,r),function(e,t,r,A){const n=g(A),o=[{generator:h,extension:""}];n.createCmdFile&&o.push({generator:u,extension:".cmd"});n.createPwshFile&&o.push({generator:p,extension:".ps1"});return Promise.all(o.map(A=>async function(e,t,r,A,n){const o=n.preserveSymlinks?"--preserve-symlinks":"",i=[r.additionalArgs,o].filter(e=>e).join(" ");return n=Object.assign({},n,{prog:r.program,args:i}),await function(e,t){return function(e,t){return t.fs_.unlink(e).catch(()=>{})}(e,t)}(t,n),await n.fs_.writeFile(t,A(e,t,n),"utf8"),function(e,t){return function(e,t){return t.fs_.chmod(e,493)}(e,t)}(t,n)}(e,t+A.extension,r,A.generator,n)))}(e,t,A,r)}(e,t,A)}function u(e,t,r){let A=o.relative(o.dirname(t),e).split("/").join("\\");const n=o.isAbsolute(A)?`"${A}"`:`"%~dp0\\${A}"`;let i,s=r.prog,a=r.args||"";const c=d(r.nodePath).win32;s?(i=`"%~dp0\\${s}.exe"`,A=n):(s=n,a="",A="");let g=r.progArgs?r.progArgs.join(" ")+" ":"",l=c?`@SET NODE_PATH=${c}\r\n`:"";return l+=i?`@IF EXIST ${i} (\r\n ${i} ${a} ${A} ${g}%*\r\n) ELSE (\r\n @SETLOCAL\r\n @SET PATHEXT=%PATHEXT:;.JS;=;%\r\n ${s} ${a} ${A} ${g}%*\r\n)`:`@${s} ${a} ${A} ${g}%*\r\n`,l}function h(e,t,r){let A,n=o.relative(o.dirname(t),e),i=r.prog&&r.prog.split("\\").join("/");n=n.split("\\").join("/");const s=o.isAbsolute(n)?`"${n}"`:`"$basedir/${n}"`;let a=r.args||"";const c=d(r.nodePath).posix;i?(A=`"$basedir/${r.prog}"`,n=s):(i=s,a="",n="");let g=r.progArgs?r.progArgs.join(" ")+" ":"",l="#!/bin/sh\n";l+='basedir=$(dirname "$(echo "$0" | sed -e \'s,\\\\,/,g\')")\n\ncase `uname` in\n *CYGWIN*) basedir=`cygpath -w "$basedir"`;;\nesac\n\n';const u=r.nodePath?`export NODE_PATH="${c}"\n`:"";return l+=A?u+`if [ -x ${A} ]; then\n`+` exec ${A} ${a} ${n} ${g}"$@"\nelse \n`+` exec ${i} ${a} ${n} ${g}"$@"\nfi\n`:`${u}${i} ${a} ${n} ${g}"$@"\nexit $?\n`,l}function p(e,t,r){let A=o.relative(o.dirname(t),e);const n=r.prog&&r.prog.split("\\").join("/");let i,s=n&&`"${n}$exe"`;A=A.split("\\").join("/");const a=o.isAbsolute(A)?`"${A}"`:`"$basedir/${A}"`;let c=r.args||"",g=d(r.nodePath);const l=g.win32,u=g.posix;s?(i=`"$basedir/${r.prog}$exe"`,A=a):(s=a,c="",A="");let h=r.progArgs?r.progArgs.join(" ")+" ":"",p='#!/usr/bin/env pwsh\n$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent\n\n$exe=""\n'+(r.nodePath?`$env_node_path=$env:NODE_PATH\n$env:NODE_PATH="${l}"\n`:"")+'if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {\n # Fix case when both the Windows and Linux builds of Node\n # are installed in the same directory\n $exe=".exe"\n}';return r.nodePath&&(p=p+" else {\n"+` $env:NODE_PATH="${u}"\n}`),p+="\n",p=i?p+"$ret=0\n"+`if (Test-Path ${i}) {\n # Support pipeline input\n if ($MyInvocation.ExpectingInput) {\n`+` $input | & ${i} ${c} ${A} ${h}$args\n } else {\n`+` & ${i} ${c} ${A} ${h}$args\n }\n $ret=$LASTEXITCODE\n} else {\n # Support pipeline input\n if ($MyInvocation.ExpectingInput) {\n`+` $input | & ${s} ${c} ${A} ${h}$args\n } else {\n`+` & ${s} ${c} ${A} ${h}$args\n }\n $ret=$LASTEXITCODE\n}\n`+(r.nodePath?"$env:NODE_PATH=$env_node_path\n":"")+"exit $ret\n":p+"# Support pipeline input\nif ($MyInvocation.ExpectingInput) {\n"+` $input | & ${s} ${c} ${A} ${h}$args\n} else {\n`+` & ${s} ${c} ${A} ${h}$args\n}\n`+(r.nodePath?"$env:NODE_PATH=$env_node_path\n":"")+"exit $LASTEXITCODE\n",p}function d(e){if(!e)return{win32:"",posix:""};let t="string"==typeof e?e.split(o.delimiter):Array.from(e),r={};for(let e=0;e"/mnt/"+t.toLowerCase()):t[e];r.win32=r.win32?`${r.win32};${A}`:A,r.posix=r.posix?`${r.posix}:${n}`:n,r[e]={win32:A,posix:n}}return r}e.exports=l},97991:(e,t,r)=>{"use strict";const A=/[\u001b\u009b][[\]#;?()]*(?:(?:(?:[^\W_]*;?[^\W_]*)\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,n=()=>{const e={enabled:!0,visible:!0,styles:{},keys:{}};"FORCE_COLOR"in process.env&&(e.enabled="0"!==process.env.FORCE_COLOR);const t=(e,t,r)=>"function"==typeof e?e(t):e.wrap(t,r),n=(r,A)=>{if(""===r||null==r)return"";if(!1===e.enabled)return r;if(!1===e.visible)return"";let n=""+r,o=n.includes("\n"),i=A.length;for(i>0&&A.includes("unstyle")&&(A=[...new Set(["unstyle",...A])].reverse());i-- >0;)n=t(e.styles[A[i]],n,o);return n},o=(t,r,A)=>{e.styles[t]=(e=>{let t=e.open=`[${e.codes[0]}m`,r=e.close=`[${e.codes[1]}m`,A=e.regex=new RegExp(`\\u001b\\[${e.codes[1]}m`,"g");return e.wrap=(e,n)=>{e.includes(r)&&(e=e.replace(A,r+t));let o=t+e+r;return n?o.replace(/\r*\n/g,`${r}$&${t}`):o},e})({name:t,codes:r}),(e.keys[A]||(e.keys[A]=[])).push(t),Reflect.defineProperty(e,t,{configurable:!0,enumerable:!0,set(r){e.alias(t,r)},get(){let r=e=>n(e,r.stack);return Reflect.setPrototypeOf(r,e),r.stack=this.stack?this.stack.concat(t):[t],r}})};return o("reset",[0,0],"modifier"),o("bold",[1,22],"modifier"),o("dim",[2,22],"modifier"),o("italic",[3,23],"modifier"),o("underline",[4,24],"modifier"),o("inverse",[7,27],"modifier"),o("hidden",[8,28],"modifier"),o("strikethrough",[9,29],"modifier"),o("black",[30,39],"color"),o("red",[31,39],"color"),o("green",[32,39],"color"),o("yellow",[33,39],"color"),o("blue",[34,39],"color"),o("magenta",[35,39],"color"),o("cyan",[36,39],"color"),o("white",[37,39],"color"),o("gray",[90,39],"color"),o("grey",[90,39],"color"),o("bgBlack",[40,49],"bg"),o("bgRed",[41,49],"bg"),o("bgGreen",[42,49],"bg"),o("bgYellow",[43,49],"bg"),o("bgBlue",[44,49],"bg"),o("bgMagenta",[45,49],"bg"),o("bgCyan",[46,49],"bg"),o("bgWhite",[47,49],"bg"),o("blackBright",[90,39],"bright"),o("redBright",[91,39],"bright"),o("greenBright",[92,39],"bright"),o("yellowBright",[93,39],"bright"),o("blueBright",[94,39],"bright"),o("magentaBright",[95,39],"bright"),o("cyanBright",[96,39],"bright"),o("whiteBright",[97,39],"bright"),o("bgBlackBright",[100,49],"bgBright"),o("bgRedBright",[101,49],"bgBright"),o("bgGreenBright",[102,49],"bgBright"),o("bgYellowBright",[103,49],"bgBright"),o("bgBlueBright",[104,49],"bgBright"),o("bgMagentaBright",[105,49],"bgBright"),o("bgCyanBright",[106,49],"bgBright"),o("bgWhiteBright",[107,49],"bgBright"),e.ansiRegex=A,e.hasColor=e.hasAnsi=t=>(e.ansiRegex.lastIndex=0,"string"==typeof t&&""!==t&&e.ansiRegex.test(t)),e.alias=(t,r)=>{let A="string"==typeof r?e[r]:r;if("function"!=typeof A)throw new TypeError("Expected alias to be the name of an existing color (string) or a function");A.stack||(Reflect.defineProperty(A,"name",{value:t}),e.styles[t]=A,A.stack=[t]),Reflect.defineProperty(e,t,{configurable:!0,enumerable:!0,set(r){e.alias(t,r)},get(){let t=e=>n(e,t.stack);return Reflect.setPrototypeOf(t,e),t.stack=this.stack?this.stack.concat(A.stack):A.stack,t}})},e.theme=t=>{if(null===(r=t)||"object"!=typeof r||Array.isArray(r))throw new TypeError("Expected theme to be an object");var r;for(let r of Object.keys(t))e.alias(r,t[r]);return e},e.alias("unstyle",t=>"string"==typeof t&&""!==t?(e.ansiRegex.lastIndex=0,t.replace(e.ansiRegex,"")):""),e.alias("noop",e=>e),e.none=e.clear=e.noop,e.stripColor=e.unstyle,e.symbols=r(31283),e.define=o,e};e.exports=n(),e.exports.create=n},31283:e=>{"use strict";const t="Hyper"===process.env.TERM_PROGRAM,r="win32"===process.platform,A="linux"===process.platform,n={ballotDisabled:"☒",ballotOff:"☐",ballotOn:"☑",bullet:"•",bulletWhite:"◦",fullBlock:"█",heart:"❤",identicalTo:"≡",line:"─",mark:"※",middot:"·",minus:"-",multiplication:"×",obelus:"÷",pencilDownRight:"✎",pencilRight:"✏",pencilUpRight:"✐",percent:"%",pilcrow2:"❡",pilcrow:"¶",plusMinus:"±",section:"§",starsOff:"☆",starsOn:"★",upDownArrow:"↕"},o=Object.assign({},n,{check:"√",cross:"×",ellipsisLarge:"...",ellipsis:"...",info:"i",question:"?",questionSmall:"?",pointer:">",pointerSmall:"»",radioOff:"( )",radioOn:"(*)",warning:"‼"}),i=Object.assign({},n,{ballotCross:"✘",check:"✔",cross:"✖",ellipsisLarge:"⋯",ellipsis:"…",info:"ℹ",question:"?",questionFull:"?",questionSmall:"﹖",pointer:A?"▸":"❯",pointerSmall:A?"‣":"›",radioOff:"◯",radioOn:"◉",warning:"⚠"});e.exports=r&&!t?o:i,Reflect.defineProperty(e.exports,"common",{enumerable:!1,value:n}),Reflect.defineProperty(e.exports,"windows",{enumerable:!1,value:o}),Reflect.defineProperty(e.exports,"other",{enumerable:!1,value:i})},18483:(e,t,r)=>{"use strict";e=r.nmd(e);const A=(e,t)=>(...r)=>`[${e(...r)+t}m`,n=(e,t)=>(...r)=>{const A=e(...r);return`[${38+t};5;${A}m`},o=(e,t)=>(...r)=>{const A=e(...r);return`[${38+t};2;${A[0]};${A[1]};${A[2]}m`},i=e=>e,s=(e,t,r)=>[e,t,r],a=(e,t,r)=>{Object.defineProperty(e,t,{get:()=>{const A=r();return Object.defineProperty(e,t,{value:A,enumerable:!0,configurable:!0}),A},enumerable:!0,configurable:!0})};let c;const g=(e,t,A,n)=>{void 0===c&&(c=r(2744));const o=n?10:0,i={};for(const[r,n]of Object.entries(c)){const s="ansi16"===r?"ansi":r;r===t?i[s]=e(A,o):"object"==typeof n&&(i[s]=e(n[t],o))}return i};Object.defineProperty(e,"exports",{enumerable:!0,get:function(){const e=new Map,t={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};t.color.gray=t.color.blackBright,t.bgColor.bgGray=t.bgColor.bgBlackBright,t.color.grey=t.color.blackBright,t.bgColor.bgGrey=t.bgColor.bgBlackBright;for(const[r,A]of Object.entries(t)){for(const[r,n]of Object.entries(A))t[r]={open:`[${n[0]}m`,close:`[${n[1]}m`},A[r]=t[r],e.set(n[0],n[1]);Object.defineProperty(t,r,{value:A,enumerable:!1})}return Object.defineProperty(t,"codes",{value:e,enumerable:!1}),t.color.close="",t.bgColor.close="",a(t.color,"ansi",()=>g(A,"ansi16",i,!1)),a(t.color,"ansi256",()=>g(n,"ansi256",i,!1)),a(t.color,"ansi16m",()=>g(o,"rgb",s,!1)),a(t.bgColor,"ansi",()=>g(A,"ansi16",i,!0)),a(t.bgColor,"ansi256",()=>g(n,"ansi256",i,!0)),a(t.bgColor,"ansi16m",()=>g(o,"rgb",s,!0)),t}})},39920:e=>{"use strict";e.exports=(...e)=>[...new Set([].concat(...e))]},67648:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getBinjumper=void 0;const A=r(78761);let n=null;t.getBinjumper=function(){return n||(n=A.gunzipSync(Buffer.from("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","base64"))),n}},50730:(e,t,r)=>{"use strict";t.O9=void 0;const A=r(85622),n=r(35747),o=r(31669),i=r(67648);Object.defineProperty(t,"O9",{enumerable:!0,get:function(){return i.getBinjumper}})},73975:(e,t,r)=>{"use strict";var A=r(86897).Duplex;function n(e){if(!(this instanceof n))return new n(e);if(this._bufs=[],this.length=0,"function"==typeof e){this._callback=e;var t=function(e){this._callback&&(this._callback(e),this._callback=null)}.bind(this);this.on("pipe",(function(e){e.on("error",t)})),this.on("unpipe",(function(e){e.removeListener("error",t)}))}else this.append(e);A.call(this)}r(31669).inherits(n,A),n.prototype._offset=function(e){var t,r=0,A=0;if(0===e)return[0,0];for(;Athis.length||e<0)){var t=this._offset(e);return this._bufs[t[0]][t[1]]}},n.prototype.slice=function(e,t){return"number"==typeof e&&e<0&&(e+=this.length),"number"==typeof t&&t<0&&(t+=this.length),this.copy(null,0,e,t)},n.prototype.copy=function(e,t,r,A){if(("number"!=typeof r||r<0)&&(r=0),("number"!=typeof A||A>this.length)&&(A=this.length),r>=this.length)return e||Buffer.alloc(0);if(A<=0)return e||Buffer.alloc(0);var n,o,i=!!e,s=this._offset(r),a=A-r,c=a,g=i&&t||0,l=s[1];if(0===r&&A==this.length){if(!i)return 1===this._bufs.length?this._bufs[0]:Buffer.concat(this._bufs,this.length);for(o=0;o(n=this._bufs[o].length-l))){this._bufs[o].copy(e,g,l,l+c);break}this._bufs[o].copy(e,g,l),g+=n,c-=n,l&&(l=0)}return e},n.prototype.shallowSlice=function(e,t){if(e=e||0,t="number"!=typeof t?this.length:t,e<0&&(e+=this.length),t<0&&(t+=this.length),e===t)return new n;var r=this._offset(e),A=this._offset(t),o=this._bufs.slice(r[0],A[0]+1);return 0==A[1]?o.pop():o[o.length-1]=o[o.length-1].slice(0,A[1]),0!=r[1]&&(o[0]=o[0].slice(r[1])),new n(o)},n.prototype.toString=function(e,t,r){return this.slice(t,r).toString(e)},n.prototype.consume=function(e){for(;this._bufs.length;){if(!(e>=this._bufs[0].length)){this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift()}return this},n.prototype.duplicate=function(){for(var e=0,t=new n;ethis.length?this.length:t;for(var A=this._offset(t),o=A[0],i=A[1];o=e.length){var a=s.indexOf(e,i);if(-1!==a)return this._reverseOffset([o,a]);i=s.length-e.length+1}else{var c=this._reverseOffset([o,i]);if(this._match(c,e))return c;i++}}i=0}return-1},n.prototype._match=function(e,t){if(this.length-e{"use strict";const A=r(54900),n=r(44617),o=r(1495),i=r(425),s=(e,t={})=>{let r=[];if(Array.isArray(e))for(let A of e){let e=s.create(A,t);Array.isArray(e)?r.push(...e):r.push(e)}else r=[].concat(s.create(e,t));return t&&!0===t.expand&&!0===t.nodupes&&(r=[...new Set(r)]),r};s.parse=(e,t={})=>i(e,t),s.stringify=(e,t={})=>A("string"==typeof e?s.parse(e,t):e,t),s.compile=(e,t={})=>("string"==typeof e&&(e=s.parse(e,t)),n(e,t)),s.expand=(e,t={})=>{"string"==typeof e&&(e=s.parse(e,t));let r=o(e,t);return!0===t.noempty&&(r=r.filter(Boolean)),!0===t.nodupes&&(r=[...new Set(r)]),r},s.create=(e,t={})=>""===e||e.length<3?[e]:!0!==t.expand?s.compile(e,t):s.expand(e,t),e.exports=s},44617:(e,t,r)=>{"use strict";const A=r(52169),n=r(4542);e.exports=(e,t={})=>{let r=(e,o={})=>{let i=n.isInvalidBrace(o),s=!0===e.invalid&&!0===t.escapeInvalid,a=!0===i||!0===s,c=!0===t.escapeInvalid?"\\":"",g="";if(!0===e.isOpen)return c+e.value;if(!0===e.isClose)return c+e.value;if("open"===e.type)return a?c+e.value:"(";if("close"===e.type)return a?c+e.value:")";if("comma"===e.type)return"comma"===e.prev.type?"":a?e.value:"|";if(e.value)return e.value;if(e.nodes&&e.ranges>0){let r=n.reduce(e.nodes),o=A(...r,{...t,wrap:!1,toRegex:!0});if(0!==o.length)return r.length>1&&o.length>1?`(${o})`:o}if(e.nodes)for(let t of e.nodes)g+=r(t,e);return g};return r(e)}},5384:e=>{"use strict";e.exports={MAX_LENGTH:65536,CHAR_0:"0",CHAR_9:"9",CHAR_UPPERCASE_A:"A",CHAR_LOWERCASE_A:"a",CHAR_UPPERCASE_Z:"Z",CHAR_LOWERCASE_Z:"z",CHAR_LEFT_PARENTHESES:"(",CHAR_RIGHT_PARENTHESES:")",CHAR_ASTERISK:"*",CHAR_AMPERSAND:"&",CHAR_AT:"@",CHAR_BACKSLASH:"\\",CHAR_BACKTICK:"`",CHAR_CARRIAGE_RETURN:"\r",CHAR_CIRCUMFLEX_ACCENT:"^",CHAR_COLON:":",CHAR_COMMA:",",CHAR_DOLLAR:"$",CHAR_DOT:".",CHAR_DOUBLE_QUOTE:'"',CHAR_EQUAL:"=",CHAR_EXCLAMATION_MARK:"!",CHAR_FORM_FEED:"\f",CHAR_FORWARD_SLASH:"/",CHAR_HASH:"#",CHAR_HYPHEN_MINUS:"-",CHAR_LEFT_ANGLE_BRACKET:"<",CHAR_LEFT_CURLY_BRACE:"{",CHAR_LEFT_SQUARE_BRACKET:"[",CHAR_LINE_FEED:"\n",CHAR_NO_BREAK_SPACE:" ",CHAR_PERCENT:"%",CHAR_PLUS:"+",CHAR_QUESTION_MARK:"?",CHAR_RIGHT_ANGLE_BRACKET:">",CHAR_RIGHT_CURLY_BRACE:"}",CHAR_RIGHT_SQUARE_BRACKET:"]",CHAR_SEMICOLON:";",CHAR_SINGLE_QUOTE:"'",CHAR_SPACE:" ",CHAR_TAB:"\t",CHAR_UNDERSCORE:"_",CHAR_VERTICAL_LINE:"|",CHAR_ZERO_WIDTH_NOBREAK_SPACE:"\ufeff"}},1495:(e,t,r)=>{"use strict";const A=r(52169),n=r(54900),o=r(4542),i=(e="",t="",r=!1)=>{let A=[];if(e=[].concat(e),!(t=[].concat(t)).length)return e;if(!e.length)return r?o.flatten(t).map(e=>`{${e}}`):t;for(let n of e)if(Array.isArray(n))for(let e of n)A.push(i(e,t,r));else for(let e of t)!0===r&&"string"==typeof e&&(e=`{${e}}`),A.push(Array.isArray(e)?i(n,e,r):n+e);return o.flatten(A)};e.exports=(e,t={})=>{let r=void 0===t.rangeLimit?1e3:t.rangeLimit,s=(e,a={})=>{e.queue=[];let c=a,g=a.queue;for(;"brace"!==c.type&&"root"!==c.type&&c.parent;)c=c.parent,g=c.queue;if(e.invalid||e.dollar)return void g.push(i(g.pop(),n(e,t)));if("brace"===e.type&&!0!==e.invalid&&2===e.nodes.length)return void g.push(i(g.pop(),["{}"]));if(e.nodes&&e.ranges>0){let s=o.reduce(e.nodes);if(o.exceedsLimit(...s,t.step,r))throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let a=A(...s,t);return 0===a.length&&(a=n(e,t)),g.push(i(g.pop(),a)),void(e.nodes=[])}let l=o.encloseBrace(e),u=e.queue,h=e;for(;"brace"!==h.type&&"root"!==h.type&&h.parent;)h=h.parent,u=h.queue;for(let t=0;t{"use strict";const A=r(54900),{MAX_LENGTH:n,CHAR_BACKSLASH:o,CHAR_BACKTICK:i,CHAR_COMMA:s,CHAR_DOT:a,CHAR_LEFT_PARENTHESES:c,CHAR_RIGHT_PARENTHESES:g,CHAR_LEFT_CURLY_BRACE:l,CHAR_RIGHT_CURLY_BRACE:u,CHAR_LEFT_SQUARE_BRACKET:h,CHAR_RIGHT_SQUARE_BRACKET:p,CHAR_DOUBLE_QUOTE:d,CHAR_SINGLE_QUOTE:C,CHAR_NO_BREAK_SPACE:f,CHAR_ZERO_WIDTH_NOBREAK_SPACE:I}=r(5384);e.exports=(e,t={})=>{if("string"!=typeof e)throw new TypeError("Expected a string");let r=t||{},E="number"==typeof r.maxLength?Math.min(n,r.maxLength):n;if(e.length>E)throw new SyntaxError(`Input length (${e.length}), exceeds max characters (${E})`);let B,y={type:"root",input:e,nodes:[]},m=[y],w=y,Q=y,D=0,b=e.length,v=0,S=0;const k=()=>e[v++],N=e=>{if("text"===e.type&&"dot"===Q.type&&(Q.type="text"),!Q||"text"!==Q.type||"text"!==e.type)return w.nodes.push(e),e.parent=w,e.prev=Q,Q=e,e;Q.value+=e.value};for(N({type:"bos"});v0){if(w.ranges>0){w.ranges=0;let e=w.nodes.shift();w.nodes=[e,{type:"text",value:A(w)}]}N({type:"comma",value:B}),w.commas++}else if(B===a&&S>0&&0===w.commas){let e=w.nodes;if(0===S||0===e.length){N({type:"text",value:B});continue}if("dot"===Q.type){if(w.range=[],Q.value+=B,Q.type="range",3!==w.nodes.length&&5!==w.nodes.length){w.invalid=!0,w.ranges=0,Q.type="text";continue}w.ranges++,w.args=[];continue}if("range"===Q.type){e.pop();let t=e[e.length-1];t.value+=Q.value+B,Q=t,w.ranges--;continue}N({type:"dot",value:B})}else N({type:"text",value:B});else{if("brace"!==w.type){N({type:"text",value:B});continue}let e="close";w=m.pop(),w.close=!0,N({type:e,value:B}),S--,w=m[m.length-1]}else{S++;let e=Q.value&&"$"===Q.value.slice(-1)||!0===w.dollar;w=N({type:"brace",open:!0,close:!1,dollar:e,depth:S,commas:0,ranges:0,nodes:[]}),m.push(w),N({type:"open",value:B})}else{let e,r=B;for(!0!==t.keepQuotes&&(B="");v{e.nodes||("open"===e.type&&(e.isOpen=!0),"close"===e.type&&(e.isClose=!0),e.nodes||(e.type="text"),e.invalid=!0)});let e=m[m.length-1],t=e.nodes.indexOf(w);e.nodes.splice(t,1,...w.nodes)}}while(m.length>0);return N({type:"eos"}),y}},54900:(e,t,r)=>{"use strict";const A=r(4542);e.exports=(e,t={})=>{let r=(e,n={})=>{let o=t.escapeInvalid&&A.isInvalidBrace(n),i=!0===e.invalid&&!0===t.escapeInvalid,s="";if(e.value)return(o||i)&&A.isOpenOrClose(e)?"\\"+e.value:e.value;if(e.value)return e.value;if(e.nodes)for(let t of e.nodes)s+=r(t);return s};return r(e)}},4542:(e,t)=>{"use strict";t.isInteger=e=>"number"==typeof e?Number.isInteger(e):"string"==typeof e&&""!==e.trim()&&Number.isInteger(Number(e)),t.find=(e,t)=>e.nodes.find(e=>e.type===t),t.exceedsLimit=(e,r,A=1,n)=>!1!==n&&(!(!t.isInteger(e)||!t.isInteger(r))&&(Number(r)-Number(e))/Number(A)>=n),t.escapeNode=(e,t=0,r)=>{let A=e.nodes[t];A&&(r&&A.type===r||"open"===A.type||"close"===A.type)&&!0!==A.escaped&&(A.value="\\"+A.value,A.escaped=!0)},t.encloseBrace=e=>"brace"===e.type&&(e.commas>>0+e.ranges>>0==0&&(e.invalid=!0,!0)),t.isInvalidBrace=e=>"brace"===e.type&&(!(!0!==e.invalid&&!e.dollar)||(e.commas>>0+e.ranges>>0==0||!0!==e.open||!0!==e.close)&&(e.invalid=!0,!0)),t.isOpenOrClose=e=>"open"===e.type||"close"===e.type||(!0===e.open||!0===e.close),t.reduce=e=>e.reduce((e,t)=>("text"===t.type&&e.push(t.value),"range"===t.type&&(t.type="text"),e),[]),t.flatten=(...e)=>{const t=[],r=e=>{for(let A=0;A{"use strict";const{V4MAPPED:A,ADDRCONFIG:n,ALL:o,promises:{Resolver:i},lookup:s}=r(40881),{promisify:a}=r(31669),c=r(12087),g=Symbol("cacheableLookupCreateConnection"),l=Symbol("cacheableLookupInstance"),u=Symbol("expires"),h="number"==typeof o,p=e=>{if(!e||"function"!=typeof e.createConnection)throw new Error("Expected an Agent instance as the first argument")},d=()=>{let e=!1,t=!1;for(const r of Object.values(c.networkInterfaces()))for(const A of r)if(!A.internal&&("IPv6"===A.family?t=!0:e=!0,e&&t))return{has4:e,has6:t};return{has4:e,has6:t}},C={ttl:!0},f={all:!0};class I{constructor({cache:e=new Map,maxTtl:t=1/0,fallbackDuration:r=3600,errorTtl:A=.15,resolver:n=new i,lookup:o=s}={}){if(this.maxTtl=t,this.errorTtl=A,this._cache=e,this._resolver=n,this._dnsLookup=a(o),this._resolver instanceof i?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=a(this._resolver.resolve4.bind(this._resolver)),this._resolve6=a(this._resolver.resolve6.bind(this._resolver))),this._iface=d(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,r<1)this._fallback=!1;else{this._fallback=!0;const e=setInterval(()=>{this._hostnamesToFallback.clear()},1e3*r);e.unref&&e.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,t,r){if("function"==typeof t?(r=t,t={}):"number"==typeof t&&(t={family:t}),!r)throw new Error("Callback must be a function.");this.lookupAsync(e,t).then(e=>{t.all?r(null,e):r(null,e.address,e.family,e.expires,e.ttl)},r)}async lookupAsync(e,t={}){"number"==typeof t&&(t={family:t});let r=await this.query(e);if(6===t.family){const e=r.filter(e=>6===e.family);t.hints&A&&(h&&t.hints&o||0===e.length)?(e=>{for(const t of e)6!==t.family&&(t.address="::ffff:"+t.address,t.family=6)})(r):r=e}else 4===t.family&&(r=r.filter(e=>4===e.family));if(t.hints&n){const{_iface:e}=this;r=r.filter(t=>6===t.family?e.has6:e.has4)}if(0===r.length){const t=new Error("cacheableLookup ENOTFOUND "+e);throw t.code="ENOTFOUND",t.hostname=e,t}return t.all?r:r[0]}async query(e){let t=await this._cache.get(e);if(!t){const r=this._pending[e];if(r)t=await r;else{const r=this.queryAndCache(e);this._pending[e]=r,t=await r}}return t=t.map(e=>({...e})),t}async _resolve(e){const[t,r]=await Promise.all([this._resolve4(e,C),this._resolve6(e,C)].map(e=>(async e=>{try{return await e}catch(e){if("ENODATA"===e.code||"ENOTFOUND"===e.code)return[];throw e}})(e)));let A=0,n=0,o=0;const i=Date.now();for(const e of t)e.family=4,e.expires=i+1e3*e.ttl,A=Math.max(A,e.ttl);for(const e of r)e.family=6,e.expires=i+1e3*e.ttl,n=Math.max(n,e.ttl);return o=t.length>0?r.length>0?Math.min(A,n):A:n,{entries:[...t,...r],cacheTtl:o}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch(e){return{entries:[],cacheTtl:0}}}async _set(e,t,r){if(this.maxTtl>0&&r>0){r=1e3*Math.min(r,this.maxTtl),t[u]=Date.now()+r;try{await this._cache.set(e,t,r)}catch(e){this.lookupAsync=async()=>{const t=new Error("Cache Error. Please recreate the CacheableLookup instance.");throw t.cause=e,t}}A=this._cache,Symbol.iterator in A&&this._tick(r)}var A}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,f);try{let t=await this._resolve(e);0===t.entries.length&&this._fallback&&(t=await this._lookup(e),0!==t.entries.length&&this._hostnamesToFallback.add(e));const r=0===t.entries.length?this.errorTtl:t.cacheTtl;return await this._set(e,t.entries,r),delete this._pending[e],t.entries}catch(t){throw delete this._pending[e],t}}_tick(e){const t=this._nextRemovalTime;(!t||e{this._nextRemovalTime=!1;let e=1/0;const t=Date.now();for(const[r,A]of this._cache){const n=A[u];t>=n?this._cache.delete(r):n("lookup"in t||(t.lookup=this.lookup),e[g](t,r))}uninstall(e){if(p(e),e[g]){if(e[l]!==this)throw new Error("The agent is not owned by this CacheableLookup instance");e.createConnection=e[g],delete e[g],delete e[l]}}updateInterfaceInfo(){const{_iface:e}=this;this._iface=d(),(e.has4&&!this._iface.has4||e.has6&&!this._iface.has6)&&this._cache.clear()}clear(e){e?this._cache.delete(e):this._cache.clear()}}e.exports=I,e.exports.default=I},11200:(e,t,r)=>{"use strict";const A=r(28614),n=r(78835),o=r(19793),i=r(58764),s=r(86834),a=r(48491),c=r(55737),g=r(15751),l=r(72515);class u{constructor(e,t){if("function"!=typeof e)throw new TypeError("Parameter `request` must be a function");return this.cache=new l({uri:"string"==typeof t&&t,store:"string"!=typeof t&&t,namespace:"cacheable-request"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(t,r)=>{let l;if("string"==typeof t)l=p(n.parse(t)),t={};else if(t instanceof n.URL)l=p(n.parse(t.toString())),t={};else{const[e,...r]=(t.path||"").split("?"),A=r.length>0?"?"+r.join("?"):"";l=p({...t,pathname:e,search:A})}(t={headers:{},method:"GET",cache:!0,strictTtl:!1,automaticFailover:!1,...t,...h(l)}).headers=c(t.headers);const d=new A,C=o(n.format(l),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),f=`${t.method}:${C}`;let I=!1,E=!1;const B=t=>{E=!0;let A,n=!1;const o=new Promise(e=>{A=()=>{n||(n=!0,e())}}),c=e=>{if(I&&!t.forceRefresh){e.status=e.statusCode;const r=s.fromObject(I.cachePolicy).revalidatedPolicy(t,e);if(!r.modified){const t=r.policy.responseHeaders();(e=new a(I.statusCode,t,I.body,I.url)).cachePolicy=r.policy,e.fromCache=!0}}let A;e.fromCache||(e.cachePolicy=new s(t,e,t),e.fromCache=!1),t.cache&&e.cachePolicy.storable()?(A=g(e),(async()=>{try{const r=i.buffer(e);if(await Promise.race([o,new Promise(t=>e.once("end",t))]),n)return;const A=await r,s={cachePolicy:e.cachePolicy.toObject(),url:e.url,statusCode:e.fromCache?I.statusCode:e.statusCode,body:A};let a=t.strictTtl?e.cachePolicy.timeToLive():void 0;t.maxTtl&&(a=a?Math.min(a,t.maxTtl):t.maxTtl),await this.cache.set(f,s,a)}catch(e){d.emit("error",new u.CacheError(e))}})()):t.cache&&I&&(async()=>{try{await this.cache.delete(f)}catch(e){d.emit("error",new u.CacheError(e))}})(),d.emit("response",A||e),"function"==typeof r&&r(A||e)};try{const r=e(t,c);r.once("error",A),r.once("abort",A),d.emit("request",r)}catch(e){d.emit("error",new u.RequestError(e))}};return(async()=>{const e=async e=>{await Promise.resolve();const t=e.cache?await this.cache.get(f):void 0;if(void 0===t)return B(e);const A=s.fromObject(t.cachePolicy);if(A.satisfiesWithoutRevalidation(e)&&!e.forceRefresh){const e=A.responseHeaders(),n=new a(t.statusCode,e,t.body,t.url);n.cachePolicy=A,n.fromCache=!0,d.emit("response",n),"function"==typeof r&&r(n)}else I=t,e.headers=A.revalidationHeaders(e),B(e)},A=e=>d.emit("error",new u.CacheError(e));this.cache.once("error",A),d.on("response",()=>this.cache.removeListener("error",A));try{await e(t)}catch(e){t.automaticFailover&&!E&&B(t),d.emit("error",new u.CacheError(e))}})(),d}}}function h(e){const t={...e};return t.path=`${e.pathname||"/"}${e.search||""}`,delete t.pathname,delete t.search,t}function p(e){return{protocol:e.protocol,auth:e.auth,hostname:e.hostname||e.host||"localhost",port:e.port,pathname:e.pathname,search:e.search}}u.RequestError=class extends Error{constructor(e){super(e.message),this.name="RequestError",Object.assign(this,e)}},u.CacheError=class extends Error{constructor(e){super(e.message),this.name="CacheError",Object.assign(this,e)}},e.exports=u},54738:e=>{"use strict";const t=(e,t)=>{if("string"!=typeof e&&!Array.isArray(e))throw new TypeError("Expected the input to be `string | string[]`");t=Object.assign({pascalCase:!1},t);if(0===(e=Array.isArray(e)?e.map(e=>e.trim()).filter(e=>e.length).join("-"):e.trim()).length)return"";if(1===e.length)return t.pascalCase?e.toUpperCase():e.toLowerCase();return e!==e.toLowerCase()&&(e=(e=>{let t=!1,r=!1,A=!1;for(let n=0;nt.toUpperCase()).replace(/\d+(\w|$)/g,e=>e.toUpperCase()),r=e,t.pascalCase?r.charAt(0).toUpperCase()+r.slice(1):r;var r};e.exports=t,e.exports.default=t},95882:(e,t,r)=>{"use strict";const A=r(18483),{stdout:n,stderr:o}=r(59428),{stringReplaceAll:i,stringEncaseCRLFWithFirstIndex:s}=r(73327),a=["ansi","ansi","ansi256","ansi16m"],c=Object.create(null);class g{constructor(e){return l(e)}}const l=e=>{const t={};return((e,t={})=>{if(t.level>3||t.level<0)throw new Error("The `level` option should be an integer from 0 to 3");const r=n?n.level:0;e.level=void 0===t.level?r:t.level})(t,e),t.template=(...e)=>E(t.template,...e),Object.setPrototypeOf(t,u.prototype),Object.setPrototypeOf(t.template,t),t.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},t.template.Instance=g,t.template};function u(e){return l(e)}for(const[e,t]of Object.entries(A))c[e]={get(){const r=C(this,d(t.open,t.close,this._styler),this._isEmpty);return Object.defineProperty(this,e,{value:r}),r}};c.visible={get(){const e=C(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:e}),e}};const h=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(const e of h)c[e]={get(){const{level:t}=this;return function(...r){const n=d(A.color[a[t]][e](...r),A.color.close,this._styler);return C(this,n,this._isEmpty)}}};for(const e of h){c["bg"+e[0].toUpperCase()+e.slice(1)]={get(){const{level:t}=this;return function(...r){const n=d(A.bgColor[a[t]][e](...r),A.bgColor.close,this._styler);return C(this,n,this._isEmpty)}}}}const p=Object.defineProperties(()=>{},{...c,level:{enumerable:!0,get(){return this._generator.level},set(e){this._generator.level=e}}}),d=(e,t,r)=>{let A,n;return void 0===r?(A=e,n=t):(A=r.openAll+e,n=t+r.closeAll),{open:e,close:t,openAll:A,closeAll:n,parent:r}},C=(e,t,r)=>{const A=(...e)=>f(A,1===e.length?""+e[0]:e.join(" "));return A.__proto__=p,A._generator=e,A._styler=t,A._isEmpty=r,A},f=(e,t)=>{if(e.level<=0||!t)return e._isEmpty?"":t;let r=e._styler;if(void 0===r)return t;const{openAll:A,closeAll:n}=r;if(-1!==t.indexOf(""))for(;void 0!==r;)t=i(t,r.close,r.open),r=r.parent;const o=t.indexOf("\n");return-1!==o&&(t=s(t,n,A,o)),A+t+n};let I;const E=(e,...t)=>{const[A]=t;if(!Array.isArray(A))return t.join(" ");const n=t.slice(1),o=[A.raw[0]];for(let e=1;e{"use strict";const t=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,r=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,A=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,n=/\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.)|([^\\])/gi,o=new Map([["n","\n"],["r","\r"],["t","\t"],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e",""],["a",""]]);function i(e){const t="u"===e[0],r="{"===e[1];return t&&!r&&5===e.length||"x"===e[0]&&3===e.length?String.fromCharCode(parseInt(e.slice(1),16)):t&&r?String.fromCodePoint(parseInt(e.slice(2,-1),16)):o.get(e)||e}function s(e,t){const r=[],o=t.trim().split(/\s*,\s*/g);let s;for(const t of o){const o=Number(t);if(Number.isNaN(o)){if(!(s=t.match(A)))throw new Error(`Invalid Chalk template style argument: ${t} (in style '${e}')`);r.push(s[2].replace(n,(e,t,r)=>t?i(t):r))}else r.push(o)}return r}function a(e){r.lastIndex=0;const t=[];let A;for(;null!==(A=r.exec(e));){const e=A[1];if(A[2]){const r=s(e,A[2]);t.push([e].concat(r))}else t.push([e])}return t}function c(e,t){const r={};for(const e of t)for(const t of e.styles)r[t[0]]=e.inverse?null:t.slice(1);let A=e;for(const[e,t]of Object.entries(r))if(Array.isArray(t)){if(!(e in A))throw new Error("Unknown Chalk style: "+e);A=t.length>0?A[e](...t):A[e]}return A}e.exports=(e,r)=>{const A=[],n=[];let o=[];if(r.replace(t,(t,r,s,g,l,u)=>{if(r)o.push(i(r));else if(g){const t=o.join("");o=[],n.push(0===A.length?t:c(e,A)(t)),A.push({inverse:s,styles:a(g)})}else if(l){if(0===A.length)throw new Error("Found extraneous } in Chalk template literal");n.push(c(e,A)(o.join(""))),o=[],A.pop()}else o.push(u)}),n.push(o.join("")),A.length>0){const e=`Chalk template literal is missing ${A.length} closing bracket${1===A.length?"":"s"} (\`}\`)`;throw new Error(e)}return n.join("")}},73327:e=>{"use strict";e.exports={stringReplaceAll:(e,t,r)=>{let A=e.indexOf(t);if(-1===A)return e;const n=t.length;let o=0,i="";do{i+=e.substr(o,A-o)+t+r,o=A+n,A=e.indexOf(t,o)}while(-1!==A);return i+=e.substr(o),i},stringEncaseCRLFWithFirstIndex:(e,t,r,A)=>{let n=0,o="";do{const i="\r"===e[A-1];o+=e.substr(n,(i?A-1:A)-n)+t+(i?"\r\n":"\n")+r,n=A+1,A=e.indexOf("\n",n)}while(-1!==A);return o+=e.substr(n),o}}},5864:(e,t,r)=>{"use strict";var A=r(85832),n=process.env;function o(e){return"string"==typeof e?!!n[e]:Object.keys(e).every((function(t){return n[t]===e[t]}))}Object.defineProperty(t,"_vendors",{value:A.map((function(e){return e.constant}))}),t.name=null,t.isPR=null,A.forEach((function(e){var r=(Array.isArray(e.env)?e.env:[e.env]).every((function(e){return o(e)}));if(t[e.constant]=r,r)switch(t.name=e.name,typeof e.pr){case"string":t.isPR=!!n[e.pr];break;case"object":"env"in e.pr?t.isPR=e.pr.env in n&&n[e.pr.env]!==e.pr.ne:"any"in e.pr?t.isPR=e.pr.any.some((function(e){return!!n[e]})):t.isPR=o(e.pr);break;default:t.isPR=null}})),t.isCI=!!(n.CI||n.CONTINUOUS_INTEGRATION||n.BUILD_NUMBER||n.RUN_ID||t.name)},85832:e=>{"use strict";e.exports=JSON.parse('[{"name":"AppVeyor","constant":"APPVEYOR","env":"APPVEYOR","pr":"APPVEYOR_PULL_REQUEST_NUMBER"},{"name":"Azure Pipelines","constant":"AZURE_PIPELINES","env":"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI","pr":"SYSTEM_PULLREQUEST_PULLREQUESTID"},{"name":"Bamboo","constant":"BAMBOO","env":"bamboo_planKey"},{"name":"Bitbucket Pipelines","constant":"BITBUCKET","env":"BITBUCKET_COMMIT","pr":"BITBUCKET_PR_ID"},{"name":"Bitrise","constant":"BITRISE","env":"BITRISE_IO","pr":"BITRISE_PULL_REQUEST"},{"name":"Buddy","constant":"BUDDY","env":"BUDDY_WORKSPACE_ID","pr":"BUDDY_EXECUTION_PULL_REQUEST_ID"},{"name":"Buildkite","constant":"BUILDKITE","env":"BUILDKITE","pr":{"env":"BUILDKITE_PULL_REQUEST","ne":"false"}},{"name":"CircleCI","constant":"CIRCLE","env":"CIRCLECI","pr":"CIRCLE_PULL_REQUEST"},{"name":"Cirrus CI","constant":"CIRRUS","env":"CIRRUS_CI","pr":"CIRRUS_PR"},{"name":"AWS CodeBuild","constant":"CODEBUILD","env":"CODEBUILD_BUILD_ARN"},{"name":"Codeship","constant":"CODESHIP","env":{"CI_NAME":"codeship"}},{"name":"Drone","constant":"DRONE","env":"DRONE","pr":{"DRONE_BUILD_EVENT":"pull_request"}},{"name":"dsari","constant":"DSARI","env":"DSARI"},{"name":"GitLab CI","constant":"GITLAB","env":"GITLAB_CI"},{"name":"GoCD","constant":"GOCD","env":"GO_PIPELINE_LABEL"},{"name":"Hudson","constant":"HUDSON","env":"HUDSON_URL"},{"name":"Jenkins","constant":"JENKINS","env":["JENKINS_URL","BUILD_ID"],"pr":{"any":["ghprbPullId","CHANGE_ID"]}},{"name":"Magnum CI","constant":"MAGNUM","env":"MAGNUM"},{"name":"Netlify CI","constant":"NETLIFY","env":"NETLIFY_BUILD_BASE","pr":{"env":"PULL_REQUEST","ne":"false"}},{"name":"Sail CI","constant":"SAIL","env":"SAILCI","pr":"SAIL_PULL_REQUEST_NUMBER"},{"name":"Semaphore","constant":"SEMAPHORE","env":"SEMAPHORE","pr":"PULL_REQUEST_NUMBER"},{"name":"Shippable","constant":"SHIPPABLE","env":"SHIPPABLE","pr":{"IS_PULL_REQUEST":"true"}},{"name":"Solano CI","constant":"SOLANO","env":"TDDIUM","pr":"TDDIUM_PR_ID"},{"name":"Strider CD","constant":"STRIDER","env":"STRIDER"},{"name":"TaskCluster","constant":"TASKCLUSTER","env":["TASK_ID","RUN_ID"]},{"name":"TeamCity","constant":"TEAMCITY","env":"TEAMCITY_VERSION"},{"name":"Travis CI","constant":"TRAVIS","env":"TRAVIS","pr":{"env":"TRAVIS_PULL_REQUEST","ne":"false"}}]')},40822:(e,t,r)=>{"use strict";r.r(t),r.d(t,{Cli:()=>Y,Command:()=>M,UsageError:()=>a});const A=/^(-h|--help)(?:=([0-9]+))?$/,n=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,o=/^-[a-zA-Z]{2,}$/,i=/^([^=]+)=([\s\S]*)$/,s="1"===process.env.DEBUG_CLI;class a extends Error{constructor(e){super(e),this.clipanion={type:"usage"},this.name="UsageError"}}class c extends Error{constructor(e,t){if(super(),this.input=e,this.candidates=t,this.clipanion={type:"none"},this.name="UnknownSyntaxError",0===this.candidates.length)this.message="Command not found, but we're not sure what's the alternative.";else if(1===this.candidates.length&&null!==this.candidates[0].reason){const[{usage:e,reason:t}]=this.candidates;this.message=`${t}\n\n$ ${e}`}else if(1===this.candidates.length){const[{usage:t}]=this.candidates;this.message=`Command not found; did you mean:\n\n$ ${t}\n${l(e)}`}else this.message=`Command not found; did you mean one of:\n\n${this.candidates.map(({usage:e},t)=>`${(t+".").padStart(4)} ${e}`).join("\n")}\n\n${l(e)}`}}class g extends Error{constructor(e,t){super(),this.input=e,this.usages=t,this.clipanion={type:"none"},this.name="AmbiguousSyntaxError",this.message=`Cannot find who to pick amongst the following alternatives:\n\n${this.usages.map((e,t)=>`${(t+".").padStart(4)} ${e}`).join("\n")}\n\n${l(e)}`}}const l=e=>"While running "+e.filter(e=>"\0"!==e).map(e=>{const t=JSON.stringify(e);return e.match(/\s/)||0===e.length||t!==`"${e}"`?t:e}).join(" ");function u(e){s&&console.log(e)}const h={candidateUsage:null,errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:-1};function p(e,t){return e.nodes.push(t),e.nodes.length-1}function d(e,t,r=!1){u("Running a vm on "+JSON.stringify(t));let A=[{node:0,state:{candidateUsage:null,errorMessage:null,ignoreOptions:!1,options:[],path:[],positionals:[],remainder:null,selectedIndex:null}}];!function(e,{prefix:t=""}={}){u(t+"Nodes are:");for(let r=0;r2!==e).map(({state:e})=>({usage:e.candidateUsage,reason:null})));if(s.every(({node:e})=>2===e))throw new c(t,s.map(({state:e})=>({usage:e.candidateUsage,reason:e.errorMessage})));A=I(s)}if(A.length>0){u(" Results:");for(const e of A)u(` - ${e.node} -> ${JSON.stringify(e.state)}`)}else u(" No results");return A}function C(e,t){if(null!==t.selectedIndex)return!0;if(Object.prototype.hasOwnProperty.call(e.statics,"\0"))for(const{to:t}of e.statics["\0"])if(1===t)return!0;return!1}function f(e,t){return function(e,t){const r=t.filter(e=>null!==e.selectedIndex);if(0===r.length)throw new Error;let A=0;for(const e of r)e.path.length>A&&(A=e.path.length);const n=r.filter(e=>e.path.length===A),o=e=>e.positionals.filter(({extra:e})=>!e).length+e.options.length,i=n.map(e=>({state:e,positionalCount:o(e)}));let s=0;for(const{positionalCount:e}of i)e>s&&(s=e);const a=function(e){const t=[],r=[];for(const A of e)-1===A.selectedIndex?r.push(A):t.push(A);r.length>0&&t.push(Object.assign(Object.assign({},h),{path:E(...r.map(e=>e.path)),options:r.reduce((e,t)=>e.concat(t.options),[])}));return t}(i.filter(({positionalCount:e})=>e===s).map(({state:e})=>e));if(a.length>1)throw new g(e,a.map(e=>e.candidateUsage));return a[0]}(t,d(e,[...t,"\0"]).map(({state:e})=>e))}function I(e){let t=0;for(const{state:r}of e)r.path.length>t&&(t=r.path.length);return e.filter(({state:e})=>e.path.length===t)}function E(e,t,...r){return void 0===t?Array.from(e):E(e.filter((e,r)=>e===t[r]),...r)}function B(e){return 1===e||2===e}function y(e,t=0){return{to:B(e.to)?e.to:e.to>2?e.to+t-2:e.to+t,reducer:e.reducer}}function m(e,t=0){const r={dynamics:[],shortcuts:[],statics:{}};for(const[A,n]of e.dynamics)r.dynamics.push([A,y(n,t)]);for(const A of e.shortcuts)r.shortcuts.push(y(A,t));for(const[A,n]of Object.entries(e.statics))r.statics[A]=n.map(e=>y(e,t));return r}function w(e,t,r,A,n){e.nodes[t].dynamics.push([r,{to:A,reducer:n}])}function Q(e,t,r,A){e.nodes[t].shortcuts.push({to:r,reducer:A})}function D(e,t,r,A,n){(Object.prototype.hasOwnProperty.call(e.nodes[t].statics,r)?e.nodes[t].statics[r]:e.nodes[t].statics[r]=[]).push({to:A,reducer:n})}function b(e,t,r,A){if(Array.isArray(t)){const[n,...o]=t;return e[n](r,A,...o)}return e[t](r,A)}function v(e,t){const r=Array.isArray(e)?S[e[0]]:S[e];if(void 0===r.suggest)return null;const A=Array.isArray(e)?e.slice(1):[];return r.suggest(t,...A)}const S={always:()=>!0,isOptionLike:(e,t)=>!e.ignoreOptions&&t.startsWith("-"),isNotOptionLike:(e,t)=>e.ignoreOptions||!t.startsWith("-"),isOption:(e,t,r,A)=>!e.ignoreOptions&&t===r,isBatchOption:(e,t,r)=>!e.ignoreOptions&&o.test(t)&&[...t.slice(1)].every(e=>r.includes("-"+e)),isBoundOption:(e,t,r,A)=>{const o=t.match(i);return!e.ignoreOptions&&!!o&&n.test(o[1])&&r.includes(o[1])&&A.filter(e=>e.names.includes(o[1])).every(e=>e.allowBinding)},isNegatedOption:(e,t,r)=>!e.ignoreOptions&&t==="--no-"+r.slice(2),isHelp:(e,t)=>!e.ignoreOptions&&A.test(t),isUnsupportedOption:(e,t,r)=>!e.ignoreOptions&&t.startsWith("-")&&n.test(t)&&!r.includes(t),isInvalidOption:(e,t)=>!e.ignoreOptions&&t.startsWith("-")&&!n.test(t)};S.isOption.suggest=(e,t,r=!0)=>r?null:[t];const k={setCandidateUsage:(e,t,r)=>Object.assign(Object.assign({},e),{candidateUsage:r}),setSelectedIndex:(e,t,r)=>Object.assign(Object.assign({},e),{selectedIndex:r}),pushBatch:(e,t)=>Object.assign(Object.assign({},e),{options:e.options.concat([...t.slice(1)].map(e=>({name:"-"+e,value:!0})))}),pushBound:(e,t)=>{const[,r,A]=t.match(i);return Object.assign(Object.assign({},e),{options:e.options.concat({name:r,value:A})})},pushPath:(e,t)=>Object.assign(Object.assign({},e),{path:e.path.concat(t)}),pushPositional:(e,t)=>Object.assign(Object.assign({},e),{positionals:e.positionals.concat({value:t,extra:!1})}),pushExtra:(e,t)=>Object.assign(Object.assign({},e),{positionals:e.positionals.concat({value:t,extra:!0})}),pushExtraNoLimits:(e,t)=>Object.assign(Object.assign({},e),{positionals:e.positionals.concat({value:t,extra:N})}),pushTrue:(e,t,r=t)=>Object.assign(Object.assign({},e),{options:e.options.concat({name:t,value:!0})}),pushFalse:(e,t,r=t)=>Object.assign(Object.assign({},e),{options:e.options.concat({name:r,value:!1})}),pushUndefined:(e,t)=>Object.assign(Object.assign({},e),{options:e.options.concat({name:t,value:void 0})}),pushStringValue:(e,t)=>{var r;const A=Object.assign(Object.assign({},e),{options:[...e.options]}),n=e.options[e.options.length-1];return n.value=(null!==(r=n.value)&&void 0!==r?r:[]).concat([t]),A},setStringValue:(e,t)=>{const r=Object.assign(Object.assign({},e),{options:[...e.options]});return e.options[e.options.length-1].value=t,r},inhibateOptions:e=>Object.assign(Object.assign({},e),{ignoreOptions:!0}),useHelp:(e,t,r)=>{const[,n,o]=t.match(A);return void 0!==o?Object.assign(Object.assign({},e),{options:[{name:"-c",value:String(r)},{name:"-i",value:o}]}):Object.assign(Object.assign({},e),{options:[{name:"-c",value:String(r)}]})},setError:(e,t,r)=>"\0"===t?Object.assign(Object.assign({},e),{errorMessage:r+"."}):Object.assign(Object.assign({},e),{errorMessage:`${r} ("${t}").`}),setOptionArityError:(e,t)=>{const r=e.options[e.options.length-1];return Object.assign(Object.assign({},e),{errorMessage:`Not enough arguments to option ${r.name}.`})}},N=Symbol();class F{constructor(e,t){this.allOptionNames=[],this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=t}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:t=this.arity.trailing,extra:r=this.arity.extra,proxy:A=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:t,extra:r,proxy:A})}addPositional({name:e="arg",required:t=!0}={}){if(!t&&this.arity.extra===N)throw new Error("Optional parameters cannot be declared when using .rest() or .proxy()");if(!t&&this.arity.trailing.length>0)throw new Error("Optional parameters cannot be declared after the required trailing positional arguments");t||this.arity.extra===N?this.arity.extra!==N&&0===this.arity.extra.length?this.arity.leading.push(e):this.arity.trailing.push(e):this.arity.extra.push(e)}addRest({name:e="arg",required:t=0}={}){if(this.arity.extra===N)throw new Error("Infinite lists cannot be declared multiple times in the same command");if(this.arity.trailing.length>0)throw new Error("Infinite lists cannot be declared after the required trailing positional arguments");for(let r=0;r1)throw new Error("The arity cannot be higher than 1 when the option only supports the --arg=value syntax");if(!Number.isInteger(r))throw new Error("The arity must be an integer, got "+r);if(r<0)throw new Error("The arity must be positive, got "+r);this.allOptionNames.push(...e),this.options.push({names:e,description:t,arity:r,hidden:A,allowBinding:n})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:t=!0}={}){const r=[this.cliOpts.binaryName],A=[];if(this.paths.length>0&&r.push(...this.paths[0]),e){for(const{names:e,arity:n,hidden:o,description:i}of this.options){if(o)continue;const s=[];for(let e=0;e`<${e}>`)),this.arity.extra===N?r.push("..."):r.push(...this.arity.extra.map(e=>`[${e}]`)),r.push(...this.arity.trailing.map(e=>`<${e}>`))}return{usage:r.join(" "),options:A}}compile(){if(void 0===this.context)throw new Error("Assertion failed: No context attached");const e={nodes:[{dynamics:[],shortcuts:[],statics:{}},{dynamics:[],shortcuts:[],statics:{}},{dynamics:[],shortcuts:[],statics:{}}]};let t=0;t=p(e,{dynamics:[],shortcuts:[],statics:{}}),D(e,0,"",t,["setCandidateUsage",this.usage().usage]);const r=this.arity.proxy?"always":"isNotOptionLike",A=this.paths.length>0?this.paths:[[]];for(const n of A){let A=t;if(n.length>0){const t=p(e,{dynamics:[],shortcuts:[],statics:{}});Q(e,A,t),this.registerOptions(e,t),A=t}for(let t=0;t0||!this.arity.proxy){const t=p(e,{dynamics:[],shortcuts:[],statics:{}});w(e,A,"isHelp",t,["useHelp",this.cliIndex]),D(e,t,"\0",1,["setSelectedIndex",-1]),this.registerOptions(e,A)}this.arity.leading.length>0&&D(e,A,"\0",2,["setError","Not enough positional arguments"]);let o=A;for(let t=0;t0||t+1!==this.arity.leading.length)&&D(e,r,"\0",2,["setError","Not enough positional arguments"]),w(e,o,"isNotOptionLike",r,"pushPositional"),o=r}let i=o;if(this.arity.extra===N||this.arity.extra.length>0){const t=p(e,{dynamics:[],shortcuts:[],statics:{}});if(Q(e,o,t),this.arity.extra===N){const A=p(e,{dynamics:[],shortcuts:[],statics:{}});this.arity.proxy||this.registerOptions(e,A),w(e,o,r,A,"pushExtraNoLimits"),w(e,A,r,A,"pushExtraNoLimits"),Q(e,A,t)}else for(let A=0;A0&&D(e,i,"\0",2,["setError","Not enough positional arguments"]);let s=i;for(let t=0;tt.length>e.length?t:e,"");if(0===r.arity)for(const n of r.names)w(e,t,["isOption",n,r.hidden||n!==A],t,"pushTrue"),n.startsWith("--")&&!n.startsWith("--no-")&&w(e,t,["isNegatedOption",n],t,["pushFalse",n]);else{let n=p(e,{dynamics:[],shortcuts:[],statics:{}});for(const o of r.names)w(e,t,["isOption",o,r.hidden||o!==A],n,"pushUndefined");for(let t=0;t=0&&e{if(t.has(A))return;t.add(A);const n=e.nodes[A];for(const e of Object.values(n.statics))for(const{to:t}of e)r(t);for(const[,{to:e}]of n.dynamics)r(e);for(const{to:e}of n.shortcuts)r(e);const o=new Set(n.shortcuts.map(({to:e})=>e));for(;n.shortcuts.length>0;){const{to:t}=n.shortcuts.shift(),r=e.nodes[t];for(const[e,t]of Object.entries(r.statics)){let r=Object.prototype.hasOwnProperty.call(n.statics,e)?n.statics[e]:n.statics[e]=[];for(const e of t)r.some(({to:t})=>e.to===t)||r.push(e)}for(const[e,t]of r.dynamics)n.dynamics.some(([r,{to:A}])=>e===r&&t.to===A)||n.dynamics.push([e,t]);for(const e of r.shortcuts)o.has(e.to)||(n.shortcuts.push(e),o.add(e.to))}};r(0)}(r),{machine:r,contexts:t,process:e=>f(r,e),suggest:(e,t)=>function(e,t,r){const A=r&&t.length>0?[""]:[],n=d(e,t,r),o=[],i=new Set,s=(t,r,A=!0)=>{let n=[r];for(;n.length>0;){const r=n;n=[];for(const o of r){const r=e.nodes[o],i=Object.keys(r.statics);for(const e of Object.keys(r.statics)){const e=i[0];for(const{to:o,reducer:i}of r.statics[e])"pushPath"===i&&(A||t.push(e),n.push(o))}}A=!1}const s=JSON.stringify(t);i.has(s)||(o.push(t),i.add(s))};for(const{node:t,state:r}of n){if(null!==r.remainder){s([r.remainder],t);continue}const n=e.nodes[t],o=C(n,r);for(const[e,r]of Object.entries(n.statics))(o&&"\0"!==e||!e.startsWith("-")&&r.some(({reducer:e})=>"pushPath"===e))&&s([...A,e],t);if(o)for(const[e,{to:o}]of n.dynamics){if(2===o)continue;const n=v(e,r);if(null!==n)for(const e of n)s([...A,e],t)}}return[...o].sort()}(r,e,t)}}}class M{constructor(){this.help=!1}static getMeta(e){const t=e.constructor;return t.meta=Object.prototype.hasOwnProperty.call(t,"meta")?t.meta:{definitions:[],transformers:[(e,t)=>{for(const{name:r,value:A}of e.options)"-h"!==r&&"--help"!==r||(t.help=A)}]}}static resolveMeta(e){const t=[],r=[];for(let A=e;A instanceof M;A=A.__proto__){const e=this.getMeta(A);for(const r of e.definitions)t.push(r);for(const t of e.transformers)r.push(t)}return{definitions:t,transformers:r}}static registerDefinition(e,t){this.getMeta(e).definitions.push(t)}static registerTransformer(e,t){this.getMeta(e).transformers.push(t)}static addPath(...e){this.Path(...e)(this.prototype,"execute")}static addOption(e,t){t(this.prototype,e)}static Path(...e){return(t,r)=>{this.registerDefinition(t,t=>{t.addPath(e)})}}static Boolean(e,{hidden:t=!1,description:r}={}){return(A,n)=>{const o=e.split(",");this.registerDefinition(A,e=>{e.addOption({names:o,arity:0,hidden:t,allowBinding:!1,description:r})}),this.registerTransformer(A,(e,t)=>{for(const{name:r,value:A}of e.options)o.includes(r)&&(t[n]=A)})}}static Counter(e,{hidden:t=!1,description:r}={}){return(A,n)=>{const o=e.split(",");this.registerDefinition(A,e=>{e.addOption({names:o,arity:0,hidden:t,allowBinding:!1,description:r})}),this.registerTransformer(A,(e,t)=>{var r;for(const{name:A,value:i}of e.options)o.includes(A)&&(null!==(r=t[n])&&void 0!==r||(t[n]=0),i?t[n]++:t[n]=0)})}}static String(e={},{arity:t=1,tolerateBoolean:r=!1,hidden:A=!1,description:n}={}){return(o,i)=>{if("string"==typeof e){const s=e.split(",");this.registerDefinition(o,e=>{e.addOption({names:s,arity:r?0:t,hidden:A,description:n})}),this.registerTransformer(o,(e,t)=>{for(const{name:r,value:A}of e.options)s.includes(r)&&(t[i]=A)})}else{const{name:t=i,required:r=!0}=e;this.registerDefinition(o,e=>{e.addPositional({name:t,required:r})}),this.registerTransformer(o,(e,t)=>{for(let A=0;A{if(0===t)throw new Error("Array options are expected to have at least an arity of 1");const i=e.split(",");this.registerDefinition(n,e=>{e.addOption({names:i,arity:t,hidden:r,description:A})}),this.registerTransformer(n,(e,t)=>{for(const{name:r,value:A}of e.options)i.includes(r)&&(t[o]=t[o]||[],t[o].push(A))})}}static Rest({required:e=0}={}){return(t,r)=>{this.registerDefinition(t,t=>{t.addRest({name:r,required:e})}),this.registerTransformer(t,(e,t,A)=>{const n=t=>{const r=e.positionals[t];return r.extra===N||!1===r.extra&&te)})}}static Proxy({required:e=0}={}){return(t,r)=>{this.registerDefinition(t,t=>{t.addProxy({required:e})}),this.registerTransformer(t,(e,t)=>{t[r]=e.positionals.map(({value:e})=>e)})}}static Usage(e){return e}static Schema(e){return e}async catch(e){throw e}async validateAndExecute(){const e=this.constructor.schema;if(void 0!==e)try{await e.validate(this)}catch(e){throw"ValidationError"===e.name&&(e.clipanion={type:"usage"}),e}const t=await this.execute();return void 0!==t?t:0}} +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +function R(e,t,r,A){var n,o=arguments.length,i=o<3?t:null===A?A=Object.getOwnPropertyDescriptor(t,r):A;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,A);else for(var s=e.length-1;s>=0;s--)(n=e[s])&&(i=(o<3?n(i):o>3?n(t,r,i):n(t,r))||i);return o>3&&i&&Object.defineProperty(t,r,i),i}M.Entries={};class x extends M{async execute(){this.context.stdout.write(this.cli.usage(null))}}R([M.Path("--help"),M.Path("-h")],x.prototype,"execute",null);class L extends M{async execute(){var e;this.context.stdout.write((null!==(e=this.cli.binaryVersion)&&void 0!==e?e:"")+"\n")}}R([M.Path("--version"),M.Path("-v")],L.prototype,"execute",null);const P={bold:e=>`${e}`,error:e=>`${e}`,code:e=>`${e}`},O={bold:e=>e,error:e=>e,code:e=>e};function U(e,{format:t,paragraphs:r}){return e=(e=(e=(e=(e=e.replace(/\r\n?/g,"\n")).replace(/^[\t ]+|[\t ]+$/gm,"")).replace(/^\n+|\n+$/g,"")).replace(/^-([^\n]*?)\n+/gm,"-$1\n\n")).replace(/\n(\n)?\n*/g,"$1"),r&&(e=e.split(/\n/).map((function(e){let t=e.match(/^[*-][\t ]+(.*)/);return t?t[1].match(/(.{1,78})(?: |$)/g).map((e,t)=>(0===t?"- ":" ")+e).join("\n"):e.match(/(.{1,80})(?: |$)/g).join("\n")})).join("\n\n")),(e=e.replace(/(`+)((?:.|[\n])*?)\1/g,(function(e,r,A){return t.code(r+A+r)})))?e+"\n":""}class T extends M{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,t){const r=new T(t);r.path=e.path;for(const t of e.options)switch(t.name){case"-c":r.commands.push(Number(t.value));break;case"-i":r.index=Number(t.value)}return r}async execute(){let e=this.commands;if(void 0!==this.index&&this.index>=0&&this.index1){this.context.stdout.write("Multiple commands match your selection:\n"),this.context.stdout.write("\n");let e=0;for(const t of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[t].commandClass,{prefix:(e+++". ").padStart(5)}));this.context.stdout.write("\n"),this.context.stdout.write("Run again with -h= to see the longer details of any of those commands.\n")}}}function j(){return"0"!==process.env.FORCE_COLOR&&("1"===process.env.FORCE_COLOR||!(void 0===process.stdout||!process.stdout.isTTY))}class Y{constructor({binaryLabel:e,binaryName:t="...",binaryVersion:r,enableColors:A=j()}={}){this.registrations=new Map,this.builder=new K({binaryName:t}),this.binaryLabel=e,this.binaryName=t,this.binaryVersion=r,this.enableColors=A}static from(e,t={}){const r=new Y(t);for(const t of e)r.register(t);return r}register(e){const t=this.builder.command();this.registrations.set(e,t.cliIndex);const{definitions:r}=e.resolveMeta(e.prototype);for(const e of r)e(t);t.setContext({commandClass:e})}process(e){const{contexts:t,process:r}=this.builder.compile(),A=r(e);switch(A.selectedIndex){case-1:return T.from(A,t);default:{const{commandClass:e}=t[A.selectedIndex],r=this.registrations.get(e);if(void 0===r)throw new Error("Assertion failed: Expected the command class to have been registered.");const n=this.builder.getBuilderByIndex(r),o=new e;o.path=A.path;const{transformers:i}=e.resolveMeta(e.prototype);for(const e of i)e(A,o,n);return o}}}async run(e,t){let r,A;if(Array.isArray(e))try{r=this.process(e)}catch(e){return t.stdout.write(this.error(e)),1}else r=e;if(r.help)return t.stdout.write(this.usage(r,{detailed:!0})),0;r.context=t,r.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableColors:this.enableColors,definitions:()=>this.definitions(),error:(e,t)=>this.error(e,t),process:e=>this.process(e),run:(e,r)=>this.run(e,Object.assign(Object.assign({},t),r)),usage:(e,t)=>this.usage(e,t)};try{A=await r.validateAndExecute().catch(e=>r.catch(e).then(()=>0))}catch(e){return t.stdout.write(this.error(e,{command:r})),1}return A}async runExit(e,t){process.exitCode=await this.run(e,t)}suggest(e,t){const{contexts:r,process:A,suggest:n}=this.builder.compile();return n(e,t)}definitions({colored:e=!1}={}){const t=[];for(const[r,A]of this.registrations){if(void 0===r.usage)continue;const{usage:n}=this.getUsageByIndex(A,{detailed:!1}),{usage:o,options:i}=this.getUsageByIndex(A,{detailed:!0,inlineOptions:!1}),s=void 0!==r.usage.category?U(r.usage.category,{format:this.format(e),paragraphs:!1}):void 0,a=void 0!==r.usage.description?U(r.usage.description,{format:this.format(e),paragraphs:!1}):void 0,c=void 0!==r.usage.details?U(r.usage.details,{format:this.format(e),paragraphs:!0}):void 0,g=void 0!==r.usage.examples?r.usage.examples.map(([t,r])=>[U(t,{format:this.format(e),paragraphs:!1}),r.replace(/\$0/g,this.binaryName)]):void 0;t.push({path:n,usage:o,category:s,description:a,details:c,examples:g,options:i})}return t}usage(e=null,{colored:t,detailed:r=!1,prefix:A="$ "}={}){const n=null!==e&&void 0===e.getMeta?e.constructor:e;let o="";if(n)if(r){const{description:e="",details:r="",examples:i=[]}=n.usage||{};""!==e&&(o+=U(e,{format:this.format(t),paragraphs:!1}).replace(/^./,e=>e.toUpperCase()),o+="\n"),(""!==r||i.length>0)&&(o+=this.format(t).bold("Usage:")+"\n",o+="\n");const{usage:s,options:a}=this.getUsageByRegistration(n,{inlineOptions:!1});if(o+=`${this.format(t).bold(A)}${s}\n`,a.length>0){o+="\n",o+=P.bold("Options:")+"\n";const e=a.reduce((e,t)=>Math.max(e,t.definition.length),0);o+="\n";for(const{definition:r,description:A}of a)o+=` ${r.padEnd(e)} ${U(A,{format:this.format(t),paragraphs:!1})}`}if(""!==r&&(o+="\n",o+=this.format(t).bold("Details:")+"\n",o+="\n",o+=U(r,{format:this.format(t),paragraphs:!0})),i.length>0){o+="\n",o+=this.format(t).bold("Examples:")+"\n";for(let[e,r]of i)o+="\n",o+=U(e,{format:this.format(t),paragraphs:!1}),o+=r.replace(/^/m," "+this.format(t).bold(A)).replace(/\$0/g,this.binaryName)+"\n"}}else{const{usage:e}=this.getUsageByRegistration(n);o+=`${this.format(t).bold(A)}${e}\n`}else{const e=new Map;for(const[r,A]of this.registrations.entries()){if(void 0===r.usage)continue;const n=void 0!==r.usage.category?U(r.usage.category,{format:this.format(t),paragraphs:!1}):null;let o=e.get(n);void 0===o&&e.set(n,o=[]);const{usage:i}=this.getUsageByIndex(A);o.push({commandClass:r,usage:i})}const r=Array.from(e.keys()).sort((e,t)=>null===e?-1:null===t?1:e.localeCompare(t,"en",{usage:"sort",caseFirst:"upper"})),n=void 0!==this.binaryLabel,i=void 0!==this.binaryVersion;n||i?(o+=n&&i?this.format(t).bold(`${this.binaryLabel} - ${this.binaryVersion}`)+"\n\n":n?this.format(t).bold(""+this.binaryLabel)+"\n":this.format(t).bold(""+this.binaryVersion)+"\n",o+=` ${this.format(t).bold(A)}${this.binaryName} \n`):o+=`${this.format(t).bold(A)}${this.binaryName} \n`;for(let A of r){const r=e.get(A).slice().sort((e,t)=>e.usage.localeCompare(t.usage,"en",{usage:"sort",caseFirst:"upper"})),n=null!==A?A.trim():"Where is one of";o+="\n",o+=this.format(t).bold(n+":")+"\n";for(let{commandClass:e,usage:A}of r){const r=e.usage.description||"undocumented";o+="\n",o+=` ${this.format(t).bold(A)}\n`,o+=" "+U(r,{format:this.format(t),paragraphs:!1})}}o+="\n",o+=U("You can also print more details about any of these commands by calling them after adding the `-h,--help` flag right after the command name.",{format:this.format(t),paragraphs:!0})}return o}error(e,{colored:t,command:r=null}={}){e instanceof Error||(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let A="",n=e.name.replace(/([a-z])([A-Z])/g,"$1 $2");"Error"===n&&(n="Internal Error"),A+=`${this.format(t).error(n)}: ${e.message}\n`;const o=e.clipanion;return void 0!==o?"usage"===o.type&&(A+="\n",A+=this.usage(r)):e.stack&&(A+=e.stack.replace(/^.*\n/,"")+"\n"),A}getUsageByRegistration(e,t){const r=this.registrations.get(e);if(void 0===r)throw new Error("Assertion failed: Unregistered command");return this.getUsageByIndex(r,t)}getUsageByIndex(e,t){return this.builder.getBuilderByIndex(e).usage(t)}format(e=this.enableColors){return e?P:O}}Y.defaultContext={stdin:process.stdin,stdout:process.stdout,stderr:process.stderr},M.Entries.Help=x,M.Entries.Version=L},15751:(e,t,r)=>{"use strict";const A=r(92413).PassThrough,n=r(65007);e.exports=e=>{if(!e||!e.pipe)throw new TypeError("Parameter `response` must be a response stream.");const t=new A;return n(e,t),e.pipe(t)}},15311:(e,t,r)=>{const A=r(93300),n={};for(const e of Object.keys(A))n[A[e]]=e;const o={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};e.exports=o;for(const e of Object.keys(o)){if(!("channels"in o[e]))throw new Error("missing channels property: "+e);if(!("labels"in o[e]))throw new Error("missing channel labels property: "+e);if(o[e].labels.length!==o[e].channels)throw new Error("channel and label counts mismatch: "+e);const{channels:t,labels:r}=o[e];delete o[e].channels,delete o[e].labels,Object.defineProperty(o[e],"channels",{value:t}),Object.defineProperty(o[e],"labels",{value:r})}o.rgb.hsl=function(e){const t=e[0]/255,r=e[1]/255,A=e[2]/255,n=Math.min(t,r,A),o=Math.max(t,r,A),i=o-n;let s,a;o===n?s=0:t===o?s=(r-A)/i:r===o?s=2+(A-t)/i:A===o&&(s=4+(t-r)/i),s=Math.min(60*s,360),s<0&&(s+=360);const c=(n+o)/2;return a=o===n?0:c<=.5?i/(o+n):i/(2-o-n),[s,100*a,100*c]},o.rgb.hsv=function(e){let t,r,A,n,o;const i=e[0]/255,s=e[1]/255,a=e[2]/255,c=Math.max(i,s,a),g=c-Math.min(i,s,a),l=function(e){return(c-e)/6/g+.5};return 0===g?(n=0,o=0):(o=g/c,t=l(i),r=l(s),A=l(a),i===c?n=A-r:s===c?n=1/3+t-A:a===c&&(n=2/3+r-t),n<0?n+=1:n>1&&(n-=1)),[360*n,100*o,100*c]},o.rgb.hwb=function(e){const t=e[0],r=e[1];let A=e[2];const n=o.rgb.hsl(e)[0],i=1/255*Math.min(t,Math.min(r,A));return A=1-1/255*Math.max(t,Math.max(r,A)),[n,100*i,100*A]},o.rgb.cmyk=function(e){const t=e[0]/255,r=e[1]/255,A=e[2]/255,n=Math.min(1-t,1-r,1-A);return[100*((1-t-n)/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-A-n)/(1-n)||0),100*n]},o.rgb.keyword=function(e){const t=n[e];if(t)return t;let r,o=1/0;for(const t of Object.keys(A)){const n=A[t],a=(s=n,((i=e)[0]-s[0])**2+(i[1]-s[1])**2+(i[2]-s[2])**2);a.04045?((t+.055)/1.055)**2.4:t/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,A=A>.04045?((A+.055)/1.055)**2.4:A/12.92;return[100*(.4124*t+.3576*r+.1805*A),100*(.2126*t+.7152*r+.0722*A),100*(.0193*t+.1192*r+.9505*A)]},o.rgb.lab=function(e){const t=o.rgb.xyz(e);let r=t[0],A=t[1],n=t[2];r/=95.047,A/=100,n/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,A=A>.008856?A**(1/3):7.787*A+16/116,n=n>.008856?n**(1/3):7.787*n+16/116;return[116*A-16,500*(r-A),200*(A-n)]},o.hsl.rgb=function(e){const t=e[0]/360,r=e[1]/100,A=e[2]/100;let n,o,i;if(0===r)return i=255*A,[i,i,i];n=A<.5?A*(1+r):A+r-A*r;const s=2*A-n,a=[0,0,0];for(let e=0;e<3;e++)o=t+1/3*-(e-1),o<0&&o++,o>1&&o--,i=6*o<1?s+6*(n-s)*o:2*o<1?n:3*o<2?s+(n-s)*(2/3-o)*6:s,a[e]=255*i;return a},o.hsl.hsv=function(e){const t=e[0];let r=e[1]/100,A=e[2]/100,n=r;const o=Math.max(A,.01);A*=2,r*=A<=1?A:2-A,n*=o<=1?o:2-o;return[t,100*(0===A?2*n/(o+n):2*r/(A+r)),100*((A+r)/2)]},o.hsv.rgb=function(e){const t=e[0]/60,r=e[1]/100;let A=e[2]/100;const n=Math.floor(t)%6,o=t-Math.floor(t),i=255*A*(1-r),s=255*A*(1-r*o),a=255*A*(1-r*(1-o));switch(A*=255,n){case 0:return[A,a,i];case 1:return[s,A,i];case 2:return[i,A,a];case 3:return[i,s,A];case 4:return[a,i,A];case 5:return[A,i,s]}},o.hsv.hsl=function(e){const t=e[0],r=e[1]/100,A=e[2]/100,n=Math.max(A,.01);let o,i;i=(2-r)*A;const s=(2-r)*n;return o=r*n,o/=s<=1?s:2-s,o=o||0,i/=2,[t,100*o,100*i]},o.hwb.rgb=function(e){const t=e[0]/360;let r=e[1]/100,A=e[2]/100;const n=r+A;let o;n>1&&(r/=n,A/=n);const i=Math.floor(6*t),s=1-A;o=6*t-i,0!=(1&i)&&(o=1-o);const a=r+o*(s-r);let c,g,l;switch(i){default:case 6:case 0:c=s,g=a,l=r;break;case 1:c=a,g=s,l=r;break;case 2:c=r,g=s,l=a;break;case 3:c=r,g=a,l=s;break;case 4:c=a,g=r,l=s;break;case 5:c=s,g=r,l=a}return[255*c,255*g,255*l]},o.cmyk.rgb=function(e){const t=e[0]/100,r=e[1]/100,A=e[2]/100,n=e[3]/100;return[255*(1-Math.min(1,t*(1-n)+n)),255*(1-Math.min(1,r*(1-n)+n)),255*(1-Math.min(1,A*(1-n)+n))]},o.xyz.rgb=function(e){const t=e[0]/100,r=e[1]/100,A=e[2]/100;let n,o,i;return n=3.2406*t+-1.5372*r+-.4986*A,o=-.9689*t+1.8758*r+.0415*A,i=.0557*t+-.204*r+1.057*A,n=n>.0031308?1.055*n**(1/2.4)-.055:12.92*n,o=o>.0031308?1.055*o**(1/2.4)-.055:12.92*o,i=i>.0031308?1.055*i**(1/2.4)-.055:12.92*i,n=Math.min(Math.max(0,n),1),o=Math.min(Math.max(0,o),1),i=Math.min(Math.max(0,i),1),[255*n,255*o,255*i]},o.xyz.lab=function(e){let t=e[0],r=e[1],A=e[2];t/=95.047,r/=100,A/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,A=A>.008856?A**(1/3):7.787*A+16/116;return[116*r-16,500*(t-r),200*(r-A)]},o.lab.xyz=function(e){let t,r,A;r=(e[0]+16)/116,t=e[1]/500+r,A=r-e[2]/200;const n=r**3,o=t**3,i=A**3;return r=n>.008856?n:(r-16/116)/7.787,t=o>.008856?o:(t-16/116)/7.787,A=i>.008856?i:(A-16/116)/7.787,t*=95.047,r*=100,A*=108.883,[t,r,A]},o.lab.lch=function(e){const t=e[0],r=e[1],A=e[2];let n;n=360*Math.atan2(A,r)/2/Math.PI,n<0&&(n+=360);return[t,Math.sqrt(r*r+A*A),n]},o.lch.lab=function(e){const t=e[0],r=e[1],A=e[2]/360*2*Math.PI;return[t,r*Math.cos(A),r*Math.sin(A)]},o.rgb.ansi16=function(e,t=null){const[r,A,n]=e;let i=null===t?o.rgb.hsv(e)[2]:t;if(i=Math.round(i/50),0===i)return 30;let s=30+(Math.round(n/255)<<2|Math.round(A/255)<<1|Math.round(r/255));return 2===i&&(s+=60),s},o.hsv.ansi16=function(e){return o.rgb.ansi16(o.hsv.rgb(e),e[2])},o.rgb.ansi256=function(e){const t=e[0],r=e[1],A=e[2];if(t===r&&r===A)return t<8?16:t>248?231:Math.round((t-8)/247*24)+232;return 16+36*Math.round(t/255*5)+6*Math.round(r/255*5)+Math.round(A/255*5)},o.ansi16.rgb=function(e){let t=e%10;if(0===t||7===t)return e>50&&(t+=3.5),t=t/10.5*255,[t,t,t];const r=.5*(1+~~(e>50));return[(1&t)*r*255,(t>>1&1)*r*255,(t>>2&1)*r*255]},o.ansi256.rgb=function(e){if(e>=232){const t=10*(e-232)+8;return[t,t,t]}let t;e-=16;return[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},o.rgb.hex=function(e){const t=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(t.length)+t},o.hex.rgb=function(e){const t=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!t)return[0,0,0];let r=t[0];3===t[0].length&&(r=r.split("").map(e=>e+e).join(""));const A=parseInt(r,16);return[A>>16&255,A>>8&255,255&A]},o.rgb.hcg=function(e){const t=e[0]/255,r=e[1]/255,A=e[2]/255,n=Math.max(Math.max(t,r),A),o=Math.min(Math.min(t,r),A),i=n-o;let s,a;return s=i<1?o/(1-i):0,a=i<=0?0:n===t?(r-A)/i%6:n===r?2+(A-t)/i:4+(t-r)/i,a/=6,a%=1,[360*a,100*i,100*s]},o.hsl.hcg=function(e){const t=e[1]/100,r=e[2]/100,A=r<.5?2*t*r:2*t*(1-r);let n=0;return A<1&&(n=(r-.5*A)/(1-A)),[e[0],100*A,100*n]},o.hsv.hcg=function(e){const t=e[1]/100,r=e[2]/100,A=t*r;let n=0;return A<1&&(n=(r-A)/(1-A)),[e[0],100*A,100*n]},o.hcg.rgb=function(e){const t=e[0]/360,r=e[1]/100,A=e[2]/100;if(0===r)return[255*A,255*A,255*A];const n=[0,0,0],o=t%1*6,i=o%1,s=1-i;let a=0;switch(Math.floor(o)){case 0:n[0]=1,n[1]=i,n[2]=0;break;case 1:n[0]=s,n[1]=1,n[2]=0;break;case 2:n[0]=0,n[1]=1,n[2]=i;break;case 3:n[0]=0,n[1]=s,n[2]=1;break;case 4:n[0]=i,n[1]=0,n[2]=1;break;default:n[0]=1,n[1]=0,n[2]=s}return a=(1-r)*A,[255*(r*n[0]+a),255*(r*n[1]+a),255*(r*n[2]+a)]},o.hcg.hsv=function(e){const t=e[1]/100,r=t+e[2]/100*(1-t);let A=0;return r>0&&(A=t/r),[e[0],100*A,100*r]},o.hcg.hsl=function(e){const t=e[1]/100,r=e[2]/100*(1-t)+.5*t;let A=0;return r>0&&r<.5?A=t/(2*r):r>=.5&&r<1&&(A=t/(2*(1-r))),[e[0],100*A,100*r]},o.hcg.hwb=function(e){const t=e[1]/100,r=t+e[2]/100*(1-t);return[e[0],100*(r-t),100*(1-r)]},o.hwb.hcg=function(e){const t=e[1]/100,r=1-e[2]/100,A=r-t;let n=0;return A<1&&(n=(r-A)/(1-A)),[e[0],100*A,100*n]},o.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},o.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},o.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},o.gray.hsl=function(e){return[0,0,e[0]]},o.gray.hsv=o.gray.hsl,o.gray.hwb=function(e){return[0,100,e[0]]},o.gray.cmyk=function(e){return[0,0,0,e[0]]},o.gray.lab=function(e){return[e[0],0,0]},o.gray.hex=function(e){const t=255&Math.round(e[0]/100*255),r=((t<<16)+(t<<8)+t).toString(16).toUpperCase();return"000000".substring(r.length)+r},o.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}},2744:(e,t,r)=>{const A=r(15311),n=r(78577),o={};Object.keys(A).forEach(e=>{o[e]={},Object.defineProperty(o[e],"channels",{value:A[e].channels}),Object.defineProperty(o[e],"labels",{value:A[e].labels});const t=n(e);Object.keys(t).forEach(r=>{const A=t[r];o[e][r]=function(e){const t=function(...t){const r=t[0];if(null==r)return r;r.length>1&&(t=r);const A=e(t);if("object"==typeof A)for(let e=A.length,t=0;t1&&(t=r),e(t))};return"conversion"in e&&(t.conversion=e.conversion),t}(A)})}),e.exports=o},78577:(e,t,r)=>{const A=r(15311);function n(e){const t=function(){const e={},t=Object.keys(A);for(let r=t.length,A=0;A{"use strict";e.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},67566:(e,t,r)=>{"use strict";const A=r(63129),n=r(14951),o=r(10779);function i(e,t,r){const i=n(e,t,r),s=A.spawn(i.command,i.args,i.options);return o.hookChildProcess(s,i),s}e.exports=i,e.exports.spawn=i,e.exports.sync=function(e,t,r){const i=n(e,t,r),s=A.spawnSync(i.command,i.args,i.options);return s.error=s.error||o.verifyENOENTSync(s.status,i),s},e.exports._parse=n,e.exports._enoent=o},10779:e=>{"use strict";const t="win32"===process.platform;function r(e,t){return Object.assign(new Error(`${t} ${e.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${t} ${e.command}`,path:e.command,spawnargs:e.args})}function A(e,A){return t&&1===e&&!A.file?r(A.original,"spawn"):null}e.exports={hookChildProcess:function(e,r){if(!t)return;const n=e.emit;e.emit=function(t,o){if("exit"===t){const t=A(o,r);if(t)return n.call(e,"error",t)}return n.apply(e,arguments)}},verifyENOENT:A,verifyENOENTSync:function(e,A){return t&&1===e&&!A.file?r(A.original,"spawnSync"):null},notFoundError:r}},14951:(e,t,r)=>{"use strict";const A=r(85622),n=r(47447),o=r(27066),i=r(35187),s="win32"===process.platform,a=/\.(?:com|exe)$/i,c=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function g(e){if(!s)return e;const t=function(e){e.file=n(e);const t=e.file&&i(e.file);return t?(e.args.unshift(e.file),e.command=t,n(e)):e.file}(e),r=!a.test(t);if(e.options.forceShell||r){const r=c.test(t);e.command=A.normalize(e.command),e.command=o.command(e.command),e.args=e.args.map(e=>o.argument(e,r));const n=[e.command].concat(e.args).join(" ");e.args=["/d","/s","/c",`"${n}"`],e.command=process.env.comspec||"cmd.exe",e.options.windowsVerbatimArguments=!0}return e}e.exports=function(e,t,r){t&&!Array.isArray(t)&&(r=t,t=null);const A={command:e,args:t=t?t.slice(0):[],options:r=Object.assign({},r),file:void 0,original:{command:e,args:t}};return r.shell?A:g(A)}},27066:e=>{"use strict";const t=/([()\][%!^"`<>&|;, *?])/g;e.exports.command=function(e){return e=e.replace(t,"^$1")},e.exports.argument=function(e,r){return e=(e=`"${e=(e=(e=""+e).replace(/(\\*)"/g,'$1$1\\"')).replace(/(\\*)$/,"$1$1")}"`).replace(t,"^$1"),r&&(e=e.replace(t,"^$1")),e}},35187:(e,t,r)=>{"use strict";const A=r(35747),n=r(91470);e.exports=function(e){const t=Buffer.alloc(150);let r;try{r=A.openSync(e,"r"),A.readSync(r,t,0,150,0),A.closeSync(r)}catch(e){}return n(t.toString())}},47447:(e,t,r)=>{"use strict";const A=r(85622),n=r(87945),o=r(37127);function i(e,t){const r=e.options.env||process.env,i=process.cwd(),s=null!=e.options.cwd,a=s&&void 0!==process.chdir&&!process.chdir.disabled;if(a)try{process.chdir(e.options.cwd)}catch(e){}let c;try{c=n.sync(e.command,{path:r[o({env:r})],pathExt:t?A.delimiter:void 0})}catch(e){}finally{a&&process.chdir(i)}return c&&(c=A.resolve(s?e.options.cwd:"",c)),c}e.exports=function(e){return i(e)||i(e,!0)}},93868:(e,t,r)=>{"use strict";const{Transform:A,PassThrough:n}=r(92413),o=r(78761),i=r(33527);e.exports=e=>{const t=(e.headers["content-encoding"]||"").toLowerCase();if(!["gzip","deflate","br"].includes(t))return e;const r="br"===t;if(r&&"function"!=typeof o.createBrotliDecompress)return e.destroy(new Error("Brotli is not supported on Node.js < 12")),e;let s=!0;const a=new A({transform(e,t,r){s=!1,r(null,e)},flush(e){e()}}),c=new n({autoDestroy:!1,destroy(t,r){e.destroy(),r(t)}}),g=r?o.createBrotliDecompress():o.createUnzip();return g.once("error",t=>{!s||e.readable?c.destroy(t):c.end()}),i(e,c),e.pipe(a).pipe(g).pipe(c),c}},93121:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(4016),n=(e,t)=>{let r;if("function"==typeof t){r={connect:t}}else r=t;const n="function"==typeof r.connect,o="function"==typeof r.secureConnect,i="function"==typeof r.close,s=()=>{n&&r.connect(),e instanceof A.TLSSocket&&o&&(e.authorized?r.secureConnect():e.authorizationError||e.once("secureConnect",r.secureConnect)),i&&e.once("close",r.close)};e.writable&&!e.connecting?s():e.connecting?e.once("connect",s):e.destroyed&&i&&r.close(e._hadError)};t.default=n,e.exports=n,e.exports.default=n},66241:(e,t,r)=>{"use strict";const A=r(85622),n=r(5763),o=e=>e.length>1?`{${e.join(",")}}`:e[0],i=(e,t)=>{const r="!"===e[0]?e.slice(1):e;return A.isAbsolute(r)?r:A.join(t,r)},s=(e,t)=>{if(t.files&&!Array.isArray(t.files))throw new TypeError(`Expected \`files\` to be of type \`Array\` but received type \`${typeof t.files}\``);if(t.extensions&&!Array.isArray(t.extensions))throw new TypeError(`Expected \`extensions\` to be of type \`Array\` but received type \`${typeof t.extensions}\``);return t.files&&t.extensions?t.files.map(r=>{return A.posix.join(e,(n=r,i=t.extensions,A.extname(n)?"**/"+n:`**/${n}.${o(i)}`));var n,i}):t.files?t.files.map(t=>A.posix.join(e,"**/"+t)):t.extensions?[A.posix.join(e,"**/*."+o(t.extensions))]:[A.posix.join(e,"**")]};e.exports=async(e,t)=>{if("string"!=typeof(t={cwd:process.cwd(),...t}).cwd)throw new TypeError(`Expected \`cwd\` to be of type \`string\` but received type \`${typeof t.cwd}\``);const r=await Promise.all([].concat(e).map(async e=>await n.isDirectory(i(e,t.cwd))?s(e,t):e));return[].concat.apply([],r)},e.exports.sync=(e,t)=>{if("string"!=typeof(t={cwd:process.cwd(),...t}).cwd)throw new TypeError(`Expected \`cwd\` to be of type \`string\` but received type \`${typeof t.cwd}\``);const r=[].concat(e).map(e=>n.isDirectorySync(i(e,t.cwd))?s(e,t):e);return[].concat.apply([],r)}},97681:(e,t,r)=>{var A=r(91162),n=function(){},o=function(e,t,r){if("function"==typeof t)return o(e,null,t);t||(t={}),r=A(r||n);var i=e._writableState,s=e._readableState,a=t.readable||!1!==t.readable&&e.readable,c=t.writable||!1!==t.writable&&e.writable,g=function(){e.writable||l()},l=function(){c=!1,a||r()},u=function(){a=!1,c||r()},h=function(e){r(e?new Error("exited with error code: "+e):null)},p=function(){return(!a||s&&s.ended)&&(!c||i&&i.ended)?void 0:r(new Error("premature close"))},d=function(){e.req.on("finish",l)};return!function(e){return e.setHeader&&"function"==typeof e.abort}(e)?c&&!i&&(e.on("end",g),e.on("close",g)):(e.on("complete",l),e.on("abort",p),e.req?d():e.on("request",d)),function(e){return e.stdio&&Array.isArray(e.stdio)&&3===e.stdio.length}(e)&&e.on("exit",h),e.on("end",u),e.on("finish",l),!1!==t.error&&e.on("error",r),e.on("close",p),function(){e.removeListener("complete",l),e.removeListener("abort",p),e.removeListener("request",d),e.req&&e.req.removeListener("finish",l),e.removeListener("end",g),e.removeListener("close",g),e.removeListener("finish",l),e.removeListener("exit",h),e.removeListener("end",u),e.removeListener("error",r),e.removeListener("close",p)}};e.exports=o},17067:(e,t,r)=>{var A=r(27180),n=function(){},o=function(e,t,r){if("function"==typeof t)return o(e,null,t);t||(t={}),r=A(r||n);var i=e._writableState,s=e._readableState,a=t.readable||!1!==t.readable&&e.readable,c=t.writable||!1!==t.writable&&e.writable,g=function(){e.writable||l()},l=function(){c=!1,a||r.call(e)},u=function(){a=!1,c||r.call(e)},h=function(t){r.call(e,t?new Error("exited with error code: "+t):null)},p=function(t){r.call(e,t)},d=function(){return(!a||s&&s.ended)&&(!c||i&&i.ended)?void 0:r.call(e,new Error("premature close"))},C=function(){e.req.on("finish",l)};return!function(e){return e.setHeader&&"function"==typeof e.abort}(e)?c&&!i&&(e.on("end",g),e.on("close",g)):(e.on("complete",l),e.on("abort",d),e.req?C():e.on("request",C)),function(e){return e.stdio&&Array.isArray(e.stdio)&&3===e.stdio.length}(e)&&e.on("exit",h),e.on("end",u),e.on("finish",l),!1!==t.error&&e.on("error",p),e.on("close",d),function(){e.removeListener("complete",l),e.removeListener("abort",d),e.removeListener("request",C),e.req&&e.req.removeListener("finish",l),e.removeListener("end",g),e.removeListener("close",g),e.removeListener("finish",l),e.removeListener("exit",h),e.removeListener("end",u),e.removeListener("error",p),e.removeListener("close",d)}};e.exports=o},61899:(e,t,r)=>{"use strict";const A=r(42357),n=r(28614),o=r(10278);class i extends n{constructor(e,t){super(),this.options=o.merge({},e),this.answers={...t}}register(e,t){if(o.isObject(e)){for(let t of Object.keys(e))this.register(t,e[t]);return this}A.equal(typeof t,"function","expected a function");let r=e.toLowerCase();return t.prototype instanceof this.Prompt?this.prompts[r]=t:this.prompts[r]=t(this.Prompt,this),this}async prompt(e=[]){for(let t of[].concat(e))try{"function"==typeof t&&(t=await t.call(this)),await this.ask(o.merge({},this.options,t))}catch(e){return Promise.reject(e)}return this.answers}async ask(e){"function"==typeof e&&(e=await e.call(this));let t=o.merge({},this.options,e),{type:r,name:n}=e,{set:i,get:s}=o;if("function"==typeof r&&(r=await r.call(this,e,this.answers)),!r)return this.answers[n];A(this.prompts[r],`Prompt "${r}" is not registered`);let a=new this.prompts[r](t),c=s(this.answers,n);a.state.answers=this.answers,a.enquirer=this,n&&a.on("submit",e=>{this.emit("answer",n,e,a),i(this.answers,n,e)});let g=a.emit.bind(a);return a.emit=(...e)=>(this.emit.call(this,...e),g(...e)),this.emit("prompt",a,this),t.autofill&&null!=c?(a.value=a.input=c,"show"===t.autofill&&await a.submit()):c=a.value=await a.run(),c}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||r(58386)}static get prompts(){return r(53609)}static get types(){return r(13235)}static get prompt(){const e=(t,...r)=>{let A=new this(...r),n=A.emit.bind(A);return A.emit=(...t)=>(e.emit(...t),n(...t)),A.prompt(t)};return o.mixinEmitter(e,new n),e}}o.mixinEmitter(i,new n);const s=i.prompts;for(let e of Object.keys(s)){let t=e.toLowerCase(),r=t=>new s[e](t).run();i.prompt[t]=r,i[t]=r,i[e]||Reflect.defineProperty(i,e,{get:()=>s[e]})}const a=e=>{o.defineExport(i,e,()=>i.types[e])};a("ArrayPrompt"),a("AuthPrompt"),a("BooleanPrompt"),a("NumberPrompt"),a("StringPrompt"),e.exports=i},72380:(e,t,r)=>{"use strict";const A="Apple_Terminal"===process.env.TERM_PROGRAM,n=r(97991),o=r(10278),i=e.exports=t,s="[";let a=!1;const c=i.code={bell:"",beep:"",beginning:"",down:"",esc:s,getPosition:"",hide:"[?25l",line:"",lineEnd:"",lineStart:"",restorePosition:s+(A?"8":"u"),savePosition:s+(A?"7":"s"),screen:"",show:"[?25h",up:""},g=i.cursor={get hidden(){return a},hide:()=>(a=!0,c.hide),show:()=>(a=!1,c.show),forward:(e=1)=>`[${e}C`,backward:(e=1)=>`[${e}D`,nextLine:(e=1)=>"".repeat(e),prevLine:(e=1)=>"".repeat(e),up:(e=1)=>e?`[${e}A`:"",down:(e=1)=>e?`[${e}B`:"",right:(e=1)=>e?`[${e}C`:"",left:(e=1)=>e?`[${e}D`:"",to:(e,t)=>t?`[${t+1};${e+1}H`:`[${e+1}G`,move(e=0,t=0){let r="";return r+=e<0?g.left(-e):e>0?g.right(e):"",r+=t<0?g.up(-t):t>0?g.down(t):"",r},restore(e={}){let{after:t,cursor:r,initial:A,input:n,prompt:s,size:a,value:c}=e;if(A=o.isPrimitive(A)?String(A):"",n=o.isPrimitive(n)?String(n):"",c=o.isPrimitive(c)?String(c):"",a){let e=i.cursor.up(a)+i.cursor.to(s.length),t=n.length-r;return t>0&&(e+=i.cursor.left(t)),e}if(c||t){let e=!n&&A?-A.length:-n.length+r;return t&&(e-=t.length),""===n&&A&&!s.includes(A)&&(e+=A.length),i.cursor.move(e)}}},l=i.erase={screen:c.screen,up:c.up,down:c.down,line:c.line,lineEnd:c.lineEnd,lineStart:c.lineStart,lines(e){let t="";for(let r=0;r{if(!t)return l.line+g.to(0);let r=e.split(/\r?\n/),A=0;for(let e of r)A+=1+Math.floor(Math.max((o=e,[...n.unstyle(o)].length-1),0)/t);var o;return(l.line+g.prevLine()).repeat(A-1)+l.line+g.to(0)}},62475:(e,t)=>{"use strict";t.ctrl={a:"first",b:"backward",c:"cancel",d:"deleteForward",e:"last",f:"forward",g:"reset",i:"tab",k:"cutForward",l:"reset",n:"newItem",m:"cancel",j:"submit",p:"search",r:"remove",s:"save",u:"undo",w:"cutLeft",x:"toggleCursor",v:"paste"},t.shift={up:"shiftUp",down:"shiftDown",left:"shiftLeft",right:"shiftRight",tab:"prev"},t.fn={up:"pageUp",down:"pageDown",left:"pageLeft",right:"pageRight",delete:"deleteForward"},t.option={b:"backward",f:"forward",d:"cutRight",left:"cutLeft",up:"altUp",down:"altDown"},t.keys={pageup:"pageUp",pagedown:"pageDown",home:"home",end:"end",cancel:"cancel",delete:"deleteForward",backspace:"delete",down:"down",enter:"submit",escape:"cancel",left:"left",space:"space",number:"number",return:"submit",right:"right",tab:"next",up:"up"}},64083:e=>{"use strict";const t=e=>(e=>e.filter((t,r)=>e.lastIndexOf(t)===r))(e).filter(Boolean);e.exports=(e,r={},A="")=>{let n,o,{past:i=[],present:s=""}=r;switch(e){case"prev":case"undo":return n=i.slice(0,i.length-1),o=i[i.length-1]||"",{past:t([A,...n]),present:o};case"next":case"redo":return n=i.slice(1),o=i[0]||"",{past:t([...n,A]),present:o};case"save":return{past:t([...i,A]),present:""};case"remove":return o=t(i.filter(e=>e!==A)),s="",o.length&&(s=o.pop()),{past:o,present:s};default:throw new Error(`Invalid action: "${e}"`)}}},84368:(e,t,r)=>{"use strict";const A=r(97991);class n{constructor(e){this.name=e.key,this.field=e.field||{},this.value=((e="")=>"string"==typeof e?e.replace(/^['"]|['"]$/g,""):"")(e.initial||this.field.initial||""),this.message=e.message||this.name,this.cursor=0,this.input="",this.lines=[]}}function o(e,t,r,A){return(r,n,o,i)=>"function"==typeof o.field[e]?o.field[e].call(t,r,n,o,i):[A,r].find(e=>t.isValue(e))}e.exports=async e=>{let t=e.options,r=new Set(!0===t.required?[]:t.required||[]),i={...t.values,...t.initial},{tabstops:s,items:a,keys:c}=await(async(e={},t={},r=(e=>e))=>{let A=new Set,o=e.fields||[],i=e.template,s=[],a=[],c=[],g=1;"function"==typeof i&&(i=await i());let l=-1,u=()=>i[++l],h=()=>i[l+1],p=e=>{e.line=g,s.push(e)};for(p({type:"bos",value:""});le.name===s.key);s.field=o.find(e=>e.name===s.key),g||(g=new n(s),a.push(g)),g.lines.push(s.line-1);continue}let i=s[s.length-1];"text"===i.type&&i.line===g?i.value+=e:p({type:"text",value:e})}return p({type:"eos",value:""}),{input:i,tabstops:s,unique:A,keys:c,items:a}})(t,i),g=o("result",e,t),l=o("format",e,t),u=o("validate",e,t,!0),h=e.isValue.bind(e);return async(n={},o=!1)=>{let i=0;n.required=r,n.items=a,n.keys=c,n.output="";let p=async(e,t,r,A)=>{let n=await u(e,t,r,A);return!1===n?"Invalid field "+r.name:n};for(let r of s){let s=r.value,c=r.key;if("template"===r.type){if("template"===r.type){let u=a.find(e=>e.name===c);!0===t.required&&n.required.add(u.name);let d=[u.input,n.values[u.value],u.value,s].find(h),C=(u.field||{}).message||r.inner;if(o){let e=await p(n.values[c],n,u,i);if(e&&"string"==typeof e||!1===e){n.invalid.set(c,e);continue}n.invalid.delete(c);let t=await g(n.values[c],n,u,i);n.output+=A.unstyle(t);continue}u.placeholder=!1;let f=s;s=await l(s,n,u,i),d!==s?(n.values[c]=d,s=e.styles.typing(d),n.missing.delete(C)):(n.values[c]=void 0,d=`<${C}>`,s=e.styles.primary(d),u.placeholder=!0,n.required.has(c)&&n.missing.add(C)),n.missing.has(C)&&n.validating&&(s=e.styles.warning(d)),n.invalid.has(c)&&n.validating&&(s=e.styles.danger(d)),i===n.index&&(s=f!==s?e.styles.underline(s):e.styles.heading(A.unstyle(s))),i++}s&&(n.output+=s)}else s&&(n.output+=s)}let d=n.output.split("\n").map(e=>" "+e),C=a.length,f=0;for(let t of a)n.invalid.has(t.name)&&t.lines.forEach(e=>{" "===d[e][0]&&(d[e]=n.styles.danger(n.symbols.bullet)+d[e].slice(1))}),e.isValue(n.values[t.name])&&f++;return n.completed=(f/C*100).toFixed(0),n.output=d.join("\n"),n.output}}},30650:(e,t,r)=>{"use strict";const A=r(51058),n=r(62475),o=/^(?:\x1b)([a-zA-Z0-9])$/,i=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,s={OP:"f1",OQ:"f2",OR:"f3",OS:"f4","[11~":"f1","[12~":"f2","[13~":"f3","[14~":"f4","[[A":"f1","[[B":"f2","[[C":"f3","[[D":"f4","[[E":"f5","[15~":"f5","[17~":"f6","[18~":"f7","[19~":"f8","[20~":"f9","[21~":"f10","[23~":"f11","[24~":"f12","[A":"up","[B":"down","[C":"right","[D":"left","[E":"clear","[F":"end","[H":"home",OA:"up",OB:"down",OC:"right",OD:"left",OE:"clear",OF:"end",OH:"home","[1~":"home","[2~":"insert","[3~":"delete","[4~":"end","[5~":"pageup","[6~":"pagedown","[[5~":"pageup","[[6~":"pagedown","[7~":"home","[8~":"end","[a":"up","[b":"down","[c":"right","[d":"left","[e":"clear","[2$":"insert","[3$":"delete","[5$":"pageup","[6$":"pagedown","[7$":"home","[8$":"end",Oa:"up",Ob:"down",Oc:"right",Od:"left",Oe:"clear","[2^":"insert","[3^":"delete","[5^":"pageup","[6^":"pagedown","[7^":"home","[8^":"end","[Z":"tab"};const a=(e="",t={})=>{let r,A={name:t.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:e,raw:e,...t};if(Buffer.isBuffer(e)?e[0]>127&&void 0===e[1]?(e[0]-=128,e=""+String(e)):e=String(e):void 0!==e&&"string"!=typeof e?e=String(e):e||(e=A.sequence||""),A.sequence=A.sequence||e||A.name,"\r"===e)A.raw=void 0,A.name="return";else if("\n"===e)A.name="enter";else if("\t"===e)A.name="tab";else if("\b"===e||""===e||""===e||"\b"===e)A.name="backspace",A.meta=""===e.charAt(0);else if(""===e||""===e)A.name="escape",A.meta=2===e.length;else if(" "===e||" "===e)A.name="space",A.meta=2===e.length;else if(e<="")A.name=String.fromCharCode(e.charCodeAt(0)+"a".charCodeAt(0)-1),A.ctrl=!0;else if(1===e.length&&e>="0"&&e<="9")A.name="number";else if(1===e.length&&e>="a"&&e<="z")A.name=e;else if(1===e.length&&e>="A"&&e<="Z")A.name=e.toLowerCase(),A.shift=!0;else if(r=o.exec(e))A.meta=!0,A.shift=/^[A-Z]$/.test(r[1]);else if(r=i.exec(e)){let t=[...e];""===t[0]&&""===t[1]&&(A.option=!0);let n=[r[1],r[2],r[4],r[6]].filter(Boolean).join(""),o=(r[3]||r[5]||1)-1;A.ctrl=!!(4&o),A.meta=!!(10&o),A.shift=!!(1&o),A.code=n,A.name=s[n],A.shift=function(e){return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(e)}(n)||A.shift,A.ctrl=function(e){return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(e)}(n)||A.ctrl}return A};a.listen=(e={},t)=>{let{stdin:r}=e;if(!r||r!==process.stdin&&!r.isTTY)throw new Error("Invalid stream passed");let n=A.createInterface({terminal:!0,input:r});A.emitKeypressEvents(r,n);let o=(e,r)=>t(e,a(e,r),n),i=r.isRaw;r.isTTY&&r.setRawMode(!0),r.on("keypress",o),n.resume();return()=>{r.isTTY&&r.setRawMode(i),r.removeListener("keypress",o),n.pause(),n.close()}},a.action=(e,t,r)=>{let A={...n,...r};return t.ctrl?(t.action=A.ctrl[t.name],t):t.option&&A.option?(t.action=A.option[t.name],t):t.shift?(t.action=A.shift[t.name],t):(t.action=A.keys[t.name],t)},e.exports=a},96496:(e,t,r)=>{"use strict";const A=r(10278);e.exports=(e,t={})=>{e.cursorHide();let{input:r="",initial:n="",pos:o,showCursor:i=!0,color:s}=t,a=s||e.styles.placeholder,c=A.inverse(e.styles.primary),g=t=>c(e.styles.black(t)),l=r,u=g(" ");if(e.blink&&!0===e.blink.off&&(g=e=>e,u=""),i&&0===o&&""===n&&""===r)return g(" ");if(i&&0===o&&(r===n||""===r))return g(n[0])+a(n.slice(1));n=A.isPrimitive(n)?""+n:"",r=A.isPrimitive(r)?""+r:"";let h=n&&n.startsWith(r)&&n!==r,p=h?g(n[r.length]):u;if(o!==r.length&&!0===i&&(l=r.slice(0,o)+g(r[o])+r.slice(o+1),p=""),!1===i&&(p=""),h){let t=e.styles.unstyle(l+p);return l+p+a(n.slice(t.length))}return l+p}},58386:(e,t,r)=>{"use strict";const A=r(28614),n=r(97991),o=r(30650),i=r(47159),s=r(61807),a=r(26205),c=r(10278),g=r(72380);class l extends A{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,a(this),i(this),this.state=new s(this),this.initial=[e.initial,e.default].find(e=>null!=e),this.stdout=e.stdout||process.stdout,this.stdin=e.stdin||process.stdin,this.scale=e.scale||1,this.term=this.options.term||process.env.TERM_PROGRAM,this.margin=function(e){"number"==typeof e&&(e=[e,e,e,e]);let t=[].concat(e||[]),r=e=>e%2==0?"\n":" ",A=[];for(let e=0;e<4;e++){let n=r(e);t[e]?A.push(n.repeat(t[e])):A.push("")}return A}(this.options.margin),this.setMaxListeners(0),function(e){let t=t=>void 0===e[t]||"function"==typeof e[t],r=["actions","choices","initial","margin","roles","styles","symbols","theme","timers","value"],A=["body","footer","error","header","hint","indicator","message","prefix","separator","skip"];for(let n of Object.keys(e.options)){if(r.includes(n))continue;if(/^on[A-Z]/.test(n))continue;let o=e.options[n];"function"==typeof o&&t(n)?A.includes(n)||(e[n]=o.bind(e)):"function"!=typeof e[n]&&(e[n]=o)}}(this)}async keypress(e,t={}){this.keypressed=!0;let r=o.action(e,o(e,t),this.options.actions);this.state.keypress=r,this.emit("keypress",e,r),this.emit("state",this.state.clone());let A=this.options[r.action]||this[r.action]||this.dispatch;if("function"==typeof A)return await A.call(this,e,r);this.alert()}alert(){delete this.state.alert,!1===this.options.show?this.emit("alert"):this.stdout.write(g.code.beep)}cursorHide(){this.stdout.write(g.cursor.hide()),c.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(g.cursor.show())}write(e){e&&(this.stdout&&!1!==this.state.show&&this.stdout.write(e),this.state.buffer+=e)}clear(e=0){let t=this.state.buffer;this.state.buffer="",(t||e)&&!1!==this.options.show&&this.stdout.write(g.cursor.down(e)+g.clear(t,this.width))}restore(){if(this.state.closed||!1===this.options.show)return;let{prompt:e,after:t,rest:r}=this.sections(),{cursor:A,initial:n="",input:o="",value:i=""}=this,s={after:t,cursor:A,initial:n,input:o,prompt:e,size:this.state.size=r.length,value:i},a=g.cursor.restore(s);a&&this.stdout.write(a)}sections(){let{buffer:e,input:t,prompt:r}=this.state;r=n.unstyle(r);let A=n.unstyle(e),o=A.indexOf(r),i=A.slice(0,o),s=A.slice(o).split("\n"),a=s[0],c=s[s.length-1],g=(r+(t?" "+t:"")).length,l=ge.call(this,this.value),this.result=()=>r.call(this,this.value),"function"==typeof t.initial&&(this.initial=await t.initial.call(this,this)),"function"==typeof t.onRun&&await t.onRun.call(this,this),"function"==typeof t.onSubmit){let e=t.onSubmit.bind(this),r=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await e(this.name,this.value,this),r())}await this.start(),await this.render()}render(){throw new Error("expected prompt to have a custom render method")}run(){return new Promise(async(e,t)=>{if(this.once("submit",e),this.once("cancel",t),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit("run")})}async element(e,t,r){let{options:A,state:n,symbols:o,timers:i}=this,s=i&&i[e];n.timer=s;let a=A[e]||n[e]||o[e],c=t&&null!=t[e]?t[e]:await a;if(""===c)return c;let g=await this.resolve(c,n,t,r);return!g&&t&&t[e]?this.resolve(a,n,t,r):g}async prefix(){let e=await this.element("prefix")||this.symbols,t=this.timers&&this.timers.prefix,r=this.state;if(r.timer=t,c.isObject(e)&&(e=e[r.status]||e.pending),!c.hasColor(e)){return(this.styles[r.status]||this.styles.pending)(e)}return e}async message(){let e=await this.element("message");return c.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element("separator")||this.symbols,t=this.timers&&this.timers.separator,r=this.state;r.timer=t;let A=e[r.status]||e.pending||r.separator,n=await this.resolve(A,r);return c.isObject(n)&&(n=n[r.status]||n.pending),c.hasColor(n)?n:this.styles.muted(n)}async pointer(e,t){let r=await this.element("pointer",e,t);if("string"==typeof r&&c.hasColor(r))return r;if(r){let e=this.styles,A=this.index===t,n=A?e.primary:e=>e,o=await this.resolve(r[A?"on":"off"]||r,this.state),i=c.hasColor(o)?o:n(o);return A?i:" ".repeat(o.length)}}async indicator(e,t){let r=await this.element("indicator",e,t);if("string"==typeof r&&c.hasColor(r))return r;if(r){let t=this.styles,A=!0===e.enabled,n=A?t.success:t.dark,o=r[A?"on":"off"]||r;return c.hasColor(o)?o:n(o)}return""}body(){return null}footer(){if("pending"===this.state.status)return this.element("footer")}header(){if("pending"===this.state.status)return this.element("header")}async hint(){if("pending"===this.state.status&&!this.isValue(this.state.input)){let e=await this.element("hint");return c.hasColor(e)?e:this.styles.muted(e)}}error(e){return this.state.submitted?"":e||this.state.error}format(e){return e}result(e){return e}validate(e){return!0!==this.options.required||this.isValue(e)}isValue(e){return null!=e&&""!==e}resolve(e,...t){return c.resolve(this,e,...t)}get base(){return l.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||c.height(this.stdout,25)}get width(){return this.options.columns||c.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:t}=this.state,r=[t,e].find(this.isValue.bind(this));return this.isValue(r)?r:this.initial}static get prompt(){return e=>new this(e).run()}}e.exports=l},63310:(e,t,r)=>{"use strict";const A=r(31557);e.exports=class extends A{constructor(e){super(e),this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:t,input:r}=this.state;return this.input=r.slice(0,t)+e+r.slice(t),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:t}=this.state;return t?(this.input=t.slice(0,e-1)+t.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:t}=this.state;return void 0===t[e]?this.alert():(this.input=(""+t).slice(0,e)+(""+t).slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,t=this.state._choices){if("function"==typeof this.options.suggest)return this.options.suggest.call(this,e,t);let r=e.toLowerCase();return t.filter(e=>e.message.toLowerCase().includes(r))}pointer(){return""}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(", ");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if("pending"!==this.state.status)return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,t=((e,t)=>{let r=e.toLowerCase();return e=>{let A=e.toLowerCase().indexOf(r),n=t(e.slice(A,A+r.length));return A>=0?e.slice(0,A)+n+e.slice(A+r.length):e}})(this.input,e),r=this.choices;this.choices=r.map(e=>({...e,message:t(e.message)})),await super.render(),this.choices=r}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}}},52810:(e,t,r)=>{"use strict";const A=r(46614);function n(e,t){return e.username===this.options.username&&e.password===this.options.password}const o=(e=n)=>{const t=[{name:"username",message:"username"},{name:"password",message:"password",format(e){if(this.options.showPassword)return e;return(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length))}}];class r extends(A.create(e)){constructor(e){super({...e,choices:t})}static create(e){return o(e)}}return r};e.exports=o()},65742:(e,t,r)=>{"use strict";const A=r(82710);e.exports=class extends A{constructor(e){super(e),this.default=this.options.default||(this.initial?"(Y/n)":"(y/N)")}}},24570:(e,t,r)=>{"use strict";const A=r(31557),n=r(71447).prototype;e.exports=class extends A{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,"left"].find(e=>null!=e),this.emptyError="",this.values={}}dispatch(e,t){let r=this.focused,A=r.parent||{};return r.editable||A.editable||"a"!==e&&"i"!==e?n.dispatch.call(this,e,t):super[e]()}append(e,t){return n.append.call(this,e,t)}delete(e,t){return n.delete.call(this,e,t)}space(e){return this.focused.editable?this.append(e):super.space()}number(e){return this.focused.editable?this.append(e):super.number(e)}next(){return this.focused.editable?n.next.call(this):super.next()}prev(){return this.focused.editable?n.prev.call(this):super.prev()}async indicator(e,t){let r=e.indicator||"",A=e.editable?r:super.indicator(e,t);return await this.resolve(A,this.state,e,t)||""}indent(e){return"heading"===e.role?"":e.editable?" ":" "}async renderChoice(e,t){return e.indent="",e.editable?n.renderChoice.call(this,e,t):super.renderChoice(e,t)}error(){return""}footer(){return this.state.error}async validate(){let e=!0;for(let t of this.choices){if("function"!=typeof t.validate)continue;if("heading"===t.role)continue;let r=t.parent?this.value[t.parent.name]:this.value;if(t.editable?r=t.value===t.name?t.initial||"":t.value:this.isDisabled(t)||(r=!0===t.enabled),e=await t.validate(r,this.state),!0!==e)break}return!0!==e&&(this.state.error="string"==typeof e?e:"Invalid Input"),e}submit(){if(!0===this.focused.newChoice)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let t=e.parent?this.value[e.parent.name]:this.value;"heading"!==e.role?e.editable?t[e.name]=e.value===e.name?e.initial||"":e.value:this.isDisabled(e)||(t[e.name]=!0===e.enabled):this.value[e.name]={}}return this.base.submit.call(this)}}},71447:(e,t,r)=>{"use strict";const A=r(97991),n=r(31557),o=r(96496);e.exports=class extends n{constructor(e){super({...e,multiple:!0}),this.type="form",this.initial=this.options.initial,this.align=[this.options.align,"right"].find(e=>null!=e),this.emptyError="",this.values={}}async reset(e){return await super.reset(),!0===e&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(e=>e.reset&&e.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let t=this.focused;if(!t)return this.alert();let{cursor:r,input:A}=t;return t.value=t.input=A.slice(0,r)+e+A.slice(r),t.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:t,input:r}=e;return e.value=e.input=r.slice(0,t-1)+r.slice(t),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:t,input:r}=e;if(void 0===r[t])return this.alert();let A=(""+r).slice(0,t)+(""+r).slice(t+1);return e.value=e.input=A,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,t){return this.dispatch(e,t)}number(e,t){return this.dispatch(e,t)}next(){let e=this.focused;if(!e)return this.alert();let{initial:t,input:r}=e;return t&&t.startsWith(r)&&r!==t?(e.value=e.input=t,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?0===e.cursor?super.prev():(e.value=e.input="",e.cursor=0,this.render()):this.alert()}separator(){return""}format(e){return this.state.submitted?"":super.format(e)}pointer(){return""}indicator(e){return e.input?"⦿":"⊙"}async choiceSeparator(e,t){let r=await this.resolve(e.separator,this.state,e,t)||":";return r?" "+this.styles.disabled(r):""}async renderChoice(e,t){await this.onChoice(e,t);let{state:r,styles:n}=this,{cursor:i,initial:s="",name:a,hint:c,input:g=""}=e,{muted:l,submitted:u,primary:h,danger:p}=n,d=c,C=this.index===t,f=e.validate||(()=>!0),I=await this.choiceSeparator(e,t),E=e.message;"right"===this.align&&(E=E.padStart(this.longest+1," ")),"left"===this.align&&(E=E.padEnd(this.longest+1," "));let B=this.values[a]=g||s,y=g?"success":"dark";!0!==await f.call(e,B,this.state)&&(y="danger");let m=(0,n[y])(await this.indicator(e,t))+(e.pad||""),w=this.indent(e),Q=()=>[w,m,E+I,g,d].filter(Boolean).join(" ");if(r.submitted)return E=A.unstyle(E),g=u(g),d="",Q();if(e.format)g=await e.format.call(this,g,e,t);else{let e=this.styles.muted;g=o(this,{input:g,initial:s,pos:i,showCursor:C,color:e})}return this.isValue(g)||(g=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[a]=await e.result.call(this,B,e,t)),C&&(E=h(E)),e.error?g+=(g?" ":"")+p(e.error.trim()):e.hint&&(g+=(g?" ":"")+l(e.hint.trim())),Q()}async submit(){return this.value=this.values,super.base.submit.call(this)}}},53609:(e,t,r)=>{"use strict";const A=r(10278),n=(e,r)=>{A.defineExport(t,e,r),A.defineExport(t,e.toLowerCase(),r)};n("AutoComplete",()=>r(63310)),n("BasicAuth",()=>r(52810)),n("Confirm",()=>r(65742)),n("Editable",()=>r(24570)),n("Form",()=>r(71447)),n("Input",()=>r(12372)),n("Invisible",()=>r(32684)),n("List",()=>r(40876)),n("MultiSelect",()=>r(42293)),n("Numeral",()=>r(42126)),n("Password",()=>r(84697)),n("Scale",()=>r(99580)),n("Select",()=>r(31557)),n("Snippet",()=>r(98094)),n("Sort",()=>r(60042)),n("Survey",()=>r(25223)),n("Text",()=>r(97298)),n("Toggle",()=>r(41817)),n("Quiz",()=>r(88677))},12372:(e,t,r)=>{"use strict";const A=r(45853),n=r(64083);e.exports=class extends A{constructor(e){super(e);let t=this.options.history;if(t&&t.store){let e=t.values||this.initial;this.autosave=!!t.autosave,this.store=t.store,this.data=this.store.get("values")||{past:[],present:e},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=n(e,this.data,this.input),this.data.present?(this.input=this.data.present,this.cursor=this.input.length,this.render()):this.alert()):this.alert()}altUp(){return this.completion("prev")}altDown(){return this.completion("next")}prev(){return this.save(),super.prev()}save(){this.store&&(this.data=n("save",this.data,this.input),this.store.set("values",this.data))}submit(){return this.store&&!0===this.autosave&&this.save(),super.submit()}}},32684:(e,t,r)=>{"use strict";const A=r(45853);e.exports=class extends A{format(){return""}}},40876:(e,t,r)=>{"use strict";const A=r(45853);e.exports=class extends A{constructor(e={}){super(e),this.sep=this.options.separator||/, */,this.initial=e.initial||""}split(e=this.value){return e?String(e).split(this.sep):[]}format(){let e=this.state.submitted?this.styles.primary:e=>e;return this.list.map(e).join(", ")}async submit(e){let t=this.state.error||await this.validate(this.list,this.state);return!0!==t?(this.state.error=t,super.submit()):(this.value=this.list,super.submit())}get list(){return this.split()}}},42293:(e,t,r)=>{"use strict";const A=r(31557);e.exports=class extends A{constructor(e){super({...e,multiple:!0})}}},42126:(e,t,r)=>{e.exports=r(64987)},84697:(e,t,r)=>{"use strict";const A=r(45853);e.exports=class extends A{constructor(e){super(e),this.cursorShow()}format(e=this.input){if(!this.keypressed)return"";return(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length))}}},88677:(e,t,r)=>{"use strict";const A=r(31557);e.exports=class extends A{constructor(e){if(super(e),"number"!=typeof this.options.correctChoice||this.options.correctChoice<0)throw new Error("Please specify the index of the correct answer from the list of choices")}async toChoices(e,t){let r=await super.toChoices(e,t);if(r.length<2)throw new Error("Please give at least two choices to the user");if(this.options.correctChoice>r.length)throw new Error("Please specify the index of the correct answer from the list of choices");return r}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}}},99580:(e,t,r)=>{"use strict";const A=r(97991),n=r(14723),o=r(10278);e.exports=class extends n{constructor(e={}){super(e),this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||"left"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||"\n ";let t=e.startNumber||1;"number"==typeof this.scale&&(this.scaleKey=!1,this.scale=Array(this.scale).fill(0).map((e,r)=>({name:r+t})))}async reset(){return this.tableized=!1,await super.reset(),this.render()}tableize(){if(!0===this.tableized)return;this.tableized=!0;let e=0;for(let t of this.choices){e=Math.max(e,t.message.length),t.scaleIndex=t.initial||2,t.scale=[];for(let e=0;e=this.scale.length-1?this.alert():(e.scaleIndex++,this.render())}left(){let e=this.focused;return e.scaleIndex<=0?this.alert():(e.scaleIndex--,this.render())}indent(){return""}format(){if(this.state.submitted){return this.choices.map(e=>this.styles.info(e.index)).join(", ")}return""}pointer(){return""}renderScaleKey(){if(!1===this.scaleKey)return"";if(this.state.submitted)return"";return["",...this.scale.map(e=>` ${e.name} - ${e.message}`)].map(e=>this.styles.muted(e)).join("\n")}renderScaleHeading(e){let t=this.scale.map(e=>e.name);"function"==typeof this.options.renderScaleHeading&&(t=this.options.renderScaleHeading.call(this,e));let r=this.scaleLength-t.join("").length,A=Math.round(r/(t.length-1)),n=t.map(e=>this.styles.strong(e)).join(" ".repeat(A)),o=" ".repeat(this.widths[0]);return this.margin[3]+o+this.margin[1]+n}scaleIndicator(e,t,r){if("function"==typeof this.options.scaleIndicator)return this.options.scaleIndicator.call(this,e,t,r);let A=e.scaleIndex===t.index;return t.disabled?this.styles.hint(this.symbols.radio.disabled):A?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,t){let r=e.scale.map(r=>this.scaleIndicator(e,r,t)),A="Hyper"===this.term?"":" ";return r.join(A+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,t){await this.onChoice(e,t);let r=this.index===t,n=await this.pointer(e,t),i=await e.hint;i&&!o.hasColor(i)&&(i=this.styles.muted(i));let s=e=>this.margin[3]+e.replace(/\s+$/,"").padEnd(this.widths[0]," "),a=this.newline,c=this.indent(e),g=await this.resolve(e.message,this.state,e,t),l=await this.renderScale(e,t),u=this.margin[1]+this.margin[3];this.scaleLength=A.unstyle(l).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-u.length);let h=o.wordWrap(g,{width:this.widths[0],newline:a}).split("\n").map(e=>s(e)+this.margin[1]);return r&&(l=this.styles.info(l),h=h.map(e=>this.styles.info(e))),h[0]+=l,this.linebreak&&h.push(""),[c+n,h.join("\n")].filter(Boolean)}async renderChoices(){if(this.state.submitted)return"";this.tableize();let e=this.visible.map(async(e,t)=>await this.renderChoice(e,t)),t=await Promise.all(e),r=await this.renderScaleHeading();return this.margin[0]+[r,...t.map(e=>e.join(" "))].join("\n")}async render(){let{submitted:e,size:t}=this.state,r=await this.prefix(),A=await this.separator(),n=await this.message(),o="";!1!==this.options.promptLine&&(o=[r,n,A,""].join(" "),this.state.prompt=o);let i=await this.header(),s=await this.format(),a=await this.renderScaleKey(),c=await this.error()||await this.hint(),g=await this.renderChoices(),l=await this.footer(),u=this.emptyError;s&&(o+=s),c&&!o.includes(c)&&(o+=" "+c),e&&!s&&!g.trim()&&this.multiple&&null!=u&&(o+=this.styles.danger(u)),this.clear(t),this.write([i,o,a,g,l].filter(Boolean).join("\n")),this.state.submitted||this.write(this.margin[2]),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIndex;return this.base.submit.call(this)}}},31557:(e,t,r)=>{"use strict";const A=r(14723),n=r(10278);e.exports=class extends A{constructor(e){super(e),this.emptyError=this.options.emptyError||"No items were selected"}async dispatch(e,t){if(this.multiple)return this[t.name]?await this[t.name](e,t):await super.dispatch(e,t);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,t){return!this.multiple||this.options.pointer?super.pointer(e,t):""}indicator(e,t){return this.multiple?super.indicator(e,t):""}choiceMessage(e,t){let r=this.resolve(e.message,this.state,e,t);return"heading"!==e.role||n.hasColor(r)||(r=this.styles.strong(r)),this.resolve(r,this.state,e,t)}choiceSeparator(){return":"}async renderChoice(e,t){await this.onChoice(e,t);let r=this.index===t,A=await this.pointer(e,t),o=await this.indicator(e,t)+(e.pad||""),i=await this.resolve(e.hint,this.state,e,t);i&&!n.hasColor(i)&&(i=this.styles.muted(i));let s=this.indent(e),a=await this.choiceMessage(e,t),c=()=>[this.margin[3],s+A+o,a,this.margin[1],i].filter(Boolean).join(" ");return"heading"===e.role?c():e.disabled?(n.hasColor(a)||(a=this.styles.disabled(a)),c()):(r&&(a=this.styles.em(a)),c())}async renderChoices(){if("choices"===this.state.loading)return this.styles.warning("Loading choices");if(this.state.submitted)return"";let e=this.visible.map(async(e,t)=>await this.renderChoice(e,t)),t=await Promise.all(e);t.length||t.push(this.styles.danger("No matching choices"));let r,A=this.margin[0]+t.join("\n");return this.options.choicesHeader&&(r=await this.resolve(this.options.choicesHeader,this.state)),[r,A].filter(Boolean).join("\n")}format(){return!this.state.submitted||this.state.cancelled?"":Array.isArray(this.selected)?this.selected.map(e=>this.styles.primary(e.name)).join(", "):this.styles.primary(this.selected.name)}async render(){let{submitted:e,size:t}=this.state,r="",A=await this.header(),n=await this.prefix(),o=await this.separator(),i=await this.message();!1!==this.options.promptLine&&(r=[n,i,o,""].join(" "),this.state.prompt=r);let s=await this.format(),a=await this.error()||await this.hint(),c=await this.renderChoices(),g=await this.footer();s&&(r+=s),a&&!r.includes(a)&&(r+=" "+a),e&&!s&&!c.trim()&&this.multiple&&null!=this.emptyError&&(r+=this.styles.danger(this.emptyError)),this.clear(t),this.write([A,r,c,g].filter(Boolean).join("\n")),this.write(this.margin[2]),this.restore()}}},98094:(e,t,r)=>{"use strict";const A=r(97991),n=r(84368),o=r(58386);e.exports=class extends o{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await n(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},!0!==e&&(await this.initialize(),await this.render())}moveCursor(e){let t=this.getItem();this.cursor+=e,t.cursor+=e}dispatch(e,t){t.code||t.ctrl||null==e||!this.getItem()?this.alert():this.append(e,t)}append(e,t){let r=this.getItem(),A=r.input.slice(0,this.cursor),n=r.input.slice(this.cursor);this.input=r.input=`${A}${e}${n}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let t=e.input.slice(this.cursor),r=e.input.slice(0,this.cursor-1);this.input=e.input=`${r}${t}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let t=this.state.completed<100?this.styles.warning:this.styles.success;return!0===this.state.submitted&&100!==this.state.completed&&(t=this.styles.danger),t(this.state.completed+"% completed")}async render(){let{index:e,keys:t=[],submitted:r,size:A}=this.state,n=[this.options.newline,"\n"].find(e=>null!=e),o=await this.prefix(),i=await this.separator(),s=[o,await this.message(),i].filter(Boolean).join(" ");this.state.prompt=s;let a=await this.header(),c=await this.error()||"",g=await this.hint()||"",l=r?"":await this.interpolate(this.state),u=this.state.key=t[e]||"",h=await this.format(u),p=await this.footer();h&&(s+=" "+h),g&&!h&&0===this.state.completed&&(s+=" "+g),this.clear(A);let d=[a,s,l,p,c.trim()];this.write(d.filter(Boolean).join(n)),this.restore()}getItem(e){let{items:t,keys:r,index:A}=this.state,n=t.find(e=>e.name===r[A]);return n&&null!=n.input&&(this.input=n.input,this.cursor=n.cursor),n}async submit(){"function"!=typeof this.interpolate&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:t,output:r,values:n}=this.state;if(e.size){let t="";for(let[r,A]of e)t+=`Invalid ${r}: ${A}\n`;return this.state.error=t,super.submit()}if(t.size)return this.state.error="Required: "+[...t.keys()].join(", "),super.submit();let o=A.unstyle(r).split("\n").map(e=>e.slice(1)).join("\n");return this.value={values:n,result:o},super.submit()}}},60042:(e,t,r)=>{"use strict";const A="(Use + to sort)",n=r(31557);e.exports=class extends n{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,A].find(this.isValue.bind(this))}indicator(){return""}async renderChoice(e,t){let r=await super.renderChoice(e,t),A=this.symbols.identicalTo+" ",n=this.index===t&&this.sorting?this.styles.muted(A):" ";return!1===this.options.drag&&(n=""),!0===this.options.numbered?n+(t+1+" - ")+r:n+r}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}}},25223:(e,t,r)=>{"use strict";const A=r(14723);function n(e,t={}){if(Array.isArray(t.scale))return t.scale.map(e=>({...e}));let r=[];for(let t=1;tthis.styles.muted(e)),this.state.header=e.join("\n ")}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let t=await super.toChoices(...e);for(let e of t)e.scale=n(5,this.options),e.scaleIdx=2;return t}dispatch(){this.alert()}space(){let e=this.focused,t=e.scale[e.scaleIdx],r=t.selected;return e.scale.forEach(e=>e.selected=!1),t.selected=!r,this.render()}indicator(){return""}pointer(){return""}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return" "}async renderChoice(e,t){await this.onChoice(e,t);let r=this.index===t,A="Hyper"===this.term,n=A?9:8,o=A?"":" ",i=this.symbols.line.repeat(n),s=" ".repeat(n+(A?0:1)),a=e=>(e?this.styles.success("◉"):"◯")+o,c=t+1+".",g=r?this.styles.heading:this.styles.noop,l=await this.resolve(e.message,this.state,e,t),u=this.indent(e),h=u+e.scale.map((t,r)=>a(r===e.scaleIdx)).join(i),p=u+e.scale.map((t,r)=>(t=>t===e.scaleIdx?g(t):t)(r)).join(s);return r&&(h=this.styles.cyan(h),p=this.styles.cyan(p)),[[c,l].filter(Boolean).join(" "),h,p," "].filter(Boolean).join("\n")}async renderChoices(){if(this.state.submitted)return"";let e=this.visible.map(async(e,t)=>await this.renderChoice(e,t)),t=await Promise.all(e);return t.length||t.push(this.styles.danger("No matching choices")),t.join("\n")}format(){if(this.state.submitted){return this.choices.map(e=>this.styles.info(e.scaleIdx)).join(", ")}return""}async render(){let{submitted:e,size:t}=this.state,r=await this.prefix(),A=await this.separator(),n=[r,await this.message(),A].filter(Boolean).join(" ");this.state.prompt=n;let o=await this.header(),i=await this.format(),s=await this.error()||await this.hint(),a=await this.renderChoices(),c=await this.footer();!i&&s||(n+=" "+i),s&&!n.includes(s)&&(n+=" "+s),e&&!i&&!a&&this.multiple&&"form"!==this.type&&(n+=this.styles.danger(this.emptyError)),this.clear(t),this.write([n,o,a,c].filter(Boolean).join("\n")),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}}},97298:(e,t,r)=>{e.exports=r(12372)},41817:(e,t,r)=>{"use strict";const A=r(82710);e.exports=class extends A{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||"no",this.enabled=this.options.enabled||"yes",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(!0===this.value)return this.alert();this.value=!0,this.render()}disable(){if(!1===this.value)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e="",t){switch(e.toLowerCase()){case" ":return this.toggle();case"1":case"y":case"t":return this.enable();case"0":case"n":case"f":return this.disable();default:return this.alert()}}format(){let e=e=>this.styles.primary.underline(e);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(" / "))}async render(){let{size:e}=this.state,t=await this.header(),r=await this.prefix(),A=await this.separator(),n=await this.message(),o=await this.format(),i=await this.error()||await this.hint(),s=await this.footer(),a=[r,n,A,o].join(" ");this.state.prompt=a,i&&!a.includes(i)&&(a+=" "+i),this.clear(e),this.write([t,a,s].filter(Boolean).join("\n")),this.write(this.margin[2]),this.restore()}}},27011:(e,t,r)=>{"use strict";const A=r(10278),n={default:(e,t)=>t,checkbox(e,t){throw new Error("checkbox role is not implemented yet")},editable(e,t){throw new Error("editable role is not implemented yet")},expandable(e,t){throw new Error("expandable role is not implemented yet")},heading:(e,t)=>(t.disabled="",t.indicator=[t.indicator," "].find(e=>null!=e),t.message=t.message||"",t),input(e,t){throw new Error("input role is not implemented yet")},option:(e,t)=>n.default(e,t),radio(e,t){throw new Error("radio role is not implemented yet")},separator:(e,t)=>(t.disabled="",t.indicator=[t.indicator," "].find(e=>null!=e),t.message=t.message||e.symbols.line.repeat(5),t),spacer:(e,t)=>t};e.exports=(e,t={})=>{let r=A.merge({},n,t.roles);return r[e]||r.default}},61807:(e,t,r)=>{"use strict";const{define:A,width:n}=r(10278);e.exports=class{constructor(e){let t=e.options;A(this,"_prompt",e),this.type=e.type,this.name=e.name,this.message="",this.header="",this.footer="",this.error="",this.hint="",this.input="",this.cursor=0,this.index=0,this.lines=0,this.tick=0,this.prompt="",this.buffer="",this.width=n(t.stdout||process.stdout),Object.assign(this,t),this.name=this.name||this.message,this.message=this.message||this.name,this.symbols=e.symbols,this.styles=e.styles,this.required=new Set,this.cancelled=!1,this.submitted=!1}clone(){let e={...this};return e.status=this.status,e.buffer=Buffer.from(e.buffer),delete e.clone,e}set color(e){this._color=e}get color(){let e=this.prompt.styles;if(this.cancelled)return e.cancelled;if(this.submitted)return e.submitted;let t=this._color||e[this.status];return"function"==typeof t?t:e.pending}set loading(e){this._loading=e}get loading(){return"boolean"==typeof this._loading?this._loading:!!this.loadingChoices&&"choices"}get status(){return this.cancelled?"cancelled":this.submitted?"submitted":"pending"}}},64402:(e,t,r)=>{"use strict";const A=r(10278),n=r(97991),o={default:n.noop,noop:n.noop,set inverse(e){this._inverse=e},get inverse(){return this._inverse||A.inverse(this.primary)},set complement(e){this._complement=e},get complement(){return this._complement||A.complement(this.primary)},primary:n.cyan,success:n.green,danger:n.magenta,strong:n.bold,warning:n.yellow,muted:n.dim,disabled:n.gray,dark:n.dim.gray,underline:n.underline,set info(e){this._info=e},get info(){return this._info||this.primary},set em(e){this._em=e},get em(){return this._em||this.primary.underline},set heading(e){this._heading=e},get heading(){return this._heading||this.muted.underline},set pending(e){this._pending=e},get pending(){return this._pending||this.primary},set submitted(e){this._submitted=e},get submitted(){return this._submitted||this.success},set cancelled(e){this._cancelled=e},get cancelled(){return this._cancelled||this.danger},set typing(e){this._typing=e},get typing(){return this._typing||this.dim},set placeholder(e){this._placeholder=e},get placeholder(){return this._placeholder||this.primary.dim},set highlight(e){this._highlight=e},get highlight(){return this._highlight||this.inverse},merge:(e={})=>{e.styles&&"boolean"==typeof e.styles.enabled&&(n.enabled=e.styles.enabled),e.styles&&"boolean"==typeof e.styles.visible&&(n.visible=e.styles.visible);let t=A.merge({},o,e.styles);delete t.merge;for(let e of Object.keys(n))t.hasOwnProperty(e)||Reflect.defineProperty(t,e,{get:()=>n[e]});for(let e of Object.keys(n.styles))t.hasOwnProperty(e)||Reflect.defineProperty(t,e,{get:()=>n[e]});return t}};e.exports=o},50511:(e,t,r)=>{"use strict";const A="win32"===process.platform,n=r(97991),o=r(10278),i={...n.symbols,upDownDoubleArrow:"⇕",upDownDoubleArrow2:"⬍",upDownArrow:"↕",asterisk:"*",asterism:"⁂",bulletWhite:"◦",electricArrow:"⌁",ellipsisLarge:"⋯",ellipsisSmall:"…",fullBlock:"█",identicalTo:"≡",indicator:n.symbols.check,leftAngle:"‹",mark:"※",minus:"−",multiplication:"×",obelus:"÷",percent:"%",pilcrow:"¶",pilcrow2:"❡",pencilUpRight:"✐",pencilDownRight:"✎",pencilRight:"✏",plus:"+",plusMinus:"±",pointRight:"☞",rightAngle:"›",section:"§",hexagon:{off:"⬡",on:"⬢",disabled:"⬢"},ballot:{on:"☑",off:"☐",disabled:"☒"},stars:{on:"★",off:"☆",disabled:"☆"},folder:{on:"▼",off:"▶",disabled:"▶"},prefix:{pending:n.symbols.question,submitted:n.symbols.check,cancelled:n.symbols.cross},separator:{pending:n.symbols.pointerSmall,submitted:n.symbols.middot,cancelled:n.symbols.middot},radio:{off:A?"( )":"◯",on:A?"(*)":"◉",disabled:A?"(|)":"Ⓘ"},numbers:["⓪","①","②","③","④","⑤","⑥","⑦","⑧","⑨","⑩","⑪","⑫","⑬","⑭","⑮","⑯","⑰","⑱","⑲","⑳","㉑","㉒","㉓","㉔","㉕","㉖","㉗","㉘","㉙","㉚","㉛","㉜","㉝","㉞","㉟","㊱","㊲","㊳","㊴","㊵","㊶","㊷","㊸","㊹","㊺","㊻","㊼","㊽","㊾","㊿"]};i.merge=e=>{let t=o.merge({},n.symbols,i,e.symbols);return delete t.merge,t},e.exports=i},26205:(e,t,r)=>{"use strict";const A=r(64402),n=r(50511),o=r(10278);e.exports=e=>{e.options=o.merge({},e.options.theme,e.options),e.symbols=n.merge(e.options),e.styles=A.merge(e.options)}},47159:e=>{"use strict";function t(e,t,r={}){let A=e.timers[t]={name:t,start:Date.now(),ms:0,tick:0},n=r.interval||120;A.frames=r.frames||[],A.loading=!0;let o=setInterval(()=>{A.ms=Date.now()-A.start,A.tick++,e.render()},n);return A.stop=()=>{A.loading=!1,clearInterval(o)},Reflect.defineProperty(A,"interval",{value:o}),e.once("close",()=>A.stop()),A.stop}e.exports=e=>{e.timers=e.timers||{};let r=e.options.timers;if(r)for(let A of Object.keys(r)){let n=r[A];"number"==typeof n&&(n={interval:n}),t(e,A,n)}}},14723:(e,t,r)=>{"use strict";const A=r(97991),n=r(58386),o=r(27011),i=r(10278),{reorder:s,scrollUp:a,scrollDown:c,isObject:g,swap:l}=i;function u(e,t){if(t instanceof Promise)return t;if("function"==typeof t){if(i.isAsyncFn(t))return t;t=t.call(e,e)}for(let r of t){if(Array.isArray(r.choices)){let t=r.choices.filter(t=>!e.isDisabled(t));r.enabled=t.every(e=>!0===e.enabled)}!0===e.isDisabled(r)&&delete r.enabled}return t}e.exports=class extends n{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=""}async initialize(){"function"==typeof this.options.initial&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:t,autofocus:r,suggest:A}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(e=>e.enabled=!1),"function"!=typeof A&&0===this.selectable.length)throw new Error("At least one choice must be selectable");g(t)&&(t=Object.keys(t)),Array.isArray(t)?(null!=r&&(this.index=this.findIndex(r)),t.forEach(e=>this.enable(this.find(e))),await this.render()):(null!=r&&(t=r),"string"==typeof t&&(t=this.findIndex(t)),"number"==typeof t&&t>-1&&(this.index=Math.max(0,Math.min(t,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,t){this.state.loadingChoices=!0;let r=[],A=0,n=async(e,t)=>{"function"==typeof e&&(e=await e.call(this)),e instanceof Promise&&(e=await e);for(let o=0;o(this.state.loadingChoices=!1,e))}async toChoice(e,t,r){if("function"==typeof e&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),"string"==typeof e&&(e={name:e}),e.normalized)return e;e.normalized=!0;let n=e.value,s=o(e.role,this.options);if("string"!=typeof(e=s(this,e)).disabled||e.hint||(e.hint=e.disabled,e.disabled=!0),!0===e.disabled&&null==e.hint&&(e.hint="(disabled)"),null!=e.index)return e;e.name=e.name||e.key||e.title||e.value||e.message,e.message=e.message||e.name||"",e.value=[e.value,e.name].find(this.isValue.bind(this)),e.input="",e.index=t,e.cursor=0,i.define(e,"parent",r),e.level=r?r.level+1:1,null==e.indent&&(e.indent=r?r.indent+" ":e.indent||""),e.path=r?r.path+"."+e.name:e.name,e.enabled=!(!this.multiple||this.isDisabled(e)||!e.enabled&&!this.isSelected(e)),this.isDisabled(e)||(this.longest=Math.max(this.longest,A.unstyle(e.message).length));let a={...e};return e.reset=(t=a.input,r=a.value)=>{for(let t of Object.keys(a))e[t]=a[t];e.input=t,e.value=r},null==n&&"function"==typeof e.initial&&(e.input=await e.initial.call(this,this.state,e,t)),e}async onChoice(e,t){this.emit("choice",e,t,this),"function"==typeof e.onChoice&&await e.onChoice.call(this,this.state,e,t)}async addChoice(e,t,r){let A=await this.toChoice(e,t,r);return this.choices.push(A),this.index=this.choices.length-1,this.limit=this.choices.length,A}async newItem(e,t,r){let A={name:"New choice name?",editable:!0,newChoice:!0,...e},n=await this.addChoice(A,t,r);return n.updateChoice=()=>{delete n.newChoice,n.name=n.message=n.input,n.input="",n.cursor=0},this.render()}indent(e){return null==e.indent?e.level>1?" ".repeat(e.level-1):"":e.indent}dispatch(e,t){if(this.multiple&&this[t.name])return this[t.name]();this.alert()}focus(e,t){return"boolean"!=typeof t&&(t=e.enabled),t&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=t&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelectede.enabled);return this.choices.forEach(t=>t.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(e=>!!e.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,t){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();"boolean"!=typeof t&&(t=!e.enabled),e.enabled=t,e.choices&&e.choices.forEach(e=>this.toggle(e,t));let r=e.parent;for(;r;){let e=r.choices.filter(e=>this.isDisabled(e));r.enabled=e.every(e=>!0===e.enabled),r=r.parent}return u(this,this.choices),this.emit("toggle",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let t=e=>{let t=Number(e);if(t>this.choices.length-1)return this.alert();let r=this.focused,A=this.choices.find(e=>t===e.index);if(!A.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(-1===this.visible.indexOf(A)){let e=s(this.choices),t=e.indexOf(A);if(r.index>t){let r=e.slice(t,t+this.limit),A=e.filter(e=>!r.includes(e));this.choices=r.concat(A)}else{let r=t-this.limit+1;this.choices=e.slice(r).concat(e.slice(0,r))}}return this.index=this.choices.indexOf(A),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(e=>{let r=this.choices.length,A=this.num,n=(r=!1,n)=>{clearTimeout(this.numberTimeout),r&&(n=t(A)),this.num="",e(n)};return"0"===A||1===A.length&&Number(A+"0")>r?n(!0):Number(A)>r?n(!1,this.alert()):void(this.numberTimeout=setTimeout(()=>n(!0),this.delay))})}home(){return this.choices=s(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,t=s(this.choices);return this.choices=t.slice(e).concat(t.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,t=this.visible.length,r=this.index;return!1===this.options.scroll&&0===r?this.alert():e>t&&0===r?this.scrollUp():(this.index=(r-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,t=this.visible.length,r=this.index;return!1===this.options.scroll&&r===t-1?this.alert():e>t&&r===t-1?this.scrollDown():(this.index=(r+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=a(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=c(this.choices),this.index=e,this.isDisabled()?this.down():this.render()}async shiftUp(){return!0===this.options.sort?(this.sorting=!0,this.swap(this.index-1),await this.up(),void(this.sorting=!1)):this.scrollUp(this.index)}async shiftDown(){return!0===this.options.sort?(this.sorting=!0,this.swap(this.index+1),await this.down(),void(this.sorting=!1)):this.scrollDown(this.index)}pageUp(){return this.visible.length<=1?this.alert():(this.limit=Math.max(this.limit-1,0),this.index=Math.min(this.limit-1,this.index),this._limit=this.limit,this.isDisabled()?this.up():this.render())}pageDown(){return this.visible.length>=this.choices.length?this.alert():(this.index=Math.max(0,this.index),this.limit=Math.min(this.limit+1,this.choices.length),this._limit=this.limit,this.isDisabled()?this.down():this.render())}swap(e){l(this.choices,this.index,e)}isDisabled(e=this.focused){return!(!e||!["disabled","collapsed","hidden","completing","readonly"].some(t=>!0===e[t]))||e&&"heading"===e.role}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(e=>this.isEnabled(e));if(e.choices){let t=e.choices.filter(e=>!this.isDisabled(e));return e.enabled&&t.every(e=>this.isEnabled(e))}return e.enabled&&!this.isDisabled(e)}isChoice(e,t){return e.name===t||e.index===Number(t)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(t=>this.isChoice(e,t)):this.isChoice(e,this.initial)}map(e=[],t="value"){return[].concat(e||[]).reduce((e,r)=>(e[r]=this.find(r,t),e),{})}filter(e,t){let r="function"==typeof e?e:(t,r)=>[t.name,r].includes(e),A=(this.options.multiple?this.state._choices:this.choices).filter(r);return t?A.map(e=>e[t]):A}find(e,t){if(g(e))return t?e[t]:e;let r="function"==typeof e?e:(t,r)=>[t.name,r].includes(e),A=this.choices.find(r);return A?t?A[t]:A:void 0}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(e=>e.newChoice))return this.alert();let{reorder:t,sort:r}=this.options,A=!0===this.multiple,n=this.selected;return void 0===n?this.alert():(Array.isArray(n)&&!1!==t&&!0!==r&&(n=i.reorder(n)),this.value=A?n.map(e=>e.name):n.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let t of e)this.state._choices.some(e=>e.name===t.name)||this.state._choices.push(t);if(!this._initial&&this.options.initial){this._initial=!0;let e=this.initial;if("string"==typeof e||"number"==typeof e){let t=this.find(e);t&&(this.initial=t.index,this.focus(t,!0))}}}get choices(){return u(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:t,choices:r}=this,A=e.limit||this._limit||t.limit||r.length;return Math.min(A,this.height)}set value(e){super.value=e}get value(){return"string"!=typeof super.value&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&!0!==this.multiple&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}}},46614:(e,t,r)=>{"use strict";const A=r(71447),n=()=>{throw new Error("expected prompt to have a custom authenticate method")},o=(e=n)=>class extends A{constructor(e){super(e)}async submit(){this.value=await e.call(this,this.values,this.state),super.base.submit.call(this)}static create(e){return o(e)}};e.exports=o()},82710:(e,t,r)=>{"use strict";const A=r(58386),{isPrimitive:n,hasColor:o}=r(10278);e.exports=class extends A{constructor(e){super(e),this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:t,state:r}=this;return r.submitted?t.success(e):t.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return n(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if("pending"===this.state.status){let e=await this.element("hint");return o(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:t}=this.state,r=await this.prefix(),A=await this.separator(),n=[r,await this.message(),this.styles.muted(this.default),A].filter(Boolean).join(" ");this.state.prompt=n;let o=await this.header(),i=this.value=this.cast(e),s=await this.format(i),a=await this.error()||await this.hint(),c=await this.footer();a&&!n.includes(a)&&(s+=" "+a),n+=" "+s,this.clear(t),this.write([o,n,c].filter(Boolean).join("\n")),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}}},13235:(e,t,r)=>{e.exports={ArrayPrompt:r(14723),AuthPrompt:r(46614),BooleanPrompt:r(82710),NumberPrompt:r(64987),StringPrompt:r(45853)}},64987:(e,t,r)=>{"use strict";const A=r(45853);e.exports=class extends A{constructor(e={}){super({style:"number",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,this.delay=null!=e.delay?e.delay:1e3,this.float=!1!==e.float,this.round=!0===e.round||!1===e.float,this.major=e.major||10,this.minor=e.minor||1,this.initial=null!=e.initial?e.initial:"",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||"."===e&&this.input.includes(".")?this.alert("invalid number"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let t=e||this.minor,r=this.toNumber(this.input);return r>this.max+t?this.alert():(this.input=""+(r+t),this.render())}down(e){let t=e||this.minor,r=this.toNumber(this.input);return rthis.isValue(e));return this.value=this.toNumber(e||0),super.submit()}}},45853:(e,t,r)=>{"use strict";const A=r(58386),n=r(96496),{isPrimitive:o}=r(10278);e.exports=class extends A{constructor(e){super(e),this.initial=o(this.initial)?String(this.initial):"",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,t={}){let r=this.state.prevKeypress;return this.state.prevKeypress=t,!0!==this.options.multiline||"return"!==t.name||r&&"return"===r.name?super.keypress(e,t):this.append("\n",t)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value="",this.cursor=0,this.render()}dispatch(e,t){if(!e||t.ctrl||t.code)return this.alert();this.append(e)}append(e){let{cursor:t,input:r}=this.state;this.input=(""+r).slice(0,t)+e+(""+r).slice(t),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:t}=this.state;if(e<=0)return this.alert();this.input=(""+t).slice(0,e-1)+(""+t).slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:t}=this.state;if(void 0===t[e])return this.alert();this.input=(""+t).slice(0,e)+(""+t).slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(0===e)return this.alert();let t=this.input.slice(0,e),r=this.input.slice(e),A=t.split(" ");this.state.clipboard.push(A.pop()),this.input=A.join(" "),this.cursor=this.input.length,this.input+=r,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=null!=this.initial?String(this.initial):"";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let t=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||t):n(this,{input:e,initial:t,pos:this.cursor})}async render(){let e=this.state.size,t=await this.prefix(),r=await this.separator(),A=[t,await this.message(),r].filter(Boolean).join(" ");this.state.prompt=A;let n=await this.header(),o=await this.format(),i=await this.error()||await this.hint(),s=await this.footer();i&&!o.includes(i)&&(o+=" "+i),A+=" "+o,this.clear(e),this.write([n,A,s].filter(Boolean).join("\n")),this.restore()}}},10278:(e,t,r)=>{"use strict";const A=Object.prototype.toString,n=r(97991);let o=!1,i=[];const s={yellow:"blue",cyan:"red",green:"magenta",black:"white",blue:"yellow",red:"cyan",magenta:"green",white:"black"};t.longest=(e,t)=>e.reduce((e,r)=>Math.max(e,t?r[t].length:r.length),0),t.hasColor=e=>!!e&&n.hasColor(e);const a=t.isObject=e=>null!==e&&"object"==typeof e&&!Array.isArray(e);t.nativeType=e=>A.call(e).slice(8,-1).toLowerCase().replace(/\s/g,""),t.isAsyncFn=e=>"asyncfunction"===t.nativeType(e),t.isPrimitive=e=>null!=e&&"object"!=typeof e&&"function"!=typeof e,t.resolve=(e,t,...r)=>"function"==typeof t?t.call(e,...r):t,t.scrollDown=(e=[])=>[...e.slice(1),e[0]],t.scrollUp=(e=[])=>[e.pop(),...e],t.reorder=(e=[])=>{let t=e.slice();return t.sort((e,t)=>e.index>t.index?1:e.index{let A=e.length,n=r===A?0:r<0?A-1:r,o=e[t];e[t]=e[n],e[n]=o},t.width=(e,t=80)=>{let r=e&&e.columns?e.columns:t;return e&&"function"==typeof e.getWindowSize&&(r=e.getWindowSize()[0]),"win32"===process.platform?r-1:r},t.height=(e,t=20)=>{let r=e&&e.rows?e.rows:t;return e&&"function"==typeof e.getWindowSize&&(r=e.getWindowSize()[1]),r},t.wordWrap=(e,t={})=>{if(!e)return e;"number"==typeof t&&(t={width:t});let{indent:r="",newline:A="\n"+r,width:n=80}=t,o=(A+r).match(/[^\S\n]/g)||[];n-=o.length;let i=`.{1,${n}}([\\s\\u200B]+|$)|[^\\s\\u200B]+?([\\s\\u200B]+|$)`,s=e.trim(),a=new RegExp(i,"g"),c=s.match(a)||[];return c=c.map(e=>e.replace(/\n$/,"")),t.padEnd&&(c=c.map(e=>e.padEnd(n," "))),t.padStart&&(c=c.map(e=>e.padStart(n," "))),r+c.join(A)},t.unmute=e=>{let t=e.stack.find(e=>n.keys.color.includes(e));return t?n[t]:e.stack.find(e=>"bg"===e.slice(2))?n[t.slice(2)]:e=>e},t.pascal=e=>e?e[0].toUpperCase()+e.slice(1):"",t.inverse=e=>{if(!e||!e.stack)return e;let r=e.stack.find(e=>n.keys.color.includes(e));if(r){let A=n["bg"+t.pascal(r)];return A?A.black:e}let A=e.stack.find(e=>"bg"===e.slice(0,2));return A?n[A.slice(2).toLowerCase()]||e:n.none},t.complement=e=>{if(!e||!e.stack)return e;let r=e.stack.find(e=>n.keys.color.includes(e)),A=e.stack.find(e=>"bg"===e.slice(0,2));if(r&&!A)return n[s[r]||r];if(A){let r=A.slice(2).toLowerCase(),o=s[r];return o&&n["bg"+t.pascal(o)]||e}return n.none},t.meridiem=e=>{let t=e.getHours(),r=e.getMinutes(),A=t>=12?"pm":"am";return t%=12,(0===t?12:t)+":"+(r<10?"0"+r:r)+" "+A},t.set=(e={},r="",A)=>r.split(".").reduce((e,r,n,o)=>{let i=o.length-1>n?e[r]||{}:A;return!t.isObject(i)&&n{let A=null==e[t]?t.split(".").reduce((e,t)=>e&&e[t],e):e[t];return null==A?r:A},t.mixin=(e,r)=>{if(!a(e))return r;if(!a(r))return e;for(let A of Object.keys(r)){let n=Object.getOwnPropertyDescriptor(r,A);if(n.hasOwnProperty("value"))if(e.hasOwnProperty(A)&&a(n.value)){let o=Object.getOwnPropertyDescriptor(e,A);a(o.value)?e[A]=t.merge({},e[A],r[A]):Reflect.defineProperty(e,A,n)}else Reflect.defineProperty(e,A,n);else Reflect.defineProperty(e,A,n)}return e},t.merge=(...e)=>{let r={};for(let A of e)t.mixin(r,A);return r},t.mixinEmitter=(e,r)=>{let A=r.constructor.prototype;for(let n of Object.keys(A)){let o=A[n];"function"==typeof o?t.define(e,n,o.bind(r)):t.define(e,n,o)}},t.onExit=e=>{const t=(e,t)=>{o||(o=!0,i.forEach(e=>e()),!0===e&&process.exit(128+t))};0===i.length&&(process.once("SIGTERM",t.bind(null,!0,15)),process.once("SIGINT",t.bind(null,!0,2)),process.once("exit",t)),i.push(e)},t.define=(e,t,r)=>{Reflect.defineProperty(e,t,{value:r})},t.defineExport=(e,t,r)=>{let A;Reflect.defineProperty(e,t,{enumerable:!0,configurable:!0,set(e){A=e},get:()=>A?A():r()})}},19347:(e,t,r)=>{"use strict";const A=r(80598),n=r(58182),o=r(67652),i=r(81340),s=r(43754),a=r(16777);async function c(e,t){l(e);const r=g(e,n.default,t),A=await Promise.all(r);return a.array.flatten(A)}function g(e,t,r){const n=[].concat(e),o=new s.default(r),i=A.generate(n,o),a=new t(o);return i.map(a.read,a)}function l(e){if(![].concat(e).every(e=>a.string.isString(e)&&!a.string.isEmpty(e)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}!function(e){e.sync=function(e,t){l(e);const r=g(e,i.default,t);return a.array.flatten(r)},e.stream=function(e,t){l(e);const r=g(e,o.default,t);return a.stream.merge(r)},e.generateTasks=function(e,t){l(e);const r=[].concat(e),n=new s.default(t);return A.generate(r,n)},e.isDynamicPattern=function(e,t){l(e);const r=new s.default(t);return a.pattern.isDynamicPattern(e,r)},e.escapePath=function(e){return l(e),a.path.escape(e)}}(c||(c={})),e.exports=c},80598:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(16777);function n(e,t,r){const A=s(e);if("."in A){return[c(".",e,t,r)]}return a(A,t,r)}function o(e){return A.pattern.getPositivePatterns(e)}function i(e,t){return A.pattern.getNegativePatterns(e).concat(t).map(A.pattern.convertToPositivePattern)}function s(e){return e.reduce((e,t)=>{const r=A.pattern.getBaseDirectory(t);return r in e?e[r].push(t):e[r]=[t],e},{})}function a(e,t,r){return Object.keys(e).map(A=>c(A,e[A],t,r))}function c(e,t,r,n){return{dynamic:n,positive:t,negative:r,base:e,patterns:[].concat(t,r.map(A.pattern.convertToNegativePattern))}}t.generate=function(e,t){const r=o(e),s=i(e,t.ignore),a=r.filter(e=>A.pattern.isStaticPattern(e,t)),c=r.filter(e=>A.pattern.isDynamicPattern(e,t)),g=n(a,s,!1),l=n(c,s,!0);return g.concat(l)},t.convertPatternsToTasks=n,t.getPositivePatterns=o,t.getNegativePatternsAsPositive=i,t.groupPatternsByBaseDirectory=s,t.convertPatternGroupsToTasks=a,t.convertPatternGroupToTask=c},58182:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(82774),n=r(40545);class o extends n.default{constructor(){super(...arguments),this._reader=new A.default(this._settings)}read(e){const t=this._getRootDirectory(e),r=this._getReaderOptions(e),A=[];return new Promise((n,o)=>{const i=this.api(t,e,r);i.once("error",o),i.on("data",e=>A.push(r.transform(e))),i.once("end",()=>n(A))})}api(e,t,r){return t.dynamic?this._reader.dynamic(e,r):this._reader.static(t.patterns,r)}}t.default=o},65989:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(16777),n=r(42585);t.default=class{constructor(e,t){this._settings=e,this._micromatchOptions=t}getFilter(e,t,r){const A=this._getMatcher(t),n=this._getNegativePatternsRe(r);return t=>this._filter(e,t,A,n)}_getMatcher(e){return new n.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){const t=e.filter(A.pattern.isAffectDepthOfReadingPattern);return A.pattern.convertPatternsToRe(t,this._micromatchOptions)}_filter(e,t,r,n){const o=this._getEntryLevel(e,t.path);if(this._isSkippedByDeep(o))return!1;if(this._isSkippedSymbolicLink(t))return!1;const i=A.path.removeLeadingDotSegment(t.path);return!this._isSkippedByPositivePatterns(i,r)&&this._isSkippedByNegativePatterns(i,n)}_isSkippedByDeep(e){return e>=this._settings.deep}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_getEntryLevel(e,t){const r=e.split("/").length;return t.split("/").length-(""===e?0:r)}_isSkippedByPositivePatterns(e,t){return!this._settings.baseNameMatch&&!t.match(e)}_isSkippedByNegativePatterns(e,t){return!A.pattern.matchAny(e,t)}}},37338:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(16777);t.default=class{constructor(e,t){this._settings=e,this._micromatchOptions=t,this.index=new Map}getFilter(e,t){const r=A.pattern.convertPatternsToRe(e,this._micromatchOptions),n=A.pattern.convertPatternsToRe(t,this._micromatchOptions);return e=>this._filter(e,r,n)}_filter(e,t,r){if(this._settings.unique){if(this._isDuplicateEntry(e))return!1;this._createIndexRecord(e)}if(this._onlyFileFilter(e)||this._onlyDirectoryFilter(e))return!1;if(this._isSkippedByAbsoluteNegativePatterns(e,r))return!1;const A=this._settings.baseNameMatch?e.name:e.path;return this._isMatchToPatterns(A,t)&&!this._isMatchToPatterns(e.path,r)}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,t){if(!this._settings.absolute)return!1;const r=A.path.makeAbsolute(this._settings.cwd,e.path);return this._isMatchToPatterns(r,t)}_isMatchToPatterns(e,t){const r=A.path.removeLeadingDotSegment(e);return A.pattern.matchAny(r,t)}}},54345:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(16777);t.default=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return A.errno.isEnoentCodeError(e)||this._settings.suppressErrors}}},34789:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(16777);t.default=class{constructor(e,t,r){this._patterns=e,this._settings=t,this._micromatchOptions=r,this._storage=[],this._fillStorage()}_fillStorage(){const e=A.pattern.expandPatternsWithBraceExpansion(this._patterns);for(const t of e){const e=this._getPatternSegments(t),r=this._splitSegmentsIntoSections(e);this._storage.push({complete:r.length<=1,pattern:t,segments:e,sections:r})}}_getPatternSegments(e){return A.pattern.getPatternParts(e,this._micromatchOptions).map(e=>A.pattern.isDynamicPattern(e,this._settings)?{dynamic:!0,pattern:e,patternRe:A.pattern.makeRe(e,this._micromatchOptions)}:{dynamic:!1,pattern:e})}_splitSegmentsIntoSections(e){return A.array.splitWhen(e,e=>e.dynamic&&A.pattern.hasGlobStar(e.pattern))}}},42585:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(34789);class n extends A.default{match(e){const t=e.split("/"),r=t.length,A=this._storage.filter(e=>!e.complete||e.segments.length>r);for(const e of A){const A=e.sections[0];if(!e.complete&&r>A.length)return!0;if(t.every((t,r)=>{const A=e.segments[r];return!(!A.dynamic||!A.patternRe.test(t))||!A.dynamic&&A.pattern===t}))return!0}return!1}}t.default=n},40545:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(85622),n=r(65989),o=r(37338),i=r(54345),s=r(77541);t.default=class{constructor(e){this._settings=e,this.errorFilter=new i.default(this._settings),this.entryFilter=new o.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new n.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new s.default(this._settings)}_getRootDirectory(e){return A.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){const t="."===e.base?"":e.base;return{basePath:t,pathSegmentSeparator:"/",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(t,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}}},67652:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(92413),n=r(82774),o=r(40545);class i extends o.default{constructor(){super(...arguments),this._reader=new n.default(this._settings)}read(e){const t=this._getRootDirectory(e),r=this._getReaderOptions(e),n=this.api(t,e,r),o=new A.Readable({objectMode:!0,read:()=>{}});return n.once("error",e=>o.emit("error",e)).on("data",e=>o.emit("data",r.transform(e))).once("end",()=>o.emit("end")),o.once("close",()=>n.destroy()),o}api(e,t,r){return t.dynamic?this._reader.dynamic(e,r):this._reader.static(t.patterns,r)}}t.default=i},81340:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(29543),n=r(40545);class o extends n.default{constructor(){super(...arguments),this._reader=new A.default(this._settings)}read(e){const t=this._getRootDirectory(e),r=this._getReaderOptions(e);return this.api(t,e,r).map(r.transform)}api(e,t,r){return t.dynamic?this._reader.dynamic(e,r):this._reader.static(t.patterns,r)}}t.default=o},77541:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(16777);t.default=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let t=e.path;return this._settings.absolute&&(t=A.path.makeAbsolute(this._settings.cwd,t),t=A.path.unixify(t)),this._settings.markDirectories&&e.dirent.isDirectory()&&(t+="/"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:t}):t}}},99458:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(85622),n=r(53403),o=r(16777);t.default=class{constructor(e){this._settings=e,this._fsStatSettings=new n.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return A.resolve(this._settings.cwd,e)}_makeEntry(e,t){const r={name:t,path:t,dirent:o.fs.createDirentFromStats(t,e)};return this._settings.stats&&(r.stats=e),r}_isFatalError(e){return!o.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}}},82774:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(92413),n=r(53403),o=r(72897),i=r(99458);class s extends i.default{constructor(){super(...arguments),this._walkStream=o.walkStream,this._stat=n.stat}dynamic(e,t){return this._walkStream(e,t)}static(e,t){const r=e.map(this._getFullEntryPath,this),n=new A.PassThrough({objectMode:!0});n._write=(A,o,i)=>this._getEntry(r[A],e[A],t).then(e=>{null!==e&&t.entryFilter(e)&&n.push(e),A===r.length-1&&n.end(),i()}).catch(i);for(let e=0;ethis._makeEntry(e,t)).catch(e=>{if(r.errorFilter(e))return null;throw e})}_getStat(e){return new Promise((t,r)=>{this._stat(e,this._fsStatSettings,(e,A)=>null===e?t(A):r(e))})}}t.default=s},29543:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(53403),n=r(72897),o=r(99458);class i extends o.default{constructor(){super(...arguments),this._walkSync=n.walkSync,this._statSync=A.statSync}dynamic(e,t){return this._walkSync(e,t)}static(e,t){const r=[];for(const A of e){const e=this._getFullEntryPath(A),n=this._getEntry(e,A,t);null!==n&&t.entryFilter(n)&&r.push(n)}return r}_getEntry(e,t,r){try{const r=this._getStat(e);return this._makeEntry(r,t)}catch(e){if(r.errorFilter(e))return null;throw e}}_getStat(e){return this._statSync(e,this._fsStatSettings)}}t.default=i},43754:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(35747),n=r(12087).cpus().length;t.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:A.lstat,lstatSync:A.lstatSync,stat:A.stat,statSync:A.statSync,readdir:A.readdir,readdirSync:A.readdirSync};t.default=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,n),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0)}_getValue(e,t){return void 0===e?t:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},t.DEFAULT_FILE_SYSTEM_ADAPTER),e)}}},60919:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.flatten=function(e){return e.reduce((e,t)=>[].concat(e,t),[])},t.splitWhen=function(e,t){const r=[[]];let A=0;for(const n of e)t(n)?(A++,r[A]=[]):r[A].push(n);return r}},35525:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isEnoentCodeError=function(e){return"ENOENT"===e.code}},62524:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});class r{constructor(e,t){this.name=e,this.isBlockDevice=t.isBlockDevice.bind(t),this.isCharacterDevice=t.isCharacterDevice.bind(t),this.isDirectory=t.isDirectory.bind(t),this.isFIFO=t.isFIFO.bind(t),this.isFile=t.isFile.bind(t),this.isSocket=t.isSocket.bind(t),this.isSymbolicLink=t.isSymbolicLink.bind(t)}}t.createDirentFromStats=function(e,t){return new r(e,t)}},16777:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(60919);t.array=A;const n=r(35525);t.errno=n;const o=r(62524);t.fs=o;const i=r(71462);t.path=i;const s=r(14659);t.pattern=s;const a=r(2042);t.stream=a;const c=r(10217);t.string=c},71462:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(85622),n=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\())/g;t.unixify=function(e){return e.replace(/\\/g,"/")},t.makeAbsolute=function(e,t){return A.resolve(e,t)},t.escape=function(e){return e.replace(n,"\\$2")},t.removeLeadingDotSegment=function(e){if("."===e.charAt(0)){const t=e.charAt(1);if("/"===t||"\\"===t)return e.slice(2)}return e}},14659:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(85622),n=r(97098),o=r(2401),i=r(54722),s=/[*?]|^!/,a=/\[.*]/,c=/(?:^|[^!*+?@])\(.*\|.*\)/,g=/[!*+?@]\(.*\)/,l=/{.*(?:,|\.\.).*}/;function u(e,t={}){return!h(e,t)}function h(e,t={}){return!(!1!==t.caseSensitiveMatch&&!e.includes("\\"))||(!!(s.test(e)||a.test(e)||c.test(e))||(!(!1===t.extglob||!g.test(e))||!(!1===t.braceExpansion||!l.test(e))))}function p(e){return e.startsWith("!")&&"("!==e[1]}function d(e){return!p(e)}function C(e){return e.endsWith("/**")}function f(e){return o.braces(e,{expand:!0,nodupes:!0})}function I(e,t){return o.makeRe(e,t)}t.isStaticPattern=u,t.isDynamicPattern=h,t.convertToPositivePattern=function(e){return p(e)?e.slice(1):e},t.convertToNegativePattern=function(e){return"!"+e},t.isNegativePattern=p,t.isPositivePattern=d,t.getNegativePatterns=function(e){return e.filter(p)},t.getPositivePatterns=function(e){return e.filter(d)},t.getBaseDirectory=function(e){return n(e,{flipBackslashes:!1})},t.hasGlobStar=function(e){return e.includes("**")},t.endsWithSlashGlobStar=C,t.isAffectDepthOfReadingPattern=function(e){const t=A.basename(e);return C(e)||u(t)},t.expandPatternsWithBraceExpansion=function(e){return e.reduce((e,t)=>e.concat(f(t)),[])},t.expandBraceExpansion=f,t.getPatternParts=function(e,t){const r=i.scan(e,Object.assign(Object.assign({},t),{parts:!0}));return 0===r.parts.length?[e]:r.parts},t.makeRe=I,t.convertPatternsToRe=function(e,t){return e.map(e=>I(e,t))},t.matchAny=function(e,t){return t.some(t=>t.test(e))}},2042:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(55598);function n(e){e.forEach(e=>e.emit("close"))}t.merge=function(e){const t=A(e);return e.forEach(e=>{e.once("error",e=>t.emit("error",e))}),t.once("close",()=>n(e)),t.once("end",()=>n(e)),t}},10217:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isString=function(e){return"string"==typeof e},t.isEmpty=function(e){return""===e}},98360:(e,t,r)=>{"use strict";var A=r(2383);function n(){}function o(){this.value=null,this.callback=n,this.next=null,this.release=n,this.context=null;var e=this;this.worked=function(t,r){var A=e.callback;e.value=null,e.callback=n,A.call(e.context,t,r),e.release(e)}}e.exports=function(e,t,r){"function"==typeof e&&(r=t,t=e,e=null);var i=A(o),s=null,a=null,c=0,g={push:function(r,A){var o=i.get();o.context=e,o.release=l,o.value=r,o.callback=A||n,c===g.concurrency||g.paused?a?(a.next=o,a=o):(s=o,a=o,g.saturated()):(c++,t.call(e,o.value,o.worked))},drain:n,saturated:n,pause:function(){g.paused=!0},paused:!1,concurrency:r,running:function(){return c},resume:function(){if(!g.paused)return;g.paused=!1;for(var e=0;e{"use strict";class A{constructor(e,t,r){this.__specs=e||{},Object.keys(this.__specs).forEach(e=>{if("string"==typeof this.__specs[e]){const t=this.__specs[e],r=this.__specs[t];if(!r)throw new Error(`Alias refers to invalid key: ${t} -> ${e}`);{const A=r.aliases||[];A.push(e,t),r.aliases=[...new Set(A)],this.__specs[e]=r}}}),this.__opts=t||{},this.__providers=s(r.filter(e=>null!=e&&"object"==typeof e)),this.__isFiggyPudding=!0}get(e){return n(this,e,!0)}get[Symbol.toStringTag](){return"FiggyPudding"}forEach(e,t=this){for(let[r,A]of this.entries())e.call(t,A,r,this)}toJSON(){const e={};return this.forEach((t,r)=>{e[r]=t}),e}*entries(e){for(let e of Object.keys(this.__specs))yield[e,this.get(e)];const t=e||this.__opts.other;if(t){const e=new Set;for(let r of this.__providers){const A=r.entries?r.entries(t):a(r);for(let[r,n]of A)t(r)&&!e.has(r)&&(e.add(r),yield[r,n])}}}*[Symbol.iterator](){for(let[e,t]of this.entries())yield[e,t]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new A(this.__specs,this.__opts,s(this.__providers).concat(e)),i)}}try{const e=r(31669);A.prototype[e.inspect.custom]=function(t,r){return this[Symbol.toStringTag]+" "+e.inspect(this.toJSON(),r)}}catch(e){}function n(e,t,r){let A=e.__specs[t];if(!r||A||e.__opts.other&&e.__opts.other(t)){let r;A||(A={});for(let n of e.__providers){if(r=o(t,n),void 0===r&&A.aliases&&A.aliases.length)for(let e of A.aliases)if(e!==t&&(r=o(e,n),void 0!==r))break;if(void 0!==r)break}return void 0===r&&void 0!==A.default?"function"==typeof A.default?A.default(e):A.default:r}!function(e){throw Object.assign(new Error("invalid config key requested: "+e),{code:"EBADKEY"})}(t)}function o(e,t){let r;return r=t.__isFiggyPudding?n(t,e,!1):"function"==typeof t.get?t.get(e):t[e],r}const i={has:(e,t)=>t in e.__specs&&void 0!==n(e,t,!1),ownKeys:e=>Object.keys(e.__specs),get:(e,t)=>"symbol"==typeof t||"__"===t.slice(0,2)||t in A.prototype?e[t]:e.get(t),set(e,t,r){if("symbol"==typeof t||"__"===t.slice(0,2))return e[t]=r,!0;throw new Error("figgyPudding options cannot be modified. Use .concat() instead.")},deleteProperty(){throw new Error("figgyPudding options cannot be deleted. Use .concat() and shadow them instead.")}};function s(e){const t=[];return e.forEach(e=>t.unshift(e)),t}function a(e){return Object.keys(e).map(t=>[t,e[t]])}e.exports=function(e,t){return function(...r){return new Proxy(new A(e,t,r),i)}}},52169:(e,t,r)=>{"use strict"; +/*! + * fill-range + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Licensed under the MIT License. + */const A=r(31669),n=r(84615),o=e=>null!==e&&"object"==typeof e&&!Array.isArray(e),i=e=>"number"==typeof e||"string"==typeof e&&""!==e,s=e=>Number.isInteger(+e),a=e=>{let t=""+e,r=-1;if("-"===t[0]&&(t=t.slice(1)),"0"===t)return!1;for(;"0"===t[++r];);return r>0},c=(e,t,r)=>{if(t>0){let r="-"===e[0]?"-":"";r&&(e=e.slice(1)),e=r+e.padStart(r?t-1:t,"0")}return!1===r?String(e):e},g=(e,t)=>{let r="-"===e[0]?"-":"";for(r&&(e=e.slice(1),t--);e.length{if(r)return n(e,t,{wrap:!1,...A});let o=String.fromCharCode(e);return e===t?o:`[${o}-${String.fromCharCode(t)}]`},u=(e,t,r)=>{if(Array.isArray(e)){let t=!0===r.wrap,A=r.capture?"":"?:";return t?`(${A}${e.join("|")})`:e.join("|")}return n(e,t,r)},h=(...e)=>new RangeError("Invalid range arguments: "+A.inspect(...e)),p=(e,t,r)=>{if(!0===r.strictRanges)throw h([e,t]);return[]},d=(e,t,r=1,A={})=>{let n=Number(e),o=Number(t);if(!Number.isInteger(n)||!Number.isInteger(o)){if(!0===A.strictRanges)throw h([e,t]);return[]}0===n&&(n=0),0===o&&(o=0);let i=n>o,s=String(e),p=String(t),d=String(r);r=Math.max(Math.abs(r),1);let C=a(s)||a(p)||a(d),f=C?Math.max(s.length,p.length,d.length):0,I=!1===C&&!1===((e,t,r)=>"string"==typeof e||"string"==typeof t||!0===r.stringify)(e,t,A),E=A.transform||(e=>t=>!0===e?Number(t):String(t))(I);if(A.toRegex&&1===r)return l(g(e,f),g(t,f),!0,A);let B={negatives:[],positives:[]},y=[],m=0;for(;i?n>=o:n<=o;)!0===A.toRegex&&r>1?B[(w=n)<0?"negatives":"positives"].push(Math.abs(w)):y.push(c(E(n,m),f,I)),n=i?n-r:n+r,m++;var w;return!0===A.toRegex?r>1?((e,t)=>{e.negatives.sort((e,t)=>et?1:0),e.positives.sort((e,t)=>et?1:0);let r,A=t.capture?"":"?:",n="",o="";return e.positives.length&&(n=e.positives.join("|")),e.negatives.length&&(o=`-(${A}${e.negatives.join("|")})`),r=n&&o?`${n}|${o}`:n||o,t.wrap?`(${A}${r})`:r})(B,A):u(y,null,{wrap:!1,...A}):y},C=(e,t,r,A={})=>{if(null==t&&i(e))return[e];if(!i(e)||!i(t))return p(e,t,A);if("function"==typeof r)return C(e,t,1,{transform:r});if(o(r))return C(e,t,0,r);let n={...A};return!0===n.capture&&(n.wrap=!0),r=r||n.step||1,s(r)?s(e)&&s(t)?d(e,t,r,n):((e,t,r=1,A={})=>{if(!s(e)&&e.length>1||!s(t)&&t.length>1)return p(e,t,A);let n=A.transform||(e=>String.fromCharCode(e)),o=(""+e).charCodeAt(0),i=(""+t).charCodeAt(0),a=o>i,c=Math.min(o,i),g=Math.max(o,i);if(A.toRegex&&1===r)return l(c,g,!1,A);let h=[],d=0;for(;a?o>=i:o<=i;)h.push(n(o,d)),o=a?o-r:o+r,d++;return!0===A.toRegex?u(h,null,{wrap:!1,options:A}):h})(e,t,Math.max(Math.abs(r),1),n):null==r||o(r)?C(e,t,1,r):((e,t)=>{if(!0===t.strictRanges)throw new TypeError(`Expected step "${e}" to be a number`);return[]})(r,n)};e.exports=C},50683:e=>{e.exports=function(e){return[...e].reduce((e,[t,r])=>(e[t]=r,e),{})}},13302:(e,t,r)=>{e.exports=r(35747).constants||r(27619)},72137:(e,t,r)=>{"use strict";const{PassThrough:A}=r(92413);e.exports=e=>{e={...e};const{array:t}=e;let{encoding:r}=e;const n="buffer"===r;let o=!1;t?o=!(r||n):r=r||"utf8",n&&(r=null);const i=new A({objectMode:o});r&&i.setEncoding(r);let s=0;const a=[];return i.on("data",e=>{a.push(e),o?s=a.length:s+=e.length}),i.getBufferedValue=()=>t?a:n?Buffer.concat(a,s):a.join(""),i.getBufferedLength=()=>s,i}},58764:(e,t,r)=>{"use strict";const A=r(50372),n=r(72137);class o extends Error{constructor(){super("maxBuffer exceeded"),this.name="MaxBufferError"}}async function i(e,t){if(!e)return Promise.reject(new Error("Expected a stream"));t={maxBuffer:1/0,...t};const{maxBuffer:r}=t;let i;return await new Promise((s,a)=>{const c=e=>{e&&(e.bufferedData=i.getBufferedValue()),a(e)};i=A(e,n(t),e=>{e?c(e):s()}),i.on("data",()=>{i.getBufferedLength()>r&&c(new o)})}),i.getBufferedValue()}e.exports=i,e.exports.default=i,e.exports.buffer=(e,t)=>i(e,{...t,encoding:"buffer"}),e.exports.array=(e,t)=>i(e,{...t,array:!0}),e.exports.MaxBufferError=o},97098:(e,t,r)=>{"use strict";var A=r(18193),n=r(85622).posix.dirname,o="win32"===r(12087).platform(),i=/\\/g,s=/[\{\[].*[\/]*.*[\}\]]$/,a=/(^|[^\\])([\{\[]|\([^\)]+$)/,c=/\\([\*\?\|\[\]\(\)\{\}])/g;e.exports=function(e,t){Object.assign({flipBackslashes:!0},t).flipBackslashes&&o&&e.indexOf("/")<0&&(e=e.replace(i,"/")),s.test(e)&&(e+="/"),e+="a";do{e=n(e)}while(A(e)||a.test(e));return e.replace(c,"$1")}},90734:(e,t,r)=>{"use strict";const{promisify:A}=r(31669),n=r(35747),o=r(85622),i=r(19347),s=r(46458),a=r(17234),c=["**/node_modules/**","**/flow-typed/**","**/coverage/**","**/.git"],g=A(n.readFile),l=(e,t)=>{const r=a(o.relative(t.cwd,o.dirname(t.fileName)));return e.split(/\r?\n/).filter(Boolean).filter(e=>!e.startsWith("#")).map((e=>t=>t.startsWith("!")?"!"+o.posix.join(e,t.slice(1)):o.posix.join(e,t))(r))},u=e=>e.reduce((e,t)=>(e.add(l(t.content,{cwd:t.cwd,fileName:t.filePath})),e),s()),h=(e,t)=>r=>e.ignores(a(o.relative(t,((e,t)=>{if(e=a(e),o.isAbsolute(t)){if(t.startsWith(e))return t;throw new Error(`Path ${t} is not in cwd ${e}`)}return o.join(e,t)})(t,r)))),p=({ignore:e=[],cwd:t=a(process.cwd())}={})=>({ignore:e,cwd:t});e.exports=async e=>{e=p(e);const t=await i("**/.gitignore",{ignore:c.concat(e.ignore),cwd:e.cwd}),r=await Promise.all(t.map(t=>(async(e,t)=>{const r=o.join(t,e);return{cwd:t,filePath:r,content:await g(r,"utf8")}})(t,e.cwd))),A=u(r);return h(A,e.cwd)},e.exports.sync=e=>{e=p(e);const t=i.sync("**/.gitignore",{ignore:c.concat(e.ignore),cwd:e.cwd}).map(t=>((e,t)=>{const r=o.join(t,e);return{cwd:t,filePath:r,content:n.readFileSync(r,"utf8")}})(t,e.cwd)),r=u(t);return h(r,e.cwd)}},58592:(e,t,r)=>{"use strict";const A=r(35747),n=r(39920),o=r(55598),i=r(19347),s=r(66241),a=r(90734),{FilterStream:c,UniqueStream:g}=r(66160),l=()=>!1,u=e=>"!"===e[0],h=(e,t)=>{(e=>{if(!e.every(e=>"string"==typeof e))throw new TypeError("Patterns must be a string or an array of strings")})(e=n([].concat(e))),((e={})=>{if(!e.cwd)return;let t;try{t=A.statSync(e.cwd)}catch(e){return}if(!t.isDirectory())throw new Error("The `cwd` option must be a path to a directory")})(t);const r=[];t={ignore:[],expandDirectories:!0,...t};for(const[A,n]of e.entries()){if(u(n))continue;const o=e.slice(A).filter(u).map(e=>e.slice(1)),i={...t,ignore:t.ignore.concat(o)};r.push({pattern:n,options:i})}return r},p=(e,t)=>e.options.expandDirectories?((e,t)=>{let r={};return e.options.cwd&&(r.cwd=e.options.cwd),Array.isArray(e.options.expandDirectories)?r={...r,files:e.options.expandDirectories}:"object"==typeof e.options.expandDirectories&&(r={...r,...e.options.expandDirectories}),t(e.pattern,r)})(e,t):[e.pattern],d=e=>e&&e.gitignore?a.sync({cwd:e.cwd,ignore:e.ignore}):l,C=e=>t=>{const{options:r}=e;return r.ignore&&Array.isArray(r.ignore)&&r.expandDirectories&&(r.ignore=s.sync(r.ignore)),{pattern:t,options:r}};e.exports=async(e,t)=>{const r=h(e,t),[o,c]=await Promise.all([(async()=>t&&t.gitignore?a({cwd:t.cwd,ignore:t.ignore}):l)(),(async()=>{const e=await Promise.all(r.map(async e=>{const t=await p(e,s);return Promise.all(t.map(C(e)))}));return n(...e)})()]),g=await Promise.all(c.map(e=>i(e.pattern,e.options)));return n(...g).filter(e=>{return!o((t=e,t.stats instanceof A.Stats?t.path:t));var t})},e.exports.sync=(e,t)=>{const r=h(e,t).reduce((e,t)=>{const r=p(t,s.sync).map(C(t));return e.concat(r)},[]),A=d(t);return r.reduce((e,t)=>n(e,i.sync(t.pattern,t.options)),[]).filter(e=>!A(e))},e.exports.stream=(e,t)=>{const r=h(e,t).reduce((e,t)=>{const r=p(t,s.sync).map(C(t));return e.concat(r)},[]),A=d(t),n=new c(e=>!A(e)),a=new g;return o(r.map(e=>i.stream(e.pattern,e.options))).pipe(n).pipe(a)},e.exports.generateGlobTasks=h,e.exports.hasMagic=(e,t)=>[].concat(e).some(e=>i.isDynamicPattern(e,t)),e.exports.gitignore=a},66160:(e,t,r)=>{"use strict";const{Transform:A}=r(92413);class n extends A{constructor(){super({objectMode:!0})}}e.exports={FilterStream:class extends n{constructor(e){super(),this._filter=e}_transform(e,t,r){this._filter(e)&&this.push(e),r()}},UniqueStream:class extends n{constructor(){super(),this._pushed=new Set}_transform(e,t,r){this._pushed.has(e)||(this.push(e),this._pushed.add(e)),r()}}}},93576:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(14756);t.default=function(e,...t){const r=(async()=>{if(e instanceof A.RequestError)try{for(const r of t)if(r)for(const t of r)e=await t(e)}catch(t){e=t}throw e})(),n=()=>r;return r.json=n,r.text=n,r.buffer=n,r.on=n,r}},81588:function(e,t,r){"use strict";var A=this&&this.__createBinding||(Object.create?function(e,t,r,A){void 0===A&&(A=r),Object.defineProperty(e,A,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,A){void 0===A&&(A=r),e[A]=t[r]}),n=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||A(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0});const o=r(28614),i=r(7966),s=r(59351),a=r(14756),c=r(54718),g=r(9048),l=r(51743),u=r(57854),h=r(38206),p=["request","response","redirect","uploadProgress","downloadProgress"];t.default=function e(t){let r,A;const n=new o.EventEmitter,d=new s((o,s,C)=>{const f=I=>{const E=new g.default(void 0,t);E.retryCount=I,E._noPipe=!0,C(()=>E.destroy()),C.shouldReject=!1,C(()=>s(new a.CancelError(E))),r=E,E.once("response",async t=>{var r;if(t.retryCount=I,t.request.aborted)return;let n;try{n=await u.default(E),t.rawBody=n}catch(e){return}if(E._isAboutToError)return;const i=(null!==(r=t.headers["content-encoding"])&&void 0!==r?r:"").toLowerCase(),s=["gzip","deflate","br"].includes(i),{options:l}=E;if(s&&!l.decompress)t.body=n;else try{t.body=c.default(t,l.responseType,l.parseJson,l.encoding)}catch(e){if(t.body=n.toString(),h.isResponseOk(t))return void E._beforeError(e)}try{for(const[r,A]of l.hooks.afterResponse.entries())t=await A(t,async t=>{const A=g.default.normalizeArguments(void 0,{...t,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},l);A.hooks.afterResponse=A.hooks.afterResponse.slice(0,r);for(const e of A.hooks.beforeRetry)await e(A);const n=e(A);return C(()=>{n.catch(()=>{}),n.cancel()}),n})}catch(e){return void E._beforeError(new a.RequestError(e.message,e,E))}h.isResponseOk(t)?(A=t,o(E.options.resolveBodyOnly?t.body:t)):E._beforeError(new a.HTTPError(t))});const B=e=>{if(d.isCanceled)return;const{options:t}=E;if(e instanceof a.HTTPError&&!t.throwHttpErrors){const{response:t}=e;o(E.options.resolveBodyOnly?t.body:t)}else s(e)};E.once("error",B),E.once("retry",(e,t)=>{var r;i.default.nodeStream(null===(r=t.request)||void 0===r?void 0:r.options.body)?B(t):f(e)}),l.default(E,n,p)};f(0)});d.on=(e,t)=>(n.on(e,t),d);const C=e=>{const t=(async()=>{await d;const{options:t}=A.request;return c.default(A,e,t.parseJson,t.encoding)})();return Object.defineProperties(t,Object.getOwnPropertyDescriptors(d)),t};return d.json=()=>{const{headers:e}=r.options;return r.writableFinished||void 0!==e.accept||(e.accept="application/json"),C("json")},d.buffer=()=>C("buffer"),d.text=()=>C("text"),d},n(r(14756),t)},41514:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(7966);t.default=(e,t)=>{if(A.default.null_(e.encoding))throw new TypeError("To get a Buffer, set `options.responseType` to `buffer` instead");A.assert.any([A.default.string,A.default.undefined],e.encoding),A.assert.any([A.default.boolean,A.default.undefined],e.resolveBodyOnly),A.assert.any([A.default.boolean,A.default.undefined],e.methodRewriting),A.assert.any([A.default.boolean,A.default.undefined],e.isStream),A.assert.any([A.default.string,A.default.undefined],e.responseType),void 0===e.responseType&&(e.responseType="text");const{retry:r}=e;if(e.retry=t?{...t.retry}:{calculateDelay:e=>e.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},A.default.object(r)?(e.retry={...e.retry,...r},e.retry.methods=[...new Set(e.retry.methods.map(e=>e.toUpperCase()))],e.retry.statusCodes=[...new Set(e.retry.statusCodes)],e.retry.errorCodes=[...new Set(e.retry.errorCodes)]):A.default.number(r)&&(e.retry.limit=r),A.default.undefined(e.retry.maxRetryAfter)&&(e.retry.maxRetryAfter=Math.min(...[e.timeout.request,e.timeout.connect].filter(A.default.number))),A.default.object(e.pagination)){t&&(e.pagination={...t.pagination,...e.pagination});const{pagination:r}=e;if(!A.default.function_(r.transform))throw new Error("`options.pagination.transform` must be implemented");if(!A.default.function_(r.shouldContinue))throw new Error("`options.pagination.shouldContinue` must be implemented");if(!A.default.function_(r.filter))throw new TypeError("`options.pagination.filter` must be implemented");if(!A.default.function_(r.paginate))throw new Error("`options.pagination.paginate` must be implemented")}return"json"===e.responseType&&void 0===e.headers.accept&&(e.headers.accept="application/json"),e}},54718:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(14756);t.default=(e,t,r,n)=>{const{rawBody:o}=e;try{if("text"===t)return o.toString(n);if("json"===t)return 0===o.length?"":r(o.toString());if("buffer"===t)return o;throw new A.ParseError({message:`Unknown body type '${t}'`,name:"Error"},e)}catch(t){throw new A.ParseError(t,e)}}},14756:function(e,t,r){"use strict";var A=this&&this.__createBinding||(Object.create?function(e,t,r,A){void 0===A&&(A=r),Object.defineProperty(e,A,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,A){void 0===A&&(A=r),e[A]=t[r]}),n=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||A(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),t.CancelError=t.ParseError=void 0;const o=r(9048);class i extends o.RequestError{constructor(e,t){const{options:r}=t.request;super(`${e.message} in "${r.url.toString()}"`,e,t.request),this.name="ParseError"}}t.ParseError=i;class s extends o.RequestError{constructor(e){super("Promise was canceled",{},e),this.name="CancelError"}get isCanceled(){return!0}}t.CancelError=s,n(r(9048),t)},53843:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.retryAfterStatusCodes=void 0,t.retryAfterStatusCodes=new Set([413,429,503]);t.default=({attemptCount:e,retryOptions:t,error:r,retryAfter:A})=>{if(e>t.limit)return 0;const n=t.methods.includes(r.options.method),o=t.errorCodes.includes(r.code),i=r.response&&t.statusCodes.includes(r.response.statusCode);if(!n||!o&&!i)return 0;if(r.response){if(A)return void 0===t.maxRetryAfter||A>t.maxRetryAfter?0:A;if(413===r.response.statusCode)return 0}return 2**(e-1)*1e3+100*Math.random()}},9048:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.UnsupportedProtocolError=t.ReadError=t.TimeoutError=t.UploadError=t.CacheError=t.HTTPError=t.MaxRedirectsError=t.RequestError=t.setNonEnumerableProperties=t.knownHookEvents=t.withoutBody=t.kIsNormalizedAlready=void 0;const A=r(31669),n=r(92413),o=r(35747),i=r(78835),s=r(98605),a=r(98605),c=r(57211),g=r(98298),l=r(30093),u=r(11200),h=r(93868),p=r(92353),d=r(55737),C=r(7966),f=r(78586),I=r(2920),E=r(51743),B=r(44947),y=r(50116),m=r(82524),w=r(85551),Q=r(57854),D=r(11338),b=r(38206),v=r(54595),S=r(41514),k=r(53843),N=new l.default,F=Symbol("request"),K=Symbol("response"),M=Symbol("responseSize"),R=Symbol("downloadedSize"),x=Symbol("bodySize"),L=Symbol("uploadedSize"),P=Symbol("serverResponsesPiped"),O=Symbol("unproxyEvents"),U=Symbol("isFromCache"),T=Symbol("cancelTimeouts"),j=Symbol("startedReading"),Y=Symbol("stopReading"),G=Symbol("triggerRead"),H=Symbol("body"),J=Symbol("jobs"),q=Symbol("originalResponse"),z=Symbol("retryTimeout");t.kIsNormalizedAlready=Symbol("isNormalizedAlready");const W=C.default.string(process.versions.brotli);t.withoutBody=new Set(["GET","HEAD"]),t.knownHookEvents=["init","beforeRequest","beforeRedirect","beforeError","beforeRetry","afterResponse"];const V=new w.default,X=new Set([300,301,302,303,304,307,308]),_=["context","body","json","form"];t.setNonEnumerableProperties=(e,t)=>{const r={};for(const t of e)if(t)for(const e of _)e in t&&(r[e]={writable:!0,configurable:!0,enumerable:!1,value:t[e]});Object.defineProperties(t,r)};class Z extends Error{constructor(e,t,r){var A;if(super(e),Error.captureStackTrace(this,this.constructor),this.name="RequestError",this.code=t.code,r instanceof se?(Object.defineProperty(this,"request",{enumerable:!1,value:r}),Object.defineProperty(this,"response",{enumerable:!1,value:r[K]}),Object.defineProperty(this,"options",{enumerable:!1,value:r.options})):Object.defineProperty(this,"options",{enumerable:!1,value:r}),this.timings=null===(A=this.request)||void 0===A?void 0:A.timings,!C.default.undefined(t.stack)){const e=this.stack.indexOf(this.message)+this.message.length,r=this.stack.slice(e).split("\n").reverse(),A=t.stack.slice(t.stack.indexOf(t.message)+t.message.length).split("\n").reverse();for(;0!==A.length&&A[0]===r[0];)r.shift();this.stack=`${this.stack.slice(0,e)}${r.reverse().join("\n")}${A.reverse().join("\n")}`}}}t.RequestError=Z;class $ extends Z{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name="MaxRedirectsError"}}t.MaxRedirectsError=$;class ee extends Z{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name="HTTPError"}}t.HTTPError=ee;class te extends Z{constructor(e,t){super(e.message,e,t),this.name="CacheError"}}t.CacheError=te;class re extends Z{constructor(e,t){super(e.message,e,t),this.name="UploadError"}}t.UploadError=re;class Ae extends Z{constructor(e,t,r){super(e.message,e,r),this.name="TimeoutError",this.event=e.event,this.timings=t}}t.TimeoutError=Ae;class ne extends Z{constructor(e,t){super(e.message,e,t),this.name="ReadError"}}t.ReadError=ne;class oe extends Z{constructor(e){super(`Unsupported protocol "${e.url.protocol}"`,{},e),this.name="UnsupportedProtocolError"}}t.UnsupportedProtocolError=oe;const ie=["socket","connect","continue","information","upgrade","timeout"];class se extends n.Duplex{constructor(e,r={},A){super({autoDestroy:!1,highWaterMark:0}),this[R]=0,this[L]=0,this.requestInitialized=!1,this[P]=new Set,this.redirects=[],this[Y]=!1,this[G]=!1,this[J]=[],this.retryCount=0,this._progressCallbacks=[];const n=()=>this._unlockWrite(),i=()=>this._lockWrite();this.on("pipe",e=>{e.prependListener("data",n),e.on("data",i),e.prependListener("end",n),e.on("end",i)}),this.on("unpipe",e=>{e.off("data",n),e.off("data",i),e.off("end",n),e.off("end",i)}),this.on("pipe",e=>{e instanceof a.IncomingMessage&&(this.options.headers={...e.headers,...this.options.headers})});const{json:s,body:c,form:g}=r;if((s||c||g)&&this._lockWrite(),t.kIsNormalizedAlready in r)this.options=r;else try{this.options=this.constructor.normalizeArguments(e,r,A)}catch(e){return C.default.nodeStream(r.body)&&r.body.destroy(),void this.destroy(e)}(async()=>{var e;try{this.options.body instanceof o.ReadStream&&await(async e=>new Promise((t,r)=>{const A=e=>{r(e)};e.pending||t(),e.once("error",A),e.once("ready",()=>{e.off("error",A),t()})}))(this.options.body);const{url:t}=this.options;if(!t)throw new TypeError("Missing `url` property");if(this.requestUrl=t.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed)return void(null===(e=this[F])||void 0===e||e.destroy());for(const e of this[J])e();this[J].length=0,this.requestInitialized=!0}catch(e){if(e instanceof Z)return void this._beforeError(e);this.destroyed||this.destroy(e)}})()}static normalizeArguments(e,r,n){var o,s,a,c,g;const l=r;if(C.default.object(e)&&!C.default.urlInstance(e))r={...n,...e,...r};else{if(e&&r&&void 0!==r.url)throw new TypeError("The `url` option is mutually exclusive with the `input` argument");r={...n,...r},void 0!==e&&(r.url=e),C.default.urlInstance(r.url)&&(r.url=new i.URL(r.url.toString()))}if(!1===r.cache&&(r.cache=void 0),!1===r.dnsCache&&(r.dnsCache=void 0),C.assert.any([C.default.string,C.default.undefined],r.method),C.assert.any([C.default.object,C.default.undefined],r.headers),C.assert.any([C.default.string,C.default.urlInstance,C.default.undefined],r.prefixUrl),C.assert.any([C.default.object,C.default.undefined],r.cookieJar),C.assert.any([C.default.object,C.default.string,C.default.undefined],r.searchParams),C.assert.any([C.default.object,C.default.string,C.default.undefined],r.cache),C.assert.any([C.default.object,C.default.number,C.default.undefined],r.timeout),C.assert.any([C.default.object,C.default.undefined],r.context),C.assert.any([C.default.object,C.default.undefined],r.hooks),C.assert.any([C.default.boolean,C.default.undefined],r.decompress),C.assert.any([C.default.boolean,C.default.undefined],r.ignoreInvalidCookies),C.assert.any([C.default.boolean,C.default.undefined],r.followRedirect),C.assert.any([C.default.number,C.default.undefined],r.maxRedirects),C.assert.any([C.default.boolean,C.default.undefined],r.throwHttpErrors),C.assert.any([C.default.boolean,C.default.undefined],r.http2),C.assert.any([C.default.boolean,C.default.undefined],r.allowGetBody),C.assert.any([C.default.string,C.default.undefined],r.localAddress),C.assert.any([D.isDnsLookupIpVersion,C.default.undefined],r.dnsLookupIpVersion),C.assert.any([C.default.object,C.default.undefined],r.https),C.assert.any([C.default.boolean,C.default.undefined],r.rejectUnauthorized),r.https&&(C.assert.any([C.default.boolean,C.default.undefined],r.https.rejectUnauthorized),C.assert.any([C.default.function_,C.default.undefined],r.https.checkServerIdentity),C.assert.any([C.default.string,C.default.object,C.default.array,C.default.undefined],r.https.certificateAuthority),C.assert.any([C.default.string,C.default.object,C.default.array,C.default.undefined],r.https.key),C.assert.any([C.default.string,C.default.object,C.default.array,C.default.undefined],r.https.certificate),C.assert.any([C.default.string,C.default.undefined],r.https.passphrase),C.assert.any([C.default.string,C.default.buffer,C.default.array,C.default.undefined],r.https.pfx)),C.assert.any([C.default.object,C.default.undefined],r.cacheOptions),C.default.string(r.method)?r.method=r.method.toUpperCase():r.method="GET",r.headers===(null==n?void 0:n.headers)?r.headers={...r.headers}:r.headers=d({...null==n?void 0:n.headers,...r.headers}),"slashes"in r)throw new TypeError("The legacy `url.Url` has been deprecated. Use `URL` instead.");if("auth"in r)throw new TypeError("Parameter `auth` is deprecated. Use `username` / `password` instead.");if("searchParams"in r&&r.searchParams&&r.searchParams!==(null==n?void 0:n.searchParams)){let e;if(C.default.string(r.searchParams)||r.searchParams instanceof i.URLSearchParams)e=new i.URLSearchParams(r.searchParams);else{!function(e){for(const t in e){const r=e[t];if(!(C.default.string(r)||C.default.number(r)||C.default.boolean(r)||C.default.null_(r)||C.default.undefined(r)))throw new TypeError(`The \`searchParams\` value '${String(r)}' must be a string, number, boolean or null`)}}(r.searchParams),e=new i.URLSearchParams;for(const t in r.searchParams){const A=r.searchParams[t];null===A?e.append(t,""):void 0!==A&&e.append(t,A)}}null===(o=null==n?void 0:n.searchParams)||void 0===o||o.forEach((t,r)=>{e.has(r)||e.append(r,t)}),r.searchParams=e}if(r.username=null!==(s=r.username)&&void 0!==s?s:"",r.password=null!==(a=r.password)&&void 0!==a?a:"",C.default.undefined(r.prefixUrl)?r.prefixUrl=null!==(c=null==n?void 0:n.prefixUrl)&&void 0!==c?c:"":(r.prefixUrl=r.prefixUrl.toString(),""===r.prefixUrl||r.prefixUrl.endsWith("/")||(r.prefixUrl+="/")),C.default.string(r.url)){if(r.url.startsWith("/"))throw new Error("`input` must not start with a slash when using `prefixUrl`");r.url=m.default(r.prefixUrl+r.url,r)}else(C.default.undefined(r.url)&&""!==r.prefixUrl||r.protocol)&&(r.url=m.default(r.prefixUrl,r));if(r.url){"port"in r&&delete r.port;let{prefixUrl:e}=r;Object.defineProperty(r,"prefixUrl",{set:t=>{const A=r.url;if(!A.href.startsWith(t))throw new Error(`Cannot change \`prefixUrl\` from ${e} to ${t}: ${A.href}`);r.url=new i.URL(t+A.href.slice(e.length)),e=t},get:()=>e});let{protocol:t}=r.url;if("unix:"===t&&(t="http:",r.url=new i.URL(`http://unix${r.url.pathname}${r.url.search}`)),r.searchParams&&(r.url.search=r.searchParams.toString()),"http:"!==t&&"https:"!==t)throw new oe(r);""===r.username?r.username=r.url.username:r.url.username=r.username,""===r.password?r.password=r.url.password:r.url.password=r.password}const{cookieJar:h}=r;if(h){let{setCookie:e,getCookieString:t}=h;C.assert.function_(e),C.assert.function_(t),4===e.length&&0===t.length&&(e=A.promisify(e.bind(r.cookieJar)),t=A.promisify(t.bind(r.cookieJar)),r.cookieJar={setCookie:e,getCookieString:t})}const{cache:p}=r;if(p&&(V.has(p)||V.set(p,new u((e,t)=>{const r=e[F](e,t);return C.default.promise(r)&&(r.once=(e,t)=>{if("error"===e)r.catch(t);else{if("abort"!==e)throw new Error("Unknown HTTP2 promise event: "+e);(async()=>{try{(await r).once("abort",t)}catch(e){}})()}return r}),r},p))),r.cacheOptions={...r.cacheOptions},!0===r.dnsCache)r.dnsCache=N;else if(!C.default.undefined(r.dnsCache)&&!r.dnsCache.lookup)throw new TypeError("Parameter `dnsCache` must be a CacheableLookup instance or a boolean, got "+C.default(r.dnsCache));C.default.number(r.timeout)?r.timeout={request:r.timeout}:n&&r.timeout!==n.timeout?r.timeout={...n.timeout,...r.timeout}:r.timeout={...r.timeout},r.context||(r.context={});const f=r.hooks===(null==n?void 0:n.hooks);r.hooks={...r.hooks};for(const e of t.knownHookEvents)if(e in r.hooks){if(!C.default.array(r.hooks[e]))throw new TypeError(`Parameter \`${e}\` must be an Array, got ${C.default(r.hooks[e])}`);r.hooks[e]=[...r.hooks[e]]}else r.hooks[e]=[];if(n&&!f)for(const e of t.knownHookEvents){0!==n.hooks[e].length&&(r.hooks[e]=[...n.hooks[e],...r.hooks[e]])}if("family"in r&&v.default('"options.family" was never documented, please use "options.dnsLookupIpVersion"'),(null==n?void 0:n.https)&&(r.https={...n.https,...r.https}),"rejectUnauthorized"in r&&v.default('"options.rejectUnauthorized" is now deprecated, please use "options.https.rejectUnauthorized"'),"checkServerIdentity"in r&&v.default('"options.checkServerIdentity" was never documented, please use "options.https.checkServerIdentity"'),"ca"in r&&v.default('"options.ca" was never documented, please use "options.https.certificateAuthority"'),"key"in r&&v.default('"options.key" was never documented, please use "options.https.key"'),"cert"in r&&v.default('"options.cert" was never documented, please use "options.https.certificate"'),"passphrase"in r&&v.default('"options.passphrase" was never documented, please use "options.https.passphrase"'),"pfx"in r&&v.default('"options.pfx" was never documented, please use "options.https.pfx"'),"followRedirects"in r)throw new TypeError("The `followRedirects` option does not exist. Use `followRedirect` instead.");if(r.agent)for(const e in r.agent)if("http"!==e&&"https"!==e&&"http2"!==e)throw new TypeError(`Expected the \`options.agent\` properties to be \`http\`, \`https\` or \`http2\`, got \`${e}\``);return r.maxRedirects=null!==(g=r.maxRedirects)&&void 0!==g?g:0,t.setNonEnumerableProperties([n,l],r),S.default(r,n)}_lockWrite(){const e=()=>{throw new TypeError("The payload has been already provided")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){const{options:e}=this,{headers:r}=e,A=!C.default.undefined(e.form),o=!C.default.undefined(e.json),s=!C.default.undefined(e.body),a=A||o||s,c=t.withoutBody.has(e.method)&&!("GET"===e.method&&e.allowGetBody);if(this._cannotHaveBody=c,a){if(c)throw new TypeError(`The \`${e.method}\` method cannot be used with a body`);if([s,A,o].filter(e=>e).length>1)throw new TypeError("The `body`, `json` and `form` options are mutually exclusive");if(s&&!(e.body instanceof n.Readable)&&!C.default.string(e.body)&&!C.default.buffer(e.body)&&!I.default(e.body))throw new TypeError("The `body` option must be a stream.Readable, string or Buffer");if(A&&!C.default.object(e.form))throw new TypeError("The `form` option must be an Object");{const t=!C.default.string(r["content-type"]);s?(I.default(e.body)&&t&&(r["content-type"]="multipart/form-data; boundary="+e.body.getBoundary()),this[H]=e.body):A?(t&&(r["content-type"]="application/x-www-form-urlencoded"),this[H]=new i.URLSearchParams(e.form).toString()):(t&&(r["content-type"]="application/json"),this[H]=e.stringifyJson(e.json));const n=await f.default(this[H],e.headers);C.default.undefined(r["content-length"])&&C.default.undefined(r["transfer-encoding"])&&(c||C.default.undefined(n)||(r["content-length"]=String(n)))}}else c?this._lockWrite():this._unlockWrite();this[x]=Number(r["content-length"])||void 0}async _onResponseBase(e){const{options:t}=this,{url:r}=t;this[q]=e,t.decompress&&(e=h(e));const A=e.statusCode,n=e;n.statusMessage=n.statusMessage?n.statusMessage:s.STATUS_CODES[A],n.url=t.url.toString(),n.requestUrl=this.requestUrl,n.redirectUrls=this.redirects,n.request=this,n.isFromCache=e.fromCache||!1,n.ip=this.ip,n.retryCount=this.retryCount,this[U]=n.isFromCache,this[M]=Number(e.headers["content-length"])||void 0,this[K]=e,e.once("end",()=>{this[M]=this[R],this.emit("downloadProgress",this.downloadProgress)}),e.once("error",t=>{e.destroy(),this._beforeError(new ne(t,this))}),e.once("aborted",()=>{this._beforeError(new ne({name:"Error",message:"The server aborted pending request",code:"ECONNRESET"},this))}),this.emit("downloadProgress",this.downloadProgress);const o=e.headers["set-cookie"];if(C.default.object(t.cookieJar)&&o){let e=o.map(async e=>t.cookieJar.setCookie(e,r.toString()));t.ignoreInvalidCookies&&(e=e.map(async e=>e.catch(()=>{})));try{await Promise.all(e)}catch(e){return void this._beforeError(e)}}if(t.followRedirect&&e.headers.location&&X.has(A)){e.resume(),this[F]&&(this[T](),delete this[F],this[O]());if(!(303===A&&"GET"!==t.method&&"HEAD"!==t.method)&&t.methodRewriting||(t.method="GET","body"in t&&delete t.body,"json"in t&&delete t.json,"form"in t&&delete t.form,this[H]=void 0,delete t.headers["content-length"]),this.redirects.length>=t.maxRedirects)return void this._beforeError(new $(this));try{const A=Buffer.from(e.headers.location,"binary").toString(),o=new i.URL(A,r),s=o.toString();decodeURI(s),o.hostname!==r.hostname||o.port!==r.port?("host"in t.headers&&delete t.headers.host,"cookie"in t.headers&&delete t.headers.cookie,"authorization"in t.headers&&delete t.headers.authorization,(t.username||t.password)&&(t.username="",t.password="")):(o.username=t.username,o.password=t.password),this.redirects.push(s),t.url=o;for(const e of t.hooks.beforeRedirect)await e(t,n);this.emit("redirect",n,t),await this._makeRequest()}catch(e){return void this._beforeError(e)}}else if(t.isStream&&t.throwHttpErrors&&!b.isResponseOk(n))this._beforeError(new ee(n));else{e.on("readable",()=>{this[G]&&this._read()}),this.on("resume",()=>{e.resume()}),this.on("pause",()=>{e.pause()}),e.once("end",()=>{this.push(null)}),this.emit("response",e);for(const r of this[P])if(!r.headersSent){for(const A in e.headers){const n=!t.decompress||"content-encoding"!==A,o=e.headers[A];n&&r.setHeader(A,o)}r.statusCode=A}}}async _onResponse(e){try{await this._onResponseBase(e)}catch(e){this._beforeError(e)}}_onRequest(e){const{options:t}=this,{timeout:r,url:A}=t;g.default(e),this[T]=B.default(e,r,A);const n=t.cache?"cacheableResponse":"response";e.once(n,e=>{this._onResponse(e)}),e.once("error",t=>{var r;e.destroy(),null===(r=e.res)||void 0===r||r.removeAllListeners("end"),t=t instanceof B.TimeoutError?new Ae(t,this.timings,this):new Z(t.message,t,this),this._beforeError(t)}),this[O]=E.default(e,this,ie),this[F]=e,this.emit("uploadProgress",this.uploadProgress);const o=this[H],i=0===this.redirects.length?this:e;C.default.nodeStream(o)?(o.pipe(i),o.once("error",e=>{this._beforeError(new re(e,this))})):(this._unlockWrite(),C.default.undefined(o)?(this._cannotHaveBody||this._noPipe)&&(i.end(),this._lockWrite()):(this._writeRequest(o,void 0,()=>{}),i.end(),this._lockWrite())),this.emit("request",e)}async _createCacheableRequest(e,t){return new Promise((r,A)=>{let n;Object.assign(t,y.default(e)),delete t.url;const o=V.get(t.cache)(t,async e=>{e._readableState.autoDestroy=!1,n&&(await n).emit("cacheableResponse",e),r(e)});t.url=e,o.once("error",A),o.once("request",async e=>{n=e,r(n)})})}async _makeRequest(){var e,t,r,A,n;const{options:o}=this,{headers:i}=o;for(const e in i)if(C.default.undefined(i[e]))delete i[e];else if(C.default.null_(i[e]))throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${e}\` header`);if(o.decompress&&C.default.undefined(i["accept-encoding"])&&(i["accept-encoding"]=W?"gzip, deflate, br":"gzip, deflate"),o.cookieJar){const e=await o.cookieJar.getCookieString(o.url.toString());C.default.nonEmptyString(e)&&(o.headers.cookie=e)}for(const e of o.hooks.beforeRequest){const t=await e(o);if(!C.default.undefined(t)){o.request=()=>t;break}}o.body&&this[H]!==o.body&&(this[H]=o.body);const{agent:a,request:g,timeout:l,url:h}=o;if(o.dnsCache&&!("lookup"in o)&&(o.lookup=o.dnsCache.lookup),"unix"===h.hostname){const e=/(?.+?):(?.+)/.exec(`${h.pathname}${h.search}`);if(null==e?void 0:e.groups){const{socketPath:t,path:r}=e.groups;Object.assign(o,{socketPath:t,path:r,host:""})}}const d="https:"===h.protocol;let f;f=o.http2?p.auto:d?c.request:s.request;const I=null!==(e=o.request)&&void 0!==e?e:f,E=o.cache?this._createCacheableRequest:I;a&&!o.http2&&(o.agent=a[d?"https":"http"]),o[F]=I,delete o.request,delete o.timeout;const B=o;if(B.shared=null===(t=o.cacheOptions)||void 0===t?void 0:t.shared,B.cacheHeuristic=null===(r=o.cacheOptions)||void 0===r?void 0:r.cacheHeuristic,B.immutableMinTimeToLive=null===(A=o.cacheOptions)||void 0===A?void 0:A.immutableMinTimeToLive,B.ignoreCargoCult=null===(n=o.cacheOptions)||void 0===n?void 0:n.ignoreCargoCult,void 0!==o.dnsLookupIpVersion)try{B.family=D.dnsLookupIpVersionToFamily(o.dnsLookupIpVersion)}catch(e){throw new Error("Invalid `dnsLookupIpVersion` option value")}o.https&&("rejectUnauthorized"in o.https&&(B.rejectUnauthorized=o.https.rejectUnauthorized),o.https.checkServerIdentity&&(B.checkServerIdentity=o.https.checkServerIdentity),o.https.certificateAuthority&&(B.ca=o.https.certificateAuthority),o.https.certificate&&(B.cert=o.https.certificate),o.https.key&&(B.key=o.https.key),o.https.passphrase&&(B.passphrase=o.https.passphrase),o.https.pfx&&(B.pfx=o.https.pfx));try{let e=await E(h,B);C.default.undefined(e)&&(e=f(h,B)),o.request=g,o.timeout=l,o.agent=a,o.https&&("rejectUnauthorized"in o.https&&delete B.rejectUnauthorized,o.https.checkServerIdentity&&delete B.checkServerIdentity,o.https.certificateAuthority&&delete B.ca,o.https.certificate&&delete B.cert,o.https.key&&delete B.key,o.https.passphrase&&delete B.passphrase,o.https.pfx&&delete B.pfx),y=e,C.default.object(y)&&!("statusCode"in y)?this._onRequest(e):this.writable?(this.once("finish",()=>{this._onResponse(e)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(e)}catch(e){if(e instanceof u.CacheError)throw new te(e,this);throw new Z(e.message,e,this)}var y}async _error(e){try{for(const t of this.options.hooks.beforeError)e=await t(e)}catch(t){e=new Z(t.message,t,this)}this.destroy(e)}_beforeError(e){if(this[Y])return;const{options:t}=this,r=this.retryCount+1;this[Y]=!0,e instanceof Z||(e=new Z(e.message,e,this));const A=e,{response:n}=A;(async()=>{if(n&&!n.body){n.setEncoding(this._readableState.encoding);try{n.rawBody=await Q.default(n),n.body=n.rawBody.toString()}catch(e){}}if(0!==this.listenerCount("retry")){let o;try{let e;n&&"retry-after"in n.headers&&(e=Number(n.headers["retry-after"]),Number.isNaN(e)?(e=Date.parse(n.headers["retry-after"])-Date.now(),e<=0&&(e=1)):e*=1e3),o=await t.retry.calculateDelay({attemptCount:r,retryOptions:t.retry,error:A,retryAfter:e,computedValue:k.default({attemptCount:r,retryOptions:t.retry,error:A,retryAfter:e,computedValue:0})})}catch(e){return void this._error(new Z(e.message,e,this))}if(o){const t=async()=>{try{for(const e of this.options.hooks.beforeRetry)await e(this.options,A,r)}catch(t){return void this._error(new Z(t.message,e,this))}this.destroyed||(this.destroy(),this.emit("retry",r,e))};return void(this[z]=setTimeout(t,o))}}this._error(A)})()}_read(){this[G]=!0;const e=this[K];if(e&&!this[Y]){let t;for(e.readableLength&&(this[G]=!1);null!==(t=e.read());){this[R]+=t.length,this[j]=!0;const e=this.downloadProgress;e.percent<1&&this.emit("downloadProgress",e),this.push(t)}}}_write(e,t,r){const A=()=>{this._writeRequest(e,t,r)};this.requestInitialized?A():this[J].push(A)}_writeRequest(e,t,r){this[F].destroyed||(this._progressCallbacks.push(()=>{this[L]+=Buffer.byteLength(e,t);const r=this.uploadProgress;r.percent<1&&this.emit("uploadProgress",r)}),this[F].write(e,t,e=>{e||0===this._progressCallbacks.length||this._progressCallbacks.shift()(),r(e)}))}_final(e){const t=()=>{for(;0!==this._progressCallbacks.length;)this._progressCallbacks.shift()();F in this?this[F].destroyed?e():this[F].end(t=>{t||(this[x]=this[L],this.emit("uploadProgress",this.uploadProgress),this[F].emit("upload-complete")),e(t)}):e()};this.requestInitialized?t():this[J].push(t)}_destroy(e,t){var r;this[Y]=!0,clearTimeout(this[z]),F in this&&(this[T](),(null===(r=this[K])||void 0===r?void 0:r.complete)||this[F].destroy()),null===e||C.default.undefined(e)||e instanceof Z||(e=new Z(e.message,e,this)),t(e)}get _isAboutToError(){return this[Y]}get ip(){var e;return null===(e=this[F])||void 0===e?void 0:e.socket.remoteAddress}get aborted(){var e,t,r;return(null!==(t=null===(e=this[F])||void 0===e?void 0:e.destroyed)&&void 0!==t?t:this.destroyed)&&!(null===(r=this[q])||void 0===r?void 0:r.complete)}get socket(){var e;return null===(e=this[F])||void 0===e?void 0:e.socket}get downloadProgress(){let e;return e=this[M]?this[R]/this[M]:this[M]===this[R]?1:0,{percent:e,transferred:this[R],total:this[M]}}get uploadProgress(){let e;return e=this[x]?this[L]/this[x]:this[x]===this[L]?1:0,{percent:e,transferred:this[L],total:this[x]}}get timings(){var e;return null===(e=this[F])||void 0===e?void 0:e.timings}get isFromCache(){return this[U]}pipe(e,t){if(this[j])throw new Error("Failed to pipe. The response has been emitted already.");return e instanceof a.ServerResponse&&this[P].add(e),super.pipe(e,t)}unpipe(e){return e instanceof a.ServerResponse&&this[P].delete(e),super.unpipe(e),this}}t.default=se},11338:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.dnsLookupIpVersionToFamily=t.isDnsLookupIpVersion=void 0;const r={auto:0,ipv4:4,ipv6:6};t.isDnsLookupIpVersion=e=>e in r,t.dnsLookupIpVersionToFamily=e=>{if(t.isDnsLookupIpVersion(e))return r[e];throw new Error("Invalid DNS lookup IP version")}},78586:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(35747),n=r(31669),o=r(7966),i=r(2920),s=n.promisify(A.stat);t.default=async(e,t)=>{if(t&&"content-length"in t)return Number(t["content-length"]);if(!e)return 0;if(o.default.string(e))return Buffer.byteLength(e);if(o.default.buffer(e))return e.length;if(i.default(e))return n.promisify(e.getLength.bind(e))();if(e instanceof A.ReadStream){const{size:t}=await s(e.path);return t}}},57854:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=async e=>{const t=[];let r=0;for await(const A of e)t.push(A),r+=Buffer.byteLength(A);return Buffer.isBuffer(t[0])?Buffer.concat(t,r):Buffer.from(t.join(""))}},2920:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(7966);t.default=e=>A.default.nodeStream(e)&&A.default.function_(e.getBoundary)},38206:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isResponseOk=void 0,t.isResponseOk=e=>{const{statusCode:t}=e,r=e.request.options.followRedirect?299:399;return t>=200&&t<=r||304===t}},82524:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(78835),n=["protocol","host","hostname","port","pathname","search"];t.default=(e,t)=>{var r,o;if(t.path){if(t.pathname)throw new TypeError("Parameters `path` and `pathname` are mutually exclusive.");if(t.search)throw new TypeError("Parameters `path` and `search` are mutually exclusive.");if(t.searchParams)throw new TypeError("Parameters `path` and `searchParams` are mutually exclusive.")}if(t.search&&t.searchParams)throw new TypeError("Parameters `search` and `searchParams` are mutually exclusive.");if(!e){if(!t.protocol)throw new TypeError("No URL protocol specified");e=`${t.protocol}//${null!==(o=null!==(r=t.hostname)&&void 0!==r?r:t.host)&&void 0!==o?o:""}`}const i=new A.URL(e);if(t.path){const e=t.path.indexOf("?");-1===e?t.pathname=t.path:(t.pathname=t.path.slice(0,e),t.search=t.path.slice(e+1)),delete t.path}for(const e of n)t[e]&&(i[e]=t[e].toString());return i}},51743:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){const A={};for(const n of r)A[n]=(...e)=>{t.emit(n,...e)},e.on(n,A[n]);return()=>{for(const t of r)e.off(t,A[t])}}},44947:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TimeoutError=void 0;const A=r(11631),n=r(70148),o=Symbol("reentry"),i=()=>{};class s extends Error{constructor(e,t){super(`Timeout awaiting '${t}' for ${e}ms`),this.event=t,this.name="TimeoutError",this.code="ETIMEDOUT"}}t.TimeoutError=s,t.default=(e,t,r)=>{if(o in e)return i;e[o]=!0;const a=[],{once:c,unhandleAll:g}=n.default(),l=(e,t,r)=>{var A;const n=setTimeout(t,e,e,r);null===(A=n.unref)||void 0===A||A.call(n);const o=()=>{clearTimeout(n)};return a.push(o),o},{host:u,hostname:h}=r,p=(t,r)=>{e.destroy(new s(t,r))},d=()=>{for(const e of a)e();g()};if(e.once("error",t=>{if(d(),0===e.listenerCount("error"))throw t}),e.once("close",d),c(e,"response",e=>{c(e,"end",d)}),void 0!==t.request&&l(t.request,p,"request"),void 0!==t.socket){const r=()=>{p(t.socket,"socket")};e.setTimeout(t.socket,r),a.push(()=>{e.removeListener("timeout",r)})}return c(e,"socket",n=>{var o;const{socketPath:i}=e;if(n.connecting){const e=Boolean(null!=i?i:0!==A.isIP(null!==(o=null!=h?h:u)&&void 0!==o?o:""));if(void 0!==t.lookup&&!e&&void 0===n.address().address){const e=l(t.lookup,p,"lookup");c(n,"lookup",e)}if(void 0!==t.connect){const r=()=>l(t.connect,p,"connect");e?c(n,"connect",r()):c(n,"lookup",e=>{null===e&&c(n,"connect",r())})}void 0!==t.secureConnect&&"https:"===r.protocol&&c(n,"connect",()=>{const e=l(t.secureConnect,p,"secureConnect");c(n,"secureConnect",e)})}if(void 0!==t.send){const r=()=>l(t.send,p,"send");n.connecting?c(n,"connect",()=>{c(e,"upload-complete",r())}):c(e,"upload-complete",r())}}),void 0!==t.response&&c(e,"upload-complete",()=>{const r=l(t.response,p,"response");c(e,"response",r)}),d}},70148:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=()=>{const e=[];return{once(t,r,A){t.once(r,A),e.push({origin:t,event:r,fn:A})},unhandleAll(){for(const t of e){const{origin:e,event:r,fn:A}=t;e.removeListener(r,A)}e.length=0}}}},50116:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(7966);t.default=e=>{const t={protocol:(e=e).protocol,hostname:A.default.string(e.hostname)&&e.hostname.startsWith("[")?e.hostname.slice(1,-1):e.hostname,host:e.host,hash:e.hash,search:e.search,pathname:e.pathname,href:e.href,path:`${e.pathname||""}${e.search||""}`};return A.default.string(e.port)&&0!==e.port.length&&(t.port=Number(e.port)),(e.username||e.password)&&(t.auth=`${e.username||""}:${e.password||""}`),t}},85551:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=class{constructor(){this.weakMap=new WeakMap,this.map=new Map}set(e,t){"object"==typeof e?this.weakMap.set(e,t):this.map.set(e,t)}get(e){return"object"==typeof e?this.weakMap.get(e):this.map.get(e)}has(e){return"object"==typeof e?this.weakMap.has(e):this.map.has(e)}}},39226:function(e,t,r){"use strict";var A=this&&this.__createBinding||(Object.create?function(e,t,r,A){void 0===A&&(A=r),Object.defineProperty(e,A,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,A){void 0===A&&(A=r),e[A]=t[r]}),n=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||A(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),t.defaultHandler=void 0;const o=r(7966),i=r(81588),s=r(93576),a=r(9048),c=r(9743),g={RequestError:i.RequestError,CacheError:i.CacheError,ReadError:i.ReadError,HTTPError:i.HTTPError,MaxRedirectsError:i.MaxRedirectsError,TimeoutError:i.TimeoutError,ParseError:i.ParseError,CancelError:i.CancelError,UnsupportedProtocolError:i.UnsupportedProtocolError,UploadError:i.UploadError},l=async e=>new Promise(t=>{setTimeout(t,e)}),{normalizeArguments:u}=a.default,h=(...e)=>{let t;for(const r of e)t=u(void 0,r,t);return t},p=e=>e.isStream?new a.default(void 0,e):i.default(e),d=e=>"defaults"in e&&"options"in e.defaults,C=["get","post","put","patch","head","delete"];t.defaultHandler=(e,t)=>t(e);const f=(e,t)=>{if(e)for(const r of e)r(t)},I=e=>{e._rawHandlers=e.handlers,e.handlers=e.handlers.map(e=>(t,r)=>{let A;const n=e(t,e=>(A=r(e),A));if(n!==A&&!t.isStream&&A){const e=n,{then:t,catch:r,finally:o}=e;Object.setPrototypeOf(e,Object.getPrototypeOf(A)),Object.defineProperties(e,Object.getOwnPropertyDescriptors(A)),e.then=t,e.catch=r,e.finally=o}return n});const r=(t,r,A)=>{var n,c;let g=0;const l=t=>e.handlers[g++](t,g===e.handlers.length?p:l);if(o.default.plainObject(t)){const e={...t,...r};a.setNonEnumerableProperties([t,r],e),r=e,t=void 0}try{let o;try{f(e.options.hooks.init,r),f(null===(n=null==r?void 0:r.hooks)||void 0===n?void 0:n.init,r)}catch(e){o=e}const s=u(t,r,null!=A?A:e.options);if(s[a.kIsNormalizedAlready]=!0,o)throw new i.RequestError(o.message,o,s);return l(s)}catch(t){if(null==r?void 0:r.isStream)throw t;return s.default(t,e.options.hooks.beforeError,null===(c=null==r?void 0:r.hooks)||void 0===c?void 0:c.beforeError)}};r.extend=(...r)=>{const A=[e.options];let n,o=[...e._rawHandlers];for(const e of r)d(e)?(A.push(e.defaults.options),o.push(...e.defaults._rawHandlers),n=e.defaults.mutableDefaults):(A.push(e),"handlers"in e&&o.push(...e.handlers),n=e.mutableDefaults);return o=o.filter(e=>e!==t.defaultHandler),0===o.length&&o.push(t.defaultHandler),I({options:h(...A),handlers:o,mutableDefaults:Boolean(n)})};const A=async function*(t,A){let n=u(t,A,e.options);n.resolveBodyOnly=!1;const i=n.pagination;if(!o.default.object(i))throw new TypeError("`options.pagination` must be implemented");const s=[];let{countLimit:a}=i,c=0;for(;c{const r=[];for await(const n of A(e,t))r.push(n);return r},r.paginate.each=A,r.stream=(e,t)=>r(e,{...t,isStream:!0});for(const e of C)r[e]=(t,A)=>r(t,{...A,method:e}),r.stream[e]=(t,A)=>r(t,{...A,method:e,isStream:!0});return Object.assign(r,g),Object.defineProperty(r,"defaults",{value:e.mutableDefaults?e:c.default(e),writable:e.mutableDefaults,configurable:e.mutableDefaults,enumerable:!0}),r.mergeOptions=h,r};t.default=I,n(r(69022),t)},48722:function(e,t,r){"use strict";var A=this&&this.__createBinding||(Object.create?function(e,t,r,A){void 0===A&&(A=r),Object.defineProperty(e,A,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,A){void 0===A&&(A=r),e[A]=t[r]}),n=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||A(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0});const o=r(78835),i=r(39226),s={options:{method:"GET",retry:{limit:2,methods:["GET","PUT","HEAD","DELETE","OPTIONS","TRACE"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:["ETIMEDOUT","ECONNRESET","EADDRINUSE","ECONNREFUSED","EPIPE","ENOTFOUND","ENETUNREACH","EAI_AGAIN"],maxRetryAfter:void 0,calculateDelay:({computedValue:e})=>e},timeout:{},headers:{"user-agent":"got (https://github.com/sindresorhus/got)"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:"text",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:"",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:e=>"json"===e.request.options.responseType?e.body:JSON.parse(e.body),paginate:e=>{if(!Reflect.has(e.headers,"link"))return!1;const t=e.headers.link.split(",");let r;for(const e of t){const t=e.split(";");if(t[1].includes("next")){r=t[0].trimStart().trim(),r=r.slice(1,-1);break}}if(r){return{url:new o.URL(r)}}return!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:1/0,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:e=>JSON.parse(e),stringifyJson:e=>JSON.stringify(e),cacheOptions:{}},handlers:[i.defaultHandler],mutableDefaults:!1},a=i.default(s);t.default=a,e.exports=a,e.exports.default=a,e.exports.__esModule=!0,n(r(39226),t),n(r(81588),t)},69022:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},9743:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const A=r(7966);t.default=function e(t){for(const r of Object.values(t))(A.default.plainObject(r)||A.default.array(r))&&e(r);return Object.freeze(t)}},54595:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=new Set;t.default=e=>{r.has(e)||(r.add(e),process.emitWarning("Got: "+e,{type:"DeprecationWarning"}))}},74988:e=>{e.exports&&(e.exports=function(){var e=3,t=4,r=12,A=13,n=16,o=17;function i(e,t){void 0===t&&(t=0);var r=e.charCodeAt(t);if(55296<=r&&r<=56319&&t=1){var n=r;return 55296<=(A=e.charCodeAt(t-1))&&A<=56319?1024*(A-55296)+(n-56320)+65536:n}return r}function s(i,s,a){var c=[i].concat(s).concat([a]),g=c[c.length-2],l=a,u=c.lastIndexOf(14);if(u>1&&c.slice(1,u).every((function(t){return t==e}))&&-1==[e,A,o].indexOf(i))return 2;var h=c.lastIndexOf(t);if(h>0&&c.slice(1,h).every((function(e){return e==t}))&&-1==[r,t].indexOf(g))return c.filter((function(e){return e==t})).length%2==1?3:4;if(0==g&&1==l)return 0;if(2==g||0==g||1==g)return 14==l&&s.every((function(t){return t==e}))?2:1;if(2==l||0==l||1==l)return 1;if(6==g&&(6==l||7==l||9==l||10==l))return 0;if(!(9!=g&&7!=g||7!=l&&8!=l))return 0;if((10==g||8==g)&&8==l)return 0;if(l==e||15==l)return 0;if(5==l)return 0;if(g==r)return 0;var p=-1!=c.indexOf(e)?c.lastIndexOf(e)-1:c.length-2;return-1!=[A,o].indexOf(c[p])&&c.slice(p+1,-1).every((function(t){return t==e}))&&14==l||15==g&&-1!=[n,o].indexOf(l)?0:-1!=s.indexOf(t)?2:g==t&&l==t?0:1}function a(i){return 1536<=i&&i<=1541||1757==i||1807==i||2274==i||3406==i||69821==i||70082<=i&&i<=70083||72250==i||72326<=i&&i<=72329||73030==i?r:13==i?0:10==i?1:0<=i&&i<=9||11<=i&&i<=12||14<=i&&i<=31||127<=i&&i<=159||173==i||1564==i||6158==i||8203==i||8206<=i&&i<=8207||8232==i||8233==i||8234<=i&&i<=8238||8288<=i&&i<=8292||8293==i||8294<=i&&i<=8303||55296<=i&&i<=57343||65279==i||65520<=i&&i<=65528||65529<=i&&i<=65531||113824<=i&&i<=113827||119155<=i&&i<=119162||917504==i||917505==i||917506<=i&&i<=917535||917632<=i&&i<=917759||918e3<=i&&i<=921599?2:768<=i&&i<=879||1155<=i&&i<=1159||1160<=i&&i<=1161||1425<=i&&i<=1469||1471==i||1473<=i&&i<=1474||1476<=i&&i<=1477||1479==i||1552<=i&&i<=1562||1611<=i&&i<=1631||1648==i||1750<=i&&i<=1756||1759<=i&&i<=1764||1767<=i&&i<=1768||1770<=i&&i<=1773||1809==i||1840<=i&&i<=1866||1958<=i&&i<=1968||2027<=i&&i<=2035||2070<=i&&i<=2073||2075<=i&&i<=2083||2085<=i&&i<=2087||2089<=i&&i<=2093||2137<=i&&i<=2139||2260<=i&&i<=2273||2275<=i&&i<=2306||2362==i||2364==i||2369<=i&&i<=2376||2381==i||2385<=i&&i<=2391||2402<=i&&i<=2403||2433==i||2492==i||2494==i||2497<=i&&i<=2500||2509==i||2519==i||2530<=i&&i<=2531||2561<=i&&i<=2562||2620==i||2625<=i&&i<=2626||2631<=i&&i<=2632||2635<=i&&i<=2637||2641==i||2672<=i&&i<=2673||2677==i||2689<=i&&i<=2690||2748==i||2753<=i&&i<=2757||2759<=i&&i<=2760||2765==i||2786<=i&&i<=2787||2810<=i&&i<=2815||2817==i||2876==i||2878==i||2879==i||2881<=i&&i<=2884||2893==i||2902==i||2903==i||2914<=i&&i<=2915||2946==i||3006==i||3008==i||3021==i||3031==i||3072==i||3134<=i&&i<=3136||3142<=i&&i<=3144||3146<=i&&i<=3149||3157<=i&&i<=3158||3170<=i&&i<=3171||3201==i||3260==i||3263==i||3266==i||3270==i||3276<=i&&i<=3277||3285<=i&&i<=3286||3298<=i&&i<=3299||3328<=i&&i<=3329||3387<=i&&i<=3388||3390==i||3393<=i&&i<=3396||3405==i||3415==i||3426<=i&&i<=3427||3530==i||3535==i||3538<=i&&i<=3540||3542==i||3551==i||3633==i||3636<=i&&i<=3642||3655<=i&&i<=3662||3761==i||3764<=i&&i<=3769||3771<=i&&i<=3772||3784<=i&&i<=3789||3864<=i&&i<=3865||3893==i||3895==i||3897==i||3953<=i&&i<=3966||3968<=i&&i<=3972||3974<=i&&i<=3975||3981<=i&&i<=3991||3993<=i&&i<=4028||4038==i||4141<=i&&i<=4144||4146<=i&&i<=4151||4153<=i&&i<=4154||4157<=i&&i<=4158||4184<=i&&i<=4185||4190<=i&&i<=4192||4209<=i&&i<=4212||4226==i||4229<=i&&i<=4230||4237==i||4253==i||4957<=i&&i<=4959||5906<=i&&i<=5908||5938<=i&&i<=5940||5970<=i&&i<=5971||6002<=i&&i<=6003||6068<=i&&i<=6069||6071<=i&&i<=6077||6086==i||6089<=i&&i<=6099||6109==i||6155<=i&&i<=6157||6277<=i&&i<=6278||6313==i||6432<=i&&i<=6434||6439<=i&&i<=6440||6450==i||6457<=i&&i<=6459||6679<=i&&i<=6680||6683==i||6742==i||6744<=i&&i<=6750||6752==i||6754==i||6757<=i&&i<=6764||6771<=i&&i<=6780||6783==i||6832<=i&&i<=6845||6846==i||6912<=i&&i<=6915||6964==i||6966<=i&&i<=6970||6972==i||6978==i||7019<=i&&i<=7027||7040<=i&&i<=7041||7074<=i&&i<=7077||7080<=i&&i<=7081||7083<=i&&i<=7085||7142==i||7144<=i&&i<=7145||7149==i||7151<=i&&i<=7153||7212<=i&&i<=7219||7222<=i&&i<=7223||7376<=i&&i<=7378||7380<=i&&i<=7392||7394<=i&&i<=7400||7405==i||7412==i||7416<=i&&i<=7417||7616<=i&&i<=7673||7675<=i&&i<=7679||8204==i||8400<=i&&i<=8412||8413<=i&&i<=8416||8417==i||8418<=i&&i<=8420||8421<=i&&i<=8432||11503<=i&&i<=11505||11647==i||11744<=i&&i<=11775||12330<=i&&i<=12333||12334<=i&&i<=12335||12441<=i&&i<=12442||42607==i||42608<=i&&i<=42610||42612<=i&&i<=42621||42654<=i&&i<=42655||42736<=i&&i<=42737||43010==i||43014==i||43019==i||43045<=i&&i<=43046||43204<=i&&i<=43205||43232<=i&&i<=43249||43302<=i&&i<=43309||43335<=i&&i<=43345||43392<=i&&i<=43394||43443==i||43446<=i&&i<=43449||43452==i||43493==i||43561<=i&&i<=43566||43569<=i&&i<=43570||43573<=i&&i<=43574||43587==i||43596==i||43644==i||43696==i||43698<=i&&i<=43700||43703<=i&&i<=43704||43710<=i&&i<=43711||43713==i||43756<=i&&i<=43757||43766==i||44005==i||44008==i||44013==i||64286==i||65024<=i&&i<=65039||65056<=i&&i<=65071||65438<=i&&i<=65439||66045==i||66272==i||66422<=i&&i<=66426||68097<=i&&i<=68099||68101<=i&&i<=68102||68108<=i&&i<=68111||68152<=i&&i<=68154||68159==i||68325<=i&&i<=68326||69633==i||69688<=i&&i<=69702||69759<=i&&i<=69761||69811<=i&&i<=69814||69817<=i&&i<=69818||69888<=i&&i<=69890||69927<=i&&i<=69931||69933<=i&&i<=69940||70003==i||70016<=i&&i<=70017||70070<=i&&i<=70078||70090<=i&&i<=70092||70191<=i&&i<=70193||70196==i||70198<=i&&i<=70199||70206==i||70367==i||70371<=i&&i<=70378||70400<=i&&i<=70401||70460==i||70462==i||70464==i||70487==i||70502<=i&&i<=70508||70512<=i&&i<=70516||70712<=i&&i<=70719||70722<=i&&i<=70724||70726==i||70832==i||70835<=i&&i<=70840||70842==i||70845==i||70847<=i&&i<=70848||70850<=i&&i<=70851||71087==i||71090<=i&&i<=71093||71100<=i&&i<=71101||71103<=i&&i<=71104||71132<=i&&i<=71133||71219<=i&&i<=71226||71229==i||71231<=i&&i<=71232||71339==i||71341==i||71344<=i&&i<=71349||71351==i||71453<=i&&i<=71455||71458<=i&&i<=71461||71463<=i&&i<=71467||72193<=i&&i<=72198||72201<=i&&i<=72202||72243<=i&&i<=72248||72251<=i&&i<=72254||72263==i||72273<=i&&i<=72278||72281<=i&&i<=72283||72330<=i&&i<=72342||72344<=i&&i<=72345||72752<=i&&i<=72758||72760<=i&&i<=72765||72767==i||72850<=i&&i<=72871||72874<=i&&i<=72880||72882<=i&&i<=72883||72885<=i&&i<=72886||73009<=i&&i<=73014||73018==i||73020<=i&&i<=73021||73023<=i&&i<=73029||73031==i||92912<=i&&i<=92916||92976<=i&&i<=92982||94095<=i&&i<=94098||113821<=i&&i<=113822||119141==i||119143<=i&&i<=119145||119150<=i&&i<=119154||119163<=i&&i<=119170||119173<=i&&i<=119179||119210<=i&&i<=119213||119362<=i&&i<=119364||121344<=i&&i<=121398||121403<=i&&i<=121452||121461==i||121476==i||121499<=i&&i<=121503||121505<=i&&i<=121519||122880<=i&&i<=122886||122888<=i&&i<=122904||122907<=i&&i<=122913||122915<=i&&i<=122916||122918<=i&&i<=122922||125136<=i&&i<=125142||125252<=i&&i<=125258||917536<=i&&i<=917631||917760<=i&&i<=917999?e:127462<=i&&i<=127487?t:2307==i||2363==i||2366<=i&&i<=2368||2377<=i&&i<=2380||2382<=i&&i<=2383||2434<=i&&i<=2435||2495<=i&&i<=2496||2503<=i&&i<=2504||2507<=i&&i<=2508||2563==i||2622<=i&&i<=2624||2691==i||2750<=i&&i<=2752||2761==i||2763<=i&&i<=2764||2818<=i&&i<=2819||2880==i||2887<=i&&i<=2888||2891<=i&&i<=2892||3007==i||3009<=i&&i<=3010||3014<=i&&i<=3016||3018<=i&&i<=3020||3073<=i&&i<=3075||3137<=i&&i<=3140||3202<=i&&i<=3203||3262==i||3264<=i&&i<=3265||3267<=i&&i<=3268||3271<=i&&i<=3272||3274<=i&&i<=3275||3330<=i&&i<=3331||3391<=i&&i<=3392||3398<=i&&i<=3400||3402<=i&&i<=3404||3458<=i&&i<=3459||3536<=i&&i<=3537||3544<=i&&i<=3550||3570<=i&&i<=3571||3635==i||3763==i||3902<=i&&i<=3903||3967==i||4145==i||4155<=i&&i<=4156||4182<=i&&i<=4183||4228==i||6070==i||6078<=i&&i<=6085||6087<=i&&i<=6088||6435<=i&&i<=6438||6441<=i&&i<=6443||6448<=i&&i<=6449||6451<=i&&i<=6456||6681<=i&&i<=6682||6741==i||6743==i||6765<=i&&i<=6770||6916==i||6965==i||6971==i||6973<=i&&i<=6977||6979<=i&&i<=6980||7042==i||7073==i||7078<=i&&i<=7079||7082==i||7143==i||7146<=i&&i<=7148||7150==i||7154<=i&&i<=7155||7204<=i&&i<=7211||7220<=i&&i<=7221||7393==i||7410<=i&&i<=7411||7415==i||43043<=i&&i<=43044||43047==i||43136<=i&&i<=43137||43188<=i&&i<=43203||43346<=i&&i<=43347||43395==i||43444<=i&&i<=43445||43450<=i&&i<=43451||43453<=i&&i<=43456||43567<=i&&i<=43568||43571<=i&&i<=43572||43597==i||43755==i||43758<=i&&i<=43759||43765==i||44003<=i&&i<=44004||44006<=i&&i<=44007||44009<=i&&i<=44010||44012==i||69632==i||69634==i||69762==i||69808<=i&&i<=69810||69815<=i&&i<=69816||69932==i||70018==i||70067<=i&&i<=70069||70079<=i&&i<=70080||70188<=i&&i<=70190||70194<=i&&i<=70195||70197==i||70368<=i&&i<=70370||70402<=i&&i<=70403||70463==i||70465<=i&&i<=70468||70471<=i&&i<=70472||70475<=i&&i<=70477||70498<=i&&i<=70499||70709<=i&&i<=70711||70720<=i&&i<=70721||70725==i||70833<=i&&i<=70834||70841==i||70843<=i&&i<=70844||70846==i||70849==i||71088<=i&&i<=71089||71096<=i&&i<=71099||71102==i||71216<=i&&i<=71218||71227<=i&&i<=71228||71230==i||71340==i||71342<=i&&i<=71343||71350==i||71456<=i&&i<=71457||71462==i||72199<=i&&i<=72200||72249==i||72279<=i&&i<=72280||72343==i||72751==i||72766==i||72873==i||72881==i||72884==i||94033<=i&&i<=94078||119142==i||119149==i?5:4352<=i&&i<=4447||43360<=i&&i<=43388?6:4448<=i&&i<=4519||55216<=i&&i<=55238?7:4520<=i&&i<=4607||55243<=i&&i<=55291?8:44032==i||44060==i||44088==i||44116==i||44144==i||44172==i||44200==i||44228==i||44256==i||44284==i||44312==i||44340==i||44368==i||44396==i||44424==i||44452==i||44480==i||44508==i||44536==i||44564==i||44592==i||44620==i||44648==i||44676==i||44704==i||44732==i||44760==i||44788==i||44816==i||44844==i||44872==i||44900==i||44928==i||44956==i||44984==i||45012==i||45040==i||45068==i||45096==i||45124==i||45152==i||45180==i||45208==i||45236==i||45264==i||45292==i||45320==i||45348==i||45376==i||45404==i||45432==i||45460==i||45488==i||45516==i||45544==i||45572==i||45600==i||45628==i||45656==i||45684==i||45712==i||45740==i||45768==i||45796==i||45824==i||45852==i||45880==i||45908==i||45936==i||45964==i||45992==i||46020==i||46048==i||46076==i||46104==i||46132==i||46160==i||46188==i||46216==i||46244==i||46272==i||46300==i||46328==i||46356==i||46384==i||46412==i||46440==i||46468==i||46496==i||46524==i||46552==i||46580==i||46608==i||46636==i||46664==i||46692==i||46720==i||46748==i||46776==i||46804==i||46832==i||46860==i||46888==i||46916==i||46944==i||46972==i||47e3==i||47028==i||47056==i||47084==i||47112==i||47140==i||47168==i||47196==i||47224==i||47252==i||47280==i||47308==i||47336==i||47364==i||47392==i||47420==i||47448==i||47476==i||47504==i||47532==i||47560==i||47588==i||47616==i||47644==i||47672==i||47700==i||47728==i||47756==i||47784==i||47812==i||47840==i||47868==i||47896==i||47924==i||47952==i||47980==i||48008==i||48036==i||48064==i||48092==i||48120==i||48148==i||48176==i||48204==i||48232==i||48260==i||48288==i||48316==i||48344==i||48372==i||48400==i||48428==i||48456==i||48484==i||48512==i||48540==i||48568==i||48596==i||48624==i||48652==i||48680==i||48708==i||48736==i||48764==i||48792==i||48820==i||48848==i||48876==i||48904==i||48932==i||48960==i||48988==i||49016==i||49044==i||49072==i||49100==i||49128==i||49156==i||49184==i||49212==i||49240==i||49268==i||49296==i||49324==i||49352==i||49380==i||49408==i||49436==i||49464==i||49492==i||49520==i||49548==i||49576==i||49604==i||49632==i||49660==i||49688==i||49716==i||49744==i||49772==i||49800==i||49828==i||49856==i||49884==i||49912==i||49940==i||49968==i||49996==i||50024==i||50052==i||50080==i||50108==i||50136==i||50164==i||50192==i||50220==i||50248==i||50276==i||50304==i||50332==i||50360==i||50388==i||50416==i||50444==i||50472==i||50500==i||50528==i||50556==i||50584==i||50612==i||50640==i||50668==i||50696==i||50724==i||50752==i||50780==i||50808==i||50836==i||50864==i||50892==i||50920==i||50948==i||50976==i||51004==i||51032==i||51060==i||51088==i||51116==i||51144==i||51172==i||51200==i||51228==i||51256==i||51284==i||51312==i||51340==i||51368==i||51396==i||51424==i||51452==i||51480==i||51508==i||51536==i||51564==i||51592==i||51620==i||51648==i||51676==i||51704==i||51732==i||51760==i||51788==i||51816==i||51844==i||51872==i||51900==i||51928==i||51956==i||51984==i||52012==i||52040==i||52068==i||52096==i||52124==i||52152==i||52180==i||52208==i||52236==i||52264==i||52292==i||52320==i||52348==i||52376==i||52404==i||52432==i||52460==i||52488==i||52516==i||52544==i||52572==i||52600==i||52628==i||52656==i||52684==i||52712==i||52740==i||52768==i||52796==i||52824==i||52852==i||52880==i||52908==i||52936==i||52964==i||52992==i||53020==i||53048==i||53076==i||53104==i||53132==i||53160==i||53188==i||53216==i||53244==i||53272==i||53300==i||53328==i||53356==i||53384==i||53412==i||53440==i||53468==i||53496==i||53524==i||53552==i||53580==i||53608==i||53636==i||53664==i||53692==i||53720==i||53748==i||53776==i||53804==i||53832==i||53860==i||53888==i||53916==i||53944==i||53972==i||54e3==i||54028==i||54056==i||54084==i||54112==i||54140==i||54168==i||54196==i||54224==i||54252==i||54280==i||54308==i||54336==i||54364==i||54392==i||54420==i||54448==i||54476==i||54504==i||54532==i||54560==i||54588==i||54616==i||54644==i||54672==i||54700==i||54728==i||54756==i||54784==i||54812==i||54840==i||54868==i||54896==i||54924==i||54952==i||54980==i||55008==i||55036==i||55064==i||55092==i||55120==i||55148==i||55176==i?9:44033<=i&&i<=44059||44061<=i&&i<=44087||44089<=i&&i<=44115||44117<=i&&i<=44143||44145<=i&&i<=44171||44173<=i&&i<=44199||44201<=i&&i<=44227||44229<=i&&i<=44255||44257<=i&&i<=44283||44285<=i&&i<=44311||44313<=i&&i<=44339||44341<=i&&i<=44367||44369<=i&&i<=44395||44397<=i&&i<=44423||44425<=i&&i<=44451||44453<=i&&i<=44479||44481<=i&&i<=44507||44509<=i&&i<=44535||44537<=i&&i<=44563||44565<=i&&i<=44591||44593<=i&&i<=44619||44621<=i&&i<=44647||44649<=i&&i<=44675||44677<=i&&i<=44703||44705<=i&&i<=44731||44733<=i&&i<=44759||44761<=i&&i<=44787||44789<=i&&i<=44815||44817<=i&&i<=44843||44845<=i&&i<=44871||44873<=i&&i<=44899||44901<=i&&i<=44927||44929<=i&&i<=44955||44957<=i&&i<=44983||44985<=i&&i<=45011||45013<=i&&i<=45039||45041<=i&&i<=45067||45069<=i&&i<=45095||45097<=i&&i<=45123||45125<=i&&i<=45151||45153<=i&&i<=45179||45181<=i&&i<=45207||45209<=i&&i<=45235||45237<=i&&i<=45263||45265<=i&&i<=45291||45293<=i&&i<=45319||45321<=i&&i<=45347||45349<=i&&i<=45375||45377<=i&&i<=45403||45405<=i&&i<=45431||45433<=i&&i<=45459||45461<=i&&i<=45487||45489<=i&&i<=45515||45517<=i&&i<=45543||45545<=i&&i<=45571||45573<=i&&i<=45599||45601<=i&&i<=45627||45629<=i&&i<=45655||45657<=i&&i<=45683||45685<=i&&i<=45711||45713<=i&&i<=45739||45741<=i&&i<=45767||45769<=i&&i<=45795||45797<=i&&i<=45823||45825<=i&&i<=45851||45853<=i&&i<=45879||45881<=i&&i<=45907||45909<=i&&i<=45935||45937<=i&&i<=45963||45965<=i&&i<=45991||45993<=i&&i<=46019||46021<=i&&i<=46047||46049<=i&&i<=46075||46077<=i&&i<=46103||46105<=i&&i<=46131||46133<=i&&i<=46159||46161<=i&&i<=46187||46189<=i&&i<=46215||46217<=i&&i<=46243||46245<=i&&i<=46271||46273<=i&&i<=46299||46301<=i&&i<=46327||46329<=i&&i<=46355||46357<=i&&i<=46383||46385<=i&&i<=46411||46413<=i&&i<=46439||46441<=i&&i<=46467||46469<=i&&i<=46495||46497<=i&&i<=46523||46525<=i&&i<=46551||46553<=i&&i<=46579||46581<=i&&i<=46607||46609<=i&&i<=46635||46637<=i&&i<=46663||46665<=i&&i<=46691||46693<=i&&i<=46719||46721<=i&&i<=46747||46749<=i&&i<=46775||46777<=i&&i<=46803||46805<=i&&i<=46831||46833<=i&&i<=46859||46861<=i&&i<=46887||46889<=i&&i<=46915||46917<=i&&i<=46943||46945<=i&&i<=46971||46973<=i&&i<=46999||47001<=i&&i<=47027||47029<=i&&i<=47055||47057<=i&&i<=47083||47085<=i&&i<=47111||47113<=i&&i<=47139||47141<=i&&i<=47167||47169<=i&&i<=47195||47197<=i&&i<=47223||47225<=i&&i<=47251||47253<=i&&i<=47279||47281<=i&&i<=47307||47309<=i&&i<=47335||47337<=i&&i<=47363||47365<=i&&i<=47391||47393<=i&&i<=47419||47421<=i&&i<=47447||47449<=i&&i<=47475||47477<=i&&i<=47503||47505<=i&&i<=47531||47533<=i&&i<=47559||47561<=i&&i<=47587||47589<=i&&i<=47615||47617<=i&&i<=47643||47645<=i&&i<=47671||47673<=i&&i<=47699||47701<=i&&i<=47727||47729<=i&&i<=47755||47757<=i&&i<=47783||47785<=i&&i<=47811||47813<=i&&i<=47839||47841<=i&&i<=47867||47869<=i&&i<=47895||47897<=i&&i<=47923||47925<=i&&i<=47951||47953<=i&&i<=47979||47981<=i&&i<=48007||48009<=i&&i<=48035||48037<=i&&i<=48063||48065<=i&&i<=48091||48093<=i&&i<=48119||48121<=i&&i<=48147||48149<=i&&i<=48175||48177<=i&&i<=48203||48205<=i&&i<=48231||48233<=i&&i<=48259||48261<=i&&i<=48287||48289<=i&&i<=48315||48317<=i&&i<=48343||48345<=i&&i<=48371||48373<=i&&i<=48399||48401<=i&&i<=48427||48429<=i&&i<=48455||48457<=i&&i<=48483||48485<=i&&i<=48511||48513<=i&&i<=48539||48541<=i&&i<=48567||48569<=i&&i<=48595||48597<=i&&i<=48623||48625<=i&&i<=48651||48653<=i&&i<=48679||48681<=i&&i<=48707||48709<=i&&i<=48735||48737<=i&&i<=48763||48765<=i&&i<=48791||48793<=i&&i<=48819||48821<=i&&i<=48847||48849<=i&&i<=48875||48877<=i&&i<=48903||48905<=i&&i<=48931||48933<=i&&i<=48959||48961<=i&&i<=48987||48989<=i&&i<=49015||49017<=i&&i<=49043||49045<=i&&i<=49071||49073<=i&&i<=49099||49101<=i&&i<=49127||49129<=i&&i<=49155||49157<=i&&i<=49183||49185<=i&&i<=49211||49213<=i&&i<=49239||49241<=i&&i<=49267||49269<=i&&i<=49295||49297<=i&&i<=49323||49325<=i&&i<=49351||49353<=i&&i<=49379||49381<=i&&i<=49407||49409<=i&&i<=49435||49437<=i&&i<=49463||49465<=i&&i<=49491||49493<=i&&i<=49519||49521<=i&&i<=49547||49549<=i&&i<=49575||49577<=i&&i<=49603||49605<=i&&i<=49631||49633<=i&&i<=49659||49661<=i&&i<=49687||49689<=i&&i<=49715||49717<=i&&i<=49743||49745<=i&&i<=49771||49773<=i&&i<=49799||49801<=i&&i<=49827||49829<=i&&i<=49855||49857<=i&&i<=49883||49885<=i&&i<=49911||49913<=i&&i<=49939||49941<=i&&i<=49967||49969<=i&&i<=49995||49997<=i&&i<=50023||50025<=i&&i<=50051||50053<=i&&i<=50079||50081<=i&&i<=50107||50109<=i&&i<=50135||50137<=i&&i<=50163||50165<=i&&i<=50191||50193<=i&&i<=50219||50221<=i&&i<=50247||50249<=i&&i<=50275||50277<=i&&i<=50303||50305<=i&&i<=50331||50333<=i&&i<=50359||50361<=i&&i<=50387||50389<=i&&i<=50415||50417<=i&&i<=50443||50445<=i&&i<=50471||50473<=i&&i<=50499||50501<=i&&i<=50527||50529<=i&&i<=50555||50557<=i&&i<=50583||50585<=i&&i<=50611||50613<=i&&i<=50639||50641<=i&&i<=50667||50669<=i&&i<=50695||50697<=i&&i<=50723||50725<=i&&i<=50751||50753<=i&&i<=50779||50781<=i&&i<=50807||50809<=i&&i<=50835||50837<=i&&i<=50863||50865<=i&&i<=50891||50893<=i&&i<=50919||50921<=i&&i<=50947||50949<=i&&i<=50975||50977<=i&&i<=51003||51005<=i&&i<=51031||51033<=i&&i<=51059||51061<=i&&i<=51087||51089<=i&&i<=51115||51117<=i&&i<=51143||51145<=i&&i<=51171||51173<=i&&i<=51199||51201<=i&&i<=51227||51229<=i&&i<=51255||51257<=i&&i<=51283||51285<=i&&i<=51311||51313<=i&&i<=51339||51341<=i&&i<=51367||51369<=i&&i<=51395||51397<=i&&i<=51423||51425<=i&&i<=51451||51453<=i&&i<=51479||51481<=i&&i<=51507||51509<=i&&i<=51535||51537<=i&&i<=51563||51565<=i&&i<=51591||51593<=i&&i<=51619||51621<=i&&i<=51647||51649<=i&&i<=51675||51677<=i&&i<=51703||51705<=i&&i<=51731||51733<=i&&i<=51759||51761<=i&&i<=51787||51789<=i&&i<=51815||51817<=i&&i<=51843||51845<=i&&i<=51871||51873<=i&&i<=51899||51901<=i&&i<=51927||51929<=i&&i<=51955||51957<=i&&i<=51983||51985<=i&&i<=52011||52013<=i&&i<=52039||52041<=i&&i<=52067||52069<=i&&i<=52095||52097<=i&&i<=52123||52125<=i&&i<=52151||52153<=i&&i<=52179||52181<=i&&i<=52207||52209<=i&&i<=52235||52237<=i&&i<=52263||52265<=i&&i<=52291||52293<=i&&i<=52319||52321<=i&&i<=52347||52349<=i&&i<=52375||52377<=i&&i<=52403||52405<=i&&i<=52431||52433<=i&&i<=52459||52461<=i&&i<=52487||52489<=i&&i<=52515||52517<=i&&i<=52543||52545<=i&&i<=52571||52573<=i&&i<=52599||52601<=i&&i<=52627||52629<=i&&i<=52655||52657<=i&&i<=52683||52685<=i&&i<=52711||52713<=i&&i<=52739||52741<=i&&i<=52767||52769<=i&&i<=52795||52797<=i&&i<=52823||52825<=i&&i<=52851||52853<=i&&i<=52879||52881<=i&&i<=52907||52909<=i&&i<=52935||52937<=i&&i<=52963||52965<=i&&i<=52991||52993<=i&&i<=53019||53021<=i&&i<=53047||53049<=i&&i<=53075||53077<=i&&i<=53103||53105<=i&&i<=53131||53133<=i&&i<=53159||53161<=i&&i<=53187||53189<=i&&i<=53215||53217<=i&&i<=53243||53245<=i&&i<=53271||53273<=i&&i<=53299||53301<=i&&i<=53327||53329<=i&&i<=53355||53357<=i&&i<=53383||53385<=i&&i<=53411||53413<=i&&i<=53439||53441<=i&&i<=53467||53469<=i&&i<=53495||53497<=i&&i<=53523||53525<=i&&i<=53551||53553<=i&&i<=53579||53581<=i&&i<=53607||53609<=i&&i<=53635||53637<=i&&i<=53663||53665<=i&&i<=53691||53693<=i&&i<=53719||53721<=i&&i<=53747||53749<=i&&i<=53775||53777<=i&&i<=53803||53805<=i&&i<=53831||53833<=i&&i<=53859||53861<=i&&i<=53887||53889<=i&&i<=53915||53917<=i&&i<=53943||53945<=i&&i<=53971||53973<=i&&i<=53999||54001<=i&&i<=54027||54029<=i&&i<=54055||54057<=i&&i<=54083||54085<=i&&i<=54111||54113<=i&&i<=54139||54141<=i&&i<=54167||54169<=i&&i<=54195||54197<=i&&i<=54223||54225<=i&&i<=54251||54253<=i&&i<=54279||54281<=i&&i<=54307||54309<=i&&i<=54335||54337<=i&&i<=54363||54365<=i&&i<=54391||54393<=i&&i<=54419||54421<=i&&i<=54447||54449<=i&&i<=54475||54477<=i&&i<=54503||54505<=i&&i<=54531||54533<=i&&i<=54559||54561<=i&&i<=54587||54589<=i&&i<=54615||54617<=i&&i<=54643||54645<=i&&i<=54671||54673<=i&&i<=54699||54701<=i&&i<=54727||54729<=i&&i<=54755||54757<=i&&i<=54783||54785<=i&&i<=54811||54813<=i&&i<=54839||54841<=i&&i<=54867||54869<=i&&i<=54895||54897<=i&&i<=54923||54925<=i&&i<=54951||54953<=i&&i<=54979||54981<=i&&i<=55007||55009<=i&&i<=55035||55037<=i&&i<=55063||55065<=i&&i<=55091||55093<=i&&i<=55119||55121<=i&&i<=55147||55149<=i&&i<=55175||55177<=i&&i<=55203?10:9757==i||9977==i||9994<=i&&i<=9997||127877==i||127938<=i&&i<=127940||127943==i||127946<=i&&i<=127948||128066<=i&&i<=128067||128070<=i&&i<=128080||128110==i||128112<=i&&i<=128120||128124==i||128129<=i&&i<=128131||128133<=i&&i<=128135||128170==i||128372<=i&&i<=128373||128378==i||128400==i||128405<=i&&i<=128406||128581<=i&&i<=128583||128587<=i&&i<=128591||128675==i||128692<=i&&i<=128694||128704==i||128716==i||129304<=i&&i<=129308||129310<=i&&i<=129311||129318==i||129328<=i&&i<=129337||129341<=i&&i<=129342||129489<=i&&i<=129501?A:127995<=i&&i<=127999?14:8205==i?15:9792==i||9794==i||9877<=i&&i<=9878||9992==i||10084==i||127752==i||127806==i||127859==i||127891==i||127908==i||127912==i||127979==i||127981==i||128139==i||128187<=i&&i<=128188||128295==i||128300==i||128488==i||128640==i||128658==i?n:128102<=i&&i<=128105?o:11}return this.nextBreak=function(e,t){if(void 0===t&&(t=0),t<0)return 0;if(t>=e.length-1)return e.length;for(var r,A,n=a(i(e,t)),o=[],c=t+1;c{"use strict";e.exports=(e,t=process.argv)=>{const r=e.startsWith("-")?"":1===e.length?"-":"--",A=t.indexOf(r+e),n=t.indexOf("--");return-1!==A&&(-1===n||A{"use strict";const t=[200,203,204,206,300,301,404,405,410,414,501],r=[200,203,204,300,301,302,303,307,308,404,405,410,414,501],A={date:!0,connection:!0,"keep-alive":!0,"proxy-authenticate":!0,"proxy-authorization":!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0},n={"content-length":!0,"content-encoding":!0,"transfer-encoding":!0,"content-range":!0};function o(e){const t={};if(!e)return t;const r=e.trim().split(/\s*,\s*/);for(const e of r){const[r,A]=e.split(/\s*=\s*/,2);t[r]=void 0===A||A.replace(/^"|"$/g,"")}return t}function i(e){let t=[];for(const r in e){const A=e[r];t.push(!0===A?r:r+"="+A)}if(t.length)return t.join(", ")}e.exports=class{constructor(e,t,{shared:r,cacheHeuristic:A,immutableMinTimeToLive:n,ignoreCargoCult:s,trustServerDate:a,_fromObject:c}={}){if(c)this._fromObject(c);else{if(!t||!t.headers)throw Error("Response headers missing");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=!1!==r,this._trustServerDate=void 0===a||a,this._cacheHeuristic=void 0!==A?A:.1,this._immutableMinTtl=void 0!==n?n:864e5,this._status="status"in t?t.status:200,this._resHeaders=t.headers,this._rescc=o(t.headers["cache-control"]),this._method="method"in e?e.method:"GET",this._url=e.url,this._host=e.headers.host,this._noAuthorization=!e.headers.authorization,this._reqHeaders=t.headers.vary?e.headers:null,this._reqcc=o(e.headers["cache-control"]),s&&"pre-check"in this._rescc&&"post-check"in this._rescc&&(delete this._rescc["pre-check"],delete this._rescc["post-check"],delete this._rescc["no-cache"],delete this._rescc["no-store"],delete this._rescc["must-revalidate"],this._resHeaders=Object.assign({},this._resHeaders,{"cache-control":i(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),!t.headers["cache-control"]&&/no-cache/.test(t.headers.pragma)&&(this._rescc["no-cache"]=!0)}}now(){return Date.now()}storable(){return!(this._reqcc["no-store"]||!("GET"===this._method||"HEAD"===this._method||"POST"===this._method&&this._hasExplicitExpiration())||-1===r.indexOf(this._status)||this._rescc["no-store"]||this._isShared&&this._rescc.private||this._isShared&&!this._noAuthorization&&!this._allowsStoringAuthenticated()||!(this._resHeaders.expires||this._rescc.public||this._rescc["max-age"]||this._rescc["s-maxage"]||-1!==t.indexOf(this._status)))}_hasExplicitExpiration(){return this._isShared&&this._rescc["s-maxage"]||this._rescc["max-age"]||this._resHeaders.expires}_assertRequestHasHeaders(e){if(!e||!e.headers)throw Error("Request headers missing")}satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);const t=o(e.headers["cache-control"]);if(t["no-cache"]||/no-cache/.test(e.headers.pragma))return!1;if(t["max-age"]&&this.age()>t["max-age"])return!1;if(t["min-fresh"]&&this.timeToLive()<1e3*t["min-fresh"])return!1;if(this.stale()){if(!(t["max-stale"]&&!this._rescc["must-revalidate"]&&(!0===t["max-stale"]||t["max-stale"]>this.age()-this.maxAge())))return!1}return this._requestMatches(e,!1)}_requestMatches(e,t){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||t&&"HEAD"===e.method)&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc["must-revalidate"]||this._rescc.public||this._rescc["s-maxage"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if("*"===this._resHeaders.vary)return!1;const t=this._resHeaders.vary.trim().toLowerCase().split(/\s*,\s*/);for(const r of t)if(e.headers[r]!==this._reqHeaders[r])return!1;return!0}_copyWithoutHopByHopHeaders(e){const t={};for(const r in e)A[r]||(t[r]=e[r]);if(e.connection){const r=e.connection.trim().split(/\s*,\s*/);for(const e of r)delete t[e]}if(t.warning){const e=t.warning.split(/,/).filter(e=>!/^\s*1[0-9][0-9]/.test(e));e.length?t.warning=e.join(",").trim():delete t.warning}return t}responseHeaders(){const e=this._copyWithoutHopByHopHeaders(this._resHeaders),t=this.age();return t>86400&&!this._hasExplicitExpiration()&&this.maxAge()>86400&&(e.warning=(e.warning?e.warning+", ":"")+'113 - "rfc7234 5.5.4"'),e.age=""+Math.round(t),e.date=new Date(this.now()).toUTCString(),e}date(){return this._trustServerDate?this._serverDate():this._responseTime}_serverDate(){const e=Date.parse(this._resHeaders.date);if(isFinite(e)){const t=288e5;if(Math.abs(this._responseTime-e)e&&(e=t)}return e+(this.now()-this._responseTime)/1e3}_ageValue(){const e=parseInt(this._resHeaders.age);return isFinite(e)?e:0}maxAge(){if(!this.storable()||this._rescc["no-cache"])return 0;if(this._isShared&&this._resHeaders["set-cookie"]&&!this._rescc.public&&!this._rescc.immutable)return 0;if("*"===this._resHeaders.vary)return 0;if(this._isShared){if(this._rescc["proxy-revalidate"])return 0;if(this._rescc["s-maxage"])return parseInt(this._rescc["s-maxage"],10)}if(this._rescc["max-age"])return parseInt(this._rescc["max-age"],10);const e=this._rescc.immutable?this._immutableMinTtl:0,t=this._serverDate();if(this._resHeaders.expires){const r=Date.parse(this._resHeaders.expires);return Number.isNaN(r)||rr)return Math.max(e,(t-r)/1e3*this._cacheHeuristic)}return e}timeToLive(){return 1e3*Math.max(0,this.maxAge()-this.age())}stale(){return this.maxAge()<=this.age()}static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}_fromObject(e){if(this._responseTime)throw Error("Reinitialized");if(!e||1!==e.v)throw Error("Invalid serialization");this._responseTime=e.t,this._isShared=e.sh,this._cacheHeuristic=e.ch,this._immutableMinTtl=void 0!==e.imm?e.imm:864e5,this._status=e.st,this._resHeaders=e.resh,this._rescc=e.rescc,this._method=e.m,this._url=e.u,this._host=e.h,this._noAuthorization=e.a,this._reqHeaders=e.reqh,this._reqcc=e.reqcc}toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._cacheHeuristic,imm:this._immutableMinTtl,st:this._status,resh:this._resHeaders,rescc:this._rescc,m:this._method,u:this._url,h:this._host,a:this._noAuthorization,reqh:this._reqHeaders,reqcc:this._reqcc}}revalidationHeaders(e){this._assertRequestHasHeaders(e);const t=this._copyWithoutHopByHopHeaders(e.headers);if(delete t["if-range"],!this._requestMatches(e,!0)||!this.storable())return delete t["if-none-match"],delete t["if-modified-since"],t;this._resHeaders.etag&&(t["if-none-match"]=t["if-none-match"]?`${t["if-none-match"]}, ${this._resHeaders.etag}`:this._resHeaders.etag);if(t["accept-ranges"]||t["if-match"]||t["if-unmodified-since"]||this._method&&"GET"!=this._method){if(delete t["if-modified-since"],t["if-none-match"]){const e=t["if-none-match"].split(/,/).filter(e=>!/^\s*W\//.test(e));e.length?t["if-none-match"]=e.join(",").trim():delete t["if-none-match"]}}else this._resHeaders["last-modified"]&&!t["if-modified-since"]&&(t["if-modified-since"]=this._resHeaders["last-modified"]);return t}revalidatedPolicy(e,t){if(this._assertRequestHasHeaders(e),!t||!t.headers)throw Error("Response headers missing");let r=!1;if(void 0!==t.status&&304!=t.status?r=!1:t.headers.etag&&!/^\s*W\//.test(t.headers.etag)?r=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\s*W\//,"")===t.headers.etag:this._resHeaders.etag&&t.headers.etag?r=this._resHeaders.etag.replace(/^\s*W\//,"")===t.headers.etag.replace(/^\s*W\//,""):this._resHeaders["last-modified"]?r=this._resHeaders["last-modified"]===t.headers["last-modified"]:this._resHeaders.etag||this._resHeaders["last-modified"]||t.headers.etag||t.headers["last-modified"]||(r=!0),!r)return{policy:new this.constructor(e,t),modified:304!=t.status,matches:!1};const A={};for(const e in this._resHeaders)A[e]=e in t.headers&&!n[e]?t.headers[e]:this._resHeaders[e];const o=Object.assign({},t,{status:this._status,method:this._method,headers:A});return{policy:new this.constructor(e,o,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl,trustServerDate:this._trustServerDate}),modified:!1,matches:!0}}}},94935:(e,t,r)=>{"use strict";const A=r(28614),n=r(4016),o=r(97565),i=r(49601),s=Symbol("currentStreamsCount"),a=Symbol("request"),c=Symbol("cachedOriginSet"),g=Symbol("gracefullyClosing"),l=["maxDeflateDynamicTableSize","maxSessionMemory","maxHeaderListPairs","maxOutstandingPings","maxReservedRemoteStreams","maxSendHeaderBlockLength","paddingStrategy","localAddress","path","rejectUnauthorized","minDHSize","ca","cert","clientCertEngine","ciphers","key","pfx","servername","minVersion","maxVersion","secureProtocol","crl","honorCipherOrder","ecdhCurve","dhparam","secureOptions","sessionIdContext"],u=(e,t)=>e.remoteSettings.maxConcurrentStreams>t.remoteSettings.maxConcurrentStreams,h=(e,t)=>{for(const r of e)r[c].lengtht[c].includes(e))&&r[s]+t[s]<=t.remoteSettings.maxConcurrentStreams&&d(r)},p=({agent:e,isFree:t})=>{const r={};for(const A in e.sessions){const n=e.sessions[A].filter(e=>{const r=e[C.kCurrentStreamsCount]{e[g]=!0,0===e[s]&&e.close()};class C extends A{constructor({timeout:e=6e4,maxSessions:t=1/0,maxFreeSessions:r=10,maxCachedTlsSessions:A=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=t,this.maxFreeSessions=r,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new i({maxSize:A})}static normalizeOrigin(e,t){return"string"==typeof e&&(e=new URL(e)),t&&e.hostname!==t&&(e.hostname=t),e.origin}normalizeOptions(e){let t="";if(e)for(const r of l)e[r]&&(t+=":"+e[r]);return t}_tryToCreateNewSession(e,t){if(!(e in this.queue)||!(t in this.queue[e]))return;const r=this.queue[e][t];this._sessionsCount{Array.isArray(r)?(r=[...r],A()):r=[{resolve:A,reject:n}];const i=this.normalizeOptions(t),l=C.normalizeOrigin(e,t&&t.servername);if(void 0===l){for(const{reject:e}of r)e(new TypeError("The `origin` argument needs to be a string or an URL object"));return}if(i in this.sessions){const e=this.sessions[i];let t,A=-1,n=-1;for(const r of e){const e=r.remoteSettings.maxConcurrentStreams;if(e=e||r[g]||r.destroyed)continue;t||(A=e),o>n&&(t=r,n=o)}}if(t){if(1!==r.length){for(const{reject:e}of r){e(new Error(`Expected the length of listeners to be 1, got ${r.length}.\nPlease report this to https://github.com/szmarczak/http2-wrapper/`))}return}return void r[0].resolve(t)}}if(i in this.queue){if(l in this.queue[i])return this.queue[i][l].listeners.push(...r),void this._tryToCreateNewSession(i,l)}else this.queue[i]={};const p=()=>{i in this.queue&&this.queue[i][l]===f&&(delete this.queue[i][l],0===Object.keys(this.queue[i]).length&&delete this.queue[i])},f=()=>{const A=`${l}:${i}`;let n=!1;try{const C=o.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(A),...t});C[s]=0,C[g]=!1;const I=()=>C[s]{this.tlsSessionCache.set(A,e)}),C.once("error",e=>{for(const{reject:t}of r)t(e);this.tlsSessionCache.delete(A)}),C.setTimeout(this.timeout,()=>{C.destroy()}),C.once("close",()=>{if(n){E&&this._freeSessionsCount--,this._sessionsCount--;const e=this.sessions[i];e.splice(e.indexOf(C),1),0===e.length&&delete this.sessions[i]}else{const e=new Error("Session closed without receiving a SETTINGS frame");e.code="HTTP2WRAPPER_NOSETTINGS";for(const{reject:t}of r)t(e);p()}this._tryToCreateNewSession(i,l)});const B=()=>{if(i in this.queue&&I())for(const e of C[c])if(e in this.queue[i]){const{listeners:t}=this.queue[i][e];for(;0!==t.length&&I();)t.shift().resolve(C);const r=this.queue[i];if(0===r[e].listeners.length&&(delete r[e],0===Object.keys(r).length)){delete this.queue[i];break}if(!I())break}};C.on("origin",()=>{C[c]=C.originSet,I()&&(B(),h(this.sessions[i],C))}),C.once("remoteSettings",()=>{if(C.ref(),C.unref(),this._sessionsCount++,f.destroyed){const e=new Error("Agent has been destroyed");for(const t of r)t.reject(e);C.destroy()}else{C[c]=C.originSet;{const e=this.sessions;if(i in e){const t=e[i];t.splice(((e,t,r)=>{let A=0,n=e.length;for(;A>>1;r(e[o],t)?A=o+1:n=o}return A})(t,C,u),0,C)}else e[i]=[C]}this._freeSessionsCount+=1,n=!0,this.emit("session",C),B(),p(),0===C[s]&&this._freeSessionsCount>this.maxFreeSessions&&C.close(),0!==r.length&&(this.getSession(l,t,r),r.length=0),C.on("remoteSettings",()=>{B(),h(this.sessions[i],C)})}}),C[a]=C.request,C.request=(e,t)=>{if(C[g])throw new Error("The session is gracefully closing. No new streams are allowed.");const r=C[a](e,t);return C.ref(),++C[s],C[s]===C.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,r.once("close",()=>{if(E=I(),--C[s],!C.destroyed&&!C.closed&&(((e,t)=>{for(const r of e)t[c].lengthr[c].includes(e))&&t[s]+r[s]<=r.remoteSettings.maxConcurrentStreams&&d(t)})(this.sessions[i],C),I()&&!C.closed)){E||(this._freeSessionsCount++,E=!0);const e=0===C[s];e&&C.unref(),e&&(this._freeSessionsCount>this.maxFreeSessions||C[g])?C.close():(h(this.sessions[i],C),B())}}),r}}catch(e){for(const t of r)t.reject(e);p()}};f.listeners=r,f.completed=!1,f.destroyed=!1,this.queue[i][l]=f,this._tryToCreateNewSession(i,l)})}request(e,t,r,A){return new Promise((n,o)=>{this.getSession(e,t,[{reject:o,resolve:e=>{try{n(e.request(r,A))}catch(e){o(e)}}}])})}createConnection(e,t){return C.connect(e,t)}static connect(e,t){t.ALPNProtocols=["h2"];const r=e.port||443,A=e.hostname||e.host;return void 0===t.servername&&(t.servername=A),n.connect(r,A,t)}closeFreeSessions(){for(const e of Object.values(this.sessions))for(const t of e)0===t[s]&&t.close()}destroy(e){for(const t of Object.values(this.sessions))for(const r of t)r.destroy(e);for(const e of Object.values(this.queue))for(const t of Object.values(e))t.destroyed=!0;this.queue={}}get freeSessions(){return p({agent:this,isFree:!0})}get busySessions(){return p({agent:this,isFree:!1})}}C.kCurrentStreamsCount=s,C.kGracefullyClosing=g,e.exports={Agent:C,globalAgent:new C}},2398:(e,t,r)=>{"use strict";const A=r(98605),n=r(57211),o=r(19476),i=r(49601),s=r(33134),a=r(5209),c=r(50075),g=new i({maxSize:100}),l=new Map,u=(e,t,r)=>{t._httpMessage={shouldKeepAlive:!0};const A=()=>{e.emit("free",t,r)};t.on("free",A);const n=()=>{e.removeSocket(t,r)};t.on("close",n);const o=()=>{e.removeSocket(t,r),t.off("close",n),t.off("free",A),t.off("agentRemove",o)};t.on("agentRemove",o),e.emit("free",t,r)};e.exports=async(e,t,r)=>{if(("string"==typeof e||e instanceof URL)&&(e=c(new URL(e))),"function"==typeof t&&(r=t,t=void 0),t={ALPNProtocols:["h2","http/1.1"],...e,...t,resolveSocket:!0},!Array.isArray(t.ALPNProtocols)||0===t.ALPNProtocols.length)throw new Error("The `ALPNProtocols` option must be an Array with at least one entry");t.protocol=t.protocol||"https:";const i="https:"===t.protocol;t.host=t.hostname||t.host||"localhost",t.session=t.tlsSession,t.servername=t.servername||a(t),t.port=t.port||(i?443:80),t._defaultAgent=i?n.globalAgent:A.globalAgent;const h=t.agent;if(h){if(h.addRequest)throw new Error("The `options.agent` object can contain only `http`, `https` or `http2` properties");t.agent=h[i?"https":"http"]}if(i){if("h2"===await(async e=>{const t=`${e.host}:${e.port}:${e.ALPNProtocols.sort()}`;if(!g.has(t)){if(l.has(t)){return(await l.get(t)).alpnProtocol}const{path:r,agent:A}=e;e.path=e.socketPath;const i=o(e);l.set(t,i);try{const{socket:o,alpnProtocol:s}=await i;if(g.set(t,s),e.path=r,"h2"===s)o.destroy();else{const{globalAgent:t}=n,r=n.Agent.prototype.createConnection;A?A.createConnection===r?u(A,o,e):o.destroy():t.createConnection===r?u(t,o,e):o.destroy()}return l.delete(t),s}catch(e){throw l.delete(t),e}}return g.get(t)})(t))return h&&(t.agent=h.http2),new s(t,r)}return A.request(t,r)},e.exports.protocolCache=g},33134:(e,t,r)=>{"use strict";const A=r(97565),{Writable:n}=r(92413),{Agent:o,globalAgent:i}=r(94935),s=r(53433),a=r(50075),c=r(66192),g=r(50978),{ERR_INVALID_ARG_TYPE:l,ERR_INVALID_PROTOCOL:u,ERR_HTTP_HEADERS_SENT:h,ERR_INVALID_HTTP_TOKEN:p,ERR_HTTP_INVALID_HEADER_VALUE:d,ERR_INVALID_CHAR:C}=r(64080),{HTTP2_HEADER_STATUS:f,HTTP2_HEADER_METHOD:I,HTTP2_HEADER_PATH:E,HTTP2_METHOD_CONNECT:B}=A.constants,y=Symbol("headers"),m=Symbol("origin"),w=Symbol("session"),Q=Symbol("options"),D=Symbol("flushedHeaders"),b=Symbol("jobs"),v=/^[\^`\-\w!#$%&*+.|~]+$/,S=/[^\t\u0020-\u007E\u0080-\u00FF]/;e.exports=class extends n{constructor(e,t,r){super({autoDestroy:!1});const A="string"==typeof e||e instanceof URL;if(A&&(e=a(e instanceof URL?e:new URL(e))),"function"==typeof t||void 0===t?(r=t,t=A?e:{...e}):t={...e,...t},t.h2session)this[w]=t.h2session;else if(!1===t.agent)this.agent=new o({maxFreeSessions:0});else if(void 0===t.agent||null===t.agent)"function"==typeof t.createConnection?(this.agent=new o({maxFreeSessions:0}),this.agent.createConnection=t.createConnection):this.agent=i;else{if("function"!=typeof t.agent.request)throw new l("options.agent",["Agent-like Object","undefined","false"],t.agent);this.agent=t.agent}if(t.protocol&&"https:"!==t.protocol)throw new u(t.protocol,"https:");const n=t.port||t.defaultPort||this.agent&&this.agent.defaultPort||443,s=t.hostname||t.host||"localhost";delete t.hostname,delete t.host,delete t.port;const{timeout:c}=t;if(t.timeout=void 0,this[y]=Object.create(null),this[b]=[],this.socket=null,this.connection=null,this.method=t.method||"GET",this.path=t.path,this.res=null,this.aborted=!1,this.reusedSocket=!1,t.headers)for(const[e,r]of Object.entries(t.headers))this.setHeader(e,r);t.auth&&!("authorization"in this[y])&&(this[y].authorization="Basic "+Buffer.from(t.auth).toString("base64")),t.session=t.tlsSession,t.path=t.socketPath,this[Q]=t,443===n?(this[m]="https://"+s,":authority"in this[y]||(this[y][":authority"]=s)):(this[m]=`https://${s}:${n}`,":authority"in this[y]||(this[y][":authority"]=`${s}:${n}`)),c&&this.setTimeout(c),r&&this.once("response",r),this[D]=!1}get method(){return this[y][I]}set method(e){e&&(this[y][I]=e.toUpperCase())}get path(){return this[y][E]}set path(e){e&&(this[y][E]=e)}get _mustNotHaveABody(){return"GET"===this.method||"HEAD"===this.method||"DELETE"===this.method}_write(e,t,r){if(this._mustNotHaveABody)return void r(new Error("The GET, HEAD and DELETE methods must NOT have a body"));this.flushHeaders();const A=()=>this._request.write(e,t,r);this._request?A():this[b].push(A)}_final(e){if(this.destroyed)return;this.flushHeaders();const t=()=>{this._mustNotHaveABody?e():this._request.end(e)};this._request?t():this[b].push(t)}abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=>this.emit("abort")),this.aborted=!0,this.destroy())}_destroy(e,t){this.res&&this.res._dump(),this._request&&this._request.destroy(),t(e)}async flushHeaders(){if(this[D]||this.destroyed)return;this[D]=!0;const e=this.method===B,t=t=>{if(this._request=t,this.destroyed)return void t.destroy();e||c(t,this,["timeout","continue","close","error"]);const r=e=>(...t)=>{this.writable||this.destroyed?this.once("finish",()=>{e(...t)}):e(...t)};t.once("response",r((r,A,n)=>{const o=new s(this.socket,t.readableHighWaterMark);this.res=o,o.req=this,o.statusCode=r[f],o.headers=r,o.rawHeaders=n,o.once("end",()=>{this.aborted?(o.aborted=!0,o.emit("aborted")):(o.complete=!0,o.socket=null,o.connection=null)}),e?(o.upgrade=!0,this.emit("connect",o,t,Buffer.alloc(0))?this.emit("close"):t.destroy()):(t.on("data",e=>{o._dumped||o.push(e)||t.pause()}),t.once("end",()=>{o.push(null)}),this.emit("response",o)||o._dump())})),t.once("headers",r(e=>this.emit("information",{statusCode:e[f]}))),t.once("trailers",r((e,t,r)=>{const{res:A}=this;A.trailers=e,A.rawTrailers=r}));const{socket:A}=t.session;this.socket=A,this.connection=A;for(const e of this[b])e();this.emit("socket",this.socket)};if(this[w])try{t(this[w].request(this[y]))}catch(e){this.emit("error",e)}else{this.reusedSocket=!0;try{t(await this.agent.request(this[m],this[Q],this[y]))}catch(e){this.emit("error",e)}}}getHeader(e){if("string"!=typeof e)throw new l("name","string",e);return this[y][e.toLowerCase()]}get headersSent(){return this[D]}removeHeader(e){if("string"!=typeof e)throw new l("name","string",e);if(this.headersSent)throw new h("remove");delete this[y][e.toLowerCase()]}setHeader(e,t){if(this.headersSent)throw new h("set");if("string"!=typeof e||!v.test(e)&&!g(e))throw new p("Header name",e);if(void 0===t)throw new d(t,e);if(S.test(t))throw new C("header content",e);this[y][e.toLowerCase()]=t}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,t){const r=()=>this._request.setTimeout(e,t);return this._request?r():this[b].push(r),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}}},53433:(e,t,r)=>{"use strict";const{Readable:A}=r(92413);e.exports=class extends A{constructor(e,t){super({highWaterMark:t,autoDestroy:!1}),this.statusCode=null,this.statusMessage="",this.httpVersion="2.0",this.httpVersionMajor=2,this.httpVersionMinor=0,this.headers={},this.trailers={},this.req=null,this.aborted=!1,this.complete=!1,this.upgrade=null,this.rawHeaders=[],this.rawTrailers=[],this.socket=e,this.connection=e,this._dumped=!1}_destroy(e){this.req._request.destroy(e)}setTimeout(e,t){return this.req.setTimeout(e,t),this}_dump(){this._dumped||(this._dumped=!0,this.removeAllListeners("data"),this.resume())}_read(){this.req&&this.req._request.resume()}}},92353:(e,t,r)=>{"use strict";const A=r(97565),n=r(94935),o=r(33134),i=r(53433),s=r(2398);e.exports={...A,ClientRequest:o,IncomingMessage:i,...n,request:(e,t,r)=>new o(e,t,r),get:(e,t,r)=>{const A=new o(e,t,r);return A.end(),A},auto:s}},5209:(e,t,r)=>{"use strict";const A=r(11631);e.exports=e=>{let t=e.host;const r=e.headers&&e.headers.host;if(r)if(r.startsWith("[")){t=-1===r.indexOf("]")?r:r.slice(1,-1)}else t=r.split(":",1)[0];return A.isIP(t)?"":t}},64080:e=>{"use strict";const t=(t,r,A)=>{e.exports[r]=class extends t{constructor(...e){super("string"==typeof A?A:A(e)),this.name=`${super.name} [${r}]`,this.code=r}}};t(TypeError,"ERR_INVALID_ARG_TYPE",e=>{const t=e[0].includes(".")?"property":"argument";let r=e[1];const A=Array.isArray(r);return A&&(r=`${r.slice(0,-1).join(", ")} or ${r.slice(-1)}`),`The "${e[0]}" ${t} must be ${A?"one of":"of"} type ${r}. Received ${typeof e[2]}`}),t(TypeError,"ERR_INVALID_PROTOCOL",e=>`Protocol "${e[0]}" not supported. Expected "${e[1]}"`),t(Error,"ERR_HTTP_HEADERS_SENT",e=>`Cannot ${e[0]} headers after they are sent to the client`),t(TypeError,"ERR_INVALID_HTTP_TOKEN",e=>`${e[0]} must be a valid HTTP token [${e[1]}]`),t(TypeError,"ERR_HTTP_INVALID_HEADER_VALUE",e=>`Invalid value "${e[0]} for header "${e[1]}"`),t(TypeError,"ERR_INVALID_CHAR",e=>`Invalid character in ${e[0]} [${e[1]}]`)},50978:e=>{"use strict";e.exports=e=>{switch(e){case":method":case":scheme":case":authority":case":path":return!0;default:return!1}}},66192:e=>{"use strict";e.exports=(e,t,r)=>{for(const A of r)e.on(A,(...e)=>t.emit(A,...e))}},50075:e=>{"use strict";e.exports=e=>{const t={protocol:e.protocol,hostname:"string"==typeof e.hostname&&e.hostname.startsWith("[")?e.hostname.slice(1,-1):e.hostname,host:e.host,hash:e.hash,search:e.search,pathname:e.pathname,href:e.href,path:`${e.pathname||""}${e.search||""}`};return"string"==typeof e.port&&0!==e.port.length&&(t.port=Number(e.port)),(e.username||e.password)&&(t.auth=`${e.username||""}:${e.password||""}`),t}},46458:e=>{function t(e){return Array.isArray(e)?e:[e]}const r=/^\s+$/,A=/^\\!/,n=/^\\#/,o=/\r?\n/g,i=/^\.*\/|^\.+$/,s="undefined"!=typeof Symbol?Symbol.for("node-ignore"):"node-ignore",a=/([0-z])-([0-z])/g,c=[[/\\?\s+$/,e=>0===e.indexOf("\\")?" ":""],[/\\\s/g,()=>" "],[/[\\^$.|*+(){]/g,e=>"\\"+e],[/\[([^\]/]*)($|\])/g,(e,t,r)=>{return"]"===r?`[${A=t,A.replace(a,(e,t,r)=>t.charCodeAt(0)<=r.charCodeAt(0)?e:"")}]`:"\\"+e;var A}],[/(?!\\)\?/g,()=>"[^/]"],[/^\//,()=>"^"],[/\//g,()=>"\\/"],[/^\^*\\\*\\\*\\\//,()=>"^(?:.*\\/)?"],[/(?:[^*])$/,e=>/\/$/.test(e)?e+"$":e+"(?=$|\\/$)"],[/^(?=[^^])/,function(){return/\/(?!$)/.test(this)?"^":"(?:^|\\/)"}],[/\\\/\\\*\\\*(?=\\\/|$)/g,(e,t,r)=>t+6t+"[^\\/]*"],[/(\^|\\\/)?\\\*$/,(e,t)=>(t?t+"[^/]+":"[^/]*")+"(?=$|\\/$)"],[/\\\\\\/g,()=>"\\"]],g=Object.create(null),l=e=>"string"==typeof e;class u{constructor(e,t,r,A){this.origin=e,this.pattern=t,this.negative=r,this.regex=A}}const h=(e,t)=>{const r=e;let o=!1;0===e.indexOf("!")&&(o=!0,e=e.substr(1));const i=((e,t,r)=>{const A=g[e];if(A)return A;const n=c.reduce((t,r)=>t.replace(r[0],r[1].bind(e)),e);return g[e]=r?new RegExp(n,"i"):new RegExp(n)})(e=e.replace(A,"!").replace(n,"#"),0,t);return new u(r,e,o,i)},p=(e,t)=>{throw new t(e)},d=(e,t,r)=>{if(!l(e))return r(`path must be a string, but got \`${t}\``,TypeError);if(!e)return r("path must not be empty",TypeError);if(d.isNotRelative(e)){return r(`path should be a ${"`path.relative()`d"} string, but got "${t}"`,RangeError)}return!0},C=e=>i.test(e);d.isNotRelative=C,d.convert=e=>e;class f{constructor({ignorecase:e=!0}={}){var t,r,A;this._rules=[],this._ignorecase=e,t=this,r=s,A=!0,Object.defineProperty(t,r,{value:A}),this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}_addPattern(e){if(e&&e[s])return this._rules=this._rules.concat(e._rules),void(this._added=!0);if((e=>e&&l(e)&&!r.test(e)&&0!==e.indexOf("#"))(e)){const t=h(e,this._ignorecase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,t(l(e)?(e=>e.split(o))(e):e).forEach(this._addPattern,this),this._added&&this._initCache(),this}addPattern(e){return this.add(e)}_testOne(e,t){let r=!1,A=!1;return this._rules.forEach(n=>{const{negative:o}=n;if(A===o&&r!==A||o&&!r&&!A&&!t)return;n.regex.test(e)&&(r=!o,A=o)}),{ignored:r,unignored:A}}_test(e,t,r,A){const n=e&&d.convert(e);return d(n,e,p),this._t(n,t,r,A)}_t(e,t,r,A){if(e in t)return t[e];if(A||(A=e.split("/")),A.pop(),!A.length)return t[e]=this._testOne(e,r);const n=this._t(A.join("/")+"/",t,r,A);return t[e]=n.ignored?n:this._testOne(e,r)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return t(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}}const I=e=>new f(e),E=()=>!1;if(I.isPathValid=e=>d(e&&d.convert(e),e,E),I.default=I,e.exports=I,"undefined"!=typeof process&&(process.env&&process.env.IGNORE_TEST_WIN32||"win32"===process.platform)){const e=e=>/^\\\\\?\\/.test(e)||/["<>|\u0000-\u001F]+/u.test(e)?e:e.replace(/\\/g,"/");d.convert=e;const t=/^[a-z]:\//i;d.isNotRelative=e=>t.test(e)||C(e)}},85870:(e,t,r)=>{try{var A=r(31669);if("function"!=typeof A.inherits)throw"";e.exports=A.inherits}catch(t){e.exports=r(48145)}},48145:e=>{"function"==typeof Object.create?e.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:e.exports=function(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}},44486:e=>{ +/*! + * is-extglob + * + * Copyright (c) 2014-2016, Jon Schlinkert. + * Licensed under the MIT License. + */ +e.exports=function(e){if("string"!=typeof e||""===e)return!1;for(var t;t=/(\\).|([@?!+*]\(.*\))/g.exec(e);){if(t[2])return!0;e=e.slice(t.index+t[0].length)}return!1}},18193:(e,t,r)=>{ +/*! + * is-glob + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ +var A=r(44486),n={"{":"}","(":")","[":"]"},o=/\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/,i=/\\(.)|(^!|[*?{}()[\]]|\(\?)/;e.exports=function(e,t){if("string"!=typeof e||""===e)return!1;if(A(e))return!0;var r,s=o;for(t&&!1===t.strict&&(s=i);r=s.exec(e);){if(r[2])return!0;var a=r.index+r[0].length,c=r[1],g=c?n[c]:null;if(c&&g){var l=e.indexOf(g,a);-1!==l&&(a=l+1)}e=e.slice(a)}return!1}},59235:e=>{"use strict"; +/*! + * is-number + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Released under the MIT License. + */e.exports=function(e){return"number"==typeof e?e-e==0:"string"==typeof e&&""!==e.trim()&&(Number.isFinite?Number.isFinite(+e):isFinite(+e))}},97369:(e,t)=>{var r,A,n,o; +/*! + * is-windows + * + * Copyright © 2015-2018, Jon Schlinkert. + * Released under the MIT License. + */o=function(){"use strict";return function(){return process&&("win32"===process.platform||/^(msys|cygwin)$/.test(process.env.OSTYPE))}},t&&"object"==typeof t?e.exports=o():(A=[],void 0===(n="function"==typeof(r=o)?r.apply(t,A):r)||(e.exports=n))},64151:(e,t,r)=>{var A;r(35747);function n(e,t,r){if("function"==typeof t&&(r=t,t={}),!r){if("function"!=typeof Promise)throw new TypeError("callback not provided");return new Promise((function(r,A){n(e,t||{},(function(e,t){e?A(e):r(t)}))}))}A(e,t||{},(function(e,A){e&&("EACCES"===e.code||t&&t.ignoreErrors)&&(e=null,A=!1),r(e,A)}))}A="win32"===process.platform||global.TESTING_WINDOWS?r(3202):r(2151),e.exports=n,n.sync=function(e,t){try{return A.sync(e,t||{})}catch(e){if(t&&t.ignoreErrors||"EACCES"===e.code)return!1;throw e}}},2151:(e,t,r)=>{e.exports=n,n.sync=function(e,t){return o(A.statSync(e),t)};var A=r(35747);function n(e,t,r){A.stat(e,(function(e,A){r(e,!e&&o(A,t))}))}function o(e,t){return e.isFile()&&function(e,t){var r=e.mode,A=e.uid,n=e.gid,o=void 0!==t.uid?t.uid:process.getuid&&process.getuid(),i=void 0!==t.gid?t.gid:process.getgid&&process.getgid(),s=parseInt("100",8),a=parseInt("010",8),c=parseInt("001",8),g=s|a;return r&c||r&a&&n===i||r&s&&A===o||r&g&&0===o}(e,t)}},3202:(e,t,r)=>{e.exports=o,o.sync=function(e,t){return n(A.statSync(e),e,t)};var A=r(35747);function n(e,t,r){return!(!e.isSymbolicLink()&&!e.isFile())&&function(e,t){var r=void 0!==t.pathExt?t.pathExt:process.env.PATHEXT;if(!r)return!0;if(-1!==(r=r.split(";")).indexOf(""))return!0;for(var A=0;A{"use strict";var A=r(40744);e.exports=A},40744:(e,t,r)=>{"use strict";var A=r(55384),n=r(24129);function o(e){return function(){throw new Error("Function "+e+" is deprecated and cannot be used.")}}e.exports.Type=r(81704),e.exports.Schema=r(8212),e.exports.FAILSAFE_SCHEMA=r(44413),e.exports.JSON_SCHEMA=r(45247),e.exports.CORE_SCHEMA=r(8769),e.exports.DEFAULT_SAFE_SCHEMA=r(65483),e.exports.DEFAULT_FULL_SCHEMA=r(5235),e.exports.load=A.load,e.exports.loadAll=A.loadAll,e.exports.safeLoad=A.safeLoad,e.exports.safeLoadAll=A.safeLoadAll,e.exports.dump=n.dump,e.exports.safeDump=n.safeDump,e.exports.YAMLException=r(17345),e.exports.MINIMAL_SCHEMA=r(44413),e.exports.SAFE_SCHEMA=r(65483),e.exports.DEFAULT_SCHEMA=r(5235),e.exports.scan=o("scan"),e.exports.parse=o("parse"),e.exports.compose=o("compose"),e.exports.addConstructor=o("addConstructor")},28149:e=>{"use strict";function t(e){return null==e}e.exports.isNothing=t,e.exports.isObject=function(e){return"object"==typeof e&&null!==e},e.exports.toArray=function(e){return Array.isArray(e)?e:t(e)?[]:[e]},e.exports.repeat=function(e,t){var r,A="";for(r=0;r{"use strict";var A=r(28149),n=r(17345),o=r(5235),i=r(65483),s=Object.prototype.toString,a=Object.prototype.hasOwnProperty,c={0:"\\0",7:"\\a",8:"\\b",9:"\\t",10:"\\n",11:"\\v",12:"\\f",13:"\\r",27:"\\e",34:'\\"',92:"\\\\",133:"\\N",160:"\\_",8232:"\\L",8233:"\\P"},g=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function l(e){var t,r,o;if(t=e.toString(16).toUpperCase(),e<=255)r="x",o=2;else if(e<=65535)r="u",o=4;else{if(!(e<=4294967295))throw new n("code point within a string may not be greater than 0xFFFFFFFF");r="U",o=8}return"\\"+r+A.repeat("0",o-t.length)+t}function u(e){this.schema=e.schema||o,this.indent=Math.max(1,e.indent||2),this.noArrayIndent=e.noArrayIndent||!1,this.skipInvalid=e.skipInvalid||!1,this.flowLevel=A.isNothing(e.flowLevel)?-1:e.flowLevel,this.styleMap=function(e,t){var r,A,n,o,i,s,c;if(null===t)return{};for(r={},n=0,o=(A=Object.keys(t)).length;nA&&" "!==e[l+1],l=o);else if(!C(i))return 5;u=u&&f(i)}c=c||g&&o-l-1>A&&" "!==e[l+1]}return a||c?r>9&&I(e)?5:c?4:3:u&&!n(e)?1:2}function B(e,t,r,A){e.dump=function(){if(0===t.length)return"''";if(!e.noCompatMode&&-1!==g.indexOf(t))return"'"+t+"'";var o=e.indent*Math.max(1,r),i=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-o),s=A||e.flowLevel>-1&&r>=e.flowLevel;switch(E(t,s,e.indent,i,(function(t){return function(e,t){var r,A;for(r=0,A=e.implicitTypes.length;r"+y(t,e.indent)+m(h(function(e,t){var r,A,n=/(\n+)([^\n]*)/g,o=(s=e.indexOf("\n"),s=-1!==s?s:e.length,n.lastIndex=s,w(e.slice(0,s),t)),i="\n"===e[0]||" "===e[0];var s;for(;A=n.exec(e);){var a=A[1],c=A[2];r=" "===c[0],o+=a+(i||r||""===c?"":"\n")+w(c,t),i=r}return o}(t,i),o));case 5:return'"'+function(e){for(var t,r,A,n="",o=0;o=55296&&t<=56319&&(r=e.charCodeAt(o+1))>=56320&&r<=57343?(n+=l(1024*(t-55296)+r-56320+65536),o++):(A=c[t],n+=!A&&C(t)?e[o]:A||l(t));return n}(t)+'"';default:throw new n("impossible error: invalid scalar style")}}()}function y(e,t){var r=I(e)?String(t):"",A="\n"===e[e.length-1];return r+(A&&("\n"===e[e.length-2]||"\n"===e)?"+":A?"":"-")+"\n"}function m(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function w(e,t){if(""===e||" "===e[0])return e;for(var r,A,n=/ [^ ]/g,o=0,i=0,s=0,a="";r=n.exec(e);)(s=r.index)-o>t&&(A=i>o?i:s,a+="\n"+e.slice(o,A),o=A+1),i=s;return a+="\n",e.length-o>t&&i>o?a+=e.slice(o,i)+"\n"+e.slice(i+1):a+=e.slice(o),a.slice(1)}function Q(e,t,r){var A,o,i,c,g,l;for(i=0,c=(o=r?e.explicitTypes:e.implicitTypes).length;i tag resolver accepts not "'+l+'" style');A=g.represent[l](t,l)}e.dump=A}return!0}return!1}function D(e,t,r,A,o,i){e.tag=null,e.dump=r,Q(e,r,!1)||Q(e,r,!0);var a=s.call(e.dump);A&&(A=e.flowLevel<0||e.flowLevel>t);var c,g,l="[object Object]"===a||"[object Array]"===a;if(l&&(g=-1!==(c=e.duplicates.indexOf(r))),(null!==e.tag&&"?"!==e.tag||g||2!==e.indent&&t>0)&&(o=!1),g&&e.usedDuplicates[c])e.dump="*ref_"+c;else{if(l&&g&&!e.usedDuplicates[c]&&(e.usedDuplicates[c]=!0),"[object Object]"===a)A&&0!==Object.keys(e.dump).length?(!function(e,t,r,A){var o,i,s,a,c,g,l="",u=e.tag,h=Object.keys(r);if(!0===e.sortKeys)h.sort();else if("function"==typeof e.sortKeys)h.sort(e.sortKeys);else if(e.sortKeys)throw new n("sortKeys must be a boolean or a function");for(o=0,i=h.length;o1024)&&(e.dump&&10===e.dump.charCodeAt(0)?g+="?":g+="? "),g+=e.dump,c&&(g+=p(e,t)),D(e,t+1,a,!0,c)&&(e.dump&&10===e.dump.charCodeAt(0)?g+=":":g+=": ",l+=g+=e.dump));e.tag=u,e.dump=l||"{}"}(e,t,e.dump,o),g&&(e.dump="&ref_"+c+e.dump)):(!function(e,t,r){var A,n,o,i,s,a="",c=e.tag,g=Object.keys(r);for(A=0,n=g.length;A1024&&(s+="? "),s+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),D(e,t,i,!1,!1)&&(a+=s+=e.dump));e.tag=c,e.dump="{"+a+"}"}(e,t,e.dump),g&&(e.dump="&ref_"+c+" "+e.dump));else if("[object Array]"===a){var u=e.noArrayIndent&&t>0?t-1:t;A&&0!==e.dump.length?(!function(e,t,r,A){var n,o,i="",s=e.tag;for(n=0,o=r.length;n "+e.dump)}return!0}function b(e,t){var r,A,n=[],o=[];for(function e(t,r,A){var n,o,i;if(null!==t&&"object"==typeof t)if(-1!==(o=r.indexOf(t)))-1===A.indexOf(o)&&A.push(o);else if(r.push(t),Array.isArray(t))for(o=0,i=t.length;o{"use strict";function t(e,t){Error.call(this),this.name="YAMLException",this.reason=e,this.mark=t,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():""),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||""}t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t.prototype.toString=function(e){var t=this.name+": ";return t+=this.reason||"(unknown reason)",!e&&this.mark&&(t+=" "+this.mark.toString()),t},e.exports=t},55384:(e,t,r)=>{"use strict";var A=r(28149),n=r(17345),o=r(30399),i=r(65483),s=r(5235),a=Object.prototype.hasOwnProperty,c=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,g=/[\x85\u2028\u2029]/,l=/[,\[\]\{\}]/,u=/^(?:!|!!|![a-z\-]+!)$/i,h=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function p(e){return 10===e||13===e}function d(e){return 9===e||32===e}function C(e){return 9===e||32===e||10===e||13===e}function f(e){return 44===e||91===e||93===e||123===e||125===e}function I(e){var t;return 48<=e&&e<=57?e-48:97<=(t=32|e)&&t<=102?t-97+10:-1}function E(e){return 48===e?"\0":97===e?"":98===e?"\b":116===e||9===e?"\t":110===e?"\n":118===e?"\v":102===e?"\f":114===e?"\r":101===e?"":32===e?" ":34===e?'"':47===e?"/":92===e?"\\":78===e?"…":95===e?" ":76===e?"\u2028":80===e?"\u2029":""}function B(e){return e<=65535?String.fromCharCode(e):String.fromCharCode(55296+(e-65536>>10),56320+(e-65536&1023))}for(var y=new Array(256),m=new Array(256),w=0;w<256;w++)y[w]=E(w)?1:0,m[w]=E(w);function Q(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||s,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function D(e,t){return new n(t,new o(e.filename,e.input,e.position,e.line,e.position-e.lineStart))}function b(e,t){throw D(e,t)}function v(e,t){e.onWarning&&e.onWarning.call(null,D(e,t))}var S={YAML:function(e,t,r){var A,n,o;null!==e.version&&b(e,"duplication of %YAML directive"),1!==r.length&&b(e,"YAML directive accepts exactly one argument"),null===(A=/^([0-9]+)\.([0-9]+)$/.exec(r[0]))&&b(e,"ill-formed argument of the YAML directive"),n=parseInt(A[1],10),o=parseInt(A[2],10),1!==n&&b(e,"unacceptable YAML version of the document"),e.version=r[0],e.checkLineBreaks=o<2,1!==o&&2!==o&&v(e,"unsupported YAML version of the document")},TAG:function(e,t,r){var A,n;2!==r.length&&b(e,"TAG directive accepts exactly two arguments"),A=r[0],n=r[1],u.test(A)||b(e,"ill-formed tag handle (first argument) of the TAG directive"),a.call(e.tagMap,A)&&b(e,'there is a previously declared suffix for "'+A+'" tag handle'),h.test(n)||b(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[A]=n}};function k(e,t,r,A){var n,o,i,s;if(t1&&(e.result+=A.repeat("\n",t-1))}function L(e,t){var r,A,n=e.tag,o=e.anchor,i=[],s=!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=i),A=e.input.charCodeAt(e.position);0!==A&&45===A&&C(e.input.charCodeAt(e.position+1));)if(s=!0,e.position++,M(e,!0,-1)&&e.lineIndent<=t)i.push(null),A=e.input.charCodeAt(e.position);else if(r=e.line,U(e,t,3,!1,!0),i.push(e.result),M(e,!0,-1),A=e.input.charCodeAt(e.position),(e.line===r||e.lineIndent>t)&&0!==A)b(e,"bad indentation of a sequence entry");else if(e.lineIndentt?w=1:e.lineIndent===t?w=0:e.lineIndentt?w=1:e.lineIndent===t?w=0:e.lineIndentt)&&(U(e,t,4,!0,n)&&(f?h=e.result:p=e.result),f||(F(e,g,l,u,h,p,o,i),u=h=p=null),M(e,!0,-1),s=e.input.charCodeAt(e.position)),e.lineIndent>t&&0!==s)b(e,"bad indentation of a mapping entry");else if(e.lineIndent=0))break;0===o?b(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):g?b(e,"repeat of an indentation width identifier"):(l=t+o-1,g=!0)}if(d(i)){do{i=e.input.charCodeAt(++e.position)}while(d(i));if(35===i)do{i=e.input.charCodeAt(++e.position)}while(!p(i)&&0!==i)}for(;0!==i;){for(K(e),e.lineIndent=0,i=e.input.charCodeAt(e.position);(!g||e.lineIndentl&&(l=e.lineIndent),p(i))u++;else{if(e.lineIndent0){for(n=i,o=0;n>0;n--)(i=I(s=e.input.charCodeAt(++e.position)))>=0?o=(o<<4)+i:b(e,"expected hexadecimal character");e.result+=B(o),e.position++}else b(e,"unknown escape sequence");r=A=e.position}else p(s)?(k(e,r,A,!0),x(e,M(e,!1,t)),r=A=e.position):e.position===e.lineStart&&R(e)?b(e,"unexpected end of the document within a double quoted scalar"):(e.position++,A=e.position)}b(e,"unexpected end of the stream within a double quoted scalar")}(e,h)?D=!0:!function(e){var t,r,A;if(42!==(A=e.input.charCodeAt(e.position)))return!1;for(A=e.input.charCodeAt(++e.position),t=e.position;0!==A&&!C(A)&&!f(A);)A=e.input.charCodeAt(++e.position);return e.position===t&&b(e,"name of an alias node must contain at least one character"),r=e.input.slice(t,e.position),e.anchorMap.hasOwnProperty(r)||b(e,'unidentified alias "'+r+'"'),e.result=e.anchorMap[r],M(e,!0,-1),!0}(e)?function(e,t,r){var A,n,o,i,s,a,c,g,l=e.kind,u=e.result;if(C(g=e.input.charCodeAt(e.position))||f(g)||35===g||38===g||42===g||33===g||124===g||62===g||39===g||34===g||37===g||64===g||96===g)return!1;if((63===g||45===g)&&(C(A=e.input.charCodeAt(e.position+1))||r&&f(A)))return!1;for(e.kind="scalar",e.result="",n=o=e.position,i=!1;0!==g;){if(58===g){if(C(A=e.input.charCodeAt(e.position+1))||r&&f(A))break}else if(35===g){if(C(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&R(e)||r&&f(g))break;if(p(g)){if(s=e.line,a=e.lineStart,c=e.lineIndent,M(e,!1,-1),e.lineIndent>=t){i=!0,g=e.input.charCodeAt(e.position);continue}e.position=o,e.line=s,e.lineStart=a,e.lineIndent=c;break}}i&&(k(e,n,o,!1),x(e,e.line-s),n=o=e.position,i=!1),d(g)||(o=e.position+1),g=e.input.charCodeAt(++e.position)}return k(e,n,o,!1),!!e.result||(e.kind=l,e.result=u,!1)}(e,h,1===r)&&(D=!0,null===e.tag&&(e.tag="?")):(D=!0,null===e.tag&&null===e.anchor||b(e,"alias node should not have any properties")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===w&&(D=c&&L(e,E))),null!==e.tag&&"!"!==e.tag)if("?"===e.tag){for(g=0,l=e.implicitTypes.length;g tag; it should be "'+u.kind+'", not "'+e.kind+'"'),u.resolve(e.result)?(e.result=u.construct(e.result),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):b(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")):b(e,"unknown tag !<"+e.tag+">");return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||D}function T(e){var t,r,A,n,o=e.position,i=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap={},e.anchorMap={};0!==(n=e.input.charCodeAt(e.position))&&(M(e,!0,-1),n=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==n));){for(i=!0,n=e.input.charCodeAt(++e.position),t=e.position;0!==n&&!C(n);)n=e.input.charCodeAt(++e.position);for(A=[],(r=e.input.slice(t,e.position)).length<1&&b(e,"directive name must not be less than one character in length");0!==n;){for(;d(n);)n=e.input.charCodeAt(++e.position);if(35===n){do{n=e.input.charCodeAt(++e.position)}while(0!==n&&!p(n));break}if(p(n))break;for(t=e.position;0!==n&&!C(n);)n=e.input.charCodeAt(++e.position);A.push(e.input.slice(t,e.position))}0!==n&&K(e),a.call(S,r)?S[r](e,r,A):v(e,'unknown document directive "'+r+'"')}M(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,M(e,!0,-1)):i&&b(e,"directives end mark is expected"),U(e,e.lineIndent-1,4,!1,!0),M(e,!0,-1),e.checkLineBreaks&&g.test(e.input.slice(o,e.position))&&v(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&R(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,M(e,!0,-1)):e.position{"use strict";var A=r(28149);function n(e,t,r,A,n){this.name=e,this.buffer=t,this.position=r,this.line=A,this.column=n}n.prototype.getSnippet=function(e,t){var r,n,o,i,s;if(!this.buffer)return null;for(e=e||4,t=t||75,r="",n=this.position;n>0&&-1==="\0\r\n…\u2028\u2029".indexOf(this.buffer.charAt(n-1));)if(n-=1,this.position-n>t/2-1){r=" ... ",n+=5;break}for(o="",i=this.position;it/2-1){o=" ... ",i-=5;break}return s=this.buffer.slice(n,i),A.repeat(" ",e)+r+s+o+"\n"+A.repeat(" ",e+this.position-n+r.length)+"^"},n.prototype.toString=function(e){var t,r="";return this.name&&(r+='in "'+this.name+'" '),r+="at line "+(this.line+1)+", column "+(this.column+1),e||(t=this.getSnippet())&&(r+=":\n"+t),r},e.exports=n},8212:(e,t,r)=>{"use strict";var A=r(28149),n=r(17345),o=r(81704);function i(e,t,r){var A=[];return e.include.forEach((function(e){r=i(e,t,r)})),e[t].forEach((function(e){r.forEach((function(t,r){t.tag===e.tag&&t.kind===e.kind&&A.push(r)})),r.push(e)})),r.filter((function(e,t){return-1===A.indexOf(t)}))}function s(e){this.include=e.include||[],this.implicit=e.implicit||[],this.explicit=e.explicit||[],this.implicit.forEach((function(e){if(e.loadKind&&"scalar"!==e.loadKind)throw new n("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.")})),this.compiledImplicit=i(this,"implicit",[]),this.compiledExplicit=i(this,"explicit",[]),this.compiledTypeMap=function(){var e,t,r={scalar:{},sequence:{},mapping:{},fallback:{}};function A(e){r[e.kind][e.tag]=r.fallback[e.tag]=e}for(e=0,t=arguments.length;e{"use strict";var A=r(8212);e.exports=new A({include:[r(45247)]})},5235:(e,t,r)=>{"use strict";var A=r(8212);e.exports=A.DEFAULT=new A({include:[r(65483)],explicit:[r(61425),r(61872),r(79982)]})},65483:(e,t,r)=>{"use strict";var A=r(8212);e.exports=new A({include:[r(8769)],implicit:[r(83516),r(95441)],explicit:[r(34836),r(6847),r(65173),r(92025)]})},44413:(e,t,r)=>{"use strict";var A=r(8212);e.exports=new A({explicit:[r(19952),r(46557),r(90173)]})},45247:(e,t,r)=>{"use strict";var A=r(8212);e.exports=new A({include:[r(44413)],implicit:[r(40188),r(58357),r(82106),r(71945)]})},81704:(e,t,r)=>{"use strict";var A=r(17345),n=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],o=["scalar","sequence","mapping"];e.exports=function(e,t){var r,i;if(t=t||{},Object.keys(t).forEach((function(t){if(-1===n.indexOf(t))throw new A('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')})),this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.defaultStyle=t.defaultStyle||null,this.styleAliases=(r=t.styleAliases||null,i={},null!==r&&Object.keys(r).forEach((function(e){r[e].forEach((function(t){i[String(t)]=e}))})),i),-1===o.indexOf(this.kind))throw new A('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')}},34836:(e,t,r)=>{"use strict";var A;try{A=r(64293).Buffer}catch(e){}var n=r(81704),o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";e.exports=new n("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,r,A=0,n=e.length,i=o;for(r=0;r64)){if(t<0)return!1;A+=6}return A%8==0},construct:function(e){var t,r,n=e.replace(/[\r\n=]/g,""),i=n.length,s=o,a=0,c=[];for(t=0;t>16&255),c.push(a>>8&255),c.push(255&a)),a=a<<6|s.indexOf(n.charAt(t));return 0===(r=i%4*6)?(c.push(a>>16&255),c.push(a>>8&255),c.push(255&a)):18===r?(c.push(a>>10&255),c.push(a>>2&255)):12===r&&c.push(a>>4&255),A?A.from?A.from(c):new A(c):c},predicate:function(e){return A&&A.isBuffer(e)},represent:function(e){var t,r,A="",n=0,i=e.length,s=o;for(t=0;t>18&63],A+=s[n>>12&63],A+=s[n>>6&63],A+=s[63&n]),n=(n<<8)+e[t];return 0===(r=i%3)?(A+=s[n>>18&63],A+=s[n>>12&63],A+=s[n>>6&63],A+=s[63&n]):2===r?(A+=s[n>>10&63],A+=s[n>>4&63],A+=s[n<<2&63],A+=s[64]):1===r&&(A+=s[n>>2&63],A+=s[n<<4&63],A+=s[64],A+=s[64]),A}})},58357:(e,t,r)=>{"use strict";var A=r(81704);e.exports=new A("tag:yaml.org,2002:bool",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t=e.length;return 4===t&&("true"===e||"True"===e||"TRUE"===e)||5===t&&("false"===e||"False"===e||"FALSE"===e)},construct:function(e){return"true"===e||"True"===e||"TRUE"===e},predicate:function(e){return"[object Boolean]"===Object.prototype.toString.call(e)},represent:{lowercase:function(e){return e?"true":"false"},uppercase:function(e){return e?"TRUE":"FALSE"},camelcase:function(e){return e?"True":"False"}},defaultStyle:"lowercase"})},71945:(e,t,r)=>{"use strict";var A=r(28149),n=r(81704),o=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var i=/^[-+]?[0-9]+e/;e.exports=new n("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(e){return null!==e&&!(!o.test(e)||"_"===e[e.length-1])},construct:function(e){var t,r,A,n;return r="-"===(t=e.replace(/_/g,"").toLowerCase())[0]?-1:1,n=[],"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===r?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:t.indexOf(":")>=0?(t.split(":").forEach((function(e){n.unshift(parseFloat(e,10))})),t=0,A=1,n.forEach((function(e){t+=e*A,A*=60})),r*t):r*parseFloat(t,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||A.isNegativeZero(e))},represent:function(e,t){var r;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(A.isNegativeZero(e))return"-0.0";return r=e.toString(10),i.test(r)?r.replace("e",".e"):r},defaultStyle:"lowercase"})},82106:(e,t,r)=>{"use strict";var A=r(28149),n=r(81704);function o(e){return 48<=e&&e<=55}function i(e){return 48<=e&&e<=57}e.exports=new n("tag:yaml.org,2002:int",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,r,A=e.length,n=0,s=!1;if(!A)return!1;if("-"!==(t=e[n])&&"+"!==t||(t=e[++n]),"0"===t){if(n+1===A)return!0;if("b"===(t=e[++n])){for(n++;n=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0"+e.toString(8):"-0"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})},79982:(e,t,r)=>{"use strict";var A;try{A=r(Object(function(){var e=new Error("Cannot find module 'esprima'");throw e.code="MODULE_NOT_FOUND",e}()))}catch(e){"undefined"!=typeof window&&(A=window.esprima)}var n=r(81704);e.exports=new n("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:function(e){if(null===e)return!1;try{var t="("+e+")",r=A.parse(t,{range:!0});return"Program"===r.type&&1===r.body.length&&"ExpressionStatement"===r.body[0].type&&("ArrowFunctionExpression"===r.body[0].expression.type||"FunctionExpression"===r.body[0].expression.type)}catch(e){return!1}},construct:function(e){var t,r="("+e+")",n=A.parse(r,{range:!0}),o=[];if("Program"!==n.type||1!==n.body.length||"ExpressionStatement"!==n.body[0].type||"ArrowFunctionExpression"!==n.body[0].expression.type&&"FunctionExpression"!==n.body[0].expression.type)throw new Error("Failed to resolve function");return n.body[0].expression.params.forEach((function(e){o.push(e.name)})),t=n.body[0].expression.body.range,"BlockStatement"===n.body[0].expression.body.type?new Function(o,r.slice(t[0]+1,t[1]-1)):new Function(o,"return "+r.slice(t[0],t[1]))},predicate:function(e){return"[object Function]"===Object.prototype.toString.call(e)},represent:function(e){return e.toString()}})},61872:(e,t,r)=>{"use strict";var A=r(81704);e.exports=new A("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:function(e){if(null===e)return!1;if(0===e.length)return!1;var t=e,r=/\/([gim]*)$/.exec(e),A="";if("/"===t[0]){if(r&&(A=r[1]),A.length>3)return!1;if("/"!==t[t.length-A.length-1])return!1}return!0},construct:function(e){var t=e,r=/\/([gim]*)$/.exec(e),A="";return"/"===t[0]&&(r&&(A=r[1]),t=t.slice(1,t.length-A.length-1)),new RegExp(t,A)},predicate:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},represent:function(e){var t="/"+e.source+"/";return e.global&&(t+="g"),e.multiline&&(t+="m"),e.ignoreCase&&(t+="i"),t}})},61425:(e,t,r)=>{"use strict";var A=r(81704);e.exports=new A("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:function(){return!0},construct:function(){},predicate:function(e){return void 0===e},represent:function(){return""}})},90173:(e,t,r)=>{"use strict";var A=r(81704);e.exports=new A("tag:yaml.org,2002:map",{kind:"mapping",construct:function(e){return null!==e?e:{}}})},95441:(e,t,r)=>{"use strict";var A=r(81704);e.exports=new A("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(e){return"<<"===e||null===e}})},40188:(e,t,r)=>{"use strict";var A=r(81704);e.exports=new A("tag:yaml.org,2002:null",{kind:"scalar",resolve:function(e){if(null===e)return!0;var t=e.length;return 1===t&&"~"===e||4===t&&("null"===e||"Null"===e||"NULL"===e)},construct:function(){return null},predicate:function(e){return null===e},represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})},6847:(e,t,r)=>{"use strict";var A=r(81704),n=Object.prototype.hasOwnProperty,o=Object.prototype.toString;e.exports=new A("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(e){if(null===e)return!0;var t,r,A,i,s,a=[],c=e;for(t=0,r=c.length;t{"use strict";var A=r(81704),n=Object.prototype.toString;e.exports=new A("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:function(e){if(null===e)return!0;var t,r,A,o,i,s=e;for(i=new Array(s.length),t=0,r=s.length;t{"use strict";var A=r(81704);e.exports=new A("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(e){return null!==e?e:[]}})},92025:(e,t,r)=>{"use strict";var A=r(81704),n=Object.prototype.hasOwnProperty;e.exports=new A("tag:yaml.org,2002:set",{kind:"mapping",resolve:function(e){if(null===e)return!0;var t,r=e;for(t in r)if(n.call(r,t)&&null!==r[t])return!1;return!0},construct:function(e){return null!==e?e:{}}})},19952:(e,t,r)=>{"use strict";var A=r(81704);e.exports=new A("tag:yaml.org,2002:str",{kind:"scalar",construct:function(e){return null!==e?e:""}})},83516:(e,t,r)=>{"use strict";var A=r(81704),n=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),o=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");e.exports=new A("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(e){return null!==e&&(null!==n.exec(e)||null!==o.exec(e))},construct:function(e){var t,r,A,i,s,a,c,g,l=0,u=null;if(null===(t=n.exec(e))&&(t=o.exec(e)),null===t)throw new Error("Date resolve error");if(r=+t[1],A=+t[2]-1,i=+t[3],!t[4])return new Date(Date.UTC(r,A,i));if(s=+t[4],a=+t[5],c=+t[6],t[7]){for(l=t[7].slice(0,3);l.length<3;)l+="0";l=+l}return t[9]&&(u=6e4*(60*+t[10]+ +(t[11]||0)),"-"===t[9]&&(u=-u)),g=new Date(Date.UTC(r,A,i,s,a,c,l)),u&&g.setTime(g.getTime()-u),g},instanceOf:Date,represent:function(e){return e.toISOString()}})},7427:(e,t)=>{t.stringify=function e(t){if(void 0===t)return t;if(t&&Buffer.isBuffer(t))return JSON.stringify(":base64:"+t.toString("base64"));if(t&&t.toJSON&&(t=t.toJSON()),t&&"object"==typeof t){var r="",A=Array.isArray(t);r=A?"[":"{";var n=!0;for(var o in t){var i="function"==typeof t[o]||!A&&void 0===t[o];Object.hasOwnProperty.call(t,o)&&!i&&(n||(r+=","),n=!1,A?null==t[o]?r+="null":r+=e(t[o]):void 0!==t[o]&&(r+=e(o)+":"+e(t[o])))}return r+=A?"]":"}"}return"string"==typeof t?JSON.stringify(/^:/.test(t)?":"+t:t):void 0===t?"null":JSON.stringify(t)},t.parse=function(e){return JSON.parse(e,(function(e,t){return"string"==typeof t?/^:base64:/.test(t)?Buffer.from(t.substring(8),"base64"):/^:/.test(t)?t.substring(1):t:t}))}},72515:(e,t,r)=>{"use strict";const A=r(28614),n=r(7427);e.exports=class extends A{constructor(e,t){if(super(),this.opts=Object.assign({namespace:"keyv",serialize:n.stringify,deserialize:n.parse},"string"==typeof e?{uri:e}:e,t),!this.opts.store){const e=Object.assign({},this.opts);this.opts.store=(e=>{const t={redis:"@keyv/redis",mongodb:"@keyv/mongo",mongo:"@keyv/mongo",sqlite:"@keyv/sqlite",postgresql:"@keyv/postgres",postgres:"@keyv/postgres",mysql:"@keyv/mysql"};if(e.adapter||e.uri){const A=e.adapter||/^[^:]*/.exec(e.uri)[0];return new(r(89112)(t[A]))(e)}return new Map})(e)}"function"==typeof this.opts.store.on&&this.opts.store.on("error",e=>this.emit("error",e)),this.opts.store.namespace=this.opts.namespace}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}get(e,t){e=this._getKeyPrefix(e);const{store:r}=this.opts;return Promise.resolve().then(()=>r.get(e)).then(e=>"string"==typeof e?this.opts.deserialize(e):e).then(r=>{if(void 0!==r){if(!("number"==typeof r.expires&&Date.now()>r.expires))return t&&t.raw?r:r.value;this.delete(e)}})}set(e,t,r){e=this._getKeyPrefix(e),void 0===r&&(r=this.opts.ttl),0===r&&(r=void 0);const{store:A}=this.opts;return Promise.resolve().then(()=>{const e="number"==typeof r?Date.now()+r:null;return t={value:t,expires:e},this.opts.serialize(t)}).then(t=>A.set(e,t,r)).then(()=>!0)}delete(e){e=this._getKeyPrefix(e);const{store:t}=this.opts;return Promise.resolve().then(()=>t.delete(e))}clear(){const{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}}},89112:e=>{function t(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}t.keys=()=>[],t.resolve=t,t.id=89112,e.exports=t},78962:(e,t,r)=>{var A=r(99513)(r(76169),"DataView");e.exports=A},72574:(e,t,r)=>{var A=r(31713),n=r(86688),o=r(45937),i=r(5017),s=r(79457);function a(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t{var A=r(14620),n=r(73682),o=r(43112),i=r(90640),s=r(9380);function a(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t{var A=r(99513)(r(76169),"Map");e.exports=A},75009:(e,t,r)=>{var A=r(18209),n=r(89706),o=r(43786),i=r(17926),s=r(87345);function a(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t{var A=r(99513)(r(76169),"Promise");e.exports=A},43231:(e,t,r)=>{var A=r(99513)(r(76169),"Set");e.exports=A},46235:(e,t,r)=>{var A=r(75009),n=r(74785),o=r(87760);function i(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new A;++t{var A=r(29197),n=r(35678),o=r(33336),i=r(97163),s=r(43737),a=r(48548);function c(e){var t=this.__data__=new A(e);this.size=t.size}c.prototype.clear=n,c.prototype.delete=o,c.prototype.get=i,c.prototype.has=s,c.prototype.set=a,e.exports=c},69976:(e,t,r)=>{var A=r(76169).Symbol;e.exports=A},2740:(e,t,r)=>{var A=r(76169).Uint8Array;e.exports=A},47063:(e,t,r)=>{var A=r(99513)(r(76169),"WeakMap");e.exports=A},66636:e=>{e.exports=function(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}},33326:e=>{e.exports=function(e,t){for(var r=-1,A=null==e?0:e.length;++r{e.exports=function(e,t){for(var r=-1,A=null==e?0:e.length,n=0,o=[];++r{var A=r(7089),n=r(61771),o=r(82664),i=r(10667),s=r(98041),a=r(32565),c=Object.prototype.hasOwnProperty;e.exports=function(e,t){var r=o(e),g=!r&&n(e),l=!r&&!g&&i(e),u=!r&&!g&&!l&&a(e),h=r||g||l||u,p=h?A(e.length,String):[],d=p.length;for(var C in e)!t&&!c.call(e,C)||h&&("length"==C||l&&("offset"==C||"parent"==C)||u&&("buffer"==C||"byteLength"==C||"byteOffset"==C)||s(C,d))||p.push(C);return p}},60783:e=>{e.exports=function(e,t){for(var r=-1,A=null==e?0:e.length,n=Array(A);++r{e.exports=function(e,t){for(var r=-1,A=t.length,n=e.length;++r{e.exports=function(e,t,r,A){var n=-1,o=null==e?0:e.length;for(A&&o&&(r=e[++n]);++n{e.exports=function(e,t){for(var r=-1,A=null==e?0:e.length;++r{e.exports=function(e){return e.split("")}},11852:e=>{var t=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;e.exports=function(e){return e.match(t)||[]}},26943:(e,t,r)=>{var A=r(91198),n=r(71074);e.exports=function(e,t,r){(void 0!==r&&!n(e[t],r)||void 0===r&&!(t in e))&&A(e,t,r)}},65759:(e,t,r)=>{var A=r(91198),n=r(71074),o=Object.prototype.hasOwnProperty;e.exports=function(e,t,r){var i=e[t];o.call(e,t)&&n(i,r)&&(void 0!==r||t in e)||A(e,t,r)}},39836:(e,t,r)=>{var A=r(71074);e.exports=function(e,t){for(var r=e.length;r--;)if(A(e[r][0],t))return r;return-1}},28628:(e,t,r)=>{var A=r(75182),n=r(42185);e.exports=function(e,t){return e&&A(t,n(t),e)}},78707:(e,t,r)=>{var A=r(75182),n=r(24887);e.exports=function(e,t){return e&&A(t,n(t),e)}},91198:(e,t,r)=>{var A=r(65);e.exports=function(e,t,r){"__proto__"==t&&A?A(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}},41076:(e,t,r)=>{var A=r(22851),n=r(33326),o=r(65759),i=r(28628),s=r(78707),a=r(64266),c=r(87229),g=r(23105),l=r(60741),u=r(60753),h=r(64420),p=r(79435),d=r(27908),C=r(37836),f=r(88438),I=r(82664),E=r(10667),B=r(13349),y=r(46778),m=r(33931),w=r(42185),Q={};Q["[object Arguments]"]=Q["[object Array]"]=Q["[object ArrayBuffer]"]=Q["[object DataView]"]=Q["[object Boolean]"]=Q["[object Date]"]=Q["[object Float32Array]"]=Q["[object Float64Array]"]=Q["[object Int8Array]"]=Q["[object Int16Array]"]=Q["[object Int32Array]"]=Q["[object Map]"]=Q["[object Number]"]=Q["[object Object]"]=Q["[object RegExp]"]=Q["[object Set]"]=Q["[object String]"]=Q["[object Symbol]"]=Q["[object Uint8Array]"]=Q["[object Uint8ClampedArray]"]=Q["[object Uint16Array]"]=Q["[object Uint32Array]"]=!0,Q["[object Error]"]=Q["[object Function]"]=Q["[object WeakMap]"]=!1,e.exports=function e(t,r,D,b,v,S){var k,N=1&r,F=2&r,K=4&r;if(D&&(k=v?D(t,b,v,S):D(t)),void 0!==k)return k;if(!y(t))return t;var M=I(t);if(M){if(k=d(t),!N)return c(t,k)}else{var R=p(t),x="[object Function]"==R||"[object GeneratorFunction]"==R;if(E(t))return a(t,N);if("[object Object]"==R||"[object Arguments]"==R||x&&!v){if(k=F||x?{}:f(t),!N)return F?l(t,s(k,t)):g(t,i(k,t))}else{if(!Q[R])return v?t:{};k=C(t,R,N)}}S||(S=new A);var L=S.get(t);if(L)return L;S.set(t,k),m(t)?t.forEach((function(A){k.add(e(A,r,D,A,t,S))})):B(t)&&t.forEach((function(A,n){k.set(n,e(A,r,D,n,t,S))}));var P=K?F?h:u:F?keysIn:w,O=M?void 0:P(t);return n(O||t,(function(A,n){O&&(A=t[n=A]),o(k,n,e(A,r,D,n,t,S))})),k}},15178:(e,t,r)=>{var A=r(46778),n=Object.create,o=function(){function e(){}return function(t){if(!A(t))return{};if(n)return n(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();e.exports=o},93274:(e,t,r)=>{var A=r(40945),n=r(958);e.exports=function e(t,r,o,i,s){var a=-1,c=t.length;for(o||(o=n),s||(s=[]);++a0&&o(g)?r>1?e(g,r-1,o,i,s):A(s,g):i||(s[s.length]=g)}return s}},31689:(e,t,r)=>{var A=r(59907)();e.exports=A},62164:(e,t,r)=>{var A=r(31689),n=r(42185);e.exports=function(e,t){return e&&A(e,t,n)}},84173:(e,t,r)=>{var A=r(56725),n=r(49874);e.exports=function(e,t){for(var r=0,o=(t=A(t,e)).length;null!=e&&r{var A=r(40945),n=r(82664);e.exports=function(e,t,r){var o=t(e);return n(e)?o:A(o,r(e))}},52502:(e,t,r)=>{var A=r(69976),n=r(2854),o=r(87427),i=A?A.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?n(e):o(e)}},95325:e=>{var t=Object.prototype.hasOwnProperty;e.exports=function(e,r){return null!=e&&t.call(e,r)}},3881:e=>{e.exports=function(e,t){return null!=e&&t in Object(e)}},76357:(e,t,r)=>{var A=r(52502),n=r(38496);e.exports=function(e){return n(e)&&"[object Arguments]"==A(e)}},74195:(e,t,r)=>{var A=r(48957),n=r(38496);e.exports=function e(t,r,o,i,s){return t===r||(null==t||null==r||!n(t)&&!n(r)?t!=t&&r!=r:A(t,r,o,i,e,s))}},48957:(e,t,r)=>{var A=r(22851),n=r(75500),o=r(28475),i=r(50245),s=r(79435),a=r(82664),c=r(10667),g=r(32565),l="[object Object]",u=Object.prototype.hasOwnProperty;e.exports=function(e,t,r,h,p,d){var C=a(e),f=a(t),I=C?"[object Array]":s(e),E=f?"[object Array]":s(t),B=(I="[object Arguments]"==I?l:I)==l,y=(E="[object Arguments]"==E?l:E)==l,m=I==E;if(m&&c(e)){if(!c(t))return!1;C=!0,B=!1}if(m&&!B)return d||(d=new A),C||g(e)?n(e,t,r,h,p,d):o(e,t,I,r,h,p,d);if(!(1&r)){var w=B&&u.call(e,"__wrapped__"),Q=y&&u.call(t,"__wrapped__");if(w||Q){var D=w?e.value():e,b=Q?t.value():t;return d||(d=new A),p(D,b,r,h,d)}}return!!m&&(d||(d=new A),i(e,t,r,h,p,d))}},55994:(e,t,r)=>{var A=r(79435),n=r(38496);e.exports=function(e){return n(e)&&"[object Map]"==A(e)}},66470:(e,t,r)=>{var A=r(22851),n=r(74195);e.exports=function(e,t,r,o){var i=r.length,s=i,a=!o;if(null==e)return!s;for(e=Object(e);i--;){var c=r[i];if(a&&c[2]?c[1]!==e[c[0]]:!(c[0]in e))return!1}for(;++i{var A=r(92533),n=r(15061),o=r(46778),i=r(76384),s=/^\[object .+?Constructor\]$/,a=Function.prototype,c=Object.prototype,g=a.toString,l=c.hasOwnProperty,u=RegExp("^"+g.call(l).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!o(e)||n(e))&&(A(e)?u:s).test(i(e))}},28612:(e,t,r)=>{var A=r(79435),n=r(38496);e.exports=function(e){return n(e)&&"[object Set]"==A(e)}},98998:(e,t,r)=>{var A=r(52502),n=r(46369),o=r(38496),i={};i["[object Float32Array]"]=i["[object Float64Array]"]=i["[object Int8Array]"]=i["[object Int16Array]"]=i["[object Int32Array]"]=i["[object Uint8Array]"]=i["[object Uint8ClampedArray]"]=i["[object Uint16Array]"]=i["[object Uint32Array]"]=!0,i["[object Arguments]"]=i["[object Array]"]=i["[object ArrayBuffer]"]=i["[object Boolean]"]=i["[object DataView]"]=i["[object Date]"]=i["[object Error]"]=i["[object Function]"]=i["[object Map]"]=i["[object Number]"]=i["[object Object]"]=i["[object RegExp]"]=i["[object Set]"]=i["[object String]"]=i["[object WeakMap]"]=!1,e.exports=function(e){return o(e)&&n(e.length)&&!!i[A(e)]}},42208:(e,t,r)=>{var A=r(96962),n=r(90348),o=r(61977),i=r(82664),s=r(7430);e.exports=function(e){return"function"==typeof e?e:null==e?o:"object"==typeof e?i(e)?n(e[0],e[1]):A(e):s(e)}},50994:(e,t,r)=>{var A=r(89513),n=r(60657),o=Object.prototype.hasOwnProperty;e.exports=function(e){if(!A(e))return n(e);var t=[];for(var r in Object(e))o.call(e,r)&&"constructor"!=r&&t.push(r);return t}},8372:(e,t,r)=>{var A=r(46778),n=r(89513),o=r(95632),i=Object.prototype.hasOwnProperty;e.exports=function(e){if(!A(e))return o(e);var t=n(e),r=[];for(var s in e)("constructor"!=s||!t&&i.call(e,s))&&r.push(s);return r}},96962:(e,t,r)=>{var A=r(66470),n=r(98705),o=r(12757);e.exports=function(e){var t=n(e);return 1==t.length&&t[0][2]?o(t[0][0],t[0][1]):function(r){return r===e||A(r,e,t)}}},90348:(e,t,r)=>{var A=r(74195),n=r(44674),o=r(34878),i=r(70474),s=r(20925),a=r(12757),c=r(49874);e.exports=function(e,t){return i(e)&&s(t)?a(c(e),t):function(r){var i=n(r,e);return void 0===i&&i===t?o(r,e):A(t,i,3)}}},51264:(e,t,r)=>{var A=r(22851),n=r(26943),o=r(31689),i=r(16834),s=r(46778),a=r(24887),c=r(36883);e.exports=function e(t,r,g,l,u){t!==r&&o(r,(function(o,a){if(u||(u=new A),s(o))i(t,r,a,g,e,l,u);else{var h=l?l(c(t,a),o,a+"",t,r,u):void 0;void 0===h&&(h=o),n(t,a,h)}}),a)}},16834:(e,t,r)=>{var A=r(26943),n=r(64266),o=r(58042),i=r(87229),s=r(88438),a=r(61771),c=r(82664),g=r(16064),l=r(10667),u=r(92533),h=r(46778),p=r(11672),d=r(32565),C=r(36883),f=r(36506);e.exports=function(e,t,r,I,E,B,y){var m=C(e,r),w=C(t,r),Q=y.get(w);if(Q)A(e,r,Q);else{var D=B?B(m,w,r+"",e,t,y):void 0,b=void 0===D;if(b){var v=c(w),S=!v&&l(w),k=!v&&!S&&d(w);D=w,v||S||k?c(m)?D=m:g(m)?D=i(m):S?(b=!1,D=n(w,!0)):k?(b=!1,D=o(w,!0)):D=[]:p(w)||a(w)?(D=m,a(m)?D=f(m):h(m)&&!u(m)||(D=s(w))):b=!1}b&&(y.set(w,D),E(D,w,I,B,y),y.delete(w)),A(e,r,D)}}},72204:(e,t,r)=>{var A=r(35314),n=r(34878);e.exports=function(e,t){return A(e,t,(function(t,r){return n(e,r)}))}},35314:(e,t,r)=>{var A=r(84173),n=r(10624),o=r(56725);e.exports=function(e,t,r){for(var i=-1,s=t.length,a={};++i{e.exports=function(e){return function(t){return null==t?void 0:t[e]}}},43018:(e,t,r)=>{var A=r(84173);e.exports=function(e){return function(t){return A(t,e)}}},51587:e=>{e.exports=function(e){return function(t){return null==e?void 0:e[t]}}},30383:(e,t,r)=>{var A=r(61977),n=r(44322),o=r(3111);e.exports=function(e,t){return o(n(e,t,A),e+"")}},10624:(e,t,r)=>{var A=r(65759),n=r(56725),o=r(98041),i=r(46778),s=r(49874);e.exports=function(e,t,r,a){if(!i(e))return e;for(var c=-1,g=(t=n(t,e)).length,l=g-1,u=e;null!=u&&++c{var A=r(4967),n=r(65),o=r(61977),i=n?function(e,t){return n(e,"toString",{configurable:!0,enumerable:!1,value:A(t),writable:!0})}:o;e.exports=i},27708:e=>{e.exports=function(e,t,r){var A=-1,n=e.length;t<0&&(t=-t>n?0:n+t),(r=r>n?n:r)<0&&(r+=n),n=t>r?0:r-t>>>0,t>>>=0;for(var o=Array(n);++A{e.exports=function(e,t){for(var r=-1,A=Array(e);++r{var A=r(69976),n=r(60783),o=r(82664),i=r(65558),s=A?A.prototype:void 0,a=s?s.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(o(t))return n(t,e)+"";if(i(t))return a?a.call(t):"";var r=t+"";return"0"==r&&1/t==-1/0?"-0":r}},73635:e=>{e.exports=function(e){return function(t){return e(t)}}},18290:(e,t,r)=>{var A=r(60783);e.exports=function(e,t){return A(t,(function(t){return e[t]}))}},93022:e=>{e.exports=function(e,t){return e.has(t)}},56725:(e,t,r)=>{var A=r(82664),n=r(70474),o=r(8689),i=r(33580);e.exports=function(e,t){return A(e)?e:n(e,t)?[e]:o(i(e))}},92568:(e,t,r)=>{var A=r(27708);e.exports=function(e,t,r){var n=e.length;return r=void 0===r?n:r,!t&&r>=n?e:A(e,t,r)}},76255:(e,t,r)=>{var A=r(2740);e.exports=function(e){var t=new e.constructor(e.byteLength);return new A(t).set(new A(e)),t}},64266:(e,t,r)=>{e=r.nmd(e);var A=r(76169),n=t&&!t.nodeType&&t,o=n&&e&&!e.nodeType&&e,i=o&&o.exports===n?A.Buffer:void 0,s=i?i.allocUnsafe:void 0;e.exports=function(e,t){if(t)return e.slice();var r=e.length,A=s?s(r):new e.constructor(r);return e.copy(A),A}},63749:(e,t,r)=>{var A=r(76255);e.exports=function(e,t){var r=t?A(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}},41705:e=>{var t=/\w*$/;e.exports=function(e){var r=new e.constructor(e.source,t.exec(e));return r.lastIndex=e.lastIndex,r}},25791:(e,t,r)=>{var A=r(69976),n=A?A.prototype:void 0,o=n?n.valueOf:void 0;e.exports=function(e){return o?Object(o.call(e)):{}}},58042:(e,t,r)=>{var A=r(76255);e.exports=function(e,t){var r=t?A(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}},87229:e=>{e.exports=function(e,t){var r=-1,A=e.length;for(t||(t=Array(A));++r{var A=r(65759),n=r(91198);e.exports=function(e,t,r,o){var i=!r;r||(r={});for(var s=-1,a=t.length;++s{var A=r(75182),n=r(68727);e.exports=function(e,t){return A(e,n(e),t)}},60741:(e,t,r)=>{var A=r(75182),n=r(35368);e.exports=function(e,t){return A(e,n(e),t)}},14429:(e,t,r)=>{var A=r(76169)["__core-js_shared__"];e.exports=A},27913:(e,t,r)=>{var A=r(30383),n=r(33193);e.exports=function(e){return A((function(t,r){var A=-1,o=r.length,i=o>1?r[o-1]:void 0,s=o>2?r[2]:void 0;for(i=e.length>3&&"function"==typeof i?(o--,i):void 0,s&&n(r[0],r[1],s)&&(i=o<3?void 0:i,o=1),t=Object(t);++A{e.exports=function(e){return function(t,r,A){for(var n=-1,o=Object(t),i=A(t),s=i.length;s--;){var a=i[e?s:++n];if(!1===r(o[a],a,o))break}return t}}},56989:(e,t,r)=>{var A=r(92568),n=r(93024),o=r(30475),i=r(33580);e.exports=function(e){return function(t){t=i(t);var r=n(t)?o(t):void 0,s=r?r[0]:t.charAt(0),a=r?A(r,1).join(""):t.slice(1);return s[e]()+a}}},30369:(e,t,r)=>{var A=r(66054),n=r(68968),o=r(97684),i=RegExp("['’]","g");e.exports=function(e){return function(t){return A(o(n(t).replace(i,"")),e,"")}}},69922:(e,t,r)=>{var A=r(51587)({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"});e.exports=A},65:(e,t,r)=>{var A=r(99513),n=function(){try{var e=A(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();e.exports=n},75500:(e,t,r)=>{var A=r(46235),n=r(17765),o=r(93022);e.exports=function(e,t,r,i,s,a){var c=1&r,g=e.length,l=t.length;if(g!=l&&!(c&&l>g))return!1;var u=a.get(e);if(u&&a.get(t))return u==t;var h=-1,p=!0,d=2&r?new A:void 0;for(a.set(e,t),a.set(t,e);++h{var A=r(69976),n=r(2740),o=r(71074),i=r(75500),s=r(7877),a=r(7442),c=A?A.prototype:void 0,g=c?c.valueOf:void 0;e.exports=function(e,t,r,A,c,l,u){switch(r){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!l(new n(e),new n(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return o(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var h=s;case"[object Set]":var p=1&A;if(h||(h=a),e.size!=t.size&&!p)return!1;var d=u.get(e);if(d)return d==t;A|=2,u.set(e,t);var C=i(h(e),h(t),A,c,l,u);return u.delete(e),C;case"[object Symbol]":if(g)return g.call(e)==g.call(t)}return!1}},50245:(e,t,r)=>{var A=r(60753),n=Object.prototype.hasOwnProperty;e.exports=function(e,t,r,o,i,s){var a=1&r,c=A(e),g=c.length;if(g!=A(t).length&&!a)return!1;for(var l=g;l--;){var u=c[l];if(!(a?u in t:n.call(t,u)))return!1}var h=s.get(e);if(h&&s.get(t))return h==t;var p=!0;s.set(e,t),s.set(t,e);for(var d=a;++l{var A=r(54690),n=r(44322),o=r(3111);e.exports=function(e){return o(n(e,void 0,A),e+"")}},68399:e=>{var t="object"==typeof global&&global&&global.Object===Object&&global;e.exports=t},60753:(e,t,r)=>{var A=r(40104),n=r(68727),o=r(42185);e.exports=function(e){return A(e,o,n)}},64420:(e,t,r)=>{var A=r(40104),n=r(35368),o=r(24887);e.exports=function(e){return A(e,o,n)}},59253:(e,t,r)=>{var A=r(69448);e.exports=function(e,t){var r=e.__data__;return A(t)?r["string"==typeof t?"string":"hash"]:r.map}},98705:(e,t,r)=>{var A=r(20925),n=r(42185);e.exports=function(e){for(var t=n(e),r=t.length;r--;){var o=t[r],i=e[o];t[r]=[o,i,A(i)]}return t}},99513:(e,t,r)=>{var A=r(91686),n=r(98054);e.exports=function(e,t){var r=n(e,t);return A(r)?r:void 0}},41181:(e,t,r)=>{var A=r(64309)(Object.getPrototypeOf,Object);e.exports=A},2854:(e,t,r)=>{var A=r(69976),n=Object.prototype,o=n.hasOwnProperty,i=n.toString,s=A?A.toStringTag:void 0;e.exports=function(e){var t=o.call(e,s),r=e[s];try{e[s]=void 0;var A=!0}catch(e){}var n=i.call(e);return A&&(t?e[s]=r:delete e[s]),n}},68727:(e,t,r)=>{var A=r(9073),n=r(62162),o=Object.prototype.propertyIsEnumerable,i=Object.getOwnPropertySymbols,s=i?function(e){return null==e?[]:(e=Object(e),A(i(e),(function(t){return o.call(e,t)})))}:n;e.exports=s},35368:(e,t,r)=>{var A=r(40945),n=r(41181),o=r(68727),i=r(62162),s=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)A(t,o(e)),e=n(e);return t}:i;e.exports=s},79435:(e,t,r)=>{var A=r(78962),n=r(63603),o=r(5825),i=r(43231),s=r(47063),a=r(52502),c=r(76384),g=c(A),l=c(n),u=c(o),h=c(i),p=c(s),d=a;(A&&"[object DataView]"!=d(new A(new ArrayBuffer(1)))||n&&"[object Map]"!=d(new n)||o&&"[object Promise]"!=d(o.resolve())||i&&"[object Set]"!=d(new i)||s&&"[object WeakMap]"!=d(new s))&&(d=function(e){var t=a(e),r="[object Object]"==t?e.constructor:void 0,A=r?c(r):"";if(A)switch(A){case g:return"[object DataView]";case l:return"[object Map]";case u:return"[object Promise]";case h:return"[object Set]";case p:return"[object WeakMap]"}return t}),e.exports=d},98054:e=>{e.exports=function(e,t){return null==e?void 0:e[t]}},71507:(e,t,r)=>{var A=r(56725),n=r(61771),o=r(82664),i=r(98041),s=r(46369),a=r(49874);e.exports=function(e,t,r){for(var c=-1,g=(t=A(t,e)).length,l=!1;++c{var t=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");e.exports=function(e){return t.test(e)}},60466:e=>{var t=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;e.exports=function(e){return t.test(e)}},31713:(e,t,r)=>{var A=r(52437);e.exports=function(){this.__data__=A?A(null):{},this.size=0}},86688:e=>{e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},45937:(e,t,r)=>{var A=r(52437),n=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(A){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return n.call(t,e)?t[e]:void 0}},5017:(e,t,r)=>{var A=r(52437),n=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return A?void 0!==t[e]:n.call(t,e)}},79457:(e,t,r)=>{var A=r(52437);e.exports=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=A&&void 0===t?"__lodash_hash_undefined__":t,this}},27908:e=>{var t=Object.prototype.hasOwnProperty;e.exports=function(e){var r=e.length,A=new e.constructor(r);return r&&"string"==typeof e[0]&&t.call(e,"index")&&(A.index=e.index,A.input=e.input),A}},37836:(e,t,r)=>{var A=r(76255),n=r(63749),o=r(41705),i=r(25791),s=r(58042);e.exports=function(e,t,r){var a=e.constructor;switch(t){case"[object ArrayBuffer]":return A(e);case"[object Boolean]":case"[object Date]":return new a(+e);case"[object DataView]":return n(e,r);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return s(e,r);case"[object Map]":return new a;case"[object Number]":case"[object String]":return new a(e);case"[object RegExp]":return o(e);case"[object Set]":return new a;case"[object Symbol]":return i(e)}}},88438:(e,t,r)=>{var A=r(15178),n=r(41181),o=r(89513);e.exports=function(e){return"function"!=typeof e.constructor||o(e)?{}:A(n(e))}},958:(e,t,r)=>{var A=r(69976),n=r(61771),o=r(82664),i=A?A.isConcatSpreadable:void 0;e.exports=function(e){return o(e)||n(e)||!!(i&&e&&e[i])}},98041:e=>{var t=/^(?:0|[1-9]\d*)$/;e.exports=function(e,r){var A=typeof e;return!!(r=null==r?9007199254740991:r)&&("number"==A||"symbol"!=A&&t.test(e))&&e>-1&&e%1==0&&e{var A=r(71074),n=r(41929),o=r(98041),i=r(46778);e.exports=function(e,t,r){if(!i(r))return!1;var s=typeof t;return!!("number"==s?n(r)&&o(t,r.length):"string"==s&&t in r)&&A(r[t],e)}},70474:(e,t,r)=>{var A=r(82664),n=r(65558),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,i=/^\w*$/;e.exports=function(e,t){if(A(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!n(e))||(i.test(e)||!o.test(e)||null!=t&&e in Object(t))}},69448:e=>{e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},15061:(e,t,r)=>{var A,n=r(14429),o=(A=/[^.]+$/.exec(n&&n.keys&&n.keys.IE_PROTO||""))?"Symbol(src)_1."+A:"";e.exports=function(e){return!!o&&o in e}},89513:e=>{var t=Object.prototype;e.exports=function(e){var r=e&&e.constructor;return e===("function"==typeof r&&r.prototype||t)}},20925:(e,t,r)=>{var A=r(46778);e.exports=function(e){return e==e&&!A(e)}},82262:e=>{e.exports=function(e){for(var t,r=[];!(t=e.next()).done;)r.push(t.value);return r}},14620:e=>{e.exports=function(){this.__data__=[],this.size=0}},73682:(e,t,r)=>{var A=r(39836),n=Array.prototype.splice;e.exports=function(e){var t=this.__data__,r=A(t,e);return!(r<0)&&(r==t.length-1?t.pop():n.call(t,r,1),--this.size,!0)}},43112:(e,t,r)=>{var A=r(39836);e.exports=function(e){var t=this.__data__,r=A(t,e);return r<0?void 0:t[r][1]}},90640:(e,t,r)=>{var A=r(39836);e.exports=function(e){return A(this.__data__,e)>-1}},9380:(e,t,r)=>{var A=r(39836);e.exports=function(e,t){var r=this.__data__,n=A(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}},18209:(e,t,r)=>{var A=r(72574),n=r(29197),o=r(63603);e.exports=function(){this.size=0,this.__data__={hash:new A,map:new(o||n),string:new A}}},89706:(e,t,r)=>{var A=r(59253);e.exports=function(e){var t=A(this,e).delete(e);return this.size-=t?1:0,t}},43786:(e,t,r)=>{var A=r(59253);e.exports=function(e){return A(this,e).get(e)}},17926:(e,t,r)=>{var A=r(59253);e.exports=function(e){return A(this,e).has(e)}},87345:(e,t,r)=>{var A=r(59253);e.exports=function(e,t){var r=A(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}},7877:e=>{e.exports=function(e){var t=-1,r=Array(e.size);return e.forEach((function(e,A){r[++t]=[A,e]})),r}},12757:e=>{e.exports=function(e,t){return function(r){return null!=r&&(r[e]===t&&(void 0!==t||e in Object(r)))}}},31948:(e,t,r)=>{var A=r(74499);e.exports=function(e){var t=A(e,(function(e){return 500===r.size&&r.clear(),e})),r=t.cache;return t}},52437:(e,t,r)=>{var A=r(99513)(Object,"create");e.exports=A},60657:(e,t,r)=>{var A=r(64309)(Object.keys,Object);e.exports=A},95632:e=>{e.exports=function(e){var t=[];if(null!=e)for(var r in Object(e))t.push(r);return t}},26391:(e,t,r)=>{e=r.nmd(e);var A=r(68399),n=t&&!t.nodeType&&t,o=n&&e&&!e.nodeType&&e,i=o&&o.exports===n&&A.process,s=function(){try{var e=o&&o.require&&o.require("util").types;return e||i&&i.binding&&i.binding("util")}catch(e){}}();e.exports=s},87427:e=>{var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},64309:e=>{e.exports=function(e,t){return function(r){return e(t(r))}}},44322:(e,t,r)=>{var A=r(66636),n=Math.max;e.exports=function(e,t,r){return t=n(void 0===t?e.length-1:t,0),function(){for(var o=arguments,i=-1,s=n(o.length-t,0),a=Array(s);++i{var A=r(68399),n="object"==typeof self&&self&&self.Object===Object&&self,o=A||n||Function("return this")();e.exports=o},36883:e=>{e.exports=function(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]}},74785:e=>{e.exports=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this}},87760:e=>{e.exports=function(e){return this.__data__.has(e)}},7442:e=>{e.exports=function(e){var t=-1,r=Array(e.size);return e.forEach((function(e){r[++t]=e})),r}},3111:(e,t,r)=>{var A=r(4899),n=r(19908)(A);e.exports=n},19908:e=>{var t=Date.now;e.exports=function(e){var r=0,A=0;return function(){var n=t(),o=16-(n-A);if(A=n,o>0){if(++r>=800)return arguments[0]}else r=0;return e.apply(void 0,arguments)}}},35678:(e,t,r)=>{var A=r(29197);e.exports=function(){this.__data__=new A,this.size=0}},33336:e=>{e.exports=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}},97163:e=>{e.exports=function(e){return this.__data__.get(e)}},43737:e=>{e.exports=function(e){return this.__data__.has(e)}},48548:(e,t,r)=>{var A=r(29197),n=r(63603),o=r(75009);e.exports=function(e,t){var r=this.__data__;if(r instanceof A){var i=r.__data__;if(!n||i.length<199)return i.push([e,t]),this.size=++r.size,this;r=this.__data__=new o(i)}return r.set(e,t),this.size=r.size,this}},30475:(e,t,r)=>{var A=r(1051),n=r(93024),o=r(297);e.exports=function(e){return n(e)?o(e):A(e)}},8689:(e,t,r)=>{var A=r(31948),n=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,o=/\\(\\)?/g,i=A((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(n,(function(e,r,A,n){t.push(A?n.replace(o,"$1"):r||e)})),t}));e.exports=i},49874:(e,t,r)=>{var A=r(65558);e.exports=function(e){if("string"==typeof e||A(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}},76384:e=>{var t=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return t.call(e)}catch(e){}try{return e+""}catch(e){}}return""}},297:e=>{var t="[\\ud800-\\udfff]",r="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",A="\\ud83c[\\udffb-\\udfff]",n="[^\\ud800-\\udfff]",o="(?:\\ud83c[\\udde6-\\uddff]){2}",i="[\\ud800-\\udbff][\\udc00-\\udfff]",s="(?:"+r+"|"+A+")"+"?",a="[\\ufe0e\\ufe0f]?"+s+("(?:\\u200d(?:"+[n,o,i].join("|")+")[\\ufe0e\\ufe0f]?"+s+")*"),c="(?:"+[n+r+"?",r,o,i,t].join("|")+")",g=RegExp(A+"(?="+A+")|"+c+a,"g");e.exports=function(e){return e.match(g)||[]}},89887:e=>{var t="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\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",r="["+t+"]",A="\\d+",n="[\\u2700-\\u27bf]",o="[a-z\\xdf-\\xf6\\xf8-\\xff]",i="[^\\ud800-\\udfff"+t+A+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",s="(?:\\ud83c[\\udde6-\\uddff]){2}",a="[\\ud800-\\udbff][\\udc00-\\udfff]",c="[A-Z\\xc0-\\xd6\\xd8-\\xde]",g="(?:"+o+"|"+i+")",l="(?:"+c+"|"+i+")",u="(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?",h="[\\ufe0e\\ufe0f]?"+u+("(?:\\u200d(?:"+["[^\\ud800-\\udfff]",s,a].join("|")+")[\\ufe0e\\ufe0f]?"+u+")*"),p="(?:"+[n,s,a].join("|")+")"+h,d=RegExp([c+"?"+o+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[r,c,"$"].join("|")+")",l+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[r,c+g,"$"].join("|")+")",c+"?"+g+"+(?:['’](?:d|ll|m|re|s|t|ve))?",c+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",A,p].join("|"),"g");e.exports=function(e){return e.match(d)||[]}},89170:(e,t,r)=>{var A=r(61814),n=r(30369)((function(e,t,r){return t=t.toLowerCase(),e+(r?A(t):t)}));e.exports=n},61814:(e,t,r)=>{var A=r(33580),n=r(72609);e.exports=function(e){return n(A(e).toLowerCase())}},82558:(e,t,r)=>{var A=r(41076);e.exports=function(e){return A(e,5)}},26052:(e,t,r)=>{var A=r(41076);e.exports=function(e,t){return A(e,5,t="function"==typeof t?t:void 0)}},4967:e=>{e.exports=function(e){return function(){return e}}},68968:(e,t,r)=>{var A=r(69922),n=r(33580),o=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,i=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]","g");e.exports=function(e){return(e=n(e))&&e.replace(o,A).replace(i,"")}},71074:e=>{e.exports=function(e,t){return e===t||e!=e&&t!=t}},54690:(e,t,r)=>{var A=r(93274);e.exports=function(e){return(null==e?0:e.length)?A(e,1):[]}},44674:(e,t,r)=>{var A=r(84173);e.exports=function(e,t,r){var n=null==e?void 0:A(e,t);return void 0===n?r:n}},15215:(e,t,r)=>{var A=r(95325),n=r(71507);e.exports=function(e,t){return null!=e&&n(e,t,A)}},34878:(e,t,r)=>{var A=r(3881),n=r(71507);e.exports=function(e,t){return null!=e&&n(e,t,A)}},61977:e=>{e.exports=function(e){return e}},61771:(e,t,r)=>{var A=r(76357),n=r(38496),o=Object.prototype,i=o.hasOwnProperty,s=o.propertyIsEnumerable,a=A(function(){return arguments}())?A:function(e){return n(e)&&i.call(e,"callee")&&!s.call(e,"callee")};e.exports=a},82664:e=>{var t=Array.isArray;e.exports=t},41929:(e,t,r)=>{var A=r(92533),n=r(46369);e.exports=function(e){return null!=e&&n(e.length)&&!A(e)}},16064:(e,t,r)=>{var A=r(41929),n=r(38496);e.exports=function(e){return n(e)&&A(e)}},10667:(e,t,r)=>{e=r.nmd(e);var A=r(76169),n=r(88988),o=t&&!t.nodeType&&t,i=o&&e&&!e.nodeType&&e,s=i&&i.exports===o?A.Buffer:void 0,a=(s?s.isBuffer:void 0)||n;e.exports=a},92533:(e,t,r)=>{var A=r(52502),n=r(46778);e.exports=function(e){if(!n(e))return!1;var t=A(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},46369:e=>{e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},13349:(e,t,r)=>{var A=r(55994),n=r(73635),o=r(26391),i=o&&o.isMap,s=i?n(i):A;e.exports=s},46778:e=>{e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},38496:e=>{e.exports=function(e){return null!=e&&"object"==typeof e}},11672:(e,t,r)=>{var A=r(52502),n=r(41181),o=r(38496),i=Function.prototype,s=Object.prototype,a=i.toString,c=s.hasOwnProperty,g=a.call(Object);e.exports=function(e){if(!o(e)||"[object Object]"!=A(e))return!1;var t=n(e);if(null===t)return!0;var r=c.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&a.call(r)==g}},33931:(e,t,r)=>{var A=r(28612),n=r(73635),o=r(26391),i=o&&o.isSet,s=i?n(i):A;e.exports=s},221:(e,t,r)=>{var A=r(52502),n=r(82664),o=r(38496);e.exports=function(e){return"string"==typeof e||!n(e)&&o(e)&&"[object String]"==A(e)}},65558:(e,t,r)=>{var A=r(52502),n=r(38496);e.exports=function(e){return"symbol"==typeof e||n(e)&&"[object Symbol]"==A(e)}},32565:(e,t,r)=>{var A=r(98998),n=r(73635),o=r(26391),i=o&&o.isTypedArray,s=i?n(i):A;e.exports=s},42185:(e,t,r)=>{var A=r(11886),n=r(50994),o=r(41929);e.exports=function(e){return o(e)?A(e):n(e)}},24887:(e,t,r)=>{var A=r(11886),n=r(8372),o=r(41929);e.exports=function(e){return o(e)?A(e,!0):n(e)}},5253:(e,t,r)=>{var A=r(91198),n=r(62164),o=r(42208);e.exports=function(e,t){var r={};return t=o(t,3),n(e,(function(e,n,o){A(r,t(e,n,o),e)})),r}},89612:(e,t,r)=>{var A=r(91198),n=r(62164),o=r(42208);e.exports=function(e,t){var r={};return t=o(t,3),n(e,(function(e,n,o){A(r,n,t(e,n,o))})),r}},74499:(e,t,r)=>{var A=r(75009);function n(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var r=function(){var A=arguments,n=t?t.apply(this,A):A[0],o=r.cache;if(o.has(n))return o.get(n);var i=e.apply(this,A);return r.cache=o.set(n,i)||o,i};return r.cache=new(n.Cache||A),r}n.Cache=A,e.exports=n},80305:(e,t,r)=>{var A=r(51264),n=r(27913)((function(e,t,r){A(e,t,r)}));e.exports=n},75130:(e,t,r)=>{var A=r(72204),n=r(87298)((function(e,t){return null==e?{}:A(e,t)}));e.exports=n},7430:(e,t,r)=>{var A=r(35400),n=r(43018),o=r(70474),i=r(49874);e.exports=function(e){return o(e)?A(i(e)):n(e)}},81534:(e,t,r)=>{var A=r(10624);e.exports=function(e,t,r){return null==e?e:A(e,t,r)}},36494:(e,t,r)=>{var A=r(30369)((function(e,t,r){return e+(r?"_":"")+t.toLowerCase()}));e.exports=A},62162:e=>{e.exports=function(){return[]}},88988:e=>{e.exports=function(){return!1}},78700:(e,t,r)=>{var A=r(69976),n=r(87229),o=r(79435),i=r(41929),s=r(221),a=r(82262),c=r(7877),g=r(7442),l=r(30475),u=r(24448),h=A?A.iterator:void 0;e.exports=function(e){if(!e)return[];if(i(e))return s(e)?l(e):n(e);if(h&&e[h])return a(e[h]());var t=o(e);return("[object Map]"==t?c:"[object Set]"==t?g:u)(e)}},36506:(e,t,r)=>{var A=r(75182),n=r(24887);e.exports=function(e){return A(e,n(e))}},33580:(e,t,r)=>{var A=r(35);e.exports=function(e){return null==e?"":A(e)}},72609:(e,t,r)=>{var A=r(56989)("toUpperCase");e.exports=A},24448:(e,t,r)=>{var A=r(18290),n=r(42185);e.exports=function(e){return null==e?[]:A(e,n(e))}},97684:(e,t,r)=>{var A=r(11852),n=r(60466),o=r(33580),i=r(89887);e.exports=function(e,t,r){return e=o(e),void 0===(t=r?void 0:t)?n(e)?i(e):A(e):e.match(t)||[]}},55737:e=>{"use strict";e.exports=e=>{const t={};for(const[r,A]of Object.entries(e))t[r.toLowerCase()]=A;return t}},46227:(e,t,r)=>{"use strict";const A=r(35747),n=r(85622),{promisify:o}=r(31669),i=r(95584).satisfies(process.version,">=10.12.0"),s=e=>{if("win32"===process.platform){if(/[<>:"|?*]/.test(e.replace(n.parse(e).root,""))){const t=new Error("Path contains invalid characters: "+e);throw t.code="EINVAL",t}}},a=e=>({...{mode:511,fs:A},...e}),c=e=>{const t=new Error(`operation not permitted, mkdir '${e}'`);return t.code="EPERM",t.errno=-4048,t.path=e,t.syscall="mkdir",t};e.exports=async(e,t)=>{s(e),t=a(t);const r=o(t.fs.mkdir),g=o(t.fs.stat);if(i&&t.fs.mkdir===A.mkdir){const A=n.resolve(e);return await r(A,{mode:t.mode,recursive:!0}),A}const l=async e=>{try{return await r(e,t.mode),e}catch(t){if("EPERM"===t.code)throw t;if("ENOENT"===t.code){if(n.dirname(e)===e)throw c(e);if(t.message.includes("null bytes"))throw t;return await l(n.dirname(e)),l(e)}try{if(!(await g(e)).isDirectory())throw new Error("The path is not a directory")}catch(e){throw t}return e}};return l(n.resolve(e))},e.exports.sync=(e,t)=>{if(s(e),t=a(t),i&&t.fs.mkdirSync===A.mkdirSync){const r=n.resolve(e);return A.mkdirSync(r,{mode:t.mode,recursive:!0}),r}const r=e=>{try{t.fs.mkdirSync(e,t.mode)}catch(A){if("EPERM"===A.code)throw A;if("ENOENT"===A.code){if(n.dirname(e)===e)throw c(e);if(A.message.includes("null bytes"))throw A;return r(n.dirname(e)),r(e)}try{if(!t.fs.statSync(e).isDirectory())throw new Error("The path is not a directory")}catch(e){throw A}}return e};return r(n.resolve(e))}},55598:(e,t,r)=>{"use strict";const A=r(92413).PassThrough,n=Array.prototype.slice;function o(e,t){if(Array.isArray(e))for(let r=0,A=e.length;r0||(t=!1,g())}function o(e){function t(){e.removeListener("merge2UnpipeEnd",t),e.removeListener("end",t),n()}if(e._readableState.endEmitted)return n();e.on("merge2UnpipeEnd",t),e.on("end",t),e.pipe(a,{end:!1}),e.resume()}for(let e=0;e{"use strict";const A=r(31669),n=r(12235),o=r(54722),i=r(3598),s=e=>"string"==typeof e&&(""===e||"./"===e),a=(e,t,r)=>{t=[].concat(t),e=[].concat(e);let A=new Set,n=new Set,i=new Set,s=0,a=e=>{i.add(e.output),r&&r.onResult&&r.onResult(e)};for(let i=0;i!A.has(e));if(r&&0===c.length){if(!0===r.failglob)throw new Error(`No matches found for "${t.join(", ")}"`);if(!0===r.nonull||!0===r.nullglob)return r.unescape?t.map(e=>e.replace(/\\/g,"")):t}return c};a.match=a,a.matcher=(e,t)=>o(e,t),a.any=a.isMatch=(e,t,r)=>o(t,r)(e),a.not=(e,t,r={})=>{t=[].concat(t).map(String);let A=new Set,n=[],o=a(e,t,{...r,onResult:e=>{r.onResult&&r.onResult(e),n.push(e.output)}});for(let e of n)o.includes(e)||A.add(e);return[...A]},a.contains=(e,t,r)=>{if("string"!=typeof e)throw new TypeError(`Expected a string: "${A.inspect(e)}"`);if(Array.isArray(t))return t.some(t=>a.contains(e,t,r));if("string"==typeof t){if(s(e)||s(t))return!1;if(e.includes(t)||e.startsWith("./")&&e.slice(2).includes(t))return!0}return a.isMatch(e,t,{...r,contains:!0})},a.matchKeys=(e,t,r)=>{if(!i.isObject(e))throw new TypeError("Expected the first argument to be an object");let A=a(Object.keys(e),t,r),n={};for(let t of A)n[t]=e[t];return n},a.some=(e,t,r)=>{let A=[].concat(e);for(let e of[].concat(t)){let t=o(String(e),r);if(A.some(e=>t(e)))return!0}return!1},a.every=(e,t,r)=>{let A=[].concat(e);for(let e of[].concat(t)){let t=o(String(e),r);if(!A.every(e=>t(e)))return!1}return!0},a.all=(e,t,r)=>{if("string"!=typeof e)throw new TypeError(`Expected a string: "${A.inspect(e)}"`);return[].concat(t).every(t=>o(t,r)(e))},a.capture=(e,t,r)=>{let A=i.isWindows(r),n=o.makeRe(String(e),{...r,capture:!0}).exec(A?i.toPosixSlashes(t):t);if(n)return n.slice(1).map(e=>void 0===e?"":e)},a.makeRe=(...e)=>o.makeRe(...e),a.scan=(...e)=>o.scan(...e),a.parse=(e,t)=>{let r=[];for(let A of[].concat(e||[]))for(let e of n(String(A),t))r.push(o.parse(e,t));return r},a.braces=(e,t)=>{if("string"!=typeof e)throw new TypeError("Expected a string");return t&&!0===t.nobrace||!/\{.*\}/.test(e)?[e]:n(e,t)},a.braceExpand=(e,t)=>{if("string"!=typeof e)throw new TypeError("Expected a string");return a.braces(e,{...t,expand:!0})},e.exports=a},65007:e=>{"use strict";const t=["destroy","setTimeout","socket","headers","trailers","rawHeaders","statusCode","httpVersion","httpVersionMinor","httpVersionMajor","rawTrailers","statusMessage"];e.exports=(e,r)=>{const A=new Set(Object.keys(e).concat(t));for(const t of A)t in r||(r[t]="function"==typeof e[t]?e[t].bind(e):e[t])}},33527:e=>{"use strict";const t=["aborted","complete","headers","httpVersion","httpVersionMinor","httpVersionMajor","method","rawHeaders","rawTrailers","setTimeout","socket","statusCode","statusMessage","trailers","url"];e.exports=(e,r)=>{if(r._readableState.autoDestroy)throw new Error("The second stream must have the `autoDestroy` option set to `false`");const A=new Set(Object.keys(e).concat(t)),n={};for(const t of A)t in r||(n[t]={get(){const r=e[t];return"function"==typeof r?r.bind(e):r},set(r){e[t]=r},enumerable:!0,configurable:!1});return Object.defineProperties(r,n),e.once("aborted",()=>{r.destroy(),r.emit("aborted")}),e.once("close",()=>{e.complete&&r.readable?r.once("end",()=>{r.emit("close")}):r.emit("close")}),r}},19793:(e,t,r)=>{"use strict";const A="undefined"==typeof URL?r(78835).URL:URL,n=(e,t)=>t.some(t=>t instanceof RegExp?t.test(e):t===e),o=(e,t)=>{if(t={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...t},Reflect.has(t,"normalizeHttps"))throw new Error("options.normalizeHttps is renamed to options.forceHttp");if(Reflect.has(t,"normalizeHttp"))throw new Error("options.normalizeHttp is renamed to options.forceHttps");if(Reflect.has(t,"stripFragment"))throw new Error("options.stripFragment is renamed to options.stripHash");if(e=e.trim(),/^data:/i.test(e))return((e,{stripHash:t})=>{const r=e.match(/^data:(.*?),(.*?)(?:#(.*))?$/);if(!r)throw new Error("Invalid URL: "+e);const A=r[1].split(";"),n=r[2],o=t?"":r[3];let i=!1;"base64"===A[A.length-1]&&(A.pop(),i=!0);const s=(A.shift()||"").toLowerCase(),a=[...A.map(e=>{let[t,r=""]=e.split("=").map(e=>e.trim());return"charset"===t&&(r=r.toLowerCase(),"us-ascii"===r)?"":`${t}${r?"="+r:""}`}).filter(Boolean)];return i&&a.push("base64"),(0!==a.length||s&&"text/plain"!==s)&&a.unshift(s),`data:${a.join(";")},${i?n.trim():n}${o?"#"+o:""}`})(e,t);const r=e.startsWith("//");!r&&/^\.*\//.test(e)||(e=e.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,t.defaultProtocol));const o=new A(e);if(t.forceHttp&&t.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(t.forceHttp&&"https:"===o.protocol&&(o.protocol="http:"),t.forceHttps&&"http:"===o.protocol&&(o.protocol="https:"),t.stripAuthentication&&(o.username="",o.password=""),t.stripHash&&(o.hash=""),o.pathname&&(o.pathname=o.pathname.replace(/((?!:).|^)\/{2,}/g,(e,t)=>/^(?!\/)/g.test(t)?t+"/":"/")),o.pathname&&(o.pathname=decodeURI(o.pathname)),!0===t.removeDirectoryIndex&&(t.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(t.removeDirectoryIndex)&&t.removeDirectoryIndex.length>0){let e=o.pathname.split("/");const r=e[e.length-1];n(r,t.removeDirectoryIndex)&&(e=e.slice(0,e.length-1),o.pathname=e.slice(1).join("/")+"/")}if(o.hostname&&(o.hostname=o.hostname.replace(/\.$/,""),t.stripWWW&&/^www\.([a-z\-\d]{2,63})\.([a-z.]{2,5})$/.test(o.hostname)&&(o.hostname=o.hostname.replace(/^www\./,""))),Array.isArray(t.removeQueryParameters))for(const e of[...o.searchParams.keys()])n(e,t.removeQueryParameters)&&o.searchParams.delete(e);return t.sortQueryParameters&&o.searchParams.sort(),t.removeTrailingSlash&&(o.pathname=o.pathname.replace(/\/$/,"")),e=o.toString(),!t.removeTrailingSlash&&"/"!==o.pathname||""!==o.hash||(e=e.replace(/\/$/,"")),r&&!t.normalizeProtocol&&(e=e.replace(/^http:\/\//,"//")),t.stripProtocol&&(e=e.replace(/^(?:https?:)?\/\//,"")),e};e.exports=o,e.exports.default=o},91162:(e,t,r)=>{var A=r(98984);function n(e){var t=function(){return t.called?t.value:(t.called=!0,t.value=e.apply(this,arguments))};return t.called=!1,t}e.exports=A(n),n.proto=n((function(){Object.defineProperty(Function.prototype,"once",{value:function(){return n(this)},configurable:!0})}))},27180:(e,t,r)=>{var A=r(98984);function n(e){var t=function(){return t.called?t.value:(t.called=!0,t.value=e.apply(this,arguments))};return t.called=!1,t}function o(e){var t=function(){if(t.called)throw new Error(t.onceError);return t.called=!0,t.value=e.apply(this,arguments)},r=e.name||"Function wrapped with `once`";return t.onceError=r+" shouldn't be called more than once",t.called=!1,t}e.exports=A(n),e.exports.strict=A(o),n.proto=n((function(){Object.defineProperty(Function.prototype,"once",{value:function(){return n(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return o(this)},configurable:!0})}))},59351:e=>{"use strict";class t extends Error{constructor(e){super(e||"Promise was canceled"),this.name="CancelError"}get isCanceled(){return!0}}class r{static fn(e){return(...t)=>new r((r,A,n)=>{t.push(n),e(...t).then(r,A)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((t,r)=>{this._reject=r;const A=e=>{if(!this._isPending)throw new Error("The `onCancel` handler was attached after the promise settled.");this._cancelHandlers.push(e)};return Object.defineProperties(A,{shouldReject:{get:()=>this._rejectOnCancel,set:e=>{this._rejectOnCancel=e}}}),e(e=>{this._isPending=!1,t(e)},e=>{this._isPending=!1,r(e)},A)})}then(e,t){return this._promise.then(e,t)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(this._isPending&&!this._isCanceled){if(this._cancelHandlers.length>0)try{for(const e of this._cancelHandlers)e()}catch(e){this._reject(e)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new t(e))}}get isCanceled(){return this._isCanceled}}Object.setPrototypeOf(r.prototype,Promise.prototype),e.exports=r,e.exports.CancelError=t},61578:(e,t,r)=>{"use strict";const A=r(60550),n=e=>{if(e<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");const t=[];let r=0;const n=()=>{r--,t.length>0&&t.shift()()},o=(e,t,...o)=>{r++;const i=A(e,...o);t(i),i.then(n,n)},i=(A,...n)=>new Promise(i=>((A,n,...i)=>{rr},pendingCount:{get:()=>t.length}}),i};e.exports=n,e.exports.default=n},60550:e=>{"use strict";e.exports=(e,...t)=>new Promise(r=>{r(e(...t))})},37127:e=>{"use strict";const t=(e={})=>{const t=e.env||process.env;return"win32"!==(e.platform||process.platform)?"PATH":Object.keys(t).reverse().find(e=>"PATH"===e.toUpperCase())||"Path"};e.exports=t,e.exports.default=t},5763:(e,t,r)=>{"use strict";const{promisify:A}=r(31669),n=r(35747);async function o(e,t,r){if("string"!=typeof r)throw new TypeError("Expected a string, got "+typeof r);try{return(await A(n[e])(r))[t]()}catch(e){if("ENOENT"===e.code)return!1;throw e}}function i(e,t,r){if("string"!=typeof r)throw new TypeError("Expected a string, got "+typeof r);try{return n[e](r)[t]()}catch(e){if("ENOENT"===e.code)return!1;throw e}}t.isFile=o.bind(null,"stat","isFile"),t.isDirectory=o.bind(null,"stat","isDirectory"),t.isSymlink=o.bind(null,"lstat","isSymbolicLink"),t.isFileSync=i.bind(null,"statSync","isFile"),t.isDirectorySync=i.bind(null,"statSync","isDirectory"),t.isSymlinkSync=i.bind(null,"lstatSync","isSymbolicLink")},54722:(e,t,r)=>{"use strict";e.exports=r(18828)},71086:(e,t,r)=>{"use strict";const A=r(85622),n={DOT_LITERAL:"\\.",PLUS_LITERAL:"\\+",QMARK_LITERAL:"\\?",SLASH_LITERAL:"\\/",ONE_CHAR:"(?=.)",QMARK:"[^/]",END_ANCHOR:"(?:\\/|$)",DOTS_SLASH:"\\.{1,2}(?:\\/|$)",NO_DOT:"(?!\\.)",NO_DOTS:"(?!(?:^|\\/)\\.{1,2}(?:\\/|$))",NO_DOT_SLASH:"(?!\\.{0,1}(?:\\/|$))",NO_DOTS_SLASH:"(?!\\.{1,2}(?:\\/|$))",QMARK_NO_DOT:"[^.\\/]",STAR:"[^/]*?",START_ANCHOR:"(?:^|\\/)"},o={...n,SLASH_LITERAL:"[\\\\/]",QMARK:"[^\\\\/]",STAR:"[^\\\\/]*?",DOTS_SLASH:"\\.{1,2}(?:[\\\\/]|$)",NO_DOT:"(?!\\.)",NO_DOTS:"(?!(?:^|[\\\\/])\\.{1,2}(?:[\\\\/]|$))",NO_DOT_SLASH:"(?!\\.{0,1}(?:[\\\\/]|$))",NO_DOTS_SLASH:"(?!\\.{1,2}(?:[\\\\/]|$))",QMARK_NO_DOT:"[^.\\\\/]",START_ANCHOR:"(?:^|[\\\\/])",END_ANCHOR:"(?:[\\\\/]|$)"};e.exports={MAX_LENGTH:65536,POSIX_REGEX_SOURCE:{alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"},REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:A.sep,extglobChars:e=>({"!":{type:"negate",open:"(?:(?!(?:",close:`))${e.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}),globChars:e=>!0===e?o:n}},47974:(e,t,r)=>{"use strict";const A=r(71086),n=r(3598),{MAX_LENGTH:o,POSIX_REGEX_SOURCE:i,REGEX_NON_SPECIAL_CHARS:s,REGEX_SPECIAL_CHARS_BACKREF:a,REPLACEMENTS:c}=A,g=(e,t)=>{if("function"==typeof t.expandRange)return t.expandRange(...e,t);e.sort();const r=`[${e.join("-")}]`;try{new RegExp(r)}catch(t){return e.map(e=>n.escapeRegex(e)).join("..")}return r},l=(e,t)=>`Missing ${e}: "${t}" - use "\\\\${t}" to match literal characters`,u=(e,t)=>{if("string"!=typeof e)throw new TypeError("Expected a string");e=c[e]||e;const r={...t},u="number"==typeof r.maxLength?Math.min(o,r.maxLength):o;let h=e.length;if(h>u)throw new SyntaxError(`Input length: ${h}, exceeds maximum allowed length: ${u}`);const p={type:"bos",value:"",output:r.prepend||""},d=[p],C=r.capture?"":"?:",f=n.isWindows(t),I=A.globChars(f),E=A.extglobChars(I),{DOT_LITERAL:B,PLUS_LITERAL:y,SLASH_LITERAL:m,ONE_CHAR:w,DOTS_SLASH:Q,NO_DOT:D,NO_DOT_SLASH:b,NO_DOTS_SLASH:v,QMARK:S,QMARK_NO_DOT:k,STAR:N,START_ANCHOR:F}=I,K=e=>`(${C}(?:(?!${F}${e.dot?Q:B}).)*?)`,M=r.dot?"":D,R=r.dot?S:k;let x=!0===r.bash?K(r):N;r.capture&&(x=`(${x})`),"boolean"==typeof r.noext&&(r.noextglob=r.noext);const L={input:e,index:-1,start:0,dot:!0===r.dot,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:d};e=n.removePrefix(e,L),h=e.length;const P=[],O=[],U=[];let T,j=p;const Y=()=>L.index===h-1,G=L.peek=(t=1)=>e[L.index+t],H=L.advance=()=>e[++L.index],J=()=>e.slice(L.index+1),q=(e="",t=0)=>{L.consumed+=e,L.index+=t},z=e=>{L.output+=null!=e.output?e.output:e.value,q(e.value)},W=()=>{let e=1;for(;"!"===G()&&("("!==G(2)||"?"===G(3));)H(),L.start++,e++;return e%2!=0&&(L.negated=!0,L.start++,!0)},V=e=>{L[e]++,U.push(e)},X=e=>{L[e]--,U.pop()},_=e=>{if("globstar"===j.type){const t=L.braces>0&&("comma"===e.type||"brace"===e.type),r=!0===e.extglob||P.length&&("pipe"===e.type||"paren"===e.type);"slash"===e.type||"paren"===e.type||t||r||(L.output=L.output.slice(0,-j.output.length),j.type="star",j.value="*",j.output=x,L.output+=j.output)}if(P.length&&"paren"!==e.type&&!E[e.value]&&(P[P.length-1].inner+=e.value),(e.value||e.output)&&z(e),j&&"text"===j.type&&"text"===e.type)return j.value+=e.value,void(j.output=(j.output||"")+e.value);e.prev=j,d.push(e),j=e},Z=(e,t)=>{const A={...E[t],conditions:1,inner:""};A.prev=j,A.parens=L.parens,A.output=L.output;const n=(r.capture?"(":"")+A.open;V("parens"),_({type:e,value:t,output:L.output?"":w}),_({type:"paren",extglob:!0,value:H(),output:n}),P.push(A)},$=e=>{let t=e.close+(r.capture?")":"");if("negate"===e.type){let A=x;e.inner&&e.inner.length>1&&e.inner.includes("/")&&(A=K(r)),(A!==x||Y()||/^\)+$/.test(J()))&&(t=e.close=")$))"+A),"bos"===e.prev.type&&Y()&&(L.negatedExtglob=!0)}_({type:"paren",extglob:!0,value:T,output:t}),X("parens")};if(!1!==r.fastpaths&&!/(^[*!]|[/()[\]{}"])/.test(e)){let A=!1,o=e.replace(a,(e,t,r,n,o,i)=>"\\"===n?(A=!0,e):"?"===n?t?t+n+(o?S.repeat(o.length):""):0===i?R+(o?S.repeat(o.length):""):S.repeat(r.length):"."===n?B.repeat(r.length):"*"===n?t?t+n+(o?x:""):x:t?e:"\\"+e);return!0===A&&(o=!0===r.unescape?o.replace(/\\/g,""):o.replace(/\\+/g,e=>e.length%2==0?"\\\\":e?"\\":"")),o===e&&!0===r.contains?(L.output=e,L):(L.output=n.wrapOutput(o,L,t),L)}for(;!Y();){if(T=H(),"\0"===T)continue;if("\\"===T){const e=G();if("/"===e&&!0!==r.bash)continue;if("."===e||";"===e)continue;if(!e){T+="\\",_({type:"text",value:T});continue}const t=/^\\+/.exec(J());let A=0;if(t&&t[0].length>2&&(A=t[0].length,L.index+=A,A%2!=0&&(T+="\\")),!0===r.unescape?T=H()||"":T+=H()||"",0===L.brackets){_({type:"text",value:T});continue}}if(L.brackets>0&&("]"!==T||"["===j.value||"[^"===j.value)){if(!1!==r.posix&&":"===T){const e=j.value.slice(1);if(e.includes("[")&&(j.posix=!0,e.includes(":"))){const e=j.value.lastIndexOf("["),t=j.value.slice(0,e),r=j.value.slice(e+2),A=i[r];if(A){j.value=t+A,L.backtrack=!0,H(),p.output||1!==d.indexOf(j)||(p.output=w);continue}}}("["===T&&":"!==G()||"-"===T&&"]"===G())&&(T="\\"+T),"]"!==T||"["!==j.value&&"[^"!==j.value||(T="\\"+T),!0===r.posix&&"!"===T&&"["===j.value&&(T="^"),j.value+=T,z({value:T});continue}if(1===L.quotes&&'"'!==T){T=n.escapeRegex(T),j.value+=T,z({value:T});continue}if('"'===T){L.quotes=1===L.quotes?0:1,!0===r.keepQuotes&&_({type:"text",value:T});continue}if("("===T){V("parens"),_({type:"paren",value:T});continue}if(")"===T){if(0===L.parens&&!0===r.strictBrackets)throw new SyntaxError(l("opening","("));const e=P[P.length-1];if(e&&L.parens===e.parens+1){$(P.pop());continue}_({type:"paren",value:T,output:L.parens?")":"\\)"}),X("parens");continue}if("["===T){if(!0!==r.nobracket&&J().includes("]"))V("brackets");else{if(!0!==r.nobracket&&!0===r.strictBrackets)throw new SyntaxError(l("closing","]"));T="\\"+T}_({type:"bracket",value:T});continue}if("]"===T){if(!0===r.nobracket||j&&"bracket"===j.type&&1===j.value.length){_({type:"text",value:T,output:"\\"+T});continue}if(0===L.brackets){if(!0===r.strictBrackets)throw new SyntaxError(l("opening","["));_({type:"text",value:T,output:"\\"+T});continue}X("brackets");const e=j.value.slice(1);if(!0===j.posix||"^"!==e[0]||e.includes("/")||(T="/"+T),j.value+=T,z({value:T}),!1===r.literalBrackets||n.hasRegexChars(e))continue;const t=n.escapeRegex(j.value);if(L.output=L.output.slice(0,-j.value.length),!0===r.literalBrackets){L.output+=t,j.value=t;continue}j.value=`(${C}${t}|${j.value})`,L.output+=j.value;continue}if("{"===T&&!0!==r.nobrace){V("braces");const e={type:"brace",value:T,output:"(",outputIndex:L.output.length,tokensIndex:L.tokens.length};O.push(e),_(e);continue}if("}"===T){const e=O[O.length-1];if(!0===r.nobrace||!e){_({type:"text",value:T,output:T});continue}let t=")";if(!0===e.dots){const e=d.slice(),A=[];for(let t=e.length-1;t>=0&&(d.pop(),"brace"!==e[t].type);t--)"dots"!==e[t].type&&A.unshift(e[t].value);t=g(A,r),L.backtrack=!0}if(!0!==e.comma&&!0!==e.dots){const r=L.output.slice(0,e.outputIndex),A=L.tokens.slice(e.tokensIndex);e.value=e.output="\\{",T=t="\\}",L.output=r;for(const e of A)L.output+=e.output||e.value}_({type:"brace",value:T,output:t}),X("braces"),O.pop();continue}if("|"===T){P.length>0&&P[P.length-1].conditions++,_({type:"text",value:T});continue}if(","===T){let e=T;const t=O[O.length-1];t&&"braces"===U[U.length-1]&&(t.comma=!0,e="|"),_({type:"comma",value:T,output:e});continue}if("/"===T){if("dot"===j.type&&L.index===L.start+1){L.start=L.index+1,L.consumed="",L.output="",d.pop(),j=p;continue}_({type:"slash",value:T,output:m});continue}if("."===T){if(L.braces>0&&"dot"===j.type){"."===j.value&&(j.output=B);const e=O[O.length-1];j.type="dots",j.output+=T,j.value+=T,e.dots=!0;continue}if(L.braces+L.parens===0&&"bos"!==j.type&&"slash"!==j.type){_({type:"text",value:T,output:B});continue}_({type:"dot",value:T,output:B});continue}if("?"===T){if(!(j&&"("===j.value)&&!0!==r.noextglob&&"("===G()&&"?"!==G(2)){Z("qmark",T);continue}if(j&&"paren"===j.type){const e=G();let t=T;if("<"===e&&!n.supportsLookbehinds())throw new Error("Node.js v10 or higher is required for regex lookbehinds");("("===j.value&&!/[!=<:]/.test(e)||"<"===e&&!/<([!=]|\w+>)/.test(J()))&&(t="\\"+T),_({type:"text",value:T,output:t});continue}if(!0!==r.dot&&("slash"===j.type||"bos"===j.type)){_({type:"qmark",value:T,output:k});continue}_({type:"qmark",value:T,output:S});continue}if("!"===T){if(!0!==r.noextglob&&"("===G()&&("?"!==G(2)||!/[!=<:]/.test(G(3)))){Z("negate",T);continue}if(!0!==r.nonegate&&0===L.index){W();continue}}if("+"===T){if(!0!==r.noextglob&&"("===G()&&"?"!==G(2)){Z("plus",T);continue}if(j&&"("===j.value||!1===r.regex){_({type:"plus",value:T,output:y});continue}if(j&&("bracket"===j.type||"paren"===j.type||"brace"===j.type)||L.parens>0){_({type:"plus",value:T});continue}_({type:"plus",value:y});continue}if("@"===T){if(!0!==r.noextglob&&"("===G()&&"?"!==G(2)){_({type:"at",extglob:!0,value:T,output:""});continue}_({type:"text",value:T});continue}if("*"!==T){"$"!==T&&"^"!==T||(T="\\"+T);const e=s.exec(J());e&&(T+=e[0],L.index+=e[0].length),_({type:"text",value:T});continue}if(j&&("globstar"===j.type||!0===j.star)){j.type="star",j.star=!0,j.value+=T,j.output=x,L.backtrack=!0,L.globstar=!0,q(T);continue}let t=J();if(!0!==r.noextglob&&/^\([^?]/.test(t)){Z("star",T);continue}if("star"===j.type){if(!0===r.noglobstar){q(T);continue}const A=j.prev,n=A.prev,o="slash"===A.type||"bos"===A.type,i=n&&("star"===n.type||"globstar"===n.type);if(!0===r.bash&&(!o||t[0]&&"/"!==t[0])){_({type:"star",value:T,output:""});continue}const s=L.braces>0&&("comma"===A.type||"brace"===A.type),a=P.length&&("pipe"===A.type||"paren"===A.type);if(!o&&"paren"!==A.type&&!s&&!a){_({type:"star",value:T,output:""});continue}for(;"/**"===t.slice(0,3);){const r=e[L.index+4];if(r&&"/"!==r)break;t=t.slice(3),q("/**",3)}if("bos"===A.type&&Y()){j.type="globstar",j.value+=T,j.output=K(r),L.output=j.output,L.globstar=!0,q(T);continue}if("slash"===A.type&&"bos"!==A.prev.type&&!i&&Y()){L.output=L.output.slice(0,-(A.output+j.output).length),A.output="(?:"+A.output,j.type="globstar",j.output=K(r)+(r.strictSlashes?")":"|$)"),j.value+=T,L.globstar=!0,L.output+=A.output+j.output,q(T);continue}if("slash"===A.type&&"bos"!==A.prev.type&&"/"===t[0]){const e=void 0!==t[1]?"|$":"";L.output=L.output.slice(0,-(A.output+j.output).length),A.output="(?:"+A.output,j.type="globstar",j.output=`${K(r)}${m}|${m}${e})`,j.value+=T,L.output+=A.output+j.output,L.globstar=!0,q(T+H()),_({type:"slash",value:"/",output:""});continue}if("bos"===A.type&&"/"===t[0]){j.type="globstar",j.value+=T,j.output=`(?:^|${m}|${K(r)}${m})`,L.output=j.output,L.globstar=!0,q(T+H()),_({type:"slash",value:"/",output:""});continue}L.output=L.output.slice(0,-j.output.length),j.type="globstar",j.output=K(r),j.value+=T,L.output+=j.output,L.globstar=!0,q(T);continue}const A={type:"star",value:T,output:x};!0!==r.bash?!j||"bracket"!==j.type&&"paren"!==j.type||!0!==r.regex?(L.index!==L.start&&"slash"!==j.type&&"dot"!==j.type||("dot"===j.type?(L.output+=b,j.output+=b):!0===r.dot?(L.output+=v,j.output+=v):(L.output+=M,j.output+=M),"*"!==G()&&(L.output+=w,j.output+=w)),_(A)):(A.output=T,_(A)):(A.output=".*?","bos"!==j.type&&"slash"!==j.type||(A.output=M+A.output),_(A))}for(;L.brackets>0;){if(!0===r.strictBrackets)throw new SyntaxError(l("closing","]"));L.output=n.escapeLast(L.output,"["),X("brackets")}for(;L.parens>0;){if(!0===r.strictBrackets)throw new SyntaxError(l("closing",")"));L.output=n.escapeLast(L.output,"("),X("parens")}for(;L.braces>0;){if(!0===r.strictBrackets)throw new SyntaxError(l("closing","}"));L.output=n.escapeLast(L.output,"{"),X("braces")}if(!0===r.strictSlashes||"star"!==j.type&&"bracket"!==j.type||_({type:"maybe_slash",value:"",output:m+"?"}),!0===L.backtrack){L.output="";for(const e of L.tokens)L.output+=null!=e.output?e.output:e.value,e.suffix&&(L.output+=e.suffix)}return L};u.fastpaths=(e,t)=>{const r={...t},i="number"==typeof r.maxLength?Math.min(o,r.maxLength):o,s=e.length;if(s>i)throw new SyntaxError(`Input length: ${s}, exceeds maximum allowed length: ${i}`);e=c[e]||e;const a=n.isWindows(t),{DOT_LITERAL:g,SLASH_LITERAL:l,ONE_CHAR:u,DOTS_SLASH:h,NO_DOT:p,NO_DOTS:d,NO_DOTS_SLASH:C,STAR:f,START_ANCHOR:I}=A.globChars(a),E=r.dot?d:p,B=r.dot?C:p,y=r.capture?"":"?:";let m=!0===r.bash?".*?":f;r.capture&&(m=`(${m})`);const w=e=>!0===e.noglobstar?m:`(${y}(?:(?!${I}${e.dot?h:g}).)*?)`,Q=e=>{switch(e){case"*":return`${E}${u}${m}`;case".*":return`${g}${u}${m}`;case"*.*":return`${E}${m}${g}${u}${m}`;case"*/*":return`${E}${m}${l}${u}${B}${m}`;case"**":return E+w(r);case"**/*":return`(?:${E}${w(r)}${l})?${B}${u}${m}`;case"**/*.*":return`(?:${E}${w(r)}${l})?${B}${m}${g}${u}${m}`;case"**/.*":return`(?:${E}${w(r)}${l})?${g}${u}${m}`;default:{const t=/^(.*?)\.(\w+)$/.exec(e);if(!t)return;const r=Q(t[1]);if(!r)return;return r+g+t[2]}}},D=n.removePrefix(e,{negated:!1,prefix:""});let b=Q(D);return b&&!0!==r.strictSlashes&&(b+=l+"?"),b},e.exports=u},18828:(e,t,r)=>{"use strict";const A=r(85622),n=r(95321),o=r(47974),i=r(3598),s=r(71086),a=(e,t,r=!1)=>{if(Array.isArray(e)){const A=e.map(e=>a(e,t,r));return e=>{for(const t of A){const r=t(e);if(r)return r}return!1}}const A=(n=e)&&"object"==typeof n&&!Array.isArray(n)&&e.tokens&&e.input;var n;if(""===e||"string"!=typeof e&&!A)throw new TypeError("Expected pattern to be a non-empty string");const o=t||{},s=i.isWindows(t),c=A?a.compileRe(e,t):a.makeRe(e,t,!1,!0),g=c.state;delete c.state;let l=()=>!1;if(o.ignore){const e={...t,ignore:null,onMatch:null,onResult:null};l=a(o.ignore,e,r)}const u=(r,A=!1)=>{const{isMatch:n,match:i,output:u}=a.test(r,c,t,{glob:e,posix:s}),h={glob:e,state:g,regex:c,posix:s,input:r,output:u,match:i,isMatch:n};return"function"==typeof o.onResult&&o.onResult(h),!1===n?(h.isMatch=!1,!!A&&h):l(r)?("function"==typeof o.onIgnore&&o.onIgnore(h),h.isMatch=!1,!!A&&h):("function"==typeof o.onMatch&&o.onMatch(h),!A||h)};return r&&(u.state=g),u};a.test=(e,t,r,{glob:A,posix:n}={})=>{if("string"!=typeof e)throw new TypeError("Expected input to be a string");if(""===e)return{isMatch:!1,output:""};const o=r||{},s=o.format||(n?i.toPosixSlashes:null);let c=e===A,g=c&&s?s(e):e;return!1===c&&(g=s?s(e):e,c=g===A),!1!==c&&!0!==o.capture||(c=!0===o.matchBase||!0===o.basename?a.matchBase(e,t,r,n):t.exec(g)),{isMatch:Boolean(c),match:c,output:g}},a.matchBase=(e,t,r,n=i.isWindows(r))=>(t instanceof RegExp?t:a.makeRe(t,r)).test(A.basename(e)),a.isMatch=(e,t,r)=>a(t,r)(e),a.parse=(e,t)=>Array.isArray(e)?e.map(e=>a.parse(e,t)):o(e,{...t,fastpaths:!1}),a.scan=(e,t)=>n(e,t),a.compileRe=(e,t,r=!1,A=!1)=>{if(!0===r)return e.output;const n=t||{},o=n.contains?"":"^",i=n.contains?"":"$";let s=`${o}(?:${e.output})${i}`;e&&!0===e.negated&&(s=`^(?!${s}).*$`);const c=a.toRegex(s,t);return!0===A&&(c.state=e),c},a.makeRe=(e,t,r=!1,A=!1)=>{if(!e||"string"!=typeof e)throw new TypeError("Expected a non-empty string");const n=t||{};let i,s={negated:!1,fastpaths:!0},c="";return e.startsWith("./")&&(e=e.slice(2),c=s.prefix="./"),!1===n.fastpaths||"."!==e[0]&&"*"!==e[0]||(i=o.fastpaths(e,t)),void 0===i?(s=o(e,t),s.prefix=c+(s.prefix||"")):s.output=i,a.compileRe(s,t,r,A)},a.toRegex=(e,t)=>{try{const r=t||{};return new RegExp(e,r.flags||(r.nocase?"i":""))}catch(e){if(t&&!0===t.debug)throw e;return/$^/}},a.constants=s,e.exports=a},95321:(e,t,r)=>{"use strict";const A=r(3598),{CHAR_ASTERISK:n,CHAR_AT:o,CHAR_BACKWARD_SLASH:i,CHAR_COMMA:s,CHAR_DOT:a,CHAR_EXCLAMATION_MARK:c,CHAR_FORWARD_SLASH:g,CHAR_LEFT_CURLY_BRACE:l,CHAR_LEFT_PARENTHESES:u,CHAR_LEFT_SQUARE_BRACKET:h,CHAR_PLUS:p,CHAR_QUESTION_MARK:d,CHAR_RIGHT_CURLY_BRACE:C,CHAR_RIGHT_PARENTHESES:f,CHAR_RIGHT_SQUARE_BRACKET:I}=r(71086),E=e=>e===g||e===i,B=e=>{!0!==e.isPrefix&&(e.depth=e.isGlobstar?1/0:1)};e.exports=(e,t)=>{const r=t||{},y=e.length-1,m=!0===r.parts||!0===r.scanToEnd,w=[],Q=[],D=[];let b,v,S=e,k=-1,N=0,F=0,K=!1,M=!1,R=!1,x=!1,L=!1,P=!1,O=!1,U=!1,T=!1,j=0,Y={value:"",depth:0,isGlob:!1};const G=()=>k>=y,H=()=>(b=v,S.charCodeAt(++k));for(;k0&&(q=S.slice(0,N),S=S.slice(N),F-=N),J&&!0===R&&F>0?(J=S.slice(0,F),z=S.slice(F)):!0===R?(J="",z=S):J=S,J&&""!==J&&"/"!==J&&J!==S&&E(J.charCodeAt(J.length-1))&&(J=J.slice(0,-1)),!0===r.unescape&&(z&&(z=A.removeBackslashes(z)),J&&!0===O&&(J=A.removeBackslashes(J)));const W={prefix:q,input:e,start:N,base:J,glob:z,isBrace:K,isBracket:M,isGlob:R,isExtglob:x,isGlobstar:L,negated:U};if(!0===r.tokens&&(W.maxDepth=0,E(v)||Q.push(Y),W.tokens=Q),!0===r.parts||!0===r.tokens){let t;for(let A=0;A{"use strict";const A=r(85622),n="win32"===process.platform,{REGEX_BACKSLASH:o,REGEX_REMOVE_BACKSLASH:i,REGEX_SPECIAL_CHARS:s,REGEX_SPECIAL_CHARS_GLOBAL:a}=r(71086);t.isObject=e=>null!==e&&"object"==typeof e&&!Array.isArray(e),t.hasRegexChars=e=>s.test(e),t.isRegexChar=e=>1===e.length&&t.hasRegexChars(e),t.escapeRegex=e=>e.replace(a,"\\$1"),t.toPosixSlashes=e=>e.replace(o,"/"),t.removeBackslashes=e=>e.replace(i,e=>"\\"===e?"":e),t.supportsLookbehinds=()=>{const e=process.version.slice(1).split(".").map(Number);return 3===e.length&&e[0]>=9||8===e[0]&&e[1]>=10},t.isWindows=e=>e&&"boolean"==typeof e.windows?e.windows:!0===n||"\\"===A.sep,t.escapeLast=(e,r,A)=>{const n=e.lastIndexOf(r,A);return-1===n?e:"\\"===e[n-1]?t.escapeLast(e,r,n-1):`${e.slice(0,n)}\\${e.slice(n)}`},t.removePrefix=(e,t={})=>{let r=e;return r.startsWith("./")&&(r=r.slice(2),t.prefix="./"),r},t.wrapOutput=(e,t={},r={})=>{let A=`${r.contains?"":"^"}(?:${e})${r.contains?"":"$"}`;return!0===t.negated&&(A=`(?:^(?!${A}).*$)`),A}},79588:e=>{"use strict";function t(e){this._maxSize=e,this.clear()}t.prototype.clear=function(){this._size=0,this._values={}},t.prototype.get=function(e){return this._values[e]},t.prototype.set=function(e,t){return this._size>=this._maxSize&&this.clear(),this._values.hasOwnProperty(e)||this._size++,this._values[e]=t};var r=/[^.^\]^[]+|(?=\[\]|\.\.)/g,A=/^\d+$/,n=/^\d/,o=/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g,i=/^\s*(['"]?)(.*?)(\1)\s*$/,s=!1,a=new t(512),c=new t(512),g=new t(512);try{new Function("")}catch(e){s=!0}function l(e){return a.get(e)||a.set(e,u(e).map((function(e){return e.replace(i,"$2")})))}function u(e){return e.match(r)}function h(e,t,r){return"string"==typeof t&&(r=t,t=!1),r=r||"data",(e=e||"")&&"["!==e.charAt(0)&&(e="."+e),t?function(e,t){var r,A=t,n=u(e);return p(n,(function(e,t,n,o,i){r=o===i.length-1,A+=(e=t||n?"["+e+"]":"."+e)+(r?")":" || {})")})),new Array(n.length+1).join("(")+A}(e,r):r+e}function p(e,t,r){var A,n,o,i,s=e.length;for(n=0;n{var A=r(91162),n=r(97681),o=r(35747),i=function(){},s=/^v?\.0/.test(process.version),a=function(e){return"function"==typeof e},c=function(e,t,r,c){c=A(c);var g=!1;e.on("close",(function(){g=!0})),n(e,{readable:t,writable:r},(function(e){if(e)return c(e);g=!0,c()}));var l=!1;return function(t){if(!g&&!l)return l=!0,function(e){return!!s&&(!!o&&((e instanceof(o.ReadStream||i)||e instanceof(o.WriteStream||i))&&a(e.close)))}(e)?e.close(i):function(e){return e.setHeader&&a(e.abort)}(e)?e.abort():a(e.destroy)?e.destroy():void c(t||new Error("stream was destroyed"))}},g=function(e){e()},l=function(e,t){return e.pipe(t)};e.exports=function(){var e,t=Array.prototype.slice.call(arguments),r=a(t[t.length-1]||i)&&t.pop()||i;if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new Error("pump requires two streams per minimum");var A=t.map((function(n,o){var i=o0,(function(t){e||(e=t),t&&A.forEach(g),i||(A.forEach(g),r(e))}))}));return t.reduce(l)}},49601:e=>{"use strict";class t{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError("`maxSize` must be a number greater than 0");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,t){if(this.cache.set(e,t),this._size++,this._size>=this.maxSize){if(this._size=0,"function"==typeof this.onEviction)for(const[e,t]of this.oldCache.entries())this.onEviction(e,t);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){const t=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,t),t}}set(e,t){return this.cache.has(e)?this.cache.set(e,t):this._set(e,t),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){return this.cache.has(e)?this.cache.get(e):this.oldCache.has(e)?this.oldCache.get(e):void 0}delete(e){const t=this.cache.delete(e);return t&&this._size--,this.oldCache.delete(e)||t}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(const[e]of this)yield e}*values(){for(const[,e]of this)yield e}*[Symbol.iterator](){for(const e of this.cache)yield e;for(const e of this.oldCache){const[t]=e;this.cache.has(t)||(yield e)}}get size(){let e=0;for(const t of this.oldCache.keys())this.cache.has(t)||e++;return Math.min(this._size+e,this.maxSize)}}e.exports=t},20663:e=>{"use strict";const t={};function r(e,r,A){A||(A=Error);class n extends A{constructor(e,t,A){super(function(e,t,A){return"string"==typeof r?r:r(e,t,A)}(e,t,A))}}n.prototype.name=A.name,n.prototype.code=e,t[e]=n}function A(e,t){if(Array.isArray(e)){const r=e.length;return e=e.map(e=>String(e)),r>2?`one of ${t} ${e.slice(0,r-1).join(", ")}, or `+e[r-1]:2===r?`one of ${t} ${e[0]} or ${e[1]}`:`of ${t} ${e[0]}`}return`of ${t} ${String(e)}`}r("ERR_INVALID_OPT_VALUE",(function(e,t){return'The value "'+t+'" is invalid for option "'+e+'"'}),TypeError),r("ERR_INVALID_ARG_TYPE",(function(e,t,r){let n;var o,i;let s;if("string"==typeof t&&(o="not ",t.substr(!i||i<0?0:+i,o.length)===o)?(n="must not be",t=t.replace(/^not /,"")):n="must be",function(e,t,r){return(void 0===r||r>e.length)&&(r=e.length),e.substring(r-t.length,r)===t}(e," argument"))s=`The ${e} ${n} ${A(t,"type")}`;else{s=`The "${e}" ${function(e,t,r){return"number"!=typeof r&&(r=0),!(r+t.length>e.length)&&-1!==e.indexOf(t,r)}(e,".")?"property":"argument"} ${n} ${A(t,"type")}`}return s+=". Received type "+typeof r,s}),TypeError),r("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),r("ERR_METHOD_NOT_IMPLEMENTED",(function(e){return"The "+e+" method is not implemented"})),r("ERR_STREAM_PREMATURE_CLOSE","Premature close"),r("ERR_STREAM_DESTROYED",(function(e){return"Cannot call "+e+" after a stream was destroyed"})),r("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),r("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),r("ERR_STREAM_WRITE_AFTER_END","write after end"),r("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),r("ERR_UNKNOWN_ENCODING",(function(e){return"Unknown encoding: "+e}),TypeError),r("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),e.exports.q=t},39138:e=>{"use strict";var t=new Set;e.exports.emitExperimentalWarning=process.emitWarning?function(e){if(!t.has(e)){var r=e+" is an experimental feature. This feature could change at any time";t.add(e),process.emitWarning(r,"ExperimentalWarning")}}:function(){}},72434:(e,t,r)=>{"use strict";var A=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};e.exports=c;var n=r(58020),o=r(6729);r(85870)(c,n);for(var i=A(o.prototype),s=0;s{"use strict";e.exports=n;var A=r(54801);function n(e){if(!(this instanceof n))return new n(e);A.call(this,e)}r(85870)(n,A),n.prototype._transform=function(e,t,r){r(null,e)}},58020:(e,t,r)=>{"use strict";var A;e.exports=w,w.ReadableState=m;r(28614).EventEmitter;var n=function(e,t){return e.listeners(t).length},o=r(49298),i=r(64293).Buffer,s=global.Uint8Array||function(){};var a,c=r(31669);a=c&&c.debuglog?c.debuglog("stream"):function(){};var g,l,u=r(43117),h=r(32340),p=r(77433).getHighWaterMark,d=r(20663).q,C=d.ERR_INVALID_ARG_TYPE,f=d.ERR_STREAM_PUSH_AFTER_EOF,I=d.ERR_METHOD_NOT_IMPLEMENTED,E=d.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,B=r(39138).emitExperimentalWarning;r(85870)(w,o);var y=["error","close","destroy","pause","resume"];function m(e,t,n){A=A||r(72434),e=e||{},"boolean"!=typeof n&&(n=t instanceof A),this.objectMode=!!e.objectMode,n&&(this.objectMode=this.objectMode||!!e.readableObjectMode),this.highWaterMark=p(this,e,"readableHighWaterMark",n),this.buffer=new u,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=!1!==e.emitClose,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(g||(g=r(69538).s),this.decoder=new g(e.encoding),this.encoding=e.encoding)}function w(e){if(A=A||r(72434),!(this instanceof w))return new w(e);var t=this instanceof A;this._readableState=new m(e,this,t),this.readable=!0,e&&("function"==typeof e.read&&(this._read=e.read),"function"==typeof e.destroy&&(this._destroy=e.destroy)),o.call(this)}function Q(e,t,r,A,n){a("readableAddChunk",t);var o,c=e._readableState;if(null===t)c.reading=!1,function(e,t){if(t.ended)return;if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,t.sync?v(e):(t.needReadable=!1,t.emittedReadable||(t.emittedReadable=!0,S(e)))}(e,c);else if(n||(o=function(e,t){var r;A=t,i.isBuffer(A)||A instanceof s||"string"==typeof t||void 0===t||e.objectMode||(r=new C("chunk",["string","Buffer","Uint8Array"],t));var A;return r}(c,t)),o)e.emit("error",o);else if(c.objectMode||t&&t.length>0)if("string"==typeof t||c.objectMode||Object.getPrototypeOf(t)===i.prototype||(t=function(e){return i.from(e)}(t)),A)c.endEmitted?e.emit("error",new E):D(e,c,t,!0);else if(c.ended)e.emit("error",new f);else{if(c.destroyed)return!1;c.reading=!1,c.decoder&&!r?(t=c.decoder.write(t),c.objectMode||0!==t.length?D(e,c,t,!1):k(e,c)):D(e,c,t,!1)}else A||(c.reading=!1,k(e,c));return!c.ended&&(c.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=8388608?e=8388608:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function v(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(a("emitReadable",t.flowing),t.emittedReadable=!0,process.nextTick(S,e))}function S(e){var t=e._readableState;a("emitReadable_",t.destroyed,t.length,t.ended),t.destroyed||!t.length&&!t.ended||e.emit("readable"),t.needReadable=!t.flowing&&!t.ended&&t.length<=t.highWaterMark,R(e)}function k(e,t){t.readingMore||(t.readingMore=!0,process.nextTick(N,e,t))}function N(e,t){for(var r=t.length;!t.reading&&!t.ended&&t.length0,t.resumeScheduled&&!t.paused?t.flowing=!0:e.listenerCount("data")>0&&e.resume()}function K(e){a("readable nexttick read 0"),e.read(0)}function M(e,t){a("resume",t.reading),t.reading||e.read(0),t.resumeScheduled=!1,e.emit("resume"),R(e),t.flowing&&!t.reading&&e.read(0)}function R(e){var t=e._readableState;for(a("flow",t.flowing);t.flowing&&null!==e.read(););}function x(e,t){return 0===t.length?null:(t.objectMode?r=t.buffer.shift():!e||e>=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.first():t.buffer.concat(t.length),t.buffer.clear()):r=t.buffer.consume(e,t.decoder),r);var r}function L(e){var t=e._readableState;a("endReadable",t.endEmitted),t.endEmitted||(t.ended=!0,process.nextTick(P,t,e))}function P(e,t){a("endReadableNT",e.endEmitted,e.length),e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function O(e,t){for(var r=0,A=e.length;r=t.highWaterMark:t.length>0)||t.ended))return a("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?L(this):v(this),null;if(0===(e=b(e,t))&&t.ended)return 0===t.length&&L(this),null;var A,n=t.needReadable;return a("need readable",n),(0===t.length||t.length-e0?x(e,t):null)?(t.needReadable=!0,e=0):(t.length-=e,t.awaitDrain=0),0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&L(this)),null!==A&&this.emit("data",A),A},w.prototype._read=function(e){this.emit("error",new I("_read()"))},w.prototype.pipe=function(e,t){var r=this,A=this._readableState;switch(A.pipesCount){case 0:A.pipes=e;break;case 1:A.pipes=[A.pipes,e];break;default:A.pipes.push(e)}A.pipesCount+=1,a("pipe count=%d opts=%j",A.pipesCount,t);var o=(!t||!1!==t.end)&&e!==process.stdout&&e!==process.stderr?s:d;function i(t,n){a("onunpipe"),t===r&&n&&!1===n.hasUnpiped&&(n.hasUnpiped=!0,a("cleanup"),e.removeListener("close",h),e.removeListener("finish",p),e.removeListener("drain",c),e.removeListener("error",u),e.removeListener("unpipe",i),r.removeListener("end",s),r.removeListener("end",d),r.removeListener("data",l),g=!0,!A.awaitDrain||e._writableState&&!e._writableState.needDrain||c())}function s(){a("onend"),e.end()}A.endEmitted?process.nextTick(o):r.once("end",o),e.on("unpipe",i);var c=function(e){return function(){var t=e._readableState;a("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&n(e,"data")&&(t.flowing=!0,R(e))}}(r);e.on("drain",c);var g=!1;function l(t){a("ondata");var n=e.write(t);a("dest.write",n),!1===n&&((1===A.pipesCount&&A.pipes===e||A.pipesCount>1&&-1!==O(A.pipes,e))&&!g&&(a("false write response, pause",A.awaitDrain),A.awaitDrain++),r.pause())}function u(t){a("onerror",t),d(),e.removeListener("error",u),0===n(e,"error")&&e.emit("error",t)}function h(){e.removeListener("finish",p),d()}function p(){a("onfinish"),e.removeListener("close",h),d()}function d(){a("unpipe"),r.unpipe(e)}return r.on("data",l),function(e,t,r){if("function"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?Array.isArray(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(e,"error",u),e.once("close",h),e.once("finish",p),e.emit("pipe",r),A.flowing||(a("pipe resume"),r.resume()),e},w.prototype.unpipe=function(e){var t=this._readableState,r={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,r)),this;if(!e){var A=t.pipes,n=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var o=0;o0,!1!==A.flowing&&this.resume()):"readable"===e&&(A.endEmitted||A.readableListening||(A.readableListening=A.needReadable=!0,A.flowing=!1,A.emittedReadable=!1,a("on readable",A.length,A.reading),A.length?v(this):A.reading||process.nextTick(K,this))),r},w.prototype.addListener=w.prototype.on,w.prototype.removeListener=function(e,t){var r=o.prototype.removeListener.call(this,e,t);return"readable"===e&&process.nextTick(F,this),r},w.prototype.removeAllListeners=function(e){var t=o.prototype.removeAllListeners.apply(this,arguments);return"readable"!==e&&void 0!==e||process.nextTick(F,this),t},w.prototype.resume=function(){var e=this._readableState;return e.flowing||(a("resume"),e.flowing=!e.readableListening,function(e,t){t.resumeScheduled||(t.resumeScheduled=!0,process.nextTick(M,e,t))}(this,e)),e.paused=!1,this},w.prototype.pause=function(){return a("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(a("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this},w.prototype.wrap=function(e){var t=this,r=this._readableState,A=!1;for(var n in e.on("end",(function(){if(a("wrapped end"),r.decoder&&!r.ended){var e=r.decoder.end();e&&e.length&&t.push(e)}t.push(null)})),e.on("data",(function(n){(a("wrapped data"),r.decoder&&(n=r.decoder.write(n)),r.objectMode&&null==n)||(r.objectMode||n&&n.length)&&(t.push(n)||(A=!0,e.pause()))})),e)void 0===this[n]&&"function"==typeof e[n]&&(this[n]=function(t){return function(){return e[t].apply(e,arguments)}}(n));for(var o=0;o{"use strict";e.exports=g;var A=r(20663).q,n=A.ERR_METHOD_NOT_IMPLEMENTED,o=A.ERR_MULTIPLE_CALLBACK,i=A.ERR_TRANSFORM_ALREADY_TRANSFORMING,s=A.ERR_TRANSFORM_WITH_LENGTH_0,a=r(72434);function c(e,t){var r=this._transformState;r.transforming=!1;var A=r.writecb;if(null===A)return this.emit("error",new o);r.writechunk=null,r.writecb=null,null!=t&&this.push(t),A(e);var n=this._readableState;n.reading=!1,(n.needReadable||n.length{"use strict";function A(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,r){var A=e.entry;e.entry=null;for(;A;){var n=A.callback;t.pendingcb--,n(r),A=A.next}t.corkedRequestsFree.next=e}(t,e)}}var n;e.exports=w,w.WritableState=m;var o={deprecate:r(73212)},i=r(49298),s=r(64293).Buffer,a=global.Uint8Array||function(){};var c,g=r(32340),l=r(77433).getHighWaterMark,u=r(20663).q,h=u.ERR_INVALID_ARG_TYPE,p=u.ERR_METHOD_NOT_IMPLEMENTED,d=u.ERR_MULTIPLE_CALLBACK,C=u.ERR_STREAM_CANNOT_PIPE,f=u.ERR_STREAM_DESTROYED,I=u.ERR_STREAM_NULL_VALUES,E=u.ERR_STREAM_WRITE_AFTER_END,B=u.ERR_UNKNOWN_ENCODING;function y(){}function m(e,t,o){n=n||r(72434),e=e||{},"boolean"!=typeof o&&(o=t instanceof n),this.objectMode=!!e.objectMode,o&&(this.objectMode=this.objectMode||!!e.writableObjectMode),this.highWaterMark=l(this,e,"writableHighWaterMark",o),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var i=!1===e.decodeStrings;this.decodeStrings=!i,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var r=e._writableState,A=r.sync,n=r.writecb;if("function"!=typeof n)throw new d;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(r),t)!function(e,t,r,A,n){--t.pendingcb,r?(process.nextTick(n,A),process.nextTick(k,e,t),e._writableState.errorEmitted=!0,e.emit("error",A)):(n(A),e._writableState.errorEmitted=!0,e.emit("error",A),k(e,t))}(e,r,A,t,n);else{var o=v(r)||e.destroyed;o||r.corked||r.bufferProcessing||!r.bufferedRequest||b(e,r),A?process.nextTick(D,e,r,o,n):D(e,r,o,n)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!1!==e.emitClose,this.bufferedRequestCount=0,this.corkedRequestsFree=new A(this)}function w(e){var t=this instanceof(n=n||r(72434));if(!t&&!c.call(w,this))return new w(e);this._writableState=new m(e,this,t),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),i.call(this)}function Q(e,t,r,A,n,o,i){t.writelen=A,t.writecb=i,t.writing=!0,t.sync=!0,t.destroyed?t.onwrite(new f("write")):r?e._writev(n,t.onwrite):e._write(n,o,t.onwrite),t.sync=!1}function D(e,t,r,A){r||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,A(),k(e,t)}function b(e,t){t.bufferProcessing=!0;var r=t.bufferedRequest;if(e._writev&&r&&r.next){var n=t.bufferedRequestCount,o=new Array(n),i=t.corkedRequestsFree;i.entry=r;for(var s=0,a=!0;r;)o[s]=r,r.isBuf||(a=!1),r=r.next,s+=1;o.allBuffers=a,Q(e,t,!0,t.length,o,"",i.finish),t.pendingcb++,t.lastBufferedRequest=null,i.next?(t.corkedRequestsFree=i.next,i.next=null):t.corkedRequestsFree=new A(t),t.bufferedRequestCount=0}else{for(;r;){var c=r.chunk,g=r.encoding,l=r.callback;if(Q(e,t,!1,t.objectMode?1:c.length,c,g,l),r=r.next,t.bufferedRequestCount--,t.writing)break}null===r&&(t.lastBufferedRequest=null)}t.bufferedRequest=r,t.bufferProcessing=!1}function v(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function S(e,t){e._final((function(r){t.pendingcb--,r&&e.emit("error",r),t.prefinished=!0,e.emit("prefinish"),k(e,t)}))}function k(e,t){var r=v(t);return r&&(!function(e,t){t.prefinished||t.finalCalled||("function"!=typeof e._final||t.destroyed?(t.prefinished=!0,e.emit("prefinish")):(t.pendingcb++,t.finalCalled=!0,process.nextTick(S,e,t)))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"))),r}r(85870)(w,i),m.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(m.prototype,"buffer",{get:o.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(c=Function.prototype[Symbol.hasInstance],Object.defineProperty(w,Symbol.hasInstance,{value:function(e){return!!c.call(this,e)||this===w&&(e&&e._writableState instanceof m)}})):c=function(e){return e instanceof this},w.prototype.pipe=function(){this.emit("error",new C)},w.prototype.write=function(e,t,r){var A,n=this._writableState,o=!1,i=!n.objectMode&&(A=e,s.isBuffer(A)||A instanceof a);return i&&!s.isBuffer(e)&&(e=function(e){return s.from(e)}(e)),"function"==typeof t&&(r=t,t=null),i?t="buffer":t||(t=n.defaultEncoding),"function"!=typeof r&&(r=y),n.ending?function(e,t){var r=new E;e.emit("error",r),process.nextTick(t,r)}(this,r):(i||function(e,t,r,A){var n;return null===r?n=new I:"string"==typeof r||t.objectMode||(n=new h("chunk",["string","Buffer"],r)),!n||(e.emit("error",n),process.nextTick(A,n),!1)}(this,n,e,r))&&(n.pendingcb++,o=function(e,t,r,A,n,o){if(!r){var i=function(e,t,r){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=s.from(t,r));return t}(t,A,n);A!==i&&(r=!0,n="buffer",A=i)}var a=t.objectMode?1:A.length;t.length+=a;var c=t.length-1))throw new B(e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(w.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(w.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),w.prototype._write=function(e,t,r){r(new p("_write()"))},w.prototype._writev=null,w.prototype.end=function(e,t,r){var A=this._writableState;return"function"==typeof e?(r=e,e=null,t=null):"function"==typeof t&&(r=t,t=null),null!=e&&this.write(e,t),A.corked&&(A.corked=1,this.uncork()),A.ending||function(e,t,r){t.ending=!0,k(e,t),r&&(t.finished?process.nextTick(r):e.once("finish",r));t.ended=!0,e.writable=!1}(this,A,r),this},Object.defineProperty(w.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(w.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),w.prototype.destroy=g.destroy,w.prototype._undestroy=g.undestroy,w.prototype._destroy=function(e,t){t(e)}},4245:(e,t,r)=>{"use strict";var A;function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var o=r(91327),i=Symbol("lastResolve"),s=Symbol("lastReject"),a=Symbol("error"),c=Symbol("ended"),g=Symbol("lastPromise"),l=Symbol("handlePromise"),u=Symbol("stream");function h(e,t){return{value:e,done:t}}function p(e){var t=e[i];if(null!==t){var r=e[u].read();null!==r&&(e[g]=null,e[i]=null,e[s]=null,t(h(r,!1)))}}function d(e){process.nextTick(p,e)}var C=Object.getPrototypeOf((function(){})),f=Object.setPrototypeOf((n(A={get stream(){return this[u]},next:function(){var e=this,t=this[a];if(null!==t)return Promise.reject(t);if(this[c])return Promise.resolve(h(null,!0));if(this[u].destroyed)return new Promise((function(t,r){process.nextTick((function(){e[a]?r(e[a]):t(h(null,!0))}))}));var r,A=this[g];if(A)r=new Promise(function(e,t){return function(r,A){e.then((function(){t[l](r,A)}),A)}}(A,this));else{var n=this[u].read();if(null!==n)return Promise.resolve(h(n,!1));r=new Promise(this[l])}return this[g]=r,r}},Symbol.asyncIterator,(function(){return this})),n(A,"return",(function(){var e=this;return new Promise((function(t,r){e[u].destroy(null,(function(e){e?r(e):t(h(null,!0))}))}))})),A),C);e.exports=function(e){var t,r=Object.create(f,(n(t={},u,{value:e,writable:!0}),n(t,i,{value:null,writable:!0}),n(t,s,{value:null,writable:!0}),n(t,a,{value:null,writable:!0}),n(t,c,{value:e._readableState.endEmitted,writable:!0}),n(t,g,{value:null,writable:!0}),n(t,l,{value:function(e,t){var A=r[u].read();A?(r[g]=null,r[i]=null,r[s]=null,e(h(A,!1))):(r[i]=e,r[s]=t)},writable:!0}),t));return o(e,(function(e){if(e&&"ERR_STREAM_PREMATURE_CLOSE"!==e.code){var t=r[s];return null!==t&&(r[g]=null,r[i]=null,r[s]=null,t(e)),void(r[a]=e)}var A=r[i];null!==A&&(r[g]=null,r[i]=null,r[s]=null,A(h(null,!0))),r[c]=!0})),e.on("readable",d.bind(null,r)),r}},43117:(e,t,r)=>{"use strict";function A(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var n=r(64293).Buffer,o=r(31669).inspect,i=o&&o.custom||"inspect";e.exports=function(){function e(){this.head=null,this.tail=null,this.length=0}var t=e.prototype;return t.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},t.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},t.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},t.clear=function(){this.head=this.tail=null,this.length=0},t.join=function(e){if(0===this.length)return"";for(var t=this.head,r=""+t.data;t=t.next;)r+=e+t.data;return r},t.concat=function(e){if(0===this.length)return n.alloc(0);for(var t,r,A,o=n.allocUnsafe(e>>>0),i=this.head,s=0;i;)t=i.data,r=o,A=s,n.prototype.copy.call(t,r,A),s+=i.data.length,i=i.next;return o},t.consume=function(e,t){var r;return en.length?n.length:e;if(o===n.length?A+=n:A+=n.slice(0,e),0===(e-=o)){o===n.length?(++r,t.next?this.head=t.next:this.head=this.tail=null):(this.head=t,t.data=n.slice(o));break}++r}return this.length-=r,A},t._getBuffer=function(e){var t=n.allocUnsafe(e),r=this.head,A=1;for(r.data.copy(t),e-=r.data.length;r=r.next;){var o=r.data,i=e>o.length?o.length:e;if(o.copy(t,t.length-e,0,i),0===(e-=i)){i===o.length?(++A,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=o.slice(i));break}++A}return this.length-=A,t},t[i]=function(e,t){return o(this,function(e){for(var t=1;t{"use strict";function t(e,t){A(e,t),r(e)}function r(e){e._writableState&&!e._writableState.emitClose||e._readableState&&!e._readableState.emitClose||e.emit("close")}function A(e,t){e.emit("error",t)}e.exports={destroy:function(e,n){var o=this,i=this._readableState&&this._readableState.destroyed,s=this._writableState&&this._writableState.destroyed;return i||s?(n?n(e):!e||this._writableState&&this._writableState.errorEmitted||process.nextTick(A,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!n&&e?(process.nextTick(t,o,e),o._writableState&&(o._writableState.errorEmitted=!0)):n?(process.nextTick(r,o),n(e)):process.nextTick(r,o)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},91327:(e,t,r)=>{"use strict";var A=r(20663).q.ERR_STREAM_PREMATURE_CLOSE;function n(){}e.exports=function e(t,r,o){if("function"==typeof r)return e(t,null,r);r||(r={}),o=function(e){var t=!1;return function(r){t||(t=!0,e.call(this,r))}}(o||n);var i=t._writableState,s=t._readableState,a=r.readable||!1!==r.readable&&t.readable,c=r.writable||!1!==r.writable&&t.writable,g=function(){t.writable||l()},l=function(){c=!1,a||o.call(t)},u=function(){a=!1,c||o.call(t)},h=function(e){o.call(t,e)},p=function(){return(!a||s&&s.ended)&&(!c||i&&i.ended)?void 0:o.call(t,new A)},d=function(){t.req.on("finish",l)};return!function(e){return e.setHeader&&"function"==typeof e.abort}(t)?c&&!i&&(t.on("end",g),t.on("close",g)):(t.on("complete",l),t.on("abort",p),t.req?d():t.on("request",d)),t.on("end",u),t.on("finish",l),!1!==r.error&&t.on("error",h),t.on("close",p),function(){t.removeListener("complete",l),t.removeListener("abort",p),t.removeListener("request",d),t.req&&t.req.removeListener("finish",l),t.removeListener("end",g),t.removeListener("close",g),t.removeListener("finish",l),t.removeListener("end",u),t.removeListener("error",h),t.removeListener("close",p)}}},4939:(e,t,r)=>{"use strict";var A;var n=r(20663).q,o=n.ERR_MISSING_ARGS,i=n.ERR_STREAM_DESTROYED;function s(e){if(e)throw e}function a(e,t,n,o){o=function(e){var t=!1;return function(){t||(t=!0,e.apply(void 0,arguments))}}(o);var s=!1;e.on("close",(function(){s=!0})),void 0===A&&(A=r(91327)),A(e,{readable:t,writable:n},(function(e){if(e)return o(e);s=!0,o()}));var a=!1;return function(t){if(!s&&!a)return a=!0,function(e){return e.setHeader&&"function"==typeof e.abort}(e)?e.abort():"function"==typeof e.destroy?e.destroy():void o(t||new i("pipe"))}}function c(e){e()}function g(e,t){return e.pipe(t)}function l(e){return e.length?"function"!=typeof e[e.length-1]?s:e.pop():s}e.exports=function(){for(var e=arguments.length,t=new Array(e),r=0;r0,(function(e){A||(A=e),e&&i.forEach(c),o||(i.forEach(c),n(A))}))}));return t.reduce(g)}},77433:(e,t,r)=>{"use strict";var A=r(20663).q.ERR_INVALID_OPT_VALUE;e.exports={getHighWaterMark:function(e,t,r,n){var o=function(e,t,r){return null!=e.highWaterMark?e.highWaterMark:t?e[r]:null}(t,n,r);if(null!=o){if(!isFinite(o)||Math.floor(o)!==o||o<0)throw new A(n?r:"highWaterMark",o);return Math.floor(o)}return e.objectMode?16:16384}}},49298:(e,t,r)=>{e.exports=r(92413)},86897:(e,t,r)=>{var A=r(92413);"disable"===process.env.READABLE_STREAM&&A?(e.exports=A.Readable,Object.assign(e.exports,A),e.exports.Stream=A):((t=e.exports=r(58020)).Stream=A||t,t.Readable=t,t.Writable=r(6729),t.Duplex=r(72434),t.Transform=r(54801),t.PassThrough=r(52444),t.finished=r(91327),t.pipeline=r(4939))},19476:(e,t,r)=>{"use strict";const A=r(4016);e.exports=(e={})=>new Promise((t,r)=>{const n=A.connect(e,()=>{e.resolveSocket?(n.off("error",r),t({alpnProtocol:n.alpnProtocol,socket:n})):(n.destroy(),t({alpnProtocol:n.alpnProtocol}))});n.on("error",r)})},48491:(e,t,r)=>{"use strict";const A=r(92413).Readable,n=r(55737);e.exports=class extends A{constructor(e,t,r,A){if("number"!=typeof e)throw new TypeError("Argument `statusCode` should be a number");if("object"!=typeof t)throw new TypeError("Argument `headers` should be an object");if(!(r instanceof Buffer))throw new TypeError("Argument `body` should be a buffer");if("string"!=typeof A)throw new TypeError("Argument `url` should be a string");super(),this.statusCode=e,this.headers=n(t),this.body=r,this.url=A}_read(){this.push(this.body),this.push(null)}}},2383:e=>{"use strict";e.exports=function(e){var t=new e,r=t;return{get:function(){var A=t;return A.next?t=A.next:(t=new e,r=t),A.next=null,A},release:function(e){r.next=e,r=e}}}},69078:e=>{e.exports=function(e,t){var r,A,n,o=!0;Array.isArray(e)?(r=[],A=e.length):(n=Object.keys(e),r={},A=n.length);function i(e){function A(){t&&t(e,r),t=null}o?process.nextTick(A):A()}function s(e,t,n){r[e]=n,(0==--A||t)&&i(t)}A?n?n.forEach((function(t){e[t]((function(e,r){s(t,e,r)}))})):e.forEach((function(e,t){e((function(e,r){s(t,e,r)}))})):i(null);o=!1}},13499:(e,t,r)=>{var A=r(64293),n=A.Buffer;function o(e,t){for(var r in e)t[r]=e[r]}function i(e,t,r){return n(e,t,r)}n.from&&n.alloc&&n.allocUnsafe&&n.allocUnsafeSlow?e.exports=A:(o(A,t),t.Buffer=i),o(n,i),i.from=function(e,t,r){if("number"==typeof e)throw new TypeError("Argument must not be a number");return n(e,t,r)},i.alloc=function(e,t,r){if("number"!=typeof e)throw new TypeError("Argument must be a number");var A=n(e);return void 0!==t?"string"==typeof r?A.fill(t,r):A.fill(t):A.fill(0),A},i.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return n(e)},i.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return A.SlowBuffer(e)}},95584:(e,t)=>{var r;t=e.exports=l,r="object"==typeof process&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?function(){var e=Array.prototype.slice.call(arguments,0);e.unshift("SEMVER"),console.log.apply(console,e)}:function(){},t.SEMVER_SPEC_VERSION="2.0.0";var A=Number.MAX_SAFE_INTEGER||9007199254740991,n=t.re=[],o=t.src=[],i=t.tokens={},s=0;function a(e){i[e]=s++}a("NUMERICIDENTIFIER"),o[i.NUMERICIDENTIFIER]="0|[1-9]\\d*",a("NUMERICIDENTIFIERLOOSE"),o[i.NUMERICIDENTIFIERLOOSE]="[0-9]+",a("NONNUMERICIDENTIFIER"),o[i.NONNUMERICIDENTIFIER]="\\d*[a-zA-Z-][a-zA-Z0-9-]*",a("MAINVERSION"),o[i.MAINVERSION]="("+o[i.NUMERICIDENTIFIER]+")\\.("+o[i.NUMERICIDENTIFIER]+")\\.("+o[i.NUMERICIDENTIFIER]+")",a("MAINVERSIONLOOSE"),o[i.MAINVERSIONLOOSE]="("+o[i.NUMERICIDENTIFIERLOOSE]+")\\.("+o[i.NUMERICIDENTIFIERLOOSE]+")\\.("+o[i.NUMERICIDENTIFIERLOOSE]+")",a("PRERELEASEIDENTIFIER"),o[i.PRERELEASEIDENTIFIER]="(?:"+o[i.NUMERICIDENTIFIER]+"|"+o[i.NONNUMERICIDENTIFIER]+")",a("PRERELEASEIDENTIFIERLOOSE"),o[i.PRERELEASEIDENTIFIERLOOSE]="(?:"+o[i.NUMERICIDENTIFIERLOOSE]+"|"+o[i.NONNUMERICIDENTIFIER]+")",a("PRERELEASE"),o[i.PRERELEASE]="(?:-("+o[i.PRERELEASEIDENTIFIER]+"(?:\\."+o[i.PRERELEASEIDENTIFIER]+")*))",a("PRERELEASELOOSE"),o[i.PRERELEASELOOSE]="(?:-?("+o[i.PRERELEASEIDENTIFIERLOOSE]+"(?:\\."+o[i.PRERELEASEIDENTIFIERLOOSE]+")*))",a("BUILDIDENTIFIER"),o[i.BUILDIDENTIFIER]="[0-9A-Za-z-]+",a("BUILD"),o[i.BUILD]="(?:\\+("+o[i.BUILDIDENTIFIER]+"(?:\\."+o[i.BUILDIDENTIFIER]+")*))",a("FULL"),a("FULLPLAIN"),o[i.FULLPLAIN]="v?"+o[i.MAINVERSION]+o[i.PRERELEASE]+"?"+o[i.BUILD]+"?",o[i.FULL]="^"+o[i.FULLPLAIN]+"$",a("LOOSEPLAIN"),o[i.LOOSEPLAIN]="[v=\\s]*"+o[i.MAINVERSIONLOOSE]+o[i.PRERELEASELOOSE]+"?"+o[i.BUILD]+"?",a("LOOSE"),o[i.LOOSE]="^"+o[i.LOOSEPLAIN]+"$",a("GTLT"),o[i.GTLT]="((?:<|>)?=?)",a("XRANGEIDENTIFIERLOOSE"),o[i.XRANGEIDENTIFIERLOOSE]=o[i.NUMERICIDENTIFIERLOOSE]+"|x|X|\\*",a("XRANGEIDENTIFIER"),o[i.XRANGEIDENTIFIER]=o[i.NUMERICIDENTIFIER]+"|x|X|\\*",a("XRANGEPLAIN"),o[i.XRANGEPLAIN]="[v=\\s]*("+o[i.XRANGEIDENTIFIER]+")(?:\\.("+o[i.XRANGEIDENTIFIER]+")(?:\\.("+o[i.XRANGEIDENTIFIER]+")(?:"+o[i.PRERELEASE]+")?"+o[i.BUILD]+"?)?)?",a("XRANGEPLAINLOOSE"),o[i.XRANGEPLAINLOOSE]="[v=\\s]*("+o[i.XRANGEIDENTIFIERLOOSE]+")(?:\\.("+o[i.XRANGEIDENTIFIERLOOSE]+")(?:\\.("+o[i.XRANGEIDENTIFIERLOOSE]+")(?:"+o[i.PRERELEASELOOSE]+")?"+o[i.BUILD]+"?)?)?",a("XRANGE"),o[i.XRANGE]="^"+o[i.GTLT]+"\\s*"+o[i.XRANGEPLAIN]+"$",a("XRANGELOOSE"),o[i.XRANGELOOSE]="^"+o[i.GTLT]+"\\s*"+o[i.XRANGEPLAINLOOSE]+"$",a("COERCE"),o[i.COERCE]="(^|[^\\d])(\\d{1,16})(?:\\.(\\d{1,16}))?(?:\\.(\\d{1,16}))?(?:$|[^\\d])",a("COERCERTL"),n[i.COERCERTL]=new RegExp(o[i.COERCE],"g"),a("LONETILDE"),o[i.LONETILDE]="(?:~>?)",a("TILDETRIM"),o[i.TILDETRIM]="(\\s*)"+o[i.LONETILDE]+"\\s+",n[i.TILDETRIM]=new RegExp(o[i.TILDETRIM],"g");a("TILDE"),o[i.TILDE]="^"+o[i.LONETILDE]+o[i.XRANGEPLAIN]+"$",a("TILDELOOSE"),o[i.TILDELOOSE]="^"+o[i.LONETILDE]+o[i.XRANGEPLAINLOOSE]+"$",a("LONECARET"),o[i.LONECARET]="(?:\\^)",a("CARETTRIM"),o[i.CARETTRIM]="(\\s*)"+o[i.LONECARET]+"\\s+",n[i.CARETTRIM]=new RegExp(o[i.CARETTRIM],"g");a("CARET"),o[i.CARET]="^"+o[i.LONECARET]+o[i.XRANGEPLAIN]+"$",a("CARETLOOSE"),o[i.CARETLOOSE]="^"+o[i.LONECARET]+o[i.XRANGEPLAINLOOSE]+"$",a("COMPARATORLOOSE"),o[i.COMPARATORLOOSE]="^"+o[i.GTLT]+"\\s*("+o[i.LOOSEPLAIN]+")$|^$",a("COMPARATOR"),o[i.COMPARATOR]="^"+o[i.GTLT]+"\\s*("+o[i.FULLPLAIN]+")$|^$",a("COMPARATORTRIM"),o[i.COMPARATORTRIM]="(\\s*)"+o[i.GTLT]+"\\s*("+o[i.LOOSEPLAIN]+"|"+o[i.XRANGEPLAIN]+")",n[i.COMPARATORTRIM]=new RegExp(o[i.COMPARATORTRIM],"g");a("HYPHENRANGE"),o[i.HYPHENRANGE]="^\\s*("+o[i.XRANGEPLAIN]+")\\s+-\\s+("+o[i.XRANGEPLAIN]+")\\s*$",a("HYPHENRANGELOOSE"),o[i.HYPHENRANGELOOSE]="^\\s*("+o[i.XRANGEPLAINLOOSE]+")\\s+-\\s+("+o[i.XRANGEPLAINLOOSE]+")\\s*$",a("STAR"),o[i.STAR]="(<|>)?=?\\s*\\*";for(var c=0;c256)return null;if(!(t.loose?n[i.LOOSE]:n[i.FULL]).test(e))return null;try{return new l(e,t)}catch(e){return null}}function l(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof l){if(e.loose===t.loose)return e;e=e.version}else if("string"!=typeof e)throw new TypeError("Invalid Version: "+e);if(e.length>256)throw new TypeError("version is longer than 256 characters");if(!(this instanceof l))return new l(e,t);r("SemVer",e,t),this.options=t,this.loose=!!t.loose;var o=e.trim().match(t.loose?n[i.LOOSE]:n[i.FULL]);if(!o)throw new TypeError("Invalid Version: "+e);if(this.raw=e,this.major=+o[1],this.minor=+o[2],this.patch=+o[3],this.major>A||this.major<0)throw new TypeError("Invalid major version");if(this.minor>A||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>A||this.patch<0)throw new TypeError("Invalid patch version");o[4]?this.prerelease=o[4].split(".").map((function(e){if(/^[0-9]+$/.test(e)){var t=+e;if(t>=0&&t=0;)"number"==typeof this.prerelease[r]&&(this.prerelease[r]++,r=-2);-1===r&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error("invalid increment argument: "+e)}return this.format(),this.raw=this.version,this},t.inc=function(e,t,r,A){"string"==typeof r&&(A=r,r=void 0);try{return new l(e,r).inc(t,A).version}catch(e){return null}},t.diff=function(e,t){if(f(e,t))return null;var r=g(e),A=g(t),n="";if(r.prerelease.length||A.prerelease.length){n="pre";var o="prerelease"}for(var i in r)if(("major"===i||"minor"===i||"patch"===i)&&r[i]!==A[i])return n+i;return o},t.compareIdentifiers=h;var u=/^[0-9]+$/;function h(e,t){var r=u.test(e),A=u.test(t);return r&&A&&(e=+e,t=+t),e===t?0:r&&!A?-1:A&&!r?1:e0}function C(e,t,r){return p(e,t,r)<0}function f(e,t,r){return 0===p(e,t,r)}function I(e,t,r){return 0!==p(e,t,r)}function E(e,t,r){return p(e,t,r)>=0}function B(e,t,r){return p(e,t,r)<=0}function y(e,t,r,A){switch(t){case"===":return"object"==typeof e&&(e=e.version),"object"==typeof r&&(r=r.version),e===r;case"!==":return"object"==typeof e&&(e=e.version),"object"==typeof r&&(r=r.version),e!==r;case"":case"=":case"==":return f(e,r,A);case"!=":return I(e,r,A);case">":return d(e,r,A);case">=":return E(e,r,A);case"<":return C(e,r,A);case"<=":return B(e,r,A);default:throw new TypeError("Invalid operator: "+t)}}function m(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof m){if(e.loose===!!t.loose)return e;e=e.value}if(!(this instanceof m))return new m(e,t);r("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===w?this.value="":this.value=this.operator+this.semver.version,r("comp",this)}t.rcompareIdentifiers=function(e,t){return h(t,e)},t.major=function(e,t){return new l(e,t).major},t.minor=function(e,t){return new l(e,t).minor},t.patch=function(e,t){return new l(e,t).patch},t.compare=p,t.compareLoose=function(e,t){return p(e,t,!0)},t.compareBuild=function(e,t,r){var A=new l(e,r),n=new l(t,r);return A.compare(n)||A.compareBuild(n)},t.rcompare=function(e,t,r){return p(t,e,r)},t.sort=function(e,r){return e.sort((function(e,A){return t.compareBuild(e,A,r)}))},t.rsort=function(e,r){return e.sort((function(e,A){return t.compareBuild(A,e,r)}))},t.gt=d,t.lt=C,t.eq=f,t.neq=I,t.gte=E,t.lte=B,t.cmp=y,t.Comparator=m;var w={};function Q(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof Q)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new Q(e.raw,t);if(e instanceof m)return new Q(e.value,t);if(!(this instanceof Q))return new Q(e,t);if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map((function(e){return this.parseRange(e.trim())}),this).filter((function(e){return e.length})),!this.set.length)throw new TypeError("Invalid SemVer Range: "+e);this.format()}function D(e,t){for(var r=!0,A=e.slice(),n=A.pop();r&&A.length;)r=A.every((function(e){return n.intersects(e,t)})),n=A.pop();return r}function b(e){return!e||"x"===e.toLowerCase()||"*"===e}function v(e,t,r,A,n,o,i,s,a,c,g,l,u){return((t=b(r)?"":b(A)?">="+r+".0.0":b(n)?">="+r+"."+A+".0":">="+t)+" "+(s=b(a)?"":b(c)?"<"+(+a+1)+".0.0":b(g)?"<"+a+"."+(+c+1)+".0":l?"<="+a+"."+c+"."+g+"-"+l:"<="+s)).trim()}function S(e,t,A){for(var n=0;n0){var o=e[n].semver;if(o.major===t.major&&o.minor===t.minor&&o.patch===t.patch)return!0}return!1}return!0}function k(e,t,r){try{t=new Q(t,r)}catch(e){return!1}return t.test(e)}function N(e,t,r,A){var n,o,i,s,a;switch(e=new l(e,A),t=new Q(t,A),r){case">":n=d,o=B,i=C,s=">",a=">=";break;case"<":n=C,o=E,i=d,s="<",a="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(k(e,t,A))return!1;for(var c=0;c=0.0.0")),u=u||e,h=h||e,n(e.semver,u.semver,A)?u=e:i(e.semver,h.semver,A)&&(h=e)})),u.operator===s||u.operator===a)return!1;if((!h.operator||h.operator===s)&&o(e,h.semver))return!1;if(h.operator===a&&i(e,h.semver))return!1}return!0}m.prototype.parse=function(e){var t=this.options.loose?n[i.COMPARATORLOOSE]:n[i.COMPARATOR],r=e.match(t);if(!r)throw new TypeError("Invalid comparator: "+e);this.operator=void 0!==r[1]?r[1]:"","="===this.operator&&(this.operator=""),r[2]?this.semver=new l(r[2],this.options.loose):this.semver=w},m.prototype.toString=function(){return this.value},m.prototype.test=function(e){if(r("Comparator.test",e,this.options.loose),this.semver===w||e===w)return!0;if("string"==typeof e)try{e=new l(e,this.options)}catch(e){return!1}return y(e,this.operator,this.semver,this.options)},m.prototype.intersects=function(e,t){if(!(e instanceof m))throw new TypeError("a Comparator is required");var r;if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),""===this.operator)return""===this.value||(r=new Q(e.value,t),k(this.value,r,t));if(""===e.operator)return""===e.value||(r=new Q(this.value,t),k(e.semver,r,t));var A=!(">="!==this.operator&&">"!==this.operator||">="!==e.operator&&">"!==e.operator),n=!("<="!==this.operator&&"<"!==this.operator||"<="!==e.operator&&"<"!==e.operator),o=this.semver.version===e.semver.version,i=!(">="!==this.operator&&"<="!==this.operator||">="!==e.operator&&"<="!==e.operator),s=y(this.semver,"<",e.semver,t)&&(">="===this.operator||">"===this.operator)&&("<="===e.operator||"<"===e.operator),a=y(this.semver,">",e.semver,t)&&("<="===this.operator||"<"===this.operator)&&(">="===e.operator||">"===e.operator);return A||n||o&&i||s||a},t.Range=Q,Q.prototype.format=function(){return this.range=this.set.map((function(e){return e.join(" ").trim()})).join("||").trim(),this.range},Q.prototype.toString=function(){return this.range},Q.prototype.parseRange=function(e){var t=this.options.loose;e=e.trim();var A=t?n[i.HYPHENRANGELOOSE]:n[i.HYPHENRANGE];e=e.replace(A,v),r("hyphen replace",e),e=e.replace(n[i.COMPARATORTRIM],"$1$2$3"),r("comparator trim",e,n[i.COMPARATORTRIM]),e=(e=(e=e.replace(n[i.TILDETRIM],"$1~")).replace(n[i.CARETTRIM],"$1^")).split(/\s+/).join(" ");var o=t?n[i.COMPARATORLOOSE]:n[i.COMPARATOR],s=e.split(" ").map((function(e){return function(e,t){return r("comp",e,t),e=function(e,t){return e.trim().split(/\s+/).map((function(e){return function(e,t){r("caret",e,t);var A=t.loose?n[i.CARETLOOSE]:n[i.CARET];return e.replace(A,(function(t,A,n,o,i){var s;return r("caret",e,t,A,n,o,i),b(A)?s="":b(n)?s=">="+A+".0.0 <"+(+A+1)+".0.0":b(o)?s="0"===A?">="+A+"."+n+".0 <"+A+"."+(+n+1)+".0":">="+A+"."+n+".0 <"+(+A+1)+".0.0":i?(r("replaceCaret pr",i),s="0"===A?"0"===n?">="+A+"."+n+"."+o+"-"+i+" <"+A+"."+n+"."+(+o+1):">="+A+"."+n+"."+o+"-"+i+" <"+A+"."+(+n+1)+".0":">="+A+"."+n+"."+o+"-"+i+" <"+(+A+1)+".0.0"):(r("no pr"),s="0"===A?"0"===n?">="+A+"."+n+"."+o+" <"+A+"."+n+"."+(+o+1):">="+A+"."+n+"."+o+" <"+A+"."+(+n+1)+".0":">="+A+"."+n+"."+o+" <"+(+A+1)+".0.0"),r("caret return",s),s}))}(e,t)})).join(" ")}(e,t),r("caret",e),e=function(e,t){return e.trim().split(/\s+/).map((function(e){return function(e,t){var A=t.loose?n[i.TILDELOOSE]:n[i.TILDE];return e.replace(A,(function(t,A,n,o,i){var s;return r("tilde",e,t,A,n,o,i),b(A)?s="":b(n)?s=">="+A+".0.0 <"+(+A+1)+".0.0":b(o)?s=">="+A+"."+n+".0 <"+A+"."+(+n+1)+".0":i?(r("replaceTilde pr",i),s=">="+A+"."+n+"."+o+"-"+i+" <"+A+"."+(+n+1)+".0"):s=">="+A+"."+n+"."+o+" <"+A+"."+(+n+1)+".0",r("tilde return",s),s}))}(e,t)})).join(" ")}(e,t),r("tildes",e),e=function(e,t){return r("replaceXRanges",e,t),e.split(/\s+/).map((function(e){return function(e,t){e=e.trim();var A=t.loose?n[i.XRANGELOOSE]:n[i.XRANGE];return e.replace(A,(function(A,n,o,i,s,a){r("xRange",e,A,n,o,i,s,a);var c=b(o),g=c||b(i),l=g||b(s),u=l;return"="===n&&u&&(n=""),a=t.includePrerelease?"-0":"",c?A=">"===n||"<"===n?"<0.0.0-0":"*":n&&u?(g&&(i=0),s=0,">"===n?(n=">=",g?(o=+o+1,i=0,s=0):(i=+i+1,s=0)):"<="===n&&(n="<",g?o=+o+1:i=+i+1),A=n+o+"."+i+"."+s+a):g?A=">="+o+".0.0"+a+" <"+(+o+1)+".0.0"+a:l&&(A=">="+o+"."+i+".0"+a+" <"+o+"."+(+i+1)+".0"+a),r("xRange return",A),A}))}(e,t)})).join(" ")}(e,t),r("xrange",e),e=function(e,t){return r("replaceStars",e,t),e.trim().replace(n[i.STAR],"")}(e,t),r("stars",e),e}(e,this.options)}),this).join(" ").split(/\s+/);return this.options.loose&&(s=s.filter((function(e){return!!e.match(o)}))),s=s.map((function(e){return new m(e,this.options)}),this)},Q.prototype.intersects=function(e,t){if(!(e instanceof Q))throw new TypeError("a Range is required");return this.set.some((function(r){return D(r,t)&&e.set.some((function(e){return D(e,t)&&r.every((function(r){return e.every((function(e){return r.intersects(e,t)}))}))}))}))},t.toComparators=function(e,t){return new Q(e,t).set.map((function(e){return e.map((function(e){return e.value})).join(" ").trim().split(" ")}))},Q.prototype.test=function(e){if(!e)return!1;if("string"==typeof e)try{e=new l(e,this.options)}catch(e){return!1}for(var t=0;t":0===t.prerelease.length?t.patch++:t.prerelease.push(0),t.raw=t.format();case"":case">=":r&&!d(r,t)||(r=t);break;case"<":case"<=":break;default:throw new Error("Unexpected operation: "+e.operator)}}))}if(r&&e.test(r))return r;return null},t.validRange=function(e,t){try{return new Q(e,t).range||"*"}catch(e){return null}},t.ltr=function(e,t,r){return N(e,t,"<",r)},t.gtr=function(e,t,r){return N(e,t,">",r)},t.outside=N,t.prerelease=function(e,t){var r=g(e,t);return r&&r.prerelease.length?r.prerelease:null},t.intersects=function(e,t,r){return e=new Q(e,r),t=new Q(t,r),e.intersects(t)},t.coerce=function(e,t){if(e instanceof l)return e;"number"==typeof e&&(e=String(e));if("string"!=typeof e)return null;var r=null;if((t=t||{}).rtl){for(var A;(A=n[i.COERCERTL].exec(e))&&(!r||r.index+r[0].length!==e.length);)r&&A.index+A[0].length===r.index+r[0].length||(r=A),n[i.COERCERTL].lastIndex=A.index+A[1].length+A[2].length;n[i.COERCERTL].lastIndex=-1}else r=e.match(n[i.COERCE]);if(null===r)return null;return g(r[2]+"."+(r[3]||"0")+"."+(r[4]||"0"),t)}},29069:(e,t,r)=>{const A=Symbol("SemVer ANY");class n{static get ANY(){return A}constructor(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof n){if(e.loose===!!t.loose)return e;e=e.value}a("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===A?this.value="":this.value=this.operator+this.semver.version,a("comp",this)}parse(e){const t=this.options.loose?o[i.COMPARATORLOOSE]:o[i.COMPARATOR],r=e.match(t);if(!r)throw new TypeError("Invalid comparator: "+e);this.operator=void 0!==r[1]?r[1]:"","="===this.operator&&(this.operator=""),r[2]?this.semver=new c(r[2],this.options.loose):this.semver=A}toString(){return this.value}test(e){if(a("Comparator.test",e,this.options.loose),this.semver===A||e===A)return!0;if("string"==typeof e)try{e=new c(e,this.options)}catch(e){return!1}return s(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof n))throw new TypeError("a Comparator is required");if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),""===this.operator)return""===this.value||new g(e.value,t).test(this.value);if(""===e.operator)return""===e.value||new g(this.value,t).test(e.semver);const r=!(">="!==this.operator&&">"!==this.operator||">="!==e.operator&&">"!==e.operator),A=!("<="!==this.operator&&"<"!==this.operator||"<="!==e.operator&&"<"!==e.operator),o=this.semver.version===e.semver.version,i=!(">="!==this.operator&&"<="!==this.operator||">="!==e.operator&&"<="!==e.operator),a=s(this.semver,"<",e.semver,t)&&(">="===this.operator||">"===this.operator)&&("<="===e.operator||"<"===e.operator),c=s(this.semver,">",e.semver,t)&&("<="===this.operator||"<"===this.operator)&&(">="===e.operator||">"===e.operator);return r||A||o&&i||a||c}}e.exports=n;const{re:o,t:i}=r(49439),s=r(38754),a=r(6029),c=r(14772),g=r(73004)},73004:(e,t,r)=>{class A{constructor(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof A)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new A(e.raw,t);if(e instanceof n)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map(e=>this.parseRange(e.trim())).filter(e=>e.length),!this.set.length)throw new TypeError("Invalid SemVer Range: "+e);this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){const t=this.options.loose;e=e.trim();const r=t?s[a.HYPHENRANGELOOSE]:s[a.HYPHENRANGE];e=e.replace(r,w(this.options.includePrerelease)),o("hyphen replace",e),e=e.replace(s[a.COMPARATORTRIM],c),o("comparator trim",e,s[a.COMPARATORTRIM]),e=(e=(e=e.replace(s[a.TILDETRIM],g)).replace(s[a.CARETTRIM],l)).split(/\s+/).join(" ");const A=t?s[a.COMPARATORLOOSE]:s[a.COMPARATOR];return e.split(" ").map(e=>h(e,this.options)).join(" ").split(/\s+/).map(e=>m(e,this.options)).filter(this.options.loose?e=>!!e.match(A):()=>!0).map(e=>new n(e,this.options))}intersects(e,t){if(!(e instanceof A))throw new TypeError("a Range is required");return this.set.some(r=>u(r,t)&&e.set.some(e=>u(e,t)&&r.every(r=>e.every(e=>r.intersects(e,t)))))}test(e){if(!e)return!1;if("string"==typeof e)try{e=new i(e,this.options)}catch(e){return!1}for(let t=0;t{let r=!0;const A=e.slice();let n=A.pop();for(;r&&A.length;)r=A.every(e=>n.intersects(e,t)),n=A.pop();return r},h=(e,t)=>(o("comp",e,t),e=f(e,t),o("caret",e),e=d(e,t),o("tildes",e),e=E(e,t),o("xrange",e),e=y(e,t),o("stars",e),e),p=e=>!e||"x"===e.toLowerCase()||"*"===e,d=(e,t)=>e.trim().split(/\s+/).map(e=>C(e,t)).join(" "),C=(e,t)=>{const r=t.loose?s[a.TILDELOOSE]:s[a.TILDE];return e.replace(r,(t,r,A,n,i)=>{let s;return o("tilde",e,t,r,A,n,i),p(r)?s="":p(A)?s=`>=${r}.0.0 <${+r+1}.0.0-0`:p(n)?s=`>=${r}.${A}.0 <${r}.${+A+1}.0-0`:i?(o("replaceTilde pr",i),s=`>=${r}.${A}.${n}-${i} <${r}.${+A+1}.0-0`):s=`>=${r}.${A}.${n} <${r}.${+A+1}.0-0`,o("tilde return",s),s})},f=(e,t)=>e.trim().split(/\s+/).map(e=>I(e,t)).join(" "),I=(e,t)=>{o("caret",e,t);const r=t.loose?s[a.CARETLOOSE]:s[a.CARET],A=t.includePrerelease?"-0":"";return e.replace(r,(t,r,n,i,s)=>{let a;return o("caret",e,t,r,n,i,s),p(r)?a="":p(n)?a=`>=${r}.0.0${A} <${+r+1}.0.0-0`:p(i)?a="0"===r?`>=${r}.${n}.0${A} <${r}.${+n+1}.0-0`:`>=${r}.${n}.0${A} <${+r+1}.0.0-0`:s?(o("replaceCaret pr",s),a="0"===r?"0"===n?`>=${r}.${n}.${i}-${s} <${r}.${n}.${+i+1}-0`:`>=${r}.${n}.${i}-${s} <${r}.${+n+1}.0-0`:`>=${r}.${n}.${i}-${s} <${+r+1}.0.0-0`):(o("no pr"),a="0"===r?"0"===n?`>=${r}.${n}.${i}${A} <${r}.${n}.${+i+1}-0`:`>=${r}.${n}.${i}${A} <${r}.${+n+1}.0-0`:`>=${r}.${n}.${i} <${+r+1}.0.0-0`),o("caret return",a),a})},E=(e,t)=>(o("replaceXRanges",e,t),e.split(/\s+/).map(e=>B(e,t)).join(" ")),B=(e,t)=>{e=e.trim();const r=t.loose?s[a.XRANGELOOSE]:s[a.XRANGE];return e.replace(r,(r,A,n,i,s,a)=>{o("xRange",e,r,A,n,i,s,a);const c=p(n),g=c||p(i),l=g||p(s),u=l;return"="===A&&u&&(A=""),a=t.includePrerelease?"-0":"",c?r=">"===A||"<"===A?"<0.0.0-0":"*":A&&u?(g&&(i=0),s=0,">"===A?(A=">=",g?(n=+n+1,i=0,s=0):(i=+i+1,s=0)):"<="===A&&(A="<",g?n=+n+1:i=+i+1),"<"===A&&(a="-0"),r=`${A+n}.${i}.${s}${a}`):g?r=`>=${n}.0.0${a} <${+n+1}.0.0-0`:l&&(r=`>=${n}.${i}.0${a} <${n}.${+i+1}.0-0`),o("xRange return",r),r})},y=(e,t)=>(o("replaceStars",e,t),e.trim().replace(s[a.STAR],"")),m=(e,t)=>(o("replaceGTE0",e,t),e.trim().replace(s[t.includePrerelease?a.GTE0PRE:a.GTE0],"")),w=e=>(t,r,A,n,o,i,s,a,c,g,l,u,h)=>`${r=p(A)?"":p(n)?`>=${A}.0.0${e?"-0":""}`:p(o)?`>=${A}.${n}.0${e?"-0":""}`:i?">="+r:`>=${r}${e?"-0":""}`} ${a=p(c)?"":p(g)?`<${+c+1}.0.0-0`:p(l)?`<${c}.${+g+1}.0-0`:u?`<=${c}.${g}.${l}-${u}`:e?`<${c}.${g}.${+l+1}-0`:"<="+a}`.trim(),Q=(e,t,r)=>{for(let r=0;r0){const A=e[r].semver;if(A.major===t.major&&A.minor===t.minor&&A.patch===t.patch)return!0}return!1}return!0}},14772:(e,t,r)=>{const A=r(6029),{MAX_LENGTH:n,MAX_SAFE_INTEGER:o}=r(76483),{re:i,t:s}=r(49439),{compareIdentifiers:a}=r(99297);class c{constructor(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof c){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if("string"!=typeof e)throw new TypeError("Invalid Version: "+e);if(e.length>n)throw new TypeError(`version is longer than ${n} characters`);A("SemVer",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;const r=e.trim().match(t.loose?i[s.LOOSE]:i[s.FULL]);if(!r)throw new TypeError("Invalid Version: "+e);if(this.raw=e,this.major=+r[1],this.minor=+r[2],this.patch=+r[3],this.major>o||this.major<0)throw new TypeError("Invalid major version");if(this.minor>o||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>o||this.patch<0)throw new TypeError("Invalid patch version");r[4]?this.prerelease=r[4].split(".").map(e=>{if(/^[0-9]+$/.test(e)){const t=+e;if(t>=0&&t=0;)"number"==typeof this.prerelease[e]&&(this.prerelease[e]++,e=-2);-1===e&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error("invalid increment argument: "+e)}return this.format(),this.raw=this.version,this}}e.exports=c},31192:(e,t,r)=>{const A=r(21883);e.exports=(e,t)=>{const r=A(e.trim().replace(/^[=v]+/,""),t);return r?r.version:null}},38754:(e,t,r)=>{const A=r(78760),n=r(83286),o=r(26544),i=r(44984),s=r(65069),a=r(93845);e.exports=(e,t,r,c)=>{switch(t){case"===":return"object"==typeof e&&(e=e.version),"object"==typeof r&&(r=r.version),e===r;case"!==":return"object"==typeof e&&(e=e.version),"object"==typeof r&&(r=r.version),e!==r;case"":case"=":case"==":return A(e,r,c);case"!=":return n(e,r,c);case">":return o(e,r,c);case">=":return i(e,r,c);case"<":return s(e,r,c);case"<=":return a(e,r,c);default:throw new TypeError("Invalid operator: "+t)}}},38113:(e,t,r)=>{const A=r(14772),n=r(21883),{re:o,t:i}=r(49439);e.exports=(e,t)=>{if(e instanceof A)return e;if("number"==typeof e&&(e=String(e)),"string"!=typeof e)return null;let r=null;if((t=t||{}).rtl){let t;for(;(t=o[i.COERCERTL].exec(e))&&(!r||r.index+r[0].length!==e.length);)r&&t.index+t[0].length===r.index+r[0].length||(r=t),o[i.COERCERTL].lastIndex=t.index+t[1].length+t[2].length;o[i.COERCERTL].lastIndex=-1}else r=e.match(o[i.COERCE]);return null===r?null:n(`${r[2]}.${r[3]||"0"}.${r[4]||"0"}`,t)}},63353:(e,t,r)=>{const A=r(14772);e.exports=(e,t,r)=>{const n=new A(e,r),o=new A(t,r);return n.compare(o)||n.compareBuild(o)}},58566:(e,t,r)=>{const A=r(17340);e.exports=(e,t)=>A(e,t,!0)},17340:(e,t,r)=>{const A=r(14772);e.exports=(e,t,r)=>new A(e,r).compare(new A(t,r))},29301:(e,t,r)=>{const A=r(21883),n=r(78760);e.exports=(e,t)=>{if(n(e,t))return null;{const r=A(e),n=A(t),o=r.prerelease.length||n.prerelease.length,i=o?"pre":"",s=o?"prerelease":"";for(const e in r)if(("major"===e||"minor"===e||"patch"===e)&&r[e]!==n[e])return i+e;return s}}},78760:(e,t,r)=>{const A=r(17340);e.exports=(e,t,r)=>0===A(e,t,r)},26544:(e,t,r)=>{const A=r(17340);e.exports=(e,t,r)=>A(e,t,r)>0},44984:(e,t,r)=>{const A=r(17340);e.exports=(e,t,r)=>A(e,t,r)>=0},24063:(e,t,r)=>{const A=r(14772);e.exports=(e,t,r,n)=>{"string"==typeof r&&(n=r,r=void 0);try{return new A(e,r).inc(t,n).version}catch(e){return null}}},65069:(e,t,r)=>{const A=r(17340);e.exports=(e,t,r)=>A(e,t,r)<0},93845:(e,t,r)=>{const A=r(17340);e.exports=(e,t,r)=>A(e,t,r)<=0},75157:(e,t,r)=>{const A=r(14772);e.exports=(e,t)=>new A(e,t).major},5195:(e,t,r)=>{const A=r(14772);e.exports=(e,t)=>new A(e,t).minor},83286:(e,t,r)=>{const A=r(17340);e.exports=(e,t,r)=>0!==A(e,t,r)},21883:(e,t,r)=>{const{MAX_LENGTH:A}=r(76483),{re:n,t:o}=r(49439),i=r(14772);e.exports=(e,t)=>{if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof i)return e;if("string"!=typeof e)return null;if(e.length>A)return null;if(!(t.loose?n[o.LOOSE]:n[o.FULL]).test(e))return null;try{return new i(e,t)}catch(e){return null}}},39592:(e,t,r)=>{const A=r(14772);e.exports=(e,t)=>new A(e,t).patch},27050:(e,t,r)=>{const A=r(21883);e.exports=(e,t)=>{const r=A(e,t);return r&&r.prerelease.length?r.prerelease:null}},93788:(e,t,r)=>{const A=r(17340);e.exports=(e,t,r)=>A(t,e,r)},15213:(e,t,r)=>{const A=r(63353);e.exports=(e,t)=>e.sort((e,r)=>A(r,e,t))},73011:(e,t,r)=>{const A=r(73004);e.exports=(e,t,r)=>{try{t=new A(t,r)}catch(e){return!1}return t.test(e)}},71102:(e,t,r)=>{const A=r(63353);e.exports=(e,t)=>e.sort((e,r)=>A(e,r,t))},99589:(e,t,r)=>{const A=r(21883);e.exports=(e,t)=>{const r=A(e,t);return r?r.version:null}},53887:(e,t,r)=>{const A=r(49439);e.exports={re:A.re,src:A.src,tokens:A.t,SEMVER_SPEC_VERSION:r(76483).SEMVER_SPEC_VERSION,SemVer:r(14772),compareIdentifiers:r(99297).compareIdentifiers,rcompareIdentifiers:r(99297).rcompareIdentifiers,parse:r(21883),valid:r(99589),clean:r(31192),inc:r(24063),diff:r(29301),major:r(75157),minor:r(5195),patch:r(39592),prerelease:r(27050),compare:r(17340),rcompare:r(93788),compareLoose:r(58566),compareBuild:r(63353),sort:r(71102),rsort:r(15213),gt:r(26544),lt:r(65069),eq:r(78760),neq:r(83286),gte:r(44984),lte:r(93845),cmp:r(38754),coerce:r(38113),Comparator:r(29069),Range:r(73004),satisfies:r(73011),toComparators:r(47753),maxSatisfying:r(1895),minSatisfying:r(33252),minVersion:r(4224),validRange:r(44315),outside:r(842),gtr:r(69258),ltr:r(36928),intersects:r(87395),simplifyRange:r(3530),subset:r(74264)}},76483:e=>{const t=Number.MAX_SAFE_INTEGER||9007199254740991;e.exports={SEMVER_SPEC_VERSION:"2.0.0",MAX_LENGTH:256,MAX_SAFE_INTEGER:t,MAX_SAFE_COMPONENT_LENGTH:16}},6029:e=>{const t="object"==typeof process&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error("SEMVER",...e):()=>{};e.exports=t},99297:e=>{const t=/^[0-9]+$/,r=(e,r)=>{const A=t.test(e),n=t.test(r);return A&&n&&(e=+e,r=+r),e===r?0:A&&!n?-1:n&&!A?1:er(t,e)}},49439:(e,t,r)=>{const{MAX_SAFE_COMPONENT_LENGTH:A}=r(76483),n=r(6029),o=(t=e.exports={}).re=[],i=t.src=[],s=t.t={};let a=0;const c=(e,t,r)=>{const A=a++;n(A,t),s[e]=A,i[A]=t,o[A]=new RegExp(t,r?"g":void 0)};c("NUMERICIDENTIFIER","0|[1-9]\\d*"),c("NUMERICIDENTIFIERLOOSE","[0-9]+"),c("NONNUMERICIDENTIFIER","\\d*[a-zA-Z-][a-zA-Z0-9-]*"),c("MAINVERSION",`(${i[s.NUMERICIDENTIFIER]})\\.(${i[s.NUMERICIDENTIFIER]})\\.(${i[s.NUMERICIDENTIFIER]})`),c("MAINVERSIONLOOSE",`(${i[s.NUMERICIDENTIFIERLOOSE]})\\.(${i[s.NUMERICIDENTIFIERLOOSE]})\\.(${i[s.NUMERICIDENTIFIERLOOSE]})`),c("PRERELEASEIDENTIFIER",`(?:${i[s.NUMERICIDENTIFIER]}|${i[s.NONNUMERICIDENTIFIER]})`),c("PRERELEASEIDENTIFIERLOOSE",`(?:${i[s.NUMERICIDENTIFIERLOOSE]}|${i[s.NONNUMERICIDENTIFIER]})`),c("PRERELEASE",`(?:-(${i[s.PRERELEASEIDENTIFIER]}(?:\\.${i[s.PRERELEASEIDENTIFIER]})*))`),c("PRERELEASELOOSE",`(?:-?(${i[s.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${i[s.PRERELEASEIDENTIFIERLOOSE]})*))`),c("BUILDIDENTIFIER","[0-9A-Za-z-]+"),c("BUILD",`(?:\\+(${i[s.BUILDIDENTIFIER]}(?:\\.${i[s.BUILDIDENTIFIER]})*))`),c("FULLPLAIN",`v?${i[s.MAINVERSION]}${i[s.PRERELEASE]}?${i[s.BUILD]}?`),c("FULL",`^${i[s.FULLPLAIN]}$`),c("LOOSEPLAIN",`[v=\\s]*${i[s.MAINVERSIONLOOSE]}${i[s.PRERELEASELOOSE]}?${i[s.BUILD]}?`),c("LOOSE",`^${i[s.LOOSEPLAIN]}$`),c("GTLT","((?:<|>)?=?)"),c("XRANGEIDENTIFIERLOOSE",i[s.NUMERICIDENTIFIERLOOSE]+"|x|X|\\*"),c("XRANGEIDENTIFIER",i[s.NUMERICIDENTIFIER]+"|x|X|\\*"),c("XRANGEPLAIN",`[v=\\s]*(${i[s.XRANGEIDENTIFIER]})(?:\\.(${i[s.XRANGEIDENTIFIER]})(?:\\.(${i[s.XRANGEIDENTIFIER]})(?:${i[s.PRERELEASE]})?${i[s.BUILD]}?)?)?`),c("XRANGEPLAINLOOSE",`[v=\\s]*(${i[s.XRANGEIDENTIFIERLOOSE]})(?:\\.(${i[s.XRANGEIDENTIFIERLOOSE]})(?:\\.(${i[s.XRANGEIDENTIFIERLOOSE]})(?:${i[s.PRERELEASELOOSE]})?${i[s.BUILD]}?)?)?`),c("XRANGE",`^${i[s.GTLT]}\\s*${i[s.XRANGEPLAIN]}$`),c("XRANGELOOSE",`^${i[s.GTLT]}\\s*${i[s.XRANGEPLAINLOOSE]}$`),c("COERCE",`(^|[^\\d])(\\d{1,${A}})(?:\\.(\\d{1,${A}}))?(?:\\.(\\d{1,${A}}))?(?:$|[^\\d])`),c("COERCERTL",i[s.COERCE],!0),c("LONETILDE","(?:~>?)"),c("TILDETRIM",`(\\s*)${i[s.LONETILDE]}\\s+`,!0),t.tildeTrimReplace="$1~",c("TILDE",`^${i[s.LONETILDE]}${i[s.XRANGEPLAIN]}$`),c("TILDELOOSE",`^${i[s.LONETILDE]}${i[s.XRANGEPLAINLOOSE]}$`),c("LONECARET","(?:\\^)"),c("CARETTRIM",`(\\s*)${i[s.LONECARET]}\\s+`,!0),t.caretTrimReplace="$1^",c("CARET",`^${i[s.LONECARET]}${i[s.XRANGEPLAIN]}$`),c("CARETLOOSE",`^${i[s.LONECARET]}${i[s.XRANGEPLAINLOOSE]}$`),c("COMPARATORLOOSE",`^${i[s.GTLT]}\\s*(${i[s.LOOSEPLAIN]})$|^$`),c("COMPARATOR",`^${i[s.GTLT]}\\s*(${i[s.FULLPLAIN]})$|^$`),c("COMPARATORTRIM",`(\\s*)${i[s.GTLT]}\\s*(${i[s.LOOSEPLAIN]}|${i[s.XRANGEPLAIN]})`,!0),t.comparatorTrimReplace="$1$2$3",c("HYPHENRANGE",`^\\s*(${i[s.XRANGEPLAIN]})\\s+-\\s+(${i[s.XRANGEPLAIN]})\\s*$`),c("HYPHENRANGELOOSE",`^\\s*(${i[s.XRANGEPLAINLOOSE]})\\s+-\\s+(${i[s.XRANGEPLAINLOOSE]})\\s*$`),c("STAR","(<|>)?=?\\s*\\*"),c("GTE0","^\\s*>=\\s*0.0.0\\s*$"),c("GTE0PRE","^\\s*>=\\s*0.0.0-0\\s*$")},69258:(e,t,r)=>{const A=r(842);e.exports=(e,t,r)=>A(e,t,">",r)},87395:(e,t,r)=>{const A=r(73004);e.exports=(e,t,r)=>(e=new A(e,r),t=new A(t,r),e.intersects(t))},36928:(e,t,r)=>{const A=r(842);e.exports=(e,t,r)=>A(e,t,"<",r)},1895:(e,t,r)=>{const A=r(14772),n=r(73004);e.exports=(e,t,r)=>{let o=null,i=null,s=null;try{s=new n(t,r)}catch(e){return null}return e.forEach(e=>{s.test(e)&&(o&&-1!==i.compare(e)||(o=e,i=new A(o,r)))}),o}},33252:(e,t,r)=>{const A=r(14772),n=r(73004);e.exports=(e,t,r)=>{let o=null,i=null,s=null;try{s=new n(t,r)}catch(e){return null}return e.forEach(e=>{s.test(e)&&(o&&1!==i.compare(e)||(o=e,i=new A(o,r)))}),o}},4224:(e,t,r)=>{const A=r(14772),n=r(73004),o=r(26544);e.exports=(e,t)=>{e=new n(e,t);let r=new A("0.0.0");if(e.test(r))return r;if(r=new A("0.0.0-0"),e.test(r))return r;r=null;for(let t=0;t{const t=new A(e.semver.version);switch(e.operator){case">":0===t.prerelease.length?t.patch++:t.prerelease.push(0),t.raw=t.format();case"":case">=":r&&!o(r,t)||(r=t);break;case"<":case"<=":break;default:throw new Error("Unexpected operation: "+e.operator)}})}return r&&e.test(r)?r:null}},842:(e,t,r)=>{const A=r(14772),n=r(29069),{ANY:o}=n,i=r(73004),s=r(73011),a=r(26544),c=r(65069),g=r(93845),l=r(44984);e.exports=(e,t,r,u)=>{let h,p,d,C,f;switch(e=new A(e,u),t=new i(t,u),r){case">":h=a,p=g,d=c,C=">",f=">=";break;case"<":h=c,p=l,d=a,C="<",f="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(s(e,t,u))return!1;for(let r=0;r{e.semver===o&&(e=new n(">=0.0.0")),i=i||e,s=s||e,h(e.semver,i.semver,u)?i=e:d(e.semver,s.semver,u)&&(s=e)}),i.operator===C||i.operator===f)return!1;if((!s.operator||s.operator===C)&&p(e,s.semver))return!1;if(s.operator===f&&d(e,s.semver))return!1}return!0}},3530:(e,t,r)=>{const A=r(73011),n=r(17340);e.exports=(e,t,r)=>{const o=[];let i=null,s=null;const a=e.sort((e,t)=>n(e,t,r));for(const e of a){A(e,t,r)?(s=e,i||(i=e)):(s&&o.push([i,s]),s=null,i=null)}i&&o.push([i,null]);const c=[];for(const[e,t]of o)e===t?c.push(e):t||e!==a[0]?t?e===a[0]?c.push("<="+t):c.push(`${e} - ${t}`):c.push(">="+e):c.push("*");const g=c.join(" || "),l="string"==typeof t.raw?t.raw:String(t);return g.length{const A=r(73004),{ANY:n}=r(29069),o=r(73011),i=r(17340),s=(e,t,r)=>{if(1===e.length&&e[0].semver===n)return 1===t.length&&t[0].semver===n;const A=new Set;let s,g,l,u,h,p,d;for(const t of e)">"===t.operator||">="===t.operator?s=a(s,t,r):"<"===t.operator||"<="===t.operator?g=c(g,t,r):A.add(t.semver);if(A.size>1)return null;if(s&&g){if(l=i(s.semver,g.semver,r),l>0)return null;if(0===l&&(">="!==s.operator||"<="!==g.operator))return null}for(const e of A){if(s&&!o(e,String(s),r))return null;if(g&&!o(e,String(g),r))return null;for(const A of t)if(!o(e,String(A),r))return!1;return!0}for(const e of t){if(d=d||">"===e.operator||">="===e.operator,p=p||"<"===e.operator||"<="===e.operator,s)if(">"===e.operator||">="===e.operator){if(u=a(s,e,r),u===e)return!1}else if(">="===s.operator&&!o(s.semver,String(e),r))return!1;if(g)if("<"===e.operator||"<="===e.operator){if(h=c(g,e,r),h===e)return!1}else if("<="===g.operator&&!o(g.semver,String(e),r))return!1;if(!e.operator&&(g||s)&&0!==l)return!1}return!(s&&p&&!g&&0!==l)&&!(g&&d&&!s&&0!==l)},a=(e,t,r)=>{if(!e)return t;const A=i(e.semver,t.semver,r);return A>0?e:A<0||">"===t.operator&&">="===e.operator?t:e},c=(e,t,r)=>{if(!e)return t;const A=i(e.semver,t.semver,r);return A<0?e:A>0||"<"===t.operator&&"<="===e.operator?t:e};e.exports=(e,t,r)=>{e=new A(e,r),t=new A(t,r);let n=!1;e:for(const A of e.set){for(const e of t.set){const t=s(A,e,r);if(n=n||null!==t,t)continue e}if(n)return!1}return!0}},47753:(e,t,r)=>{const A=r(73004);e.exports=(e,t)=>new A(e,t).set.map(e=>e.map(e=>e.value).join(" ").trim().split(" "))},44315:(e,t,r)=>{const A=r(73004);e.exports=(e,t)=>{try{return new A(e,t).range||"*"}catch(e){return null}}},91470:(e,t,r)=>{"use strict";const A=r(67719);e.exports=(e="")=>{const t=e.match(A);if(!t)return null;const[r,n]=t[0].replace(/#! ?/,"").split(" "),o=r.split("/").pop();return"env"===o?n:n?`${o} ${n}`:o}},67719:e=>{"use strict";e.exports=/^#!(.*)/},17234:e=>{"use strict";e.exports=e=>{const t=/^\\\\\?\\/.test(e),r=/[^\u0000-\u0080]+/.test(e);return t||r?e:e.replace(/\\/g,"/")}},10129:(e,t,r)=>{"use strict";const A=r(76417),n=r(19184),o=r(92413).Transform,i=["sha256","sha384","sha512"],s=/^[a-z0-9+/]+(?:=?=?)$/i,a=/^([^-]+)-([^?]+)([?\S*]*)$/,c=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)*$/,g=/^[\x21-\x7E]+$/,l=n({algorithms:{default:["sha512"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>B},Promise:{default:()=>Promise},sep:{default:" "},single:{default:!1},size:{},strict:{default:!1}});class u{get isHash(){return!0}constructor(e,t){const r=!!(t=l(t)).strict;this.source=e.trim();const A=this.source.match(r?c:a);if(!A)return;if(r&&!i.some(e=>e===A[1]))return;this.algorithm=A[1],this.digest=A[2];const n=A[3];this.options=n?n.slice(1).split("?"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,"base64").toString("hex")}toJSON(){return this.toString()}toString(e){if((e=l(e)).strict&&!(i.some(e=>e===this.algorithm)&&this.digest.match(s)&&(this.options||[]).every(e=>e.match(g))))return"";const t=this.options&&this.options.length?"?"+this.options.join("?"):"";return`${this.algorithm}-${this.digest}${t}`}}class h{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){let t=(e=l(e)).sep||" ";return e.strict&&(t=t.replace(/\S+/g," ")),Object.keys(this).map(r=>this[r].map(t=>u.prototype.toString.call(t,e)).filter(e=>e.length).join(t)).filter(e=>e.length).join(t)}concat(e,t){t=l(t);const r="string"==typeof e?e:C(e,t);return p(`${this.toString(t)} ${r}`,t)}hexDigest(){return p(this,{single:!0}).hexDigest()}match(e,t){const r=p(e,t=l(t)),A=r.pickAlgorithm(t);return this[A]&&r[A]&&this[A].find(e=>r[A].find(t=>e.digest===t.digest))||!1}pickAlgorithm(e){const t=(e=l(e)).pickAlgorithm,r=Object.keys(this);if(!r.length)throw new Error("No algorithms available for "+JSON.stringify(this.toString()));return r.reduce((e,r)=>t(e,r)||e)}}function p(e,t){if(t=l(t),"string"==typeof e)return d(e,t);if(e.algorithm&&e.digest){const r=new h;return r[e.algorithm]=[e],d(C(r,t),t)}return d(C(e,t),t)}function d(e,t){return t.single?new u(e,t):e.trim().split(/\s+/).reduce((e,r)=>{const A=new u(r,t);if(A.algorithm&&A.digest){const t=A.algorithm;e[t]||(e[t]=[]),e[t].push(A)}return e},new h)}function C(e,t){return t=l(t),e.algorithm&&e.digest?u.prototype.toString.call(e,t):"string"==typeof e?C(p(e,t),t):h.prototype.toString.call(e,t)}function f(e){const t=(e=l(e)).integrity&&p(e.integrity,e),r=t&&Object.keys(t).length,n=r&&t.pickAlgorithm(e),i=r&&t[n],s=Array.from(new Set(e.algorithms.concat(n?[n]:[]))),a=s.map(A.createHash);let c=0;const g=new o({transform(e,t,r){c+=e.length,a.forEach(r=>r.update(e,t)),r(null,e,t)}}).on("end",()=>{const A=e.options&&e.options.length?"?"+e.options.join("?"):"",o=p(a.map((e,t)=>`${s[t]}-${e.digest("base64")}${A}`).join(" "),e),l=r&&o.match(t,e);if("number"==typeof e.size&&c!==e.size){const r=new Error(`stream size mismatch when checking ${t}.\n Wanted: ${e.size}\n Found: ${c}`);r.code="EBADSIZE",r.found=c,r.expected=e.size,r.sri=t,g.emit("error",r)}else if(e.integrity&&!l){const e=new Error(`${t} integrity checksum failed when using ${n}: wanted ${i} but got ${o}. (${c} bytes)`);e.code="EINTEGRITY",e.found=o,e.expected=i,e.algorithm=n,e.sri=t,g.emit("error",e)}else g.emit("size",c),g.emit("integrity",o),l&&g.emit("verified",l)});return g}e.exports.Sd=function(e,t){const r=(t=l(t)).algorithms,n=t.options&&t.options.length?"?"+t.options.join("?"):"";return r.reduce((r,o)=>{const i=A.createHash(o).update(e).digest("base64"),s=new u(`${o}-${i}${n}`,t);if(s.algorithm&&s.digest){const e=s.algorithm;r[e]||(r[e]=[]),r[e].push(s)}return r},new h)};const I=new Set(A.getHashes()),E=["md5","whirlpool","sha1","sha224","sha256","sha384","sha512","sha3","sha3-256","sha3-384","sha3-512","sha3_256","sha3_384","sha3_512"].filter(e=>I.has(e));function B(e,t){return E.indexOf(e.toLowerCase())>=E.indexOf(t.toLowerCase())?e:t}},69538:(e,t,r)=>{"use strict";var A=r(13499).Buffer,n=A.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function o(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(A.isEncoding===n||!n(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=a,this.end=c,t=4;break;case"utf8":this.fillLast=s,t=4;break;case"base64":this.text=g,this.end=l,t=3;break;default:return this.write=u,void(this.end=h)}this.lastNeed=0,this.lastTotal=0,this.lastChar=A.allocUnsafe(t)}function i(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function s(e){var t=this.lastTotal-this.lastNeed,r=function(e,t,r){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==r?r:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function a(e,t){if((e.length-t)%2==0){var r=e.toString("utf16le",t);if(r){var A=r.charCodeAt(r.length-1);if(A>=55296&&A<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function c(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,r)}return t}function g(e,t){var r=(e.length-t)%3;return 0===r?e.toString("base64",t):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-r))}function l(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function u(e){return e.toString(this.encoding)}function h(e){return e&&e.length?this.write(e):""}t.s=o,o.prototype.write=function(e){if(0===e.length)return"";var t,r;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r=0)return n>0&&(e.lastNeed=n-1),n;if(--A=0)return n>0&&(e.lastNeed=n-2),n;if(--A=0)return n>0&&(2===n?n=0:e.lastNeed=n-3),n;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=r;var A=e.length-(r-this.lastNeed);return e.copy(this.lastChar,0,A),e.toString("utf8",t,A)},o.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},59428:(e,t,r)=>{"use strict";const A=r(12087),n=r(33867),o=r(72918),{env:i}=process;let s;function a(e){return 0!==e&&{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function c(e,t){if(0===s)return 0;if(o("color=16m")||o("color=full")||o("color=truecolor"))return 3;if(o("color=256"))return 2;if(e&&!t&&void 0===s)return 0;const r=s||0;if("dumb"===i.TERM)return r;if("win32"===process.platform){const e=A.release().split(".");return Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if("CI"in i)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(e=>e in i)||"codeship"===i.CI_NAME?1:r;if("TEAMCITY_VERSION"in i)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(i.TEAMCITY_VERSION)?1:0;if("GITHUB_ACTIONS"in i)return 1;if("truecolor"===i.COLORTERM)return 3;if("TERM_PROGRAM"in i){const e=parseInt((i.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(i.TERM_PROGRAM){case"iTerm.app":return e>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(i.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(i.TERM)||"COLORTERM"in i?1:r}o("no-color")||o("no-colors")||o("color=false")||o("color=never")?s=0:(o("color")||o("colors")||o("color=true")||o("color=always"))&&(s=1),"FORCE_COLOR"in i&&(s="true"===i.FORCE_COLOR?1:"false"===i.FORCE_COLOR?0:0===i.FORCE_COLOR.length?1:Math.min(parseInt(i.FORCE_COLOR,10),3)),e.exports={supportsColor:function(e){return a(c(e,e&&e.isTTY))},stdout:a(c(!0,n.isatty(1))),stderr:a(c(!0,n.isatty(2)))}},93255:e=>{"use strict";function t(e){return Array.prototype.slice.apply(e)}function r(e){this.status="pending",this._continuations=[],this._parent=null,this._paused=!1,e&&e.call(this,this._continueWith.bind(this),this._failWith.bind(this))}function A(e){return e&&"function"==typeof e.then}function n(e){return e}if(r.prototype={then:function(e,t){var n=r.unresolved()._setParent(this);if(this._isRejected()){if(this._paused)return this._continuations.push({promise:n,nextFn:e,catchFn:t}),n;if(t)try{var o=t(this._error);return A(o)?(this._chainPromiseData(o,n),n):r.resolve(o)._setParent(this)}catch(e){return r.reject(e)._setParent(this)}return r.reject(this._error)._setParent(this)}return this._continuations.push({promise:n,nextFn:e,catchFn:t}),this._runResolutions(),n},catch:function(e){if(this._isResolved())return r.resolve(this._data)._setParent(this);var t=r.unresolved()._setParent(this);return this._continuations.push({promise:t,catchFn:e}),this._runRejections(),t},finally:function(e){var t=!1;function r(r,o){if(!t){t=!0,e||(e=n);var i=e(r);return A(i)?i.then((function(){if(o)throw o;return r})):r}}return this.then((function(e){return r(e)})).catch((function(e){return r(null,e)}))},pause:function(){return this._paused=!0,this},resume:function(){var e=this._findFirstPaused();return e&&(e._paused=!1,e._runResolutions(),e._runRejections()),this},_findAncestry:function(){return this._continuations.reduce((function(e,t){if(t.promise){var r={promise:t.promise,children:t.promise._findAncestry()};e.push(r)}return e}),[])},_setParent:function(e){if(this._parent)throw new Error("parent already set");return this._parent=e,this},_continueWith:function(e){var t=this._findFirstPending();t&&(t._data=e,t._setResolved())},_findFirstPending:function(){return this._findFirstAncestor((function(e){return e._isPending&&e._isPending()}))},_findFirstPaused:function(){return this._findFirstAncestor((function(e){return e._paused}))},_findFirstAncestor:function(e){for(var t,r=this;r;)e(r)&&(t=r),r=r._parent;return t},_failWith:function(e){var t=this._findFirstPending();t&&(t._error=e,t._setRejected())},_takeContinuations:function(){return this._continuations.splice(0,this._continuations.length)},_runRejections:function(){if(!this._paused&&this._isRejected()){var e=this._error,t=this._takeContinuations(),r=this;t.forEach((function(t){if(t.catchFn)try{var A=t.catchFn(e);r._handleUserFunctionResult(A,t.promise)}catch(e){t.promise.reject(e)}else t.promise.reject(e)}))}},_runResolutions:function(){if(!this._paused&&this._isResolved()&&!this._isPending()){var e=this._takeContinuations();if(A(this._data))return this._handleWhenResolvedDataIsPromise(this._data);var t=this._data,r=this;e.forEach((function(e){if(e.nextFn)try{var A=e.nextFn(t);r._handleUserFunctionResult(A,e.promise)}catch(t){r._handleResolutionError(t,e)}else e.promise&&e.promise.resolve(t)}))}},_handleResolutionError:function(e,t){if(this._setRejected(),t.catchFn)try{return void t.catchFn(e)}catch(t){e=t}t.promise&&t.promise.reject(e)},_handleWhenResolvedDataIsPromise:function(e){var t=this;return e.then((function(e){t._data=e,t._runResolutions()})).catch((function(e){t._error=e,t._setRejected(),t._runRejections()}))},_handleUserFunctionResult:function(e,t){A(e)?this._chainPromiseData(e,t):t.resolve(e)},_chainPromiseData:function(e,t){e.then((function(e){t.resolve(e)})).catch((function(e){t.reject(e)}))},_setResolved:function(){this.status="resolved",this._paused||this._runResolutions()},_setRejected:function(){this.status="rejected",this._paused||this._runRejections()},_isPending:function(){return"pending"===this.status},_isResolved:function(){return"resolved"===this.status},_isRejected:function(){return"rejected"===this.status}},r.resolve=function(e){return new r((function(t,r){A(e)?e.then((function(e){t(e)})).catch((function(e){r(e)})):t(e)}))},r.reject=function(e){return new r((function(t,r){r(e)}))},r.unresolved=function(){return new r((function(e,t){this.resolve=e,this.reject=t}))},r.all=function(){var e=t(arguments);return Array.isArray(e[0])&&(e=e[0]),e.length?new r((function(t,A){var n=[],o=0,i=!1;e.forEach((function(s,a){r.resolve(s).then((function(r){n[a]=r,(o+=1)===e.length&&t(n)})).catch((function(e){!function(e){i||(i=!0,A(e))}(e)}))}))})):r.resolve([])},Promise===r)throw new Error("Please use SynchronousPromise.installGlobally() to install globally");var o=Promise;r.installGlobally=function(e){if(Promise===r)return e;var A=function(e){if(void 0===e||e.__patched)return e;var r=e;return(e=function(){r.apply(this,t(arguments))}).__patched=!0,e}(e);return Promise=r,A},r.uninstallGlobally=function(){Promise===r&&(Promise=o)},e.exports={SynchronousPromise:r}},75799:(e,t,r)=>{var A=r(31669),n=r(73975),o=r(77686),i=r(86897).Writable,s=r(86897).PassThrough,a=function(){},c=function(e){return(e&=511)&&512-e},g=function(e,t){this._parent=e,this.offset=t,s.call(this)};A.inherits(g,s),g.prototype.destroy=function(e){this._parent.destroy(e)};var l=function(e){if(!(this instanceof l))return new l(e);i.call(this,e),e=e||{},this._offset=0,this._buffer=n(),this._missing=0,this._partial=!1,this._onparse=a,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var t=this,r=t._buffer,A=function(){t._continue()},s=function(e){if(t._locked=!1,e)return t.destroy(e);t._stream||A()},u=function(){t._stream=null;var e=c(t._header.size);e?t._parse(e,h):t._parse(512,I),t._locked||A()},h=function(){t._buffer.consume(c(t._header.size)),t._parse(512,I),A()},p=function(){var e=t._header.size;t._paxGlobal=o.decodePax(r.slice(0,e)),r.consume(e),u()},d=function(){var e=t._header.size;t._pax=o.decodePax(r.slice(0,e)),t._paxGlobal&&(t._pax=Object.assign({},t._paxGlobal,t._pax)),r.consume(e),u()},C=function(){var A=t._header.size;this._gnuLongPath=o.decodeLongPath(r.slice(0,A),e.filenameEncoding),r.consume(A),u()},f=function(){var A=t._header.size;this._gnuLongLinkPath=o.decodeLongPath(r.slice(0,A),e.filenameEncoding),r.consume(A),u()},I=function(){var n,i=t._offset;try{n=t._header=o.decode(r.slice(0,512),e.filenameEncoding)}catch(e){t.emit("error",e)}return r.consume(512),n?"gnu-long-path"===n.type?(t._parse(n.size,C),void A()):"gnu-long-link-path"===n.type?(t._parse(n.size,f),void A()):"pax-global-header"===n.type?(t._parse(n.size,p),void A()):"pax-header"===n.type?(t._parse(n.size,d),void A()):(t._gnuLongPath&&(n.name=t._gnuLongPath,t._gnuLongPath=null),t._gnuLongLinkPath&&(n.linkname=t._gnuLongLinkPath,t._gnuLongLinkPath=null),t._pax&&(t._header=n=function(e,t){return t.path&&(e.name=t.path),t.linkpath&&(e.linkname=t.linkpath),t.size&&(e.size=parseInt(t.size,10)),e.pax=t,e}(n,t._pax),t._pax=null),t._locked=!0,n.size&&"directory"!==n.type?(t._stream=new g(t,i),t.emit("entry",n,t._stream,s),t._parse(n.size,u),void A()):(t._parse(512,I),void t.emit("entry",n,function(e,t){var r=new g(e,t);return r.end(),r}(t,i),s))):(t._parse(512,I),void A())};this._onheader=I,this._parse(512,I)};A.inherits(l,i),l.prototype.destroy=function(e){this._destroyed||(this._destroyed=!0,e&&this.emit("error",e),this.emit("close"),this._stream&&this._stream.emit("close"))},l.prototype._parse=function(e,t){this._destroyed||(this._offset+=e,this._missing=e,t===this._onheader&&(this._partial=!1),this._onparse=t)},l.prototype._continue=function(){if(!this._destroyed){var e=this._cb;this._cb=a,this._overflow?this._write(this._overflow,void 0,e):e()}},l.prototype._write=function(e,t,r){if(!this._destroyed){var A=this._stream,n=this._buffer,o=this._missing;if(e.length&&(this._partial=!0),e.lengtho&&(i=e.slice(o),e=e.slice(0,o)),A?A.end(e):n.append(e),this._overflow=i,this._onparse()}},l.prototype._final=function(e){if(this._partial)return this.destroy(new Error("Unexpected end of data"));e()},e.exports=l},77686:(e,t)=>{var r=Buffer.alloc,A="0".charCodeAt(0),n=parseInt("7777",8),o=function(e,t,r,A){for(;rt?"7777777777777777777".slice(0,t)+" ":"0000000000000000000".slice(0,t-e.length)+e+" "};var a=function(e,t,r){if(128&(e=e.slice(t,t+r))[t=0])return function(e){var t;if(128===e[0])t=!0;else{if(255!==e[0])return null;t=!1}for(var r=!1,A=[],n=e.length-1;n>0;n--){var o=e[n];t?A.push(o):r&&0===o?A.push(0):r?(r=!1,A.push(256-o)):A.push(255-o)}var i=0,s=A.length;for(n=0;n=i?i:n>=0||(n+=i)>=0?n:0);t=Math.pow(10,r)&&r++,t+r+e};t.decodeLongPath=function(e,t){return c(e,0,e.length,t)},t.encodePax=function(e){var t="";e.name&&(t+=g(" path="+e.name+"\n")),e.linkname&&(t+=g(" linkpath="+e.linkname+"\n"));var r=e.pax;if(r)for(var A in r)t+=g(" "+A+"="+r[A]+"\n");return Buffer.from(t)},t.decodePax=function(e){for(var t={};e.length;){for(var r=0;r100;){var c=o.indexOf("/");if(-1===c)return null;a+=a?"/"+o.slice(0,c):o.slice(0,c),o=o.slice(c+1)}return Buffer.byteLength(o)>100||Buffer.byteLength(a)>155||e.linkname&&Buffer.byteLength(e.linkname)>100?null:(t.write(o),t.write(s(e.mode&n,6),100),t.write(s(e.uid,6),108),t.write(s(e.gid,6),116),t.write(s(e.size,11),124),t.write(s(e.mtime.getTime()/1e3|0,11),136),t[156]=A+function(e){switch(e){case"file":return 0;case"link":return 1;case"symlink":return 2;case"character-device":return 3;case"block-device":return 4;case"directory":return 5;case"fifo":return 6;case"contiguous-file":return 7;case"pax-header":return 72}return 0}(e.type),e.linkname&&t.write(e.linkname,157),t.write("ustar\x0000",257),e.uname&&t.write(e.uname,265),e.gname&&t.write(e.gname,297),t.write(s(e.devmajor||0,6),329),t.write(s(e.devminor||0,6),337),a&&t.write(a,345),t.write(s(i(t),6),148),t)},t.decode=function(e,t){var r=0===e[156]?0:e[156]-A,n=c(e,0,100,t),o=a(e,100,8),s=a(e,108,8),g=a(e,116,8),l=a(e,124,12),u=a(e,136,12),h=function(e){switch(e){case 0:return"file";case 1:return"link";case 2:return"symlink";case 3:return"character-device";case 4:return"block-device";case 5:return"directory";case 6:return"fifo";case 7:return"contiguous-file";case 72:return"pax-header";case 55:return"pax-global-header";case 27:return"gnu-long-link-path";case 28:case 30:return"gnu-long-path"}return null}(r),p=0===e[157]?null:c(e,157,100,t),d=c(e,265,32),C=c(e,297,32),f=a(e,329,8),I=a(e,337,8);e[345]&&(n=c(e,345,155,t)+"/"+n),0===r&&n&&"/"===n[n.length-1]&&(r=5);var E=i(e);if(256===E)return null;if(E!==a(e,148,8))throw new Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");return{name:n,mode:o,uid:s,gid:g,size:l,mtime:new Date(1e3*u),type:h,linkname:p,uname:d,gname:C,devmajor:f,devminor:I}}},59938:(e,t,r)=>{t.extract=r(75799),t.pack=r(72203)},72203:(e,t,r)=>{var A=r(13302),n=r(17067),o=r(85870),i=Buffer.alloc,s=r(86897).Readable,a=r(86897).Writable,c=r(24304).StringDecoder,g=r(77686),l=parseInt("755",8),u=parseInt("644",8),h=i(1024),p=function(){},d=function(e,t){(t&=511)&&e.push(h.slice(0,512-t))};var C=function(e){a.call(this),this.written=0,this._to=e,this._destroyed=!1};o(C,a),C.prototype._write=function(e,t,r){if(this.written+=e.length,this._to.push(e))return r();this._to._drain=r},C.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var f=function(){a.call(this),this.linkname="",this._decoder=new c("utf-8"),this._destroyed=!1};o(f,a),f.prototype._write=function(e,t,r){this.linkname+=this._decoder.write(e),r()},f.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var I=function(){a.call(this),this._destroyed=!1};o(I,a),I.prototype._write=function(e,t,r){r(new Error("No body allowed for this entry"))},I.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var E=function(e){if(!(this instanceof E))return new E(e);s.call(this,e),this._drain=p,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};o(E,s),E.prototype.entry=function(e,t,r){if(this._stream)throw new Error("already piping an entry");if(!this._finalized&&!this._destroyed){"function"==typeof t&&(r=t,t=null),r||(r=p);var o=this;if(e.size&&"symlink"!==e.type||(e.size=0),e.type||(e.type=function(e){switch(e&A.S_IFMT){case A.S_IFBLK:return"block-device";case A.S_IFCHR:return"character-device";case A.S_IFDIR:return"directory";case A.S_IFIFO:return"fifo";case A.S_IFLNK:return"symlink"}return"file"}(e.mode)),e.mode||(e.mode="directory"===e.type?l:u),e.uid||(e.uid=0),e.gid||(e.gid=0),e.mtime||(e.mtime=new Date),"string"==typeof t&&(t=Buffer.from(t)),Buffer.isBuffer(t))return e.size=t.length,this._encode(e),this.push(t),d(o,e.size),process.nextTick(r),new I;if("symlink"===e.type&&!e.linkname){var i=new f;return n(i,(function(t){if(t)return o.destroy(),r(t);e.linkname=i.linkname,o._encode(e),r()})),i}if(this._encode(e),"file"!==e.type&&"contiguous-file"!==e.type)return process.nextTick(r),new I;var s=new C(this);return this._stream=s,n(s,(function(t){return o._stream=null,t?(o.destroy(),r(t)):s.written!==e.size?(o.destroy(),r(new Error("size mismatch"))):(d(o,e.size),o._finalizing&&o.finalize(),void r())})),s}},E.prototype.finalize=function(){this._stream?this._finalizing=!0:this._finalized||(this._finalized=!0,this.push(h),this.push(null))},E.prototype.destroy=function(e){this._destroyed||(this._destroyed=!0,e&&this.emit("error",e),this.emit("close"),this._stream&&this._stream.destroy&&this._stream.destroy())},E.prototype._encode=function(e){if(!e.pax){var t=g.encode(e);if(t)return void this.push(t)}this._encodePax(e)},E.prototype._encodePax=function(e){var t=g.encodePax({name:e.name,linkname:e.linkname,pax:e.pax}),r={name:"PaxHeader",mode:e.mode,uid:e.uid,gid:e.gid,size:t.length,mtime:e.mtime,type:"pax-header",linkname:e.linkname&&"PaxHeader",uname:e.uname,gname:e.gname,devmajor:e.devmajor,devminor:e.devminor};this.push(g.encode(r)),this.push(t),d(this,t.length),r.size=e.size,r.type=e.type,this.push(g.encode(r))},E.prototype._read=function(e){var t=this._drain;this._drain=p,t()},e.exports=E},84615:(e,t,r)=>{"use strict"; +/*! + * to-regex-range + * + * Copyright (c) 2015-present, Jon Schlinkert. + * Released under the MIT License. + */const A=r(59235),n=(e,t,r)=>{if(!1===A(e))throw new TypeError("toRegexRange: expected the first argument to be a number");if(void 0===t||e===t)return String(e);if(!1===A(t))throw new TypeError("toRegexRange: expected the second argument to be a number.");let o={relaxZeros:!0,...r};"boolean"==typeof o.strictZeros&&(o.relaxZeros=!1===o.strictZeros);let a=e+":"+t+"="+String(o.relaxZeros)+String(o.shorthand)+String(o.capture)+String(o.wrap);if(n.cache.hasOwnProperty(a))return n.cache[a].result;let c=Math.min(e,t),g=Math.max(e,t);if(1===Math.abs(c-g)){let r=e+"|"+t;return o.capture?`(${r})`:!1===o.wrap?r:`(?:${r})`}let l=p(e)||p(t),u={min:e,max:t,a:c,b:g},h=[],d=[];if(l&&(u.isPadded=l,u.maxLen=String(u.max).length),c<0){d=i(g<0?Math.abs(g):1,Math.abs(c),u,o),c=u.a=0}return g>=0&&(h=i(c,g,u,o)),u.negatives=d,u.positives=h,u.result=function(e,t,r){let A=s(e,t,"-",!1,r)||[],n=s(t,e,"",!1,r)||[],o=s(e,t,"-?",!0,r)||[];return A.concat(o).concat(n).join("|")}(d,h,o),!0===o.capture?u.result=`(${u.result})`:!1!==o.wrap&&h.length+d.length>1&&(u.result=`(?:${u.result})`),n.cache[a]=u,u.result};function o(e,t,r){if(e===t)return{pattern:e,count:[],digits:0};let A=function(e,t){let r=[];for(let A=0;A1&&n.count.pop(),n.count.push(a.count[0]),n.string=n.pattern+u(n.count),c=t+1)}return s}function s(e,t,r,A,n){let o=[];for(let n of e){let{string:e}=n;A||c(t,"string",e)||o.push(r+e),A&&c(t,"string",e)&&o.push(r+e)}return o}function a(e,t){return e>t?1:t>e?-1:0}function c(e,t,r){return e.some(e=>e[t]===r)}function g(e,t){return Number(String(e).slice(0,-t)+"9".repeat(t))}function l(e,t){return e-e%Math.pow(10,t)}function u(e){let[t=0,r=""]=e;return r||t>1?`{${t+(r?","+r:"")}}`:""}function h(e,t,r){return`[${e}${t-e==1?"":"-"}${t}]`}function p(e){return/^-?(0+)\d/.test(e)}function d(e,t,r){if(!t.isPadded)return e;let A=Math.abs(t.maxLen-String(e).length),n=!1!==r.relaxZeros;switch(A){case 0:return"";case 1:return n?"0?":"0";case 2:return n?"0{0,2}":"00";default:return n?`0{0,${A}}`:`0{${A}}`}}n.cache={},n.clearCache=()=>n.cache={},e.exports=n},75158:e=>{function t(e,t){var r=e.length,A=new Array(r),n={},o=r,i=function(e){for(var t=new Map,r=0,A=e.length;r0&&(n.forEach((function(e,t){t>0&&(g+=(e[1]?" ":"│")+" "),c||e[0]!==r||(c=!0)})),g+=function(e,t){var r=t?"└":"├";return r+=e?"─ ":"──┐"}(t,A)+t,o&&("object"!=typeof r||r instanceof Date)&&(g+=": "+r),c&&(g+=" (circular ref.)"),s(g)),!c&&"object"==typeof r){var h=function(e,t){var r=[];for(var A in e)e.hasOwnProperty(A)&&(t&&"function"==typeof e[A]||r.push(A));return r}(r,i);h.forEach((function(t){a=++l===h.length,e(t,r[t],a,u,o,i,s)}))}}var t={asLines:function(t,r,A,n){e(".",t,!1,[],r,"function"!=typeof A&&A,n||A)},asTree:function(t,r,A){var n="";return e(".",t,!1,[],r,A,(function(e){n+=e+"\n"})),n}};return t}()},36370:(e,t,r)=>{"use strict";r.d(t,{gn:()=>A});function A(e,t,r,A){var n,o=arguments.length,i=o<3?t:null===A?A=Object.getOwnPropertyDescriptor(t,r):A;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,A);else for(var s=e.length-1;s>=0;s--)(n=e[s])&&(i=(o<3?n(i):o>3?n(t,r,i):n(t,r))||i);return o>3&&i&&Object.defineProperty(t,r,i),i}},98161:(e,t,r)=>{e.exports=r(69876)},69876:(e,t,r)=>{"use strict";r(11631);var A,n=r(4016),o=r(98605),i=r(57211),s=r(28614),a=(r(42357),r(31669));function c(e){var t=this;t.options=e||{},t.proxyOptions=t.options.proxy||{},t.maxSockets=t.options.maxSockets||o.Agent.defaultMaxSockets,t.requests=[],t.sockets=[],t.on("free",(function(e,r,A,n){for(var o=l(r,A,n),i=0,s=t.requests.length;i=this.maxSockets?n.requests.push(o):n.createSocket(o,(function(t){function r(){n.emit("free",t,o)}function A(e){n.removeSocket(t),t.removeListener("free",r),t.removeListener("close",A),t.removeListener("agentRemove",A)}t.on("free",r),t.on("close",A),t.on("agentRemove",A),e.onSocket(t)}))},c.prototype.createSocket=function(e,t){var r=this,n={};r.sockets.push(n);var o=u({},r.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(o.localAddress=e.localAddress),o.proxyAuth&&(o.headers=o.headers||{},o.headers["Proxy-Authorization"]="Basic "+new Buffer(o.proxyAuth).toString("base64")),A("making CONNECT request");var i=r.request(o);function s(o,s,a){var c;return i.removeAllListeners(),s.removeAllListeners(),200!==o.statusCode?(A("tunneling socket could not be established, statusCode=%d",o.statusCode),s.destroy(),(c=new Error("tunneling socket could not be established, statusCode="+o.statusCode)).code="ECONNRESET",e.request.emit("error",c),void r.removeSocket(n)):a.length>0?(A("got illegal response body from proxy"),s.destroy(),(c=new Error("got illegal response body from proxy")).code="ECONNRESET",e.request.emit("error",c),void r.removeSocket(n)):(A("tunneling connection has established"),r.sockets[r.sockets.indexOf(n)]=s,t(s))}i.useChunkedEncodingByDefault=!1,i.once("response",(function(e){e.upgrade=!0})),i.once("upgrade",(function(e,t,r){process.nextTick((function(){s(e,t,r)}))})),i.once("connect",s),i.once("error",(function(t){i.removeAllListeners(),A("tunneling socket could not be established, cause=%s\n",t.message,t.stack);var o=new Error("tunneling socket could not be established, cause="+t.message);o.code="ECONNRESET",e.request.emit("error",o),r.removeSocket(n)})),i.end()},c.prototype.removeSocket=function(e){var t=this.sockets.indexOf(e);if(-1!==t){this.sockets.splice(t,1);var r=this.requests.shift();r&&this.createSocket(r,(function(e){r.request.onSocket(e)}))}},A=process.env.NODE_DEBUG&&/\btunnel\b/.test(process.env.NODE_DEBUG)?function(){var e=Array.prototype.slice.call(arguments);"string"==typeof e[0]?e[0]="TUNNEL: "+e[0]:e.unshift("TUNNEL:"),console.error.apply(console,e)}:function(){}},73212:(e,t,r)=>{e.exports=r(31669).deprecate},87945:(e,t,r)=>{const A="win32"===process.platform||"cygwin"===process.env.OSTYPE||"msys"===process.env.OSTYPE,n=r(85622),o=A?";":":",i=r(64151),s=e=>Object.assign(new Error("not found: "+e),{code:"ENOENT"}),a=(e,t)=>{const r=t.colon||o,n=e.match(/\//)||A&&e.match(/\\/)?[""]:[...A?[process.cwd()]:[],...(t.path||process.env.PATH||"").split(r)],i=A?t.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",s=A?i.split(r):[""];return A&&-1!==e.indexOf(".")&&""!==s[0]&&s.unshift(""),{pathEnv:n,pathExt:s,pathExtExe:i}},c=(e,t,r)=>{"function"==typeof t&&(r=t,t={}),t||(t={});const{pathEnv:A,pathExt:o,pathExtExe:c}=a(e,t),g=[],l=r=>new Promise((o,i)=>{if(r===A.length)return t.all&&g.length?o(g):i(s(e));const a=A[r],c=/^".*"$/.test(a)?a.slice(1,-1):a,l=n.join(c,e),h=!c&&/^\.[\\\/]/.test(e)?e.slice(0,2)+l:l;o(u(h,r,0))}),u=(e,r,A)=>new Promise((n,s)=>{if(A===o.length)return n(l(r+1));const a=o[A];i(e+a,{pathExt:c},(o,i)=>{if(!o&&i){if(!t.all)return n(e+a);g.push(e+a)}return n(u(e,r,A+1))})});return r?l(0).then(e=>r(null,e),r):l(0)};e.exports=c,c.sync=(e,t)=>{t=t||{};const{pathEnv:r,pathExt:A,pathExtExe:o}=a(e,t),c=[];for(let s=0;s{e.exports=function e(t,r){if(t&&r)return e(t)(r);if("function"!=typeof t)throw new TypeError("need wrapper function");return Object.keys(t).forEach((function(e){A[e]=t[e]})),A;function A(){for(var e=new Array(arguments.length),r=0;r{"use strict";var A=r(60087);t.__esModule=!0,t.default=void 0;var n=A(r(15215)),o=A(r(11050)),i=function(){function e(e,t){if(this.refs=e,"function"!=typeof t){if(!(0,n.default)(t,"is"))throw new TypeError("`is:` is required for `when()` conditions");if(!t.then&&!t.otherwise)throw new TypeError("either `then:` or `otherwise:` is required for `when()` conditions");var r=t.is,A=t.then,o=t.otherwise,i="function"==typeof r?r:function(){for(var e=arguments.length,t=new Array(e),A=0;A{"use strict";var A=r(60087);t.__esModule=!0,t.default=void 0;var n=A(r(11050)),o=function(){function e(e){this._resolve=function(t,r){var A=e(t,r);if(!(0,n.default)(A))throw new TypeError("lazy() functions must return a valid schema");return A.resolve(r)}}var t=e.prototype;return t.resolve=function(e){return this._resolve(e.value,e)},t.cast=function(e,t){return this._resolve(e,t).cast(e,t)},t.validate=function(e,t){return this._resolve(e,t).validate(e,t)},t.validateSync=function(e,t){return this._resolve(e,t).validateSync(e,t)},t.validateAt=function(e,t,r){return this._resolve(t,r).validateAt(e,t,r)},t.validateSyncAt=function(e,t,r){return this._resolve(t,r).validateSyncAt(e,t,r)},e}();o.prototype.__isYupSchema__=!0;var i=o;t.default=i,e.exports=t.default},95814:(e,t,r)=>{"use strict";var A=r(60087);t.__esModule=!0,t.default=void 0;var n=A(r(72912)),o=r(79588),i="$",s=".",a=function(){function e(e,t){if(void 0===t&&(t={}),"string"!=typeof e)throw new TypeError("ref must be a string, got: "+e);if(this.key=e.trim(),""===e)throw new TypeError("ref must be a non-empty string");this.isContext=this.key[0]===i,this.isValue=this.key[0]===s,this.isSibling=!this.isContext&&!this.isValue;var r=this.isContext?i:this.isValue?s:"";this.path=this.key.slice(r.length),this.getter=this.path&&(0,o.getter)(this.path,!0),this.map=t.map}var t=e.prototype;return t.getValue=function(e){var t=this.isContext?e.context:this.isValue?e.value:e.parent;return this.getter&&(t=this.getter(t||{})),this.map&&(t=this.map(t)),t},t.cast=function(e,t){return this.getValue((0,n.default)({},t,{value:e}))},t.resolve=function(){return this},t.describe=function(){return{type:"ref",key:this.key}},t.toString=function(){return"Ref("+this.key+")"},e.isRef=function(e){return e&&e.__isYupRef},e}();t.default=a,a.prototype.__isYupRef=!0,e.exports=t.default},40828:(e,t,r)=>{"use strict";var A=r(60087);t.__esModule=!0,t.default=s;var n=A(r(21043)),o=/\$\{\s*(\w+)\s*\}/g,i=function(e){return function(t){return e.replace(o,(function(e,r){return(0,n.default)(t[r])}))}};function s(e,t,r,A){var n=this;this.name="ValidationError",this.value=t,this.path=r,this.type=A,this.errors=[],this.inner=[],e&&[].concat(e).forEach((function(e){n.errors=n.errors.concat(e.errors||e),e.inner&&(n.inner=n.inner.concat(e.inner.length?e.inner:e))})),this.message=this.errors.length>1?this.errors.length+" errors occurred":this.errors[0],Error.captureStackTrace&&Error.captureStackTrace(this,s)}s.prototype=Object.create(Error.prototype),s.prototype.constructor=s,s.isError=function(e){return e&&"ValidationError"===e.name},s.formatError=function(e,t){"string"==typeof e&&(e=i(e));var r=function(t){return t.path=t.label||t.path||"this","function"==typeof e?e(t):e};return 1===arguments.length?r:r(t)},e.exports=t.default},18830:(e,t,r)=>{"use strict";var A=r(19228),n=r(60087);t.__esModule=!0,t.default=void 0;var o=n(r(72912)),i=n(r(62407)),s=n(r(31490)),a=n(r(71665)),c=n(r(11050)),g=n(r(7045)),l=n(r(21043)),u=n(r(16434)),h=r(63802),p=A(r(80180));function d(){var e=(0,i.default)(["","[","]"]);return d=function(){return e},e}var C=f;function f(e){var t=this;if(!(this instanceof f))return new f(e);u.default.call(this,{type:"array"}),this._subType=void 0,this.withMutation((function(){t.transform((function(e){if("string"==typeof e)try{e=JSON.parse(e)}catch(t){e=null}return this.isType(e)?e:null})),e&&t.of(e)}))}t.default=C,(0,s.default)(f,u.default,{_typeCheck:function(e){return Array.isArray(e)},_cast:function(e,t){var r=this,A=u.default.prototype._cast.call(this,e,t);if(!this._typeCheck(A)||!this._subType)return A;var n=!1,o=A.map((function(e){var A=r._subType.cast(e,t);return A!==e&&(n=!0),A}));return n?o:A},_validate:function(e,t){var r=this;void 0===t&&(t={});var A=[],n=t.sync,i=t.path,s=this._subType,a=this._option("abortEarly",t),c=this._option("recursive",t),l=null!=t.originalValue?t.originalValue:e;return u.default.prototype._validate.call(this,e,t).catch((0,p.propagateErrors)(a,A)).then((function(e){if(!c||!s||!r._typeCheck(e)){if(A.length)throw A[0];return e}l=l||e;var u=e.map((function(r,A){var n=(0,g.default)(d(),t.path,A),i=(0,o.default)({},t,{path:n,strict:!0,parent:e,originalValue:l[A]});return!s.validate||s.validate(r,i)}));return(0,p.default)({sync:n,path:i,value:e,errors:A,endEarly:a,validations:u})}))},_isPresent:function(e){return u.default.prototype._cast.call(this,e)&&e.length>0},of:function(e){var t=this.clone();if(!1!==e&&!(0,c.default)(e))throw new TypeError("`array.of()` sub-schema must be a valid yup schema, or `false` to negate a current sub-schema. not: "+(0,l.default)(e));return t._subType=e,t},min:function(e,t){return t=t||h.array.min,this.test({message:t,name:"min",exclusive:!0,params:{min:e},test:function(t){return(0,a.default)(t)||t.length>=this.resolve(e)}})},max:function(e,t){return t=t||h.array.max,this.test({message:t,name:"max",exclusive:!0,params:{max:e},test:function(t){return(0,a.default)(t)||t.length<=this.resolve(e)}})},ensure:function(){var e=this;return this.default((function(){return[]})).transform((function(t){return e.isType(t)?t:null===t?[]:[].concat(t)}))},compact:function(e){var t=e?function(t,r,A){return!e(t,r,A)}:function(e){return!!e};return this.transform((function(e){return null!=e?e.filter(t):e}))},describe:function(){var e=u.default.prototype.describe.call(this);return this._subType&&(e.innerType=this._subType.describe()),e}}),e.exports=t.default},76595:(e,t,r)=>{"use strict";var A=r(60087);t.__esModule=!0,t.default=void 0;var n=A(r(31490)),o=A(r(16434)),i=s;function s(){var e=this;if(!(this instanceof s))return new s;o.default.call(this,{type:"boolean"}),this.withMutation((function(){e.transform((function(e){if(!this.isType(e)){if(/^(true|1)$/i.test(e))return!0;if(/^(false|0)$/i.test(e))return!1}return e}))}))}t.default=i,(0,n.default)(s,o.default,{_typeCheck:function(e){return e instanceof Boolean&&(e=e.valueOf()),"boolean"==typeof e}}),e.exports=t.default},41755:(e,t,r)=>{"use strict";var A=r(60087);t.__esModule=!0,t.default=void 0;var n=A(r(16434)),o=A(r(31490)),i=A(r(76813)),s=r(63802),a=A(r(71665)),c=A(r(95814)),g=new Date(""),l=u;function u(){var e=this;if(!(this instanceof u))return new u;n.default.call(this,{type:"date"}),this.withMutation((function(){e.transform((function(e){return this.isType(e)?e:(e=(0,i.default)(e))?new Date(e):g}))}))}t.default=l,(0,o.default)(u,n.default,{_typeCheck:function(e){return t=e,"[object Date]"===Object.prototype.toString.call(t)&&!isNaN(e.getTime());var t},min:function(e,t){void 0===t&&(t=s.date.min);var r=e;if(!c.default.isRef(r)&&(r=this.cast(e),!this._typeCheck(r)))throw new TypeError("`min` must be a Date or a value that can be `cast()` to a Date");return this.test({message:t,name:"min",exclusive:!0,params:{min:e},test:function(e){return(0,a.default)(e)||e>=this.resolve(r)}})},max:function(e,t){void 0===t&&(t=s.date.max);var r=e;if(!c.default.isRef(r)&&(r=this.cast(e),!this._typeCheck(r)))throw new TypeError("`max` must be a Date or a value that can be `cast()` to a Date");return this.test({message:t,name:"max",exclusive:!0,params:{max:e},test:function(e){return(0,a.default)(e)||e<=this.resolve(r)}})}}),e.exports=t.default},15966:(e,t,r)=>{"use strict";var A=r(60087);t.__esModule=!0,t.addMethod=function(e,t,r){if(!e||!(0,d.default)(e.prototype))throw new TypeError("You must provide a yup schema constructor function");if("string"!=typeof t)throw new TypeError("A Method name must be provided");if("function"!=typeof r)throw new TypeError("Method function must be provided");e.prototype[t]=r},t.lazy=t.ref=t.boolean=void 0;var n=A(r(16434));t.mixed=n.default;var o=A(r(76595));t.bool=o.default;var i=A(r(45167));t.string=i.default;var s=A(r(72068));t.number=s.default;var a=A(r(41755));t.date=a.default;var c=A(r(51727));t.object=c.default;var g=A(r(18830));t.array=g.default;var l=A(r(95814)),u=A(r(6856)),h=A(r(40828));t.ValidationError=h.default;var p=A(r(43910));t.reach=p.default;var d=A(r(11050));t.isSchema=d.default;var C=A(r(24280));t.setLocale=C.default;var f=o.default;t.boolean=f;t.ref=function(e,t){return new l.default(e,t)};t.lazy=function(e){return new u.default(e)}},63802:(e,t,r)=>{"use strict";var A=r(60087);t.__esModule=!0,t.default=t.array=t.object=t.boolean=t.date=t.number=t.string=t.mixed=void 0;var n=A(r(21043)),o={default:"${path} is invalid",required:"${path} is a required field",oneOf:"${path} must be one of the following values: ${values}",notOneOf:"${path} must not be one of the following values: ${values}",notType:function(e){var t=e.path,r=e.type,A=e.value,o=e.originalValue,i=null!=o&&o!==A,s=t+" must be a `"+r+"` type, but the final value was: `"+(0,n.default)(A,!0)+"`"+(i?" (cast from the value `"+(0,n.default)(o,!0)+"`).":".");return null===A&&(s+='\n If "null" is intended as an empty value be sure to mark the schema as `.nullable()`'),s}};t.mixed=o;var i={length:"${path} must be exactly ${length} characters",min:"${path} must be at least ${min} characters",max:"${path} must be at most ${max} characters",matches:'${path} must match the following: "${regex}"',email:"${path} must be a valid email",url:"${path} must be a valid URL",trim:"${path} must be a trimmed string",lowercase:"${path} must be a lowercase string",uppercase:"${path} must be a upper case string"};t.string=i;var s={min:"${path} must be greater than or equal to ${min}",max:"${path} must be less than or equal to ${max}",lessThan:"${path} must be less than ${less}",moreThan:"${path} must be greater than ${more}",notEqual:"${path} must be not equal to ${notEqual}",positive:"${path} must be a positive number",negative:"${path} must be a negative number",integer:"${path} must be an integer"};t.number=s;var a={min:"${path} field must be later than ${min}",max:"${path} field must be at earlier than ${max}"};t.date=a;var c={};t.boolean=c;var g={noUnknown:"${path} field cannot have keys not specified in the object shape"};t.object=g;var l={min:"${path} field must have at least ${min} items",max:"${path} field must have less than or equal to ${max} items"};t.array=l;var u={mixed:o,string:i,number:s,date:a,object:g,array:l,boolean:c};t.default=u},16434:(e,t,r)=>{"use strict";var A=r(60087);t.__esModule=!0,t.default=I;var n=A(r(72912)),o=A(r(15215)),i=A(r(26052)),s=A(r(78700)),a=r(63802),c=A(r(94916)),g=A(r(80180)),l=A(r(22808)),u=A(r(11050)),h=A(r(54107)),p=A(r(21043)),d=A(r(95814)),C=r(43910),f=function(){function e(){this.list=new Set,this.refs=new Map}var t=e.prototype;return t.toArray=function(){return(0,s.default)(this.list).concat((0,s.default)(this.refs.values()))},t.add=function(e){d.default.isRef(e)?this.refs.set(e.key,e):this.list.add(e)},t.delete=function(e){d.default.isRef(e)?this.refs.delete(e.key,e):this.list.delete(e)},t.has=function(e,t){if(this.list.has(e))return!0;for(var r,A=this.refs.values();!(r=A.next()).done;)if(t(r.value)===e)return!0;return!1},e}();function I(e){var t=this;if(void 0===e&&(e={}),!(this instanceof I))return new I;this._deps=[],this._conditions=[],this._options={abortEarly:!0,recursive:!0},this._exclusive=Object.create(null),this._whitelist=new f,this._blacklist=new f,this.tests=[],this.transforms=[],this.withMutation((function(){t.typeError(a.mixed.notType)})),(0,o.default)(e,"default")&&(this._defaultDefault=e.default),this._type=e.type||"mixed"}for(var E=I.prototype={__isYupSchema__:!0,constructor:I,clone:function(){var e=this;return this._mutate?this:(0,i.default)(this,(function(t){if((0,u.default)(t)&&t!==e)return t}))},label:function(e){var t=this.clone();return t._label=e,t},meta:function(e){if(0===arguments.length)return this._meta;var t=this.clone();return t._meta=(0,n.default)(t._meta||{},e),t},withMutation:function(e){var t=this._mutate;this._mutate=!0;var r=e(this);return this._mutate=t,r},concat:function(e){if(!e||e===this)return this;if(e._type!==this._type&&"mixed"!==this._type)throw new TypeError("You cannot `concat()` schema's of different types: "+this._type+" and "+e._type);var t=(0,l.default)(e.clone(),this);return(0,o.default)(e,"_default")&&(t._default=e._default),t.tests=this.tests,t._exclusive=this._exclusive,t.withMutation((function(t){e.tests.forEach((function(e){t.test(e.OPTIONS)}))})),t},isType:function(e){return!(!this._nullable||null!==e)||(!this._typeCheck||this._typeCheck(e))},resolve:function(e){var t=this;if(t._conditions.length){var r=t._conditions;(t=t.clone())._conditions=[],t=(t=r.reduce((function(t,r){return r.resolve(t,e)}),t)).resolve(e)}return t},cast:function(e,t){void 0===t&&(t={});var r=this.resolve((0,n.default)({},t,{value:e})),A=r._cast(e,t);if(void 0!==e&&!1!==t.assert&&!0!==r.isType(A)){var o=(0,p.default)(e),i=(0,p.default)(A);throw new TypeError("The value of "+(t.path||"field")+' could not be cast to a value that satisfies the schema type: "'+r._type+'". \n\nattempted value: '+o+" \n"+(i!==o?"result of cast: "+i:""))}return A},_cast:function(e){var t=this,r=void 0===e?e:this.transforms.reduce((function(r,A){return A.call(t,r,e)}),e);return void 0===r&&(0,o.default)(this,"_default")&&(r=this.default()),r},_validate:function(e,t){var r=this;void 0===t&&(t={});var A=e,o=null!=t.originalValue?t.originalValue:e,i=this._option("strict",t),s=this._option("abortEarly",t),a=t.sync,c=t.path,l=this._label;i||(A=this._cast(A,(0,n.default)({assert:!1},t)));var u={value:A,path:c,schema:this,options:t,label:l,originalValue:o,sync:a},h=[];return this._typeError&&h.push(this._typeError(u)),this._whitelistError&&h.push(this._whitelistError(u)),this._blacklistError&&h.push(this._blacklistError(u)),(0,g.default)({validations:h,endEarly:s,value:A,path:c,sync:a}).then((function(e){return(0,g.default)({path:c,sync:a,value:e,endEarly:s,validations:r.tests.map((function(e){return e(u)}))})}))},validate:function(e,t){return void 0===t&&(t={}),this.resolve((0,n.default)({},t,{value:e}))._validate(e,t)},validateSync:function(e,t){var r,A;if(void 0===t&&(t={}),this.resolve((0,n.default)({},t,{value:e}))._validate(e,(0,n.default)({},t,{sync:!0})).then((function(e){return r=e})).catch((function(e){return A=e})),A)throw A;return r},isValid:function(e,t){return this.validate(e,t).then((function(){return!0})).catch((function(e){if("ValidationError"===e.name)return!1;throw e}))},isValidSync:function(e,t){try{return this.validateSync(e,t),!0}catch(e){if("ValidationError"===e.name)return!1;throw e}},getDefault:function(e){return void 0===e&&(e={}),this.resolve(e).default()},default:function(e){if(0===arguments.length){var t=(0,o.default)(this,"_default")?this._default:this._defaultDefault;return"function"==typeof t?t.call(this):(0,i.default)(t)}var r=this.clone();return r._default=e,r},strict:function(e){void 0===e&&(e=!0);var t=this.clone();return t._options.strict=e,t},_isPresent:function(e){return null!=e},required:function(e){return void 0===e&&(e=a.mixed.required),this.test({message:e,name:"required",exclusive:!0,test:function(e){return this.schema._isPresent(e)}})},notRequired:function(){var e=this.clone();return e.tests=e.tests.filter((function(e){return"required"!==e.OPTIONS.name})),e},nullable:function(e){void 0===e&&(e=!0);var t=this.clone();return t._nullable=e,t},transform:function(e){var t=this.clone();return t.transforms.push(e),t},test:function(){var e;if(void 0===(e=1===arguments.length?"function"==typeof(arguments.length<=0?void 0:arguments[0])?{test:arguments.length<=0?void 0:arguments[0]}:arguments.length<=0?void 0:arguments[0]:2===arguments.length?{name:arguments.length<=0?void 0:arguments[0],test:arguments.length<=1?void 0:arguments[1]}:{name:arguments.length<=0?void 0:arguments[0],message:arguments.length<=1?void 0:arguments[1],test:arguments.length<=2?void 0:arguments[2]}).message&&(e.message=a.mixed.default),"function"!=typeof e.test)throw new TypeError("`test` is a required parameters");var t=this.clone(),r=(0,h.default)(e),A=e.exclusive||e.name&&!0===t._exclusive[e.name];if(e.exclusive&&!e.name)throw new TypeError("Exclusive tests must provide a unique `name` identifying the test");return t._exclusive[e.name]=!!e.exclusive,t.tests=t.tests.filter((function(t){if(t.OPTIONS.name===e.name){if(A)return!1;if(t.OPTIONS.test===r.OPTIONS.test)return!1}return!0})),t.tests.push(r),t},when:function(e,t){1===arguments.length&&(t=e,e=".");var r=this.clone(),A=[].concat(e).map((function(e){return new d.default(e)}));return A.forEach((function(e){e.isSibling&&r._deps.push(e.key)})),r._conditions.push(new c.default(A,t)),r},typeError:function(e){var t=this.clone();return t._typeError=(0,h.default)({message:e,name:"typeError",test:function(e){return!(void 0!==e&&!this.schema.isType(e))||this.createError({params:{type:this.schema._type}})}}),t},oneOf:function(e,t){void 0===t&&(t=a.mixed.oneOf);var r=this.clone();return e.forEach((function(e){r._whitelist.add(e),r._blacklist.delete(e)})),r._whitelistError=(0,h.default)({message:t,name:"oneOf",test:function(e){if(void 0===e)return!0;var t=this.schema._whitelist;return!!t.has(e,this.resolve)||this.createError({params:{values:t.toArray().join(", ")}})}}),r},notOneOf:function(e,t){void 0===t&&(t=a.mixed.notOneOf);var r=this.clone();return e.forEach((function(e){r._blacklist.add(e),r._whitelist.delete(e)})),r._blacklistError=(0,h.default)({message:t,name:"notOneOf",test:function(e){var t=this.schema._blacklist;return!t.has(e,this.resolve)||this.createError({params:{values:t.toArray().join(", ")}})}}),r},strip:function(e){void 0===e&&(e=!0);var t=this.clone();return t._strip=e,t},_option:function(e,t){return(0,o.default)(t,e)?t[e]:this._options[e]},describe:function(){var e=this.clone();return{type:e._type,meta:e._meta,label:e._label,tests:e.tests.map((function(e){return{name:e.OPTIONS.name,params:e.OPTIONS.params}})).filter((function(e,t,r){return r.findIndex((function(t){return t.name===e.name}))===t}))}}},B=["validate","validateSync"],y=function(){var e=B[m];E[e+"At"]=function(t,r,A){void 0===A&&(A={});var o=(0,C.getIn)(this,t,r,A.context),i=o.parent,s=o.parentPath;return o.schema[e](i&&i[s],(0,n.default)({},A,{parent:i,path:t}))}},m=0;m{"use strict";var A=r(60087);t.__esModule=!0,t.default=c;var n=A(r(31490)),o=A(r(16434)),i=r(63802),s=A(r(71665)),a=function(e){return(0,s.default)(e)||e===(0|e)};function c(){var e=this;if(!(this instanceof c))return new c;o.default.call(this,{type:"number"}),this.withMutation((function(){e.transform((function(e){var t=e;if("string"==typeof t){if(""===(t=t.replace(/\s/g,"")))return NaN;t=+t}return this.isType(t)?t:parseFloat(t)}))}))}(0,n.default)(c,o.default,{_typeCheck:function(e){return e instanceof Number&&(e=e.valueOf()),"number"==typeof e&&!function(e){return e!=+e}(e)},min:function(e,t){return void 0===t&&(t=i.number.min),this.test({message:t,name:"min",exclusive:!0,params:{min:e},test:function(t){return(0,s.default)(t)||t>=this.resolve(e)}})},max:function(e,t){return void 0===t&&(t=i.number.max),this.test({message:t,name:"max",exclusive:!0,params:{max:e},test:function(t){return(0,s.default)(t)||t<=this.resolve(e)}})},lessThan:function(e,t){return void 0===t&&(t=i.number.lessThan),this.test({message:t,name:"max",exclusive:!0,params:{less:e},test:function(t){return(0,s.default)(t)||tthis.resolve(e)}})},positive:function(e){return void 0===e&&(e=i.number.positive),this.moreThan(0,e)},negative:function(e){return void 0===e&&(e=i.number.negative),this.lessThan(0,e)},integer:function(e){return void 0===e&&(e=i.number.integer),this.test({name:"integer",message:e,test:a})},truncate:function(){return this.transform((function(e){return(0,s.default)(e)?e:0|e}))},round:function(e){var t=["ceil","floor","round","trunc"];if("trunc"===(e=e&&e.toLowerCase()||"round"))return this.truncate();if(-1===t.indexOf(e.toLowerCase()))throw new TypeError("Only valid options for round() are: "+t.join(", "));return this.transform((function(t){return(0,s.default)(t)?t:Math[e](t)}))}}),e.exports=t.default},51727:(e,t,r)=>{"use strict";var A=r(19228),n=r(60087);t.__esModule=!0,t.default=w;var o=n(r(62407)),i=n(r(72912)),s=n(r(15215)),a=n(r(36494)),c=n(r(89170)),g=n(r(5253)),l=n(r(89612)),u=r(79588),h=n(r(16434)),p=r(63802),d=n(r(18417)),C=n(r(23316)),f=n(r(31490)),I=n(r(7045)),E=A(r(80180));function B(){var e=(0,o.default)(["",".",""]);return B=function(){return e},e}function y(){var e=(0,o.default)(["",".",""]);return y=function(){return e},e}var m=function(e){return"[object Object]"===Object.prototype.toString.call(e)};function w(e){var t=this;if(!(this instanceof w))return new w(e);h.default.call(this,{type:"object",default:function(){var e=this;if(this._nodes.length){var t={};return this._nodes.forEach((function(r){t[r]=e.fields[r].default?e.fields[r].default():void 0})),t}}}),this.fields=Object.create(null),this._nodes=[],this._excludedEdges=[],this.withMutation((function(){t.transform((function(e){if("string"==typeof e)try{e=JSON.parse(e)}catch(t){e=null}return this.isType(e)?e:null})),e&&t.shape(e)}))}(0,f.default)(w,h.default,{_typeCheck:function(e){return m(e)||"function"==typeof e},_cast:function(e,t){var r=this;void 0===t&&(t={});var A=h.default.prototype._cast.call(this,e,t);if(void 0===A)return this.default();if(!this._typeCheck(A))return A;var n=this.fields,o=!0===this._option("stripUnknown",t),a=this._nodes.concat(Object.keys(A).filter((function(e){return-1===r._nodes.indexOf(e)}))),c={},g=(0,i.default)({},t,{parent:c,__validating:!1}),l=!1;return a.forEach((function(e){var r=n[e],i=(0,s.default)(A,e);if(r){var a,u=r._options&&r._options.strict;if(g.path=(0,I.default)(y(),t.path,e),g.value=A[e],!0===(r=r.resolve(g))._strip)return void(l=l||e in A);void 0!==(a=t.__validating&&u?A[e]:r.cast(A[e],g))&&(c[e]=a)}else i&&!o&&(c[e]=A[e]);c[e]!==A[e]&&(l=!0)})),l?c:A},_validate:function(e,t){var r,A,n=this;void 0===t&&(t={});var o=t.sync,s=[],a=null!=t.originalValue?t.originalValue:e;return r=this._option("abortEarly",t),A=this._option("recursive",t),t=(0,i.default)({},t,{__validating:!0,originalValue:a}),h.default.prototype._validate.call(this,e,t).catch((0,E.propagateErrors)(r,s)).then((function(e){if(!A||!m(e)){if(s.length)throw s[0];return e}a=a||e;var c=n._nodes.map((function(r){var A=(0,I.default)(B(),t.path,r),o=n.fields[r],s=(0,i.default)({},t,{path:A,parent:e,originalValue:a[r]});return o&&o.validate?(s.strict=!0,o.validate(e[r],s)):Promise.resolve(!0)}));return(0,E.default)({sync:o,validations:c,value:e,errors:s,endEarly:r,path:t.path,sort:(0,C.default)(n.fields)})}))},concat:function(e){var t=h.default.prototype.concat.call(this,e);return t._nodes=(0,d.default)(t.fields,t._excludedEdges),t},shape:function(e,t){void 0===t&&(t=[]);var r=this.clone(),A=(0,i.default)(r.fields,e);if(r.fields=A,t.length){Array.isArray(t[0])||(t=[t]);var n=t.map((function(e){return e[0]+"-"+e[1]}));r._excludedEdges=r._excludedEdges.concat(n)}return r._nodes=(0,d.default)(A,r._excludedEdges),r},from:function(e,t,r){var A=(0,u.getter)(e,!0);return this.transform((function(n){if(null==n)return n;var o=n;return(0,s.default)(n,e)&&(o=(0,i.default)({},n),r||delete o[e],o[t]=A(n)),o}))},noUnknown:function(e,t){void 0===e&&(e=!0),void 0===t&&(t=p.object.noUnknown),"string"==typeof e&&(t=e,e=!0);var r=this.test({name:"noUnknown",exclusive:!0,message:t,test:function(t){return null==t||!e||0===function(e,t){var r=Object.keys(e.fields);return Object.keys(t).filter((function(e){return-1===r.indexOf(e)}))}(this.schema,t).length}});return r._options.stripUnknown=e,r},unknown:function(e,t){return void 0===e&&(e=!0),void 0===t&&(t=p.object.noUnknown),this.noUnknown(!e,t)},transformKeys:function(e){return this.transform((function(t){return t&&(0,g.default)(t,(function(t,r){return e(r)}))}))},camelCase:function(){return this.transformKeys(c.default)},snakeCase:function(){return this.transformKeys(a.default)},constantCase:function(){return this.transformKeys((function(e){return(0,a.default)(e).toUpperCase()}))},describe:function(){var e=h.default.prototype.describe.call(this);return e.fields=(0,l.default)(this.fields,(function(e){return e.describe()})),e}}),e.exports=t.default},24280:(e,t,r)=>{"use strict";var A=r(60087);t.__esModule=!0,t.default=function(e){Object.keys(e).forEach((function(t){Object.keys(e[t]).forEach((function(r){n.default[t][r]=e[t][r]}))}))};var n=A(r(63802));e.exports=t.default},45167:(e,t,r)=>{"use strict";var A=r(60087);t.__esModule=!0,t.default=l;var n=A(r(31490)),o=A(r(16434)),i=r(63802),s=A(r(71665)),a=/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i,c=/^((https?|ftp):)?\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i,g=function(e){return(0,s.default)(e)||e===e.trim()};function l(){var e=this;if(!(this instanceof l))return new l;o.default.call(this,{type:"string"}),this.withMutation((function(){e.transform((function(e){return this.isType(e)?e:null!=e&&e.toString?e.toString():e}))}))}(0,n.default)(l,o.default,{_typeCheck:function(e){return e instanceof String&&(e=e.valueOf()),"string"==typeof e},_isPresent:function(e){return o.default.prototype._cast.call(this,e)&&e.length>0},length:function(e,t){return void 0===t&&(t=i.string.length),this.test({message:t,name:"length",exclusive:!0,params:{length:e},test:function(t){return(0,s.default)(t)||t.length===this.resolve(e)}})},min:function(e,t){return void 0===t&&(t=i.string.min),this.test({message:t,name:"min",exclusive:!0,params:{min:e},test:function(t){return(0,s.default)(t)||t.length>=this.resolve(e)}})},max:function(e,t){return void 0===t&&(t=i.string.max),this.test({name:"max",exclusive:!0,message:t,params:{max:e},test:function(t){return(0,s.default)(t)||t.length<=this.resolve(e)}})},matches:function(e,t){var r,A=!1;return t&&(t.message||t.hasOwnProperty("excludeEmptyString")?(A=t.excludeEmptyString,r=t.message):r=t),this.test({message:r||i.string.matches,params:{regex:e},test:function(t){return(0,s.default)(t)||""===t&&A||e.test(t)}})},email:function(e){return void 0===e&&(e=i.string.email),this.matches(a,{message:e,excludeEmptyString:!0})},url:function(e){return void 0===e&&(e=i.string.url),this.matches(c,{message:e,excludeEmptyString:!0})},ensure:function(){return this.default("").transform((function(e){return null===e?"":e}))},trim:function(e){return void 0===e&&(e=i.string.trim),this.transform((function(e){return null!=e?e.trim():e})).test({message:e,name:"trim",test:g})},lowercase:function(e){return void 0===e&&(e=i.string.lowercase),this.transform((function(e){return(0,s.default)(e)?e:e.toLowerCase()})).test({message:e,name:"string_case",exclusive:!0,test:function(e){return(0,s.default)(e)||e===e.toLowerCase()}})},uppercase:function(e){return void 0===e&&(e=i.string.uppercase),this.transform((function(e){return(0,s.default)(e)?e:e.toUpperCase()})).test({message:e,name:"string_case",exclusive:!0,test:function(e){return(0,s.default)(e)||e===e.toUpperCase()}})}}),e.exports=t.default},54107:(e,t,r)=>{"use strict";var A=r(60087);t.__esModule=!0,t.createErrorFactory=l,t.default=function(e){var t=e.name,r=e.message,A=e.test,i=e.params;function g(e){var g=e.value,u=e.path,h=e.label,p=e.options,d=e.originalValue,C=e.sync,f=(0,n.default)(e,["value","path","label","options","originalValue","sync"]),I=p.parent,E=function(e){return a.default.isRef(e)?e.getValue({value:g,parent:I,context:p.context}):e},B=l({message:r,path:u,value:g,originalValue:d,params:i,label:h,resolve:E,name:t}),y=(0,o.default)({path:u,parent:I,type:t,createError:B,resolve:E,options:p},f);return function(e,t,r,A){var n=e.call(t,r);if(!A)return Promise.resolve(n);if(o=n,o&&"function"==typeof o.then&&"function"==typeof o.catch)throw new Error('Validation test of type: "'+t.type+'" returned a Promise during a synchronous validate. This test will finish after the validate call has returned');var o;return c.SynchronousPromise.resolve(n)}(A,y,g,C).then((function(e){if(s.default.isError(e))throw e;if(!e)throw B()}))}return g.OPTIONS=e,g};var n=A(r(74943)),o=A(r(72912)),i=A(r(89612)),s=A(r(40828)),a=A(r(95814)),c=r(93255),g=s.default.formatError;function l(e){var t=e.value,r=e.label,A=e.resolve,a=e.originalValue,c=(0,n.default)(e,["value","label","resolve","originalValue"]);return function(e){var n=void 0===e?{}:e,l=n.path,u=void 0===l?c.path:l,h=n.message,p=void 0===h?c.message:h,d=n.type,C=void 0===d?c.name:d,f=n.params;return f=(0,o.default)({path:u,value:t,originalValue:a,label:r},function(e,t,r){return(0,i.default)((0,o.default)({},e,t),r)}(c.params,f,A)),(0,o.default)(new s.default(g(p,f),t,u,C),{params:f})}}},31490:(e,t,r)=>{"use strict";var A=r(60087);t.__esModule=!0,t.default=function(e,t,r){e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),(0,n.default)(e.prototype,r)};var n=A(r(72912));e.exports=t.default},71665:(e,t)=>{"use strict";t.__esModule=!0,t.default=void 0;t.default=function(e){return null==e},e.exports=t.default},11050:(e,t)=>{"use strict";t.__esModule=!0,t.default=void 0;t.default=function(e){return e&&e.__isYupSchema__},e.exports=t.default},76813:(e,t)=>{"use strict";t.__esModule=!0,t.default=function(e){var t,A,n=[1,4,5,6,7,10,11],o=0;if(A=r.exec(e)){for(var i,s=0;i=n[s];++s)A[i]=+A[i]||0;A[2]=(+A[2]||1)-1,A[3]=+A[3]||1,A[7]=A[7]?String(A[7]).substr(0,3):0,void 0!==A[8]&&""!==A[8]||void 0!==A[9]&&""!==A[9]?("Z"!==A[8]&&void 0!==A[9]&&(o=60*A[10]+A[11],"+"===A[9]&&(o=0-o)),t=Date.UTC(A[1],A[2],A[3],A[4],A[5]+o,A[6],A[7])):t=+new Date(A[1],A[2],A[3],A[4],A[5],A[6],A[7])}else t=Date.parse?Date.parse(e):NaN;return t};var r=/^(\d{4}|[+\-]\d{6})(?:-?(\d{2})(?:-?(\d{2}))?)?(?:[ T]?(\d{2}):?(\d{2})(?::?(\d{2})(?:[,\.](\d{1,}))?)?(?:(Z)|([+\-])(\d{2})(?::?(\d{2}))?)?)?$/;e.exports=t.default},7045:(e,t)=>{"use strict";t.__esModule=!0,t.default=function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),A=1;A{"use strict";var A=r(60087);t.__esModule=!0,t.default=function e(t,r){for(var A in r)if((0,n.default)(r,A)){var s=r[A],a=t[A];if(void 0===a)t[A]=s;else{if(a===s)continue;(0,o.default)(a)?(0,o.default)(s)&&(t[A]=s.concat(a)):i(a)?i(s)&&(t[A]=e(a,s)):Array.isArray(a)&&Array.isArray(s)&&(t[A]=s.concat(a))}}return t};var n=A(r(15215)),o=A(r(11050)),i=function(e){return"[object Object]"===Object.prototype.toString.call(e)};e.exports=t.default},21043:(e,t)=>{"use strict";t.__esModule=!0,t.default=function(e,t){var r=s(e,t);return null!==r?r:JSON.stringify(e,(function(e,r){var A=s(this[e],t);return null!==A?A:r}),2)};var r=Object.prototype.toString,A=Error.prototype.toString,n=RegExp.prototype.toString,o="undefined"!=typeof Symbol?Symbol.prototype.toString:function(){return""},i=/^Symbol\((.*)\)(.*)$/;function s(e,t){if(void 0===t&&(t=!1),null==e||!0===e||!1===e)return""+e;var s=typeof e;if("number"===s)return function(e){return e!=+e?"NaN":0===e&&1/e<0?"-0":""+e}(e);if("string"===s)return t?'"'+e+'"':e;if("function"===s)return"[Function "+(e.name||"anonymous")+"]";if("symbol"===s)return o.call(e).replace(i,"Symbol($1)");var a=r.call(e).slice(8,-1);return"Date"===a?isNaN(e.getTime())?""+e:e.toISOString(e):"Error"===a||e instanceof Error?"["+A.call(e)+"]":"RegExp"===a?n.call(e):null}e.exports=t.default},43910:(e,t,r)=>{"use strict";var A=r(60087);t.__esModule=!0,t.getIn=i,t.default=void 0;var n=r(79588),o=A(r(15215));function i(e,t,r,A){var i,s,a;return A=A||r,t?((0,n.forEach)(t,(function(n,c,g){var l=c?function(e){return e.substr(0,e.length-1).substr(1)}(n):n;if(g||(0,o.default)(e,"_subType")){var u=g?parseInt(l,10):0;if(e=e.resolve({context:A,parent:i,value:r})._subType,r){if(g&&u>=r.length)throw new Error("Yup.reach cannot resolve an array item at index: "+n+", in the path: "+t+". because there is no value at that index. ");r=r[u]}}if(!g){if(e=e.resolve({context:A,parent:i,value:r}),!(0,o.default)(e,"fields")||!(0,o.default)(e.fields,l))throw new Error("The schema does not contain the path: "+t+". (failed at: "+a+' which is a type: "'+e._type+'") ');e=e.fields[l],i=r,r=r&&r[l],s=l,a=c?"["+n+"]":"."+n}})),{schema:e,parent:i,parentPath:s}):{parent:i,parentPath:t,schema:e}}var s=function(e,t,r,A){return i(e,t,r,A).schema};t.default=s},80180:(e,t,r)=>{"use strict";var A=r(60087);t.__esModule=!0,t.propagateErrors=function(e,t){return e?null:function(e){return t.push(e),e.value}},t.settled=a,t.collectErrors=c,t.default=function(e){var t=e.endEarly,r=(0,n.default)(e,["endEarly"]);return t?function(e,t,r){return s(r).all(e).catch((function(e){throw"ValidationError"===e.name&&(e.value=t),e})).then((function(){return t}))}(r.validations,r.value,r.sync):c(r)};var n=A(r(74943)),o=r(93255),i=A(r(40828)),s=function(e){return e?o.SynchronousPromise:Promise};function a(e,t){var r=s(t);return r.all(e.map((function(e){return r.resolve(e).then((function(e){return{fulfilled:!0,value:e}}),(function(e){return{fulfilled:!1,value:e}}))})))}function c(e){var t=e.validations,r=e.value,A=e.path,n=e.sync,o=e.errors,s=e.sort;return o=function(e){return void 0===e&&(e=[]),e.inner&&e.inner.length?e.inner:[].concat(e)}(o),a(t,n).then((function(e){var t=e.filter((function(e){return!e.fulfilled})).reduce((function(e,t){var r=t.value;if(!i.default.isError(r))throw r;return e.concat(r)}),[]);if(s&&t.sort(s),(o=t.concat(o)).length)throw new i.default(o,r,A);return r}))}},23316:(e,t)=>{"use strict";function r(e,t){var r=1/0;return e.some((function(e,A){if(-1!==t.path.indexOf(e))return r=A,!0})),r}t.__esModule=!0,t.default=function(e){var t=Object.keys(e);return function(e,A){return r(t,e)-r(t,A)}},e.exports=t.default},18417:(e,t,r)=>{"use strict";var A=r(60087);t.__esModule=!0,t.default=function(e,t){void 0===t&&(t=[]);var r=[],A=[];function c(e,n){var o=(0,i.split)(e)[0];~A.indexOf(o)||A.push(o),~t.indexOf(n+"-"+o)||r.push([n,o])}for(var g in e)if((0,n.default)(e,g)){var l=e[g];~A.indexOf(g)||A.push(g),s.default.isRef(l)&&l.isSibling?c(l.path,g):(0,a.default)(l)&&l._deps&&l._deps.forEach((function(e){return c(e,g)}))}return o.default.array(A,r).reverse()};var n=A(r(15215)),o=A(r(75158)),i=r(79588),s=A(r(95814)),a=A(r(11050));e.exports=t.default},60306:e=>{"use strict";e.exports=JSON.parse('{"name":"@yarnpkg/cli","version":"2.4.1","license":"BSD-2-Clause","main":"./sources/index.ts","dependencies":{"@yarnpkg/core":"workspace:^2.4.0","@yarnpkg/fslib":"workspace:^2.4.0","@yarnpkg/libzip":"workspace:^2.2.1","@yarnpkg/parsers":"workspace:^2.3.0","@yarnpkg/plugin-compat":"workspace:^2.2.1","@yarnpkg/plugin-dlx":"workspace:^2.1.4","@yarnpkg/plugin-essentials":"workspace:^2.4.0","@yarnpkg/plugin-file":"workspace:^2.2.0","@yarnpkg/plugin-git":"workspace:^2.3.0","@yarnpkg/plugin-github":"workspace:^2.1.2","@yarnpkg/plugin-http":"workspace:^2.1.2","@yarnpkg/plugin-init":"workspace:^2.2.2","@yarnpkg/plugin-link":"workspace:^2.1.1","@yarnpkg/plugin-node-modules":"workspace:^2.3.0","@yarnpkg/plugin-npm":"workspace:^2.4.0","@yarnpkg/plugin-npm-cli":"workspace:^2.3.0","@yarnpkg/plugin-pack":"workspace:^2.2.3","@yarnpkg/plugin-patch":"workspace:^2.1.2","@yarnpkg/plugin-pnp":"workspace:^2.4.0","@yarnpkg/shell":"workspace:^2.4.1","chalk":"^3.0.0","ci-info":"^2.0.0","clipanion":"^2.6.2","fromentries":"^1.2.0","semver":"^7.1.2","tslib":"^1.13.0","yup":"^0.27.0"},"devDependencies":{"@types/ci-info":"^2","@types/yup":"0.26.12","@yarnpkg/builder":"workspace:^2.1.3","@yarnpkg/monorepo":"workspace:0.0.0","@yarnpkg/pnpify":"workspace:^2.4.0","micromatch":"^4.0.2","typescript":"4.1.0-beta"},"peerDependencies":{"@yarnpkg/core":"^2.4.0"},"scripts":{"postpack":"rm -rf lib","prepack":"run build:compile \\"$(pwd)\\"","build:cli+hook":"run build:pnp:hook && builder build bundle","build:cli":"builder build bundle","run:cli":"builder run","update-local":"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/"},"publishConfig":{"main":"./lib/index.js","types":"./lib/index.d.ts","bin":null},"files":["/lib/**/*","!/lib/pluginConfiguration.*","!/lib/cli.*"],"@yarnpkg/builder":{"bundles":{"standard":["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-dlx","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-link","@yarnpkg/plugin-node-modules","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp"]}},"repository":{"type":"git","url":"ssh://git@github.com/yarnpkg/berry.git"},"engines":{"node":">=10.19.0"}}')},98497:e=>{function t(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}t.keys=()=>[],t.resolve=t,t.id=98497,e.exports=t},32178:e=>{function t(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}t.keys=()=>[],t.resolve=t,t.id=32178,e.exports=t},3368:(e,t,r)=>{var A,n=Object.assign({},r(35747)),o=void 0!==o?o:{},i={};for(A in o)o.hasOwnProperty(A)&&(i[A]=o[A]);var s,a,c,g,l=[],u="";u=__dirname+"/",s=function(e,t){var A=Qe(e);return A?t?A:A.toString():(c||(c=n),g||(g=r(85622)),e=g.normalize(e),c.readFileSync(e,t?null:"utf8"))},a=function(e){var t=s(e,!0);return t.buffer||(t=new Uint8Array(t)),E(t.buffer),t},process.argv.length>1&&process.argv[1].replace(/\\/g,"/"),l=process.argv.slice(2),e.exports=o,o.inspect=function(){return"[Emscripten Module object]"};var h=o.print||console.log.bind(console),p=o.printErr||console.warn.bind(console);for(A in i)i.hasOwnProperty(A)&&(o[A]=i[A]);i=null,o.arguments&&(l=o.arguments),o.thisProgram&&o.thisProgram,o.quit&&o.quit;var d,C;o.wasmBinary&&(d=o.wasmBinary),o.noExitRuntime&&o.noExitRuntime,"object"!=typeof WebAssembly&&_("no native wasm support detected");var f=new WebAssembly.Table({initial:31,maximum:31,element:"anyfunc"}),I=!1;function E(e,t){e||_("Assertion failed: "+t)}function B(e){var t=o["_"+e];return E(t,"Cannot call unknown function "+e+", make sure it is exported"),t}function y(e,t,r,A,n){var o={string:function(e){var t=0;if(null!=e&&0!==e){var r=1+(e.length<<2);b(e,t=xe(r),r)}return t},array:function(e){var t=xe(e.length);return function(e,t){N.set(e,t)}(e,t),t}};var i=B(e),s=[],a=0;if(A)for(var c=0;c=A);)++n;if(n-t>16&&e.subarray&&m)return m.decode(e.subarray(t,n));for(var o="";t>10,56320|1023&c)}}else o+=String.fromCharCode((31&i)<<6|s)}else o+=String.fromCharCode(i)}return o}function Q(e,t){return e?w(F,e,t):""}function D(e,t,r,A){if(!(A>0))return 0;for(var n=r,o=r+A-1,i=0;i=55296&&s<=57343)s=65536+((1023&s)<<10)|1023&e.charCodeAt(++i);if(s<=127){if(r>=o)break;t[r++]=s}else if(s<=2047){if(r+1>=o)break;t[r++]=192|s>>6,t[r++]=128|63&s}else if(s<=65535){if(r+2>=o)break;t[r++]=224|s>>12,t[r++]=128|s>>6&63,t[r++]=128|63&s}else{if(r+3>=o)break;t[r++]=240|s>>18,t[r++]=128|s>>12&63,t[r++]=128|s>>6&63,t[r++]=128|63&s}}return t[r]=0,r-n}function b(e,t,r){return D(e,F,t,r)}function v(e){for(var t=0,r=0;r=55296&&A<=57343&&(A=65536+((1023&A)<<10)|1023&e.charCodeAt(++r)),A<=127?++t:t+=A<=2047?2:A<=65535?3:4}return t}function S(e){var t=v(e)+1,r=Le(t);return r&&D(e,N,r,t),r}var k,N,F,K,M,R,x;function L(e){k=e,o.HEAP8=N=new Int8Array(e),o.HEAP16=K=new Int16Array(e),o.HEAP32=M=new Int32Array(e),o.HEAPU8=F=new Uint8Array(e),o.HEAPU16=new Uint16Array(e),o.HEAPU32=new Uint32Array(e),o.HEAPF32=R=new Float32Array(e),o.HEAPF64=x=new Float64Array(e)}var P=o.INITIAL_MEMORY||16777216;(C=o.wasmMemory?o.wasmMemory:new WebAssembly.Memory({initial:P/65536,maximum:32768}))&&(k=C.buffer),P=k.byteLength,L(k);var O=[],U=[],T=[],j=[];var Y=Math.abs,G=Math.ceil,H=Math.floor,J=Math.min,q=0,z=null,W=null;function V(e){q++,o.monitorRunDependencies&&o.monitorRunDependencies(q)}function X(e){if(q--,o.monitorRunDependencies&&o.monitorRunDependencies(q),0==q&&(null!==z&&(clearInterval(z),z=null),W)){var t=W;W=null,t()}}function _(e){throw o.onAbort&&o.onAbort(e),p(e+=""),I=!0,1,e="abort("+e+"). Build with -s ASSERTIONS=1 for more info.",new WebAssembly.RuntimeError(e)}o.preloadedImages={},o.preloadedAudios={};function Z(e){return t=e,r="data:application/octet-stream;base64,",String.prototype.startsWith?t.startsWith(r):0===t.indexOf(r);var t,r}var $,ee,te,re="data:application/octet-stream;base64,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AkEgaiQAC4sDAQF/IwBBMGsiAyQAIAMgADYCJCADIAE2AiAgAyACNwMYAkAgAygCJC0AKEEBcQRAIANCfzcDKAwBCwJAAkAgAygCJCgCIEEATQ0AIAMpAxhC////////////AFYNACADKQMYQgBYDQEgAygCIA0BCyADKAIkQQxqQRJBABAVIANCfzcDKAwBCyADKAIkLQA1QQFxBEAgA0J/NwMoDAELAn8jAEEQayIAIAMoAiQ2AgwgACgCDC0ANEEBcQsEQCADQgA3AygMAQsgAykDGFAEQCADQgA3AygMAQsgA0IANwMQA0AgAykDECADKQMYVARAIAMgAygCJCADKAIgIAMpAxCnaiADKQMYIAMpAxB9QQEQIiICNwMIIAJCAFMEQCADKAIkQQE6ADUgAykDEFAEQCADQn83AygMBAsgAyADKQMQNwMoDAMLIAMpAwhQBEAgAygCJEEBOgA0BSADIAMpAwggAykDEHw3AxAMAgsLCyADIAMpAxA3AygLIAMpAyghAiADQTBqJAAgAgs2AQF/IwBBEGsiASAANgIMAn4gASgCDC0AAEEBcQRAIAEoAgwpAwggASgCDCkDEH0MAQtCAAsLsgECAX8BfiMAQRBrIgEkACABIAA2AgQgASABKAIEQggQHzYCAAJAIAEoAgBFBEAgAUIANwMIDAELIAEgASgCAC0AAK0gASgCAC0AB61COIYgASgCAC0ABq1CMIZ8IAEoAgAtAAWtQiiGfCABKAIALQAErUIghnwgASgCAC0AA61CGIZ8IAEoAgAtAAKtQhCGfCABKAIALQABrUIIhnx8NwMICyABKQMIIQIgAUEQaiQAIAILqAEBAX8jAEEQayIBJAAgASAANgIIAkAgASgCCCgCIEEATQRAIAEoAghBDGpBEkEAEBUgAUF/NgIMDAELIAEoAggiACAAKAIgQX9qNgIgIAEoAggoAiBFBEAgASgCCEEAQgBBAhAiGiABKAIIKAIABEAgASgCCCgCABAyQQBIBEAgASgCCEEMakEUQQAQFQsLCyABQQA2AgwLIAEoAgwhACABQRBqJAAgAAvxAgICfwF+AkAgAkUNACAAIAJqIgNBf2ogAToAACAAIAE6AAAgAkEDSQ0AIANBfmogAToAACAAIAE6AAEgA0F9aiABOgAAIAAgAToAAiACQQdJDQAgA0F8aiAB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ECwQMwsgASgCDCgCVBAWIAEoAgxBADYCVAsgAUEQaiQAC/EBAQF/IwBBEGsiASAANgIMIAEoAgxBADYCACABKAIMQQA6AAQgASgCDEEAOgAFIAEoAgxBAToABiABKAIMQb8GOwEIIAEoAgxBCjsBCiABKAIMQQA7AQwgASgCDEF/NgIQIAEoAgxBADYCFCABKAIMQQA2AhggASgCDEIANwMgIAEoAgxCADcDKCABKAIMQQA2AjAgASgCDEEANgI0IAEoAgxBADYCOCABKAIMQQA2AjwgASgCDEEAOwFAIAEoAgxBgIDYjXg2AkQgASgCDEIANwNIIAEoAgxBADsBUCABKAIMQQA7AVIgASgCDEEANgJUC9oTAQF/IwBBsAFrIgMkACADIAA2AqgBIAMgATYCpAEgAyACNgKgASADQQA2ApABIAMgAygCpAEoAjBBABA7NgKUASADIAMoAqQBKAI4QQAQOzYCmAECQAJAAkACQCADKAKUAUECRgRAIAMoApgBQQFGDQELIAMoApQBQQFGBEAgAygCmAFBAkYNAQsgAygClAFBAkcNASADKAKYAUECRw0BCyADKAKkASIAIAAvAQxBgBByOwEMDAELIAMoAqQBIgAgAC8BDEH/7wNxOwEMIAMoApQBQQJGBEAgA0H14AEgAygCpAEoAjAgAygCqAFBCGoQxAE2ApABIAMoApABRQRAIANBfzYCrAEMAwsLAkAgAygCoAFBgAJxDQAgAygCmAFBAkcNACADQfXGASADKAKkASgCOCADKAKoAUEIahDEATYCSCADKAJIRQRAIAMoApABECQgA0F/NgKsAQwDCyADKAJIIAMoApABNgIAIAMgAygCSDYCkAELCwJAIAMoAqQBLwFSRQRAIAMoAqQBIgAgAC8BDEH+/wNxOwEMDAELIAMoAqQBIgAgAC8BDEEBcjsBDAsgAyADKAKkASADKAKgARCAAUEBcToAhgEgAyADKAKgAUGACnFBgApHBH8gAy0AhgEFQQELQQFxOgCHASADAn9BASADKAKkAS8BUkGBAkYNABpBASADKAKkAS8BUkGCAkYNABogAygCpAEvAVJBgwJGC0EBcToAhQEgAy0AhwFBAXEEQCADIANBIGpCHBAqNgIcIAMoAhxFBEAgAygCqAFBCGpBDkEAEBUgAygCkAEQJCADQX82AqwBDAILAkAgAygCoAFBgAJxBEACQCADKAKgAUGACHENACADKAKkASkDIEL/////D1YNACADKAKkASkDKEL/////D1gNAgsgAygCHCADKAKkASkDKBAuIAMoAhwgAygCpAEpAyAQLgwBCwJAAkAgAygCoAFBgAhxDQAgAygCpAEpAyBC/////w9WDQAgAygCpAEpAyhC/////w9WDQAgAygCpAEpA0hC/////w9YDQELIAMoAqQBKQMoQv////8PWgRAIAMoAhwgAygCpAEpAygQLgsgAygCpAEpAyBC/////w9aBEAgAygCHCADKAKkASkDIBAuCyADKAKkASkDSEL/////D1oEQCADKAIcIAMoAqQBKQNIEC4LCwsCfyMAQRBrIgAgAygCHDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFSADKAIcEBcgAygCkAEQJCADQX82AqwBDAILIANBAQJ/IwBBEGsiACADKAIcNgIMAn4gACgCDC0AAEEBcQRAIAAoAgwpAxAMAQtCAAunQf//A3ELIANBIGpBgAYQUDYCjAEgAygCHBAXIAMoAowBIAMoApABNgIAIAMgAygCjAE2ApABCyADLQCFAUEBcQRAIAMgA0EVakIHECo2AhAgAygCEEUEQCADKAKoAUEIakEOQQAQFSADKAKQARAkIANBfzYCrAEMAgsgAygCEEECECAgAygCEEHP0wBBAhBAIAMoAhAgAygCpAEvAVJB/wFxEIoBIAMoAhAgAygCpAEoAhBB//8DcRAgAn8jAEEQayIAIAMoAhA2AgwgACgCDC0AAEEBcUULBEAgAygCqAFBCGpBFEEAEBUgAygCEBAXIAMoApABECQgA0F/NgKsAQwCCyADQYGyAkEHIANBFWpBgAYQUDYCDCADKAIQEBcgAygCDCADKAKQATYCACADIAMoAgw2ApABCyADIANB0ABqQi4QKiIANgJMIABFBEAgAygCqAFBCGpBDkEAEBUgAygCkAEQJCADQX82AqwBDAELIAMoAkxBxdMAQcrTACADKAKgAUGAAnEbQQQQQCADKAKgAUGAAnFFBEAgAygCTAJ/QS0gAy0AhgFBAXENABogAygCpAEvAQgLQf//A3EQIAsgAygCTAJ/QS0gAy0AhgFBAXENABogAygCpAEvAQoLQf//A3EQICADKAJMIAMoAqQBLwEMECACQCADLQCFAUEBcQRAIAMoAkxB4wAQIAwBCyADKAJMIAMoAqQBKAIQQf//A3EQIAsgAygCpAEoAhQgA0GeAWogA0GcAWoQwwEgAygCTCADLwGeARAgIAMoAkwgAy8BnAEQIAJAAkAgAy0AhQFBAXFFDQAgAygCpAEpAyhCFFoNACADKAJMQQAQIQwBCyADKAJMIAMoAqQBKAIYECELAkACQCADKAKgAUGAAnFBgAJHDQAgAygCpAEpAyBC/////w9UBEAgAygCpAEpAyhC/////w9UDQELIAMoAkxBfxAhIAMoAkxBfxAhDAELAkAgAygCpAEpAyBC/////w9UBEAgAygCTCADKAKkASkDIKcQIQwBCyADKAJMQX8QIQsCQCADKAKkASkDKEL/////D1QEQCADKAJMIAMoAqQBKQMopxAhDAELIAMoAkxBfxAhCwsgAygCTCADKAKkASgCMBBSQf//A3EQICADIAMoAqQBKAI0IAMoAqABEIIBQf//A3EgAygCkAFBgAYQggFB//8DcWo2AogBIAMoAkwgAygCiAFB//8DcRAgIAMoAqABQYACcUUEQCADKAJMIAMoAqQBKAI4EFJB//8DcRAgIAMoAkwgAygCpAEoAjxB//8DcRAgIAMoAkwgAygCpAEvAUAQICADKAJMIAMoAqQBKAJEECECQCADKAKkASkDSEL/////D1QEQCADKAJMIAMoAqQBKQNIpxAhDAELIAMoAkxBfxAhCwsCfyMAQRBrIgAgAygCTDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFSADKAJMEBcgAygCkAEQJCADQX82AqwBDAELIAMoAqgBIANB0ABqAn4jAEEQayIAIAMoAkw2AgwCfiAAKAIMLQAAQQFxBEAgACgCDCkDEAwBC0IACwsQNkEASARAIAMoAkwQFyADKAKQARAkIANBfzYCrAEMAQsgAygCTBAXIAMoAqQBKAIwBEAgAygCqAEgAygCpAEoAjAQhgFBAEgEQCADKAKQARAkIANBfzYCrAEMAgsLIAMoApABBEAgAygCqAEgAygCkAFBgAYQgQFBAEgEQCADKAKQARAkIANBfzYCrAEMAgsLIAMoApABECQgAygCpAEoAjQEQCADKAKoASADKAKkASgCNCADKAKgARCBAUEASARAIANBfzYC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IAMoAoABKAIAIAMpA3CnQQR0aigCACADEPEBBEAgAygCfEEVQQAQFSADEFwgA0J/NwOIAQwDBSADKAKAASgCACADKQNwp0EEdGooAgAoAjQgAygCNBCFASEAIAMoAoABKAIAIAMpA3CnQQR0aigCACAANgI0IAMoAoABKAIAIAMpA3CnQQR0aigCAEEBOgAEIANBADYCNCADEFwgAyADKQNwQgF8NwNwDAILAAsLIAMCfiADKQNgIAMpA2h9Qv///////////wBUBEAgAykDYCADKQNofQwBC0L///////////8ACzcDiAELIAMpA4gBIQQgA0GQAWokACAEC6YBAQF/IwBBIGsiAyQAIAMgADYCGCADIAE2AhQgAyACNgIQIAMgAygCEBD6ASIANgIMAkAgAEUEQCADQQA2AhwMAQsgAygCDCADKAIYNgIAIAMoAgwgAygCFDYCBCADKAIUQRBxBEAgAygCDCIAIAAoAhRBAnI2AhQgAygCDCIAIAAoAhhBAnI2AhgLIAMgAygCDDYCHAsgAygCHCEAIANBIGokACAAC9UBAQF/IwBBIGsiBCQAIAQgADYCGCAEIAE3AxAgBCACNgIMIAQgAzYCCAJAAkAgBCkDEEL///////////8AVwRAIAQpAxBCgICAgICAgICAf1kNAQsgBCgCCEEEQT0QFSAEQX82AhwMAQsCfyAEKQMQIQEgBCgCDCEAIAQoAhgiAigCTEF/TARAIAIgASAAEJYBDAELIAIgASAAEJYBC0EASARAIAQoAghBBEG0nAEoAgAQFSAEQX82AhwMAQsgBEEANgIcCyAEKAIcIQAgBEEgaiQAIAALJwACf0EAQQAgABAFIgAgAEEbRhsiAEUNABpBtJwBIAA2AgBBAAsaC14BAX8jAEEQayIDJAAgAyABQcCAgAJxBH8gAyACQQRqNgIMIAIoAgAFQQALNgIAIAAgAUGAgAJyIAMQESIAQYFgTwRAQbScAUEAIABrNgIAQX8hAAsgA0EQaiQAIAALVQEBfyMAQRBrIgEkACABIAA2AgwCQAJAIAEoAgwoAiRBAUYNACABKAIMKAIkQQJGDQAMAQsgASgCDEEAQgBBChAiGiABKAIMQQA2AiQLIAFBEGokAAszAQF/An8gABAGIgFBYUYEQCAAEBIhAQsgAUGBYE8LBH9BtJwBQQAgAWs2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IEUNACABKAIIKAIkDQELIAFBATYCDAwBCyABIAEoAggoAhw2AgQCQAJAIAEoAgRFDQAgASgCBCgCACABKAIIRw0AIAEoAgQoAgRBKkYNASABKAIEKAIEQTlGDQEgASgCBCgCBEHFAEYNASABKAIEKAIEQckARg0BIAEoAgQoAgRB2wBGDQEgASgCBCgCBEHnAEYNASABKAIEKAIEQfEARg0BIAEoAgQoAgRBmgVGDQELIAFBATYCDAwBCyABQQA2AgwLIAEoAgwL0gQBAX8jAEEgayIDIAA2AhwgAyABNgIYIAMgAjYCFCADIAMoAhxB3BZqIAMoAhRBAnRqKAIANgIQIAMgAygCFEEBdDYCDANAAkAgAygCDCADKAIcKALQKEoNAAJAIAMoAgwgAygCHCgC0ChODQAgAygCGCADKAIcIAMoAgxBAnRqQeAWaigCAEECdGovAQAgAygCGCADKAIcQdwWaiADKAIMQQJ0aigCAEECdGovAQBOBEAgAygCGCADKAIcIAMoAgxBAnRqQeAWaigCAEECdGovAQAgAygCGCADKAIcQdwWaiADKAIMQQJ0aigCAEECdGovAQBHDQEgAygCHCADKAIMQQJ0akHgFmooAgAgAygCHEHYKGpqLQAAIAMoAhxB3BZqIAMoAgxBAnRqKAIAIAMoAhxB2Chqai0AAEoNAQsgAyADKAIMQQFqNgIMCyADKAIYIAMoAhBBAnRqLwEAIAMoAhggAygCHEHcFmogAygCDEECdGooAgBBAnRqLwEASA0AAkAgAygCGCADKAIQQQJ0ai8BACADKAIYIAMoAhxB3BZqIAMoAgxBAnRqKAIAQQJ0ai8BAEcNACADKAIQIAMoAhxB2Chqai0AACADKAIcQdwWaiADKAIMQQJ0aigCACADKAIcQdgoamotAABKDQAMAQsgAygCHEHcFmogAygCFEECdGogAygCHEHcFmogAygCDEECdGooAgA2AgAgAyADKAIMNgIUIAMgAygCDEEBdDYCDAwBCwsgAygCHEHcFmogAygCFEECdGogAygCEDYCAAvnCAEDfyMAQTBrIgIkACACIAA2AiwgAiABNgIoIAIgAigCKCgCADYCJCACIAIoAigoAggoAgA2AiAgAiACKAIoKAIIKAIMNgIcIAJBfzYCECACKAIsQQA2AtAoIAIoAixBvQQ2AtQoIAJBADYCGANAIAIoAhggAigCHE5FBEACQCACKAIkIAIoAhhBAnRqLwEABEAgAiACKAIYIgE2AhAgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQAgBCAANgLQKCAAQQJ0IANqIAE2AgAgAigCGCACKAIsQdgoampBADoAAAwBCyACKAIkIAIoAhhBAnRqQQA7AQILIAIgAigCGEEBajYCGAwBCwsDQCACKAIsKALQKEECSARAAkAgAigCEEECSARAIAIgAigCEEEBaiIANgIQDAELQQAhAAsgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQEgBCABNgLQKCABQQJ0IANqIAA2AgAgAiAANgIMIAIoAiQgAigCDEECdGpBATsBACACKAIMIAIoAixB2ChqakEAOgAAIAIoAiwiACAAKAKoLUF/ajYCqC0gAigCIARAIAIoAiwiACAAKAKsLSACKAIgIAIoAgxBAnRqLwECazYCrC0LDAELCyACKAIoIAIoAhA2AgQgAiACKAIsKALQKEECbTYCGANAIAIoAhhBAUhFBEAgAigCLCACKAIkIAIoAhgQdSACIAIoAhhBf2o2AhgMAQsLIAIgAigCHDYCDANAIAIgAigCLCgC4BY2AhggAigCLEHcFmohASACKAIsIgMoAtAoIQAgAyAAQX9qNgLQKCACKAIsIABBAnQgAWooAgA2AuAWIAIoAiwgAigCJEEBEHUgAiACKAIsKALgFjYCFCACKAIYIQEgAigCLEHcFmohAyACKAIsIgQoAtQoQX9qIQAgBCAANgLUKCAAQQJ0IANqIAE2AgAgAigCFCEBIAIoAixB3BZqIQMgAigCLCIEKALUKEF/aiEAIAQgADYC1CggAEECdCADaiABNgIAIAIoAiQgAigCDEECdGogAigCJCACKAIYQQJ0ai8BACACKAIkIAIoAhRBAnRqLwEAajsBACACKAIMIAIoAixB2ChqagJ/IAIoAhggAigCLEHYKGpqLQAAIAIoAhQgAigCLEHYKGpqLQAATgRAIAIoAhggAigCLEHYKGpqLQAADAELIAIoAhQgAigCLEHYKGpqLQAAC0EBajoAACACKAIkIAIoAhRBAnRqIAIoAgwiADsBAiACKAIkIAIoAhhBAnRqIAA7AQIgAiACKAIMIgBBAWo2AgwgAigCLCAANgLgFiACKAIs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AykDKCEBIANBMGokACABC3cBAX8jAEEQayICIAA2AgggAiABNgIEAkACQAJAIAIoAggpAyhC/////w9aDQAgAigCCCkDIEL/////D1oNACACKAIEQYAEcUUNASACKAIIKQNIQv////8PVA0BCyACQQE6AA8MAQsgAkEAOgAPCyACLQAPQQFxC9kCAQF/IwBBIGsiAyQAIAMgADYCGCADIAE2AhQgAyACNgIQIAMgA0EMakIEECo2AggCQCADKAIIRQRAIANBfzYCHAwBCwNAIAMoAhQEQCADKAIUKAIEIAMoAhBxQYAGcQRAIAMoAghCABAtGiADKAIIIAMoAhQvAQgQICADKAIIIAMoAhQvAQoQIAJ/IwBBEGsiACADKAIINgIMIAAoAgwtAABBAXFFCwRAIAMoAhhBCGpBFEEAEBUgAygCCBAXIANBfzYCHAwECyADKAIYIANBDGpCBBA2QQBIBEAgAygCCBAXIANBfzYCHAwECyADKAIULwEKQQBKBEAgAygCGCADKAIUKAIMIAMoAhQvAQqtEDZBAEgEQCADKAIIEBcgA0F/NgIcDAULCwsgAyADKAIUKAIANgIUDAELCyADKAIIEBcgA0EANgIcCyADKAIcIQAgA0EgaiQAIAALaAEBfyMAQRBrIgIgADYCDCACIAE2AgggAkEAOwEGA0AgAigCDARAIAIoAgwoAgQgAigCCHFBgAZxBEAgAiACKAIMLwEKIAIvAQZBBGpqOwEGCyACIAIoAgwoAgA2AgwMAQsLIAIvAQYL8AEBAX8jAEEQayIBJAAgASAANgIMIAEgASgCDDYCCCABQQA2AgQDQCABKAIMBEACQAJAIAEoAgwvAQhB9cYBRg0AIAEoAgwvAQhB9eABRg0AIAEoAgwvAQhBgbICRg0AIAEoAgwvAQhBAUcNAQsgASABKAIMKAIANgIAIAEoAgggASgCDEYEQCABIAEoAgA2AggLIAEoAgxBADYCACABKAIMECQgASgCBARAIAEoAgQgASgCADYCAAsgASABKAIANgIMDAILIAEgASgCDDYCBCABIAEoAgwoAgA2AgwMAQsLIAEoAgghACABQRBqJAAgAAuzBAEBfyMAQUBqIgUkACAFIAA2AjggBSABOwE2IAUgAjYCMCAFIAM2AiwgBSAENgIoIAUgBSgCOCAFLwE2rRAqIgA2AiQC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ACgCDCgCBDYCAAsLIAIoAgwEQCACKAIMIAIoAgQ2AgALIAJBEGokAAuVAQEBfyMAQRBrIgEkACABIAA2AggCQAJ/IwBBEGsiACABKAIINgIMIAAoAgwpAxhCgIAQg1ALBEAgASgCCCgCAARAIAEgASgCCCgCABCUAUEBcToADwwCCyABQQE6AA8MAQsgASABKAIIQQBCAEESECI+AgQgASABKAIEQQBHOgAPCyABLQAPQQFxIQAgAUEQaiQAIAALfwEBfyMAQSBrIgMkACADIAA2AhggAyABNwMQIANBADYCDCADIAI2AggCQCADKQMQQv///////////wBWBEAgAygCCEEEQT0QFSADQX82AhwMAQsgAyADKAIYIAMpAxAgAygCDCADKAIIEGc2AhwLIAMoAhwhACADQSBqJAAgAAt9ACACQQFGBEAgASAAKAIIIAAoAgRrrH0hAQsCQCAAKAIUIAAoAhxLBEAgAEEAQQAgACgCJBEBABogACgCFEUNAQsgAEEANgIcIABCADcDECAAIAEgAiAAKAIoERAAQgBTDQAgAEIANwIEIAAgACgCAEFvcTYCAEEADwtBfwviAgECfyMAQSBrIgMkAAJ/AkACQEH0lwEgASwAABCYAUUEQEG0nAFBHDYCAAwBC0GYCRAZIgINAQtBAAwBCyACQQBBkAEQMyABQSsQmAFFBEAgAkEIQQQgAS0AAEHyAEYbNgIACwJAIAEtAABB4QBHBEAgAigCACEBDAELIABBA0EAEAQiAUGACHFFBEAgAyABQYAIcjYCECAAQQQgA0EQahAEGgsgAiACKAIAQYABciIBNgIACyACQf8BOgBLIAJBgAg2AjAgAiAANgI8IAIgAkGYAWo2AiwCQCABQQhxDQAgAyADQRhqNgIAIABBk6gBIAMQDg0AIAJBCjoASwsgAkEaNgIoIAJBGzYCJCACQRw2AiAgAkEdNgIMQdygASgCAEUEQCACQX82AkwLIAJBsKEBKAIANgI4QbChASgCACIABEAgACACNgI0C0GwoQEgAjYCACACCyEAIANBIGokACAACxoAIAAgARCFAiIAQQAgAC0AACABQf8BcUYbCxgAIAAoAkxBf0wEQCAAEJoBDwsgABCaAQtgAgJ/AX4gACgCKCEBQQEhAiAAQgAgAC0AAEGAAXEEf0ECQQEgACgCFCAAKAIc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KAIYKQMwWgRAIAIoAhhBCGpBEkEAEBUgAkF/NgIcDAELIAIoAhgoAhhBAnEEQCACKAIYQQhqQRlBABAVIAJBfzYCHAwBCyACIAIoAhggAikDEEEAIAIoAhhBCGoQTyIANgIMIABFBEAgAkF/NgIcDAELIAIoAhgoAlAgAigCDCACKAIYQQhqEFlBAXFFBEAgAkF/NgIcDAELIAIoAhggAikDEBCgAgRAIAJBfzYCHAwBCyACKAIYKAJAIAIpAxCnQQR0akEBOgAMIAJBADYCHAsgAigCHCEAIAJBIGokACAAC5gCAAJAAkAgAUEUSw0AAkACQAJAAkACQAJAAkACQCABQXdqDgoAAQIJAwQFBgkHCAsgAiACKAIAIgFBBGo2AgAgACABKAIANgIADwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADwsgAiACKAIAIgFBBGo2AgAgACABMgEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMwEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMAAANwMADwsgAiACKAIAIgFBBGo2AgAgACABMQAANwMADwsgACACQRYRBAALDwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMAC0oBA38gACgCACwAAEFQakEKSQRAA0AgACgCACIBLAAAIQMgACABQQFqNgIAIAMgAkEKbGpBUGohAiABLAABQVBqQQpJDQALCyACC38CAX8BfiAAvSIDQjSIp0H/D3EiAkH/D0cEfCACRQRAIAEgAEQAAAAAAAAAAGEEf0EABSAARAAAAAAAAPBDoiABEKQBIQAgASgCAEFAags2AgAgAA8LIAEgAkGCeGo2AgAgA0L/////////h4B/g0KAgICAgICA8D+EvwUgAAsLEgAgAEUEQEEADwsgACABELQCC+UBAQJ/IAJBAEchAwJAAkACQCACRQ0AIABBA3FFDQAgAUH/AXEhBANAIAAtAAAgBEYNAiAAQQFqIQAgAkF/aiICQQBHIQMgAkUNASAAQQNxDQALCyADRQ0BCwJAIAAtAAAgAUH/AXFGDQAgAkEESQ0AIAFB/wFxQYGChAhsIQMDQCAAKAIAIANzIgRBf3MgBEH//ft3anFBgIGChHhxDQEgAEEEaiEAIAJB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HAvkAQEBfyMAQSBrIgMkACADIAA6ABsgAyABNgIUIAMgAjYCECADQcgAEBkiADYCDAJAIABFBEAgAygCEEEBQbScASgCABAVIANBADYCHAwBCyADKAIMIAMoAhA2AgAgAygCDCADLQAbQQFxOgAEIAMoAgwgAygCFDYCCAJAIAMoAgwoAghBAU4EQCADKAIMKAIIQQlMDQELIAMoAgxBCTYCCAsgAygCDEEAOgAMIAMoAgxBADYCMCADKAIMQQA2AjQgAygCDEEANgI4IAMgAygCDDYCHAsgAygCHCEAIANBIGokACAAC+MIAQF/IwBBQGoiAiAANgI4IAIgATYCNCACIAIoAjgoAnw2AjAgAiACKAI4KAI4IAIoAjgoAmxqNgIsIAIgAigCOCgCeDYCICACIAIoAjgoApABNgIcIAICfyACKAI4KAJsIAIoAjgoAixBhgJrSwRAIAIoAjgoAmwgAigCOCgCLEGGAmtrDAELQQALNgIYIAIgAigCOCgCQDYCFCACIAIoAjgoAjQ2AhAgAiACKAI4KAI4IAIoAjgoAmxqQYICajYCDCACIAIoAiwgAigCIEEBa2otAAA6AAsgAiACKAIsIAIoAiBqLQAAOgAKIAIoAjgoAnggAigCOCgCjAFPBEAgAiACKAIwQQJ2NgIwCyACKAIcIAIoAjgoAnRLBEAgAiACKAI4KAJ0NgIcCwNAAkAgAiACKAI4KAI4IAIoAjRqNgIoAkAgAigCKCACKAIgai0AACACLQAKRw0AIAIoAiggAigCIEEBa2otAAAgAi0AC0cNACACKAIoLQAAIAIoAiwtAABHDQAgAiACKAIoIgBBAWo2AiggAC0AASACKAIsLQABRwRADAELIAIgAigCLEECajYCLCACIAIoAihBAWo2AigDQCACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AigCf0EAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACKAIsIAIoAgxJC0EBcQ0ACyACQYICIAIoAgwgAigCLGtrNgIkIAIgAigCDEH+fWo2AiwgAigCJCACKAIgSgRAIAIoAjggAigCNDYCcCACIAIoAiQ2AiAgAigCJCACKAIcTg0CIAIgAigCLCACKAIgQQFrai0AADoACyACIAIoAiwgAigCIGotAAA6AAoLCyACIAIoAhQgAigCNCACKAIQcUEBdGovAQAiATYCNEEAIQAgASACKAIYSwR/IAIgAigCMEF/aiIANgIwIABBAEcFQQALQQFxDQELCwJAIAIoAiAgAigCOCgCdE0EQCACIAIoAiA2AjwMAQsgAiACKAI4KAJ0NgI8CyACKAI8C5gQAQF/IwBBMGsiAiQAIAIgADYCKCACIAE2AiQgAgJ/IAIoAigoAgxBBWsgAigCKCgCLEsEQCACKAIoKAIsDAELIAIoAigoAgxBBWsLNgIgIAJBADYCECACIAIoAigoAgAoAgQ2AgwDQAJAIAJB//8DNgIcIAIgAigCKCgCvC1BKmpBA3U2AhQgAigCKCgCACgCECACKAIUSQ0AIAIgAigCKCgCACgCECACKAIUazYCFCACIAIoAigoAmwgAigCKCgCXGs2AhggAigCHCACKAIYIAIoAigoAgAoAgRqSwRAIAIgAigCGCACKAIoKAIAKAIEajYCHAsgAigCHCACKAIUSwRAIAIgAigCFDYCHAsCQCACKAIcIAIoAiBPDQACQCACKAIcRQRAIAIoAiRBBEcNAQsgAigCJEUNACACKAIcIAIoAhggAigCKCgCACgCBGpGDQELDAELQQAhACACIAIoAiRBBEYEfyACKAIcIAIoAhggAigCKCgCACgCBGpGBUEAC0EBcUVFNgIQIAIoAihBAEEAIAIoAhAQVyACKAIoKAIIIAIoAigoAhRBBGtqIAIoAhw6AAAgAigCKCgCCCACKAIoKAIUQQNraiACKAIcQQh2OgAAIAIoAigoAgggAigCKCgCFEECa2ogAigCHEF/czoAACACKAIoKAIIIAIoAigoAhRBAWtqIAIoAhxBf3NBCHY6AAAgAigCKCgCABAdIAIoAhgEQCACKAIYIAIoAhxLBEAgAiACKAIcNgIYCyACKAIoKAIAKAIMIAIoAigoAjggAigCKCgCXGogAigCGBAaGiACKAIoKAIAIgAgAigCGCAAKAIMajYCDCACKAIoKAIAIgAgACgCECACKAIYazYCECACKAIoKAIAIgAgAigCGCAAKAIUajYCFCACKAIoIgAgAigCGCAAKAJcajYCXCACIAIoAhwgAigCGGs2AhwLIAIoAhwEQCACKAIoKAIAIAIoAigoAgAoAgwgAigCHBBzGiACKAIoKAIAIgAgAigCHCAAKAIMajYCDCACKAIoKAIAIgAgACgCECACKAIcazYCECACKAIoKAIAIgAgAigCHCAAKAIUajYCFAsgAigCEEUNAQsLIAIgAigCDCACKAIoKAIAKAIEazYCDCACKAIMBEACQCACKAIMIAIoAigoAixPBEAgAigCKEECNgKwLSACKAIoKAI4IAIoAigoAgAoAgAgAigCKCgCLGsgAigCKCgCLBAaGiACKAIoIAIoAigoAiw2AmwMAQsgAigCKCgCPCACKAIoKAJsayACKAIMTQRAIAIoAigiACAAKAJsIAIoAigoAixrNgJsIAIoAigoAjggAigCKCgCOCACKAIoKAIsaiACKAIoKAJsEBoaIAIoAigoArAtQQJJBEAgAigCKCIAIAAoArAtQQFqNgKwLQsLIAIoAigoAjggAigCKCgCbGogAigCKCgCACgCACACKAIMayACKAIMEBoaIAIoAigiACACKAIMIAAoAmxqNgJsCyACKAIoIAIoAigoAmw2AlwgAigCKCIBAn8gAigCDCACKAIoKAIsIAIoAigoArQta0sEQCACKAIoKAIsIAIoAigoArQtawwBCyACKAIMCyABKAK0LWo2ArQtCyACKAIoKALALSACKAIoKAJsSQRAIAIoAiggAigCKCgCbDYCwC0LAkAgAigCEARAIAJBAzYCLAwBCwJAIAIoAiRFDQAgAigCJEEERg0AIAIoAigoAgAoAgQNACACKAIoKAJsIAIoAigoAlxHDQAgAkEBNgIsDAELIAIgAigCKCgCPCACKAIoKAJsa0EBazYCFAJAIAIoAigoAgAoAgQgAigCFE0NACACKAIoKAJcIAIoAigoAixIDQAgAigCKCIAIAAoAlwgAigCKCgCLGs2AlwgAigCKCIAIAAoAmwgAigCKCgCLGs2AmwgAigCKCgCOCACKAIoKAI4IAIoAigoAixqIAIoAigoAmwQGhogAigCKCgCsC1BAkkEQCACKAIoIgAgACgCsC1BAWo2ArAtCyACIAIoAigoAiwgAigCFGo2AhQLIAIoAhQgAigCKCgCACgCBEsEQCACIAIoAigoAgAoAgQ2AhQLIAIoAhQEQCACKAIoKAIAIAIoAigoAjggAigCKCgCbGogAigCFBBzGiACKAIoIgAgAigCFCAAKAJsajYCbAsgAigCKCgCwC0gAigCKCgCbEkEQCACKAIoIAIoAigoAmw2AsAtCyACIAIoAigoArwtQSpqQQN1NgIUIAICf0H//wMgAigCKCgCDCACKAIUa0H//wNLDQAaIAIoAigoAgwgAigCFGsLNgIUIAICfyACKAIUIAIoAigoAixLBEAgAigCKCgCLAwBCyACKAIUCzYCICACIAIoAigoAmwgAigCKCgCXGs2AhgCQCACKAIYIAIoAiBJBEAgAigCGEUEQCACKAIkQQRHDQILIAIoAiRFDQEgAigCKCgCACgCBA0BIAIoAhggAigCFEsNAQsgAgJ/IAIoAhggAigCFEsEQCACKAIUDAELIAIoAhgLNgIcIAICf0EAIAIoAiRBBEcNABpBACACKAIoKAIAKAIEDQAaIAIoAhwgAigCGEYLQQFxRUU2AhAgAigCKCACKAIoKAI4IAIoAigoAlxqIAIoAhwgAigCEBBXIAIoAigiACACKAIcIAAoAlxqNgJcIAIoAigoAgAQHQsgAkECQQAgAigCEBs2AiwLIAIoAiwhACACQTBqJAAgAAuyAgEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIEHQEQCABQX42AgwMAQsgASABKAIIKAIcKAIENgIEIAEoAggoAhwoAggEQCABKAIIKAIoIAEoAggoAhwoAgggASgCCCgCJBEEAAsgASgCCCgCHCgCRARAIAEoAggoAiggASgCCCgCHCgCRCABKAIIKAIkEQQACyABKAIIKAIcKAJABEAgASgCCCgCKCAB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A0hCGnxBABAoQQBIBEAgAigCKEEIaiACKAIoKAIAEBggAkF/NgIsDAELIAIgAigCKCgCAEIEIAJBGGogAigCKEEIahBBIgA2AhQgAEUEQCACQX82AiwMAQsgAiACKAIUEB47ARIgAiACKAIUEB47ARAgAigCFBBIQQFxRQRAIAIoAhQQFyACKAIoQQhqQRRBABAVIAJBfzYCLAwBCyACKAIUEBcgAi8BEEEASgRAIAIoAigoAgAgAi8BEq1BARAoQQBIBEAgAigCKEEIakEEQbScASgCABAVIAJBfzYCLAwCCyACQQAgAigCKCgCACACLwEQQQAgAigCKEEIahBgNgIIIAIoAghFBEAgAkF/NgIsDAILIAIoAgggAi8BEEGAAiACQQxqIAIoAihBCGoQhAFBAXFFBEAgAigCCBAWIAJBfzYCLAwCCyACKAIIEBYgAigCDARAIAIgAigCDBCDATYCDCACKAIcKAIAKAI0IAIoAgwQhQEhACACKAIcKAIAIAA2AjQLCyACKAIcKAIAQQE6AAQCQCACKAIcKAIERQ0AIAIoAhwoAgQtAARBAXENACACKAIcKAIEIAIoAhwoAgAoAjQ2AjQgAigCHCgCBEEBOgAECyACQQA2AiwLIAIoAiwhACACQTBqJAAgAAsHACAAKAIAC4wBAQF/IwBBIGsiAiQAIAIgADYCGCACIAE2AhQgAkEANgIQAkAgAigCFEUEQCACQQA2AhwMAQsgAiACKAIUEBk2AgwgAigCDEUEQCACKAIQQQ5BABAVIAJBADYCHAwBCyACKAIMIAIoAhggAigCFBAaGiACIAIoAgw2AhwLIAIoAhwhACACQSBqJAAgAAsYAEGonAFCADcCAEGwnAFBADYCAEGonAELiAEBAX8jAEEgayIDJAAgAyAANgIUIAMgATYCECADIAI3AwgCQAJAIAMoAhQoAiRBAUYEQCADKQMIQv///////////wBYDQELIAMoAhRBDGpBEkEAEBUgA0J/NwMYDAELIAMgAygCFCADKAIQIAMpAwhBCxAiNwMYCyADKQMYIQIgA0EgaiQAIAILcwEBfyMAQSBrIgEkACABIAA2AhggAUIINwMQIAEgASgCGCkDECABKQMQfDcDCAJAIAEpAwggASgCGCkDEFQEQCABKAIYQQA6AAAgAUF/NgIcDAELIAEgASgCGCAB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IAIgADYCSCACIAE2AkQgAkEIaiIAEDwCQCACKAJIIAAQOQRAIwBBEGsiACACKAJINgIMIAIgACgCDEEMajYCBCMAQRBrIgAgAigCBDYCDAJAIAAoAgwoAgBBBUcNACMAQRBrIgAgAigCBDYCDCAAKAIMKAIEQSxHDQAgAkEANgJMDAILIAIoAkQgAigCBBBEIAJBfzYCTAwBCyACQQE2AkwLIAIoAkwhACACQdAAaiQAIAAL6gEBAX8jAEEwayIDJAAgAyAANgIoIAMgATYCJCADIAI2AiAjAEEQayIAIANBCGoiATYCDCAAKAIMQQA2AgAgACgCDEEANgIEIAAoAgxBADYCCCADIAMoAiggARD7ASIANgIYAkAgAEUEQCADKAIgIANBCGoiABCTASAAEDggA0EANgIsDAELIAMgAygCGCADKAIkIANBCGoQkgEiADYCHCAARQRAIAMoAhgQHCADKAIgIANBCGoiABCTASAAEDggA0EANgIsDAELIANBCGoQOCADIAMoAhw2AiwLIAMoAiwhACADQTBqJAAgAAvIAgEBfyMAQRBrIgEkACABIAA2AgggAUHYABAZNgIEAkAgASgCBEUEQCABKAIIQQ5BABAVIAFBADYCDAwBCyABKAIIEIEDIQAgASgCBCAANgJQIABFBEAgASgCBBAWIAFBADYCDAwBCyABKAIEQQA2AgAgASgCBEEANgIEIwBBEGsiACABKAIEQQhqNgIMIAAoAgxBADYCACAAKAIMQQA2AgQgACgCDEEANgIIIAEoAgRBADYCGCABKAIEQQA2AhQgASgCBEEANgIcIAEoAgRBADYCJCABKAIEQQA2AiAgASgCBEEAOgAoIAEoAgRCADcDOCABKAIEQgA3AzAgASgCBEEANgJAIAEoAgRBADYCSCABKAIEQQA2AkQgASgCBEEANgJMIAEoAgRBADYCVCABIAEoAgQ2AgwLIAEoAgwhACABQRBqJAAgAAuBAQEBfyMAQSBrIgIkACACIAA2AhggAkIANwMQIAJCfzcDCCACIAE2AgQCQAJAIAIoAhgEQCACKQMIQn9ZDQELIAIoAgRBEkEAEBUgAkEANgIcDAELIAIgAigCGCACKQMQIAIpAwggAigCBBD/ATYCHAsgAigCHCEAIAJBIGokACAAC80BAQJ/IwBBIGsiASQAIAEgADYCGCAB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CyAAIAFBf2oiAWoiAi0AAEEvRw0ACyACC6kBAQN/AkAgAC0AACICRQ0AA0AgAS0AACIERQRAIAIhAwwCCwJAIAIgBEYNACACQSByIAIgAkG/f2pBGkkbIAEtAAAiAkEgciACIAJBv39qQRpJG0YNACAALQAAIQMMAgsgAUEBaiEBIAAtAAEhAiAAQQFqIQAgAg0ACwsgA0H/AXEiAEEgciAAIABBv39qQRpJGyABLQAAIgBBIHIgACAAQb9/akEaSRtrC+gDAQN/IwBBsAFrIgEkACABIAA2AqgBIAEoAqgBEDgCQAJAIAEoAqgBKAIAQQBOBEAgASgCqAEoAgBBoA4oAgBIDQELIAEgASgCqAEoAgA2AhAgAUEgakG8lwEgAUEQahBvIAFBADYCpAEgASABQSBqNgKgAQwBCyABIAEoAqgBKAIAQQJ0QaANaigCADYCpAECQAJAAkACQCABKAKoASgCAEECdEGwDmooAgBBf2oOAgABAgsgASABKAKoASgCBEGQmgEoAgAQpAI2AqABDAILIwBBEGsiACABKAKoASgCBDYCDCABQQAgACgCDGtBAnRB2NQAaigCADYCoAEMAQsgAUEANgKgAQsLAkAgASgCoAFFBEAgASABKAKkATYCrAEMAQsgASABKAKgARAsAn8gASgCpAEEQCABKAKkARAsQQJqDAELQQALakEBahAZIgA2AhwgAEUEQCABQdgNKAIANgKsAQwBCyABKAIcIQACfyABKAKkAQRAIAEoAqQBDAELQdSXAQshAkHVlwFB1JcBIAEoAqQBGyEDIAEgASgCoAE2AgggASADNgIEIAEgAjYCACAAQc2XASABEG8gASgCqAEgASgCHDYCCCABIAEoAhw2AqwBCyABKAKsASEAIAFBsAFqJAAgAAtxAQN/AkACQANAIAAgAkHQiAFqLQAARwRAQdcAIQMgAkEBaiICQdcARw0BDAILCyACIgMNAEGwiQEhAAwBC0GwiQEhAgNAIAItAAAhBCACQQFqIgAhAiAEDQAgACECIANBf2oiAw0ACwsgASgCFBogAAszAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQGhogACAAKAIUIAFqNgIUIAILigEBAn8jAEGgAWsiAyQAIANBCGpBuIcBQZABEBoaIAMgADYCNCADIAA2AhwgA0F+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QQhxBEAgACABQSByNgIAQX8PCyAAQgA3AgQgACAAKAIsIgE2AhwgACABNgIUIAAgASAAKAIwajYCEEEACwYAQaShAQsGAEGgoQELBgBBmKEBC9kDAgJ/An4jAEEgayICJAACQCABQv///////////wCDIgVCgICAgICAwP9DfCAFQoCAgICAgMCAvH98VARAIAFCBIYgAEI8iIQhBCAAQv//////////D4MiAEKBgICAgICAgAhaBEAgBEKBgICAgICAgMAAfCEEDAILIARCgICAgICAgIBAfSEEIABCgICAgICAgIAIhUIAUg0BIARCAYMgBHwhBAwBCyAAUCAFQoCAgICAgMD//wBUIAVCgICAgICAwP//AFEbRQRAIAFCBIYgAEI8iIRC/////////wODQoCAgICAgID8/wCEIQQMAQtCgICAgICAgPj/ACEEIAVC////////v//DAFYNAEIAIQQgBUIwiKciA0GR9wBJDQAgAkEQaiAAIAFC////////P4NCgICAgICAwACEIgQgA0H/iH9qELMCIAIgACAEQYH4ACADaxCyAiACKQMIQgSGIAIpAwAiAEI8iIQhBCACKQMQIAIpAxiEQgBSrSAAQv//////////D4OEIgBCgYCAgICAgIAIWgRAIARCAXwhBAwBCyAAQoCAgICAgICACIVCAFINACAEQgGDIAR8IQQLIAJBIGokACAEIAFCgICAgICAgICAf4OEvwtQAQF+AkAgA0HAAHEEQCACIANBQGqtiCEBQgAhAgwBCyADRQ0AIAJBwAAgA2uthiABIAOtIgSIhCEBIAIgBIghAgsgACABNwMAIAAgAjcDCAtQAQF+AkAgA0HAAHEEQCABIANBQGqthiECQgAhAQwBCyADRQ0AIAIgA60iBIYgAUHAACADa62IhCECIAEgBIYhAQsgACABNwMAIAAgAjcDCAuLAgACQCAABH8gAUH/AE0NAQJAQZCaASgCACgCAEUEQCABQYB/cUGAvwNGDQMMAQsgAUH/D00EQCAAIAFBP3FBgAFyOgABIAAgAUEGdkHAAXI6AABBAg8LIAFBgLADT0EAIAFBgEBxQYDAA0cbRQRAIAAgAUE/cUGAAXI6AAIgACABQQx2QeABcjoAACAAIAFBBnZBP3FBgAFyOgABQQMPCyABQYCAfGpB//8/TQRAIAAgAUE/cUGAAXI6AAMgACABQRJ2QfABcjoAACAAIAFBBnZBP3FBgAFyOgACIAAgAUEMdkE/cUGAAXI6AAFBBA8LC0G0nAFBGTYCAEF/BUEBCw8LIAAgAToAAEEBC74CAQF/IwBBwMAAayIDJAAgAyAANgK4QCADIAE2ArRAIAMgAjcDqEACQCADKAK0QBBJQQBIBEAgAygCuEBBCGogAygCtEAQGCADQX82ArxADAELIANBADYCDCADQgA3AxADQAJAIAMgAygCtEAgA0EgakKAwAAQLyICNwMYIAJCAFcNACADKAK4QCADQSBqIAMpAxgQNkEASARAIANBfzYCDAUgAykDGEKAwABSDQIgAygCuEAoAlRFDQIgAykDqEBCAFcNAiADIAMpAxggAykDEHw3AxAgAygCuEAoAlQgAykDELkgAykDqEC5oxBYDAILCwsgAykDGEIAUwRAIAMoArhAQQhqIAMoArRAEBggA0F/NgIMCyADKAK0QBAyGiADIAMoAgw2ArxACyADKAK8QCEAIANBwMAAaiQAIAALqgEBAX8jAEEwayIDJAAgAyAANgIoIAMgATYCJCADIAI3AxggAyADKAIoKAIAEDUiAjcDEAJAIAJCAFMEQCADQX82AiwMAQsgAyADKAIoIAMoAiQgAykDGBCQAyICNwMAIAJCAFMEQCADQX82AiwMAQsgAyADKAIoKAIAEDUiAjcDCCACQgBTBEAgA0F/NgIsDAELIANBADYCLAsgAygCLCEAIANBMGokACAAC/4BAQF/IwBBoMAAayICJAAgAiAANgKYQCACIAE3A5BAIAIgAikDkEC6OQMAAkADQCACKQOQQEIAVgRAIAICfkKAwAAgAikDkEBCgMAAVg0AGiACKQOQQAs+AgwgAigCmEAoAgAgAkEQaiACKAIMrSACKAKYQEEIahBhQQBIBEAgAkF/NgKcQAwDCyACKAKYQCACQRBqIAIoAgytEDZBAEgEQCACQX82ApxADAMFIAIgAikDkEAgAjUCDH03A5BAIAIoAphAKAJUIAIrAwAgAikDkEC6oSACKwMAoxBYDAILAAsLIAJBADYCnEALIAIoApxAIQAgAkGgwABqJAAgAAvnEQIBfwF+IwBBoAFrIgMkACADIAA2ApgBIAMgATYClAEgAyACNgKQAQJAIAMoApQBIANBOGoQOUEASARAIAMoApgBQQhqIAMoApQBEBggA0F/NgKcAQwBCyADKQM4QsAAg1AEQCADIAMpAzhCwACENwM4IANBADsBaAsCQAJAIAMoApABKAIQQX9HBEAgAygCkAEoAhBBfkcNAQsgAy8BaEUNACADKAKQASADLwFoNgIQDAELAkACQCADKAKQASgCEA0AIAMpAzhCBINQDQAgAyADKQM4QgiENwM4IAMgAykDUDcDWAwBCyADIAMpAzhC9////w+DNwM4CwsgAykDOEKAAYNQBEAgAyADKQM4QoABhDcDOCADQQA7AWoLIANBgAI2AiQCQCADKQM4QgSDUARAIAMgAygCJEGACHI2AiQgA0J/NwNwDAELIAMoApABIAMpA1A3AyggAyADKQNQNwNwAkAgAykDOEIIg1AEQAJAAkACQAJAAkACfwJAIAMoApABKAIQQX9HBEAgAygCkAEoAhBBfkcNAQtBCAwBCyADKAKQASgCEAtB//8DcQ4NAgMDAwMDAwMBAwMDAAMLIANClMLk8w83AxAMAwsgA0KDg7D/DzcDEAwCCyADQv////8PNwMQDAELIANCADcDEAsgAykDUCADKQMQVgRAIAMgAygCJEGACHI2AiQLDAELIAMoApABIAMpA1g3AyALCyADIAMoApgBKAIAEDUiBDcDiAEgBEIAUwRAIAMoApgBQQhqIAMoApgBKAIAEBggA0F/NgKcAQwBCyADKAKQASIAIAAvAQxB9/8DcTsBDCADIAMoApgBIAMoApABIAMoAiQQXiIANgIoIABBAEgEQCADQX82ApwBDAELIAMgAy8BaAJ/AkAgAygCkAEoAhBBf0cEQCADKAKQASgCEEF+Rw0BC0EIDAELIAMoApABKAIQC0H//wNxRzoAIiADIAMtACJBAXEEfyADLwFoQQBHBUEAC0EBcToAISADIAMvAWgEfyADLQAhBUEBC0EBcToAICADIAMtACJBAXEEfyADKAKQASgCEEEARwVBAAtBAXE6AB8gAwJ/QQEgAy0AIkEBcQ0AGkEBIAMoApABKAIAQYABcQ0AGiADKAKQAS8BUiADLwFqRwtBAXE6AB4gAyADLQAeQQFxBH8gAy8BakEARwVBAAtBAXE6AB0gAyADLQAeQQFxBH8gAygCkAEvAVJBAEcFQQALQQFxOgAcIAMgAygClAE2AjQjAEEQayIAIAMoAjQ2AgwgACgCDCIAIAAoAjBBAWo2AjAgAy0AHUEBcQRAIAMgAy8BakEAEHciADYCDCAARQRAIAMoApgBQQhqQRhBABAVIAMoAjQQHCADQX82ApwBDAILIAMgAygCmAEgAygCNCADLwFqQQAgAygCmAEoAhwgAygCDBEGACIANgIwIABFBEAgAygCNBAcIANBfzYCnAEMAgsgAygCNBAcIAMgAygCMDYCNAsgAy0AIUEBcQRAIAMgAygCmAEgAygCNCADLwFoEKsBIgA2AjAgAEUEQCADKAI0EBwgA0F/NgKcAQwCCyADKAI0EBwgAyADKAIwNgI0CyADLQAgQQFxBEAgAyADKAKYASADKAI0QQAQqgEiADYCMCAARQRAIAMoAjQQHCADQX82ApwBDAILIAMoAjQQHCADIAMoAjA2AjQLIAMtAB9BAXEEQCADIAMoApgBIAMoAjQgAygCkAEoAhAgAygCkAEvAVAQwgIiADYCMCAARQRAIAMoAjQQHCADQX82ApwBDAILIAMoAjQQHCADIAMoAjA2AjQLIAMtABxBAXEEQCADQQA2AgQCQCADKAKQASgCVARAIAMgAygCkAEoAlQ2AgQMAQsgAygCmAEoAhwEQCADIAMoApgBKAIcNgIECwsgAyADKAKQAS8BUkEBEHciADYCCCAARQRAIAMoApgBQQhqQRhBABAVIAMoAjQQHCADQX82ApwBDAILIAMgAygCmAEgAygCNCADKAKQAS8BUkEBIAMoAgQgAygCCBEGACIANgIwIABFBEAgAygCNBAcIANBfzYCnAEMAgsgAygCNBAcIAMgAygCMDYCNAsgAyADKAKYASgCABA1IgQ3A4ABIARCAFMEQCADKAKYAUEIaiADKAKYASgCABAYIANBfzYCnAEMAQsgAyADKAKYASADKAI0IAMpA3AQtQI2AiwgAygCNCADQThqEDlBAEgEQCADKAKYAUEIaiADKAI0EBggA0F/NgIsCyADIAMoAjQQuwIiADoAIyAAQRh0QRh1QQBIBEAgAygCmAFBCGogAygCNBAYIANBfzYCLAsgAygCNBAcIAMoAixBAEgEQCADQX82ApwBDAELIAMgAygCmAEoAgAQNSIENwN4IARCAFMEQCADKAKYAUEIaiADKAKYASgCABAYIANBfzYCnAEMAQsgAygCmAEoAgAgAykDiAEQqAFBAEgEQCADKAKYAUEIaiADKAKYASgCABAYIANBfzYCnAEMAQsgAykDOELkAINC5ABSBEAgAygCmAFBCGpBFEEAEBUgA0F/NgKcAQwBCyADKAKQASgCAEEgcUUEQAJAIAMpAzhCEINCAFIEQCADKAKQASADKAJgNgIUDAELIAMoApABQRRqEAEaCwsgAygCkAEgAy8BaDYCECADKAKQASADKAJkNgIYIAMoApABIAMpA1A3AyggAygCkAEgAykDeCADKQOAAX03AyAgAygCkAEgAygCkAEvAQxB+f8DcSADLQAjQQF0cjsBDCADKAKQASADKAIkQYAIcUEARxCKAyADIAMoApgBIAMoApABIAMoAiQQXiIANgIsIABBAEgEQCADQX82ApwBDAELIAMoAiggAygCLEcEQCADKAKYAUEIakEUQQAQFSADQX82ApwBDAELIAMoApgBKAIAIAMpA3gQqAFBAEgEQCADKAKYAUEIaiADKAKYASgCABAYIANBfzYCnAEMAQsgA0EANgKcAQsgAygCnAEhACADQaABaiQAIAALrwIBAX8jAEEgayICIAA2AhwgAiABNgIYIAJBADYCFCACQgA3AwACQCACKAIcLQAoQQFxRQRAIAIoAhwoAhggAigCHCgCFEYNAQsgAkEBNgIUCyACQgA3AwgDQCACKQMIIAIoAhwpAzBUBEACQAJAIAIoAhwoAkAgAikDCKdBBHRqKAIIDQAgAigCHCgCQCACKQMIp0EEdGotAAxBAXENACACKAIcKAJAIAIpAwinQQR0aigCBEUNASACKAIcKAJAIAIpAwinQQR0aigCBCgCAEUNAQsgAkEBNgIUCyACKAIcKAJAIAIpAwinQQR0ai0ADEEBcUUEQCACIAIpAwBCAXw3AwALIAIgAikDCEIBfDcDCAwBCwsgAigCGARAIAIoAhggAikDADcDAAsgAigCFAuMEAMCfwF+AXwjAEHgAGsiASQAIAEgADYCWAJAIAEoAlhFBEAgAUF/NgJcDAELIAEgASgCWCABQUBrELkCNgIkIAEpA0BQBEACQCABKAJYKAIEQQhxRQRAIAEoAiRFDQELIAEoAlgoAgAQhAJBAEgEQAJAAn8jAEEQayICIAEoAlgoAgA2AgwjAEEQayIAIAIoAgxBDGo2AgwgACgCDCgCAEEWRgsEQCMAQRBrIgIgASgCWCgCADYCDCMAQRBrIgAgAigCDEEMajYCDCAAKAIMKAIEQSxGDQELIAEoAlhBCGogASgCWCgCABAYIAFBfzYCXAwECwsLIAEoAlgQPyABQQA2AlwMAQsgASgCJEUEQCABKAJYED8gAUEANgJcDAELIAEpA0AgASgCWCkDMFYEQCABKAJYQQhqQRRBABAVIAFBfzYCXAwBCyABIAEpA0CnQQN0EBkiADYCKCAARQRAIAFBfzYCXAwBCyABQn83AzggAUIANwNIIAFCADcDUANAIAEpA1AgASgCWCkDMFQEQAJAIAEoAlgoAkAgASkDUKdBBHRqKAIARQ0AAkAgASgCWCgCQCABKQNQp0EEdGooAggNACABKAJYKAJAIAEpA1CnQQR0ai0ADEEBcQ0AIAEoAlgoAkAgASkDUKdBBHRqKAIERQ0BIAEoAlgoAkAgASkDUKdBBHRqKAIEKAIARQ0BCyABAn4gASkDOCABKAJYKAJAIAEpA1CnQQR0aigCACkDSFQEQCABKQM4DAELIAEoAlgoAkAgASkDUKdBBHRqKAIAKQNICzcDOAsgASgCWCgCQCABKQNQp0EEdGotAAxBAXFFBEAgASkDSCABKQNAWgRAIAEoAigQFiABKAJYQQhqQRRBABAVIAFBfzYCXAwECyABKAIoIAEpA0inQQN0aiABKQNQNwMAIAEgASkDSEIBfDcDSAsgASABKQNQQgF8NwNQDAELCyABKQNIIAEpA0BUBEAgASgCKBAWIAEoAlhBCGpBFEEAEBUgAUF/NgJcDAELAkACfyMAQRBrIgAgASgCWCgCADYCDCAAKAIMKQMYQoCACINQCwRAIAFCADcDOAwBCyABKQM4Qn9RBEAgAUJ/NwMYIAFCADcDOCABQgA3A1ADQCABKQNQIAEoAlgpAzBUBEAgASgCWCgCQCABKQNQp0EEdGooAgAEQCABKAJYKAJAIAEpA1CnQQR0aigCACkDSCABKQM4WgRAIAEgASgCWCgCQCABKQNQp0EEdGooAgApA0g3AzggASABKQNQNwMYCwsgASABKQNQQgF8NwNQDAELCyABKQMYQn9SBEAgASABKAJYIAEpAxggASgCWEEIahCIAyIDNwM4IANQBEAgASgCKBAWIAFBfzYCXAwECwsLIAEpAzhCAFYEQCABKAJYKAIAIAEpAzgQ9wJBAEgEQCABQgA3AzgLCwsgASkDOFAEQCABKAJYKAIAEPYCQQBIBEAgASgCWEEIaiABKAJYKAIAEBggASgCKBAWIAFBfzYCXAwCCwsgASgCWCgCVBD5AiABQQA2AiwgAUIANwNIA0ACQCABKQNIIAEpA0BaDQAgASgCWCgCVCABKQNIIgO6IAEpA0C6IgSjIANCAXy6IASjEPgCIAEgASgCKCABKQNIp0EDdGopAwA3A1AgASABKAJYKAJAIAEpA1CnQQR0ajYCEAJAAkAgASgCECgCAEUNACABKAIQKAIAKQNIIAEpAzhaDQAMAQsgAQJ/QQEgASgCECgCCA0AGiABKAIQKAIEBEBBASABKAIQKAIEKAIAQQFxDQEaCyABKAIQKAIEBH8gASgCECgCBCgCAEHAAHFBAEcFQQALC0EBcTYCFCABKAIQKAIERQRAIAEoAhAoAgAQRiEAIAEoAhAgADYCBCAARQRAIAEoAlhBCGpBDkEAEBUgAUEBNgIsDAMLCyABIAEoAhAoAgQ2AgwgASgCWCABKQNQEMcBQQBIBEAgAUEBNgIsDAILIAEgASgCWCgCABA1IgM3AzAgA0IAUwRAIAFBATYCLAwCCyABKAIMIAEpAzA3A0gCQCABKAIUBEAgAUEANgIIIAEoAhAoAghFBEAgASABKAJYIAEoAlggASkDUEEIQQAQqQEiADYCCCAARQRAIAFBATYCLAwFCwsgASgCWAJ/IAEoAggEQCABKAIIDAELIAEoAhAoAggLIAEoAgwQuAJBAEgEQCABQQE2AiwgASgCCARAIAEoAggQHAsMBAsgASgCCARAIAEoAggQHAsMAQsgASgCDCIAIAAvAQxB9/8DcTsBDCABKAJYIAEoAgxBgAIQXkEASARAIAFBATYCLAwDCyABIAEoAlggASkDUCABKAJYQQhqEH8iAzcDACADUARAIAFBATYCLAwDCyABKAJYKAIAIAEpAwBBABAoQQBIBEAgASgCWEEIaiABKAJYKAIAEBggAUEBNgIsDAMLIAEoAlggASgCDCkDIBC3AkEASARAIAFBATYCLAwDCwsLIAEgASkDSEIBfDcDSAwBCwsgASgCLEUEQCABKAJYIAEoAiggASkDQBC2AkEASARAIAFBATYCLAsLIAEoAigQFiABKAIsRQRAIAEoAlgoAgAQvAIEQCABKAJYQQhqIAEoAlgoAgAQGCABQQE2AiwLCyABKAJYKAJUEPsCIAEoAiwEQCABKAJYKAIAEGogAUF/NgJcDAELIAEoAlgQPyABQQA2AlwLIAEoAlwhACABQeAAaiQAIAALswEBAX8jAEEQayIBJAAgASAANgIIAkADQCABKAIIBEAgASgCCCkDGEKAgASDQgBSBEAgASABKAIIQQBCAEEQECI3AwAgASkDAEIAUwRAIAFB/wE6AA8MBAsgASkDAEIDVQRAIAEoAghBDGpBFEEAEBUgAUH/AToADwwECyABIAEpAwA8AA8MAwUgASABKAIIKAIANgIIDAILAAsLIAFBADoADwsgASwADyEAIAFBEGokACAAC8wBAQF/IwBBEGsiASQAIAEgADYCCAJAIAEoAggoAiRBAUcEQCABKAIIQQxqQRJBABAVIAFBfzYCDAwBCyABKAIIKAIgQQFLBEAgASgCCEEMakEdQQAQFSABQX82AgwMAQsgASgCCCgCIEEASwRAIAEoAggQMkEASARAIAFBfzYCDAwCCwsgASgCCEEAQgBBCRAiQgBTBEAgASgCCEECNgIkIAFBfzYCDAwBCyABKAIIQQA2AiQgAUEANgIMCyABKAIMIQAgAUEQaiQAIAAL2gkBAX8jAEGwAWsiBSQAIAUgADYCpAEgBSABNgKgASAFIAI2ApwBIAUgAzcDkAEgBSAENgKMASAFIAUoAqABNgKIAQJAAkACQAJAAkACQAJAAkACQAJAAkAgBSgCjAEODwABAgMEBQcICQkJCQkJBgkLIAUoAogBQgA3AyAgBUIANwOoAQwJCyAFIAUoAqQBIAUoApwBIAUpA5ABEC8iAzcDgAEgA0IAUwRAIAUoAogBQQhqIAUoAqQBEBggBUJ/NwOoAQwJCwJAIAUpA4ABUARAIAUoAogBKQMoIAUoAogBKQMgUQRAIAUoAogBQQE2AgQgBSgCiAEgBSgCiAEpAyA3AxggBSgCiAEoAgAEQCAFKAKkASAFQcgAahA5QQBIBEAgBSgCiAFBCGogBSgCpAEQGCAFQn83A6gBDA0LAkAgBSkDSEIgg1ANACAFKAJ0IAUoAogBKAIwRg0AIAUoAogBQQhqQQdBABAVIAVCfzcDqAEMDQsCQCAFKQNIQgSDUA0AIAUpA2AgBSgCiAEpAxhRDQAgBSgCiAFBCGpBFUEAEBUgBUJ/NwOoAQwNCwsLDAELAkAgBSgCiAEoAgQNACAFKAKIASkDICAFKAKIASkDKFYNACAFIAUoAogBKQMoIAUoAogBKQMgfTcDQANAIAUpA0AgBSkDgAFUBEAgBQJ+Qv////8PQv////8PIAUpA4ABIAUpA0B9VA0AGiAFKQOAASAFKQNAfQs3AzggBSgCiAEoAjAgBSgCnAEgBSkDQKdqIAUpAzinEBshACAFKAKIASAANgIwIAUoAogBIgAgBSkDOCAAKQMofDcDKCAFIAUpAzggBSkDQHw3A0AMAQsLCwsgBSgCiAEiACAFKQOAASAAKQMgfDcDICAFIAUpA4ABNwOoAQwICyAFQgA3A6gBDAcLIAUgBSgCnAE2AjQgBSgCiAEoAgQEQCAFKAI0IAUoAogBKQMYNwMYIAUoAjQgBSgCiAEoAjA2AiwgBSgCNCAFKAKIASkDGDcDICAFKAI0QQA7ATAgBSgCNEEAOwEyIAUoAjQiACAAKQMAQuwBhDcDAAsgBUIANwOoAQwGCyAFIAUoAogBQQhqIAUoApwBIAUpA5ABEEI3A6gBDAULIAUoAogBEBYgBUIANwOoAQwECyMAQRBrIgAgBSgCpAE2AgwgBSAAKAIMKQMYNwMoIAUpAyhCAFMEQCAFKAKIAUEIaiAFKAKkARAYIAVCfzcDqAEMBAsgBSkDKCEDIAVBfzYCGCAFQRA2AhQgBUEPNgIQIAVBDTYCDCAFQQw2AgggBUEKNgIEIAVBCTYCACAFQQggBRA3Qn+FIAODNwOoAQwDCyAFAn8gBSkDkAFCEFQEQCAFKAKIAUEIakESQQAQFUEADAELIAUoApwBCzYCHCAFKAIcRQRAIAVCfzcDqAEMAwsCQCAFKAKkASAFKAIcKQMAIAUoAhwoAggQKEEATgRAIAUgBSgCpAEQSiIDNwMgIANCAFkNAQsgBSgCiAFBCGogBSgCpAEQGCAFQn83A6gBDAMLIAUoAogBIAUpAyA3AyAgBUIANwOoAQwCCyAFIAUoAogBKQMgNwOoAQwBCyAFKAKIAUEIakEcQQAQFSAFQn83A6gBCyAFKQOoASEDIAVBsAFqJAAgAwvDBgEBfyMAQUBqIgQkACAEIAA2AjQgBCABNgIwIAQgAjYCLCAEIAM3AyACQAJ/IwBBEGsiACAEKAIwNgIMIAAoAgwoAgALBEAgBEJ/NwM4DAELAkAgBCkDIFBFBEAgBCgCMC0ADUEBcUUNAQsgBEIANwM4DAELIARCADcDCCAEQQA6ABsDQCAELQAbQQFxBH9BAAUgBCkDCCAEKQMgVAtBAXEEQCAEIAQpAyAgBCkDCH03AwAgBCAEKAIwKAKsQCAEKAIsIAQpAwinaiAEIAQoAjAoAqhAKAIcEQEANgIcIAQoAhxBAkcEQCAEIAQpAwAgBCkDCHw3AwgLAkACQAJAAkAgBCgCHEEBaw4DAAIBAwsgBCgCMEEBOgANAkAgBCgCMC0ADEEBcQ0ACyAEKAIwKQMgQgBTBEAgBCgCMEEUQQAQFSAEQQE6ABsMAwsCQCAEKAIwLQAOQQFxRQ0AIAQoAjApAyAgBCkDCFYNACAEKAIwQQE6AA8gBCgCMCAEKAIwKQMgNwMYIAQoAiwgBCgCMEEoaiAEKAIwKQMYpxAaGiAEIAQoAjApAxg3AzgMBgsgBEEBOgAbDAILIAQoAjAtAAxBAXEEQCAEQQE6ABsMAgsgBCAEKAI0IAQoAjBBKGpCgMAAEC8iAzcDECADQgBTBEAgBCgCMCAEKAI0EBggBEEBOgAbDAILAkAgBCkDEFAEQCAEKAIwQQE6AAwgBCgCMCgCrEAgBCgCMCgCqEAoAhgRAwAgBCgCMCkDIEIAUwRAIAQoAjBCADcDIAsMAQsCQCAEKAIwKQMgQgBZBEAgBCgCMEEAOgAODAELIAQoAjAgBCkDEDcDIAsgBCgCMCgCrEAgBCgCMEEoaiAEKQMQIAQoAjAoAqhAKAIUEREAGgsMAQsCfyMAQRBrIgAgBCgCMDYCDCAAKAIMKAIARQsEQCAEKAIwQRRBABAVCyAEQQE6ABsLDAELCyAEKQMIQgBWBEAgBCgCMEEAOgAOIAQoAjAiACAEKQMIIAApAxh8NwMYIAQgBCkDCDcDOAwBCyAEQX9BAAJ/IwBBEGsiACAEKAIwNgIMIAAoAgwoAgALG6w3AzgLIAQpAzghAyAEQUBrJAAgAwuIAQEBfyMAQRBrIgIkACACIAA2AgwgAiABNgIIIwBBEGsiACACKAIMNgIMIAAoAgxBADYCACAAKAIMQQA2AgQgACgCDEEANgIIIAIoAgwgAigCCDYCAAJAIAIoAgwQpwFBAUYEQCACKAIMQbScASgCADYCBAwBCyACKAIMQQA2AgQLIAJBEGokAAvcBQEBfyMAQTBrIgUkACAFIAA2AiQgBSABNgIgIAUgAjYCHCAFIAM3AxAgBSAENgIMIAUgBSgCIDYCCAJAAkACQAJAAkACQAJAAkACQAJAIAUoAgwOEQABAgMFBggICAgICAgIBwgECAsgBSgCCEIANwMYIAUoAghBADoADCAFKAIIQQA6AA0gBSgCCEEAOgAPIAUoAghCfzcDICAFKAIIKAKsQCAFKAIIKAKoQCgCDBEAAEEBcUUEQCAFQn83AygMCQsgBUIANwMoDAgLIAUgBSgCJCAFKAIIIAUoAhwgBSkDEBC+AjcDKAwHCyAFKAIIKAKsQCAFKAIIKAKoQCgCEBEAAEEBcUUEQCAFQn83AygMBwsgBUIANwMoDAYLIAUgBSgCHDYCBAJAIAUoAggtABBBAXEEQCAFKAIILQANQQFxBEAgBSgCBAJ/QQAgBSgCCC0AD0EBcQ0AGgJ/AkAgBSgCCCgCFEF/RwRAIAUoAggoAhRBfkcNAQtBCAwBCyAFKAIIKAIUC0H//wNxCzsBMCAFKAIEIAUoAggpAxg3AyAgBSgCBCIAIAApAwBCyACENwMADAILIAUoAgQiACAAKQMAQrf///8PgzcDAAwBCyAFKAIEQQA7ATAgBSgCBCIAIAApAwBCwACENwMAAkAgBSgCCC0ADUEBcQRAIAUoAgQgBSgCCCkDGDcDGCAFKAIEIgAgACkDAEIEhDcDAAwBCyAFKAIEIgAgACkDAEL7////D4M3AwALCyAFQgA3AygMBQsgBQJ/QQAgBSgCCC0AD0EBcQ0AGiAFKAIIKAKsQCAFKAIIKAKoQCgCCBEAAAusNwMoDAQLIAUgBSgCCCAFKAIcIAUpAxAQQjcDKAwDCyAFKAIIEKwBIAVCADcDKAwCCyAFQX82AgAgBUEQIAUQN0I/hDcDKAwBCyAFKAIIQRRBABAVIAVCfzcDKAsgBSkDKCEDIAVBMGokACADC/4CAQF/IwBBIGsiBCQAIAQgADYCGCAEIAE6ABcgBCACNgIQIAQgAzYCDCAEQbDAABAZIgA2AggCQCAARQRAIARBADYCHAwBCyMAQRBrIgAgBCgCCDYCDCAAKAIMQQA2AgAgACgCDEEANgIEIAAoAgxBADYCCCAEKAIIAn8gBC0AF0EBcQRAIAQoAhhBf0cEfyAEKAIYQX5GBUEBC0EBcQwBC0EAC0EARzoADiAEKAIIIAQoAgw2AqhAIAQoAgggBCgCGDYCFCAEKAIIIAQtABdBAXE6ABAgBCgCCEEAOgAMIAQoAghBADoADSAEKAIIQQA6AA8gBCgCCCgCqEAoAgAhAAJ/AkAgBCgCGEF/RwRAIAQoAhhBfkcNAQtBCAwBCyAEKAIYC0H//wNxIAQoAhAgBCgCCCAAEQEAIQAgBCgCCCAANgKsQCAARQRAIAQoAggQOCAEKAIIEBYgBEEANgIcDAELIAQgBCgCCDYCHAsgBCgCHCEAIARBIGokACAAC00BAX8jAEEQayIEJAAgBCAANgIMIAQgATYCCCAEIAI2AgQgBCADNgIAIAQoAgwgBCgCCCAEKAIEQQEgBCgCABCtASEAIARBEGokACAAC1sBAX8jAEEQayIBJAAgASAANgIIIAFBAToABwJAIAEoAghFBEAgAUEBOgAPDAELIAEgASgCCCABLQAHQQFxEK4BQQBHOgAPCyABLQAPQQFxIQAgAUEQaiQAIAALPAEBfyMAQRBrIgMkACADIAA7AQ4gAyABNgIIIAMgAjYCBEEAIAMoAgggAygCBBCvASEAIANBEGokACAAC68CAQF/IwBBIGsiAyQAIAMgADYCGCADIAE2AhQgAyACNgIQIAMgAygCGDYCDCADKAIMAn5C/////w9C/////w8gAygCECkDAFQNABogAygCECkDAAs+AiAgAygCDCADKAIUNgIcAkAgAygCDC0ABEEBcQRAIAMgAygCDEEQakEEQQAgAygCDC0ADEEBcRsQ2wI2AggMAQsgAyADKAIMQRBqENECNgIICyADKAIQIgAgACkDACADKAIMNQIgfTcDAAJAAkACQAJAAkAgAygCCEEFag4HAgMDAwMAAQMLIANBADYCHAwDCyADQQE2AhwMAgsgAygCDCgCFEUEQCADQQM2AhwMAgsLIAMoAgwoAgBBDSADKAIIEBUgA0ECNgIcCyADKAIcIQAgA0EgaiQAIAALJAEBfyMAQRBrIgEgADYCDCABIAEoAgw2AgggASgCCEEBOgAMC5kBAQF/IwBBIGsiAyQAIAMgADYCGCADIAE2AhQgAyACNwMIIAMgAygCGDYCBAJAAkAgAykDCEL/////D1gEQCADKAIEKAIUQQBNDQELIAMoAgQoAgBBEkEAEBUgA0EAOgAfDAELIAMoAgQgAykDCD4CFCADKAIEIAMoAhQ2AhAgA0EBOgAfCyADLQAfQQFxIQAgA0EgaiQAIAALkAEBAX8jAEEQayIBJAAgASAANgIIIAEgASgCCDYCBAJAIAEoAgQtAARBAXEEQCABIAEoAgRBEGoQsgE2AgAMAQsgASABKAIEQRBqEM0CNgIACwJAIAEoAgAEQCABKAIEKAIAQQ0gASgCABAVIAFBADoADwwBCyABQQE6AA8LIAEtAA9BAXEhACABQRBqJAAgAAvAAQEBfyMAQRBrIgEkACABIAA2AgggASABKAIINgIEIAEoAgRBADYCFCABKAIEQQA2AhAgASgCBEEANgIgIAEoAgRBADYCHAJAIAEoAgQtAARBAXEEQCABIAEoAgRBEGogASgCBCgCCBDhAjYCAAwBCyABIAEoAgRBEGoQ0gI2AgALAkAgASgCAARAIAEoAgQoAgBBDSABKAIAEBUgAUEAOgAPDAELIAFBAToADwsgAS0AD0EBcSEAIAFBEGokACAAC28BAX8jAEEQayIBIAA2AgggASABKAIINgIEAkAgASgCBC0ABEEBcUUEQCABQQA2AgwMAQsgASgCBCgCCEEDSARAIAFBAjYCDAwBCyABKAIEKAIIQQdKBEAgAUEBNgIMDAELIAFBADYCDAsgASgCDAssAQF/IwBBEGsiASQAIAEgADYCDCABIAEoAgw2AgggASgCCBAWIAFBEGokAAs8AQF/IwBBEGsiAyQAIAMgADsBDiADIAE2AgggAyACNgIEQQEgAygCCCADKAIEEK8BIQAgA0EQaiQAIAALmQEBAX8jAEEQayIBJAAgASAANgIIAkAgASgCCBBLBEAgAUF+NgIMDAELIAEgASgCCCgCHDYCBCABKAIEKAI4BEAgASgCCCgCKCABKAIEKAI4IAEoAggoAiQRBAALIAEoAggoAiggASgCCCgCHCABKAIIKAIkEQQAIAEoAghBADYCHCABQQA2AgwLIAEoAgwhACABQRBqJAAgAAudBAEBfyMAQSBrIgMkACADIAA2AhggAyABNgIUIAMgAjYCECADIAMoAhgoAhw2AgwCQCADKAIMKAI4RQRAIAMoAhgoAihBASADKAIMKAIodEEBIAMoAhgoAiARAQAhACADKAIMIAA2AjggAygCDCgCOEUEQCADQQE2AhwMAgsLIAMoAgwoAixFBEAgAygCDEEBIAMoAgwoAih0NgIsIAMoAgxBADYCNCADKAIMQQA2AjALAkAgAygCECADKAIMKAIsTwRAIAMoAgwoAjggAygCFCADKAIMKAIsayADKAIMKAIsEBoaIAMoAgxBADYCNCADKAIMIAMoAgwoAiw2AjAMAQsgAyADKAIMKAIsIAMoAgwoAjRrNgIIIAMoAgggAygCEEsEQCADIAMoAhA2AggLIAMoAgwoAjggAygCDCgCNGogAygCFCADKAIQayADKAIIEBoaIAMgAygCECADKAIIazYCEAJAIAMoAhAEQCADKAIMKAI4IAMoAhQgAygCEGsgAygCEBAaGiADKAIMIAMoAhA2AjQgAygCDCADKAIMKAIsNgIwDAELIAMoAgwiACADKAIIIAAoAjRqNgI0IAMoAgwoAjQgAygCDCgCLEYEQCADKAIMQQA2AjQLIAMoAgwoAjAgAygCDCgCLEkEQCADKAIMIgAgAygCCCAAKAIwajYCMAsLCyADQQA2AhwLIAMoAhwhACADQSBqJAAgAAsYAQF/IwBBEGsiASAANgIMIAEoAgxBDGoLPAEBfyMAQRBrIgEgADYCDCABKAIMQZDyADYCUCABKAIMQQk2AlggASgCDEGQggE2AlQgASgCDEEFNgJcC5ZPAQR/IwBB4ABrIgEkACABIAA2AlggAUECNgJUAkACQAJAIAEoAlgQSw0AIAEoAlgoAgxFDQAgASgCWCgCAA0BIAEoAlgoAgRFDQELIAFBfjYCXAwBCyABIAEoAlgoAhw2AlAgASgCUCgCBEG//gBGBEAgASgCUEHA/gA2AgQLIAEgASgCWCgCDDYCSCABIAEoAlgoAhA2AkAgASABKAJYKAIANgJMIAEgASgCWCgCBDYCRCABIAEoAlAoAjw2AjwgASABKAJQKAJANgI4IAEgASgCRDYCNCABIAEoAkA2AjAgAUEANgIQA0ACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgASgCUCgCBEHMgX9qDh8AAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHwsgASgCUCgCDEUEQCABKAJQQcD+ADYCBAwhCwNAIAEoAjhBEEkEQCABKAJERQ0hIAEgASgCREF/ajYCRCABIAEoAkwiAEEBajYCTCABIAEoAjwgAC0AACABKAI4dGo2AjwgASABKAI4QQhqNgI4DAELCwJAIAEoAlAoAgxBAnFFDQAgASgCPEGflgJHDQAgASgCUCgCKEUEQCABKAJQQQ82AigLQQBBAEEAEBshACABKAJQIAA2AhwgASABKAI8OgAMIAEgASgCPEEIdjoADSABKAJQKAIcIAFBDGpBAhAbIQAgASgCUCAANgIcIAFBADYCPCABQQA2AjggASgCUEG1/gA2AgQMIQsgASgCUEEANgIUIAEoAlAoAiQEQCABKAJQKAIkQX82AjALAkAgASgCUCgCDEEBcQRAIAEoAjxB/wFxQQh0IAEoAjxBCHZqQR9wRQ0BCyABKAJYQbbuADYCGCABKAJQQdH+ADYCBAwhCyABKAI8QQ9xQQhHBEAgASgCWEHN7gA2AhggASgCUEHR/gA2AgQMIQsgASABKAI8QQR2NgI8IAEgASgCOEEEazYCOCABIAEoAjxBD3FBCGo2AhQgASgCUCgCKEUEQCABKAJQIAEoAhQ2AigLAkAgASgCFEEPTQRAIAEoAhQgASgCUCgCKE0NAQsgASgCWEHo7gA2AhggASgCUEHR/gA2AgQMIQsgASgCUEEBIAEoAhR0NgIYQQBBAEEAED4hACABKAJQIAA2AhwgASgCWCAANgIwIAEoAlBBvf4AQb/+ACABKAI8QYAEcRs2AgQgAUEANgI8IAFBADYCOAwgCwNAIAEoAjhBEEkEQCABKAJERQ0gIAEgASgCREF/ajYCRCABIAEoAkwiAEEBajYCTCABIAEoAjwgAC0AACABKAI4dGo2AjwgASABKAI4QQhqNgI4DAELCyABKAJQIAEoAjw2AhQgASgCUCgCFEH/AXFBCEcEQCABKAJYQc3uADYCGCABKAJQQdH+ADYCBAwgCyABKAJQKAIUQYDAA3EEQCABKAJYQfzuADYCGCABKAJQQdH+ADYCBAwgCyABKAJQKAIkBEAgASgCUCgCJCABKAI8QQh2QQFxNgIACwJAIAEoAlAoAhRBgARxRQ0AIAEoAlAoAgxBBHFFDQAgASABKAI8OgAMIAEgASgCPEEIdjoADSABKAJQKAIcIAFBDGpBAhAbIQAgASgCUCAANgIcCyABQQA2AjwgAUEANgI4IAEoAlBBtv4ANgIECwNAIAEoAjhBIEkEQCABKAJERQ0fIAEgASgCREF/ajYCRCABIAEoAkwiAEEBajYCTCABIAEoAjwgAC0AACABKAI4dGo2AjwgASABKAI4QQhqNgI4DAELCyABKAJQKAIkBEAgASgCUCgCJCABKAI8NgIECwJAIAEoAlAoAhRBgARxRQ0AIAEoAlAoAgxBBHFFDQAgASABKAI8OgAMIAEgASgCPEEIdjoADSABIAEoAjxBEHY6AA4gASABKAI8QRh2OgAPIAEoAlAoAhwgAUEMakEEEBshACABKAJQIAA2AhwLIAFBADYCPCABQQA2AjggASgCUEG3/gA2AgQLA0AgASgCOEEQSQRAIAEoAkRFDR4gASABKAJEQX9qNgJEIAEgASgCTCIAQQFqNgJMIAEgASgCPCAALQAAIAEoAjh0ajYCPCABIAEoAjhBCGo2AjgMAQsLIAEoAlAoAiQEQCABKAJQKAIkIAEoAjxB/wFxNgIIIAEoAlAoAiQgASgCPEEIdjYCDAsCQCABKAJQKAIUQYAEcUUNACABKAJQKAIMQQRxRQ0AIAEgASgCPDoADCABIAEoAjxBCHY6AA0gASgCUCgCHCABQQxqQQIQGyEAIAEoAlAgADYCHAsgAUEANgI8IAFBADYCOCABKAJQQbj+ADYCBAsCQCABKAJQKAIUQYAIcQRAA0AgASgCOEEQSQRAIAEoAkRFDR8gASABKAJEQX9qNgJEIAEgASgCTCIAQQFqNgJMIAEgASgCPCAALQAAIAEoAjh0ajYCPCABIAEoAjhBCGo2AjgMAQsLIAEoAlAgASgCPDYCRCABKAJQKAIkBEAgASgCUCgCJCABKAI8NgIUCwJAIAEoAlAoAhRBgARxRQ0AIAEoAlAoAgxBBHFFDQAgASABKAI8OgAMIAEgASgCPEEIdjoADSABKAJQKAIcIAFBDGpBAhAbIQAgASgCUCAANgIcCyABQQA2AjwgAUEANgI4DAELIAEoAlAoAiQEQCABKAJQKAIkQQA2AhALCyABKAJQQbn+ADYCBAsgASgCUCgCFEGACHEEQCABIAEoAlAoAkQ2AiwgASgCLCABKAJESwRAIAEgASgCRDYCLAsgASgCLARAAkAgASgCUCgCJEUNACABKAJQKAIkKAIQRQ0AIAEgASgCUCgCJCgCFCABKAJQKAJEazYCFCABKAJQKAIkKAIQIAEoAhRqIAEoAkwCfyABKAIUIAEoAixqIAEoAlAoAiQoAhhLBEAgASgCUCgCJCgCGCABKAIUawwBCyABKAIsCxAaGgsCQCABKAJQKAIUQYAEcUUNACABKAJQKAIMQQRxRQ0AIAEoAlAoAhwgASgCTCABKAIsEBshACABKAJQIAA2AhwLIAEgASgCRCABKAIsazYCRCABIAEoAiwgASgCTGo2AkwgASgCUCIAIAAoAkQgASgCLGs2AkQLIAEoAlAoAkQNGwsgASgCUEEANgJEIAEoAlBBuv4ANgIECwJAIAEoAlAoAhRBgBBxBEAgASgCREUNGyABQQA2AiwDQCABKAJMIQAgASABKAIsIgJBAWo2AiwgASAAIAJqLQAANgIUAkAgASgCUCgCJEUNACABKAJQKAIkKAIcRQ0AIAEoAlAoAkQgASgCUCgCJCgCIE8NACABKAIUIQIgASgCUCgCJCgCHCEDIAEoAlAiBCgCRCEAIAQgAEEBajYCRCAAIANqIAI6AAALIAEoAhQEfyABKAIsIAEoAkRJBUEAC0EBcQ0ACwJAIAEoAlAoAhRBgARxRQ0AIAEoAlAoAgxBBHFFDQAgASgCUCgCHCABKAJMIAEoAiwQGyEAIAEoAlAgADYCHAsgASABKAJEIAEoAixrNgJEIAEgASgCLCABKAJMajYCTCABKAIUDRsMAQsgASgCUCgCJARAIAEoAlAoAiRBADYCHAsLIAEoAlBBADYCRCABKAJQQbv+ADYCBAsCQCABKAJQKAIUQYAgcQRAIAEoAkRFDRogAUEANgIsA0AgASgCTCEAIAEgASgCLCICQQFqNgIsIAEgACACai0AADYCFAJAIAEoAlAoAiRFDQAgASgCUCgCJCgCJEUNACABKAJQKAJEIAEoAlAoAiQoAihPDQAgASgCFCECIAEoAlAoAiQoAiQhAyABKAJQIgQoAkQhACAEIABBAWo2AkQgACADaiACOgAACyABKAIUBH8gASgCLCABKAJESQVBAAtBAXENAAsCQCABKAJQKAIUQYAEcUUNACABKAJQKAIMQQRxRQ0AIAEoAlAoAhwgASgCTCABKAIsEBshACABKAJQIAA2AhwLIAEgASgCRCABKAIsazYCRCABIAEoAiwgASgCTGo2AkwgASgCFA0aDAELIAEoAlAoAiQEQCABKAJQKAIkQQA2AiQLCyABKAJQQbz+ADYCBAsgASgCUCgCFEGABHEEQANAIAEoAjhBEEkEQCABKAJERQ0aIAEgASgCREF/ajYCRCABIAEoAkwiAEEBajYCTCABIAEoAjwgAC0AACABKAI4dGo2AjwgASABKAI4QQhqNgI4DAELCwJAIAEoAlAoAgxBBHFFDQAgASgCPCABKAJQKAIcQf//A3FGDQAgASgCWEGV7wA2AhggASgCUEHR/gA2AgQMGgsgAUEANgI8IAFBADYCOAsgASgCUCgCJARAIAEoAlAoAiQgASgCUCgCFEEJdUEBcTYCLCABKAJQKAIkQQE2AjALQQBBAEEAEBshACABKAJQIAA2AhwgASgCWCAANgIwIAEoAlBBv/4ANgIEDBgLA0AgASgCOEEgSQRAIAEoAkRFDRggASABKAJEQX9qNgJEIAEgASgCTCIAQQFqNgJMIAEgASgCPCAALQAAIAEoAjh0ajYCPCABIAEoAjhBCGo2AjgMAQsLIAEoAlAgASgCPEEIdkGA/gNxIAEoAjxBGHZqIAEoAjxBgP4DcUEIdGogASgCPEH/AXFBGHRqIgA2AhwgASgCWCAANgIwIAFBADYCPCABQQA2AjggASgCUEG+/gA2AgQLIAEoAlAoAhBFBEAgASgCWCABKAJINgIMIAEoAlggASgCQDYCECABKAJYIAEoAkw2AgAgASgCWCABKAJENgIEIAEoAlAgASgCPDYCPCABKAJQIAEoAjg2AkAgAUECNgJcDBgLQQBBAEEAED4hACABKAJQIAA2AhwgASgCWCAANgIwIAEoAlBBv/4ANgIECyABKAJUQQVGDRQgASgCVEEGRg0UCyABKAJQKAIIBEAgASABKAI8IAEoAjhBB3F2NgI8IAEgASgCOCABKAI4QQdxazYCOCABKAJQQc7+ADYCBAwVCwNAIAEoAjhBA0kEQCABKAJERQ0VIAEgASgCREF/ajYCRCABIAEoAkwiAEEBajYCTCABIAEoAjwgAC0AACABKAI4dGo2AjwgASABKAI4QQhqNgI4DAELCyABKAJQIAEoAjxBAXE2AgggASABKAI8QQF2NgI8IAEgASgCOEEBazYCOAJAAkACQAJAAkAgASgCPEEDcQ4EAAECAwQLIAEoAlBBwf4ANgIEDAMLIAEoAlAQ0AIgASgCUEHH/gA2AgQgASgCVEEGRgRAIAEgASgCPEECdjYCPCABIAEoAjhBAms2AjgMFwsMAgsgASgCUEHE/gA2AgQMAQsgASgCWEGp7wA2AhggASgCUEHR/gA2AgQLIAEgASgCPEECdjYCPCABIAEoAjhBAms2AjgMFAsgASABKAI8IAEoAjhBB3F2NgI8IAEgASgCOCABKAI4QQdxazYCOANAIAEoAjhBIEkEQCABKAJERQ0UIAEgASgCREF/ajYCRCABIAEoAkwiAEEBajYCTCABIAEoAjwgAC0AACABKAI4dGo2AjwgASABKAI4QQhqNgI4DAELCyABKAI8Qf//A3EgASgCPEEQdkH//wNzRwRAIAEoAlhBvO8ANgIYIAEoAlBB0f4ANgIEDBQLIAEoAlAgASgCPEH//wNxNgJEIAFBADYCPCABQQA2AjggASgCUEHC/gA2AgQgASgCVEEGRg0SCyABKAJQQcP+ADYCBAsgASABKAJQKAJENgIsIAEoAiwEQCABKAIsIAEoAkRLBEAgASABKAJENgIsCyABKAIsIAEoAkBLBEAgASABKAJANgIsCyABKAIsRQ0RIAEoAkggASgCTCABKAIsEBoaIAEgASgCRCABKAIsazYCRCABIAEoAiwgASgCTGo2AkwgASABKAJAIAEoAixrNgJAIAEgASgCLCABKAJIajYCSCABKAJQIgAgACgCRCABKAIsazYCRAwSCyABKAJQQb/+ADYCBAwRCwNAIAEoAjhBDkkEQCABKAJERQ0RIAEgASgCREF/ajYCRCABIAEoAkwiAEEBajYCTCABIAEoAjwgAC0AACABKAI4dGo2AjwgASABKAI4QQhqNgI4DAELCyABKAJQIAEoAjxBH3FBgQJqNgJkIAEgASgCPEEFdjYCPCABIAEoAjhBBWs2AjggASgCUCABKAI8QR9xQQFqNgJoIAEgASgCPEEFdjYCPCABIAEoAjhBBWs2AjggASgCUCABKAI8QQ9xQQRqNgJgIAEgASgCPEEEdjYCPCABIAEoAjhBBGs2AjgCQCABKAJQKAJkQZ4CTQRAIAEoAlAoAmhBHk0NAQsgASgCWEHZ7wA2AhggASgCUEHR/gA2AgQMEQsgASgCUEEANgJsIAEoAlBBxf4ANgIECwNAIAEoAlAoAmwgASgCUCgCYEkEQANAIAEoAjhBA0kEQCABKAJERQ0SIAEgASgCREF/ajYCRCABIAEoAkwiAEEBajYCTCABIAEoAjwgAC0AACABKAI4dGo2AjwgASABKAI4QQhqNgI4DAELCyABKAI8QQdxIQIgASgCUEH0AGohAyABKAJQIgQoAmwhACAEIABBAWo2AmwgAEEBdEGQ7gBqLwEAQQF0IANqIAI7AQAgASABKAI8QQN2NgI8IAEgASgCOEEDazYCOAwBCwsDQCABKAJQKAJsQRNJBEAgASgCUEH0AGohAiABKAJQIgMoAmwhACADIABBAWo2AmwgAEEBdEGQ7gBqLwEAQQF0IAJqQQA7AQAMAQsLIAEoAlAgASgCUEG0Cmo2AnAgASgCUCABKAJQKAJwNgJQIAEoAlBBBzYCWCABQQAgASgCUEH0AGpBEyABKAJQQfAAaiABKAJQQdgAaiABKAJQQfQFahByNgIQIAEoAhAEQCABKAJYQf3vADYCGCABKAJQQdH+ADYCBAwQCyABKAJQQQA2AmwgASgCUEHG/gA2AgQLA0ACQCABKAJQKAJsIAEoAlAoAmQgASgCUCgCaGpPDQADQAJAIAEgASgCUCgCUCABKAI8QQEgASgCUCgCWHRBAWtxQQJ0aigBADYBICABLQAhIAEoAjhNDQAgASgCREUNESABIAEoAkRBf2o2AkQgASABKAJMIgBBAWo2AkwgASABKAI8IAAtAAAgASgCOHRqNgI8IAEgASgCOEEIajYCOAwBCwsCQCABLwEiQRBIBEAgASABKAI8IAEtACF2NgI8IAEgASgCOCABLQAhazYCOCABLwEiIQIgASgCUEH0AGohAyABKAJQIgQoAmwhACAEIABBAWo2AmwgAEEBdCADaiACOwEADAELAkAgAS8BIkEQRgRAA0AgASgCOCABLQAhQQJqSQRAIAEoAkRFDRQgASABKAJEQX9qNgJEIAEgASgCTCIAQQFqNgJMIAEgASgCPCAALQAAIAEoAjh0ajYCPCABIAEoAjhBCGo2AjgMAQsLIAEgASgCPCABLQAhdjYCPCABIAEoAjggAS0AIWs2AjggASgCUCgCbEUEQCABKAJYQZbwADYCGCABKAJQQdH+ADYCBAwECyABIAEoAlAgASgCUCgCbEEBdGovAXI2AhQgASABKAI8QQNxQQNqNgIsIAEgASgCPEECdjYCPCABIAEoAjhBAms2AjgMAQsCQCABLwEiQRFGBEADQCABKAI4IAEtACFBA2pJBEAgASgCREUNFSABIAEoAkRBf2o2AkQgASABKAJMIgBBAWo2AkwgASABKAI8IAAtAAAgASgCOHRqNgI8IAEgASgCOEEIajYCOAwBCwsgASABKAI8IAEtACF2NgI8IAEgASgCOCABLQAhazYCOCABQQA2AhQgASABKAI8QQdxQQNqNgIsIAEgASgCPEEDdjYCPCABIAEoAjhBA2s2AjgMAQsDQCABKAI4IAEtACFBB2pJBEAgASgCREUNFCABIAEoAkRBf2o2AkQgASABKAJMIgBBAWo2AkwgASABKAI8IAAtAAAgASgCOHRqNgI8IAEgASgCOEEIajYCOAwBCwsgASABKAI8IAEtACF2NgI8IAEgASgCOCABLQAhazYCOCABQQA2AhQgASABKAI8Qf8AcUELajYCLCABIAEoAjxBB3Y2AjwgASABKAI4QQdrNgI4CwsgASgCUCgCbCABKAIsaiABKAJQKAJkIAEoAlAoAmhqSwRAIAEoAlhBlvAANgIYIAEoAlBB0f4ANgIEDAILA0AgASABKAIsIgBBf2o2AiwgAARAIAEoAhQhAiABKAJQQfQAaiEDIAEoAlAiBCgCbCEAIAQgAEEBajYCbCAAQQF0IANqIAI7AQAMAQsLCwwBCwsgASgCUCgCBEHR/gBGDQ4gASgCUC8B9ARFBEAgASgCWEGw8AA2AhggASgCUEHR/gA2AgQMDwsgASgCUCABKAJQQbQKajYCcCABKAJQIAEoAlAoAnA2AlAgASgCUEEJNgJYIAFBASABKAJQQfQAaiABKAJQKAJkIAEoAlBB8ABqIAEoAlBB2ABqIAEoAlBB9AVqEHI2AhAgASgCEARAIAEoAlhB1fAANgIYIAEoAlBB0f4ANgIEDA8LIAEoAlAgASgCUCgCcDYCVCABKAJQQQY2AlwgAUECIAEoAlBB9ABqIAEoAlAoAmRBAXRqIAEoAlAoAmggASgCUEHwAGogASgCUEHcAGogASgCUEH0BWoQcjYCECABKAIQBEAgASgCWEHx8AA2AhggASgCUEHR/gA2AgQMDwsgASgCUEHH/gA2AgQgASgCVEEGRg0NCyABKAJQQcj+ADYCBAsCQCABKAJEQQZJDQAgASgCQEGCAkkNACABKAJYIAEoAkg2AgwgASgCWCABKAJANgIQIAEoAlggASgCTDYCACABKAJYIAEoAkQ2AgQgASgCUCABKAI8NgI8IAEoAlAgASgCODYCQCABKAJYIAEoAjAQ1gIgASABKAJYKAIMNgJIIAEgASgCWCgCEDYCQCABIAEoAlgoAgA2AkwgASABKAJYKAIENgJEIAEgASgCUCgCPDYCPCABIAEoAlAoAkA2AjggASgCUCgCBEG//gBGBEAgASgCUEF/NgLINwsMDQsgASgCUEEANgLINwNAAkAgASABKAJQKAJQIAEoAjxBASABKAJQKAJYdEEBa3FBAnRqKAEANgEgIAEtACEgASgCOE0NACABKAJERQ0NIAEgASgCREF/ajYCRCABIAEoAkwiAEEBajYCTCABIAEoAjwgAC0AACABKAI4dGo2AjwgASABKAI4QQhqNgI4DAELCwJAIAEtACBFDQAgAS0AIEHwAXENACABIAEoASA2ARgDQAJAIAEgASgCUCgCUCABLwEaIAEoAjxBASABLQAZIAEtABhqdEEBa3EgAS0AGXZqQQJ0aigBADYBICABLQAZIAEtACFqIAEoAjhNDQAgASgCREUNDiABIAEoAkRBf2o2AkQgASABKAJMIgBBAWo2AkwgASABKAI8IAAtAAAgASgCOHRqNgI8IAEgASgCOEEIajYCOAwBCwsgASABKAI8IAEtABl2NgI8IAEgASgCOCABLQAZazYCOCABKAJQIgAgAS0AGSAAKALIN2o2Asg3CyABIAEoAjwgAS0AIXY2AjwgASABKAI4IAEtACFrNgI4IAEoAlAiACABLQAhIAAoAsg3ajYCyDcgASgCUCABLwEiNgJEIAEtACBFBEAgASgCUEHN/gA2AgQMDQsgAS0AIEEgcQRAIAEoAlBBfzYCyDcgASgCUEG//gA2AgQMDQsgAS0AIEHAAHEEQCABKAJYQYfxADYCGCABKAJQQdH+ADYCBAwNCyABKAJQIAEtACBBD3E2AkwgASgCUEHJ/gA2AgQLIAEoAlAoAkwEQANAIAEoAjggASgCUCgCTEkEQCABKAJERQ0NIAEgASgCREF/ajYCRCABIAEoAkwiAEEBajYCTCABIAEoAjwgAC0AACABKAI4dGo2AjwgASABKAI4QQhqNgI4DAELCyABKAJQIgAgACgCRCABKAI8QQEgASgCUCgCTHRBAWtxajYCRCABIAEoAjwgASgCUCgCTHY2AjwgASABKAI4IAEoAlAoAkxrNgI4IAEoAlAiACAB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KAIMSQRAIAIgAigCUCIAQQFqNgJQIAIgAigCLCAALQAAIAIoAih0ajYCLCACIAIoAihBCGo2AiggAigCKCACKAIMSQRAIAIgAigCUCIAQQFqNgJQIAIgAigCLCAALQAAIAIoAih0ajYCLCACIAIoAihBCGo2AigLCyACIAIoAgQgAigCLEEBIAIoAgx0QQFrcWo2AgQgAiACKAIsIAIoAgx2NgIsIAIgAigCKCACKAIMazYCKCACIAIoAkggAigCRGs2AgwCQCACKAIEIAIoAgxLBEAgAiACKAIEIAIoAgxrNgIMIAIoAgwgAigCOEsEQCACKAJUKALENwRAIAIoAlxBsO0ANgIYIAIoAlRB0f4ANgIEDAoLCyACIAIoAjA2AgACQCACKAI0RQRAIAIgAigCACACKAI8IAIoAgxrajYCACACKAIMIAIoAghJBEAgAiACKAIIIAIoAgxrNgIIA0AgAiACKAIAIgBBAWo2AgAgAC0AACEAIAIgAigCSCIBQQFqNgJIIAEgADoAACACIAIoAgxBf2oiADYCDCAADQALIAIgAigCSCACKAIEazYCAAsMAQsCQCACKAI0IAIoAgxJBEAgAiACKAIAIAIoAjwgAigCNGogAigCDGtqNgIAIAIgAigCDCACKAI0azYCDCACKAIMIAIoAghJBEAgAiACKAIIIAIoAgxrNgIIA0AgAiACKAIAIgBBAWo2AgAgAC0AACEAIAIgAigCSCIBQQFqNgJIIAEgADoAACACIAIoAgxBf2oiADYCDCAADQALIAIgAigCMDYCACACKAI0IAIoAghJBEAgAiACKAI0NgIMIAIgAigCCCACKAIMazYCCANAIAIgAigCACIAQQFqNgIAIAAtAAAhACACIAIoAkgiAUEBajYCSCABIAA6AAAgAiACKAIMQX9qIgA2AgwgAA0ACyACIAIoAkggAigCBGs2AgALCwwBCyACIAIoAgAgAigCNCACKAIMa2o2AgAgAigCDCACKAIISQRAIAIgAigCCCACKAIMazYCCANAIAIgAigCACIAQQFqNgIAIAAtAAAhACACIAIoAkgiAUEBajYCSCABIAA6AAAgAiACKAIMQX9qIgA2AgwgAA0ACyACIAIoAkggAigCBGs2AgALCwsDQCACKAIIQQJNRQRAIAIgAigCACIAQQFqNgIAIAAtAAAhACACIAIoAkgiAUEBajYCSCABIAA6AAAgAiACKAIAIgBBAWo2AgAgAC0AACEAIAIgAigCSCIBQQFqNgJIIAEgADoAACACIAIoAgAiAEEBajYCACAALQAAIQAgAiACKAJIIgFBAWo2AkggASAAOgAAIAIgAigCCEEDazYCCAwBCwsMAQsgAiACKAJIIAIoAgRrNgIAA0AgAiACKAIAIgBBAWo2AgAgAC0AACEAIAIgAigCSCIBQQFqNgJIIAEgADoAACACIAIoAgAiAEEBajYCACAALQAAIQAgAiACKAJIIgFBAWo2AkggASAAOgAAIAIgAigCACIAQQFqNgIAIAAtAAAhACACIAIoAkgiAUEBajYCSCABIAA6AAAgAiACKAIIQQNrNgIIIAIoAghBAksNAAsLIAIoAggEQCACIAIoAgAiAEEBajYCACAALQAAIQAgAiACKAJIIgFBAWo2AkggASAAOgAAIAIoAghBAUsEQCACIAIoAgAiAEEBajYCACAALQAAIQAgAiACKAJIIgFBAWo2AkggASAAOgAACwsMAgsgAigCDEHAAHFFBEAgAkEQaiACKAIgIAIvARIgAigCLEEBIAIoAgx0QQFrcWpBAnRqKAEANgEADAELCyACKAJcQc7tADYCGCACKAJUQdH+ADYCBAwECwwCCyACKAIMQcAAcUUEQCACQRBqIAIoAiQgAi8BEiACKAIsQQEgAigCDHRBAWtxakECdGooAQA2AQAMAQsLIAIoAgxBIHEEQCACKAJUQb/+ADYCBAwCCyACKAJcQeTtADYCGCACKAJUQdH+ADYCBAwBC0EAIQAgAigCUCACKAJMSQR/IAIoAkggAigCQEkFQQALQQFxDQELCyACIAIoAihBA3Y2AgggAiACKAJQIAIoAghrNgJQIAIgAigCKCACKAIIQQN0azYCKCACIAIoAixBASACKAIodEEBa3E2AiwgAigCXCACKAJQNgIAIAIoAlwgAigCSDYCDCACKAJcAn8gAigCUCACKAJMSQRAIAIoAkwgAigCUGtBBWoMAQtBBSACKAJQIAIoAkxraws2AgQgAigCXAJ/IAIoAkggAigCQEkEQCACKAJAIAIoAkhrQYECagwBC0GBAiACKAJIIAIoAkBraws2AhAgAigCVCACKAIsNgI8IAIoAlQgAigCKDYCQAvBEAECfyMAQSBrIgIk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LSAAKAKgLUEBdGogAi8BEDsBACACLQATIQEgAigCKCIAKAKYLSEDIAAgACgCoC0iAEEBajYCoC0gACADaiABOgAAIAIgAi8BEEF/ajsBECACKAIoIAItABNBgNkAai0AAEECdGpBmAlqIgAgAC8BAEEBajsBACACKAIoQYgTagJ/IAIvARBBgAJIBEAgAi8BEC0AgFUMAQsgAi8BEEEHdUGAAmotAIBVC0ECdGoiACAALwEAQQFqOwEAIAIgAigCKCgCoC0gAigCKCgCnC1BAWtGNgIgIAIoAigiACAAKAJ0IAIoAigoAmBrNgJ0IAIoAigiACACKAIoKAJgIAAoAmxqNgJsIAIoAihBADYCYAwBCyACIAIoAigiACgCOCAAKAJsai0AADoADyACKAIoIgAoAqQtIAAoAqAtQQF0akEAOwEAIAItAA8hASACKAIoIgAoApgtIQMgACAAKAKgLSIAQQFqNgKgLSAAIANqIAE6AAAgAigCKCACLQAPQQJ0aiIAIAAvAZQBQQFqOwGUASACIAIoAigoAqAtIAIoAigoApwtQQFrRjYCICACKAIoIgAgACgCdEF/ajYCdCACKAIoIgAgACgCbEEBajYCbAsgAigCIARAIAIoAigCfyACKAIoKAJcQQBOBEAgAigCKCgCOCACKAIoKAJcagwBC0EACyACKAIoKAJsIAIoAigoAlxrQQAQKSACKAIoIAIoAigoAmw2AlwgAigCKCgCABAdIAIoAigoAgAoAhBFBEAgAkEANgIsDAQLCwwBCwsgAigCKEEANgK0LSACKAIkQQRGBEAgAigCKAJ/IAIoAigoAlxBAE4EQCACKAIoKAI4IAIoAigoAlxqDAELQQALIAIoAigoAmwgAigCKCgCXGtBARApIAIoAiggAigCKCgCbDYCXCACKAIoKAIAEB0gAigCKCgCACgCEEUEQCACQQI2AiwMAgsgAkEDNgIsDAELIAIoAigoAqAtBEAgAigCKAJ/IAIoAigoAlxBAE4EQCACKAIoKAI4IAIoAigoAlxqDAELQQALIAIoAigoAmwgAigCKCgCXGtBABApIAIoAiggAigCKCgCbDYCXCACKAIoKAIAEB0gAigCKCgCACgCEEUEQCACQQA2AiwMAgsLIAJBATYCLAsgAigCLCEAIAJBMGokACAAC8AFAQJ/IwBBIGsiAiQA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AgQgAkEANgIQA0AgAigCEEEPSkUEQCACKAI8QbwWaiACKAIQQQF0akEAOwEAIAIgAigCEEEBajYCEAwBCwsgAigCNCACKAI8QdwWaiACKAI8KALUKEECdGooAgBBAnRqQQA7AQIgAiACKAI8KALUKEEBajYCHANAIAIoAhxBvQRIBEAgAiACKAI8QdwWaiACKAIcQQJ0aigCADYCGCACIAIoAjQgAigCNCACKAIYQQJ0ai8BAkECdGovAQJBAWo2AhAgAigCECACKAIgSgRAIAIgAigCIDYCECACIAIoAgRBAWo2AgQLIAIoAjQgAigCGEECdGogAigCEDsBAiACKAIYIAIoAjBMBEAgAigCPCACKAIQQQF0akG8FmoiACAALwEAQQFqOwEAIAJBADYCDCACKAIYIAIoAiROBEAgAiACKAIoIAIoAhggAigCJGtBAnRqKAIANgIMCyACIAIoAjQgAigCGEECdGovAQA7AQogAigCPCIAIAAoAqgtIAIvAQogAigCECACKAIMamxqNgKoLSACKAIsBEAgAigCPCIAIAAoAqwtIAIvAQogAigCLCACKAIYQQJ0ai8BAiACKAIMamxqNgKsLQsLIAIgAigCHEEBajYCHAwBCwsCQCACKAIERQ0AA0AgAiACKAIgQQFrNgIQA0AgAigCPEG8FmogAigCEEEBdGovAQBFBEAgAiACKAIQQX9qNgIQDAELCyACKAI8IAIoAhBBAXRqQbwWaiIAIAAvAQBBf2o7AQAgAigCPCACKAIQQQF0akG+FmoiACAALwEAQQJqOwEAIAIoAjwgAigCIEEBdGpBvBZqIgAgAC8BAEF/ajsBACACIAIoAgRBAms2AgQgAigCBEEASg0ACyACIAIoAiA2AhADQCACKAIQRQ0BIAIgAigCPEG8FmogAigCEEEBdGovAQA2AhgDQCACKAIYBEAgAigCPEHcFmohACACIAIoAhxBf2oiATYCHCACIAFBAnQgAGooAgA2AhQgAigCFCACKAIwSg0BIAIoAjQgAigCFEECdGovAQIgAigCEEcEQCACKAI8IgAgACgCqC0gAigCNCACKAIUQQJ0ai8BACACKAIQIAIoAjQgAigCFEECdGovAQJrbGo2AqgtIAIoAjQgAigCFEECdGogAigCEDsBAgsgAiACKAIYQX9qNgIYDAELCyACIAIo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KAIMIAEoAgxB/BRqNgKwFiABKAIMQajbADYCuBYgASgCDEEAOwG4LSABKAIMQQA2ArwtIAEoAgwQuQEgAUEQaiQAC9cNAQF/IwBBIGsiAyAANgIYIAMgATYCFCADIAI2AhAgAyADKAIYQRB2NgIMIAMgAygCGEH//wNxNgIYAkAgAygCEEEBRgRAIAMgAygCFC0AACADKAIYajYCGCADKAIYQfH/A08EQCADIAMoAhhB8f8DazYCGAsgAyADKAIYIAMoAgxqNgIMIAMoAgxB8f8DTwRAIAMgAygCDEHx/wNrNgIMCyADIAMoAhggAygCDEEQdHI2AhwMAQsgAygCFEUEQCADQQE2AhwMAQsgAygCEEEQSQRAA0AgAyADKAIQIgBBf2o2AhAgAARAIAMgAygCFCIAQQFqNgIUIAMgAC0AACADKAIYajYCGCADIAMoAhggAygCDGo2AgwMAQsLIAMoAhhB8f8DTwRAIAMgAygCGEHx/wNrNgIYCyADIAMoAgxB8f8DcDYCDCADIAMoAhggAygCDEEQdHI2AhwMAQsDQCADKAIQQbArSUUEQCADIAMoAhBBsCtrNgIQIANB2wI2AggDQCADIAMoAhQtAAAgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0AASADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQACIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAMgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0ABCADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQAFIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAYgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0AByADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQAIIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAkgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0ACiADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQALIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAwgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0ADSADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQAOIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAA8gAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFEEQajYCFCADIAMoAghBf2oiADYCCCAADQALIAMgAygCGEHx/wNwNgIYIAMgAygCDEHx/wNwNgIMDAELCyADKAIQBEADQCADKAIQQRBJRQRAIAMgAygCEEEQazYCECADIAMoAhQtAAAgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0AASADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQACIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAMgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0ABCADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQAFIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAYgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0AByADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQAIIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAkgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0ACiADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQALIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAwgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0ADSADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQAOIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAA8gAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFEEQajYCFAwBCwsDQCADIAMoAhAiAEF/ajYCECAABEAgAyADKAIUIgBBAWo2AhQgAyAALQAAIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDAwBCwsgAyADKAIYQfH/A3A2AhggAyADKAIMQfH/A3A2AgwLIAMgAygCGCADKAIMQRB0cjYCHAsgAygCHAspAQF/IwBBEGsiAiQAIAIgADYCDCACIAE2AgggAigCCBAWIAJBEGokAAs6AQF/IwBBEGsiAyQAIAMgADYCDCADIAE2AgggAyACNgIEIAMoAgggAygCBGwQGSEAIANBEGokACAAC70HAQl/IAAoAgQiB0EDcSECIAAgB0F4cSIGaiEEAkBByJwBKAIAIgUgAEsNACACQQFGDQALAkAgAkUEQEEAIQIgAUGAAkkNASAGIAFBBGpPBEAgACECIAYgAWtBmKABKAIAQQF0TQ0CC0EADwsCQCAGIAFPBEAgBiABayICQRBJDQEgACAHQQFxIAFyQQJyNgIEIAAgAWoiASACQQNyNgIEIAQgBCgCBEEBcjYCBCABIAIQtgEMAQtBACECIARB0JwBKAIARgRAQcScASgCACAGaiIFIAFNDQIgACAHQQFxIAFyQQJyNgIEIAAgAWoiAiAFIAFrIgFBAXI2AgRBxJwBIAE2AgBB0JwBIAI2AgAMAQsgBEHMnAEoAgBGBEBBwJwBKAIAIAZqIgUgAUkNAgJAIAUgAWsiAkEQTwRAIAAgB0EBcSABckECcjYCBCAAIAFqIgEgAkEBcjYCBCAAIAVqIgUgAjYCACAFIAUoAgRBfnE2AgQMAQsgACAHQQFxIAVyQQJyNgIEIAAgBWoiASABKAIEQQFyNgIEQQAhAkEAIQELQcycASABNgIAQcCcASACNgIADAELIAQoAgQiA0ECcQ0BIANBeHEgBmoiCSABSQ0BIAkgAWshCgJAIANB/wFNBEAgBCgCCCIGIANBA3YiBUEDdEHgnAFqRxogBiAEKAIMIghGBEBBuJwBQbicASgCAEF+IAV3cTYCAAwCCyAGIAg2AgwgCCAGNgIIDAELIAQoAhghCAJAIAQgBCgCDCIDRwRAIAUgBCgCCCICTQRAIAIoAgwaCyACIAM2AgwgAyACNgIIDAELAkAgBEEUaiICKAIAIgYNACAEQRBqIgIoAgAiBg0AQQAhAwwBCwNAIAIhBSAGIgNBFGoiAigCACIGDQAgA0EQaiECIAMoAhAiBg0ACyAFQQA2AgALIAhFDQACQCAEIAQoAhwiBUECdEHongFqIgIoAgBGBEAgAiADNgIAIAMNAUG8nAFBvJwBKAIAQX4gBXdxNgIADAILIAhBEEEUIAgoAhAgBEYbaiADNgIAIANFDQELIAMgCDYCGCAEKAIQIgIEQCADIAI2AhAgAiADNgIYCyAEKAIUIgJFDQAgAyACNgIUIAIgAzYCGAsgCkEPTQRAIAAgB0EBcSAJckECcjYCBCAAIAlqIgEgASgCBEEBcjYCBAwBCyAAIAdBAXEgAXJBAnI2AgQgACABaiICIApBA3I2AgQgACAJaiIBIAEoAgRBAXI2AgQgAiAKELYBCyAAIQILIAILhAICAX8BfiMAQeAAayICJAAgAiAANgJYIAIgATYCVCACIAIoAlggAkHIAGpCDBAvIgM3AwgCQCADQgBTBEAgAigCVCACKAJYEBggAkF/NgJcDAELIAIpAwhCDFIEQCACKAJUQRFBABAVIAJBfzYCXAwBCyACKAJUIAJByABqIgAgAEIMQQAQeCACKAJYIAJBEGoQOUEASARAIAJBADYCXAwBCyACKAI4IAJBBmogAkEEahDDAQJAIAItAFMgAigCPEEYdkYNACACLQBTIAIvAQZBCHVGDQAgAigCVEEbQQAQFSACQX82AlwMAQsgAkEANgJcCyACKAJcIQAgAkHgAGokACAAC8oDAQF/IwBB0ABrIgUkACAFIAA2AkQgBSABNgJAIAUgAjYCPCAFIAM3AzAgBSAENgIsIAUgBSgCQDYCKAJAAkACQAJAAkACQAJAAkACQCAFKAIsDg8AAQIDBQYHBwcHBwcHBwQHCyAFKAJEIAUoAigQ7wJBAEgEQCAFQn83A0gMCAsgBUIANwNIDAcLIAUgBSgCRCAFKAI8IAUpAzAQLyIDNwMgIANCAFMEQCAFKAIoIAUoAkQQGCAFQn83A0gMBwsgBSgCQCAFKAI8IAUoAjwgBSkDIEEAEHggBSAFKQMgNwNIDAYLIAVCADcDSAwFCyAFIAUoAjw2AhwgBSgCHEEAOwEyIAUoAhwiACAAKQMAQoABhDcDACAFKAIcKQMAQgiDQgBSBEAgBSgCHCIAIAApAyBCDH03AyALIAVCADcDSAwECyAFQX82AhQgBUEFNgIQIAVBBDYCDCAFQQM2AgggBUECNgIEIAVBATYCACAFQQAgBRA3NwNIDAMLIAUgBSgCKCAFKAI8IAUpAzAQQjcDSAwCCyAFKAIoELoBIAVCADcDSAwBCyAFKAIoQRJBABAVIAVCfzcDSAsgBSkDSCEDIAVB0ABqJAAgAwvuAgEBfyMAQSBrIgUkACAFIAA2AhggBSABNgIUIAUgAjsBEiAFIAM2AgwgBSAENgIIAkACQAJAIAUoAghFDQAgBSgCFEUNACAFLwESQQFGDQELIAUoAhhBCGpBEkEAEBUgBUEANgIcDAELIAUoAgxBAXEEQCAFKAIYQQhqQRhBABAVIAVBADYCHAwBCyAFQRgQGSIANgIEIABFBEAgBSgCGEEIakEOQQAQFSAFQQA2AhwMAQsjAEEQayIAIAUoAgQ2AgwgACgCDEEANgIAIAAoAgxBADYCBCAAKAIMQQA2AgggBSgCBEH4rNGRATYCDCAFKAIEQYnPlZoCNgIQIAUoAgRBkPHZogM2AhQgBSgCBEEAIAUoAgggBSgCCBAsrUEBEHggBSAFKAIYIAUoAhRBAyAFKAIEEGQiADYCACAARQRAIAUoAgQQugEgBUEANgIcDAELIAUgBSgCADYCHAsgBSgCHCEAIAVBIGokACAAC+gGAQF/IwBB4ABrIgQkACAEIAA2AlQgBCABNgJQIAQgAjcDSCAEIAM2AkQCQCAEKAJUKQM4IAQpA0h8QoCABHxCAX0gBCkDSFQEQCAEKAJEQRJBABAVIARCfzcDWAwBCyAEIAQoAlQoAgQgBCgCVCkDCKdBA3RqKQMANwMgIAQoAlQpAzggBCkDSHwgBCkDIFYEQCAEIAQoAlQpAwggBCkDSCAEKQMgIAQoAlQpAzh9fUKAgAR8QgF9QhCIfDcDGCAEKQMYIAQoAlQpAxBWBEAgBCAEKAJUKQMQNwMQIAQpAxBQBEAgBEIQNwMQCwNAIAQpAxAgBCkDGFpFBEAgBCAEKQMQQgGGNwMQDAELCyAEKAJUIAQpAxAgBCgCRBC9AUEBcUUEQCAEKAJEQQ5BABAVIARCfzcDWAwDCwsDQCAEKAJUKQMIIAQpAxhUBEBBgIAEEBkhACAEKAJUKAIAIAQoAlQpAwinQQR0aiAANgIAIAAEQCAEKAJUKAIAIAQoAlQpAwinQQR0akKAgAQ3AwggBCgCVCIAIAApAwhCAXw3AwggBCAEKQMgQoCABHw3AyAgBCgCVCgCBCAEKAJUKQMIp0EDdGogBCkDIDcDAAwCBSAEKAJEQQ5BABAVIARCfzcDWAwECwALCwsgBCAEKAJUKQNANwMwIAQgBCgCVCkDOCAEKAJUKAIEIAQpAzCnQQN0aikDAH03AyggBEIANwM4A0AgBCkDOCAEKQNIVARAIAQCfiAEKQNIIAQpAzh9IAQoAlQoAgAgBCkDMKdBBHRqKQMIIAQpAyh9VARAIAQpA0ggBCkDOH0MAQsgBCgCVCgCACAEKQMwp0EEdGopAwggBCkDKH0LNwMIIAQoAlQoAgAgBCkDMKdBBHRqKAIAIAQpAyinaiAEKAJQIAQpAzinaiAEKQMIpxAaGiAEKQMIIAQoAlQoAgAgBCkDMKdBBHRqKQMIIAQpAyh9UQRAIAQgBCkDMEIBfDcDMAsgBCAEKQMIIAQpAzh8NwM4IARCADcDKAwBCwsgBCgCVCIAIAQpAzggACkDOHw3AzggBCgCVCAEKQMwNwNAIAQoAlQpAzggBCgCVCkDMFYEQCAEKAJUIAQoAlQpAzg3AzALIAQgBCkDODcDWAsgBCkDWCECIARB4ABqJAAgAgvnAwEBfyMAQUBqIgMkACADIAA2AjQgAyABNgIwIAMgAjcDKCADAn4gAykDKCADKAI0KQMwIAMoAjQpAzh9VARAIAMpAygMAQsgAygCNCkDMCADKAI0KQM4fQs3AygCQCADKQMoUARAIANCADcDOAwBCyADKQMoQv///////////wBWBEAgA0J/NwM4DAELIAMgAygCNCkDQDcDGCADIAMoAjQpAzggAygCNCgCBCADKQMYp0EDdGopAwB9NwMQIANCADcDIANAIAMpAyAgAykDKFQEQCADAn4gAykDKCADKQMgfSADKAI0KAIAIAMpAxinQQR0aikDCCADKQMQfVQEQCADKQMoIAMpAyB9DAELIAMoAjQoAgAgAykDGKdBBHRqKQMIIAMpAxB9CzcDCCADKAIwIAMpAyCnaiADKAI0KAIAIAMpAxinQQR0aigCACADKQMQp2ogAykDCKcQGhogAykDCCADKAI0KAIAIAMpAxinQQR0aikDCCADKQMQfVEEQCADIAMpAxhCAXw3AxgLIAMgAykDCCADKQMgfDcDICADQgA3AxAMAQsLIAMoAjQiACADKQMgIAApAzh8NwM4IAMoAjQgAykDGDcDQCADIAMpAyA3AzgLIAMpAzghAiADQUBrJAAgAguuBAEBfyMAQUBqIgMkACADIAA2AjggAyABNwMwIAMgAjYCLAJAIAMpAzBQBEAgA0EAQgBBASADKAIsEE42AjwMAQsgAykDMCADKAI4KQMwVgRAIAMoAixBEkEAEBUgA0EANgI8DAELIAMoAjgoAigEQCADKAIsQR1BABAVIANBADYCPAwBCyADIAMoAjggAykDMBC7ATcDICADIAMpAzAgAygCOCgCBCADKQMgp0EDdGopAwB9NwMYIAMpAxhQBEAgAyADKQMgQn98NwMgIAMgAygCOCgCACADKQMgp0EEdGopAwg3AxgLIAMgAygCOCgCACADKQMgp0EEdGopAwggAykDGH03AxAgAykDECADKQMwVgRAIAMoAixBHEEAEBUgA0EANgI8DAELIAMgAygCOCgCACADKQMgQgF8QQAgAygCLBBOIgA2AgwgAEUEQCADQQA2AjwMAQsgAygCDCgCACADKAIMKQMIQgF9p0EEdGogAykDGDcDCCADKAIMKAIEIAMoAgwpAwinQQN0aiADKQMwNwMAIAMoAgwgAykDMDcDMCADKAIMAn4gAygCOCkDGCADKAIMKQMIQgF9VARAIAMoAjgpAxgMAQsgAygCDCkDCEIBfQs3AxggAygCOCADKAIMNgIoIAMoAgwgAygCODYCKCADKAI4IAMoAgwpAwg3AyAgAygCDCADKQMgQgF8NwMgIAMgAygCDDYCPAsgAygCPCEAIANBQGskACAAC8gJAQF/IwBB8ABrIgQkACAEIAA2AmQgBCABNgJgIAQgAjcDWCAEIAM2AlQgBCAEKAJkNgJQAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAEKAJUDhQGBwIMBAUKDwADCRELEA4IEgESDRILQQBCAEEAIAQoAlAQTiEAIAQoAlAgADYCFCAARQRAIARCfzcDaAwTCyAEKAJQKAIUQgA3AzggBCgCUCgCFEIANwNAIARCADcDaAwSCyAEKAJQKAIQIAQpA1ggBCgCUBD0AiEAIAQoAlAgADYCFCAARQRAIARCfzcDaAwSCyAEKAJQKAIUIAQpA1g3AzggBCgCUCgCFCAEKAJQKAIUKQMINwNAIARCADcDaAwRCyAEQgA3A2gMEAsgBCgCUCgCEBA0IAQoAlAgBCgCUCgCFDYCECAEKAJQQQA2AhQgBEIANwNoDA8LIAQgBCgCUCAEKAJgIAQpA1gQQjcDaAwOCyAEKAJQKAIQEDQgBCgCUCgCFBA0IAQoAlAQFiAEQgA3A2gMDQsgBCgCUCgCEEIANwM4IAQoAlAoAhBCADcDQCAEQgA3A2gMDAsgBCkDWEL///////////8AVgRAIAQoAlBBEkEAEBUgBEJ/NwNoDAwLIAQgBCgCUCgCECAEKAJgIAQpA1gQ8wI3A2gMCwsgBEEAQgBBACAEKAJQEE42AkwgBCgCTEUEQCAEQn83A2gMCwsgBCgCUCgCEBA0IAQoAlAgBCgCTDYCECAEQgA3A2gMCgsgBCgCUCgCFBA0IAQoAlBBADYCFCAEQgA3A2gMCQsgBCAEKAJQKAIQIAQoAmAgBCkDWCAEKAJQELwBrDcDaAwICyAEIAQoAlAoAhQgBCgCYCAEKQNYIAQoAlAQvAGsNwNoDAcLIAQpA1hCOFQEQCAEKAJQQRJBABAVIARCfzcDaAwHCyAEIAQoAmA2AkggBCgCSBA8IAQoAkggBCgCUCgCDDYCKCAEKAJIIAQoAlAoAhApAzA3AxggBCgCSCAEKAJIKQMYNwMgIAQoAkhBADsBMCAEKAJIQQA7ATIgBCgCSELcATcDACAEQjg3A2gMBgsgBCgCUCAEKAJgKAIANgIMIARCADcDaAwFCyAEQX82AkAgBEETNgI8IARBCzYCOCAEQQ02AjQgBEEMNgIwIARBCjYCLCAEQQ82AiggBEEJNgIkIARBETYCICAEQQg2AhwgBEEHNgIYIARBBjYCFCAEQQU2AhAgBEEENgIMIARBAzYCCCAEQQI2AgQgBEEBNgIAIARBACAEEDc3A2gMBAsgBCgCUCgCECkDOEL///////////8AVgRAIAQoAlBBHkE9EBUgBEJ/NwNoDAQLIAQgBCgCUCgCECkDODcDaAwDCyAEKAJQKAIUKQM4Qv///////////wBWBEAgBCgCUEEeQT0QFSAEQn83A2gMAwsgBCAEKAJQKAIUKQM4NwNoDAILIAQpA1hC////////////AFYEQCAEKAJQQRJBABAVIARCfzcDaAwCCyAEIAQoAlAoAhQgBCgCYCAEKQNYIAQoAlAQ8gI3A2gMAQsgBCgCUEEcQQAQFSAEQn83A2gLIAQpA2ghAiAEQfAAaiQAIAILeQEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIKAIkQQFGBEAgASgCCEEMakESQQAQFSABQX82AgwMAQsgASgCCEEAQgBBCBAiQgBTBEAgAUF/NgIMDAELIAEoAghBATYCJCABQQA2AgwLIAEoAgwhACABQRBqJAAgAAuDAQEBfyMAQRBrIgIkACACIAA2AgggAiABNwMAAkAgAigCCCgCJEEBRgRAIAIoAghBDGpBEkEAEBUgAkF/NgIMDAELIAIoAghBACACKQMAQREQIkIAUwRAIAJBfzYCDAwBCyACKAIIQQE2AiQgAkEANgIMCyACKAIMIQAgAkEQaiQAIAALWwEBfyMAQSBrIgMkACADIAA2AhwgAyABOQMQIAMgAjkDCCADKAIcBEAgAygCHCADKwMQOQMgIAMoAhwgAysDCDkDKCADKAIcRAAAAAAAAAAAEFgLIANBIGokAAtYAQF/IwBBEGsiASQAIAEgADYCDCABKAIMBEAgASgCDEQAAAAAAAAAADkDGCABKAIMKAIARAAAAAAAAAAAIAEoAgwoAgwgASgCDCgCBBEaAAsgAUEQaiQAC0gBAX8jAEEQayIBJAAgASAANgIMIAEoAgwEQCABKAIMKAIIBEAgASgCDCgCDCABKAIMKAIIEQMACyABKAIMEBYLIAFBEGokAAsrAQF/IwBBEGsiASQAIAEgADYCDCABKAIMRAAAAAAAAPA/EFggAUEQaiQAC5wCAgF/AXwjAEEgayIBIAA3AxAgASABKQMQukQAAAAAAADoP6M5AwgCQCABKwMIRAAA4P///+9BZARAIAFBfzYCBAwBCyABAn8gASsDCCICRAAAAAAAAPBBYyACRAAAAAAAAAAAZnEEQCACqwwBC0EACzYCBAsCQCABKAIEQYCAgIB4SwRAIAFBgICAgHg2AhwMAQsgASABKAIEQX9qNgIEIAEgASgCBCABKAIEQQF2cjYCBCABIAEoAgQgASgCBEECdnI2AgQgASABKAIEIAEoAgRBBHZyNgIEIAEgASgCBCABKAIEQQh2cjYCBCABIAEoAgQgASgCBEEQdnI2AgQgASABKAIEQQFqNgIEIAEgASgCBDYCHAsgASgCHAuTAQEBfyMAQSBrIgMkACADIAA2AhggAyABNwMQIAMgAjYCDAJAIAMpAxBQBEAgA0EBOgAfDAELIAMgAykDEBD8AjYCCCADKAIIIAMoAhgoAgBNBEAgA0EBOgAfDAELIAMoAhggAygCCCADKAIMEFpBAXFFBEAgA0EAOgAfDAELIANBAToAHwsgAy0AHxogA0EgaiQAC7MCAgF/AX4jAEEwayIEJAAgBCAANgIkIAQgATYCICAEIAI2AhwgBCADNgIYAkACQCAEKAIkBEAgBCgCIA0BCyAEKAIYQRJBABAVIARCfzcDKAwBCyAEKAIkKQMIQgBWBEAgBCAEKAIgEHw2AhQgBCAEKAIUIAQoAiQoAgBwNgIQIAQgBCgCJCgCECAEKAIQQQJ0aigCADYCDANAAkAgBCgCDEUNACAEKAIgIAQoAgwoAgAQWwRAIAQgBCgCDCgCGDYCDAwCBSAEKAIcQQhxBEAgBCgCDCkDCEJ/UgRAIAQgBCgCDCkDCDcDKAwGCwwCCyAEKAIMKQMQQn9SBEAgBCAEKAIMKQMQNwMoDAULCwsLCyAEKAIYQQlBABAVIARCfzcDKAsgBCkDKCEFIARBMGokACAFC0YBAX8jAEEQayIBJAAgASAANgIMA0AgASgCDARAIAEgASgCDCgCGDYCCCABKAIMEBYgASABKAIINgIMDAELCyABQRBqJAALlwEBAX8jAEEQayIBJAAgASAANgIMIAEoAgwEQCABKAIMKAIQBEAgAUEANgIIA0AgASgCCCABKAIMKAIASQRAIAEoAgwoAhAgASgCCEECdGooAgAEQCABKAIMKAIQIAEoAghBAnRqKAIAEP8CCyABIAEoAghBAWo2AggMAQsLIAEoAgwoAhAQFgsgASgCDBAWCyABQRBqJAALdAEBfyMAQRBrIgEkACABIAA2AgggAUEYEBkiADYCBAJAIABFBEAgASgCCEEOQQAQFSABQQA2AgwMAQsgASgCBEEANgIAIAEoAgRCADcDCCABKAIEQQA2AhAgASABKAIENgIMCyABKAIMIQAgAUEQaiQAIAALnwEBAX8jAEEQayICIAA2AgwgAiABNgIIIAJBADYCBANAIAIoAgQgAigCDCgCREkEQCACKAIMKAJMIAIoAgRBAnRqKAIAIAIoAghGBEAgAigCDCgCTCACKAIEQQJ0aiACKAIMKAJMIAIoAgwoAkRBAWtBAnRqKAIANgIAIAIoAgwiACAAKAJEQX9qNgJEBSACIAIoAgRBAWo2AgQMAgsLCwtUAQF/IwBBEGsiASQAIAEgADYCDCABKAIMQQE6ACgCfyMAQRBrIgAgASgCDEEMajYCDCAAKAIMKAIARQsEQCABKAIMQQxqQQhBABAVCyABQRBqJAAL4QEBA38jAEEgayICJAAgAiAANgIYIAIgATYCFAJAIAIoAhgoAkRBAWogAigCGCgCSE8EQCACIAIoAhgoAkhBCmo2AgwgAiACKAIYKAJMIAIoAgxBAnQQTTYCECACKAIQRQRAIAIoAhhBCGpBDkEAEBUgAkF/NgIcDAILIAIoAhggAigCDDYCSCACKAIYIAIoAhA2AkwLIAIoAhQhASACKAIYKAJMIQMgAigCGCIEKAJEIQAgBCAAQQFqNgJEIABBAnQgA2ogATYCACACQQA2AhwLIAIoAhwhACACQSBqJAAgAAtAAQF/IwBBEGsiAiQAIAIgADYCDCACIAE2AgggAigCDCACKAIINgIsIAIoAgggAigCDBCEAyEAIAJBEGokACAAC7cJAQF/IwBB4MAAayIFJAAgBSAANgLUQCAFIAE2AtBAIAUgAjYCzEAgBSADNwPAQCAFIAQ2ArxAIAUgBSgC0EA2ArhAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAUoArxADhEDBAAGAQIFCQoKCgoKCggKBwoLIAVCADcD2EAMCgsgBSAFKAK4QEHkAGogBSgCzEAgBSkDwEAQQjcD2EAMCQsgBSgCuEAQFiAFQgA3A9hADAgLIAUoArhAKAIQBEAgBSAFKAK4QCgCECAFKAK4QCkDGCAFKAK4QEHkAGoQfyIDNwOYQCADUARAIAVCfzcD2EAMCQsgBSgCuEApAwggBSkDmEB8IAUoArhAKQMIVARAIAUoArhAQeQAakEVQQAQFSAFQn83A9hADAkLIAUoArhAIgAgBSkDmEAgACkDAHw3AwAgBSgCuEAiACAFKQOYQCAAKQMIfDcDCCAFKAK4QEEANgIQCyAFKAK4QC0AeEEBcUUEQCAFQgA3A6hAA0AgBSkDqEAgBSgCuEApAwBUBEAgBQJ+QoDAACAFKAK4QCkDACAFKQOoQH1CgMAAVg0AGiAFKAK4QCkDACAFKQOoQH0LNwOgQCAFIAUoAtRAIAVBEGogBSkDoEAQLyIDNwOwQCADQgBTBEAgBSgCuEBB5ABqIAUoAtRAEBggBUJ/NwPYQAwLCyAFKQOwQFAEQCAFKAK4QEHkAGpBEUEAEBUgBUJ/NwPYQAwLBSAFIAUpA7BAIAUpA6hAfDcDqEAMAgsACwsLIAUoArhAIAUoArhAKQMANwMgIAVCADcD2EAMBwsgBSkDwEAgBSgCuEApAwggBSgCuEApAyB9VgRAIAUgBSgCuEApAwggBSgCuEApAyB9NwPAQAsgBSkDwEBQBEAgBUIANwPYQAwHCyAFKAK4QC0AeEEBcQRAIAUoAtRAIAUoArhAKQMgQQAQKEEASARAIAUoArhAQeQAaiAFKALUQBAYIAVCfzcD2EAMCAsLIAUgBSgC1EAgBSgCzEAgBSkDwEAQLyIDNwOwQCADQgBTBEAgBSgCuEBB5ABqQRFBABAVIAVCfzcD2EAMBwsgBSgCuEAiACAFKQOwQCAAKQMgfDcDICAFKQOwQFAEQCAFKAK4QCkDICAFKAK4QCkDCFQEQCAFKAK4QEHkAGpBEUEAEBUgBUJ/NwPYQAwICwsgBSAFKQOwQDcD2EAMBgsgBSAFKAK4QCkDICAFKAK4QCkDAH0gBSgCuEApAwggBSgCuEApAwB9IAUoAsxAIAUpA8BAIAUoArhAQeQAahCNATcDCCAFKQMIQgBTBEAgBUJ/NwPYQAwGCyAFKAK4QCAFKQMIIAUoArhAKQMAfDcDICAFQgA3A9hADAULIAUgBSgCzEA2AgQgBSgCBCAFKAK4QEEoaiAFKAK4QEHkAGoQkQFBAEgEQCAFQn83A9hADAULIAVCADcD2EAMBAsgBSAFKAK4QCwAYKw3A9hADAMLIAUgBSgCuEApA3A3A9hADAILIAUgBSgCuEApAyAgBSgCuEApAwB9NwPYQAwBCyAFKAK4QEHkAGpBHEEAEBUgBUJ/NwPYQAsgBSkD2EAhAyAFQeDAAGokACADC1UBAX8jAEEgayIEJAAgBCAANgIcIAQgATYCGCAEIAI3AxAgBCADNwMIIAQoAhggBCkDECAEKQMIQQBBAEEAQgAgBCgCHEEIahB+IQAgBEEgaiQAIAALtAMBAX8jAEEwayIDJAAgAyAANgIkIAMgATcDGCADIAI2AhQgAyADKAIkIAMpAxggAygCFBB/IgE3AwgCQCABUARAIANCADcDKAwBCyADIAMoAiQoAkAgAykDGKdBBHRqKAIANgIEAkAgAykDCCADKAIEKQMgfCADKQMIWgRAIAMpAwggAygCBCkDIHxC////////////AFgNAQsgAygCFEEEQRYQFSADQgA3AygMAQsgAyADKAIEKQMgIAMpAwh8NwMIIAMoAgQvAQxBCHEEQCADKAIkKAIAIAMpAwhBABAoQQBIBEAgAygCFCADKAIkKAIAEBggA0IANwMoDAILIAMoAiQoAgAgA0IEEC9CBFIEQCADKAIUIAMoAiQoAgAQGCADQgA3AygMAgsgAygAAEHQlp3AAEYEQCADIAMpAwhCBHw3AwgLIAMgAykDCEIMfDcDCCADKAIEQQAQgAFBAXEEQCADIAMpAwhCCHw3AwgLIAMpAwhC////////////AFYEQCADKAIUQQRBFhAVIANCADcDKAwCCwsgAyADKQMINwMoCyADKQMoIQEgA0EwaiQAIAELBgBBtJwBC/8BAQF/IwBBEGsiAiQAIAIgADYCDCACIAE6AAsCQCACKAIMKAIQQQ5GBEAgAigCDEE/OwEKDAELIAIoAgwoAhBBDEYEQCACKAIMQS47AQoMAQsCQCACLQALQQFxRQRAIAIoAgxBABCAAUEBcUUNAQsgAigCDEEtOwEKDAELAkAgAigCDCgCEEEIRwRAIAIoAgwvAVJBAUcNAQsgAigCDEEUOwEKDAELIAIgAigCDCgCMBBSIgA7AQggAEH//wNxQQBKBEAgAigCDCgCMCgCACACLwEIQQFrai0AAEEvRgRAIAIoAgxBFDsBCgwCCwsgAigCDEEKOwEKCyACQRBqJAALwAIBAX8jAEEwayICJAAgAiAANgIoIAJBgAI7ASYgAiABNgIgIAIgAi8BJkGAAnFBAEc6ABsgAkEeQS4gAi0AG0EBcRs2AhwCQCACKAIoQRpBHCACLQAbQQFxG6xBARAoQQBIBEAgAigCICACKAIoEBggAkF/NgIsDAELIAIgAigCKEEEQQYgAi0AG0EBcRusIAJBDmogAigCIBBBIgA2AgggAEUEQCACQX82AiwMAQsgAkEANgIUA0AgAigCFEECQQMgAi0AG0EBcRtIBEAgAiACKAIIEB5B//8DcSACKAIcajYCHCACIAIoAhRBAWo2AhQMAQsLIAIoAggQSEEBcUUEQCACKAIgQRRBABAVIAIoAggQFyACQX82AiwMAQsgAigCCBAXIAIgAigCHDYCLAsgAigCLCEAIAJBMGokACAAC/8DAQF/IwBBIGsiAiQAIAIgADYCGCACIAE2AhQCQCACKAIYKAIQQeMARwRAIAJBAToAHwwBCyACIAIoAhgoAjQgAkESakGBsgJBgAZBABBfNgIIAkAgAigCCARAIAIvARJBB04NAQsgAigCFEEVQQAQFSACQQA6AB8MAQsgAiACKAIIIAIvARKtECoiADYCDCAARQRAIAIoAhRBFEEAEBUgAkEAOgAfDAELIAJBAToABwJAAkACQCACKAIMEB5Bf2oOAgIAAQsgAigCGCkDKEIUVARAIAJBADoABwsMAQsgAigCFEEYQQAQFSACKAIMEBcgAkEAOgAfDAELIAIoAgxCAhAfLwAAQcGKAUcEQCACKAIUQRhBABAVIAIoAgwQFyACQQA6AB8MAQsCQAJAAkACQAJAIAIoAgwQiwFBf2oOAwABAgMLIAJBgQI7AQQMAwsgAkGCAjsBBAwCCyACQYMCOwEEDAELIAIoAhRBGEEAEBUgAigCDBAXIAJBADoAHwwBCyACLwESQQdHBEAgAigCFEEVQQAQFSACKAIMEBcgAkEAOgAfDAELIAIoAhggAi0AB0EBcToABiACKAIYIAIvAQQ7AVIgAigCDBAeQf//A3EhACACKAIYIAA2AhAgAigCDBAXIAJBAToAHwsgAi0AH0EBcSEAIAJBIGokACAAC7kBAQF/IwBBMGsiAiQAIAIgADsBLiACIAE7ASwgAkIANwIAIAJBADYCKCACQgA3AiAgAkIANwIYIAJCADcCECACQgA3AgggAkEANgIgIAIgAi8BLEEJdUHQAGo2AhQgAiACLwEsQQV1QQ9xQQFrNgIQIAIgAi8BLEEfcTYCDCACIAIvAS5BC3U2AgggAiACLwEuQQV1QT9xNgIEIAIgAi8BLkEBdEE+cTYCACACEAwhACACQTBqJAAgAAtMAQJ/IwBBEGsiACQAIABB2AAQGSIBNgIIAkAgAUUEQCAAQQA2AgwMAQsgACgCCBBdIAAgACgCCDYCDAsgACgCDCEBIABBEGokACABCwcAIAAvATAL4AgBAX8jAEHAAWsiAyQAIAMgADYCtAEgAyABNgKwASADIAI3A6gBIAMgAygCtAEoAgAQNSICNwMgAkAgAkIAUwRAIAMoArQBQQhqIAMoArQBKAIAEBggA0J/NwO4AQwBCyADIAMpAyA3A6ABIANBADoAFyADQgA3AxgDQCADKQMYIAMpA6gBVARAIAMgAygCtAEoAkAgAygCsAEgAykDGKdBA3RqKQMAp0EEdGo2AgwgAyADKAK0AQJ/IAMoAgwoAgQEQCADKAIMKAIEDAELIAMoAgwoAgALQYAEEF4iADYCECAAQQBIBEAgA0J/NwO4AQwDCyADKAIQBEAgA0EBOgAXCyADIAMpAxhCAXw3AxgMAQsLIAMgAygCtAEoAgAQNSICNwMgIAJCAFMEQCADKAK0AUEIaiADKAK0ASgCABAYIANCfzcDuAEMAQsgAyADKQMgIAMpA6ABfTcDmAECQCADKQOgAUL/////D1gEQCADKQOoAUL//wNYDQELIANBAToAFwsgAyADQTBqQuIAECoiADYCLCAARQRAIAMoArQBQQhqQQ5BABAVIANCfzcDuAEMAQsgAy0AF0EBcQRAIAMoAixBttMAQQQQQCADKAIsQiwQLiADKAIsQS0QICADKAIsQS0QICADKAIsQQAQISADKAIsQQAQISADKAIsIAMpA6gBEC4gAygCLCADKQOoARAuIAMoAiwgAykDmAEQLiADKAIsIAMpA6ABEC4gAygCLEG70wBBBBBAIAMoAixBABAhIAMoAiwgAykDoAEgAykDmAF8EC4gAygCLEEBECELIAMoAixBwNMAQQQQQCADKAIsQQAQISADKAIsAn5C//8DIAMpA6gBQv//A1oNABogAykDqAELp0H//wNxECAgAygCLAJ+Qv//AyADKQOoAUL//wNaDQAaIAMpA6gBC6dB//8DcRAgIAMoAiwCf0F/IAMpA5gBQv////8PWg0AGiADKQOYAacLECEgAygCLAJ/QX8gAykDoAFC/////w9aDQAaIAMpA6ABpwsQISADAn8gAygCtAEtAChBAXEEQCADKAK0ASgCJAwBCyADKAK0ASgCIAs2ApQBIAMoAiwCfyADKAKUAQRAIAMoApQBLwEEDAELQQALQf//A3EQIAJ/IwBBEGsiACADKAIsNgIMIAAoAgwtAABBAXFFCwRAIAMoArQBQQhqQRRBABAVIAMoAiwQFyADQn83A7gBDAELIAMoArQBAn8jAEEQayIAIAMoAiw2AgwgACgCDCgCBAsCfiMAQRBrIgAgAygCLDYCDAJ+IAAoAgwtAABBAXEEQCAAKAIMKQMQDAELQgALCxA2QQBIBEAgAygCLBAXIANCfzcDuAEMAQsgAygCLBAXIAMoApQBBEAgAygCtAEgAygClAEoAgAgAygClAEvAQStEDZBAEgEQCADQn83A7gBDAILCyADIAMpA5gBNwO4AQsgAykDuAEhAiADQcABaiQAIAILBwAgACgCIAsIAEEBQTgQewsDAAELC/KNAScAQYAIC5QFTm8gZXJyb3IATXVsdGktZGlzayB6aXAgYXJjaGl2ZXMgbm90IHN1cHBvcnRlZABSZW5hbWluZyB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQAQ2xvc2luZyB6aXAgYXJjaGl2ZSBmYWlsZWQAU2VlayBlcnJvcgBSZWFkIGVycm9yAFdyaXRlIGVycm9yAENSQyBlcnJvcgBDb250YWluaW5nIHppcCBhcmNoaXZlIHdhcyBjbG9zZWQATm8gc3VjaCBmaWxlAEZpbGUgYWxyZWFkeSBleGlzdHMAQ2FuJ3Qgb3BlbiBmaWxlAEZhaWx1cmUgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlAFpsaWIgZXJyb3IATWFsbG9jIGZhaWx1cmUARW50cnkgaGFzIGJlZW4gY2hhbmdlZABDb21wcmVzc2lvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABQcmVtYXR1cmUgZW5kIG9mIGZpbGUASW52YWxpZCBhcmd1bWVudABOb3QgYSB6aXAgYXJjaGl2ZQBJbnRlcm5hbCBlcnJvcgBaaXAgYXJjaGl2ZSBpbmNvbnNpc3RlbnQAQ2FuJ3QgcmVtb3ZlIGZpbGUARW50cnkgaGFzIGJlZW4gZGVsZXRlZABFbmNyeXB0aW9uIG1ldGhvZCBub3Qgc3VwcG9ydGVkAFJlYWQtb25seSBhcmNoaXZlAE5vIHBhc3N3b3JkIHByb3ZpZGVkAFdyb25nIHBhc3N3b3JkIHByb3ZpZGVkAE9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkAFJlc291cmNlIHN0aWxsIGluIHVzZQBUZWxsIGVycm9yAENvbXByZXNzZWQgZGF0YSBpbnZhbGlkAEGhDQuAAQQAAAkEAAAvBAAATgQAAGkEAAB0BAAAfwQAAIsEAACVBAAAtwQAAMQEAADYBAAA6AQAAAkFAAAUBQAAIwUAADoFAABbBQAAcQUAAIIFAACUBQAAowUAALwFAADOBQAA5QUAAAUGAAAXBgAALAYAAEQGAABcBgAAcgYAAH0GAAAgAEG4DgsRAQAAAAEAAAABAAAAAQAAAAEAQdwOCwkBAAAAAQAAAAIAQYgPCwEBAEGoDwsB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CAAaAAgAmgAIAFoACADaAAgAOgAIALoACAB6AAgA+gAIAAYACACGAAgARgAIAMYACAAmAAgApgAIAGYACADmAAgAFgAIAJYACABWAAgA1gAIADYACAC2AAgAdgAIAPYACAAOAAgAjgAIAE4ACADOAAgALgAIAK4ACABuAAgA7gAIAB4ACACeAAgAXgAIAN4ACAA+AAgAvgAIAH4ACAD+AAgAAQAIAIEACABBAAgAwQAIACEACAChAAgAYQAIAOEACAARAAgAkQAIAFEACADRAAgAMQAIALEACABxAAgA8QAIAAkACACJAAgASQAIAMkACAApAAgAqQAIAGkACADpAAgAGQAIAJkACABZAAgA2QAIADkACAC5AAgAeQAIAPkACAAFAAgAhQAIAEUACADFAAgAJQAIAKUACABlAAgA5QAIABUACACVAAgAVQAIANUACAA1AAgAtQAIAHUACAD1AAgADQAIAI0ACABNAAgAzQAIAC0ACACtAAgAbQAIAO0ACAAdAAgAnQAIAF0ACADdAAgAPQAIAL0ACAB9AAgA/QAIABMACQATAQkAkwAJAJMBCQBTAAkAUwEJANMACQDTAQkAMwAJADMBCQCzAAkAswEJAHMACQBzAQkA8wAJAPMBCQALAAkACwEJAIsACQCLAQkASwAJAEsBCQDLAAkAywEJACsACQArAQkAqwAJAKsBCQBrAAkAawEJAOsACQDrAQkAGwAJABsBCQCbAAkAmwEJAFsACQBbAQkA2wAJANsBCQA7AAkAOwEJALsACQC7AQkAewAJAHsBCQD7AAkA+wEJAAcACQAHAQkAhwAJAIcBCQBHAAkARwEJAMcACQDHAQkAJwAJACcBCQCnAAkApwEJAGcACQBnAQkA5wAJAOcBCQAXAAkAFwEJAJcACQCXAQkAVwAJAFcBCQDXAAkA1wEJADcACQA3AQkAtwAJALcBCQB3AAkAdwEJAPcACQD3AQkADwAJAA8BCQCPAAkAjwEJAE8ACQBPAQkAzwAJAM8BCQAvAAkALwEJAK8ACQCvAQkAbwAJAG8BCQDvAAkA7wEJAB8ACQAfAQkAnwAJAJ8BCQBfAAkAXwEJAN8ACQDfAQkAPwAJAD8BCQC/AAkAvwEJAH8ACQB/AQkA/wAJAP8BCQAAAAcAQAAHACAABwBgAAcAEAAHAFAABwAwAAcAcAAHAAgABwBIAAcAKAAHAGgABwAYAAcAWAAHADgABwB4AAcABAAHAEQABwAkAAcAZAAHABQABwBUAAcANAAHAHQABwADAAgAgwAIAEMACADDAAgAIwAIAKMACABjAAgA4wAIAAAABQAQAAUACAAFABgABQAEAAUAFAAFAAwABQAcAAUAAgAFABIABQAKAAUAGgAFAAYABQAWAAUADgAFAB4ABQABAAUAEQAFAAkABQAZAAUABQAFABUABQANAAUAHQAFAAMABQATAAUACwAFABsABQAHAAUAFwAFAEHg5QALTQEAAAABAAAAAQAAAAEAAAACAAAAAgAAAAIAAAACAAAAAwAAAAMAAAADAAAAAwAAAAQAAAAEAAAABAAAAAQAAAAFAAAABQAAAAUAAAAFAEHQ5gALZQEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAEAAAABQAAAAUAAAAGAAAABgAAAAcAAAAHAAAACAAAAAgAAAAJAAAACQAAAAoAAAAKAAAACwAAAAsAAAAMAAAADAAAAA0AAAANAEGA6AALIwIAAAADAAAABwAAAAAAAAAQERIACAcJBgoFCwQMAw0CDgEPAEG06AALaQEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACgAAAAwAAAAOAAAAEAAAABQAAAAYAAAAHAAAACAAAAAoAAAAMAAAADgAAABAAAAAUAAAAGAAAABwAAAAgAAAAKAAAADAAAAA4ABBtOkAC3oBAAAAAgAAAAMAAAAEAAAABgAAAAgAAAAMAAAAEAAAABgAAAAgAAAAMAAAAEAAAABgAAAAgAAAAMAAAAAAAQAAgAEAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAADEuMi4xMQBBuOoAC20HAAAABAAEAAgABAAIAAAABAAFABAACAAIAAAABAAGACAAIAAIAAAABAAEABAAEAAJAAAACAAQACAAIAAJAAAACAAQAIAAgAAJAAAACAAgAIAAAAEJAAAAIACAAAIBAAQJAAAAIAACAQIBABAJAEGw6wAL1gIDAAQABQAGAAcACAAJAAoACwANAA8AEQATABcAGwAfACMAKwAzADsAQwBTAGMAcwCDAKMAwwDjAAIBAAAAAAAAEAAQABAAEAAQABAAEAAQABEAEQARABEAEgASABIAEgATABMAEwATABQAFAAUABQAFQAVABUAFQAQAE0AygAAAAEAAgADAAQABQAHAAkADQARABkAIQAxAEEAYQCBAMEAAQGBAQECAQMBBAEGAQgBDAEQARgBIAEwAUABYAAAAAAQABAAEAAQABEAEQASABIAEwATABQAFAAVABUAFgAWABcAFwAYABgAGQAZABoAGgAbABsAHAAcAB0AHQBAAEAAaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2sAaW52YWxpZCBkaXN0YW5jZSBjb2RlAGludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZQAxLjIuMTEAQZDuAAvyAxAAEQASAAAACAAHAAkABgAKAAUACwAEAAwAAwANAAIADgABAA8AaW5jb3JyZWN0IGhlYWRlciBjaGVjawB1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZABpbnZhbGlkIHdpbmRvdyBzaXplAHVua25vd24gaGVhZGVyIGZsYWdzIHNldABoZWFkZXIgY3JjIG1pc21hdGNoAGludmFsaWQgYmxvY2sgdHlwZQBpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzAHRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzAGludmFsaWQgY29kZSBsZW5ndGhzIHNldABpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0AGludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jawBpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQAaW52YWxpZCBkaXN0YW5jZXMgc2V0AGludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZQBpbnZhbGlkIGRpc3RhbmNlIGNvZGUAaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2sAaW5jb3JyZWN0IGRhdGEgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBBkPIAC5cRYAcAAAAIUAAACBAAFAhzABIHHwAACHAAAAgwAAAJwAAQBwoAAAhgAAAIIAAACaAAAAgAAAAIgAAACEAAAAngABAHBgAACFgAAAgYAAAJkAATBzsAAAh4AAAIOAAACdAAEQcRAAAIaAAACCgAAAmwAAAICAAACIgAAAhIAAAJ8AAQBwQAAAhUAAAIFAAVCOMAEwcrAAAIdAAACDQAAAnIABEHDQAACGQAAAgkAAAJqAAACAQAAAiEAAAIRAAACegAEAcIAAAIXAAACBwAAAmYABQHUwAACHwAAAg8AAAJ2AASBxcAAAhsAAAILAAACbgAAAgMAAAIjAAACEwAAAn4ABAHAwAACFIAAAgSABUIowATByMAAAhyAAAIMgAACcQAEQcLAAAIYgAACCIAAAmkAAAIAgAACIIAAAhCAAAJ5AAQBwcAAAhaAAAIGgAACZQAFAdDAAAIegAACDoAAAnUABIHEwAACGoAAAgqAAAJtAAACAoAAAiKAAAISgAACfQAEAcFAAAIVgAACBYAQAgAABMHMwAACHYAAAg2AAAJzAARBw8AAAhmAAAIJgAACawAAAgGAAAIhgAACEYAAAnsABAHCQAACF4AAAgeAAAJnAAUB2MAAAh+AAAIPgAACdwAEgcbAAAIbgAACC4AAAm8AAAIDgAACI4AAAhOAAAJ/ABgBwAAAAhRAAAIEQAVCIMAEgcfAAAIcQAACDEAAAnCABAHCgAACGEAAAghAAAJogAACAEAAAiBAAAIQQAACeIAEAcGAAAIWQAACBkAAAmSABMHOwAACHkAAAg5AAAJ0gARBxEAAAhpAAAIKQAACbIAAAgJAAAIiQAACEkAAAnyABAHBAAACFUAAAgVABAIAgETBysAAAh1AAAINQAACcoAEQcNAAAIZQAACCUAAAmqAAAIBQAACIUAAAhFAAAJ6gAQBwgAAAhdAAAIHQAACZoAFAdTAAAIfQAACD0AAAnaABIHFwAACG0AAAgtAAAJugAACA0AAAiNAAAITQAACfoAEAcDAAAIUwAACBMAFQjDABMHIwAACHMAAAgzAAAJxgARBwsAAAhjAAAIIwAACaYAAAgDAAAIgwAACEMAAAnmABAHBwAACFsAAAgbAAAJlgAUB0MAAAh7AAAIOwAACdYAEgcTAAAIawAACCsAAAm2AAAICwAACIsAAAhLAAAJ9gAQBwUAAAhXAAAIFwBACAAAEwczAAAIdwAACDcAAAnOABEHDwAACGcAAAgnAAAJrgAACAcAAAiHAAAIRwAACe4AEAcJAAAIXwAACB8AAAmeABQHYwAACH8AAAg/AAAJ3gASBxsAAAhvAAAILwAACb4AAAgPAAAIjwAACE8AAAn+AGAHAAAACFAAAAgQABQIcwASBx8AAAhwAAAIMAAACcEAEAcKAAAIYAAACCAAAAmhAAAIAAAACIAAAAhAAAAJ4QAQBwYAAAhYAAAIGAAACZEAEwc7AAAIeAAACDgAAAnRABEHEQAACGgAAAgoAAAJsQAACAgAAAiIAAAISAAACfEAEAcEAAAIVAAACBQAFQjjABMHKwAACHQAAAg0AAAJyQARBw0AAAhkAAAIJAAACakAAAgEAAAIhAAACEQAAAnpABAHCAAACFwAAAgcAAAJmQAUB1MAAAh8AAAIPAAACdkAEgcXAAAIbAAACCwAAAm5AAAIDAAACIwAAAhMAAAJ+QAQBwMAAAhSAAAIEgAVCKMAEwcjAAAIcgAACDIAAAnFABEHCwAACGIAAAgiAAAJpQAACAIAAAiCAAAIQgAACeUAEAcHAAAIWgAACBoAAAmVABQHQwAACHoAAAg6AAAJ1QASBxMAAAhqAAAIKgAACbUAAAgKAAAIigAACEoAAAn1ABAHBQAACFYAAAgWAEAIAAATBzMAAAh2AAAINgAACc0AEQcPAAAIZgAACCYAAAmtAAAIBgAACIYAAAhGAAAJ7QAQBwkAAAheAAAIHgAACZ0AFAdjAAAIfgAACD4AAAndABIHGwAACG4AAAguAAAJvQAACA4AAAiOAAAITgAACf0AYAcAAAAIUQAACBEAFQiDABIHHwAACHEAAAgxAAAJwwAQBwoAAAhhAAAIIQAACaMAAAgBAAAIgQAACEEAAAnjABAHBgAACFkAAAgZAAAJkwATBzsAAAh5AAAIOQAACdMAEQcRAAAIaQAACCkAAAmzAAAICQAACIkAAAhJAAAJ8wAQBwQAAAhVAAAIFQAQCAIBEwcrAAAIdQAACDUAAAnLABEHDQAACGUAAAglAAAJqwAACAUAAAiFAAAIRQAACesAEAcIAAAIXQAACB0AAAmbABQHUwAACH0AAAg9AAAJ2wASBxcAAAhtAAAILQAACbsAAAgNAAAIjQAACE0AAAn7ABAHAwAACFMAAAgTABUIwwATByMAAAhzAAAIMwAACccAEQcLAAAIYwAACCMAAAmnAAAIAwAACIMAAAhDAAAJ5wAQBwcAAAhbAAAIGwAACZcAFAdDAAAIewAACDsAAAnXABIHEwAACGsAAAgrAAAJtwAACAsAAAiLAAAISwAACfcAEAcFAAAIVwAACBcAQAgAABMHMwAACHcAAAg3AAAJzwARBw8AAAhnAAAIJwAACa8AAAgHAAAIhwAACEcAAAnvABAHCQAACF8AAAgfAAAJnwAUB2MAAAh/AAAIPwAACd8AEgcbAAAIbwAACC8AAAm/AAAIDwAACI8AAAhPAAAJ/wAQBQEAFwUBARMFEQAbBQEQEQUFABkFAQQVBUEAHQUBQBAFAwAYBQECFAUhABwFASASBQkAGgUBCBYFgQBABQAAEAUCABcFgQETBRkAGwUBGBEFBwAZBQEGFQVhAB0FAWAQBQQAGAUBAxQFMQAcBQEwEgUNABoFAQwWBcEAQAUAADEuMi4xMQAtKyAgIDBYMHgAKG51bGwpAEGwgwELQREACgAREREAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAEQAPChEREQMKBwABAAkLCwAACQYLAAALAAYRAAAAERERAEGBhAELIQsAAAAAAAAAABEACgoREREACgAAAgAJCwAAAAkACwAACwBBu4QBCwEMAEHHhAELFQwAAAAADAAAAAAJDAAAAAAADAAADABB9YQBCwEOAEGBhQELFQ0AAAAEDQAAAAAJDgAAAAAADgAADgBBr4UBCwEQAEG7hQELHg8AAAAADwAAAAAJEAAAAAAAEAAAEAAAEgAAABISEgBB8oUBCw4SAAAAEhISAAAAAAAACQBBo4YBCwELAEGvhgELFQoAAAAACgAAAAAJCwAAAAAACwAACwBB3YYBCwEMAEHphgELSwwAAAAADAAAAAAJDAAAAAAADAAADAAAMDEyMzQ1Njc4OUFCQ0RFRi0wWCswWCAwWC0weCsweCAweABpbmYASU5GAG5hbgBOQU4ALgBB3IcBCwEXAEGDiAELBf//////AEHQiAELVxkSRDsCPyxHFD0zMAobBkZLRTcPSQ6OFwNAHTxpKzYfSi0cASAlKSEIDBUWIi4QOD4LNDEYZHR1di9BCX85ESNDMkKJiosFBCYoJw0qHjWMBxpIkxOUlQBBsIkBC90OSWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAFVua25vd24gZXJyb3IgJWQAJXMlcyVzAAA6IAAvcHJvYy9zZWxmL2ZkLwAvZGV2L3VyYW5kb20AcndhACVzLlhYWFhYWAByK2IAcmIAUEsFBgBBkJgBC04KAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAAQAAAAgAAAAQTAAAMEwAQZCaAQsCgFAAQciaAQsJHwAAAGRNAAADAEHkmgELjAEt9FFYz4yxwEb2tcspMQPHBFtwMLRd/SB4f4ua2FkpUGhIiaunVgNs/7fNiD/Ud7QrpaNw8brkqPxBg/3Zb+GKei8tdJYHHw0JXgN2LHD3QKUsp29XQaiqdN+gWGQDSsfEPFOur18YBBWx420ohqsMpL9D8OlQgTlXFlI3/////////////////////w==";function Ae(e){for(;e.length>0;){var t=e.shift();if("function"!=typeof t){var r=t.func;"number"==typeof r?void 0===t.arg?f.get(r)():f.get(r)(t.arg):r(void 0===t.arg?null:t.arg)}else t(o)}}function ne(){var e=function(){var e=new Error;if(!e.stack){try{throw new Error}catch(t){e=t}if(!e.stack)return"(no stack trace available)"}return e.stack.toString()}();return o.extraStackTrace&&(e+="\n"+o.extraStackTrace()),e.replace(/\b_Z[\w\d_]+/g,(function(e){return e==e?e:e+" ["+e+"]"}))}function oe(e,t){var r=new Date(1e3*M[e>>2]);M[t>>2]=r.getUTCSeconds(),M[t+4>>2]=r.getUTCMinutes(),M[t+8>>2]=r.getUTCHours(),M[t+12>>2]=r.getUTCDate(),M[t+16>>2]=r.getUTCMonth(),M[t+20>>2]=r.getUTCFullYear()-1900,M[t+24>>2]=r.getUTCDay(),M[t+36>>2]=0,M[t+32>>2]=0;var A=Date.UTC(r.getUTCFullYear(),0,1,0,0,0,0),n=(r.getTime()-A)/864e5|0;return M[t+28>>2]=n,oe.GMTString||(oe.GMTString=S("GMT")),M[t+40>>2]=oe.GMTString,t}Z(re)||($=re,re=o.locateFile?o.locateFile($,u):u+$),U.push({func:function(){Se()}});var ie={splitPath:function(e){return/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(e).slice(1)},normalizeArray:function(e,t){for(var r=0,A=e.length-1;A>=0;A--){var n=e[A];"."===n?e.splice(A,1):".."===n?(e.splice(A,1),r++):r&&(e.splice(A,1),r--)}if(t)for(;r;r--)e.unshift("..");return e},normalize:function(e){var t="/"===e.charAt(0),r="/"===e.substr(-1);return(e=ie.normalizeArray(e.split("/").filter((function(e){return!!e})),!t).join("/"))||t||(e="."),e&&r&&(e+="/"),(t?"/":"")+e},dirname:function(e){var t=ie.splitPath(e),r=t[0],A=t[1];return r||A?(A&&(A=A.substr(0,A.length-1)),r+A):"."},basename:function(e){if("/"===e)return"/";var t=(e=(e=ie.normalize(e)).replace(/\/$/,"")).lastIndexOf("/");return-1===t?e:e.substr(t+1)},extname:function(e){return ie.splitPath(e)[3]},join:function(){var e=Array.prototype.slice.call(arguments,0);return ie.normalize(e.join("/"))},join2:function(e,t){return ie.normalize(e+"/"+t)}};function se(e){return M[ke()>>2]=e,e}var ae={resolve:function(){for(var e="",t=!1,r=arguments.length-1;r>=-1&&!t;r--){var A=r>=0?arguments[r]:pe.cwd();if("string"!=typeof A)throw new TypeError("Arguments to path.resolve must be strings");if(!A)return"";e=A+"/"+e,t="/"===A.charAt(0)}return(t?"/":"")+(e=ie.normalizeArray(e.split("/").filter((function(e){return!!e})),!t).join("/"))||"."},relative:function(e,t){function r(e){for(var t=0;t=0&&""===e[r];r--);return t>r?[]:e.slice(t,r-t+1)}e=ae.resolve(e).substr(1),t=ae.resolve(t).substr(1);for(var A=r(e.split("/")),n=r(t.split("/")),o=Math.min(A.length,n.length),i=o,s=0;s0?r.slice(0,A).toString("utf-8"):null))return null;e.input=we(t,!0)}return e.input.shift()},put_char:function(e,t){null===t||10===t?(h(w(e.output,0)),e.output=[]):0!=t&&e.output.push(t)},flush:function(e){e.output&&e.output.length>0&&(h(w(e.output,0)),e.output=[])}},default_tty1_ops:{put_char:function(e,t){null===t||10===t?(p(w(e.output,0)),e.output=[]):0!=t&&e.output.push(t)},flush:function(e){e.output&&e.output.length>0&&(p(w(e.output,0)),e.output=[])}}},ge={ops_table:null,mount:function(e){return ge.createNode(null,"/",16895,0)},createNode:function(e,t,r,A){if(pe.isBlkdev(r)||pe.isFIFO(r))throw new pe.ErrnoError(63);ge.ops_table||(ge.ops_table={dir:{node:{getattr:ge.node_ops.getattr,setattr:ge.node_ops.setattr,lookup:ge.node_ops.lookup,mknod:ge.node_ops.mknod,rename:ge.node_ops.rename,unlink:ge.node_ops.unlink,rmdir:ge.node_ops.rmdir,readdir:ge.node_ops.readdir,symlink:ge.node_ops.symlink},stream:{llseek:ge.stream_ops.llseek}},file:{node:{getattr:ge.node_ops.getattr,setattr:ge.node_ops.setattr},stream:{llseek:ge.stream_ops.llseek,read:ge.stream_ops.read,write:ge.stream_ops.write,allocate:ge.stream_ops.allocate,mmap:ge.stream_ops.mmap,msync:ge.stream_ops.msync}},link:{node:{getattr:ge.node_ops.getattr,setattr:ge.node_ops.setattr,readlink:ge.node_ops.readlink},stream:{}},chrdev:{node:{getattr:ge.node_ops.getattr,setattr:ge.node_ops.setattr},stream:pe.chrdev_stream_ops}});var n=pe.createNode(e,t,r,A);return pe.isDir(n.mode)?(n.node_ops=ge.ops_table.dir.node,n.stream_ops=ge.ops_table.dir.stream,n.contents={}):pe.isFile(n.mode)?(n.node_ops=ge.ops_table.file.node,n.stream_ops=ge.ops_table.file.stream,n.usedBytes=0,n.contents=null):pe.isLink(n.mode)?(n.node_ops=ge.ops_table.link.node,n.stream_ops=ge.ops_table.link.stream):pe.isChrdev(n.mode)&&(n.node_ops=ge.ops_table.chrdev.node,n.stream_ops=ge.ops_table.chrdev.stream),n.timestamp=Date.now(),e&&(e.contents[t]=n),n},getFileDataAsRegularArray:function(e){if(e.contents&&e.contents.subarray){for(var t=[],r=0;r=t)){t=Math.max(t,r*(r<1048576?2:1.125)>>>0),0!=r&&(t=Math.max(t,256));var A=e.contents;e.contents=new Uint8Array(t),e.usedBytes>0&&e.contents.set(A.subarray(0,e.usedBytes),0)}},resizeFileStorage:function(e,t){if(e.usedBytes!=t){if(0==t)return e.contents=null,void(e.usedBytes=0);if(!e.contents||e.contents.subarray){var r=e.contents;return e.contents=new Uint8Array(t),r&&e.contents.set(r.subarray(0,Math.min(t,e.usedBytes))),void(e.usedBytes=t)}if(e.contents||(e.contents=[]),e.contents.length>t)e.contents.length=t;else for(;e.contents.length=e.node.usedBytes)return 0;var i=Math.min(e.node.usedBytes-n,A);if(i>8&&o.subarray)t.set(o.subarray(n,n+i),r);else for(var s=0;s0||A+r>2)}catch(e){if(!e.code)throw e;throw new pe.ErrnoError(ue.convertNodeCode(e))}return t.mode},realPath:function(e){for(var t=[];e.parent!==e;)t.push(e.name),e=e.parent;return t.push(e.mount.opts.root),t.reverse(),ie.join.apply(null,t)},flagsForNode:function(e){e&=-2097153,e&=-2049,e&=-32769,e&=-524289;var t=0;for(var r in ue.flagsForNodeMap)e&r&&(t|=ue.flagsForNodeMap[r],e^=r);if(e)throw new pe.ErrnoError(28);return t},node_ops:{getattr:function(e){var t,r=ue.realPath(e);try{t=Ie.lstatSync(r)}catch(e){if(!e.code)throw e;throw new pe.ErrnoError(ue.convertNodeCode(e))}return ue.isWindows&&!t.blksize&&(t.blksize=4096),ue.isWindows&&!t.blocks&&(t.blocks=(t.size+t.blksize-1)/t.blksize|0),{dev:t.dev,ino:t.ino,mode:t.mode,nlink:t.nlink,uid:t.uid,gid:t.gid,rdev:t.rdev,size:t.size,atime:t.atime,mtime:t.mtime,ctime:t.ctime,blksize:t.blksize,blocks:t.blocks}},setattr:function(e,t){var r=ue.realPath(e);try{if(void 0!==t.mode&&(Ie.chmodSync(r,t.mode),e.mode=t.mode),void 0!==t.timestamp){var A=new Date(t.timestamp);Ie.utimesSync(r,A,A)}void 0!==t.size&&Ie.truncateSync(r,t.size)}catch(e){if(!e.code)throw e;throw new pe.ErrnoError(ue.convertNodeCode(e))}},lookup:function(e,t){var r=ie.join2(ue.realPath(e),t),A=ue.getMode(r);return ue.createNode(e,t,A)},mknod:function(e,t,r,A){var n=ue.createNode(e,t,r,A),o=ue.realPath(n);try{pe.isDir(n.mode)?Ie.mkdirSync(o,n.mode):Ie.writeFileSync(o,"",{mode:n.mode})}catch(e){if(!e.code)throw e;throw new pe.ErrnoError(ue.convertNodeCode(e))}return n},rename:function(e,t,r){var A=ue.realPath(e),n=ie.join2(ue.realPath(t),r);try{Ie.renameSync(A,n)}catch(e){if(!e.code)throw e;throw new pe.ErrnoError(ue.convertNodeCode(e))}e.name=r},unlink:function(e,t){var r=ie.join2(ue.realPath(e),t);try{Ie.unlinkSync(r)}catch(e){if(!e.code)throw e;throw new pe.ErrnoError(ue.convertNodeCode(e))}},rmdir:function(e,t){var r=ie.join2(ue.realPath(e),t);try{Ie.rmdirSync(r)}catch(e){if(!e.code)throw e;throw new pe.ErrnoError(ue.convertNodeCode(e))}},readdir:function(e){var t=ue.realPath(e);try{return Ie.readdirSync(t)}catch(e){if(!e.code)throw e;throw new pe.ErrnoError(ue.convertNodeCode(e))}},symlink:function(e,t,r){var A=ie.join2(ue.realPath(e),t);try{Ie.symlinkSync(r,A)}catch(e){if(!e.code)throw e;throw new pe.ErrnoError(ue.convertNodeCode(e))}},readlink:function(e){var t=ue.realPath(e);try{return t=Ie.readlinkSync(t),t=Ee.relative(Ee.resolve(e.mount.opts.root),t)}catch(e){if(!e.code)throw e;throw new pe.ErrnoError(ue.convertNodeCode(e))}}},stream_ops:{open:function(e){var t=ue.realPath(e.node);try{pe.isFile(e.node.mode)&&(e.nfd=Ie.openSync(t,ue.flagsForNode(e.flags)))}catch(e){if(!e.code)throw e;throw new pe.ErrnoError(ue.convertNodeCode(e))}},close:function(e){try{pe.isFile(e.node.mode)&&e.nfd&&Ie.closeSync(e.nfd)}catch(e){if(!e.code)throw e;throw new pe.ErrnoError(ue.convertNodeCode(e))}},read:function(e,t,r,A,n){if(0===A)return 0;try{return Ie.readSync(e.nfd,ue.bufferFrom(t.buffer),r,A,n)}catch(e){throw new pe.ErrnoError(ue.convertNodeCode(e))}},write:function(e,t,r,A,n){try{return Ie.writeSync(e.nfd,ue.bufferFrom(t.buffer),r,A,n)}catch(e){throw new pe.ErrnoError(ue.convertNodeCode(e))}},llseek:function(e,t,r){var A=t;if(1===r)A+=e.position;else if(2===r&&pe.isFile(e.node.mode))try{A+=Ie.fstatSync(e.nfd).size}catch(e){throw new pe.ErrnoError(ue.convertNodeCode(e))}if(A<0)throw new pe.ErrnoError(28);return A},mmap:function(e,t,r,A,n,o){if(E(0===t),!pe.isFile(e.node.mode))throw new pe.ErrnoError(43);var i=pe.mmapAlloc(r);return ue.stream_ops.read(e,N,i,r,A),{ptr:i,allocated:!0}},msync:function(e,t,r,A,n){if(!pe.isFile(e.node.mode))throw new pe.ErrnoError(43);if(2&n)return 0;ue.stream_ops.write(e,t,0,A,r,!1);return 0}}},he={lookupPath:function(e){return{path:e,node:{mode:ue.getMode(e)}}},createStandardStreams:function(){pe.streams[0]={fd:0,nfd:0,position:0,path:"",flags:0,tty:!0,seekable:!1};for(var e=1;e<3;e++)pe.streams[e]={fd:e,nfd:e,position:0,path:"",flags:577,tty:!0,seekable:!1}},cwd:function(){return process.cwd()},chdir:function(){process.chdir.apply(void 0,arguments)},mknod:function(e,t){pe.isDir(e)?Ie.mkdirSync(e,t):Ie.writeFileSync(e,"",{mode:t})},mkdir:function(){Ie.mkdirSync.apply(void 0,arguments)},symlink:function(){Ie.symlinkSync.apply(void 0,arguments)},rename:function(){Ie.renameSync.apply(void 0,arguments)},rmdir:function(){Ie.rmdirSync.apply(void 0,arguments)},readdir:function(){Ie.readdirSync.apply(void 0,arguments)},unlink:function(){Ie.unlinkSync.apply(void 0,arguments)},readlink:function(){return Ie.readlinkSync.apply(void 0,arguments)},stat:function(){return Ie.statSync.apply(void 0,arguments)},lstat:function(){return Ie.lstatSync.apply(void 0,arguments)},chmod:function(){Ie.chmodSync.apply(void 0,arguments)},fchmod:function(){Ie.fchmodSync.apply(void 0,arguments)},chown:function(){Ie.chownSync.apply(void 0,arguments)},fchown:function(){Ie.fchownSync.apply(void 0,arguments)},truncate:function(){Ie.truncateSync.apply(void 0,arguments)},ftruncate:function(){Ie.ftruncateSync.apply(void 0,arguments)},utime:function(){Ie.utimesSync.apply(void 0,arguments)},open:function(e,t,r,A){"string"==typeof t&&(t=ye.modeStringToFlags(t));var n=Ie.openSync(e,ue.flagsForNode(t),r),o=null!=A?A:pe.nextfd(n),i={fd:o,nfd:n,position:0,path:e,flags:t,seekable:!0};return pe.streams[o]=i,i},close:function(e){e.stream_ops||Ie.closeSync(e.nfd),pe.closeStream(e.fd)},llseek:function(e,t,r){if(e.stream_ops)return ye.llseek(e,t,r);var A=t;if(1===r)A+=e.position;else if(2===r)A+=Ie.fstatSync(e.nfd).size;else if(0!==r)throw new pe.ErrnoError(le.EINVAL);if(A<0)throw new pe.ErrnoError(le.EINVAL);return e.position=A,A},read:function(e,t,r,A,n){if(e.stream_ops)return ye.read(e,t,r,A,n);var o=void 0!==n;!o&&e.seekable&&(n=e.position);var i=Ie.readSync(e.nfd,ue.bufferFrom(t.buffer),r,A,n);return o||(e.position+=i),i},write:function(e,t,r,A,n){if(e.stream_ops)return ye.write(e,t,r,A,n);1024&e.flags&&pe.llseek(e,0,2);var o=void 0!==n;!o&&e.seekable&&(n=e.position);var i=Ie.writeSync(e.nfd,ue.bufferFrom(t.buffer),r,A,n);return o||(e.position+=i),i},allocate:function(){throw new pe.ErrnoError(le.EOPNOTSUPP)},mmap:function(){throw new pe.ErrnoError(le.ENODEV)},msync:function(){return 0},munmap:function(){return 0},ioctl:function(){throw new pe.ErrnoError(le.ENOTTY)}},pe={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof pe.ErrnoError))throw e+" : "+ne();return se(e.errno)},lookupPath:function(e,t){if(t=t||{},!(e=ae.resolve(pe.cwd(),e)))return{path:"",node:null};var r={follow_mount:!0,recurse_count:0};for(var A in r)void 0===t[A]&&(t[A]=r[A]);if(t.recurse_count>8)throw new pe.ErrnoError(32);for(var n=ie.normalizeArray(e.split("/").filter((function(e){return!!e})),!1),o=pe.root,i="/",s=0;s40)throw new pe.ErrnoError(32)}}return{path:i,node:o}},getPath:function(e){for(var t;;){if(pe.isRoot(e)){var r=e.mount.mountpoint;return t?"/"!==r[r.length-1]?r+"/"+t:r+t:r}t=t?e.name+"/"+t:e.name,e=e.parent}},hashName:function(e,t){for(var r=0,A=0;A>>0)%pe.nameTable.length},hashAddNode:function(e){var t=pe.hashName(e.parent.id,e.name);e.name_next=pe.nameTable[t],pe.nameTable[t]=e},hashRemoveNode:function(e){var t=pe.hashName(e.parent.id,e.name);if(pe.nameTable[t]===e)pe.nameTable[t]=e.name_next;else for(var r=pe.nameTable[t];r;){if(r.name_next===e){r.name_next=e.name_next;break}r=r.name_next}},lookupNode:function(e,t){var r=pe.mayLookup(e);if(r)throw new pe.ErrnoError(r,e);for(var A=pe.hashName(e.id,t),n=pe.nameTable[A];n;n=n.name_next){var o=n.name;if(n.parent.id===e.id&&o===t)return n}return pe.lookup(e,t)},createNode:function(e,t,r,A){var n=new pe.FSNode(e,t,r,A);return pe.hashAddNode(n),n},destroyNode:function(e){pe.hashRemoveNode(e)},isRoot:function(e){return e===e.parent},isMountpoint:function(e){return!!e.mounted},isFile:function(e){return 32768==(61440&e)},isDir:function(e){return 16384==(61440&e)},isLink:function(e){return 40960==(61440&e)},isChrdev:function(e){return 8192==(61440&e)},isBlkdev:function(e){return 24576==(61440&e)},isFIFO:function(e){return 4096==(61440&e)},isSocket:function(e){return 49152==(49152&e)},flagModes:{r:0,rs:1052672,"r+":2,w:577,wx:705,xw:705,"w+":578,"wx+":706,"xw+":706,a:1089,ax:1217,xa:1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(e){var t=pe.flagModes[e];if(void 0===t)throw new Error("Unknown file open mode: "+e);return t},flagsToPermissionString:function(e){var t=["r","w","rw"][3&e];return 512&e&&(t+="w"),t},nodePermissions:function(e,t){return pe.ignorePermissions||(-1===t.indexOf("r")||292&e.mode)&&(-1===t.indexOf("w")||146&e.mode)&&(-1===t.indexOf("x")||73&e.mode)?0:2},mayLookup:function(e){var t=pe.nodePermissions(e,"x");return t||(e.node_ops.lookup?0:2)},mayCreate:function(e,t){try{pe.lookupNode(e,t);return 20}catch(e){}return pe.nodePermissions(e,"wx")},mayDelete:function(e,t,r){var A;try{A=pe.lookupNode(e,t)}catch(e){return e.errno}var n=pe.nodePermissions(e,"wx");if(n)return n;if(r){if(!pe.isDir(A.mode))return 54;if(pe.isRoot(A)||pe.getPath(A)===pe.cwd())return 10}else if(pe.isDir(A.mode))return 31;return 0},mayOpen:function(e,t){return e?pe.isLink(e.mode)?32:pe.isDir(e.mode)&&("r"!==pe.flagsToPermissionString(t)||512&t)?31:pe.nodePermissions(e,pe.flagsToPermissionString(t)):44},MAX_OPEN_FDS:4096,nextfd:function(e,t){e=e||0,t=t||pe.MAX_OPEN_FDS;for(var r=e;r<=t;r++)if(!pe.streams[r])return r;throw new pe.ErrnoError(33)},getStream:function(e){return pe.streams[e]},createStream:function(e,t,r){pe.FSStream||(pe.FSStream=function(){},pe.FSStream.prototype={object:{get:function(){return this.node},set:function(e){this.node=e}},isRead:{get:function(){return 1!=(2097155&this.flags)}},isWrite:{get:function(){return 0!=(2097155&this.flags)}},isAppend:{get:function(){return 1024&this.flags}}});var A=new pe.FSStream;for(var n in e)A[n]=e[n];e=A;var o=pe.nextfd(t,r);return e.fd=o,pe.streams[o]=e,e},closeStream:function(e){pe.streams[e]=null},chrdev_stream_ops:{open:function(e){var t=pe.getDevice(e.node.rdev);e.stream_ops=t.stream_ops,e.stream_ops.open&&e.stream_ops.open(e)},llseek:function(){throw new pe.ErrnoError(70)}},major:function(e){return e>>8},minor:function(e){return 255&e},makedev:function(e,t){return e<<8|t},registerDevice:function(e,t){pe.devices[e]={stream_ops:t}},getDevice:function(e){return pe.devices[e]},getMounts:function(e){for(var t=[],r=[e];r.length;){var A=r.pop();t.push(A),r.push.apply(r,A.mounts)}return t},syncfs:function(e,t){"function"==typeof e&&(t=e,e=!1),pe.syncFSRequests++,pe.syncFSRequests>1&&p("warning: "+pe.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work");var r=pe.getMounts(pe.root.mount),A=0;function n(e){return pe.syncFSRequests--,t(e)}function o(e){if(e)return o.errored?void 0:(o.errored=!0,n(e));++A>=r.length&&n(null)}r.forEach((function(t){if(!t.type.syncfs)return o(null);t.type.syncfs(t,e,o)}))},mount:function(e,t,r){var A,n="/"===r,o=!r;if(n&&pe.root)throw new pe.ErrnoError(10);if(!n&&!o){var i=pe.lookupPath(r,{follow_mount:!1});if(r=i.path,A=i.node,pe.isMountpoint(A))throw new pe.ErrnoError(10);if(!pe.isDir(A.mode))throw new pe.ErrnoError(54)}var s={type:e,opts:t,mountpoint:r,mounts:[]},a=e.mount(s);return a.mount=s,s.root=a,n?pe.root=a:A&&(A.mounted=s,A.mount&&A.mount.mounts.push(s)),a},unmount:function(e){var t=pe.lookupPath(e,{follow_mount:!1});if(!pe.isMountpoint(t.node))throw new pe.ErrnoError(28);var r=t.node,A=r.mounted,n=pe.getMounts(A);Object.keys(pe.nameTable).forEach((function(e){for(var t=pe.nameTable[e];t;){var r=t.name_next;-1!==n.indexOf(t.mount)&&pe.destroyNode(t),t=r}})),r.mounted=null;var o=r.mount.mounts.indexOf(A);r.mount.mounts.splice(o,1)},lookup:function(e,t){return e.node_ops.lookup(e,t)},mknod:function(e,t,r){var A=pe.lookupPath(e,{parent:!0}).node,n=ie.basename(e);if(!n||"."===n||".."===n)throw new pe.ErrnoError(28);var o=pe.mayCreate(A,n);if(o)throw new pe.ErrnoError(o);if(!A.node_ops.mknod)throw new pe.ErrnoError(63);return A.node_ops.mknod(A,n,t,r)},create:function(e,t){return t=void 0!==t?t:438,t&=4095,t|=32768,pe.mknod(e,t,0)},mkdir:function(e,t){return t=void 0!==t?t:511,t&=1023,t|=16384,pe.mknod(e,t,0)},mkdirTree:function(e,t){for(var r=e.split("/"),A="",n=0;nthis.length-1||e<0)){var t=e%this.chunkSize,r=e/this.chunkSize|0;return this.getter(r)[t]}},o.prototype.setDataGetter=function(e){this.getter=e},o.prototype.cacheLength=function(){var e=new XMLHttpRequest;if(e.open("HEAD",r,!1),e.send(null),!(e.status>=200&&e.status<300||304===e.status))throw new Error("Couldn't load "+r+". Status: "+e.status);var t,A=Number(e.getResponseHeader("Content-length")),n=(t=e.getResponseHeader("Accept-Ranges"))&&"bytes"===t,o=(t=e.getResponseHeader("Content-Encoding"))&&"gzip"===t,i=1048576;n||(i=A);var s=this;s.setDataGetter((function(e){var t=e*i,n=(e+1)*i-1;if(n=Math.min(n,A-1),void 0===s.chunks[e]&&(s.chunks[e]=function(e,t){if(e>t)throw new Error("invalid range ("+e+", "+t+") or no bytes requested!");if(t>A-1)throw new Error("only "+A+" bytes available! programmer error!");var n=new XMLHttpRequest;if(n.open("GET",r,!1),A!==i&&n.setRequestHeader("Range","bytes="+e+"-"+t),"undefined"!=typeof Uint8Array&&(n.responseType="arraybuffer"),n.overrideMimeType&&n.overrideMimeType("text/plain; charset=x-user-defined"),n.send(null),!(n.status>=200&&n.status<300||304===n.status))throw new Error("Couldn't load "+r+". Status: "+n.status);return void 0!==n.response?new Uint8Array(n.response||[]):we(n.responseText||"",!0)}(t,n)),void 0===s.chunks[e])throw new Error("doXHR failed!");return s.chunks[e]})),!o&&A||(i=A=1,A=this.getter(0).length,i=A,h("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=A,this._chunkSize=i,this.lengthKnown=!0},"undefined"!=typeof XMLHttpRequest)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var i={isDevice:!1,url:r},s=pe.createFile(e,t,i,A,n);i.contents?s.contents=i.contents:i.url&&(s.contents=null,s.url=i.url),Object.defineProperties(s,{usedBytes:{get:function(){return this.contents.length}}});var a={};return Object.keys(s.stream_ops).forEach((function(e){var t=s.stream_ops[e];a[e]=function(){if(!pe.forceLoadFile(s))throw new pe.ErrnoError(29);return t.apply(null,arguments)}})),a.read=function(e,t,r,A,n){if(!pe.forceLoadFile(s))throw new pe.ErrnoError(29);var o=e.node.contents;if(n>=o.length)return 0;var i=Math.min(o.length-n,A);if(o.slice)for(var a=0;a>2]=A.dev,M[r+4>>2]=0,M[r+8>>2]=A.ino,M[r+12>>2]=A.mode,M[r+16>>2]=A.nlink,M[r+20>>2]=A.uid,M[r+24>>2]=A.gid,M[r+28>>2]=A.rdev,M[r+32>>2]=0,te=[A.size>>>0,(ee=A.size,+Y(ee)>=1?ee>0?(0|J(+H(ee/4294967296),4294967295))>>>0:~~+G((ee-+(~~ee>>>0))/4294967296)>>>0:0)],M[r+40>>2]=te[0],M[r+44>>2]=te[1],M[r+48>>2]=4096,M[r+52>>2]=A.blocks,M[r+56>>2]=A.atime.getTime()/1e3|0,M[r+60>>2]=0,M[r+64>>2]=A.mtime.getTime()/1e3|0,M[r+68>>2]=0,M[r+72>>2]=A.ctime.getTime()/1e3|0,M[r+76>>2]=0,te=[A.ino>>>0,(ee=A.ino,+Y(ee)>=1?ee>0?(0|J(+H(ee/4294967296),4294967295))>>>0:~~+G((ee-+(~~ee>>>0))/4294967296)>>>0:0)],M[r+80>>2]=te[0],M[r+84>>2]=te[1],0},doMsync:function(e,t,r,A,n){var o=F.slice(e,e+r);pe.msync(t,o,n,r,A)},doMkdir:function(e,t){return"/"===(e=ie.normalize(e))[e.length-1]&&(e=e.substr(0,e.length-1)),pe.mkdir(e,t,0),0},doMknod:function(e,t,r){switch(61440&t){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return pe.mknod(e,t,r),0},doReadlink:function(e,t,r){if(r<=0)return-28;var A=pe.readlink(e),n=Math.min(r,v(A)),o=N[t+n];return b(A,t,r+1),N[t+n]=o,n},doAccess:function(e,t){if(-8&t)return-28;var r;if(!(r=pe.lookupPath(e,{follow:!0}).node))return-44;var A="";return 4&t&&(A+="r"),2&t&&(A+="w"),1&t&&(A+="x"),A&&pe.nodePermissions(r,A)?-2:0},doDup:function(e,t,r){var A=pe.getStream(r);return A&&pe.close(A),pe.open(e,t,0,r,r).fd},doReadv:function(e,t,r,A){for(var n=0,o=0;o>2],s=M[t+(8*o+4)>>2],a=pe.read(e,N,i,s,A);if(a<0)return-1;if(n+=a,a>2],s=M[t+(8*o+4)>>2],a=pe.write(e,N,i,s,A);if(a<0)return-1;n+=a}return n},varargs:void 0,get:function(){return de.varargs+=4,M[de.varargs-4>>2]},getStr:function(e){return Q(e)},getStreamFromFD:function(e){var t=pe.getStream(e);if(!t)throw new pe.ErrnoError(8);return t},get64:function(e,t){return e}};function Ce(e){try{return C.grow(e-k.byteLength+65535>>>16),L(C.buffer),1}catch(e){}}var fe=function(e,t,r,A){e||(e=this),this.parent=e,this.mount=e.mount,this.mounted=null,this.id=pe.nextInode++,this.name=t,this.mode=r,this.node_ops={},this.stream_ops={},this.rdev=A};Object.defineProperties(fe.prototype,{read:{get:function(){return 365==(365&this.mode)},set:function(e){e?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146==(146&this.mode)},set:function(e){e?this.mode|=146:this.mode&=-147}},isFolder:{get:function(){return pe.isDir(this.mode)}},isDevice:{get:function(){return pe.isChrdev(this.mode)}}}),pe.FSNode=fe,pe.staticInit();var Ie=n,Ee=r(85622);ue.staticInit();var Be=function(e){return function(){try{return e.apply(this,arguments)}catch(e){if(!e.code)throw e;throw new pe.ErrnoError(le[e.code])}}},ye=Object.assign({},pe);for(var me in he)pe[me]=Be(he[me]);function we(e,t,r){var A=r>0?r:v(e)+1,n=new Array(A),o=D(e,n,0,n.length);return t&&(n.length=o),n}"function"==typeof atob&&atob;function Qe(e){if(Z(e))return function(e){var t;try{t=Buffer.from(e,"base64")}catch(r){t=new Buffer(e,"base64")}return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}(e.slice("data:application/octet-stream;base64,".length))}var De,be={m:function(e,t){return oe(e,t)},b:f,r:function(e,t){try{return e=de.getStr(e),pe.chmod(e,t),0}catch(e){return void 0!==pe&&e instanceof pe.ErrnoError||_(e),-e.errno}},g:function(e,t,r){de.varargs=r;try{var A=de.getStreamFromFD(e);switch(t){case 0:return(n=de.get())<0?-28:pe.open(A.path,A.flags,0,n).fd;case 1:case 2:return 0;case 3:return A.flags;case 4:var n=de.get();return A.flags|=n,0;case 12:n=de.get();return K[n+0>>1]=2,0;case 13:case 14:return 0;case 16:case 8:return-28;case 9:return se(28),-1;default:return-28}}catch(e){return void 0!==pe&&e instanceof pe.ErrnoError||_(e),-e.errno}},l:function(e,t){try{var r=de.getStreamFromFD(e);return de.doStat(pe.stat,r.path,t)}catch(e){return void 0!==pe&&e instanceof pe.ErrnoError||_(e),-e.errno}},q:function(e,t,r){de.varargs=r;try{var A=de.getStreamFromFD(e);switch(t){case 21509:case 21505:return A.tty?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return A.tty?0:-59;case 21519:if(!A.tty)return-59;var n=de.get();return M[n>>2]=0,0;case 21520:return A.tty?-28:-59;case 21531:n=de.get();return pe.ioctl(A,t,n);case 21523:case 21524:return A.tty?0:-59;default:_("bad ioctl syscall "+t)}}catch(e){return void 0!==pe&&e instanceof pe.ErrnoError||_(e),-e.errno}},t:function(e,t,r){de.varargs=r;try{var A=de.getStr(e),n=de.get();return pe.open(A,t,n).fd}catch(e){return void 0!==pe&&e instanceof pe.ErrnoError||_(e),-e.errno}},s:function(e,t,r){try{var A=de.getStreamFromFD(e);return pe.read(A,N,t,r)}catch(e){return void 0!==pe&&e instanceof pe.ErrnoError||_(e),-e.errno}},j:function(e,t){try{return e=de.getStr(e),t=de.getStr(t),pe.rename(e,t),0}catch(e){return void 0!==pe&&e instanceof pe.ErrnoError||_(e),-e.errno}},u:function(e){try{return e=de.getStr(e),pe.rmdir(e),0}catch(e){return void 0!==pe&&e instanceof pe.ErrnoError||_(e),-e.errno}},e:function(e,t){try{return e=de.getStr(e),de.doStat(pe.stat,e,t)}catch(e){return void 0!==pe&&e instanceof pe.ErrnoError||_(e),-e.errno}},i:function(e){try{return e=de.getStr(e),pe.unlink(e),0}catch(e){return void 0!==pe&&e instanceof pe.ErrnoError||_(e),-e.errno}},v:function(e,t,r){F.copyWithin(e,t,t+r)},w:function(e){e>>>=0;var t=F.length;if(e>2147483648)return!1;for(var r,A,n=1;n<=4;n*=2){var o=t*(1+.2/n);if(o=Math.min(o,e+100663296),Ce(Math.min(2147483648,((r=Math.max(16777216,e,o))%(A=65536)>0&&(r+=A-r%A),r))))return!0}return!1},h:function(e){try{var t=de.getStreamFromFD(e);return pe.close(t),0}catch(e){return void 0!==pe&&e instanceof pe.ErrnoError||_(e),e.errno}},k:function(e,t){try{var r=de.getStreamFromFD(e),A=r.tty?2:pe.isDir(r.mode)?3:pe.isLink(r.mode)?7:4;return N[t>>0]=A,0}catch(e){return void 0!==pe&&e instanceof pe.ErrnoError||_(e),e.errno}},p:function(e,t,r,A){try{var n=de.getStreamFromFD(e),o=de.doReadv(n,t,r);return M[A>>2]=o,0}catch(e){return void 0!==pe&&e instanceof pe.ErrnoError||_(e),e.errno}},n:function(e,t,r,A,n){try{var o=de.getStreamFromFD(e),i=4294967296*r+(t>>>0);return i<=-9007199254740992||i>=9007199254740992?-61:(pe.llseek(o,i,A),te=[o.position>>>0,(ee=o.position,+Y(ee)>=1?ee>0?(0|J(+H(ee/4294967296),4294967295))>>>0:~~+G((ee-+(~~ee>>>0))/4294967296)>>>0:0)],M[n>>2]=te[0],M[n+4>>2]=te[1],o.getdents&&0===i&&0===A&&(o.getdents=null),0)}catch(e){return void 0!==pe&&e instanceof pe.ErrnoError||_(e),e.errno}},f:function(e,t,r,A){try{var n=de.getStreamFromFD(e),o=de.doWritev(n,t,r);return M[A>>2]=o,0}catch(e){return void 0!==pe&&e instanceof pe.ErrnoError||_(e),e.errno}},a:C,c:function(e){0|e},d:function(e){var t=Date.now()/1e3|0;return e&&(M[e>>2]=t),t},o:function(e){!function e(){if(!e.called){e.called=!0,M[Ke()>>2]=60*(new Date).getTimezoneOffset();var t=(new Date).getFullYear(),r=new Date(t,0,1),A=new Date(t,6,1);M[Fe()>>2]=Number(r.getTimezoneOffset()!=A.getTimezoneOffset());var n=a(r),o=a(A),i=S(n),s=S(o);A.getTimezoneOffset()>2]=i,M[Ne()+4>>2]=s):(M[Ne()>>2]=s,M[Ne()+4>>2]=i)}function a(e){var t=e.toTimeString().match(/\(([A-Za-z ]+)\)$/);return t?t[1]:"GMT"}}();var t=Date.UTC(M[e+20>>2]+1900,M[e+16>>2],M[e+12>>2],M[e+8>>2],M[e+4>>2],M[e>>2],0),r=new Date(t);M[e+24>>2]=r.getUTCDay();var A=Date.UTC(r.getUTCFullYear(),0,1,0,0,0,0),n=(r.getTime()-A)/864e5|0;return M[e+28>>2]=n,r.getTime()/1e3|0}},ve=function(){var e={a:be};function t(e,t){var r=e.exports;o.asm=r,X()}if(V(),o.instantiateWasm)try{return o.instantiateWasm(e,t)}catch(e){return p("Module.instantiateWasm callback failed with error: "+e),!1}return function(){var r,A,n;try{n=function(){try{if(d)return new Uint8Array(d);var e=Qe(re);if(e)return e;if(a)return a(re);throw"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)"}catch(e){_(e)}}(),A=new WebAssembly.Module(n),r=new WebAssembly.Instance(A,e)}catch(e){var o=e.toString();throw p("failed to compile wasm module: "+o),(o.indexOf("imported Memory")>=0||o.indexOf("memory import")>=0)&&p("Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)."),e}t(r)}(),o.asm}(),Se=o.___wasm_call_ctors=ve.x,ke=(o._zipstruct_stat=ve.y,o._zipstruct_statS=ve.z,o._zipstruct_stat_name=ve.A,o._zipstruct_stat_index=ve.B,o._zipstruct_stat_size=ve.C,o._zipstruct_stat_mtime=ve.D,o._zipstruct_error=ve.E,o._zipstruct_errorS=ve.F,o._zipstruct_error_code_zip=ve.G,o._zipstruct_stat_comp_size=ve.H,o._zipstruct_stat_comp_method=ve.I,o._zip_close=ve.J,o._zip_delete=ve.K,o._zip_dir_add=ve.L,o._zip_discard=ve.M,o._zip_error_init_with_code=ve.N,o._zip_get_error=ve.O,o._zip_file_get_error=ve.P,o._zip_error_strerror=ve.Q,o._zip_fclose=ve.R,o._zip_file_add=ve.S,o._zip_file_get_external_attributes=ve.T,o._zip_file_set_external_attributes=ve.U,o._zip_file_set_mtime=ve.V,o._zip_fopen=ve.W,o._zip_fopen_index=ve.X,o._zip_fread=ve.Y,o._zip_get_name=ve.Z,o._zip_get_num_entries=ve._,o._zip_name_locate=ve.$,o._zip_open=ve.aa,o._zip_open_from_source=ve.ba,o._zip_set_file_compression=ve.ca,o._zip_source_buffer=ve.da,o._zip_source_buffer_create=ve.ea,o._zip_source_close=ve.fa,o._zip_source_error=ve.ga,o._zip_source_free=ve.ha,o._zip_source_keep=ve.ia,o._zip_source_open=ve.ja,o._zip_source_read=ve.ka,o._zip_source_seek=ve.la,o._zip_source_set_mtime=ve.ma,o._zip_source_tell=ve.na,o._zip_stat=ve.oa,o._zip_stat_index=ve.pa,o._zip_ext_count_symlinks=ve.qa,o.___errno_location=ve.ra),Ne=o.__get_tzname=ve.sa,Fe=o.__get_daylight=ve.ta,Ke=o.__get_timezone=ve.ua,Me=o.stackSave=ve.va,Re=o.stackRestore=ve.wa,xe=o.stackAlloc=ve.xa,Le=o._malloc=ve.ya;o._free=ve.za;function Pe(e){function t(){De||(De=!0,o.calledRun=!0,I||(!0,o.noFSInit||pe.init.initialized||pe.init(),ce.init(),Ae(U),pe.ignorePermissions=!1,Ae(T),o.onRuntimeInitialized&&o.onRuntimeInitialized(),function(){if(o.postRun)for("function"==typeof o.postRun&&(o.postRun=[o.postRun]);o.postRun.length;)e=o.postRun.shift(),j.unshift(e);var e;Ae(j)}()))}e=e||l,q>0||(!function(){if(o.preRun)for("function"==typeof o.preRun&&(o.preRun=[o.preRun]);o.preRun.length;)e=o.preRun.shift(),O.unshift(e);var e;Ae(O)}(),q>0||(o.setStatus?(o.setStatus("Running..."),setTimeout((function(){setTimeout((function(){o.setStatus("")}),1),t()}),1)):t()))}if(o.cwrap=function(e,t,r,A){var n=(r=r||[]).every((function(e){return"number"===e}));return"string"!==t&&n&&!A?B(e):function(){return y(e,t,r,arguments)}},o.getValue=function(e,t,r){switch("*"===(t=t||"i8").charAt(t.length-1)&&(t="i32"),t){case"i1":case"i8":return N[e>>0];case"i16":return K[e>>1];case"i32":case"i64":return M[e>>2];case"float":return R[e>>2];case"double":return x[e>>3];default:_("invalid type for getValue: "+t)}return null},W=function e(){De||Pe(),De||(W=e)},o.run=Pe,o.preInit)for("function"==typeof o.preInit&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();Pe()},98261:e=>{"use strict";function t(e,r,A,n){this.message=e,this.expected=r,this.found=A,this.location=n,this.name="SyntaxError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,t)}!function(e,t){function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r}(t,Error),t.buildMessage=function(e,t){var r={literal:function(e){return`"${n(e.text)}"`},class:function(e){var t,r="";for(t=0;t0){for(t=1,A=1;tf&&(f=p,I=[]),I.push(e))}function Q(e,r,A){return new t(t.buildMessage(e,r),e,r,A)}function D(){var t,r,A,o;return t=p,(r=b())!==n?(47===e.charCodeAt(p)?(A="/",p++):(A=n,w(s)),A!==n&&(o=b())!==n?(d=t,t=r={from:r,descriptor:o}):(p=t,t=n)):(p=t,t=n),t===n&&(t=p,(r=b())!==n&&(d=t,r=function(e){return{descriptor:e}}(r)),t=r),t}function b(){var t,r,A,o;return t=p,(r=v())!==n?(64===e.charCodeAt(p)?(A="@",p++):(A=n,w(a)),A!==n&&(o=function(){var t,r,A;t=p,r=[],u.test(e.charAt(p))?(A=e.charAt(p),p++):(A=n,w(h));if(A!==n)for(;A!==n;)r.push(A),u.test(e.charAt(p))?(A=e.charAt(p),p++):(A=n,w(h));else r=n;r!==n&&(d=t,r=c());return t=r}())!==n?(d=t,t=r={fullName:r,description:o}):(p=t,t=n)):(p=t,t=n),t===n&&(t=p,(r=v())!==n&&(d=t,r=function(e){return{fullName:e}}(r)),t=r),t}function v(){var t,r,A;return t=p,64===e.charCodeAt(p)?(r="@",p++):(r=n,w(a)),r!==n&&S()!==n?(47===e.charCodeAt(p)?(A="/",p++):(A=n,w(s)),A!==n&&S()!==n?(d=t,t=r=c()):(p=t,t=n)):(p=t,t=n),t===n&&(t=p,(r=S())!==n&&(d=t,r=c()),t=r),t}function S(){var t,r,A;if(t=p,r=[],g.test(e.charAt(p))?(A=e.charAt(p),p++):(A=n,w(l)),A!==n)for(;A!==n;)r.push(A),g.test(e.charAt(p))?(A=e.charAt(p),p++):(A=n,w(l));else r=n;return r!==n&&(d=t,r=c()),t=r}if((A=i())!==n&&p===e.length)return A;throw A!==n&&p{"use strict";function t(e,r,A,n){this.message=e,this.expected=r,this.found=A,this.location=n,this.name="SyntaxError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,t)}!function(e,t){function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r}(t,Error),t.buildMessage=function(e,t){var r={literal:function(e){return'"'+n(e.text)+'"'},class:function(e){var t,r="";for(t=0;t0){for(t=1,A=1;t>",!1),I=le(">&",!1),E=le(">",!1),B=le("<<<",!1),y=le("<&",!1),m=le("<",!1),w=le("'",!1),Q=le('"',!1),D=function(e){return{type:"text",text:e}},b=le("\\",!1),v={type:"any"},S=/^[^']/,k=ue(["'"],!0,!1),N=function(e){return e.join("")},F=/^[^$"]/,K=ue(["$",'"'],!0,!1),M=le("-",!1),R=le("+",!1),x=/^[0-9]/,L=ue([["0","9"]],!1,!1),P=le(".",!1),O=le("*",!1),U=le("/",!1),T=le("$((",!1),j=le("))",!1),Y=le("$(",!1),G=le("${",!1),H=le(":-",!1),J=le(":-}",!1),q=function(e){return{name:e}},z=le("$",!1),W=/^[a-zA-Z0-9_]/,V=ue([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),X=function(){return e.substring(ie,oe)},_=/^[$@*?#a-zA-Z0-9_\-]/,Z=ue(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),$=/^[(){}<>$|&; \t"']/,ee=ue(["(",")","{","}","<",">","$","|","&",";"," ","\t",'"',"'"],!1,!1),te=/^[<>&; \t"']/,re=ue(["<",">","&",";"," ","\t",'"',"'"],!1,!1),Ae=/^[ \t]/,ne=ue([" ","\t"],!1,!1),oe=0,ie=0,se=[{line:1,column:1}],ae=0,ce=[],ge=0;if("startRule"in r){if(!(r.startRule in o))throw new Error("Can't start parsing from rule \""+r.startRule+'".');i=o[r.startRule]}function le(e,t){return{type:"literal",text:e,ignoreCase:t}}function ue(e,t,r){return{type:"class",parts:e,inverted:t,ignoreCase:r}}function he(t){var r,A=se[t];if(A)return A;for(r=t-1;!se[r];)r--;for(A={line:(A=se[r]).line,column:A.column};rae&&(ae=oe,ce=[]),ce.push(e))}function Ce(e,r,A){return new t(t.buildMessage(e,r),e,r,A)}function fe(){var e,t;return e=oe,(t=Ie())===n&&(t=null),t!==n&&(ie=e,t=t||[]),e=t}function Ie(){var e,t,r,A,o;if(e=oe,(t=Be())!==n){for(r=[],A=Te();A!==n;)r.push(A),A=Te();r!==n&&(A=Ee())!==n?((o=function(){var e,t,r,A,o;e=oe,t=[],r=Te();for(;r!==n;)t.push(r),r=Te();if(t!==n)if((r=Ie())!==n){for(A=[],o=Te();o!==n;)A.push(o),o=Te();A!==n?(ie=e,e=t=r):(oe=e,e=n)}else oe=e,e=n;else oe=e,e=n;return e}())===n&&(o=null),o!==n?(ie=e,e=t=[t].concat(o||[])):(oe=e,e=n)):(oe=e,e=n)}else oe=e,e=n;if(e===n)if(e=oe,(t=Be())!==n){for(r=[],A=Te();A!==n;)r.push(A),A=Te();r!==n?((A=Ee())===n&&(A=null),A!==n?(ie=e,e=t=function(e,t){return[e]}(t)):(oe=e,e=n)):(oe=e,e=n)}else oe=e,e=n;return e}function Ee(){var t;return 59===e.charCodeAt(oe)?(t=";",oe++):(t=n,0===ge&&de(s)),t}function Be(){var t,r,A,o,i;return t=oe,(r=ye())!==n?((A=function(){var t,r,A,o,i,s,g;t=oe,r=[],A=Te();for(;A!==n;)r.push(A),A=Te();if(r!==n)if((A=function(){var t;"&&"===e.substr(oe,2)?(t="&&",oe+=2):(t=n,0===ge&&de(a));t===n&&("||"===e.substr(oe,2)?(t="||",oe+=2):(t=n,0===ge&&de(c)));return t}())!==n){for(o=[],i=Te();i!==n;)o.push(i),i=Te();if(o!==n)if((i=Be())!==n){for(s=[],g=Te();g!==n;)s.push(g),g=Te();s!==n?(ie=t,t=r={type:A,line:i}):(oe=t,t=n)}else oe=t,t=n;else oe=t,t=n}else oe=t,t=n;else oe=t,t=n;return t}())===n&&(A=null),A!==n?(ie=t,o=r,t=r=(i=A)?{chain:o,then:i}:{chain:o}):(oe=t,t=n)):(oe=t,t=n),t}function ye(){var t,r,A,o,i;return t=oe,(r=function(){var t,r,A,o,i,s,a,c,g,l,u;t=oe,r=[],A=Te();for(;A!==n;)r.push(A),A=Te();if(r!==n)if(40===e.charCodeAt(oe)?(A="(",oe++):(A=n,0===ge&&de(h)),A!==n){for(o=[],i=Te();i!==n;)o.push(i),i=Te();if(o!==n)if((i=Ie())!==n){for(s=[],a=Te();a!==n;)s.push(a),a=Te();if(s!==n)if(41===e.charCodeAt(oe)?(a=")",oe++):(a=n,0===ge&&de(p)),a!==n){for(c=[],g=Te();g!==n;)c.push(g),g=Te();if(c!==n){for(g=[],l=Qe();l!==n;)g.push(l),l=Qe();if(g!==n){for(l=[],u=Te();u!==n;)l.push(u),u=Te();l!==n?(ie=t,t=r={type:"subshell",subshell:i,args:g}):(oe=t,t=n)}else oe=t,t=n}else oe=t,t=n}else oe=t,t=n;else oe=t,t=n}else oe=t,t=n;else oe=t,t=n}else oe=t,t=n;else oe=t,t=n;if(t===n){for(t=oe,r=[],A=Te();A!==n;)r.push(A),A=Te();if(r!==n)if(123===e.charCodeAt(oe)?(A="{",oe++):(A=n,0===ge&&de(d)),A!==n){for(o=[],i=Te();i!==n;)o.push(i),i=Te();if(o!==n)if((i=Ie())!==n){for(s=[],a=Te();a!==n;)s.push(a),a=Te();if(s!==n)if(125===e.charCodeAt(oe)?(a="}",oe++):(a=n,0===ge&&de(C)),a!==n){for(c=[],g=Te();g!==n;)c.push(g),g=Te();if(c!==n){for(g=[],l=Qe();l!==n;)g.push(l),l=Qe();if(g!==n){for(l=[],u=Te();u!==n;)l.push(u),u=Te();l!==n?(ie=t,r=function(e,t){return{type:"group",group:e,args:t}}(i,g),t=r):(oe=t,t=n)}else oe=t,t=n}else oe=t,t=n}else oe=t,t=n;else oe=t,t=n}else oe=t,t=n;else oe=t,t=n}else oe=t,t=n;else oe=t,t=n;if(t===n){for(t=oe,r=[],A=Te();A!==n;)r.push(A),A=Te();if(r!==n){for(A=[],o=me();o!==n;)A.push(o),o=me();if(A!==n){for(o=[],i=Te();i!==n;)o.push(i),i=Te();if(o!==n){if(i=[],(s=we())!==n)for(;s!==n;)i.push(s),s=we();else i=n;if(i!==n){for(s=[],a=Te();a!==n;)s.push(a),a=Te();s!==n?(ie=t,r=function(e,t){return{type:"command",args:t,envs:e}}(A,i),t=r):(oe=t,t=n)}else oe=t,t=n}else oe=t,t=n}else oe=t,t=n}else oe=t,t=n;if(t===n){for(t=oe,r=[],A=Te();A!==n;)r.push(A),A=Te();if(r!==n){if(A=[],(o=me())!==n)for(;o!==n;)A.push(o),o=me();else A=n;if(A!==n){for(o=[],i=Te();i!==n;)o.push(i),i=Te();o!==n?(ie=t,t=r={type:"envs",envs:A}):(oe=t,t=n)}else oe=t,t=n}else oe=t,t=n}}}return t}())!==n?((A=function(){var t,r,A,o,i,s,a;t=oe,r=[],A=Te();for(;A!==n;)r.push(A),A=Te();if(r!==n)if((A=function(){var t;"|&"===e.substr(oe,2)?(t="|&",oe+=2):(t=n,0===ge&&de(g));t===n&&(124===e.charCodeAt(oe)?(t="|",oe++):(t=n,0===ge&&de(l)));return t}())!==n){for(o=[],i=Te();i!==n;)o.push(i),i=Te();if(o!==n)if((i=ye())!==n){for(s=[],a=Te();a!==n;)s.push(a),a=Te();s!==n?(ie=t,t=r={type:A,chain:i}):(oe=t,t=n)}else oe=t,t=n;else oe=t,t=n}else oe=t,t=n;else oe=t,t=n;return t}())===n&&(A=null),A!==n?(ie=t,o=r,t=r=(i=A)?{...o,then:i}:o):(oe=t,t=n)):(oe=t,t=n),t}function me(){var t,r,A,o,i,s;if(t=oe,(r=Le())!==n)if(61===e.charCodeAt(oe)?(A="=",oe++):(A=n,0===ge&&de(u)),A!==n)if((o=be())!==n){for(i=[],s=Te();s!==n;)i.push(s),s=Te();i!==n?(ie=t,t=r={name:r,args:[o]}):(oe=t,t=n)}else oe=t,t=n;else oe=t,t=n;else oe=t,t=n;if(t===n)if(t=oe,(r=Le())!==n)if(61===e.charCodeAt(oe)?(A="=",oe++):(A=n,0===ge&&de(u)),A!==n){for(o=[],i=Te();i!==n;)o.push(i),i=Te();o!==n?(ie=t,t=r=function(e){return{name:e,args:[]}}(r)):(oe=t,t=n)}else oe=t,t=n;else oe=t,t=n;return t}function we(){var e,t,r;for(e=oe,t=[],r=Te();r!==n;)t.push(r),r=Te();if(t!==n&&(r=Qe())!==n?(ie=e,e=t=r):(oe=e,e=n),e===n){for(e=oe,t=[],r=Te();r!==n;)t.push(r),r=Te();t!==n&&(r=De())!==n?(ie=e,e=t=r):(oe=e,e=n)}return e}function Qe(){var t,r,A,o;for(t=oe,r=[],A=Te();A!==n;)r.push(A),A=Te();return r!==n&&(A=function(){var t;">>"===e.substr(oe,2)?(t=">>",oe+=2):(t=n,0===ge&&de(f));t===n&&(">&"===e.substr(oe,2)?(t=">&",oe+=2):(t=n,0===ge&&de(I)),t===n&&(62===e.charCodeAt(oe)?(t=">",oe++):(t=n,0===ge&&de(E)),t===n&&("<<<"===e.substr(oe,3)?(t="<<<",oe+=3):(t=n,0===ge&&de(B)),t===n&&("<&"===e.substr(oe,2)?(t="<&",oe+=2):(t=n,0===ge&&de(y)),t===n&&(60===e.charCodeAt(oe)?(t="<",oe++):(t=n,0===ge&&de(m)))))));return t}())!==n&&(o=De())!==n?(ie=t,t=r={type:"redirection",subtype:A,args:[o]}):(oe=t,t=n),t}function De(){var e,t,r;for(e=oe,t=[],r=Te();r!==n;)t.push(r),r=Te();return t!==n&&(r=be())!==n?(ie=e,e=t=r):(oe=e,e=n),e}function be(){var e,t,r,A;if(e=oe,t=[],(r=ve())!==n)for(;r!==n;)t.push(r),r=ve();else t=n;return t!==n&&(ie=e,A=t,t={type:"argument",segments:[].concat(...A)}),e=t}function ve(){var t,r;return t=oe,(r=function(){var t,r,A,o;t=oe,39===e.charCodeAt(oe)?(r="'",oe++):(r=n,0===ge&&de(w));r!==n&&(A=function(){var t,r,A,o,i;t=oe,r=[],A=oe,92===e.charCodeAt(oe)?(o="\\",oe++):(o=n,0===ge&&de(b));o!==n?(e.length>oe?(i=e.charAt(oe),oe++):(i=n,0===ge&&de(v)),i!==n?(ie=A,A=o=i):(oe=A,A=n)):(oe=A,A=n);A===n&&(S.test(e.charAt(oe))?(A=e.charAt(oe),oe++):(A=n,0===ge&&de(k)));for(;A!==n;)r.push(A),A=oe,92===e.charCodeAt(oe)?(o="\\",oe++):(o=n,0===ge&&de(b)),o!==n?(e.length>oe?(i=e.charAt(oe),oe++):(i=n,0===ge&&de(v)),i!==n?(ie=A,A=o=i):(oe=A,A=n)):(oe=A,A=n),A===n&&(S.test(e.charAt(oe))?(A=e.charAt(oe),oe++):(A=n,0===ge&&de(k)));r!==n&&(ie=t,r=N(r));return t=r}())!==n?(39===e.charCodeAt(oe)?(o="'",oe++):(o=n,0===ge&&de(w)),o!==n?(ie=t,r=function(e){return[{type:"text",text:e}]}(A),t=r):(oe=t,t=n)):(oe=t,t=n);return t}())!==n&&(ie=t,r=r),(t=r)===n&&(t=oe,(r=function(){var t,r,A,o;t=oe,34===e.charCodeAt(oe)?(r='"',oe++):(r=n,0===ge&&de(Q));if(r!==n){for(A=[],o=Se();o!==n;)A.push(o),o=Se();A!==n?(34===e.charCodeAt(oe)?(o='"',oe++):(o=n,0===ge&&de(Q)),o!==n?(ie=t,t=r=A):(oe=t,t=n)):(oe=t,t=n)}else oe=t,t=n;return t}())!==n&&(ie=t,r=r),(t=r)===n&&(t=oe,(r=function(){var e,t,r;if(e=oe,t=[],(r=ke())!==n)for(;r!==n;)t.push(r),r=ke();else t=n;t!==n&&(ie=e,t=t);return e=t}())!==n&&(ie=t,r=r),t=r)),t}function Se(){var t,r,A;return t=oe,(r=Me())!==n&&(ie=t,r={type:"arithmetic",arithmetic:r,quoted:!0}),(t=r)===n&&(t=oe,(r=Re())!==n&&(ie=t,r={type:"shell",shell:r,quoted:!0}),(t=r)===n&&(t=oe,(r=xe())!==n&&(ie=t,A=r,r={type:"variable",...A,quoted:!0}),(t=r)===n&&(t=oe,(r=function(){var t,r,A,o,i;t=oe,r=[],A=oe,92===e.charCodeAt(oe)?(o="\\",oe++):(o=n,0===ge&&de(b));o!==n?(e.length>oe?(i=e.charAt(oe),oe++):(i=n,0===ge&&de(v)),i!==n?(ie=A,A=o=i):(oe=A,A=n)):(oe=A,A=n);A===n&&(F.test(e.charAt(oe))?(A=e.charAt(oe),oe++):(A=n,0===ge&&de(K)));if(A!==n)for(;A!==n;)r.push(A),A=oe,92===e.charCodeAt(oe)?(o="\\",oe++):(o=n,0===ge&&de(b)),o!==n?(e.length>oe?(i=e.charAt(oe),oe++):(i=n,0===ge&&de(v)),i!==n?(ie=A,A=o=i):(oe=A,A=n)):(oe=A,A=n),A===n&&(F.test(e.charAt(oe))?(A=e.charAt(oe),oe++):(A=n,0===ge&&de(K)));else r=n;r!==n&&(ie=t,r=N(r));return t=r}())!==n&&(ie=t,r=D(r)),t=r))),t}function ke(){var t,A,o;return t=oe,(A=Me())!==n&&(ie=t,A={type:"arithmetic",arithmetic:A,quoted:!1}),(t=A)===n&&(t=oe,(A=Re())!==n&&(ie=t,A={type:"shell",shell:A,quoted:!1}),(t=A)===n&&(t=oe,(A=xe())!==n&&(ie=t,o=A,A={type:"variable",...o,quoted:!1}),(t=A)===n&&(t=oe,(A=function(){var t,A;t=oe,(A=function(){var t,r,A,o,i;t=oe,r=[],A=oe,o=oe,ge++,i=Ue(),ge--,i===n?o=void 0:(oe=o,o=n);o!==n?(e.length>oe?(i=e.charAt(oe),oe++):(i=n,0===ge&&de(v)),i!==n?(ie=A,A=o=i):(oe=A,A=n)):(oe=A,A=n);if(A!==n)for(;A!==n;)r.push(A),A=oe,o=oe,ge++,i=Ue(),ge--,i===n?o=void 0:(oe=o,o=n),o!==n?(e.length>oe?(i=e.charAt(oe),oe++):(i=n,0===ge&&de(v)),i!==n?(ie=A,A=o=i):(oe=A,A=n)):(oe=A,A=n);else r=n;r!==n&&(ie=t,r=N(r));return t=r}())!==n?(ie=oe,o=A,(r.isGlobPattern(o)?void 0:n)!==n?(ie=t,t=A=A):(oe=t,t=n)):(oe=t,t=n);var o;return t}())!==n&&(ie=t,A={type:"glob",pattern:A}),(t=A)===n&&(t=oe,(A=function(){var t,r,A,o,i;t=oe,r=[],A=oe,92===e.charCodeAt(oe)?(o="\\",oe++):(o=n,0===ge&&de(b));o!==n?(e.length>oe?(i=e.charAt(oe),oe++):(i=n,0===ge&&de(v)),i!==n?(ie=A,A=o=i):(oe=A,A=n)):(oe=A,A=n);A===n&&(A=oe,o=oe,ge++,i=Oe(),ge--,i===n?o=void 0:(oe=o,o=n),o!==n?(e.length>oe?(i=e.charAt(oe),oe++):(i=n,0===ge&&de(v)),i!==n?(ie=A,A=o=i):(oe=A,A=n)):(oe=A,A=n));if(A!==n)for(;A!==n;)r.push(A),A=oe,92===e.charCodeAt(oe)?(o="\\",oe++):(o=n,0===ge&&de(b)),o!==n?(e.length>oe?(i=e.charAt(oe),oe++):(i=n,0===ge&&de(v)),i!==n?(ie=A,A=o=i):(oe=A,A=n)):(oe=A,A=n),A===n&&(A=oe,o=oe,ge++,i=Oe(),ge--,i===n?o=void 0:(oe=o,o=n),o!==n?(e.length>oe?(i=e.charAt(oe),oe++):(i=n,0===ge&&de(v)),i!==n?(ie=A,A=o=i):(oe=A,A=n)):(oe=A,A=n));else r=n;r!==n&&(ie=t,r=N(r));return t=r}())!==n&&(ie=t,A=D(A)),t=A)))),t}function Ne(){var t,r,A,o,i,s,a,c;if(t=oe,45===e.charCodeAt(oe)?(r="-",oe++):(r=n,0===ge&&de(M)),r===n&&(43===e.charCodeAt(oe)?(r="+",oe++):(r=n,0===ge&&de(R))),r===n&&(r=null),r!==n){if(A=[],x.test(e.charAt(oe))?(o=e.charAt(oe),oe++):(o=n,0===ge&&de(L)),o!==n)for(;o!==n;)A.push(o),x.test(e.charAt(oe))?(o=e.charAt(oe),oe++):(o=n,0===ge&&de(L));else A=n;if(A!==n)if(46===e.charCodeAt(oe)?(o=".",oe++):(o=n,0===ge&&de(P)),o!==n){if(i=[],x.test(e.charAt(oe))?(s=e.charAt(oe),oe++):(s=n,0===ge&&de(L)),s!==n)for(;s!==n;)i.push(s),x.test(e.charAt(oe))?(s=e.charAt(oe),oe++):(s=n,0===ge&&de(L));else i=n;i!==n?(ie=t,a=i,t=r={type:"number",value:("-"===r?-1:1)*parseFloat(A.join("")+"."+a.join(""))}):(oe=t,t=n)}else oe=t,t=n;else oe=t,t=n}else oe=t,t=n;if(t===n){if(t=oe,45===e.charCodeAt(oe)?(r="-",oe++):(r=n,0===ge&&de(M)),r===n&&(43===e.charCodeAt(oe)?(r="+",oe++):(r=n,0===ge&&de(R))),r===n&&(r=null),r!==n){if(A=[],x.test(e.charAt(oe))?(o=e.charAt(oe),oe++):(o=n,0===ge&&de(L)),o!==n)for(;o!==n;)A.push(o),x.test(e.charAt(oe))?(o=e.charAt(oe),oe++):(o=n,0===ge&&de(L));else A=n;A!==n?(ie=t,t=r=function(e,t){return{type:"number",value:("-"===e?-1:1)*parseInt(t.join(""))}}(r,A)):(oe=t,t=n)}else oe=t,t=n;if(t===n&&(t=oe,(r=xe())!==n&&(ie=t,c=r,r={type:"variable",...c}),(t=r)===n&&(t=oe,(r=Pe())!==n&&(ie=t,r={type:"variable",name:r}),(t=r)===n)))if(t=oe,40===e.charCodeAt(oe)?(r="(",oe++):(r=n,0===ge&&de(h)),r!==n){for(A=[],o=Te();o!==n;)A.push(o),o=Te();if(A!==n)if((o=Ke())!==n){for(i=[],s=Te();s!==n;)i.push(s),s=Te();i!==n?(41===e.charCodeAt(oe)?(s=")",oe++):(s=n,0===ge&&de(p)),s!==n?(ie=t,t=r=o):(oe=t,t=n)):(oe=t,t=n)}else oe=t,t=n;else oe=t,t=n}else oe=t,t=n}return t}function Fe(){var t,r,A,o,i,s;if(t=oe,(r=Ne())!==n){for(A=[],o=Te();o!==n;)A.push(o),o=Te();if(A!==n)if(42===e.charCodeAt(oe)?(o="*",oe++):(o=n,0===ge&&de(O)),o!==n){for(i=[],s=Te();s!==n;)i.push(s),s=Te();i!==n&&(s=Fe())!==n?(ie=t,t=r={type:"multiplication",left:r,right:s}):(oe=t,t=n)}else oe=t,t=n;else oe=t,t=n}else oe=t,t=n;if(t===n){if(t=oe,(r=Ne())!==n){for(A=[],o=Te();o!==n;)A.push(o),o=Te();if(A!==n)if(47===e.charCodeAt(oe)?(o="/",oe++):(o=n,0===ge&&de(U)),o!==n){for(i=[],s=Te();s!==n;)i.push(s),s=Te();i!==n&&(s=Fe())!==n?(ie=t,t=r=function(e,t){return{type:"division",left:e,right:t}}(r,s)):(oe=t,t=n)}else oe=t,t=n;else oe=t,t=n}else oe=t,t=n;t===n&&(t=Ne())}return t}function Ke(){var t,r,A,o,i,s;if(t=oe,(r=Fe())!==n){for(A=[],o=Te();o!==n;)A.push(o),o=Te();if(A!==n)if(43===e.charCodeAt(oe)?(o="+",oe++):(o=n,0===ge&&de(R)),o!==n){for(i=[],s=Te();s!==n;)i.push(s),s=Te();i!==n&&(s=Ke())!==n?(ie=t,t=r={type:"addition",left:r,right:s}):(oe=t,t=n)}else oe=t,t=n;else oe=t,t=n}else oe=t,t=n;if(t===n){if(t=oe,(r=Fe())!==n){for(A=[],o=Te();o!==n;)A.push(o),o=Te();if(A!==n)if(45===e.charCodeAt(oe)?(o="-",oe++):(o=n,0===ge&&de(M)),o!==n){for(i=[],s=Te();s!==n;)i.push(s),s=Te();i!==n&&(s=Ke())!==n?(ie=t,t=r=function(e,t){return{type:"subtraction",left:e,right:t}}(r,s)):(oe=t,t=n)}else oe=t,t=n;else oe=t,t=n}else oe=t,t=n;t===n&&(t=Fe())}return t}function Me(){var t,r,A,o,i,s;if(t=oe,"$(("===e.substr(oe,3)?(r="$((",oe+=3):(r=n,0===ge&&de(T)),r!==n){for(A=[],o=Te();o!==n;)A.push(o),o=Te();if(A!==n)if((o=Ke())!==n){for(i=[],s=Te();s!==n;)i.push(s),s=Te();i!==n?("))"===e.substr(oe,2)?(s="))",oe+=2):(s=n,0===ge&&de(j)),s!==n?(ie=t,t=r=o):(oe=t,t=n)):(oe=t,t=n)}else oe=t,t=n;else oe=t,t=n}else oe=t,t=n;return t}function Re(){var t,r,A,o;return t=oe,"$("===e.substr(oe,2)?(r="$(",oe+=2):(r=n,0===ge&&de(Y)),r!==n&&(A=Ie())!==n?(41===e.charCodeAt(oe)?(o=")",oe++):(o=n,0===ge&&de(p)),o!==n?(ie=t,t=r=A):(oe=t,t=n)):(oe=t,t=n),t}function xe(){var t,r,A,o,i,s;return t=oe,"${"===e.substr(oe,2)?(r="${",oe+=2):(r=n,0===ge&&de(G)),r!==n&&(A=Pe())!==n?(":-"===e.substr(oe,2)?(o=":-",oe+=2):(o=n,0===ge&&de(H)),o!==n&&(i=function(){var e,t,r,A,o;for(e=oe,t=[],r=Te();r!==n;)t.push(r),r=Te();if(t!==n){if(r=[],(A=De())!==n)for(;A!==n;)r.push(A),A=De();else r=n;if(r!==n){for(A=[],o=Te();o!==n;)A.push(o),o=Te();A!==n?(ie=e,e=t=r):(oe=e,e=n)}else oe=e,e=n}else oe=e,e=n;return e}())!==n?(125===e.charCodeAt(oe)?(s="}",oe++):(s=n,0===ge&&de(C)),s!==n?(ie=t,t=r={name:A,defaultValue:i}):(oe=t,t=n)):(oe=t,t=n)):(oe=t,t=n),t===n&&(t=oe,"${"===e.substr(oe,2)?(r="${",oe+=2):(r=n,0===ge&&de(G)),r!==n&&(A=Pe())!==n?(":-}"===e.substr(oe,3)?(o=":-}",oe+=3):(o=n,0===ge&&de(J)),o!==n?(ie=t,t=r=function(e){return{name:e,defaultValue:[]}}(A)):(oe=t,t=n)):(oe=t,t=n),t===n&&(t=oe,"${"===e.substr(oe,2)?(r="${",oe+=2):(r=n,0===ge&&de(G)),r!==n&&(A=Pe())!==n?(125===e.charCodeAt(oe)?(o="}",oe++):(o=n,0===ge&&de(C)),o!==n?(ie=t,t=r=q(A)):(oe=t,t=n)):(oe=t,t=n),t===n&&(t=oe,36===e.charCodeAt(oe)?(r="$",oe++):(r=n,0===ge&&de(z)),r!==n&&(A=Pe())!==n?(ie=t,t=r=q(A)):(oe=t,t=n)))),t}function Le(){var t,r,A;if(t=oe,r=[],W.test(e.charAt(oe))?(A=e.charAt(oe),oe++):(A=n,0===ge&&de(V)),A!==n)for(;A!==n;)r.push(A),W.test(e.charAt(oe))?(A=e.charAt(oe),oe++):(A=n,0===ge&&de(V));else r=n;return r!==n&&(ie=t,r=X()),t=r}function Pe(){var t,r,A;if(t=oe,r=[],_.test(e.charAt(oe))?(A=e.charAt(oe),oe++):(A=n,0===ge&&de(Z)),A!==n)for(;A!==n;)r.push(A),_.test(e.charAt(oe))?(A=e.charAt(oe),oe++):(A=n,0===ge&&de(Z));else r=n;return r!==n&&(ie=t,r=X()),t=r}function Oe(){var t;return $.test(e.charAt(oe))?(t=e.charAt(oe),oe++):(t=n,0===ge&&de(ee)),t}function Ue(){var t;return te.test(e.charAt(oe))?(t=e.charAt(oe),oe++):(t=n,0===ge&&de(re)),t}function Te(){var t,r;if(t=[],Ae.test(e.charAt(oe))?(r=e.charAt(oe),oe++):(r=n,0===ge&&de(ne)),r!==n)for(;r!==n;)t.push(r),Ae.test(e.charAt(oe))?(r=e.charAt(oe),oe++):(r=n,0===ge&&de(ne));else t=n;return t}if((A=i())!==n&&oe===e.length)return A;throw A!==n&&oe{"use strict";function t(e,r,A,n){this.message=e,this.expected=r,this.found=A,this.location=n,this.name="SyntaxError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,t)}!function(e,t){function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r}(t,Error),t.buildMessage=function(e,t){var r={literal:function(e){return`"${n(e.text)}"`},class:function(e){var t,r="";for(t=0;t0){for(t=1,A=1;t'"%@`\-]/,I=oe(["\r","\n","\t"," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),E=/^[^\r\n\t ,\][{}:#"']/,B=oe(["\r","\n","\t"," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),y=function(){return Ae().replace(/^ *| *$/g,"")},m=ne("--",!1),w=/^[a-zA-Z\/0-9]/,Q=oe([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),D=/^[^\r\n\t :,]/,b=oe(["\r","\n","\t"," ",":",","],!0,!1),v=ne("null",!1),S=ne("true",!1),k=ne("false",!1),N=ie("string"),F=ne('"',!1),K=/^[^"\\\0-\x1F\x7F]/,M=oe(['"',"\\",["\0",""],""],!0,!1),R=ne('\\"',!1),x=ne("\\\\",!1),L=ne("\\/",!1),P=ne("\\b",!1),O=ne("\\f",!1),U=ne("\\n",!1),T=ne("\\r",!1),j=ne("\\t",!1),Y=ne("\\u",!1),G=/^[0-9a-fA-F]/,H=oe([["0","9"],["a","f"],["A","F"]],!1,!1),J=ie("blank space"),q=/^[ \t]/,z=oe([" ","\t"],!1,!1),W=(ie("white space"),oe([" ","\t","\n","\r"],!1,!1),ne("\r\n",!1)),V=ne("\n",!1),X=ne("\r",!1),_=0,Z=0,$=[{line:1,column:1}],ee=0,te=[],re=0;if("startRule"in r){if(!(r.startRule in o))throw new Error(`Can't start parsing from rule "${r.startRule}".`);i=o[r.startRule]}function Ae(){return e.substring(Z,_)}function ne(e,t){return{type:"literal",text:e,ignoreCase:t}}function oe(e,t,r){return{type:"class",parts:e,inverted:t,ignoreCase:r}}function ie(e){return{type:"other",description:e}}function se(t){var r,A=$[t];if(A)return A;for(r=t-1;!$[r];)r--;for(A={line:(A=$[r]).line,column:A.column};ree&&(ee=_,te=[]),te.push(e))}function ge(e,r,A){return new t(t.buildMessage(e,r),e,r,A)}function le(){return he()}function ue(){var t,r,A;return t=_,Ce()!==n?(45===e.charCodeAt(_)?(r="-",_++):(r=n,0===re&&ce(s)),r!==n&&be()!==n&&(A=de())!==n?(Z=t,t=A):(_=t,t=n)):(_=t,t=n),t}function he(){var e,t,r,A;for(e=_,t=[],r=pe();r!==n;)t.push(r),r=pe();return t!==n&&(Z=e,A=t,t=Object.assign({},...A)),e=t}function pe(){var t,r,A,o,i,s,p,d,C,f,I,E;if(t=_,(r=be())===n&&(r=null),r!==n){if(A=_,35===e.charCodeAt(_)?(o="#",_++):(o=n,0===re&&ce(a)),o!==n){if(i=[],s=_,p=_,re++,d=Se(),re--,d===n?p=void 0:(_=p,p=n),p!==n?(e.length>_?(d=e.charAt(_),_++):(d=n,0===re&&ce(c)),d!==n?s=p=[p,d]:(_=s,s=n)):(_=s,s=n),s!==n)for(;s!==n;)i.push(s),s=_,p=_,re++,d=Se(),re--,d===n?p=void 0:(_=p,p=n),p!==n?(e.length>_?(d=e.charAt(_),_++):(d=n,0===re&&ce(c)),d!==n?s=p=[p,d]:(_=s,s=n)):(_=s,s=n);else i=n;i!==n?A=o=[o,i]:(_=A,A=n)}else _=A,A=n;if(A===n&&(A=null),A!==n){if(o=[],(i=ve())!==n)for(;i!==n;)o.push(i),i=ve();else o=n;o!==n?(Z=t,t=r={}):(_=t,t=n)}else _=t,t=n}else _=t,t=n;if(t===n&&(t=_,(r=Ce())!==n&&(A=function(){var e;(e=we())===n&&(e=Be());return e}())!==n?((o=be())===n&&(o=null),o!==n?(58===e.charCodeAt(_)?(i=":",_++):(i=n,0===re&&ce(g)),i!==n?((s=be())===n&&(s=null),s!==n&&(p=de())!==n?(Z=t,t=r=l(A,p)):(_=t,t=n)):(_=t,t=n)):(_=t,t=n)):(_=t,t=n),t===n&&(t=_,(r=Ce())!==n&&(A=Ee())!==n?((o=be())===n&&(o=null),o!==n?(58===e.charCodeAt(_)?(i=":",_++):(i=n,0===re&&ce(g)),i!==n?((s=be())===n&&(s=null),s!==n&&(p=de())!==n?(Z=t,t=r=l(A,p)):(_=t,t=n)):(_=t,t=n)):(_=t,t=n)):(_=t,t=n),t===n))){if(t=_,(r=Ce())!==n)if((A=Ee())!==n)if((o=be())!==n)if((i=function(){var e;(e=me())===n&&(e=we())===n&&(e=ye());return e}())!==n){if(s=[],(p=ve())!==n)for(;p!==n;)s.push(p),p=ve();else s=n;s!==n?(Z=t,t=r=l(A,i)):(_=t,t=n)}else _=t,t=n;else _=t,t=n;else _=t,t=n;else _=t,t=n;if(t===n)if(t=_,(r=Ce())!==n)if((A=Ee())!==n){if(o=[],i=_,(s=be())===n&&(s=null),s!==n?(44===e.charCodeAt(_)?(p=",",_++):(p=n,0===re&&ce(u)),p!==n?((d=be())===n&&(d=null),d!==n&&(C=Ee())!==n?(Z=i,i=s=h(0,C)):(_=i,i=n)):(_=i,i=n)):(_=i,i=n),i!==n)for(;i!==n;)o.push(i),i=_,(s=be())===n&&(s=null),s!==n?(44===e.charCodeAt(_)?(p=",",_++):(p=n,0===re&&ce(u)),p!==n?((d=be())===n&&(d=null),d!==n&&(C=Ee())!==n?(Z=i,i=s=h(0,C)):(_=i,i=n)):(_=i,i=n)):(_=i,i=n);else o=n;o!==n?((i=be())===n&&(i=null),i!==n?(58===e.charCodeAt(_)?(s=":",_++):(s=n,0===re&&ce(g)),s!==n?((p=be())===n&&(p=null),p!==n&&(d=de())!==n?(Z=t,f=A,I=o,E=d,t=r=Object.assign({},...[f].concat(I).map(e=>({[e]:E})))):(_=t,t=n)):(_=t,t=n)):(_=t,t=n)):(_=t,t=n)}else _=t,t=n;else _=t,t=n}return t}function de(){var t,r,A,o,i,a,c;if(t=_,r=_,re++,A=_,(o=Se())!==n&&(i=function(){var t,r,A;t=_,r=[],32===e.charCodeAt(_)?(A=" ",_++):(A=n,0===re&&ce(d));for(;A!==n;)r.push(A),32===e.charCodeAt(_)?(A=" ",_++):(A=n,0===re&&ce(d));r!==n?(Z=_,(A=(A=r.length===(Ne+1)*ke)?void 0:n)!==n?t=r=[r,A]:(_=t,t=n)):(_=t,t=n);return t}())!==n?(45===e.charCodeAt(_)?(a="-",_++):(a=n,0===re&&ce(s)),a!==n&&(c=be())!==n?A=o=[o,i,a,c]:(_=A,A=n)):(_=A,A=n),re--,A!==n?(_=r,r=void 0):r=n,r!==n&&(A=ve())!==n&&(o=fe())!==n&&(i=function(){var e,t,r,A;for(e=_,t=[],r=ue();r!==n;)t.push(r),r=ue();return t!==n&&(Z=e,A=t,t=[].concat(...A)),e=t}())!==n&&(a=Ie())!==n?(Z=t,t=r=i):(_=t,t=n),t===n&&(t=_,(r=Se())!==n&&(A=fe())!==n&&(o=he())!==n&&(i=Ie())!==n?(Z=t,t=r=o):(_=t,t=n),t===n))if(t=_,(r=function(){var t;(t=me())===n&&(t=function(){var t,r;t=_,"true"===e.substr(_,4)?(r="true",_+=4):(r=n,0===re&&ce(S));r!==n&&(Z=t,r=!0);(t=r)===n&&(t=_,"false"===e.substr(_,5)?(r="false",_+=5):(r=n,0===re&&ce(k)),r!==n&&(Z=t,r=!1),t=r);return t}())===n&&(t=we())===n&&(t=Be());return t}())!==n){if(A=[],(o=ve())!==n)for(;o!==n;)A.push(o),o=ve();else A=n;A!==n?(Z=t,t=r=r):(_=t,t=n)}else _=t,t=n;return t}function Ce(){var t,r,A;for(re++,t=_,r=[],32===e.charCodeAt(_)?(A=" ",_++):(A=n,0===re&&ce(d));A!==n;)r.push(A),32===e.charCodeAt(_)?(A=" ",_++):(A=n,0===re&&ce(d));return r!==n?(Z=_,(A=(A=r.length===Ne*ke)?void 0:n)!==n?t=r=[r,A]:(_=t,t=n)):(_=t,t=n),re--,t===n&&(r=n,0===re&&ce(p)),t}function fe(){return Z=_,Ne++,!0?void 0:n}function Ie(){return Z=_,Ne--,!0?void 0:n}function Ee(){var e,t,r;if((e=we())===n){if(e=_,t=[],(r=ye())!==n)for(;r!==n;)t.push(r),r=ye();else t=n;t!==n&&(Z=e,t=Ae()),e=t}return e}function Be(){var t,r,A,o,i,s;if(re++,t=_,f.test(e.charAt(_))?(r=e.charAt(_),_++):(r=n,0===re&&ce(I)),r!==n){for(A=[],o=_,(i=be())===n&&(i=null),i!==n?(E.test(e.charAt(_))?(s=e.charAt(_),_++):(s=n,0===re&&ce(B)),s!==n?o=i=[i,s]:(_=o,o=n)):(_=o,o=n);o!==n;)A.push(o),o=_,(i=be())===n&&(i=null),i!==n?(E.test(e.charAt(_))?(s=e.charAt(_),_++):(s=n,0===re&&ce(B)),s!==n?o=i=[i,s]:(_=o,o=n)):(_=o,o=n);A!==n?(Z=t,t=r=y()):(_=t,t=n)}else _=t,t=n;return re--,t===n&&(r=n,0===re&&ce(C)),t}function ye(){var t,r,A,o,i;if(t=_,"--"===e.substr(_,2)?(r="--",_+=2):(r=n,0===re&&ce(m)),r===n&&(r=null),r!==n)if(w.test(e.charAt(_))?(A=e.charAt(_),_++):(A=n,0===re&&ce(Q)),A!==n){for(o=[],D.test(e.charAt(_))?(i=e.charAt(_),_++):(i=n,0===re&&ce(b));i!==n;)o.push(i),D.test(e.charAt(_))?(i=e.charAt(_),_++):(i=n,0===re&&ce(b));o!==n?(Z=t,t=r=y()):(_=t,t=n)}else _=t,t=n;else _=t,t=n;return t}function me(){var t,r;return t=_,"null"===e.substr(_,4)?(r="null",_+=4):(r=n,0===re&&ce(v)),r!==n&&(Z=t,r=null),t=r}function we(){var t,r,A,o;return re++,t=_,34===e.charCodeAt(_)?(r='"',_++):(r=n,0===re&&ce(F)),r!==n?(34===e.charCodeAt(_)?(A='"',_++):(A=n,0===re&&ce(F)),A!==n?(Z=t,t=r=""):(_=t,t=n)):(_=t,t=n),t===n&&(t=_,34===e.charCodeAt(_)?(r='"',_++):(r=n,0===re&&ce(F)),r!==n&&(A=function(){var e,t,r;if(e=_,t=[],(r=Qe())!==n)for(;r!==n;)t.push(r),r=Qe();else t=n;t!==n&&(Z=e,t=t.join(""));return e=t}())!==n?(34===e.charCodeAt(_)?(o='"',_++):(o=n,0===re&&ce(F)),o!==n?(Z=t,t=r=A):(_=t,t=n)):(_=t,t=n)),re--,t===n&&(r=n,0===re&&ce(N)),t}function Qe(){var t,r,A,o,i,s,a,c,g,l;return K.test(e.charAt(_))?(t=e.charAt(_),_++):(t=n,0===re&&ce(M)),t===n&&(t=_,'\\"'===e.substr(_,2)?(r='\\"',_+=2):(r=n,0===re&&ce(R)),r!==n&&(Z=t,r='"'),(t=r)===n&&(t=_,"\\\\"===e.substr(_,2)?(r="\\\\",_+=2):(r=n,0===re&&ce(x)),r!==n&&(Z=t,r="\\"),(t=r)===n&&(t=_,"\\/"===e.substr(_,2)?(r="\\/",_+=2):(r=n,0===re&&ce(L)),r!==n&&(Z=t,r="/"),(t=r)===n&&(t=_,"\\b"===e.substr(_,2)?(r="\\b",_+=2):(r=n,0===re&&ce(P)),r!==n&&(Z=t,r="\b"),(t=r)===n&&(t=_,"\\f"===e.substr(_,2)?(r="\\f",_+=2):(r=n,0===re&&ce(O)),r!==n&&(Z=t,r="\f"),(t=r)===n&&(t=_,"\\n"===e.substr(_,2)?(r="\\n",_+=2):(r=n,0===re&&ce(U)),r!==n&&(Z=t,r="\n"),(t=r)===n&&(t=_,"\\r"===e.substr(_,2)?(r="\\r",_+=2):(r=n,0===re&&ce(T)),r!==n&&(Z=t,r="\r"),(t=r)===n&&(t=_,"\\t"===e.substr(_,2)?(r="\\t",_+=2):(r=n,0===re&&ce(j)),r!==n&&(Z=t,r="\t"),(t=r)===n&&(t=_,"\\u"===e.substr(_,2)?(r="\\u",_+=2):(r=n,0===re&&ce(Y)),r!==n&&(A=De())!==n&&(o=De())!==n&&(i=De())!==n&&(s=De())!==n?(Z=t,a=A,c=o,g=i,l=s,t=r=String.fromCharCode(parseInt(`0x${a}${c}${g}${l}`))):(_=t,t=n)))))))))),t}function De(){var t;return G.test(e.charAt(_))?(t=e.charAt(_),_++):(t=n,0===re&&ce(H)),t}function be(){var t,r;if(re++,t=[],q.test(e.charAt(_))?(r=e.charAt(_),_++):(r=n,0===re&&ce(z)),r!==n)for(;r!==n;)t.push(r),q.test(e.charAt(_))?(r=e.charAt(_),_++):(r=n,0===re&&ce(z));else t=n;return re--,t===n&&(r=n,0===re&&ce(J)),t}function ve(){var e,t,r,A,o,i;if(e=_,(t=Se())!==n){for(r=[],A=_,(o=be())===n&&(o=null),o!==n&&(i=Se())!==n?A=o=[o,i]:(_=A,A=n);A!==n;)r.push(A),A=_,(o=be())===n&&(o=null),o!==n&&(i=Se())!==n?A=o=[o,i]:(_=A,A=n);r!==n?e=t=[t,r]:(_=e,e=n)}else _=e,e=n;return e}function Se(){var t;return"\r\n"===e.substr(_,2)?(t="\r\n",_+=2):(t=n,0===re&&ce(W)),t===n&&(10===e.charCodeAt(_)?(t="\n",_++):(t=n,0===re&&ce(V)),t===n&&(13===e.charCodeAt(_)?(t="\r",_++):(t=n,0===re&&ce(X)))),t}const ke=2;let Ne=0;if((A=i())!==n&&_===e.length)return A;throw A!==n&&_{let A;e.exports=()=>(void 0===A&&(A=r(78761).brotliDecompressSync(Buffer.from("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","base64")).toString()),A)},42357:e=>{"use strict";e.exports=require("assert")},64293:e=>{"use strict";e.exports=require("buffer")},63129:e=>{"use strict";e.exports=require("child_process")},27619:e=>{"use strict";e.exports=require("constants")},76417:e=>{"use strict";e.exports=require("crypto")},40881:e=>{"use strict";e.exports=require("dns")},28614:e=>{"use strict";e.exports=require("events")},35747:e=>{"use strict";e.exports=require("fs")},98605:e=>{"use strict";e.exports=require("http")},97565:e=>{"use strict";e.exports=require("http2")},57211:e=>{"use strict";e.exports=require("https")},32282:e=>{"use strict";e.exports=require("module")},11631:e=>{"use strict";e.exports=require("net")},12087:e=>{"use strict";e.exports=require("os")},85622:e=>{"use strict";e.exports=require("path")},71191:e=>{"use strict";e.exports=require("querystring")},51058:e=>{"use strict";e.exports=require("readline")},92413:e=>{"use strict";e.exports=require("stream")},24304:e=>{"use strict";e.exports=require("string_decoder")},4016:e=>{"use strict";e.exports=require("tls")},33867:e=>{"use strict";e.exports=require("tty")},78835:e=>{"use strict";e.exports=require("url")},31669:e=>{"use strict";e.exports=require("util")},78761:e=>{"use strict";e.exports=require("zlib")}},t={};function r(A){if(t[A])return t[A].exports;var n=t[A]={id:A,loaded:!1,exports:{}};return e[A].call(n.exports,n,n.exports,r),n.loaded=!0,n.exports}return r.c=t,r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var A=Object.create(null);r.r(A);var n={};if(2&t&&"object"==typeof e&&e)for(const t in e)n[t]=()=>e[t];return n.default=()=>e,r.d(A,n),A},r.d=(e,t)=>{for(var A in t)r.o(t,A)&&!r.o(e,A)&&Object.defineProperty(e,A,{enumerable:!0,get:t[A]})},r.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r(43418)})(); \ No newline at end of file diff --git a/tests/functional/.yarnrc.yml b/tests/functional/.yarnrc.yml new file mode 100644 index 0000000000..b758837b73 --- /dev/null +++ b/tests/functional/.yarnrc.yml @@ -0,0 +1 @@ +yarnPath: ".yarn/releases/yarn-berry.cjs" diff --git a/tests/functional/BotFramework-FunctionalTests.ruleset b/tests/functional/BotFramework-FunctionalTests.ruleset new file mode 100644 index 0000000000..08a5ec4ab9 --- /dev/null +++ b/tests/functional/BotFramework-FunctionalTests.ruleset @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/functional/Bots/.gitignore b/tests/functional/Bots/.gitignore new file mode 100644 index 0000000000..6e87fc983e --- /dev/null +++ b/tests/functional/Bots/.gitignore @@ -0,0 +1,2 @@ +# Exclude ComposerDialogs folder created for local deployment +**/azurewebapp/ComposerDialogs \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/AdapterWithErrorHandler.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/AdapterWithErrorHandler.cs new file mode 100644 index 0000000000..091f3062ab --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/AdapterWithErrorHandler.cs @@ -0,0 +1,155 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Bot.Builder.Integration.AspNet.Core.Skills; +using Microsoft.Bot.Builder.Skills; +using Microsoft.Bot.Builder.TraceExtensions; +using Microsoft.Bot.Connector.Authentication; +using Microsoft.Bot.Schema; +using Microsoft.BotFrameworkFunctionalTests.SimpleHostBot21.Bots; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot21 +{ + public class AdapterWithErrorHandler : BotFrameworkHttpAdapter + { + private readonly ConversationState _conversationState; + private readonly IConfiguration _configuration; + private readonly ILogger _logger; + private readonly SkillHttpClient _skillClient; + private readonly SkillsConfiguration _skillsConfig; + + /// + /// Initializes a new instance of the class to handle errors. + /// + /// The configuration properties. + /// An instance of a logger. + /// A state management object for the conversation. + /// The HTTP client for the skills. + /// The skills configuration. + public AdapterWithErrorHandler(IConfiguration configuration, ILogger logger, ConversationState conversationState = null, SkillHttpClient skillClient = null, SkillsConfiguration skillsConfig = null) + : base(configuration, logger) + { + _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration)); + _conversationState = conversationState; + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + _skillClient = skillClient; + _skillsConfig = skillsConfig; + + OnTurnError = HandleTurnErrorAsync; + } + + /// + /// Handles the error by sending a message to the user and ending the conversation with the skill. + /// + /// Context for the current turn of conversation. + /// The handled exception. + /// A representing the result of the asynchronous operation. + private async Task HandleTurnErrorAsync(ITurnContext turnContext, Exception exception) + { + // Log any leaked exception from the application. + _logger.LogError(exception, $"[OnTurnError] unhandled error : {exception.Message}"); + + await SendErrorMessageAsync(turnContext, exception, default); + await EndSkillConversationAsync(turnContext, default); + await ClearConversationStateAsync(turnContext, default); + } + + /// + /// Sends an error message to the user and a trace activity to be displayed in the Bot Framework Emulator. + /// + /// Context for the current turn of conversation. + /// The exception to be sent in the message. + /// CancellationToken propagates notifications that operations should be cancelled. + /// A representing the result of the asynchronous operation. + private async Task SendErrorMessageAsync(ITurnContext turnContext, Exception exception, CancellationToken cancellationToken) + { + try + { + // Send a message to the user + var errorMessageText = "The bot encountered an error or bug."; + var errorMessage = MessageFactory.Text(errorMessageText, errorMessageText, InputHints.IgnoringInput); + errorMessage.Value = exception; + await turnContext.SendActivityAsync(errorMessage, cancellationToken); + + await turnContext.SendActivityAsync($"Exception: {exception.Message}"); + await turnContext.SendActivityAsync(exception.ToString()); + + errorMessageText = "To continue to run this bot, please fix the bot source code."; + errorMessage = MessageFactory.Text(errorMessageText, errorMessageText, InputHints.ExpectingInput); + await turnContext.SendActivityAsync(errorMessage, cancellationToken); + + // Send a trace activity, which will be displayed in the Bot Framework Emulator + await turnContext.TraceActivityAsync("OnTurnError Trace", exception.ToString(), "https://www.botframework.com/schemas/error", "TurnError", cancellationToken); + } + catch (Exception ex) + { + _logger.LogError(ex, $"Exception caught in SendErrorMessageAsync : {ex}"); + } + } + + /// + /// Informs to the active skill that the conversation is ended so that it has a chance to clean up. + /// + /// Context for the current turn of conversation. + /// CancellationToken propagates notifications that operations should be cancelled. + /// A representing the result of the asynchronous operation. + private async Task EndSkillConversationAsync(ITurnContext turnContext, CancellationToken cancellationToken) + { + if (_conversationState == null || _skillClient == null || _skillsConfig == null) + { + return; + } + + try + { + // Note: ActiveSkillPropertyName is set by the HostBot while messages are being + // forwarded to a Skill. + var activeSkill = await _conversationState.CreateProperty(HostBot.ActiveSkillPropertyName).GetAsync(turnContext, () => null, cancellationToken); + if (activeSkill != null) + { + var botId = _configuration.GetSection(MicrosoftAppCredentials.MicrosoftAppIdKey)?.Value; + + var endOfConversation = Activity.CreateEndOfConversationActivity(); + endOfConversation.Code = "HostSkillError"; + endOfConversation.ApplyConversationReference(turnContext.Activity.GetConversationReference(), true); + + await _conversationState.SaveChangesAsync(turnContext, true, cancellationToken); + await _skillClient.PostActivityAsync(botId, activeSkill, _skillsConfig.SkillHostEndpoint, (Activity)endOfConversation, cancellationToken); + } + } + catch (Exception ex) + { + _logger.LogError(ex, $"Exception caught on attempting to send EndOfConversation : {ex}"); + } + } + + /// + /// Deletes the conversationState for the current conversation to prevent the bot from getting stuck in an error-loop caused by being in a bad state. + /// ConversationState should be thought of as similar to "cookie-state" in a Web pages. + /// + /// Context for the current turn of conversation. + /// CancellationToken propagates notifications that operations should be cancelled. + /// A representing the result of the asynchronous operation. + private async Task ClearConversationStateAsync(ITurnContext turnContext, CancellationToken cancellationToken) + { + if (_conversationState != null) + { + try + { + await _conversationState.DeleteAsync(turnContext, cancellationToken); + } + catch (Exception ex) + { + _logger.LogError(ex, $"Exception caught on attempting to Delete ConversationState : {ex}"); + } + } + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Authentication/AllowedSkillsClaimsValidator.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Authentication/AllowedSkillsClaimsValidator.cs new file mode 100644 index 0000000000..31ec04cb31 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Authentication/AllowedSkillsClaimsValidator.cs @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Claims; +using System.Threading.Tasks; +using Microsoft.Bot.Connector.Authentication; + +namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot21.Authentication +{ + /// + /// Sample claims validator that loads an allowed list from configuration if present + /// and checks that responses are coming from configured skills. + /// + public class AllowedSkillsClaimsValidator : ClaimsValidator + { + private readonly List _allowedSkills; + + /// + /// Initializes a new instance of the class. + /// Loads the appIds for the configured skills. Only allows responses from skills it has configured. + /// + /// The list of configured skills. + public AllowedSkillsClaimsValidator(SkillsConfiguration skillsConfig) + { + if (skillsConfig == null) + { + throw new ArgumentNullException(nameof(skillsConfig)); + } + + _allowedSkills = (from skill in skillsConfig.Skills.Values select skill.AppId).ToList(); + } + + /// + /// Checks that the appId claim in the skill request is in the list of skills configured for this bot. + /// + /// The list of claims to validate. + /// A task that represents the work queued to execute. + public override Task ValidateClaimsAsync(IList claims) + { + if (SkillValidation.IsSkillClaim(claims)) + { + var appId = JwtTokenValidation.GetAppIdFromClaims(claims); + if (!_allowedSkills.Contains(appId)) + { + throw new UnauthorizedAccessException($"Received a request from an application with an appID of \"{appId}\". To enable requests from this skill, add the skill to your configuration file."); + } + } + + return Task.CompletedTask; + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Bots/HostBot.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Bots/HostBot.cs new file mode 100644 index 0000000000..79d4c150a7 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Bots/HostBot.cs @@ -0,0 +1,241 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Builder.Integration.AspNet.Core.Skills; +using Microsoft.Bot.Builder.Skills; +using Microsoft.Bot.Connector.Authentication; +using Microsoft.Bot.Schema; +using Microsoft.BotFrameworkFunctionalTests.SimpleHostBot21.Dialogs; +using Microsoft.Extensions.Configuration; +using Newtonsoft.Json; + +namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot21.Bots +{ + public class HostBot : ActivityHandler + { + public const string DeliveryModePropertyName = "deliveryModeProperty"; + public const string ActiveSkillPropertyName = "activeSkillProperty"; + + private readonly IStatePropertyAccessor _deliveryModeProperty; + private readonly IStatePropertyAccessor _activeSkillProperty; + private readonly IStatePropertyAccessor _dialogStateProperty; + private readonly string _botId; + private readonly ConversationState _conversationState; + private readonly SkillHttpClient _skillClient; + private readonly SkillsConfiguration _skillsConfig; + private readonly Dialog _dialog; + + /// + /// Initializes a new instance of the class. + /// + /// A state management object for the conversation. + /// The skills configuration. + /// The HTTP client for the skills. + /// The configuration properties. + /// The dialog to use. + public HostBot(ConversationState conversationState, SkillsConfiguration skillsConfig, SkillHttpClient skillClient, IConfiguration configuration, SetupDialog dialog) + { + _conversationState = conversationState ?? throw new ArgumentNullException(nameof(conversationState)); + _skillsConfig = skillsConfig ?? throw new ArgumentNullException(nameof(skillsConfig)); + _skillClient = skillClient ?? throw new ArgumentNullException(nameof(skillClient)); + _dialog = dialog ?? throw new ArgumentNullException(nameof(dialog)); + _dialogStateProperty = _conversationState.CreateProperty("DialogState"); + if (configuration == null) + { + throw new ArgumentNullException(nameof(configuration)); + } + + _botId = configuration.GetSection(MicrosoftAppCredentials.MicrosoftAppIdKey)?.Value; + + // Create state properties to track the delivery mode and active skill. + _deliveryModeProperty = conversationState.CreateProperty(DeliveryModePropertyName); + _activeSkillProperty = conversationState.CreateProperty(ActiveSkillPropertyName); + } + + /// + public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default) + { + // Forward all activities except EndOfConversation to the active skill. + if (turnContext.Activity.Type != ActivityTypes.EndOfConversation) + { + // Try to get the active skill + var activeSkill = await _activeSkillProperty.GetAsync(turnContext, () => null, cancellationToken); + + if (activeSkill != null) + { + var deliveryMode = await _deliveryModeProperty.GetAsync(turnContext, () => null, cancellationToken); + + // Send the activity to the skill + await SendToSkillAsync(turnContext, deliveryMode, activeSkill, cancellationToken); + return; + } + } + + await base.OnTurnAsync(turnContext, cancellationToken); + + // Save any state changes that might have occurred during the turn. + await _conversationState.SaveChangesAsync(turnContext, false, cancellationToken); + } + + /// + /// Processes a message activity. + /// + /// Context for the current turn of conversation. + /// CancellationToken propagates notifications that operations should be cancelled. + /// A representing the result of the asynchronous operation. + protected override async Task OnMessageActivityAsync(ITurnContext turnContext, CancellationToken cancellationToken) + { + if (_skillsConfig.Skills.ContainsKey(turnContext.Activity.Text)) + { + var deliveryMode = await _deliveryModeProperty.GetAsync(turnContext, () => null, cancellationToken); + var selectedSkill = _skillsConfig.Skills[turnContext.Activity.Text]; + var v3Bots = new List { "EchoSkillBotDotNetV3", "EchoSkillBotJSV3" }; + + if (selectedSkill != null && deliveryMode == DeliveryModes.ExpectReplies && v3Bots.Contains(selectedSkill.Id)) + { + var message = MessageFactory.Text("V3 Bots do not support 'expectReplies' delivery mode."); + await turnContext.SendActivityAsync(message, cancellationToken); + + // Forget delivery mode and skill invocation. + await _deliveryModeProperty.DeleteAsync(turnContext, cancellationToken); + await _activeSkillProperty.DeleteAsync(turnContext, cancellationToken); + + // Restart setup dialog + await _conversationState.DeleteAsync(turnContext, cancellationToken); + } + } + + await _dialog.RunAsync(turnContext, _dialogStateProperty, cancellationToken); + } + + /// + /// Processes an end of conversation activity. + /// + /// Context for the current turn of conversation. + /// CancellationToken propagates notifications that operations should be cancelled. + /// A representing the result of the asynchronous operation. + protected override async Task OnEndOfConversationActivityAsync(ITurnContext turnContext, CancellationToken cancellationToken) + { + await EndConversation((Activity)turnContext.Activity, turnContext, cancellationToken); + } + + /// + /// Processes a member added event. + /// + /// The list of members added to the conversation. + /// Context for the current turn of conversation. + /// CancellationToken propagates notifications that operations should be cancelled. + /// A representing the result of the asynchronous operation. + protected override async Task OnMembersAddedAsync(IList membersAdded, ITurnContext turnContext, CancellationToken cancellationToken) + { + foreach (var member in membersAdded) + { + if (member.Id != turnContext.Activity.Recipient.Id) + { + await turnContext.SendActivityAsync(MessageFactory.Text("Hello and welcome!"), cancellationToken); + await _dialog.RunAsync(turnContext, _dialogStateProperty, cancellationToken); + } + } + } + + /// + /// Clears storage variables and sends the end of conversation activities. + /// + /// End of conversation activity. + /// Context for the current turn of conversation. + /// CancellationToken propagates notifications that operations should be cancelled. + /// A representing the result of the asynchronous operation. + private async Task EndConversation(Activity activity, ITurnContext turnContext, CancellationToken cancellationToken) + { + // Forget delivery mode and skill invocation. + await _deliveryModeProperty.DeleteAsync(turnContext, cancellationToken); + await _activeSkillProperty.DeleteAsync(turnContext, cancellationToken); + + // Show status message, text and value returned by the skill + var eocActivityMessage = $"Received {ActivityTypes.EndOfConversation}.\n\nCode: {activity.Code}."; + if (!string.IsNullOrWhiteSpace(activity.Text)) + { + eocActivityMessage += $"\n\nText: {activity.Text}"; + } + + if (activity.Value != null) + { + eocActivityMessage += $"\n\nValue: {JsonConvert.SerializeObject(activity.Value)}"; + } + + await turnContext.SendActivityAsync(MessageFactory.Text(eocActivityMessage), cancellationToken); + + // We are back at the host. + await turnContext.SendActivityAsync(MessageFactory.Text("Back in the host bot."), cancellationToken); + + // Restart setup dialog. + await _dialog.RunAsync(turnContext, _dialogStateProperty, cancellationToken); + + await _conversationState.SaveChangesAsync(turnContext, false, cancellationToken); + } + + /// + /// Sends an activity to the skill bot. + /// + /// Context for the current turn of conversation. + /// The delivery mode to use when communicating to the skill. + /// The skill that will receive the activity. + /// CancellationToken propagates notifications that operations should be cancelled. + /// A representing the result of the asynchronous operation. + private async Task SendToSkillAsync(ITurnContext turnContext, string deliveryMode, BotFrameworkSkill targetSkill, CancellationToken cancellationToken) + { + // NOTE: Always SaveChanges() before calling a skill so that any activity generated by the skill + // will have access to current accurate state. + await _conversationState.SaveChangesAsync(turnContext, force: true, cancellationToken: cancellationToken); + + if (deliveryMode == DeliveryModes.ExpectReplies) + { + // Clone activity and update its delivery mode. + var activity = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(turnContext.Activity)); + activity.DeliveryMode = deliveryMode; + + // Route the activity to the skill. + var expectRepliesResponse = await _skillClient.PostActivityAsync(_botId, targetSkill, _skillsConfig.SkillHostEndpoint, activity, cancellationToken); + + // Check response status. + if (!expectRepliesResponse.IsSuccessStatusCode()) + { + throw new HttpRequestException($"Error invoking the skill id: \"{targetSkill.Id}\" at \"{targetSkill.SkillEndpoint}\" (status is {expectRepliesResponse.Status}). \r\n {expectRepliesResponse.Body}"); + } + + // Route response activities back to the channel. + var responseActivities = expectRepliesResponse.Body?.Activities; + + foreach (var responseActivity in responseActivities) + { + if (responseActivity.Type == ActivityTypes.EndOfConversation) + { + await EndConversation(responseActivity, turnContext, cancellationToken); + } + else + { + await turnContext.SendActivityAsync(responseActivity, cancellationToken); + } + } + } + else + { + // Route the activity to the skill. + var response = await _skillClient.PostActivityAsync(_botId, targetSkill, _skillsConfig.SkillHostEndpoint, (Activity)turnContext.Activity, cancellationToken); + + // Check response status + if (!response.IsSuccessStatusCode()) + { + throw new HttpRequestException($"Error invoking the skill id: \"{targetSkill.Id}\" at \"{targetSkill.SkillEndpoint}\" (status is {response.Status}). \r\n {response.Body}"); + } + } + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Controllers/BotController.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Controllers/BotController.cs new file mode 100644 index 0000000000..9b199e8ac7 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Controllers/BotController.cs @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Integration.AspNet.Core; + +namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot21.Controllers +{ + /// + /// This ASP Controller is created to handle a request. Dependency Injection will provide the Adapter and IBot implementation at runtime. + /// + [Route("api/messages")] + [ApiController] + public class BotController : ControllerBase + { + private readonly BotFrameworkHttpAdapter _adapter; + private readonly IBot _bot; + + /// + /// Initializes a new instance of the class. + /// + /// Adapter for the BotController. + /// Bot for the BotController. + public BotController(BotFrameworkHttpAdapter adapter, IBot bot) + { + _adapter = adapter; + _bot = bot; + } + + /// + /// Processes an HttpPost request. + /// + /// A representing the result of the asynchronous operation. + [HttpPost] + public async Task PostAsync() + { + await _adapter.ProcessAsync(Request, Response, _bot); + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Controllers/SkillController.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Controllers/SkillController.cs new file mode 100644 index 0000000000..4b6a1c7736 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Controllers/SkillController.cs @@ -0,0 +1,28 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Microsoft.AspNetCore.Mvc; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Bot.Builder.Skills; + +namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot21.Controllers +{ + /// + /// A controller that handles skill replies to the bot. + /// This example uses the that is registered as a in startup.cs. + /// + [ApiController] + [Route("api/skills")] + public class SkillController : ChannelServiceController + { + /// + /// Initializes a new instance of the class. + /// + /// The skill handler registered as ChannelServiceHandler. + public SkillController(ChannelServiceHandler handler) + : base(handler) + { + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Dialogs/SetupDialog.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Dialogs/SetupDialog.cs new file mode 100644 index 0000000000..2ae8f6aea5 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Dialogs/SetupDialog.cs @@ -0,0 +1,119 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Builder.Dialogs.Choices; +using Microsoft.Bot.Builder.Skills; +using Microsoft.Bot.Schema; +using Microsoft.BotFrameworkFunctionalTests.SimpleHostBot21.Bots; + +namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot21.Dialogs +{ + /// + /// The setup dialog for this bot. + /// + public class SetupDialog : ComponentDialog + { + private readonly IStatePropertyAccessor _deliveryModeProperty; + private readonly IStatePropertyAccessor _activeSkillProperty; + private readonly SkillsConfiguration _skillsConfig; + private string _deliveryMode; + + public SetupDialog(ConversationState conversationState, SkillsConfiguration skillsConfig) + : base(nameof(SetupDialog)) + { + _skillsConfig = skillsConfig ?? throw new ArgumentNullException(nameof(skillsConfig)); + + _deliveryModeProperty = conversationState.CreateProperty(HostBot.DeliveryModePropertyName); + _activeSkillProperty = conversationState.CreateProperty(HostBot.ActiveSkillPropertyName); + + // Define the setup dialog and its related components. + // Add ChoicePrompt to render available skills. + AddDialog(new ChoicePrompt(nameof(ChoicePrompt))); + + // Add main waterfall dialog for this bot. + var waterfallSteps = new WaterfallStep[] + { + SelectDeliveryModeStepAsync, + SelectSkillStepAsync, + FinalStepAsync + }; + AddDialog(new WaterfallDialog(nameof(WaterfallDialog), waterfallSteps)); + + InitialDialogId = nameof(WaterfallDialog); + } + + // Render a prompt to select the delivery mode to use. + private async Task SelectDeliveryModeStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + // Create the PromptOptions with the delivery modes supported. + const string messageText = "What delivery mode would you like to use?"; + const string repromptMessageText = "That was not a valid choice, please select a valid delivery mode."; + var choices = new List(); + choices.Add(new Choice(DeliveryModes.Normal)); + choices.Add(new Choice(DeliveryModes.ExpectReplies)); + var options = new PromptOptions + { + Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), + RetryPrompt = MessageFactory.Text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput), + Choices = choices + }; + + // Prompt the user to select a delivery mode. + return await stepContext.PromptAsync(nameof(ChoicePrompt), options, cancellationToken); + } + + // Render a prompt to select the skill to call. + private async Task SelectSkillStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + // Set delivery mode. + _deliveryMode = ((FoundChoice)stepContext.Result).Value; + await _deliveryModeProperty.SetAsync(stepContext.Context, ((FoundChoice)stepContext.Result).Value, cancellationToken); + + // Create the PromptOptions from the skill configuration which contains the list of configured skills. + const string messageText = "What skill would you like to call?"; + const string repromptMessageText = "That was not a valid choice, please select a valid skill."; + var options = new PromptOptions + { + Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), + RetryPrompt = MessageFactory.Text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput), + Choices = _skillsConfig.Skills.Select(skill => new Choice(skill.Key)).ToList(), + Style = ListStyle.SuggestedAction + }; + + // Prompt the user to select a skill. + return await stepContext.PromptAsync(nameof(ChoicePrompt), options, cancellationToken); + } + + // The SetupDialog has ended, we go back to the HostBot to connect with the selected skill. + private async Task FinalStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + var selectedSkillKey = ((FoundChoice)stepContext.Result).Value; + var selectedSkill = _skillsConfig.Skills.FirstOrDefault(skill => skill.Key == selectedSkillKey); + + var v3Bots = new List { "EchoSkillBotDotNetV3", "EchoSkillBotJSV3" }; + + if (_deliveryMode == DeliveryModes.ExpectReplies && v3Bots.Contains(selectedSkillKey)) + { + await stepContext.Context.SendActivityAsync(MessageFactory.Text("V3 Bots do not support 'expectReplies' delivery mode."), cancellationToken); + + // Restart setup dialog + return await stepContext.ReplaceDialogAsync(InitialDialogId, null, cancellationToken); + } + + // Set active skill + await _activeSkillProperty.SetAsync(stepContext.Context, selectedSkill.Value, cancellationToken); + + var message = MessageFactory.Text("Type anything to send to the skill.", "Type anything to send to the skill.", InputHints.ExpectingInput); + await stepContext.Context.SendActivityAsync(message, cancellationToken); + + return await stepContext.EndDialogAsync(stepContext.Values, cancellationToken); + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Program.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Program.cs new file mode 100644 index 0000000000..992a1b61a9 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Program.cs @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Microsoft.AspNetCore; +using Microsoft.AspNetCore.Hosting; + +namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot21 +{ + public class Program + { + /// + /// The entry point of the application. + /// + /// The command line args. + public static void Main(string[] args) + { + CreateWebHostBuilder(args).Build().Run(); + } + + /// + /// Creates a new instance of the class with pre-configured defaults. + /// + /// The command line args. + /// The initialized . + public static IWebHostBuilder CreateWebHostBuilder(string[] args) => + WebHost.CreateDefaultBuilder(args) + .UseStartup(); + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Properties/launchSettings.json b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Properties/launchSettings.json new file mode 100644 index 0000000000..cbde6fb474 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Properties/launchSettings.json @@ -0,0 +1,28 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:35005", + "sslPort": 0 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "SimpleHostBotDotNet21": { + "commandName": "Project", + "launchBrowser": true, + "applicationUrl": "http://localhost:35005", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/SimpleHostBot-2.1.csproj b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/SimpleHostBot-2.1.csproj new file mode 100644 index 0000000000..c0924fb1cc --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/SimpleHostBot-2.1.csproj @@ -0,0 +1,26 @@ + + + + netcoreapp2.1 + latest + Microsoft.BotFrameworkFunctionalTests.SimpleHostBot21 + Microsoft.BotFrameworkFunctionalTests.SimpleHostBot21 + + + + DEBUG;TRACE + + + + + + + + + + + Always + + + + \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/SkillsConfiguration.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/SkillsConfiguration.cs new file mode 100644 index 0000000000..ee3ef40abb --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/SkillsConfiguration.cs @@ -0,0 +1,51 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using Microsoft.Bot.Builder.Skills; +using Microsoft.Extensions.Configuration; + +namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot21 +{ + /// + /// A helper class that loads Skills information from configuration. + /// + public class SkillsConfiguration + { + /// + /// Initializes a new instance of the class to load skills information from configuration. + /// + /// The configuration properties. + public SkillsConfiguration(IConfiguration configuration) + { + var section = configuration?.GetSection("BotFrameworkSkills"); + var skills = section?.Get(); + if (skills != null) + { + foreach (var skill in skills) + { + Skills.Add(skill.Id, skill); + } + } + + var skillHostEndpoint = configuration?.GetValue(nameof(SkillHostEndpoint)); + if (!string.IsNullOrWhiteSpace(skillHostEndpoint)) + { + SkillHostEndpoint = new Uri(skillHostEndpoint); + } + } + + /// + /// Gets the URI representing the endpoint of the host bot. + /// + /// The host bot endpoint URI. + public Uri SkillHostEndpoint { get; } + + /// + /// Gets the key-value pairs with the skills bots. + /// + /// The key-value pairs with the skills bots. + public Dictionary Skills { get; } = new Dictionary(StringComparer.OrdinalIgnoreCase); + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Startup.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Startup.cs new file mode 100644 index 0000000000..afafc6d9b2 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/Startup.cs @@ -0,0 +1,99 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.BotFramework; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Bot.Builder.Integration.AspNet.Core.Skills; +using Microsoft.Bot.Builder.Skills; +using Microsoft.Bot.Connector.Authentication; +using Microsoft.BotFrameworkFunctionalTests.SimpleHostBot21.Authentication; +using Microsoft.BotFrameworkFunctionalTests.SimpleHostBot21.Bots; +using Microsoft.BotFrameworkFunctionalTests.SimpleHostBot21.Dialogs; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot21 +{ + public class Startup + { + public Startup(IConfiguration config) + { + Configuration = config; + } + + public IConfiguration Configuration { get; } + + /// + /// This method gets called by the runtime. Use this method to add services to the container. + /// + /// The collection of services to add to the container. + public void ConfigureServices(IServiceCollection services) + { + services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); + + // Configure credentials + services.AddSingleton(); + + // Register the skills configuration class + services.AddSingleton(); + + // Register AuthConfiguration to enable custom claim validation. + services.AddSingleton(sp => new AuthenticationConfiguration { ClaimsValidator = new AllowedSkillsClaimsValidator(sp.GetService()) }); + + // Register the Bot Framework Adapter with error handling enabled. + // Note: some classes use the base BotAdapter so we add an extra registration that pulls the same instance. + services.AddSingleton(); + services.AddSingleton(sp => sp.GetService()); + + // Register the skills client and skills request handler. + services.AddSingleton(); + services.AddHttpClient(); + services.AddSingleton(); + + // Register the storage we'll be using for User and Conversation state. (Memory is great for testing purposes.) + services.AddSingleton(); + + // Register Conversation state (used by the Dialog system itself). + services.AddSingleton(); + + // Create SetupDialog + services.AddSingleton(); + + // Register the bot as a transient. In this case the ASP Controller is expecting an IBot. + services.AddTransient(); + + if (!string.IsNullOrEmpty(Configuration["ChannelService"])) + { + // Register a ConfigurationChannelProvider -- this is only for Azure Gov. + services.AddSingleton(); + } + } + + /// + /// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + /// + /// The application request pipeline to be configured. + /// The web hosting environment. + public void Configure(IApplicationBuilder app, IHostingEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + else + { + app.UseHsts(); + } + + app.UseDefaultFiles(); + app.UseStaticFiles(); + + // app.UseHttpsRedirection(); + app.UseMvc(); + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/appsettings.json b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/appsettings.json new file mode 100644 index 0000000000..65cb14456e --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/appsettings.json @@ -0,0 +1,43 @@ +{ + "MicrosoftAppId": "", + "MicrosoftAppPassword": "", + "ChannelService": "", + "SkillHostEndpoint": "http://localhost:35005/api/skills/", + "BotFrameworkSkills": [ + { + "Id": "EchoSkillBotComposerDotNet", + "AppId": "", + "SkillEndpoint": "http://localhost:35410/api/messages" + }, + { + "Id": "EchoSkillBotDotNet", + "AppId": "", + "SkillEndpoint": "http://localhost:35400/api/messages" + }, + { + "Id": "EchoSkillBotDotNet21", + "AppId": "", + "SkillEndpoint": "http://localhost:35405/api/messages" + }, + { + "Id": "EchoSkillBotDotNetV3", + "AppId": "", + "SkillEndpoint": "http://localhost:35407/api/messages" + }, + { + "Id": "EchoSkillBotJS", + "AppId": "", + "SkillEndpoint": "http://localhost:36400/api/messages" + }, + { + "Id": "EchoSkillBotJSV3", + "AppId": "", + "SkillEndpoint": "http://localhost:36407/api/messages" + }, + { + "Id": "EchoSkillBotPython", + "AppId": "", + "SkillEndpoint": "http://localhost:37400/api/messages" + } + ] +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/wwwroot/default.htm b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/wwwroot/default.htm new file mode 100644 index 0000000000..39a369dfe8 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1/wwwroot/default.htm @@ -0,0 +1,420 @@ + + + + + + + SimpleHostBot-2.1DotNet + + + + + +
+
+
+
SimpleRootBotDotNet21 Bot
+
+
+
+
+
Your bot is ready!
+
You can test your bot in the Bot Framework Emulator
+ by connecting to http://localhost:3978/api/messages.
+ +
Visit Azure + Bot Service to register your bot and add it to
+ various channels. The bot's endpoint URL typically looks + like this:
+
https://your_bots_hostname/api/messages
+
+
+
+
+ +
+ + + diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/AdapterWithErrorHandler.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/AdapterWithErrorHandler.cs new file mode 100644 index 0000000000..a358155fed --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/AdapterWithErrorHandler.cs @@ -0,0 +1,155 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Bot.Builder.Integration.AspNet.Core.Skills; +using Microsoft.Bot.Builder.Skills; +using Microsoft.Bot.Builder.TraceExtensions; +using Microsoft.Bot.Connector.Authentication; +using Microsoft.Bot.Schema; +using Microsoft.BotFrameworkFunctionalTests.SimpleHostBot.Bots; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot +{ + public class AdapterWithErrorHandler : BotFrameworkHttpAdapter + { + private readonly ConversationState _conversationState; + private readonly IConfiguration _configuration; + private readonly ILogger _logger; + private readonly SkillHttpClient _skillClient; + private readonly SkillsConfiguration _skillsConfig; + + /// + /// Initializes a new instance of the class to handle errors. + /// + /// The configuration properties. + /// An instance of a logger. + /// A state management object for the conversation. + /// The HTTP client for the skills. + /// The skills configuration. + public AdapterWithErrorHandler(IConfiguration configuration, ILogger logger, ConversationState conversationState = null, SkillHttpClient skillClient = null, SkillsConfiguration skillsConfig = null) + : base(configuration, logger) + { + _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration)); + _conversationState = conversationState; + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + _skillClient = skillClient; + _skillsConfig = skillsConfig; + + OnTurnError = HandleTurnErrorAsync; + } + + /// + /// Handles the error by sending a message to the user and ending the conversation with the skill. + /// + /// Context for the current turn of conversation. + /// The handled exception. + /// A representing the result of the asynchronous operation. + private async Task HandleTurnErrorAsync(ITurnContext turnContext, Exception exception) + { + // Log any leaked exception from the application. + _logger.LogError(exception, $"[OnTurnError] unhandled error : {exception.Message}"); + + await SendErrorMessageAsync(turnContext, exception, default); + await EndSkillConversationAsync(turnContext, default); + await ClearConversationStateAsync(turnContext, default); + } + + /// + /// Sends an error message to the user and a trace activity to be displayed in the Bot Framework Emulator. + /// + /// Context for the current turn of conversation. + /// The exception to be sent in the message. + /// CancellationToken propagates notifications that operations should be cancelled. + /// A representing the result of the asynchronous operation. + private async Task SendErrorMessageAsync(ITurnContext turnContext, Exception exception, CancellationToken cancellationToken) + { + try + { + // Send a message to the user + var errorMessageText = "The bot encountered an error or bug."; + var errorMessage = MessageFactory.Text(errorMessageText, errorMessageText, InputHints.IgnoringInput); + errorMessage.Value = exception; + await turnContext.SendActivityAsync(errorMessage, cancellationToken); + + await turnContext.SendActivityAsync($"Exception: {exception.Message}"); + await turnContext.SendActivityAsync(exception.ToString()); + + errorMessageText = "To continue to run this bot, please fix the bot source code."; + errorMessage = MessageFactory.Text(errorMessageText, errorMessageText, InputHints.ExpectingInput); + await turnContext.SendActivityAsync(errorMessage, cancellationToken); + + // Send a trace activity, which will be displayed in the Bot Framework Emulator + await turnContext.TraceActivityAsync("OnTurnError Trace", exception.ToString(), "https://www.botframework.com/schemas/error", "TurnError", cancellationToken); + } + catch (Exception ex) + { + _logger.LogError(ex, $"Exception caught in SendErrorMessageAsync : {ex}"); + } + } + + /// + /// Informs to the active skill that the conversation is ended so that it has a chance to clean up. + /// + /// Context for the current turn of conversation. + /// CancellationToken propagates notifications that operations should be cancelled. + /// A representing the result of the asynchronous operation. + private async Task EndSkillConversationAsync(ITurnContext turnContext, CancellationToken cancellationToken) + { + if (_conversationState == null || _skillClient == null || _skillsConfig == null) + { + return; + } + + try + { + // Note: ActiveSkillPropertyName is set by the HostBot while messages are being + // forwarded to a Skill. + var activeSkill = await _conversationState.CreateProperty(HostBot.ActiveSkillPropertyName).GetAsync(turnContext, () => null, cancellationToken); + if (activeSkill != null) + { + var botId = _configuration.GetSection(MicrosoftAppCredentials.MicrosoftAppIdKey)?.Value; + + var endOfConversation = Activity.CreateEndOfConversationActivity(); + endOfConversation.Code = "HostSkillError"; + endOfConversation.ApplyConversationReference(turnContext.Activity.GetConversationReference(), true); + + await _conversationState.SaveChangesAsync(turnContext, true, cancellationToken); + await _skillClient.PostActivityAsync(botId, activeSkill, _skillsConfig.SkillHostEndpoint, (Activity)endOfConversation, cancellationToken); + } + } + catch (Exception ex) + { + _logger.LogError(ex, $"Exception caught on attempting to send EndOfConversation : {ex}"); + } + } + + /// + /// Deletes the conversationState for the current conversation to prevent the bot from getting stuck in an error-loop caused by being in a bad state. + /// ConversationState should be thought of as similar to "cookie-state" in a Web pages. + /// + /// Context for the current turn of conversation. + /// CancellationToken propagates notifications that operations should be cancelled. + /// A representing the result of the asynchronous operation. + private async Task ClearConversationStateAsync(ITurnContext turnContext, CancellationToken cancellationToken) + { + if (_conversationState != null) + { + try + { + await _conversationState.DeleteAsync(turnContext, cancellationToken); + } + catch (Exception ex) + { + _logger.LogError(ex, $"Exception caught on attempting to Delete ConversationState : {ex}"); + } + } + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Authentication/AllowedSkillsClaimsValidator.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Authentication/AllowedSkillsClaimsValidator.cs new file mode 100644 index 0000000000..178a1c0a47 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Authentication/AllowedSkillsClaimsValidator.cs @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Claims; +using System.Threading.Tasks; +using Microsoft.Bot.Connector.Authentication; + +namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot.Authentication +{ + /// + /// Sample claims validator that loads an allowed list from configuration if present + /// and checks that responses are coming from configured skills. + /// + public class AllowedSkillsClaimsValidator : ClaimsValidator + { + private readonly List _allowedSkills; + + /// + /// Initializes a new instance of the class. + /// Loads the appIds for the configured skills. Only allows responses from skills it has configured. + /// + /// The list of configured skills. + public AllowedSkillsClaimsValidator(SkillsConfiguration skillsConfig) + { + if (skillsConfig == null) + { + throw new ArgumentNullException(nameof(skillsConfig)); + } + + _allowedSkills = (from skill in skillsConfig.Skills.Values select skill.AppId).ToList(); + } + + /// + /// Checks that the appId claim in the skill request is in the list of skills configured for this bot. + /// + /// The list of claims to validate. + /// A task that represents the work queued to execute. + public override Task ValidateClaimsAsync(IList claims) + { + if (SkillValidation.IsSkillClaim(claims)) + { + var appId = JwtTokenValidation.GetAppIdFromClaims(claims); + if (!_allowedSkills.Contains(appId)) + { + throw new UnauthorizedAccessException($"Received a request from an application with an appID of \"{appId}\". To enable requests from this skill, add the skill to your configuration file."); + } + } + + return Task.CompletedTask; + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Bots/HostBot.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Bots/HostBot.cs new file mode 100644 index 0000000000..566610aed0 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Bots/HostBot.cs @@ -0,0 +1,242 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Builder.Integration.AspNet.Core.Skills; +using Microsoft.Bot.Builder.Skills; +using Microsoft.Bot.Connector.Authentication; +using Microsoft.Bot.Schema; +using Microsoft.BotFrameworkFunctionalTests.SimpleHostBot.Dialogs; +using Microsoft.Extensions.Configuration; +using Newtonsoft.Json; + +namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot.Bots +{ + public class HostBot : ActivityHandler + { + public const string DeliveryModePropertyName = "deliveryModeProperty"; + public const string ActiveSkillPropertyName = "activeSkillProperty"; + + private readonly IStatePropertyAccessor _deliveryModeProperty; + private readonly IStatePropertyAccessor _activeSkillProperty; + private readonly IStatePropertyAccessor _dialogStateProperty; + private readonly string _botId; + private readonly ConversationState _conversationState; + private readonly SkillHttpClient _skillClient; + private readonly SkillsConfiguration _skillsConfig; + private readonly Dialog _dialog; + + /// + /// Initializes a new instance of the class. + /// + /// A state management object for the conversation. + /// The skills configuration. + /// The HTTP client for the skills. + /// The configuration properties. + /// The dialog to use. + public HostBot(ConversationState conversationState, SkillsConfiguration skillsConfig, SkillHttpClient skillClient, IConfiguration configuration, SetupDialog dialog) + { + _conversationState = conversationState ?? throw new ArgumentNullException(nameof(conversationState)); + _skillsConfig = skillsConfig ?? throw new ArgumentNullException(nameof(skillsConfig)); + _skillClient = skillClient ?? throw new ArgumentNullException(nameof(skillClient)); + _dialog = dialog ?? throw new ArgumentNullException(nameof(dialog)); + _dialogStateProperty = _conversationState.CreateProperty("DialogState"); + if (configuration == null) + { + throw new ArgumentNullException(nameof(configuration)); + } + + _botId = configuration.GetSection(MicrosoftAppCredentials.MicrosoftAppIdKey)?.Value; + + // Create state properties to track the delivery mode and active skill. + _deliveryModeProperty = conversationState.CreateProperty(DeliveryModePropertyName); + _activeSkillProperty = conversationState.CreateProperty(ActiveSkillPropertyName); + } + + /// + public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default) + { + // Forward all activities except EndOfConversation to the active skill. + if (turnContext.Activity.Type != ActivityTypes.EndOfConversation) + { + // Try to get the active skill + var activeSkill = await _activeSkillProperty.GetAsync(turnContext, () => null, cancellationToken); + + if (activeSkill != null) + { + var deliveryMode = await _deliveryModeProperty.GetAsync(turnContext, () => null, cancellationToken); + + // Send the activity to the skill + await SendToSkillAsync(turnContext, deliveryMode, activeSkill, cancellationToken); + return; + } + } + + await base.OnTurnAsync(turnContext, cancellationToken); + + // Save any state changes that might have occurred during the turn. + await _conversationState.SaveChangesAsync(turnContext, false, cancellationToken); + } + + /// + /// Processes a message activity. + /// + /// Context for the current turn of conversation. + /// CancellationToken propagates notifications that operations should be cancelled. + /// A representing the result of the asynchronous operation. + protected override async Task OnMessageActivityAsync(ITurnContext turnContext, CancellationToken cancellationToken) + { + if (_skillsConfig.Skills.ContainsKey(turnContext.Activity.Text)) + { + var deliveryMode = await _deliveryModeProperty.GetAsync(turnContext, () => null, cancellationToken); + var selectedSkill = _skillsConfig.Skills[turnContext.Activity.Text]; + var v3Bots = new List { "EchoSkillBotDotNetV3", "EchoSkillBotJSV3" }; + + if (selectedSkill != null && deliveryMode == DeliveryModes.ExpectReplies && v3Bots.Contains(selectedSkill.Id)) + { + var message = MessageFactory.Text("V3 Bots do not support 'expectReplies' delivery mode."); + await turnContext.SendActivityAsync(message, cancellationToken); + + // Forget delivery mode and skill invocation. + await _deliveryModeProperty.DeleteAsync(turnContext, cancellationToken); + await _activeSkillProperty.DeleteAsync(turnContext, cancellationToken); + + // Restart setup dialog + await _conversationState.DeleteAsync(turnContext, cancellationToken); + } + } + + await _dialog.RunAsync(turnContext, _dialogStateProperty, cancellationToken); + } + + /// + /// Processes an end of conversation activity. + /// + /// Context for the current turn of conversation. + /// CancellationToken propagates notifications that operations should be cancelled. + /// A representing the result of the asynchronous operation. + protected override async Task OnEndOfConversationActivityAsync(ITurnContext turnContext, CancellationToken cancellationToken) + { + await EndConversation((Activity)turnContext.Activity, turnContext, cancellationToken); + } + + /// + /// Processes a member added event. + /// + /// The list of members added to the conversation. + /// Context for the current turn of conversation. + /// CancellationToken propagates notifications that operations should be cancelled. + /// A representing the result of the asynchronous operation. + protected override async Task OnMembersAddedAsync(IList membersAdded, ITurnContext turnContext, CancellationToken cancellationToken) + { + foreach (var member in membersAdded) + { + if (member.Id != turnContext.Activity.Recipient.Id) + { + await turnContext.SendActivityAsync(MessageFactory.Text("Hello and welcome!"), cancellationToken); + await _dialog.RunAsync(turnContext, _dialogStateProperty, cancellationToken); + } + } + } + + /// + /// Clears storage variables and sends the end of conversation activities. + /// + /// End of conversation activity. + /// Context for the current turn of conversation. + /// CancellationToken propagates notifications that operations should be cancelled. + /// A representing the result of the asynchronous operation. + private async Task EndConversation(Activity activity, ITurnContext turnContext, CancellationToken cancellationToken) + { + // Forget delivery mode and skill invocation. + await _deliveryModeProperty.DeleteAsync(turnContext, cancellationToken); + await _activeSkillProperty.DeleteAsync(turnContext, cancellationToken); + + // Show status message, text and value returned by the skill + var eocActivityMessage = $"Received {ActivityTypes.EndOfConversation}.\n\nCode: {activity.Code}."; + if (!string.IsNullOrWhiteSpace(activity.Text)) + { + eocActivityMessage += $"\n\nText: {activity.Text}"; + } + + if (activity.Value != null) + { + eocActivityMessage += $"\n\nValue: {JsonConvert.SerializeObject(activity.Value)}"; + } + + await turnContext.SendActivityAsync(MessageFactory.Text(eocActivityMessage), cancellationToken); + + // We are back at the host. + await turnContext.SendActivityAsync(MessageFactory.Text("Back in the host bot."), cancellationToken); + + // Restart setup dialog. + await _dialog.RunAsync(turnContext, _dialogStateProperty, cancellationToken); + + await _conversationState.SaveChangesAsync(turnContext, false, cancellationToken); + } + + /// + /// Sends an activity to the skill bot. + /// + /// Context for the current turn of conversation. + /// The delivery mode to use when communicating to the skill. + /// The skill that will receive the activity. + /// CancellationToken propagates notifications that operations should be cancelled. + /// A representing the result of the asynchronous operation. + private async Task SendToSkillAsync(ITurnContext turnContext, string deliveryMode, BotFrameworkSkill targetSkill, CancellationToken cancellationToken) + { + // NOTE: Always SaveChanges() before calling a skill so that any activity generated by the skill + // will have access to current accurate state. + await _conversationState.SaveChangesAsync(turnContext, force: true, cancellationToken: cancellationToken); + + if (deliveryMode == DeliveryModes.ExpectReplies) + { + // Clone activity and update its delivery mode. + var activity = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(turnContext.Activity)); + activity.DeliveryMode = deliveryMode; + + // Route the activity to the skill. + var expectRepliesResponse = await _skillClient.PostActivityAsync(_botId, targetSkill, _skillsConfig.SkillHostEndpoint, activity, cancellationToken); + + // Check response status. + if (!expectRepliesResponse.IsSuccessStatusCode()) + { + throw new HttpRequestException($"Error invoking the skill id: \"{targetSkill.Id}\" at \"{targetSkill.SkillEndpoint}\" (status is {expectRepliesResponse.Status}). \r\n {expectRepliesResponse.Body}"); + } + + // Route response activities back to the channel. + var responseActivities = expectRepliesResponse.Body?.Activities; + + foreach (var responseActivity in responseActivities) + { + if (responseActivity.Type == ActivityTypes.EndOfConversation) + { + await EndConversation(responseActivity, turnContext, cancellationToken); + } + else + { + await turnContext.SendActivityAsync(responseActivity, cancellationToken); + } + } + } + else + { + // Route the activity to the skill. + var response = await _skillClient.PostActivityAsync(_botId, targetSkill, _skillsConfig.SkillHostEndpoint, (Activity)turnContext.Activity, cancellationToken); + + // Check response status + if (!response.IsSuccessStatusCode()) + { + throw new HttpRequestException($"Error invoking the skill id: \"{targetSkill.Id}\" at \"{targetSkill.SkillEndpoint}\" (status is {response.Status}). \r\n {response.Body}"); + } + } + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Controllers/BotController.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Controllers/BotController.cs new file mode 100644 index 0000000000..e0a80d0dc0 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Controllers/BotController.cs @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Integration.AspNet.Core; + +namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot.Controllers +{ + /// + /// This ASP Controller is created to handle a request. Dependency Injection will provide the Adapter and IBot implementation at runtime. + /// + [Route("api/messages")] + [ApiController] + public class BotController : ControllerBase + { + private readonly BotFrameworkHttpAdapter _adapter; + private readonly IBot _bot; + + /// + /// Initializes a new instance of the class. + /// + /// Adapter for the BotController. + /// Bot for the BotController. + public BotController(BotFrameworkHttpAdapter adapter, IBot bot) + { + _adapter = adapter; + _bot = bot; + } + + /// + /// Processes an HttpPost request. + /// + /// A representing the result of the asynchronous operation. + [HttpPost] + public async Task PostAsync() + { + await _adapter.ProcessAsync(Request, Response, _bot); + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Controllers/SkillController.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Controllers/SkillController.cs new file mode 100644 index 0000000000..9f270318f6 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Controllers/SkillController.cs @@ -0,0 +1,28 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Microsoft.AspNetCore.Mvc; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Bot.Builder.Skills; + +namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot.Controllers +{ + /// + /// A controller that handles skill replies to the bot. + /// This example uses the that is registered as a in startup.cs. + /// + [ApiController] + [Route("api/skills")] + public class SkillController : ChannelServiceController + { + /// + /// Initializes a new instance of the class. + /// + /// The skill handler registered as ChannelServiceHandler. + public SkillController(ChannelServiceHandler handler) + : base(handler) + { + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Dialogs/SetupDialog.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Dialogs/SetupDialog.cs new file mode 100644 index 0000000000..86b6c6787c --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Dialogs/SetupDialog.cs @@ -0,0 +1,119 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Builder.Dialogs.Choices; +using Microsoft.Bot.Builder.Skills; +using Microsoft.Bot.Schema; +using Microsoft.BotFrameworkFunctionalTests.SimpleHostBot.Bots; + +namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot.Dialogs +{ + /// + /// The setup dialog for this bot. + /// + public class SetupDialog : ComponentDialog + { + private readonly IStatePropertyAccessor _deliveryModeProperty; + private readonly IStatePropertyAccessor _activeSkillProperty; + private readonly SkillsConfiguration _skillsConfig; + private string _deliveryMode; + + public SetupDialog(ConversationState conversationState, SkillsConfiguration skillsConfig) + : base(nameof(SetupDialog)) + { + _skillsConfig = skillsConfig ?? throw new ArgumentNullException(nameof(skillsConfig)); + + _deliveryModeProperty = conversationState.CreateProperty(HostBot.DeliveryModePropertyName); + _activeSkillProperty = conversationState.CreateProperty(HostBot.ActiveSkillPropertyName); + + // Define the setup dialog and its related components. + // Add ChoicePrompt to render available skills. + AddDialog(new ChoicePrompt(nameof(ChoicePrompt))); + + // Add main waterfall dialog for this bot. + var waterfallSteps = new WaterfallStep[] + { + SelectDeliveryModeStepAsync, + SelectSkillStepAsync, + FinalStepAsync + }; + AddDialog(new WaterfallDialog(nameof(WaterfallDialog), waterfallSteps)); + + InitialDialogId = nameof(WaterfallDialog); + } + + // Render a prompt to select the delivery mode to use. + private async Task SelectDeliveryModeStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + // Create the PromptOptions with the delivery modes supported. + const string messageText = "What delivery mode would you like to use?"; + const string repromptMessageText = "That was not a valid choice, please select a valid delivery mode."; + var choices = new List(); + choices.Add(new Choice(DeliveryModes.Normal)); + choices.Add(new Choice(DeliveryModes.ExpectReplies)); + var options = new PromptOptions + { + Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), + RetryPrompt = MessageFactory.Text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput), + Choices = choices + }; + + // Prompt the user to select a delivery mode. + return await stepContext.PromptAsync(nameof(ChoicePrompt), options, cancellationToken); + } + + // Render a prompt to select the skill to call. + private async Task SelectSkillStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + // Set delivery mode. + _deliveryMode = ((FoundChoice)stepContext.Result).Value; + await _deliveryModeProperty.SetAsync(stepContext.Context, ((FoundChoice)stepContext.Result).Value, cancellationToken); + + // Create the PromptOptions from the skill configuration which contains the list of configured skills. + const string messageText = "What skill would you like to call?"; + const string repromptMessageText = "That was not a valid choice, please select a valid skill."; + var options = new PromptOptions + { + Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), + RetryPrompt = MessageFactory.Text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput), + Choices = _skillsConfig.Skills.Select(skill => new Choice(skill.Key)).ToList(), + Style = ListStyle.SuggestedAction + }; + + // Prompt the user to select a skill. + return await stepContext.PromptAsync(nameof(ChoicePrompt), options, cancellationToken); + } + + // The SetupDialog has ended, we go back to the HostBot to connect with the selected skill. + private async Task FinalStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + var selectedSkillKey = ((FoundChoice)stepContext.Result).Value; + var selectedSkill = _skillsConfig.Skills.FirstOrDefault(skill => skill.Key == selectedSkillKey); + + var v3Bots = new List { "EchoSkillBotDotNetV3", "EchoSkillBotJSV3" }; + + if (_deliveryMode == DeliveryModes.ExpectReplies && v3Bots.Contains(selectedSkillKey)) + { + await stepContext.Context.SendActivityAsync(MessageFactory.Text("V3 Bots do not support 'expectReplies' delivery mode."), cancellationToken); + + // Restart setup dialog + return await stepContext.ReplaceDialogAsync(InitialDialogId, null, cancellationToken); + } + + // Set active skill + await _activeSkillProperty.SetAsync(stepContext.Context, selectedSkill.Value, cancellationToken); + + var message = MessageFactory.Text("Type anything to send to the skill.", "Type anything to send to the skill.", InputHints.ExpectingInput); + await stepContext.Context.SendActivityAsync(message, cancellationToken); + + return await stepContext.EndDialogAsync(stepContext.Values, cancellationToken); + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Program.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Program.cs new file mode 100644 index 0000000000..fb92b18353 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Program.cs @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; + +namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot +{ + public class Program + { + /// + /// The entry point of the application. + /// + /// The command line args. + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + /// + /// Creates a new instance of the class with pre-configured defaults. + /// + /// The command line args. + /// The initialized . + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }); + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Properties/launchSettings.json b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Properties/launchSettings.json new file mode 100644 index 0000000000..e660cda730 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Properties/launchSettings.json @@ -0,0 +1,28 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:35000", + "sslPort": 0 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "SimpleHostBotDotNet": { + "commandName": "Project", + "launchBrowser": true, + "applicationUrl": "http://localhost:35000", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/SimpleHostBot.csproj b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/SimpleHostBot.csproj new file mode 100644 index 0000000000..5f112edd07 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/SimpleHostBot.csproj @@ -0,0 +1,29 @@ + + + + netcoreapp3.1 + latest + Microsoft.BotFrameworkFunctionalTests.SimpleHostBot + Microsoft.BotFrameworkFunctionalTests.SimpleHostBot + + + + DEBUG;TRACE + + + + + + + + + + + Always + + + Always + + + + \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/SkillsConfiguration.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/SkillsConfiguration.cs new file mode 100644 index 0000000000..aa1989900b --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/SkillsConfiguration.cs @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using Microsoft.Bot.Builder.Skills; +using Microsoft.Extensions.Configuration; + +namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot +{ + /// + /// A helper class that loads Skills information from configuration. + /// + public class SkillsConfiguration + { + /// + /// Initializes a new instance of the class to load skills information from configuration. + /// + /// The configuration properties. + public SkillsConfiguration(IConfiguration configuration) + { + var section = configuration?.GetSection("BotFrameworkSkills"); + var skills = section?.Get(); + if (skills != null) + { + foreach (var skill in skills) + { + Skills.Add(skill.Id, skill); + } + } + + var skillHostEndpoint = configuration?.GetValue(nameof(SkillHostEndpoint)); + if (!string.IsNullOrWhiteSpace(skillHostEndpoint)) + { + SkillHostEndpoint = new Uri(skillHostEndpoint); + } + } + + /// + /// Gets the URI representing the endpoint of the host bot. + /// + /// + /// The URI representing the endpoint of the host bot. + /// + public Uri SkillHostEndpoint { get; } + + /// + /// Gets the key-value pairs with the skills bots. + /// + /// + /// The key-value pairs with the skills bots. + /// + public Dictionary Skills { get; } = new Dictionary(StringComparer.OrdinalIgnoreCase); + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Startup.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Startup.cs new file mode 100644 index 0000000000..42879f11f9 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Startup.cs @@ -0,0 +1,99 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.BotFramework; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Bot.Builder.Integration.AspNet.Core.Skills; +using Microsoft.Bot.Builder.Skills; +using Microsoft.Bot.Connector.Authentication; +using Microsoft.BotFrameworkFunctionalTests.SimpleHostBot.Authentication; +using Microsoft.BotFrameworkFunctionalTests.SimpleHostBot.Bots; +using Microsoft.BotFrameworkFunctionalTests.SimpleHostBot.Dialogs; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot +{ + public class Startup + { + public Startup(IConfiguration config) + { + Configuration = config; + } + + public IConfiguration Configuration { get; } + + /// + /// This method gets called by the runtime. Use this method to add services to the container. + /// + /// The collection of services to add to the container. + public void ConfigureServices(IServiceCollection services) + { + services.AddControllers().AddNewtonsoftJson(); + + // Configure credentials + services.AddSingleton(); + + // Register the skills configuration class + services.AddSingleton(); + + // Register AuthConfiguration to enable custom claim validation. + services.AddSingleton(sp => new AuthenticationConfiguration { ClaimsValidator = new AllowedSkillsClaimsValidator(sp.GetService()) }); + + // Register the Bot Framework Adapter with error handling enabled. + // Note: some classes use the base BotAdapter so we add an extra registration that pulls the same instance. + services.AddSingleton(); + services.AddSingleton(sp => sp.GetService()); + + // Register the skills client and skills request handler. + services.AddSingleton(); + services.AddHttpClient(); + services.AddSingleton(); + + // Register the storage we'll be using for User and Conversation state. (Memory is great for testing purposes.) + services.AddSingleton(); + + // Register Conversation state (used by the Dialog system itself). + services.AddSingleton(); + + // Create SetupDialog + services.AddSingleton(); + + // Register the bot as a transient. In this case the ASP Controller is expecting an IBot. + services.AddTransient(); + + if (!string.IsNullOrEmpty(Configuration["ChannelService"])) + { + // Register a ConfigurationChannelProvider -- this is only for Azure Gov. + services.AddSingleton(); + } + } + + /// + /// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + /// + /// The application request pipeline to be configured. + /// The web hosting environment. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseDefaultFiles() + .UseStaticFiles() + .UseRouting() + .UseAuthorization() + .UseEndpoints(endpoints => + { + endpoints.MapControllers(); + }); + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/appsettings.json b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/appsettings.json new file mode 100644 index 0000000000..ba463c7c36 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/appsettings.json @@ -0,0 +1,43 @@ +{ + "MicrosoftAppId": "", + "MicrosoftAppPassword": "", + "ChannelService": "", + "SkillHostEndpoint": "http://localhost:35000/api/skills/", + "BotFrameworkSkills": [ + { + "Id": "EchoSkillBotComposerDotNet", + "AppId": "", + "SkillEndpoint": "http://localhost:35410/api/messages" + }, + { + "Id": "EchoSkillBotDotNet", + "AppId": "", + "SkillEndpoint": "http://localhost:35400/api/messages" + }, + { + "Id": "EchoSkillBotDotNet21", + "AppId": "", + "SkillEndpoint": "http://localhost:35405/api/messages" + }, + { + "Id": "EchoSkillBotDotNetV3", + "AppId": "", + "SkillEndpoint": "http://localhost:35407/api/messages" + }, + { + "Id": "EchoSkillBotJS", + "AppId": "", + "SkillEndpoint": "http://localhost:36400/api/messages" + }, + { + "Id": "EchoSkillBotJSV3", + "AppId": "", + "SkillEndpoint": "http://localhost:36407/api/messages" + }, + { + "Id": "EchoSkillBotPython", + "AppId": "", + "SkillEndpoint": "http://localhost:37400/api/messages" + } + ] +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/wwwroot/default.htm b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/wwwroot/default.htm new file mode 100644 index 0000000000..8d163da5a0 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/wwwroot/default.htm @@ -0,0 +1,420 @@ + + + + + + + SimpleHostBotDotNet + + + + + +
+
+
+
SimpleRootBotDotNet Bot
+
+
+
+
+
Your bot is ready!
+
You can test your bot in the Bot Framework Emulator
+ by connecting to http://localhost:3978/api/messages.
+ +
Visit Azure + Bot Service to register your bot and add it to
+ various channels. The bot's endpoint URL typically looks + like this:
+
https://your_bots_hostname/api/messages
+
+
+
+
+ +
+ + + \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/AdapterWithErrorHandler.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/AdapterWithErrorHandler.cs new file mode 100644 index 0000000000..1658551aea --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/AdapterWithErrorHandler.cs @@ -0,0 +1,124 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Bot.Builder.Integration.AspNet.Core.Skills; +using Microsoft.Bot.Builder.Skills; +using Microsoft.Bot.Builder.TraceExtensions; +using Microsoft.Bot.Connector.Authentication; +using Microsoft.Bot.Schema; +using Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Dialogs; +using Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Middleware; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot +{ + public class AdapterWithErrorHandler : BotFrameworkHttpAdapter + { + private readonly IConfiguration _configuration; + private readonly ConversationState _conversationState; + private readonly ILogger _logger; + private readonly SkillHttpClient _skillClient; + private readonly SkillsConfiguration _skillsConfig; + + public AdapterWithErrorHandler(IConfiguration configuration, ILogger logger, ConversationState conversationState, SkillHttpClient skillClient = null, SkillsConfiguration skillsConfig = null) + : base(configuration, logger) + { + _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration)); + _conversationState = conversationState ?? throw new ArgumentNullException(nameof(conversationState)); + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + _skillClient = skillClient; + _skillsConfig = skillsConfig; + + OnTurnError = HandleTurnError; + Use(new LoggerMiddleware(logger)); + } + + private async Task HandleTurnError(ITurnContext turnContext, Exception exception) + { + // Log any leaked exception from the application. + _logger.LogError(exception, $"[OnTurnError] unhandled error : {exception.Message}"); + + await SendErrorMessageAsync(turnContext, exception); + await EndSkillConversationAsync(turnContext); + await ClearConversationStateAsync(turnContext); + } + + private async Task SendErrorMessageAsync(ITurnContext turnContext, Exception exception) + { + try + { + // Send a message to the user. + var errorMessageText = "The bot encountered an error or bug."; + var errorMessage = MessageFactory.Text(errorMessageText, errorMessageText, InputHints.IgnoringInput); + errorMessage.Value = exception; + await turnContext.SendActivityAsync(errorMessage); + + await turnContext.SendActivityAsync($"Exception: {exception.Message}"); + await turnContext.SendActivityAsync(exception.ToString()); + + errorMessageText = "To continue to run this bot, please fix the bot source code."; + errorMessage = MessageFactory.Text(errorMessageText, errorMessageText, InputHints.ExpectingInput); + await turnContext.SendActivityAsync(errorMessage); + + // Send a trace activity, which will be displayed in the Bot Framework Emulator. + await turnContext.TraceActivityAsync("OnTurnError Trace", exception.ToString(), "https://www.botframework.com/schemas/error", "TurnError"); + } + catch (Exception ex) + { + _logger.LogError(ex, $"Exception caught in SendErrorMessageAsync : {ex}"); + } + } + + private async Task EndSkillConversationAsync(ITurnContext turnContext) + { + if (_skillClient == null || _skillsConfig == null) + { + return; + } + + try + { + // Inform the active skill that the conversation is ended so that it has a chance to clean up. + // Note: the root bot manages the ActiveSkillPropertyName, which has a value while the root bot + // has an active conversation with a skill. + var activeSkill = await _conversationState.CreateProperty(MainDialog.ActiveSkillPropertyName).GetAsync(turnContext, () => null); + if (activeSkill != null) + { + var botId = _configuration.GetSection(MicrosoftAppCredentials.MicrosoftAppIdKey)?.Value; + + var endOfConversation = Activity.CreateEndOfConversationActivity(); + endOfConversation.Code = "RootSkillError"; + endOfConversation.ApplyConversationReference(turnContext.Activity.GetConversationReference(), true); + + await _conversationState.SaveChangesAsync(turnContext, true); + await _skillClient.PostActivityAsync(botId, activeSkill, _skillsConfig.SkillHostEndpoint, (Activity)endOfConversation, CancellationToken.None); + } + } + catch (Exception ex) + { + _logger.LogError(ex, $"Exception caught on attempting to send EndOfConversation : {ex}"); + } + } + + private async Task ClearConversationStateAsync(ITurnContext turnContext) + { + try + { + // Delete the conversationState for the current conversation to prevent the + // bot from getting stuck in a error-loop caused by being in a bad state. + // ConversationState should be thought of as similar to "cookie-state" for a Web page. + await _conversationState.DeleteAsync(turnContext); + } + catch (Exception ex) + { + _logger.LogError(ex, $"Exception caught on attempting to Delete ConversationState : {ex}"); + } + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Authentication/AllowedSkillsClaimsValidator.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Authentication/AllowedSkillsClaimsValidator.cs new file mode 100644 index 0000000000..42594c3c85 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Authentication/AllowedSkillsClaimsValidator.cs @@ -0,0 +1,47 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Claims; +using System.Threading.Tasks; +using Microsoft.Bot.Connector.Authentication; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Authentication +{ + /// + /// Sample claims validator that loads an allowed list from configuration if present + /// and checks that responses are coming from configured skills. + /// + public class AllowedSkillsClaimsValidator : ClaimsValidator + { + private readonly List _allowedSkills; + + public AllowedSkillsClaimsValidator(SkillsConfiguration skillsConfig) + { + if (skillsConfig == null) + { + throw new ArgumentNullException(nameof(skillsConfig)); + } + + // Load the appIds for the configured skills (we will only allow responses from skills we have configured). + _allowedSkills = (from skill in skillsConfig.Skills.Values select skill.AppId).ToList(); + } + + public override Task ValidateClaimsAsync(IList claims) + { + if (SkillValidation.IsSkillClaim(claims)) + { + // Check that the appId claim in the skill request is in the list of skills configured for this bot. + var appId = JwtTokenValidation.GetAppIdFromClaims(claims); + if (!_allowedSkills.Contains(appId)) + { + throw new UnauthorizedAccessException($"Received a request from an application with an appID of \"{appId}\". To enable requests from this skill, add the skill to your configuration file."); + } + } + + return Task.CompletedTask; + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Bots/RootBot.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Bots/RootBot.cs new file mode 100644 index 0000000000..75b20d5c30 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Bots/RootBot.cs @@ -0,0 +1,80 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Collections.Generic; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Schema; +using Newtonsoft.Json; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Bots +{ + public class RootBot : ActivityHandler + where T : Dialog + { + private readonly ConversationState _conversationState; + private readonly Dialog _mainDialog; + + public RootBot(ConversationState conversationState, T mainDialog) + { + _conversationState = conversationState; + _mainDialog = mainDialog; + } + + public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default) + { + if (turnContext.Activity.Type == ActivityTypes.ConversationUpdate) + { + // Let the base class handle the activity (this will trigger OnMembersAdded). + await base.OnTurnAsync(turnContext, cancellationToken); + } + else + { + // Run the Dialog with the Activity. + await _mainDialog.RunAsync(turnContext, _conversationState.CreateProperty("DialogState"), cancellationToken); + } + + // Save any state changes that might have occurred during the turn. + await _conversationState.SaveChangesAsync(turnContext, false, cancellationToken); + } + + protected override async Task OnMembersAddedAsync(IList membersAdded, ITurnContext turnContext, CancellationToken cancellationToken) + { + foreach (var member in membersAdded) + { + // Greet anyone that was not the target (recipient) of this message. + // To learn more about Adaptive Cards, see https://aka.ms/msbot-adaptivecards. + if (member.Id != turnContext.Activity.Recipient.Id) + { + var welcomeCard = CreateAdaptiveCardAttachment(); + var activity = MessageFactory.Attachment(welcomeCard); + activity.Speak = "Welcome to the waterfall host bot"; + await turnContext.SendActivityAsync(activity, cancellationToken); + await _mainDialog.RunAsync(turnContext, _conversationState.CreateProperty("DialogState"), cancellationToken); + } + } + } + + // Load attachment from embedded resource. + private Attachment CreateAdaptiveCardAttachment() + { + var cardResourcePath = "Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Cards.welcomeCard.json"; + + using (var stream = GetType().Assembly.GetManifestResourceStream(cardResourcePath)) + { + using (var reader = new StreamReader(stream)) + { + var adaptiveCard = reader.ReadToEnd(); + return new Attachment + { + ContentType = "application/vnd.microsoft.card.adaptive", + Content = JsonConvert.DeserializeObject(adaptiveCard) + }; + } + } + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Cards/welcomeCard.json b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Cards/welcomeCard.json new file mode 100644 index 0000000000..1fc98a2237 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Cards/welcomeCard.json @@ -0,0 +1,29 @@ +{ + "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", + "type": "AdaptiveCard", + "version": "1.0", + "body": [ + { + "type": "Image", + "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQtB3AwMUeNoq4gUBGe6Ocj8kyh3bXa9ZbV7u1fVKQoyKFHdkqU", + "size": "stretch" + }, + { + "type": "TextBlock", + "spacing": "Medium", + "size": "Medium", + "weight": "Bolder", + "text": "Welcome to the Skill Dialog Sample!", + "wrap": true, + "maxLines": 0, + "color": "Accent" + }, + { + "type": "TextBlock", + "size": "default", + "text": "This sample allows you to connect to a skill using a SkillDialog and invoke several actions.", + "wrap": true, + "maxLines": 0 + } + ] +} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Controllers/BotController.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Controllers/BotController.cs new file mode 100644 index 0000000000..dcf63dabd6 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Controllers/BotController.cs @@ -0,0 +1,48 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Extensions.Logging; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Controllers +{ + // This ASP Controller is created to handle a request. Dependency injection will provide the Adapter and IBot + // implementation at runtime. Multiple different IBot implementations running at different endpoints can be + // achieved by specifying a more specific type for the bot constructor argument. + [Route("api/messages")] + [ApiController] + public class BotController : ControllerBase + { + private readonly IBotFrameworkHttpAdapter _adapter; + private readonly IBot _bot; + private readonly ILogger _logger; + + public BotController(BotFrameworkHttpAdapter adapter, IBot bot, ILogger logger) + { + _adapter = adapter; + _bot = bot; + _logger = logger; + } + + [HttpPost] + [HttpGet] + public async Task PostAsync() + { + try + { + // Delegate the processing of the HTTP POST to the adapter. + // The adapter will invoke the bot. + await _adapter.ProcessAsync(Request, Response, _bot); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error processing request"); + throw; + } + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Controllers/SkillController.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Controllers/SkillController.cs new file mode 100644 index 0000000000..82e404550b --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Controllers/SkillController.cs @@ -0,0 +1,83 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Bot.Builder.Skills; +using Microsoft.Bot.Schema; +using Microsoft.Extensions.Logging; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Controllers +{ + /// + /// A controller that handles skill replies to the bot. + /// This example uses the that is registered as a in startup.cs. + /// + [ApiController] + [Route("api/skills")] + public class SkillController : ChannelServiceController + { + private readonly ILogger _logger; + + public SkillController(ChannelServiceHandler handler, ILogger logger) + : base(handler) + { + _logger = logger; + } + + public override Task ReplyToActivityAsync(string conversationId, string activityId, Activity activity) + { + try + { + return base.ReplyToActivityAsync(conversationId, activityId, activity); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error processing request"); + throw; + } + } + + public override Task SendToConversationAsync(string conversationId, Activity activity) + { + try + { + return base.SendToConversationAsync(conversationId, activity); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error processing request"); + throw; + } + } + + public override Task UpdateActivityAsync(string conversationId, string activityId, Activity activity) + { + try + { + return base.UpdateActivityAsync(conversationId, activityId, activity); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error processing request"); + throw; + } + } + + public override Task DeleteActivityAsync(string conversationId, string activityId) + { + try + { + return base.DeleteActivityAsync(conversationId, activityId); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error processing request"); + throw; + } + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/MainDialog.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/MainDialog.cs new file mode 100644 index 0000000000..17b08d3f58 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/MainDialog.cs @@ -0,0 +1,345 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Builder.Dialogs.Choices; +using Microsoft.Bot.Builder.Integration.AspNet.Core.Skills; +using Microsoft.Bot.Builder.Skills; +using Microsoft.Bot.Connector.Authentication; +using Microsoft.Bot.Schema; +using Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Dialogs.Sso; +using Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Skills; +using Microsoft.Extensions.Configuration; +using Newtonsoft.Json; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Dialogs +{ + /// + /// The main dialog for this bot. It uses a to call skills. + /// + public class MainDialog : ComponentDialog + { + // State property key that stores the active skill (used in AdapterWithErrorHandler to terminate the skills on error). + public static readonly string ActiveSkillPropertyName = $"{typeof(MainDialog).FullName}.ActiveSkillProperty"; + + private const string SsoDialogPrefix = "Sso"; + private readonly IStatePropertyAccessor _activeSkillProperty; + private readonly string _deliveryMode = $"{typeof(MainDialog).FullName}.DeliveryMode"; + private readonly string _selectedSkillKey = $"{typeof(MainDialog).FullName}.SelectedSkillKey"; + private readonly SkillsConfiguration _skillsConfig; + private readonly IConfiguration _configuration; + + // Dependency injection uses this constructor to instantiate MainDialog. + public MainDialog(ConversationState conversationState, SkillConversationIdFactoryBase conversationIdFactory, SkillHttpClient skillClient, SkillsConfiguration skillsConfig, IConfiguration configuration) + : base(nameof(MainDialog)) + { + _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration)); + + var botId = configuration.GetSection(MicrosoftAppCredentials.MicrosoftAppIdKey)?.Value; + + _skillsConfig = skillsConfig ?? throw new ArgumentNullException(nameof(skillsConfig)); + + if (skillClient == null) + { + throw new ArgumentNullException(nameof(skillClient)); + } + + if (conversationState == null) + { + throw new ArgumentNullException(nameof(conversationState)); + } + + // Create state property to track the active skill. + _activeSkillProperty = conversationState.CreateProperty(ActiveSkillPropertyName); + + // Register the tangent dialog for testing tangents and resume + AddDialog(new TangentDialog()); + + // Create and add SkillDialog instances for the configured skills. + AddSkillDialogs(conversationState, conversationIdFactory, skillClient, skillsConfig, botId); + + // Add ChoicePrompt to render available delivery modes. + AddDialog(new ChoicePrompt("DeliveryModePrompt")); + + // Add ChoicePrompt to render available groups of skills. + AddDialog(new ChoicePrompt("SkillGroupPrompt")); + + // Add ChoicePrompt to render available skills. + AddDialog(new ChoicePrompt("SkillPrompt")); + + // Add ChoicePrompt to render skill actions. + AddDialog(new ChoicePrompt("SkillActionPrompt")); + + // Special case: register SSO dialogs for skills that support SSO actions. + AddSsoDialogs(configuration); + + // Add main waterfall dialog for this bot. + var waterfallSteps = new WaterfallStep[] + { + SelectDeliveryModeStepAsync, + SelectSkillGroupStepAsync, + SelectSkillStepAsync, + SelectSkillActionStepAsync, + CallSkillActionStepAsync, + FinalStepAsync + }; + AddDialog(new WaterfallDialog(nameof(WaterfallDialog), waterfallSteps)); + + // The initial child Dialog to run. + InitialDialogId = nameof(WaterfallDialog); + } + + /// + /// This override is used to test the "abort" command to interrupt skills from the parent and + /// also to test the "tangent" command to start a tangent and resume a skill. + /// + /// The inner for the current turn of conversation. + /// A cancellation token that can be used by other objects + /// or threads to receive notice of cancellation. + /// A representing the asynchronous operation. + protected override async Task OnContinueDialogAsync(DialogContext innerDc, CancellationToken cancellationToken = default) + { + // This is an example on how to cancel a SkillDialog that is currently in progress from the parent bot. + var activeSkill = await _activeSkillProperty.GetAsync(innerDc.Context, () => null, cancellationToken); + var activity = innerDc.Context.Activity; + if (activeSkill != null && activity.Type == ActivityTypes.Message && !string.IsNullOrWhiteSpace(activity.Text) && activity.Text.Equals("abort", StringComparison.CurrentCultureIgnoreCase)) + { + // Cancel all dialogs when the user says abort. + // The SkillDialog automatically sends an EndOfConversation message to the skill to let the + // skill know that it needs to end its current dialogs, too. + await innerDc.CancelAllDialogsAsync(cancellationToken); + return await innerDc.ReplaceDialogAsync(InitialDialogId, "Canceled! \n\n What delivery mode would you like to use?", cancellationToken); + } + + // Sample to test a tangent when in the middle of a skill conversation. + if (activeSkill != null && activity.Type == ActivityTypes.Message && !string.IsNullOrWhiteSpace(activity.Text) && activity.Text.Equals("tangent", StringComparison.CurrentCultureIgnoreCase)) + { + // Start tangent. + return await innerDc.BeginDialogAsync(nameof(TangentDialog), cancellationToken: cancellationToken); + } + + return await base.OnContinueDialogAsync(innerDc, cancellationToken); + } + + // Render a prompt to select the delivery mode to use. + private async Task SelectDeliveryModeStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + // Create the PromptOptions with the delivery modes supported. + var messageText = stepContext.Options?.ToString() ?? "What delivery mode would you like to use?"; + const string retryMessageText = "That was not a valid choice, please select a valid delivery mode."; + var choices = new List + { + new Choice(DeliveryModes.Normal), + new Choice(DeliveryModes.ExpectReplies) + }; + var options = new PromptOptions + { + Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), + RetryPrompt = MessageFactory.Text(retryMessageText, retryMessageText, InputHints.ExpectingInput), + Choices = choices + }; + + // Prompt the user to select a delivery mode. + return await stepContext.PromptAsync("DeliveryModePrompt", options, cancellationToken); + } + + // Render a prompt to select the group of skills to use. + private async Task SelectSkillGroupStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + // Remember the delivery mode selected by the user. + stepContext.Values[_deliveryMode] = ((FoundChoice)stepContext.Result).Value; + + // Create the PromptOptions with the types of supported skills. + const string messageText = "What group of skills would you like to use?"; + const string retryMessageText = "That was not a valid choice, please select a valid skill group."; + + // Use linq to get a list of the groups for the skills in skillsConfig. + var choices = _skillsConfig.Skills + .GroupBy(skill => skill.Value.Group) + .Select(skillGroup => new Choice(skillGroup.First().Value.Group)) + .ToList(); + + var options = new PromptOptions + { + Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), + RetryPrompt = MessageFactory.Text(retryMessageText, retryMessageText, InputHints.ExpectingInput), + Choices = choices + }; + + // Prompt the user to select a type of skill. + return await stepContext.PromptAsync("SkillGroupPrompt", options, cancellationToken); + } + + // Render a prompt to select the skill to call. + private async Task SelectSkillStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + var skillGroup = ((FoundChoice)stepContext.Result).Value; + + // Create the PromptOptions from the skill configuration which contain the list of configured skills. + const string messageText = "What skill would you like to call?"; + const string retryMessageText = "That was not a valid choice, please select a valid skill."; + + // Use linq to return the skills for the selected group. + var choices = _skillsConfig.Skills + .Where(skill => skill.Value.Group == skillGroup) + .Select(skill => new Choice(skill.Value.Id)) + .ToList(); + + var options = new PromptOptions + { + Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), + RetryPrompt = MessageFactory.Text(retryMessageText, retryMessageText, InputHints.ExpectingInput), + Choices = choices + }; + + // Prompt the user to select a skill. + return await stepContext.PromptAsync("SkillPrompt", options, cancellationToken); + } + + // Render a prompt to select the begin action for the skill. + private async Task SelectSkillActionStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + // Get the skill info based on the selected skill. + var selectedSkillId = ((FoundChoice)stepContext.Result).Value; + var deliveryMode = stepContext.Values[_deliveryMode].ToString(); + var v3Bots = new List { "EchoSkillBotDotNetV3", "EchoSkillBotJSV3" }; + + // Exclude v3 bots from ExpectReplies + if (deliveryMode == DeliveryModes.ExpectReplies && v3Bots.Contains(selectedSkillId)) + { + await stepContext.Context.SendActivityAsync(MessageFactory.Text("V3 Bots do not support 'expectReplies' delivery mode."), cancellationToken); + + // Restart setup dialog + return await stepContext.ReplaceDialogAsync(InitialDialogId, null, cancellationToken); + } + + var selectedSkill = _skillsConfig.Skills.FirstOrDefault(keyValuePair => keyValuePair.Value.Id == selectedSkillId).Value; + + // Remember the skill selected by the user. + stepContext.Values[_selectedSkillKey] = selectedSkill; + + var skillActionChoices = selectedSkill.GetActions().Select(action => new Choice(action)).ToList(); + if (skillActionChoices.Count == 1) + { + // The skill only supports one action (e.g. Echo), skip the prompt. + return await stepContext.NextAsync(new FoundChoice { Value = skillActionChoices[0].Value }, cancellationToken); + } + + // Create the PromptOptions with the actions supported by the selected skill. + var messageText = $"Select an action to send to **{selectedSkill.Id}**."; + var options = new PromptOptions + { + Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), + Choices = skillActionChoices + }; + + // Prompt the user to select a skill action. + return await stepContext.PromptAsync("SkillActionPrompt", options, cancellationToken); + } + + // Starts the SkillDialog based on the user's selections. + private async Task CallSkillActionStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + var selectedSkill = (SkillDefinition)stepContext.Values[_selectedSkillKey]; + + // Save active skill in state. + await _activeSkillProperty.SetAsync(stepContext.Context, selectedSkill, cancellationToken); + + // Create the initial activity to call the skill. + var skillActivity = selectedSkill.CreateBeginActivity(((FoundChoice)stepContext.Result).Value); + if (skillActivity.Name == "Sso") + { + // Special case, we start the SSO dialog to prepare the host to call the skill. + return await stepContext.BeginDialogAsync($"{SsoDialogPrefix}{selectedSkill.Id}", cancellationToken: cancellationToken); + } + + // We are manually creating the activity to send to the skill; ensure we add the ChannelData and Properties + // from the original activity so the skill gets them. + // Note: this is not necessary if we are just forwarding the current activity from context. + skillActivity.ChannelData = stepContext.Context.Activity.ChannelData; + skillActivity.Properties = stepContext.Context.Activity.Properties; + + // Create the BeginSkillDialogOptions and assign the activity to send. + var skillDialogArgs = new BeginSkillDialogOptions { Activity = skillActivity }; + + if (stepContext.Values[_deliveryMode].ToString() == DeliveryModes.ExpectReplies) + { + skillDialogArgs.Activity.DeliveryMode = DeliveryModes.ExpectReplies; + } + + // Start the skillDialog instance with the arguments. + return await stepContext.BeginDialogAsync(selectedSkill.Id, skillDialogArgs, cancellationToken); + } + + // The SkillDialog has ended, render the results (if any) and restart MainDialog. + private async Task FinalStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + var activeSkill = await _activeSkillProperty.GetAsync(stepContext.Context, () => null, cancellationToken); + + // Check if the skill returned any results and display them. + if (stepContext.Result != null) + { + var message = $"Skill \"{activeSkill.Id}\" invocation complete."; + message += $" Result: {JsonConvert.SerializeObject(stepContext.Result)}"; + await stepContext.Context.SendActivityAsync(MessageFactory.Text(message, message, inputHint: InputHints.IgnoringInput), cancellationToken: cancellationToken); + } + + // Clear the delivery mode selected by the user. + stepContext.Values[_deliveryMode] = null; + + // Clear the skill selected by the user. + stepContext.Values[_selectedSkillKey] = null; + + // Clear active skill in state. + await _activeSkillProperty.DeleteAsync(stepContext.Context, cancellationToken); + + // Restart the main dialog with a different message the second time around. + return await stepContext.ReplaceDialogAsync(InitialDialogId, $"Done with \"{activeSkill.Id}\". \n\n What delivery mode would you like to use?", cancellationToken); + } + + // Helper method that creates and adds SkillDialog instances for the configured skills. + private void AddSkillDialogs(ConversationState conversationState, SkillConversationIdFactoryBase conversationIdFactory, SkillHttpClient skillClient, SkillsConfiguration skillsConfig, string botId) + { + foreach (var skillInfo in _skillsConfig.Skills.Values) + { + // Create the dialog options. + var skillDialogOptions = new SkillDialogOptions + { + BotId = botId, + ConversationIdFactory = conversationIdFactory, + SkillClient = skillClient, + SkillHostEndpoint = skillsConfig.SkillHostEndpoint, + ConversationState = conversationState, + Skill = skillInfo + }; + + // Add a SkillDialog for the selected skill. + AddDialog(new SkillDialog(skillDialogOptions, skillInfo.Id)); + } + } + + // Special case. + // SSO needs a dialog in the host to allow the user to sign in. + // We create and several SsoDialog instances for each skill that supports SSO. + private void AddSsoDialogs(IConfiguration configuration) + { + var connectionName = configuration.GetSection("SsoConnectionName")?.Value; + foreach (var ssoSkillDialog in Dialogs.GetDialogs().Where(dialog => dialog.Id.StartsWith("WaterfallSkillBot")).ToList()) + { + AddDialog(new SsoDialog($"{SsoDialogPrefix}{ssoSkillDialog.Id}", ssoSkillDialog, connectionName)); + } + + connectionName = configuration.GetSection("SsoConnectionNameTeams")?.Value; + foreach (var ssoSkillDialog in Dialogs.GetDialogs().Where(dialog => dialog.Id.StartsWith("TeamsSkillBot")).ToList()) + { + AddDialog(new SsoDialog($"{SsoDialogPrefix}{ssoSkillDialog.Id}", ssoSkillDialog, connectionName)); + } + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/Sso/SsoDialog.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/Sso/SsoDialog.cs new file mode 100644 index 0000000000..9e88adc417 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/Sso/SsoDialog.cs @@ -0,0 +1,141 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Builder.Dialogs.Choices; +using Microsoft.Bot.Schema; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Dialogs.Sso +{ + /// + /// Helps prepare the host for SSO operations and provides helpers to check the status and invoke the skill. + /// + public class SsoDialog : ComponentDialog + { + private readonly string _connectionName; + private readonly string _skillDialogId; + + public SsoDialog(string dialogId, Dialog ssoSkillDialog, string connectionName) + : base(dialogId) + { + _connectionName = connectionName; + _skillDialogId = ssoSkillDialog.Id; + + AddDialog(new ChoicePrompt("ActionStepPrompt")); + AddDialog(new SsoSignInDialog(_connectionName)); + AddDialog(ssoSkillDialog); + + var waterfallSteps = new WaterfallStep[] + { + PromptActionStepAsync, + HandleActionStepAsync, + PromptFinalStepAsync, + }; + + AddDialog(new WaterfallDialog(nameof(WaterfallDialog), waterfallSteps)); + + InitialDialogId = nameof(WaterfallDialog); + } + + private async Task PromptActionStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + var messageText = "What SSO action do you want to perform?"; + var repromptMessageText = "That was not a valid choice, please select a valid choice."; + var options = new PromptOptions + { + Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), + RetryPrompt = MessageFactory.Text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput), + Choices = await GetPromptChoicesAsync(stepContext, cancellationToken) + }; + + // Prompt the user to select a skill. + return await stepContext.PromptAsync("ActionStepPrompt", options, cancellationToken); + } + + // Create the prompt choices based on the current sign in status + private async Task> GetPromptChoicesAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + var promptChoices = new List(); + var adapter = (IUserTokenProvider)stepContext.Context.Adapter; + var token = await adapter.GetUserTokenAsync(stepContext.Context, _connectionName, null, cancellationToken); + + if (token == null) + { + promptChoices.Add(new Choice("Login")); + + // Token exchange will fail when the host is not logged on and the skill should + // show a regular OAuthPrompt + promptChoices.Add(new Choice("Call Skill (without SSO)")); + } + else + { + promptChoices.Add(new Choice("Logout")); + promptChoices.Add(new Choice("Show token")); + promptChoices.Add(new Choice("Call Skill (with SSO)")); + } + + promptChoices.Add(new Choice("Back")); + + return promptChoices; + } + + private async Task HandleActionStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + var action = ((FoundChoice)stepContext.Result).Value.ToLowerInvariant(); + + switch (action) + { + case "login": + return await stepContext.BeginDialogAsync(nameof(SsoSignInDialog), null, cancellationToken); + + case "logout": + var adapter = (IUserTokenProvider)stepContext.Context.Adapter; + await adapter.SignOutUserAsync(stepContext.Context, _connectionName, cancellationToken: cancellationToken); + await stepContext.Context.SendActivityAsync("You have been signed out.", cancellationToken: cancellationToken); + return await stepContext.NextAsync(cancellationToken: cancellationToken); + + case "show token": + var tokenProvider = (IUserTokenProvider)stepContext.Context.Adapter; + var token = await tokenProvider.GetUserTokenAsync(stepContext.Context, _connectionName, null, cancellationToken); + if (token == null) + { + await stepContext.Context.SendActivityAsync("User has no cached token.", cancellationToken: cancellationToken); + } + else + { + await stepContext.Context.SendActivityAsync($"Here is your current SSO token: {token.Token}", cancellationToken: cancellationToken); + } + + return await stepContext.NextAsync(cancellationToken: cancellationToken); + + case "call skill (with sso)": + case "call skill (without sso)": + var beginSkillActivity = new Activity + { + Type = ActivityTypes.Event, + Name = "Sso" + }; + + return await stepContext.BeginDialogAsync(_skillDialogId, new BeginSkillDialogOptions { Activity = beginSkillActivity }, cancellationToken); + + case "back": + return new DialogTurnResult(DialogTurnStatus.Complete); + + default: + // This should never be hit since the previous prompt validates the choice + throw new InvalidOperationException($"Unrecognized action: {action}"); + } + } + + private async Task PromptFinalStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + // Restart the dialog (we will exit when the user says end) + return await stepContext.ReplaceDialogAsync(InitialDialogId, null, cancellationToken); + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/Sso/SsoSignInDialog.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/Sso/SsoSignInDialog.cs new file mode 100644 index 0000000000..9529a192d5 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/Sso/SsoSignInDialog.cs @@ -0,0 +1,48 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Schema; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Dialogs.Sso +{ + public class SsoSignInDialog : ComponentDialog + { + public SsoSignInDialog(string connectionName) + : base(nameof(SsoSignInDialog)) + { + AddDialog(new OAuthPrompt( + nameof(OAuthPrompt), + new OAuthPromptSettings + { + ConnectionName = connectionName, + Text = $"Sign in to the host bot using AAD for SSO and connection {connectionName}", + Title = "Sign In", + Timeout = 60000 + })); + AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[] { SignInStepAsync, DisplayTokenAsync })); + InitialDialogId = nameof(WaterfallDialog); + } + + private async Task SignInStepAsync(WaterfallStepContext context, CancellationToken cancellationToken) + { + return await context.BeginDialogAsync(nameof(OAuthPrompt), null, cancellationToken); + } + + private async Task DisplayTokenAsync(WaterfallStepContext context, CancellationToken cancellationToken) + { + if (!(context.Result is TokenResponse result)) + { + await context.Context.SendActivityAsync("No token was provided.", cancellationToken: cancellationToken); + } + else + { + await context.Context.SendActivityAsync($"Here is your token: {result.Token}", cancellationToken: cancellationToken); + } + + return await context.EndDialogAsync(null, cancellationToken); + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/TangentDialog.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/TangentDialog.cs new file mode 100644 index 0000000000..1962319bab --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/TangentDialog.cs @@ -0,0 +1,51 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Schema; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Dialogs +{ + /// + /// A simple waterfall dialog used to test triggering tangents from . + /// + public class TangentDialog : ComponentDialog + { + public TangentDialog(string dialogId = nameof(TangentDialog)) + : base(dialogId) + { + AddDialog(new TextPrompt(nameof(TextPrompt))); + var waterfallSteps = new WaterfallStep[] + { + Step1Async, + Step2Async, + EndStepAsync + }; + AddDialog(new WaterfallDialog(nameof(WaterfallDialog), waterfallSteps)); + + InitialDialogId = nameof(WaterfallDialog); + } + + private async Task Step1Async(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + var messageText = "Tangent step 1 of 2, say something."; + var promptMessage = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput); + return await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions { Prompt = promptMessage }, cancellationToken); + } + + private async Task Step2Async(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + var messageText = "Tangent step 2 of 2, say something."; + var promptMessage = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput); + return await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions { Prompt = promptMessage }, cancellationToken); + } + + private async Task EndStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + return await stepContext.EndDialogAsync(cancellationToken: cancellationToken); + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Middleware/LoggerMiddleware.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Middleware/LoggerMiddleware.cs new file mode 100644 index 0000000000..9485dffbda --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Middleware/LoggerMiddleware.cs @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Bot.Schema; +using Microsoft.Extensions.Logging; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Middleware +{ + /// + /// Uses an ILogger instance to log user and bot messages. It filters out ContinueConversation events coming from skill responses. + /// + public class LoggerMiddleware : IMiddleware + { + private readonly ILogger _logger; + + public LoggerMiddleware(ILogger logger) + { + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + } + + public async Task OnTurnAsync(ITurnContext turnContext, NextDelegate next, CancellationToken cancellationToken = default) + { + // Note: skill responses will show as ContinueConversation events; we don't log those. + // We only log incoming messages from users. + if (!(turnContext.Activity.Type == ActivityTypes.Event && turnContext.Activity.Name == ActivityEventNames.ContinueConversation)) + { + var message = $"User said: {turnContext.Activity.Text} Type: \"{turnContext.Activity.Type}\" Name: \"{turnContext.Activity.Name}\""; + _logger.LogInformation(message); + } + + // Register outgoing handler. + turnContext.OnSendActivities(OutgoingHandler); + + // Continue processing messages. + await next(cancellationToken); + } + + private async Task OutgoingHandler(ITurnContext turnContext, List activities, Func> next) + { + foreach (var activity in activities) + { + var message = $"Bot said: {activity.Text} Type: \"{activity.Type}\" Name: \"{activity.Name}\""; + _logger.LogInformation(message); + } + + return await next(); + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Program.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Program.cs new file mode 100644 index 0000000000..306d8a19a4 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Program.cs @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot +{ + public class Program + { + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }); + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Properties/launchSettings.json b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Properties/launchSettings.json new file mode 100644 index 0000000000..dafa6f0bc2 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Properties/launchSettings.json @@ -0,0 +1,28 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:35020", + "sslPort": 0 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "WaterfallHostBot": { + "commandName": "Project", + "launchBrowser": true, + "applicationUrl": "http://localhost:35020", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/EchoSkill.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/EchoSkill.cs new file mode 100644 index 0000000000..7ff87fa16c --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/EchoSkill.cs @@ -0,0 +1,37 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using Microsoft.Bot.Schema; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Skills +{ + public class EchoSkill : SkillDefinition + { + private enum SkillAction + { + Message + } + + public override IList GetActions() + { + return new List { SkillAction.Message.ToString() }; + } + + public override Activity CreateBeginActivity(string actionId) + { + if (!Enum.TryParse(actionId, true, out _)) + { + throw new InvalidOperationException($"Unable to create begin activity for \"{actionId}\"."); + } + + // We only support one activity for Echo so no further checks are needed + return new Activity(ActivityTypes.Message) + { + Name = SkillAction.Message.ToString(), + Text = "Begin the Echo Skill." + }; + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/SkillDefinition.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/SkillDefinition.cs new file mode 100644 index 0000000000..e150259058 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/SkillDefinition.cs @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using Microsoft.Bot.Builder.Skills; +using Microsoft.Bot.Schema; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Skills +{ + /// + /// Extends and provides methods to return the actions and the begin activity to start a skill. + /// This class also exposes a group property to render skill groups and narrow down the available options. + /// + /// + /// This is just a temporary implementation, ideally, this should be replaced by logic that parses a manifest and creates + /// what's needed. + /// + public class SkillDefinition : BotFrameworkSkill + { + public string Group { get; set; } + + public virtual IList GetActions() + { + throw new NotImplementedException(); + } + + public virtual Activity CreateBeginActivity(string actionId) + { + throw new NotImplementedException(); + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/TeamsSkill.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/TeamsSkill.cs new file mode 100644 index 0000000000..3975757a47 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/TeamsSkill.cs @@ -0,0 +1,45 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using Microsoft.Bot.Schema; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Skills +{ + public class TeamsSkill : SkillDefinition + { + private enum SkillAction + { + TeamsTaskModule, + TeamsCardAction, + TeamsConversation, + Cards, + Proactive, + Attachment, + Auth, + Sso, + Echo, + FileUpload, + Delete, + Update, + } + + public override IList GetActions() + { + return Enum.GetNames(typeof(SkillAction)); + } + + public override Activity CreateBeginActivity(string actionId) + { + if (!Enum.TryParse(actionId, true, out var skillAction)) + { + throw new InvalidOperationException($"Unable to create begin activity for \"{actionId}\"."); + } + + // We don't support special parameters in these skills so a generic event with the right name + // will do in this case. + return new Activity(ActivityTypes.Event) { Name = skillAction.ToString() }; + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/WaterfallSkill.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/WaterfallSkill.cs new file mode 100644 index 0000000000..9725c05217 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/WaterfallSkill.cs @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using Microsoft.Bot.Schema; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Skills +{ + public class WaterfallSkill : SkillDefinition + { + private enum SkillAction + { + Cards, + Proactive, + Auth, + MessageWithAttachment, + Sso, + FileUpload, + Echo, + Delete, + Update + } + + public override IList GetActions() + { + return Enum.GetNames(typeof(SkillAction)); + } + + public override Activity CreateBeginActivity(string actionId) + { + if (!Enum.TryParse(actionId, true, out var skillAction)) + { + throw new InvalidOperationException($"Unable to create begin activity for \"{actionId}\"."); + } + + // We don't support special parameters in these skills so a generic event with the right name + // will do in this case. + return new Activity(ActivityTypes.Event) { Name = skillAction.ToString() }; + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/SkillsConfiguration.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/SkillsConfiguration.cs new file mode 100644 index 0000000000..2c80655e23 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/SkillsConfiguration.cs @@ -0,0 +1,68 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Skills; +using Microsoft.Extensions.Configuration; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot +{ + /// + /// A helper class that loads Skills information from configuration. + /// + /// + /// This class loads the skill settings from config and casts them into derived types of + /// so we can render prompts with the skills and in their groups. + /// + public class SkillsConfiguration + { + public SkillsConfiguration(IConfiguration configuration) + { + var section = configuration?.GetSection("BotFrameworkSkills"); + var skills = section?.Get(); + if (skills != null) + { + foreach (var skill in skills) + { + Skills.Add(skill.Id, CreateSkillDefinition(skill)); + } + } + + var skillHostEndpoint = configuration?.GetValue(nameof(SkillHostEndpoint)); + if (!string.IsNullOrWhiteSpace(skillHostEndpoint)) + { + SkillHostEndpoint = new Uri(skillHostEndpoint); + } + } + + public Uri SkillHostEndpoint { get; } + + public Dictionary Skills { get; } = new Dictionary(); + + private static SkillDefinition CreateSkillDefinition(SkillDefinition skill) + { + // Note: we hard code this for now, we should dynamically create instances based on the manifests. + // For now, this code creates a strong typed version of the SkillDefinition based on the skill group + // and copies the info from settings into it. + SkillDefinition skillDefinition; + switch (skill.Group) + { + case "Echo": + skillDefinition = ObjectPath.Assign(new EchoSkill(), skill); + break; + case "Waterfall": + skillDefinition = ObjectPath.Assign(new WaterfallSkill(), skill); + break; + case "Teams": + skillDefinition = ObjectPath.Assign(new TeamsSkill(), skill); + break; + default: + throw new Exception($"Unable to find definition class for {skill.Id}."); + } + + return skillDefinition; + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Startup.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Startup.cs new file mode 100644 index 0000000000..3795f176d8 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Startup.cs @@ -0,0 +1,98 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.BotFramework; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Bot.Builder.Integration.AspNet.Core.Skills; +using Microsoft.Bot.Builder.Skills; +using Microsoft.Bot.Connector.Authentication; +using Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Authentication; +using Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Bots; +using Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Dialogs; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot +{ + public class Startup + { + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + + public IConfiguration Configuration { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + services.AddControllers() + .AddNewtonsoftJson(); + + // Register credential provider. + services.AddSingleton(); + + // Register the skills configuration class. + services.AddSingleton(); + + // Register AuthConfiguration to enable custom claim validation. + services.AddSingleton(sp => new AuthenticationConfiguration { ClaimsValidator = new AllowedSkillsClaimsValidator(sp.GetService()) }); + + // Register the Bot Framework Adapter with error handling enabled. + // Note: some classes expect a BotAdapter and some expect a BotFrameworkHttpAdapter, so + // register the same adapter instance for both types. + services.AddSingleton(); + services.AddSingleton(sp => sp.GetService()); + + // Register the skills conversation ID factory, the client and the request handler. + services.AddSingleton(); + services.AddHttpClient(); + + //services.AddSingleton(); + services.AddSingleton(); + + // Register the storage we'll be using for User and Conversation state. (Memory is great for testing purposes.) + services.AddSingleton(); + + // Register Conversation state (used by the Dialog system itself). + services.AddSingleton(); + services.AddSingleton(); + + // Register the MainDialog that will be run by the bot. + services.AddSingleton(); + + // Register the bot as a transient. In this case the ASP Controller is expecting an IBot. + services.AddTransient>(); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseDefaultFiles(); + app.UseStaticFiles(); + + // Uncomment this to support HTTPS. + // app.UseHttpsRedirection(); + + app.UseRouting(); + + app.UseWebSockets(); + + app.UseAuthorization(); + + app.UseEndpoints(endpoints => + { + endpoints.MapControllers(); + }); + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/TeamsAppManifest/icon-color.png b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/TeamsAppManifest/icon-color.png new file mode 100644 index 0000000000000000000000000000000000000000..48a2de13303e1e8a25f76391f4a34c7c4700fd3d GIT binary patch literal 1229 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCe1|JzX3_D&pSWuFnWfl{x;g|9jrEYf8Vqrkk2Ba|%ol3OT){=#|7ID~|e{ zODQ{kU&ME#@`*-tm%Tukt_gFr+`F?$dx9wg-jad`^gsMn2_%Kh%WH91&SjKq5 zgkdI|!exdOVgw@>>=!Tjnk6q)zV*T8$FdgRFYC{kQ7``NOcl@R(_%_8e5e0E;>v0G zEM9kb)2itgOTSfH7M=b3-S61B?PiazMdwXZwrS)^5UUS#HQjaoua5h_{Gx*_Zz|XK z$tf0mZ&=tpf2!!Q)!A_l&o_$g*|JM$VZa~F^0{x1T{=QFu*x$`=V%~jUW=G`iqqp=lquB-`P{Qjw`=zEu3cMc_x7m2f#9m}uoFBMMQ^+%cOL)F_)N@JZ}Axoxi1y= zeebq`y==e!nl+?cK-PhOec!3%|IupShHrcjW8sSt)F1>NW*{ zW%ljk2)nk%-}+F&?gi=7^$L#VeX3@kp%f{n}fR z`}uZPx$IY~r8R5%gMlrc`jP!L3IloKFoq~sFFH5|cdklX=R08T)}71BhaN8$`AsNf0_ zq>WNhAtCd|-nBlTU=y5zl_vXlXZ~bkuaYENMp>3QSQ_#zuYZ+eQh*OIHRxP~s(}ic zN2J4$u=AQcPt)|>F3zZLsjtP;Tajkugx;NcYED2~JVBlVO>{`uAY?Q4O|AA z=16}CJieK^5P_TKnou!zGR`$!PUC)DqtkO;?!`p!+9v3lP_mu=%Vt3BkoWsq%;FN1sp58w*zfr-z^7tIb*q>!yncCjrzLuOk3N+d&~^Cxd| z + /// A specialized to support SSO Token exchanges. + /// + public class TokenExchangeSkillHandler : SkillHandler + { + private const string WaterfallSkillBot = "WaterfallSkillBot"; + + private readonly BotAdapter _adapter; + private readonly SkillsConfiguration _skillsConfig; + private readonly SkillHttpClient _skillClient; + private readonly string _botId; + private readonly SkillConversationIdFactoryBase _conversationIdFactory; + private readonly ILogger _logger; + private readonly IExtendedUserTokenProvider _tokenExchangeProvider; + private readonly IConfiguration _configuration; + + public TokenExchangeSkillHandler( + BotAdapter adapter, + IBot bot, + IConfiguration configuration, + SkillConversationIdFactoryBase conversationIdFactory, + SkillsConfiguration skillsConfig, + SkillHttpClient skillClient, + ICredentialProvider credentialProvider, + AuthenticationConfiguration authConfig, + IChannelProvider channelProvider = null, + ILogger logger = null) + : base(adapter, bot, conversationIdFactory, credentialProvider, authConfig, channelProvider, logger) + { + _adapter = adapter; + _tokenExchangeProvider = adapter as IExtendedUserTokenProvider; + if (_tokenExchangeProvider == null) + { + throw new ArgumentException($"{nameof(adapter)} does not support token exchange"); + } + + _configuration = configuration; + _skillsConfig = skillsConfig; + _skillClient = skillClient; + _conversationIdFactory = conversationIdFactory; + _logger = logger ?? NullLogger.Instance; + _botId = configuration.GetSection(MicrosoftAppCredentials.MicrosoftAppIdKey)?.Value; + } + + protected override async Task OnSendToConversationAsync(ClaimsIdentity claimsIdentity, string conversationId, Activity activity, CancellationToken cancellationToken = default(CancellationToken)) + { + if (await InterceptOAuthCards(claimsIdentity, activity).ConfigureAwait(false)) + { + return new ResourceResponse(Guid.NewGuid().ToString("N", CultureInfo.InvariantCulture)); + } + + return await base.OnSendToConversationAsync(claimsIdentity, conversationId, activity, cancellationToken).ConfigureAwait(false); + } + + protected override async Task OnReplyToActivityAsync(ClaimsIdentity claimsIdentity, string conversationId, string activityId, Activity activity, CancellationToken cancellationToken = default(CancellationToken)) + { + if (await InterceptOAuthCards(claimsIdentity, activity).ConfigureAwait(false)) + { + return new ResourceResponse(Guid.NewGuid().ToString("N", CultureInfo.InvariantCulture)); + } + + return await base.OnReplyToActivityAsync(claimsIdentity, conversationId, activityId, activity, cancellationToken).ConfigureAwait(false); + } + + private BotFrameworkSkill GetCallingSkill(ClaimsIdentity claimsIdentity) + { + var appId = JwtTokenValidation.GetAppIdFromClaims(claimsIdentity.Claims); + + if (string.IsNullOrWhiteSpace(appId)) + { + return null; + } + + return _skillsConfig.Skills.Values.FirstOrDefault(s => string.Equals(s.AppId, appId, StringComparison.InvariantCultureIgnoreCase)); + } + + private async Task InterceptOAuthCards(ClaimsIdentity claimsIdentity, Activity activity) + { + var oauthCardAttachment = activity.Attachments?.FirstOrDefault(a => a?.ContentType == OAuthCard.ContentType); + if (oauthCardAttachment != null) + { + var targetSkill = GetCallingSkill(claimsIdentity); + if (targetSkill != null) + { + var oauthCard = ((JObject)oauthCardAttachment.Content).ToObject(); + + if (!string.IsNullOrWhiteSpace(oauthCard?.TokenExchangeResource?.Uri)) + { + using (var context = new TurnContext(_adapter, activity)) + { + context.TurnState.Add("BotIdentity", claimsIdentity); + + // We need to know what connection name to use for the token exchange so we figure that out here + var connectionName = targetSkill.Id.Contains(WaterfallSkillBot) ? _configuration.GetSection("SsoConnectionName").Value : _configuration.GetSection("SsoConnectionNameTeams").Value; + + if (string.IsNullOrEmpty(connectionName)) + { + throw new ArgumentNullException("The connection name cannot be null."); + } + + // AAD token exchange + try + { + var result = await _tokenExchangeProvider.ExchangeTokenAsync( + context, + connectionName, + activity.Recipient.Id, + new TokenExchangeRequest() { Uri = oauthCard.TokenExchangeResource.Uri }).ConfigureAwait(false); + + if (!string.IsNullOrEmpty(result?.Token)) + { + // If token above is null, then SSO has failed and hence we return false. + // If not, send an invoke to the skill with the token. + return await SendTokenExchangeInvokeToSkillAsync(activity, oauthCard.TokenExchangeResource.Id, result.Token, oauthCard.ConnectionName, targetSkill, default).ConfigureAwait(false); + } + } + catch (Exception ex) + { + // Show oauth card if token exchange fails. + _logger.LogWarning("Unable to exchange token.", ex); + return false; + } + + return false; + } + } + } + } + + return false; + } + + private async Task SendTokenExchangeInvokeToSkillAsync(Activity incomingActivity, string id, string token, string connectionName, BotFrameworkSkill targetSkill, CancellationToken cancellationToken) + { + var activity = incomingActivity.CreateReply(); + activity.Type = ActivityTypes.Invoke; + activity.Name = SignInConstants.TokenExchangeOperationName; + activity.Value = new TokenExchangeInvokeRequest() + { + Id = id, + Token = token, + ConnectionName = connectionName, + }; + + var skillConversationReference = await _conversationIdFactory.GetSkillConversationReferenceAsync(incomingActivity.Conversation.Id, cancellationToken).ConfigureAwait(false); + activity.Conversation = skillConversationReference.ConversationReference.Conversation; + activity.ServiceUrl = skillConversationReference.ConversationReference.ServiceUrl; + + // route the activity to the skill + var response = await _skillClient.PostActivityAsync(_botId, targetSkill, _skillsConfig.SkillHostEndpoint, activity, cancellationToken); + + // Check response status: true if success, false if failure + return response.Status >= 200 && response.Status <= 299; + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/WaterfallHostBot.csproj b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/WaterfallHostBot.csproj new file mode 100644 index 0000000000..e1954961e8 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/WaterfallHostBot.csproj @@ -0,0 +1,24 @@ + + + + netcoreapp3.1 + latest + Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot + Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot + + + + + + + + + + + + + + + + + diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/appsettings.json b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/appsettings.json new file mode 100644 index 0000000000..da8a447b35 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/appsettings.json @@ -0,0 +1,90 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "AllowedHosts": "*", + + "MicrosoftAppId": "", + "MicrosoftAppPassword": "", + "SsoConnectionName": "", + "SsoConnectionNameTeams": "", + "SkillHostEndpoint": "http://localhost:35020/api/skills/", + "BotFrameworkSkills": [ + { + "Id": "EchoSkillBotDotNet", + "Group": "Echo", + "AppId": "", + "SkillEndpoint": "http://localhost:35400/api/messages" + }, + { + "Id": "EchoSkillBotDotNet21", + "Group": "Echo", + "AppId": "", + "SkillEndpoint": "http://localhost:35405/api/messages" + }, + { + "Id": "EchoSkillBotDotNetV3", + "Group": "Echo", + "AppId": "", + "SkillEndpoint": "http://localhost:35407/api/messages" + }, + { + "Id": "EchoSkillBotJS", + "Group": "Echo", + "AppId": "", + "SkillEndpoint": "http://localhost:36400/api/messages" + }, + { + "Id": "EchoSkillBotJSV3", + "Group": "Echo", + "AppId": "", + "SkillEndpoint": "http://localhost:36407/api/messages" + }, + { + "Id": "EchoSkillBotPython", + "Group": "Echo", + "AppId": "", + "SkillEndpoint": "http://localhost:37400/api/messages" + }, + { + "Id": "WaterfallSkillBotDotNet", + "Group": "Waterfall", + "AppId": "", + "SkillEndpoint": "http://localhost:35420/api/messages" + }, + { + "Id": "WaterfallSkillBotJS", + "Group": "Waterfall", + "AppId": "", + "SkillEndpoint": "http://localhost:36420/api/messages" + }, + { + "Id": "WaterfallSkillBotPython", + "Group": "Waterfall", + "AppId": "", + "SkillEndpoint": "http://localhost:37420/api/messages" + }, + { + "Id": "TeamsSkillBotDotNet", + "Group": "Teams", + "AppId": "", + "SkillEndpoint": "http://localhost:35430/api/messages" + }, + { + "Id": "TeamsSkillBotJS", + "Group": "Teams", + "AppId": "", + "SkillEndpoint": "http://localhost:36430/api/messages" + }, + { + "Id": "TeamsSkillBotPython", + "Group": "Teams", + "AppId": "", + "SkillEndpoint": "http://localhost:37430/api/messages" + } + ] +} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/wwwroot/default.htm b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/wwwroot/default.htm new file mode 100644 index 0000000000..4f00a9a6d4 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/wwwroot/default.htm @@ -0,0 +1,420 @@ + + + + + + + WaterfallHostBot + + + + + +
+
+
+
WaterfallHostBot Bot
+
+
+
+
+
Your bot is ready!
+
You can test your bot in the Bot Framework Emulator
+ by connecting to http://localhost:3978/api/messages.
+ +
Visit Azure + Bot Service to register your bot and add it to
+ various channels. The bot's endpoint URL typically looks + like this:
+
https://your_bots_hostname/api/messages
+
+
+
+
+ +
+ + + \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/Directory.Build.props b/tests/functional/Bots/DotNet/Consumers/Composer/Directory.Build.props new file mode 100644 index 0000000000..d4378dfc87 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/Composer/Directory.Build.props @@ -0,0 +1,15 @@ + + + + true + + + + + $(NoWarn);SA1412;NU1701 + + + + + + \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/.gitignore b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/.gitignore new file mode 100644 index 0000000000..eaa9cf70cc --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/.gitignore @@ -0,0 +1,5 @@ +# files generated during the lubuild process +# IMPORTANT: In regular composer bots the generated folder should be excluded and regenerated on the build server +# or by the dev running composer locally. But in this case we include it so we don't have to run bf luis:cross-train +# in the build server +# generated/ diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Controllers/BotController.cs b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Controllers/BotController.cs new file mode 100644 index 0000000000..c87f3cba5e --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Controllers/BotController.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime.Settings; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +namespace SimpleHostBotComposer.Controllers +{ + // This ASP Controller is created to handle a request. Dependency Injection will provide the Adapter and IBot + // implementation at runtime. Multiple different IBot implementations running at different endpoints can be + // achieved by specifying a more specific type for the bot constructor argument. + [ApiController] + public class BotController : ControllerBase + { + private readonly Dictionary _adapters = new Dictionary(); + private readonly IBot _bot; + private readonly ILogger _logger; + + public BotController( + IConfiguration configuration, + IEnumerable adapters, + IBot bot, + ILogger logger) + { + _bot = bot ?? throw new ArgumentNullException(nameof(bot)); + _logger = logger; + + var adapterSettings = configuration.GetSection(AdapterSettings.AdapterSettingsKey).Get>() ?? new List(); + adapterSettings.Add(AdapterSettings.CoreBotAdapterSettings); + + foreach (var adapter in adapters ?? throw new ArgumentNullException(nameof(adapters))) + { + var settings = adapterSettings.FirstOrDefault(s => s.Enabled && s.Type == adapter.GetType().FullName); + + if (settings != null) + { + _adapters.Add(settings.Route, adapter); + } + } + } + + [HttpPost] + [HttpGet] + [Route("api/{route}")] + public async Task PostAsync(string route) + { + if (string.IsNullOrEmpty(route)) + { + _logger.LogError($"PostAsync: No route provided."); + throw new ArgumentNullException(nameof(route)); + } + + if (_adapters.TryGetValue(route, out IBotFrameworkHttpAdapter adapter)) + { + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogInformation($"PostAsync: routed '{route}' to {adapter.GetType().Name}"); + } + + // Delegate the processing of the HTTP POST to the appropriate adapter. + // The adapter will invoke the bot. + await adapter.ProcessAsync(Request, Response, _bot).ConfigureAwait(false); + } + else + { + _logger.LogError($"PostAsync: No adapter registered and enabled for route {route}."); + throw new KeyNotFoundException($"No adapter registered and enabled for route {route}."); + } + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Controllers/SkillController.cs b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Controllers/SkillController.cs new file mode 100644 index 0000000000..4f90bad170 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Controllers/SkillController.cs @@ -0,0 +1,62 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Bot.Schema; +using Microsoft.Extensions.Logging; + +namespace SimpleHostBotComposer.Controllers +{ + /// + /// A controller that handles skill replies to the bot. + /// + [ApiController] + [Route("api/skills")] + public class SkillController : ChannelServiceController + { + private readonly ILogger _logger; + + public SkillController(ChannelServiceHandlerBase handler, ILogger logger) + : base(handler) + { + _logger = logger; + } + + public override Task ReplyToActivityAsync(string conversationId, string activityId, Activity activity) + { + try + { + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogDebug($"ReplyToActivityAsync: conversationId={conversationId}, activityId={activityId}"); + } + + return base.ReplyToActivityAsync(conversationId, activityId, activity); + } + catch (Exception ex) + { + _logger.LogError(ex, $"ReplyToActivityAsync: {ex}"); + throw; + } + } + + public override Task SendToConversationAsync(string conversationId, Activity activity) + { + try + { + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogDebug($"SendToConversationAsync: conversationId={conversationId}"); + } + + return base.SendToConversationAsync(conversationId, activity); + } + catch (Exception ex) + { + _logger.LogError(ex, $"SendToConversationAsync: {ex}"); + throw; + } + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Program.cs b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Program.cs new file mode 100644 index 0000000000..2fd91a9203 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Program.cs @@ -0,0 +1,33 @@ +using System; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime.Extensions; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; + +namespace SimpleHostBotComposer +{ + public class Program + { + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureAppConfiguration((hostingContext, builder) => + { + var applicationRoot = AppDomain.CurrentDomain.BaseDirectory; + var environmentName = hostingContext.HostingEnvironment.EnvironmentName; + var settingsDirectory = "settings"; + + builder.AddBotRuntimeConfiguration(applicationRoot, settingsDirectory, environmentName); + + builder.AddCommandLine(args); + }) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }); + } +} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Properties/launchSettings.json b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Properties/launchSettings.json new file mode 100644 index 0000000000..a9a6d4673c --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:35010/", + "sslPort": 0 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "SimpleHostBotComposerDotNet": { + "commandName": "Project", + "launchBrowser": true, + "applicationUrl": "http://localhost:35010", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/README.md b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/README.md new file mode 100644 index 0000000000..b48822a762 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/README.md @@ -0,0 +1,27 @@ +# Welcome to your new bot + +This bot project was created using the Empty Bot template, and contains a minimal set of files necessary to have a working bot. + +## Next steps + +### Start building your bot + +Composer can help guide you through getting started building your bot. From your bot settings page (the wrench icon on the left navigation rail), click on the rocket-ship icon on the top right for some quick navigation links. + +Another great resource if you're just getting started is the **[guided tutorial](https://docs.microsoft.com/en-us/composer/tutorial/tutorial-introduction)** in our documentation. + +### Connect with your users + +Your bot comes pre-configured to connect to our Web Chat and DirectLine channels, but there are many more places you can connect your bot to - including Microsoft Teams, Telephony, DirectLine Speech, Slack, Facebook, Outlook and more. Check out all of the places you can connect to on the bot settings page. + +### Publish your bot to Azure from Composer + +Composer can help you provision the Azure resources necessary for your bot, and publish your bot to them. To get started, create a publishing profile from your bot settings page in Composer (the wrench icon on the left navigation rail). Make sure you only provision the optional Azure resources you need! + +### Extend your bot with packages + +From Package Manager in Composer you can find useful packages to help add additional pre-built functionality you can add to your bot - everything from simple dialogs & custom actions for working with specific scenarios to custom adapters for connecting your bot to users on clients like Facebook or Slack. + +### Extend your bot with code + +You can also extend your bot with code - simply open up the folder that was generated for you in the location you chose during the creation process with your favorite IDE (like Visual Studio). You can do things like create custom actions that can be used during dialog flows, create custom middleware to pre-process (or post-process) messages, and more. See [our documentation](https://aka.ms/bf-extend-with-code) for more information. diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/SimpleHostBotComposer.botproj b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/SimpleHostBotComposer.botproj new file mode 100644 index 0000000000..12ebc0273a --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/SimpleHostBotComposer.botproj @@ -0,0 +1,41 @@ +{ + "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/main/Composer/packages/server/schemas/botproject.schema", + "name": "SimpleHostBotComposer", + "skills": { + "echoSkillBotComposerDotNet": { + "manifest": "http://localhost:35410/manifests/echoskillbotcomposer-manifest.json", + "remote": true, + "endpointName": "default" + }, + "echoSkillBotDotNet": { + "manifest": "http://localhost:35400/manifests/echoskillbot-manifest-1.0.json", + "remote": true, + "endpointName": "default" + }, + "echoSkillBotDotNet21": { + "manifest": "http://localhost:35405/manifests/echoskillbot-manifest-1.0.json", + "remote": true, + "endpointName": "default" + }, + "echoSkillBotDotNetV3": { + "manifest": "http://localhost:35407/manifests/echoskillbotv3-manifest-1.0.json", + "remote": true, + "endpointName": "default" + }, + "echoSkillBotJs": { + "manifest": "http://localhost:36400/manifests/echoskillbot-manifest-1.0.json", + "remote": true, + "endpointName": "default" + }, + "echoSkillBotJsv3": { + "manifest": "http://localhost:36407/manifests/echoskillbotv3-manifest-1.0.json", + "remote": true, + "endpointName": "default" + }, + "echoSkillBotPython": { + "manifest": "http://localhost:37400/manifests/echoskillbot-manifest-1.0.json", + "remote": true, + "endpointName": "default" + } + } +} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/SimpleHostBotComposer.csproj b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/SimpleHostBotComposer.csproj new file mode 100644 index 0000000000..796e4f6f76 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/SimpleHostBotComposer.csproj @@ -0,0 +1,19 @@ + + + + netcoreapp3.1 + OutOfProcess + c7eabc4e-9c9c-4b56-82d5-23e24f20ee24 + + + + PreserveNewest + + + + + + + + + \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Startup.cs b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Startup.cs new file mode 100644 index 0000000000..f9c021bb07 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Startup.cs @@ -0,0 +1,56 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.StaticFiles; +using Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime.Extensions; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +namespace SimpleHostBotComposer +{ + public class Startup + { + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + + public IConfiguration Configuration { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + services.AddControllers().AddNewtonsoftJson(); + services.AddBotRuntime(Configuration); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseDefaultFiles(); + + // Set up custom content types - associating file extension to MIME type. + var provider = new FileExtensionContentTypeProvider(); + provider.Mappings[".lu"] = "application/vnd.microsoft.lu"; + provider.Mappings[".qna"] = "application/vnd.microsoft.qna"; + + // Expose static files in manifests folder for skill scenarios. + app.UseStaticFiles(new StaticFileOptions + { + ContentTypeProvider = provider + }); + app.UseWebSockets(); + app.UseRouting(); + app.UseAuthorization(); + app.UseEndpoints(endpoints => + { + endpoints.MapControllers(); + }); + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/CallEchoSkill.dialog b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/CallEchoSkill.dialog new file mode 100644 index 0000000000..2967ebdbc8 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/CallEchoSkill.dialog @@ -0,0 +1,244 @@ +{ + "$kind": "Microsoft.AdaptiveDialog", + "$designer": { + "id": "950uG3", + "name": "CallEchoSkill", + "description": "" + }, + "autoEndDialog": true, + "defaultResultProperty": "dialog.result", + "triggers": [ + { + "$kind": "Microsoft.OnBeginDialog", + "$designer": { + "name": "BeginDialog", + "description": "", + "id": "XuIGWc" + }, + "actions": [ + { + "$kind": "Microsoft.ChoiceInput", + "$designer": { + "id": "AtuOWj" + }, + "defaultLocale": "en-us", + "disabled": false, + "maxTurnCount": 3, + "alwaysPrompt": false, + "allowInterruptions": false, + "unrecognizedPrompt": "", + "invalidPrompt": "", + "defaultValueResponse": "", + "prompt": "${ChoiceInput_Prompt_AtuOWj()}", + "choiceOptions": { + "includeNumbers": true + }, + "property": "dialog.deliveryMode", + "style": "suggestedAction", + "choices": [ + "normal", + "expectReplies" + ] + }, + { + "$kind": "Microsoft.ChoiceInput", + "$designer": { + "id": "DIABs2" + }, + "defaultLocale": "en-us", + "disabled": false, + "maxTurnCount": 3, + "alwaysPrompt": false, + "allowInterruptions": false, + "unrecognizedPrompt": "", + "invalidPrompt": "", + "defaultValueResponse": "", + "prompt": "${ChoiceInput_Prompt_DIABs2()}", + "choiceOptions": { + "includeNumbers": true + }, + "style": "suggestedAction", + "property": "dialog.selectedSkill", + "choices": [ + "EchoSkillBotComposerDotNet", + "EchoSkillBotDotNet", + "EchoSkillBotDotNet21", + "EchoSkillBotDotNetV3", + "EchoSkillBotJS", + "EchoSkillBotJSV3", + "EchoSkillBotPython" + ] + }, + { + "$kind": "Microsoft.TextInput", + "$designer": { + "id": "nJf5rj" + }, + "disabled": false, + "maxTurnCount": 3, + "alwaysPrompt": false, + "allowInterruptions": false, + "unrecognizedPrompt": "", + "invalidPrompt": "", + "defaultValueResponse": "", + "prompt": "${TextInput_Prompt_nJf5rj()}", + "property": "dialog.firstUtterance" + }, + { + "$kind": "Microsoft.SwitchCondition", + "$designer": { + "id": "b3M6yt" + }, + "condition": "dialog.selectedSkill", + "cases": [ + { + "value": "EchoSkillBotComposerDotNet", + "actions": [ + { + "$kind": "Microsoft.BeginSkill", + "$designer": { + "id": "KKS0wY" + }, + "activityProcessed": true, + "botId": "=settings.MicrosoftAppId", + "skillHostEndpoint": "=settings.skillHostEndpoint", + "connectionName": "=settings.connectionName", + "allowInterruptions": true, + "skillEndpoint": "=settings.skill['echoSkillBotComposerDotNet'].endpointUrl", + "skillAppId": "=settings.skill['echoSkillBotComposerDotNet'].msAppId", + "activity": "${BeginSkill_Activity_KKS0wY()}" + } + ] + }, + { + "value": "EchoSkillBotDotNet", + "actions": [ + { + "$kind": "Microsoft.BeginSkill", + "$designer": { + "id": "92WLGJ" + }, + "activityProcessed": true, + "botId": "=settings.MicrosoftAppId", + "skillHostEndpoint": "=settings.skillHostEndpoint", + "connectionName": "=settings.connectionName", + "allowInterruptions": true, + "skillEndpoint": "=settings.skill['echoSkillBotDotNet'].endpointUrl", + "skillAppId": "=settings.skill['echoSkillBotDotNet'].msAppId", + "activity": "${BeginSkill_Activity_92WLGJ()}" + } + ] + }, + { + "value": "EchoSkillBotDotNet21", + "actions": [ + { + "$kind": "Microsoft.BeginSkill", + "$designer": { + "id": "9zIod8" + }, + "activityProcessed": true, + "botId": "=settings.MicrosoftAppId", + "skillHostEndpoint": "=settings.skillHostEndpoint", + "connectionName": "=settings.connectionName", + "allowInterruptions": true, + "skillEndpoint": "=settings.skill['echoSkillBotDotNet21'].endpointUrl", + "skillAppId": "=settings.skill['echoSkillBotDotNet21'].msAppId", + "activity": "${BeginSkill_Activity_9zIod8()}" + } + ] + }, + { + "value": "EchoSkillBotDotNetV3", + "actions": [ + { + "$kind": "Microsoft.BeginSkill", + "$designer": { + "id": "GHbR47" + }, + "activityProcessed": true, + "botId": "=settings.MicrosoftAppId", + "skillHostEndpoint": "=settings.skillHostEndpoint", + "connectionName": "=settings.connectionName", + "allowInterruptions": true, + "skillEndpoint": "=settings.skill['echoSkillBotDotNetV3'].endpointUrl", + "skillAppId": "=settings.skill['echoSkillBotDotNetV3'].msAppId", + "activity": "${BeginSkill_Activity_GHbR47()}" + } + ] + }, + { + "value": "EchoSkillBotJS", + "actions": [ + { + "$kind": "Microsoft.BeginSkill", + "$designer": { + "id": "fXOB92" + }, + "activityProcessed": true, + "botId": "=settings.MicrosoftAppId", + "skillHostEndpoint": "=settings.skillHostEndpoint", + "connectionName": "=settings.connectionName", + "allowInterruptions": true, + "skillEndpoint": "=settings.skill['echoSkillBotJs'].endpointUrl", + "skillAppId": "=settings.skill['echoSkillBotJs'].msAppId", + "activity": "${BeginSkill_Activity_fXOB92()}" + } + ] + }, + { + "value": "EchoSkillBotJSV3", + "actions": [ + { + "$kind": "Microsoft.BeginSkill", + "$designer": { + "id": "aEVlOJ" + }, + "activityProcessed": true, + "botId": "=settings.MicrosoftAppId", + "skillHostEndpoint": "=settings.skillHostEndpoint", + "connectionName": "=settings.connectionName", + "allowInterruptions": true, + "skillEndpoint": "=settings.skill['echoSkillBotJsv3'].endpointUrl", + "skillAppId": "=settings.skill['echoSkillBotJsv3'].msAppId", + "activity": "${BeginSkill_Activity_aEVlOJ()}" + } + ] + }, + { + "value": "EchoSkillBotPython", + "actions": [ + { + "$kind": "Microsoft.BeginSkill", + "$designer": { + "id": "WnhW7c" + }, + "activityProcessed": true, + "botId": "=settings.MicrosoftAppId", + "skillHostEndpoint": "=settings.skillHostEndpoint", + "connectionName": "=settings.connectionName", + "allowInterruptions": true, + "skillEndpoint": "=settings.skill['echoSkillBotPython'].endpointUrl", + "skillAppId": "=settings.skill['echoSkillBotPython'].msAppId", + "activity": "${BeginSkill_Activity_WnhW7c()}" + } + ] + } + ], + "default": [ + { + "$kind": "Microsoft.SendActivity", + "$designer": { + "id": "3NY1Ax" + }, + "activity": "${SendActivity_3NY1Ax()}" + } + ] + } + ] + } + ], + "generator": "CallEchoSkill.lg", + "recognizer": "CallEchoSkill.lu.qna", + "id": "CallEchoSkill" +} diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/knowledge-base/en-us/CallEchoSkill.en-us.qna b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/knowledge-base/en-us/CallEchoSkill.en-us.qna new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/language-generation/en-us/CallEchoSkill.en-us.lg b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/language-generation/en-us/CallEchoSkill.en-us.lg new file mode 100644 index 0000000000..8b5225cfbc --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/language-generation/en-us/CallEchoSkill.en-us.lg @@ -0,0 +1,56 @@ +[import](common.lg) + +# ChoiceInput_Prompt_AtuOWj() +[Activity + Text = What delivery mode would you like to use? +] + +# ChoiceInput_Prompt_DIABs2() +[Activity + Text = What skill would you like to call? +] + +# SendActivity_3NY1Ax() +[Activity + Text = We shouldn't hit this because we have validation in the prompt +] + +# BeginSkill_Activity_KKS0wY() +[Activity + Text = ${dialog.firstUtterance} +] + +# TextInput_Prompt_nJf5rj() +[Activity + Text = Type anything to send to the skill. +] + +# BeginSkill_Activity_92WLGJ() +[Activity + Text = ${dialog.firstUtterance} +] + +# BeginSkill_Activity_9zIod8() +[Activity + Text = ${dialog.firstUtterance} +] + +# BeginSkill_Activity_GHbR47() +[Activity + Text = ${dialog.firstUtterance} +] + +# BeginSkill_Activity_fXOB92() +[Activity + Text = ${dialog.firstUtterance} +] + +# BeginSkill_Activity_aEVlOJ() +[Activity + Text = ${dialog.firstUtterance} +] + +# BeginSkill_Activity_WnhW7c() +[Activity + Text = ${dialog.firstUtterance} +] diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/language-understanding/en-us/CallEchoSkill.en-us.lu b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/language-understanding/en-us/CallEchoSkill.en-us.lu new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/recognizers/CallEchoSkill.en-us.lu.dialog b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/recognizers/CallEchoSkill.en-us.lu.dialog new file mode 100644 index 0000000000..9980d2dd76 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/recognizers/CallEchoSkill.en-us.lu.dialog @@ -0,0 +1,8 @@ +{ + "$kind": "Microsoft.LuisRecognizer", + "id": "LUIS_CallEchoSkill", + "applicationId": "=settings.luis.CallEchoSkill_en_us_lu.appId", + "version": "=settings.luis.CallEchoSkill_en_us_lu.version", + "endpoint": "=settings.luis.endpoint", + "endpointKey": "=settings.luis.endpointKey" +} diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/recognizers/CallEchoSkill.lu.dialog b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/recognizers/CallEchoSkill.lu.dialog new file mode 100644 index 0000000000..e07dee15ef --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/recognizers/CallEchoSkill.lu.dialog @@ -0,0 +1,5 @@ +{ + "$kind": "Microsoft.MultiLanguageRecognizer", + "id": "LUIS_CallEchoSkill", + "recognizers": {} +} diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/recognizers/CallEchoSkill.lu.qna.dialog b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/recognizers/CallEchoSkill.lu.qna.dialog new file mode 100644 index 0000000000..80b77f0d0d --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/recognizers/CallEchoSkill.lu.qna.dialog @@ -0,0 +1,4 @@ +{ + "$kind": "Microsoft.CrossTrainedRecognizerSet", + "recognizers": [] +} diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/emptyBot/knowledge-base/en-us/emptyBot.en-us.qna b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/emptyBot/knowledge-base/en-us/emptyBot.en-us.qna new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/generated/interruption/CallEchoSkill.en-us.lu b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/generated/interruption/CallEchoSkill.en-us.lu new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/generated/interruption/CallEchoSkill.en-us.qna b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/generated/interruption/CallEchoSkill.en-us.qna new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/generated/interruption/SimpleHostBotComposer.en-us.lu b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/generated/interruption/SimpleHostBotComposer.en-us.lu new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/generated/interruption/SimpleHostBotComposer.en-us.qna b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/generated/interruption/SimpleHostBotComposer.en-us.qna new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/knowledge-base/en-us/simplehostbotcomposer.en-us.qna b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/knowledge-base/en-us/simplehostbotcomposer.en-us.qna new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/language-generation/en-us/common.en-us.lg b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/language-generation/en-us/common.en-us.lg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/language-generation/en-us/simplehostbotcomposer.en-us.lg b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/language-generation/en-us/simplehostbotcomposer.en-us.lg new file mode 100644 index 0000000000..333bea8b5e --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/language-generation/en-us/simplehostbotcomposer.en-us.lg @@ -0,0 +1,26 @@ +[import](common.lg) + +# SendActivity_Greeting() +[Activity + Text = Hello and welcome! + InputHint = acceptingInput +] + +# SendActivity_DidNotUnderstand() +[Activity + Text = ${SendActivity_DidNotUnderstand_text()} +] + +# SendActivity_DidNotUnderstand_text() +- Sorry, I didn't get that. +# SendActivity_M2LqJr() +[Activity + Text = Received endOfConversation.\n\nCode: ${turn.activity.code}. + InputHint = acceptingInput +] + +# SendActivity_bgTcyn() +[Activity + Text = Back in the host bot. + InputHint = acceptingInput +] diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/language-understanding/en-us/simplehostbotcomposer.en-us.lu b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/language-understanding/en-us/simplehostbotcomposer.en-us.lu new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/media/create-azure-resource-command-line.png b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/media/create-azure-resource-command-line.png new file mode 100644 index 0000000000000000000000000000000000000000..497eb8e649d4f1d2d456d337246d01805132ac86 GIT binary patch literal 13842 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 VJv|35z<=2CX{u{u@3nB{{{s`&K;i%Z literal 0 HcmV?d00001 diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/media/publish-az-login.png b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/media/publish-az-login.png new file mode 100644 index 0000000000000000000000000000000000000000..4e721354bccb6d4a83aa70ca55da1b571c2886db GIT binary patch literal 16726 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 13" + ] + }, + "integerExpression": { + "$role": "expression", + "title": "Integer or expression", + "description": "Integer constant or expression to evaluate.", + "oneOf": [ + { + "type": "integer", + "title": "Integer", + "description": "Integer constant.", + "default": 0, + "examples": [ + 15 + ] + }, + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=user.age" + ] + } + ] + }, + "Microsoft.ActivityTemplate": { + "$role": "implements(Microsoft.IActivityTemplate)", + "title": "Microsoft activity template", + "type": "object", + "required": [ + "template", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "template": { + "title": "Template", + "description": "Language Generator template to use to create the activity", + "type": "string" + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ActivityTemplate" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.AdaptiveDialog": { + "$role": "implements(Microsoft.IDialog)", + "title": "Adaptive dialog", + "description": "Flexible, data driven dialog that can adapt to the conversation.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "pattern": "^(?!(=)).*", + "title": "Id", + "description": "Optional dialog ID." + }, + "autoEndDialog": { + "$ref": "#/definitions/booleanExpression", + "title": "Auto end dialog", + "description": "If set to true the dialog will automatically end when there are no further actions. If set to false, remember to manually end the dialog using EndDialog action.", + "default": true + }, + "defaultResultProperty": { + "type": "string", + "title": "Default result property", + "description": "Value that will be passed back to the parent dialog.", + "default": "dialog.result" + }, + "dialogs": { + "type": "array", + "title": "Dialogs", + "description": "Dialogs added to DialogSet.", + "items": { + "$kind": "Microsoft.IDialog", + "title": "Dialog", + "description": "Dialog to add to DialogSet.", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "recognizer": { + "$kind": "Microsoft.IRecognizer", + "title": "Recognizer", + "description": "Input recognizer that interprets user input into intent and entities.", + "$ref": "#/definitions/Microsoft.IRecognizer" + }, + "generator": { + "$kind": "Microsoft.ILanguageGenerator", + "title": "Language generator", + "description": "Language generator that generates bot responses.", + "$ref": "#/definitions/Microsoft.ILanguageGenerator" + }, + "selector": { + "$kind": "Microsoft.ITriggerSelector", + "title": "Selector", + "description": "Policy to determine which trigger is executed. Defaults to a 'best match' selector (optional).", + "$ref": "#/definitions/Microsoft.ITriggerSelector" + }, + "triggers": { + "type": "array", + "description": "List of triggers defined for this dialog.", + "title": "Triggers", + "items": { + "$kind": "Microsoft.ITrigger", + "title": "Event triggers", + "description": "Event triggers for handling events.", + "$ref": "#/definitions/Microsoft.ITrigger" + } + }, + "schema": { + "title": "Schema", + "description": "Schema to fill in.", + "anyOf": [ + { + "$ref": "#/definitions/schema" + }, + { + "type": "string", + "title": "Reference to JSON schema", + "description": "Reference to JSON schema .dialog file." + } + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.AdaptiveDialog" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.AgeEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Age entity recognizer", + "description": "Recognizer which recognizes age.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.AgeEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.Ask": { + "$role": [ + "implements(Microsoft.IDialog)", + "extends(Microsoft.SendActivity)" + ], + "title": "Send activity to ask a question", + "description": "This is an action which sends an activity to the user when a response is expected", + "type": "object", + "$policies": { + "interactive": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "expectedProperties": { + "$ref": "#/definitions/arrayExpression", + "title": "Expected properties", + "description": "Properties expected from the user.", + "examples": [ + [ + "age", + "name" + ] + ], + "items": { + "type": "string", + "title": "Name", + "description": "Name of the property" + } + }, + "defaultOperation": { + "$ref": "#/definitions/stringExpression", + "title": "Default operation", + "description": "Sets the default operation that will be used when no operation is recognized in the response to this Ask.", + "examples": [ + "Add()", + "Remove()" + ] + }, + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action." + }, + "activity": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Activity", + "description": "Activity to send.", + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.Ask" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.AttachmentInput": { + "$role": [ + "implements(Microsoft.IDialog)", + "extends(Microsoft.InputDialog)" + ], + "title": "Attachment input dialog", + "description": "Collect information - Ask for a file or image.", + "$policies": { + "interactive": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "type": "object", + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "defaultValue": { + "$role": "expression", + "title": "Default value", + "description": "'Property' will be set to the object or the result of this expression when max turn count is exceeded.", + "oneOf": [ + { + "$ref": "#/definitions/botframework.json/definitions/Attachment", + "title": "Object", + "description": "Attachment object." + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "value": { + "$role": "expression", + "title": "Value", + "description": "'Property' will be set to the object or the result of this expression unless it evaluates to null.", + "oneOf": [ + { + "$ref": "#/definitions/botframework.json/definitions/Attachment", + "title": "Object", + "description": "Attachment object." + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "outputFormat": { + "$role": "expression", + "title": "Output format", + "description": "Attachment output format.", + "oneOf": [ + { + "type": "string", + "title": "Standard format", + "description": "Standard output formats.", + "enum": [ + "all", + "first" + ], + "default": "first" + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "default": false, + "examples": [ + false, + "=user.isVip" + ] + }, + "prompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Initial prompt", + "description": "Message to send to collect information.", + "examples": [ + "What is your birth date?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "unrecognizedPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Unrecognized prompt", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "invalidPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Invalid prompt", + "description": "Message to send when the user input does not meet any validation expression.", + "examples": [ + "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "defaultValueResponse": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Default value response", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "maxTurnCount": { + "$ref": "#/definitions/integerExpression", + "title": "Max turn count", + "description": "Maximum number of re-prompt attempts to collect information.", + "default": 3, + "minimum": 0, + "maximum": 2147483647, + "examples": [ + 3, + "=settings.xyz" + ] + }, + "validations": { + "type": "array", + "title": "Validation expressions", + "description": "Expression to validate user input.", + "items": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Expression which needs to met for the input to be considered valid", + "examples": [ + "int(this.value) > 1 && int(this.value) <= 150", + "count(this.value) < 300" + ] + } + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", + "examples": [ + "$birthday", + "dialog.${user.name}", + "=f(x)" + ] + }, + "alwaysPrompt": { + "$ref": "#/definitions/booleanExpression", + "title": "Always prompt", + "description": "Collect information even if the specified 'property' is not empty.", + "default": false, + "examples": [ + false, + "=$val" + ] + }, + "allowInterruptions": { + "$ref": "#/definitions/booleanExpression", + "title": "Allow Interruptions", + "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", + "default": true, + "examples": [ + true, + "=user.xyz" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.AttachmentInput" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.BeginDialog": { + "$role": "implements(Microsoft.IDialog)", + "title": "Begin a dialog", + "description": "Begin another dialog.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "dialog": { + "oneOf": [ + { + "$kind": "Microsoft.IDialog", + "pattern": "^(?!(=)).*", + "title": "Dialog", + "$ref": "#/definitions/Microsoft.IDialog" + }, + { + "$ref": "#/definitions/equalsExpression" + } + ], + "title": "Dialog name", + "description": "Name of the dialog to call." + }, + "options": { + "$ref": "#/definitions/objectExpression", + "title": "Options", + "description": "One or more options that are passed to the dialog that is called.", + "examples": [ + { + "arg1": "=expression" + } + ], + "additionalProperties": { + "type": "string", + "title": "Options", + "description": "Options for dialog." + } + }, + "activityProcessed": { + "$ref": "#/definitions/booleanExpression", + "title": "Activity processed", + "description": "When set to false, the dialog that is called can process the current activity.", + "default": true + }, + "resultProperty": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property to store any value returned by the dialog that is called.", + "examples": [ + "dialog.userName" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.BeginDialog" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.BeginSkill": { + "$role": "implements(Microsoft.IDialog)", + "title": "Begin a skill", + "description": "Begin a remote skill.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the skill dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + true, + "=f(x)" + ] + }, + "activityProcessed": { + "$ref": "#/definitions/booleanExpression", + "title": "Activity processed", + "description": "When set to false, the skill will be started using the activity in the current turn context instead of the activity in the Activity property.", + "default": true, + "examples": [ + true, + "=f(x)" + ] + }, + "resultProperty": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property to store any value returned by the dialog that is called.", + "examples": [ + "dialog.userName" + ] + }, + "botId": { + "$ref": "#/definitions/stringExpression", + "title": "Skill host bot ID", + "description": "The Microsoft App ID that will be calling the skill.", + "default": "=settings.MicrosoftAppId" + }, + "skillHostEndpoint": { + "$ref": "#/definitions/stringExpression", + "title": "Skill host", + "description": "The callback Url for the skill host.", + "default": "=settings.skillHostEndpoint", + "examples": [ + "https://mybot.contoso.com/api/skills/" + ] + }, + "connectionName": { + "$ref": "#/definitions/stringExpression", + "title": "OAuth connection name (SSO)", + "description": "The OAuth Connection Name, that would be used to perform Single SignOn with a skill.", + "default": "=settings.connectionName" + }, + "skillAppId": { + "$ref": "#/definitions/stringExpression", + "title": "Skill App Id", + "description": "The Microsoft App ID for the skill." + }, + "skillEndpoint": { + "$ref": "#/definitions/stringExpression", + "title": "Skill endpoint ", + "description": "The /api/messages endpoint for the skill.", + "examples": [ + "https://myskill.contoso.com/api/messages/" + ] + }, + "activity": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Activity", + "description": "The activity to send to the skill.", + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "allowInterruptions": { + "$ref": "#/definitions/booleanExpression", + "title": "Allow interruptions", + "description": "A boolean expression that determines whether the parent should be allowed to interrupt the skill.", + "default": true, + "examples": [ + true, + "=user.xyz" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.BeginSkill" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.BreakLoop": { + "$role": "implements(Microsoft.IDialog)", + "title": "Break loop", + "description": "Stop executing this loop", + "type": "object", + "required": [ + "$kind" + ], + "$policies": { + "lastAction": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.BreakLoop" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.CancelAllDialogs": { + "$role": "implements(Microsoft.IDialog)", + "title": "Cancel all dialogs", + "description": "Cancel all active dialogs. All dialogs in the dialog chain will need a trigger to capture the event configured in this action.", + "type": "object", + "$policies": { + "lastAction": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "activityProcessed": { + "$ref": "#/definitions/booleanExpression", + "title": "Activity processed", + "description": "When set to false, the caller dialog is told it should process the current activity.", + "default": true + }, + "eventName": { + "$ref": "#/definitions/stringExpression", + "title": "Event name", + "description": "Name of the event to emit." + }, + "eventValue": { + "$ref": "#/definitions/valueExpression", + "title": "Event value", + "description": "Value to emit with the event (optional).", + "additionalProperties": true + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.CancelAllDialogs" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.CancelDialog": { + "$role": "implements(Microsoft.IDialog)", + "title": "Cancel all dialogs", + "description": "Cancel all active dialogs. All dialogs in the dialog chain will need a trigger to capture the event configured in this action.", + "type": "object", + "$policies": { + "lastAction": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "activityProcessed": { + "$ref": "#/definitions/booleanExpression", + "title": "Activity processed", + "description": "When set to false, the caller dialog is told it should process the current activity.", + "default": true + }, + "eventName": { + "$ref": "#/definitions/stringExpression", + "title": "Event name", + "description": "Name of the event to emit." + }, + "eventValue": { + "$ref": "#/definitions/valueExpression", + "title": "Event value", + "description": "Value to emit with the event (optional).", + "additionalProperties": true + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.CancelDialog" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ChannelMentionEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)" + ], + "title": "Channel mention entity recognizer", + "description": "Promotes mention entities passed by a channel via the activity.entities into recognizer result.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ChannelMentionEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ChoiceInput": { + "$role": [ + "implements(Microsoft.IDialog)", + "extends(Microsoft.InputDialog)" + ], + "title": "Choice input dialog", + "description": "Collect information - Pick from a list of choices", + "type": "object", + "$policies": { + "interactive": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "defaultValue": { + "$ref": "#/definitions/stringExpression", + "title": "Default value", + "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", + "examples": [ + "hello world", + "Hello ${user.name}", + "=concat(user.firstname, user.lastName)" + ] + }, + "value": { + "$ref": "#/definitions/stringExpression", + "title": "Value", + "description": "'Property' will be set to the value of this expression unless it evaluates to null.", + "examples": [ + "hello world", + "Hello ${user.name}", + "=concat(user.firstname, user.lastName)" + ] + }, + "outputFormat": { + "$role": "expression", + "title": "Output format", + "description": "Sets the desired choice output format (either value or index into choices).", + "oneOf": [ + { + "type": "string", + "title": "Standard", + "description": "Standard output format.", + "enum": [ + "value", + "index" + ], + "default": "value" + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "choices": { + "$role": "expression", + "title": "Array of choices", + "description": "Choices to choose from.", + "oneOf": [ + { + "type": "array", + "title": "Simple choices", + "description": "Simple choices to choose from.", + "items": [ + { + "type": "string", + "title": "Simple choice", + "description": "One choice for choice input." + } + ] + }, + { + "type": "array", + "title": "Structured choices", + "description": "Choices that allow full control.", + "items": [ + { + "type": "object", + "title": "Structured choice", + "description": "Structured choice to choose from.", + "properties": { + "value": { + "type": "string", + "title": "Value", + "description": "Value to return when this choice is selected." + }, + "action": { + "$ref": "#/definitions/botframework.json/definitions/CardAction", + "title": "Action", + "description": "Card action for the choice." + }, + "synonyms": { + "type": "array", + "title": "Synonyms", + "description": "List of synonyms to recognize in addition to the value (optional).", + "items": { + "type": "string", + "title": "Synonym", + "description": "Synonym for value." + } + } + } + } + ] + }, + { + "$ref": "#/definitions/stringExpression" + } + ] + }, + "defaultLocale": { + "$ref": "#/definitions/stringExpression", + "title": "Default locale", + "description": "The default locale to use to parse confirmation choices if there is not one passed by the caller.", + "default": "en-us", + "examples": [ + "en-us" + ] + }, + "style": { + "$role": "expression", + "title": "List style", + "description": "Sets the ListStyle to control how choices are rendered.", + "oneOf": [ + { + "type": "string", + "title": "List style", + "description": "Standard list style.", + "enum": [ + "none", + "auto", + "inline", + "list", + "suggestedAction", + "heroCard" + ], + "default": "auto" + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "choiceOptions": { + "title": "Choice options", + "description": "Sets the choice options used for controlling how choices are combined.", + "oneOf": [ + { + "type": "object", + "title": "Object", + "description": "Choice options object.", + "properties": { + "inlineSeparator": { + "type": "string", + "title": "Inline separator", + "description": "Character used to separate individual choices when there are more than 2 choices", + "default": ", " + }, + "inlineOr": { + "type": "string", + "title": "Inline or", + "description": "Separator inserted between the choices when there are only 2 choices", + "default": " or " + }, + "inlineOrMore": { + "type": "string", + "title": "Inline or more", + "description": "Separator inserted between the last 2 choices when their are more than 2 choices.", + "default": ", or " + }, + "includeNumbers": { + "type": "boolean", + "title": "Include numbers", + "description": "If true, 'inline' and 'list' list style will be prefixed with the index of the choice.", + "default": true + } + } + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "recognizerOptions": { + "title": "Recognizer options", + "description": "Sets how to recognize choices in the response", + "oneOf": [ + { + "type": "object", + "title": "Object", + "description": "Options for recognizer.", + "properties": { + "noValue": { + "type": "boolean", + "title": "No value", + "description": "If true, the choices value field will NOT be search over", + "default": false + }, + "noAction": { + "type": "boolean", + "title": "No action", + "description": "If true, the choices action.title field will NOT be searched over", + "default": false + }, + "recognizeNumbers": { + "type": "boolean", + "title": "Recognize numbers", + "description": "If true, the number recognizer will be used to recognize an index response (1,2,3...) to the prompt.", + "default": true + }, + "recognizeOrdinals": { + "type": "boolean", + "title": "Recognize ordinals", + "description": "If true, the ordinal recognizer will be used to recognize ordinal response (first/second/...) to the prompt.", + "default": true + } + } + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "default": false, + "examples": [ + false, + "=user.isVip" + ] + }, + "prompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Initial prompt", + "description": "Message to send to collect information.", + "examples": [ + "What is your birth date?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "unrecognizedPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Unrecognized prompt", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "invalidPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Invalid prompt", + "description": "Message to send when the user input does not meet any validation expression.", + "examples": [ + "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "defaultValueResponse": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Default value response", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "maxTurnCount": { + "$ref": "#/definitions/integerExpression", + "title": "Max turn count", + "description": "Maximum number of re-prompt attempts to collect information.", + "default": 3, + "minimum": 0, + "maximum": 2147483647, + "examples": [ + 3, + "=settings.xyz" + ] + }, + "validations": { + "type": "array", + "title": "Validation expressions", + "description": "Expression to validate user input.", + "items": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Expression which needs to met for the input to be considered valid", + "examples": [ + "int(this.value) > 1 && int(this.value) <= 150", + "count(this.value) < 300" + ] + } + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", + "examples": [ + "$birthday", + "dialog.${user.name}", + "=f(x)" + ] + }, + "alwaysPrompt": { + "$ref": "#/definitions/booleanExpression", + "title": "Always prompt", + "description": "Collect information even if the specified 'property' is not empty.", + "default": false, + "examples": [ + false, + "=$val" + ] + }, + "allowInterruptions": { + "$ref": "#/definitions/booleanExpression", + "title": "Allow Interruptions", + "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", + "default": true, + "examples": [ + true, + "=user.xyz" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ChoiceInput" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ConditionalSelector": { + "$role": "implements(Microsoft.ITriggerSelector)", + "title": "Conditional trigger selector", + "description": "Use a rule selector based on a condition", + "type": "object", + "required": [ + "condition", + "ifTrue", + "ifFalse", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Expression to evaluate" + }, + "ifTrue": { + "$kind": "Microsoft.ITriggerSelector", + "$ref": "#/definitions/Microsoft.ITriggerSelector" + }, + "ifFalse": { + "$kind": "Microsoft.ITriggerSelector", + "$ref": "#/definitions/Microsoft.ITriggerSelector" + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ConditionalSelector" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ConfirmationEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Confirmation entity recognizer", + "description": "Recognizer which recognizes confirmation choices (yes/no).", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ConfirmationEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ConfirmInput": { + "$role": [ + "implements(Microsoft.IDialog)", + "extends(Microsoft.InputDialog)" + ], + "title": "Confirm input dialog", + "description": "Collect information - Ask for confirmation (yes or no).", + "type": "object", + "$policies": { + "interactive": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "outputFormat": { + "$ref": "#/definitions/valueExpression", + "title": "Output format", + "description": "Optional expression to use to format the output.", + "examples": [ + "=concat('confirmation:', this.value)" + ] + }, + "defaultLocale": { + "$ref": "#/definitions/stringExpression", + "title": "Default locale", + "description": "The Default locale or an expression which provides the default locale to use as default if not found in the activity.", + "default": "en-us", + "examples": [ + "en-us" + ] + }, + "style": { + "$role": "expression", + "title": "List style", + "description": "Sets the ListStyle to control how choices are rendered.", + "oneOf": [ + { + "type": "string", + "title": "Standard style", + "description": "Standard style for rendering choices.", + "enum": [ + "none", + "auto", + "inline", + "list", + "suggestedAction", + "heroCard" + ], + "default": "auto" + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "choiceOptions": { + "title": "Choice options", + "description": "Choice Options or expression which provides Choice Options to control display choices to the user.", + "oneOf": [ + { + "type": "object", + "title": "Choice options", + "description": "Choice options.", + "properties": { + "inlineSeparator": { + "type": "string", + "title": "Inline separator", + "description": "Text to separate individual choices when there are more than 2 choices", + "default": ", " + }, + "inlineOr": { + "type": "string", + "title": "Inline or", + "description": "Text to be inserted between the choices when their are only 2 choices", + "default": " or " + }, + "inlineOrMore": { + "type": "string", + "title": "Inline or more", + "description": "Text to be inserted between the last 2 choices when their are more than 2 choices.", + "default": ", or " + }, + "includeNumbers": { + "type": "boolean", + "title": "Include numbers", + "description": "If true, inline and list style choices will be prefixed with the index of the choice.", + "default": true + } + } + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "defaultValue": { + "$ref": "#/definitions/booleanExpression", + "title": "Default value", + "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", + "examples": [ + true, + "=user.age > 3" + ] + }, + "value": { + "$ref": "#/definitions/booleanExpression", + "title": "Value", + "description": "'Property' will be set to the value of this expression unless it evaluates to null.", + "examples": [ + true, + "=user.isVip" + ] + }, + "confirmChoices": { + "$role": "expression", + "title": "Array of choice objects", + "description": "Array of simple or structured choices.", + "oneOf": [ + { + "type": "array", + "title": "Simple choices", + "description": "Simple choices to confirm from.", + "items": [ + { + "type": "string", + "title": "Simple choice", + "description": "Simple choice to confirm." + } + ] + }, + { + "type": "array", + "title": "Structured choices", + "description": "Structured choices for confirmations.", + "items": [ + { + "type": "object", + "title": "Choice", + "description": "Choice to confirm.", + "properties": { + "value": { + "type": "string", + "title": "Value", + "description": "Value to return when this choice is selected." + }, + "action": { + "$ref": "#/definitions/botframework.json/definitions/CardAction", + "title": "Action", + "description": "Card action for the choice." + }, + "synonyms": { + "type": "array", + "title": "Synonyms", + "description": "List of synonyms to recognize in addition to the value (optional).", + "items": { + "type": "string", + "title": "Synonym", + "description": "Synonym for choice." + } + } + } + } + ] + }, + { + "$ref": "#/definitions/stringExpression" + } + ] + }, + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "default": false, + "examples": [ + false, + "=user.isVip" + ] + }, + "prompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Initial prompt", + "description": "Message to send to collect information.", + "examples": [ + "What is your birth date?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "unrecognizedPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Unrecognized prompt", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "invalidPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Invalid prompt", + "description": "Message to send when the user input does not meet any validation expression.", + "examples": [ + "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "defaultValueResponse": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Default value response", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "maxTurnCount": { + "$ref": "#/definitions/integerExpression", + "title": "Max turn count", + "description": "Maximum number of re-prompt attempts to collect information.", + "default": 3, + "minimum": 0, + "maximum": 2147483647, + "examples": [ + 3, + "=settings.xyz" + ] + }, + "validations": { + "type": "array", + "title": "Validation expressions", + "description": "Expression to validate user input.", + "items": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Expression which needs to met for the input to be considered valid", + "examples": [ + "int(this.value) > 1 && int(this.value) <= 150", + "count(this.value) < 300" + ] + } + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", + "examples": [ + "$birthday", + "dialog.${user.name}", + "=f(x)" + ] + }, + "alwaysPrompt": { + "$ref": "#/definitions/booleanExpression", + "title": "Always prompt", + "description": "Collect information even if the specified 'property' is not empty.", + "default": false, + "examples": [ + false, + "=$val" + ] + }, + "allowInterruptions": { + "$ref": "#/definitions/booleanExpression", + "title": "Allow Interruptions", + "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", + "default": true, + "examples": [ + true, + "=user.xyz" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ConfirmInput" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ContinueConversation": { + "$role": "implements(Microsoft.IDialog)", + "title": "Continue conversation (Queue)", + "description": "Continue a specific conversation (via StorageQueue implementation).", + "type": "object", + "required": [ + "conversationReference", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "conversationReference": { + "$ref": "#/definitions/objectExpression", + "title": "Conversation Reference", + "description": "A conversation reference. (NOTE: Minimum required values or channelId, conversation).", + "examples": [ + { + "channelId": "skype", + "serviceUrl": "http://smba.skype.com", + "conversation": { + "id": "11111" + }, + "bot": { + "id": "22222" + }, + "user": { + "id": "33333" + }, + "locale": "en-us" + } + ] + }, + "value": { + "$ref": "#/definitions/valueExpression", + "title": "Value", + "description": "Value to send in the activity.value." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ContinueConversation" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ContinueConversationLater": { + "$role": "implements(Microsoft.IDialog)", + "title": "Continue conversation later (Queue)", + "description": "Continue conversation at later time (via StorageQueue implementation).", + "type": "object", + "required": [ + "date", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "date": { + "$ref": "#/definitions/stringExpression", + "title": "Date", + "description": "Date in the future as a ISO string when the conversation should continue.", + "examples": [ + "=addHours(utcNow(), 1)" + ] + }, + "value": { + "$ref": "#/definitions/valueExpression", + "title": "Value", + "description": "Value to send in the activity.value." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ContinueConversationLater" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ContinueLoop": { + "$role": "implements(Microsoft.IDialog)", + "title": "Continue loop", + "description": "Stop executing this template and continue with the next iteration of the loop.", + "type": "object", + "required": [ + "$kind" + ], + "$policies": { + "lastAction": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ContinueLoop" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.CrossTrainedRecognizerSet": { + "$role": "implements(Microsoft.IRecognizer)", + "title": "Cross-trained recognizer set", + "description": "Recognizer for selecting between cross trained recognizers.", + "type": "object", + "required": [ + "recognizers", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional unique id using with RecognizerSet." + }, + "recognizers": { + "type": "array", + "title": "Recognizers", + "description": "List of Recognizers defined for this set.", + "items": { + "$kind": "Microsoft.IRecognizer", + "$ref": "#/definitions/Microsoft.IRecognizer" + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.CrossTrainedRecognizerSet" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.CurrencyEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Currency entity recognizer", + "description": "Recognizer which recognizes currency.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.CurrencyEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.DateTimeEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Date and time entity recognizer", + "description": "Recognizer which recognizes dates and time fragments.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.DateTimeEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.DateTimeInput": { + "$role": [ + "implements(Microsoft.IDialog)", + "extends(Microsoft.InputDialog)" + ], + "title": "Date/time input dialog", + "description": "Collect information - Ask for date and/ or time", + "type": "object", + "defaultLocale": { + "$ref": "#/definitions/stringExpression", + "title": "Default locale", + "description": "Default locale.", + "default": "en-us" + }, + "$policies": { + "interactive": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "defaultValue": { + "$ref": "#/definitions/stringExpression", + "format": "date-time", + "title": "Default date", + "description": "'Property' will be set to the value or the result of the expression when max turn count is exceeded.", + "examples": [ + "=user.birthday" + ] + }, + "value": { + "$ref": "#/definitions/stringExpression", + "format": "date-time", + "title": "Value", + "description": "'Property' will be set to the value or the result of the expression unless it evaluates to null.", + "examples": [ + "=user.birthday" + ] + }, + "outputFormat": { + "$ref": "#/definitions/expression", + "title": "Output format", + "description": "Expression to use for formatting the output.", + "examples": [ + "=this.value[0].Value" + ] + }, + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "default": false, + "examples": [ + false, + "=user.isVip" + ] + }, + "prompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Initial prompt", + "description": "Message to send to collect information.", + "examples": [ + "What is your birth date?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "unrecognizedPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Unrecognized prompt", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "invalidPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Invalid prompt", + "description": "Message to send when the user input does not meet any validation expression.", + "examples": [ + "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "defaultValueResponse": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Default value response", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "maxTurnCount": { + "$ref": "#/definitions/integerExpression", + "title": "Max turn count", + "description": "Maximum number of re-prompt attempts to collect information.", + "default": 3, + "minimum": 0, + "maximum": 2147483647, + "examples": [ + 3, + "=settings.xyz" + ] + }, + "validations": { + "type": "array", + "title": "Validation expressions", + "description": "Expression to validate user input.", + "items": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Expression which needs to met for the input to be considered valid", + "examples": [ + "int(this.value) > 1 && int(this.value) <= 150", + "count(this.value) < 300" + ] + } + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", + "examples": [ + "$birthday", + "dialog.${user.name}", + "=f(x)" + ] + }, + "alwaysPrompt": { + "$ref": "#/definitions/booleanExpression", + "title": "Always prompt", + "description": "Collect information even if the specified 'property' is not empty.", + "default": false, + "examples": [ + false, + "=$val" + ] + }, + "allowInterruptions": { + "$ref": "#/definitions/booleanExpression", + "title": "Allow Interruptions", + "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", + "default": true, + "examples": [ + true, + "=user.xyz" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.DateTimeInput" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.DebugBreak": { + "$role": "implements(Microsoft.IDialog)", + "title": "Debugger break", + "description": "If debugger is attached, stop the execution at this point in the conversation.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.DebugBreak" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.DeleteActivity": { + "$role": "implements(Microsoft.IDialog)", + "title": "Delete Activity", + "description": "Delete an activity that was previously sent.", + "type": "object", + "required": [ + "activityId", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "activityId": { + "$ref": "#/definitions/stringExpression", + "title": "ActivityId", + "description": "expression to an activityId to delete", + "examples": [ + "=turn.lastresult.id" + ] + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.DeleteActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.DeleteProperties": { + "$role": "implements(Microsoft.IDialog)", + "title": "Delete Properties", + "description": "Delete multiple properties and any value it holds.", + "type": "object", + "required": [ + "properties", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "properties": { + "type": "array", + "title": "Properties", + "description": "Properties to delete.", + "items": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property to delete." + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.DeleteProperties" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.DeleteProperty": { + "$role": "implements(Microsoft.IDialog)", + "title": "Delete property", + "description": "Delete a property and any value it holds.", + "type": "object", + "required": [ + "property", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property to delete." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.DeleteProperty" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.DimensionEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Dimension entity recognizer", + "description": "Recognizer which recognizes dimension.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.DimensionEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.EditActions": { + "$role": "implements(Microsoft.IDialog)", + "title": "Edit actions.", + "description": "Edit the current list of actions.", + "type": "object", + "required": [ + "changeType", + "actions", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "changeType": { + "title": "Type of change", + "description": "Type of change to apply to the current actions.", + "oneOf": [ + { + "type": "string", + "title": "Standard change", + "description": "Standard change types.", + "enum": [ + "insertActions", + "insertActionsBeforeTags", + "appendActions", + "endSequence", + "replaceSequence" + ] + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Actions to apply.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.EditActions" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.EditArray": { + "$role": "implements(Microsoft.IDialog)", + "title": "Edit array", + "description": "Modify an array in memory", + "type": "object", + "required": [ + "itemsProperty", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "changeType": { + "title": "Type of change", + "description": "Type of change to the array in memory.", + "oneOf": [ + { + "type": "string", + "title": "Change type", + "description": "Standard change type.", + "enum": [ + "push", + "pop", + "take", + "remove", + "clear" + ] + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "itemsProperty": { + "$ref": "#/definitions/stringExpression", + "title": "Items property", + "description": "Property that holds the array to update." + }, + "resultProperty": { + "$ref": "#/definitions/stringExpression", + "title": "Result property", + "description": "Property to store the result of this action." + }, + "value": { + "$ref": "#/definitions/valueExpression", + "title": "Value", + "description": "New value or expression.", + "examples": [ + "milk", + "=dialog.favColor", + "=dialog.favColor == 'red'" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.EditArray" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.EmailEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Email entity recognizer", + "description": "Recognizer which recognizes email.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.EmailEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.EmitEvent": { + "$role": "implements(Microsoft.IDialog)", + "title": "Emit a custom event", + "description": "Emit an event. Capture this event with a trigger.", + "type": "object", + "required": [ + "eventName", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "eventName": { + "$role": "expression", + "title": "Event name", + "description": "Name of the event to emit.", + "oneOf": [ + { + "type": "string", + "title": "Built-in event", + "description": "Standard event type.", + "enum": [ + "beginDialog", + "resumeDialog", + "repromptDialog", + "cancelDialog", + "endDialog", + "activityReceived", + "recognizedIntent", + "unknownIntent", + "actionsStarted", + "actionsSaved", + "actionsEnded", + "actionsResumed" + ] + }, + { + "type": "string", + "title": "Custom event", + "description": "Custom event type", + "pattern": "^(?!(beginDialog$|resumeDialog$|repromptDialog$|cancelDialog$|endDialog$|activityReceived$|recognizedIntent$|unknownIntent$|actionsStarted$|actionsSaved$|actionsEnded$|actionsResumed))(\\S){1}.*" + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "eventValue": { + "$ref": "#/definitions/valueExpression", + "title": "Event value", + "description": "Value to emit with the event (optional)." + }, + "bubbleEvent": { + "$ref": "#/definitions/booleanExpression", + "title": "Bubble event", + "description": "If true this event is passed on to parent dialogs." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.EmitEvent" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.EndDialog": { + "$role": "implements(Microsoft.IDialog)", + "title": "End dialog", + "description": "End this dialog.", + "type": "object", + "$policies": { + "lastAction": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "value": { + "$ref": "#/definitions/valueExpression", + "title": "Value", + "description": "Result value returned to the parent dialog.", + "examples": [ + "=dialog.userName", + "='tomato'" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.EndDialog" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.EndTurn": { + "$role": "implements(Microsoft.IDialog)", + "title": "End turn", + "description": "End the current turn without ending the dialog.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.EndTurn" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.FirstSelector": { + "$role": "implements(Microsoft.ITriggerSelector)", + "title": "First trigger selector", + "description": "Selector for first true rule", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.FirstSelector" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.Foreach": { + "$role": "implements(Microsoft.IDialog)", + "title": "For each item", + "description": "Execute actions on each item in an a collection.", + "type": "object", + "required": [ + "itemsProperty", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "itemsProperty": { + "$ref": "#/definitions/stringExpression", + "title": "Items property", + "description": "Property that holds the array.", + "examples": [ + "user.todoList" + ] + }, + "index": { + "$ref": "#/definitions/stringExpression", + "title": "Index property", + "description": "Property that holds the index of the item.", + "default": "dialog.foreach.index" + }, + "value": { + "$ref": "#/definitions/stringExpression", + "title": "Value property", + "description": "Property that holds the value of the item.", + "default": "dialog.foreach.value" + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Actions to execute for each item. Use '$foreach.value' to access the value of each item. Use '$foreach.index' to access the index of each item.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.Foreach" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ForeachPage": { + "$role": "implements(Microsoft.IDialog)", + "title": "For each page", + "description": "Execute actions on each page (collection of items) in an array.", + "type": "object", + "required": [ + "itemsProperty", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "itemsProperty": { + "$ref": "#/definitions/stringExpression", + "title": "Items property", + "description": "Property that holds the array.", + "examples": [ + "user.todoList" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Actions to execute for each page. Use '$foreach.page' to access each page.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "pageIndex": { + "$ref": "#/definitions/stringExpression", + "title": "Index property", + "description": "Property that holds the index of the page.", + "default": "dialog.foreach.pageindex" + }, + "page": { + "$ref": "#/definitions/stringExpression", + "title": "Page property", + "description": "Property that holds the value of the page.", + "default": "dialog.foreach.page" + }, + "pageSize": { + "$ref": "#/definitions/integerExpression", + "title": "Page size", + "description": "Number of items in each page.", + "default": 10 + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ForeachPage" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.GetActivityMembers": { + "$role": "implements(Microsoft.IDialog)", + "title": "Get activity members", + "description": "Get the members who are participating in an activity. (BotFrameworkAdapter only)", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property (named location to store information).", + "examples": [ + "user.age" + ] + }, + "activityId": { + "$ref": "#/definitions/stringExpression", + "title": "Activity Id", + "description": "Activity ID or expression to an activityId to use to get the members. If none is defined then the current activity id will be used.", + "examples": [ + "turn.lastresult.id" + ] + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.GetActivityMembers" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.GetConversationMembers": { + "$role": "implements(Microsoft.IDialog)", + "title": "Get conversation members", + "description": "Get the members who are participating in an conversation. (BotFrameworkAdapter only)", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property (named location to store information).", + "examples": [ + "user.age" + ] + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.GetConversationMembers" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.GetConversationReference": { + "$role": "implements(Microsoft.IDialog)", + "title": "Get ConversationReference", + "description": "Gets the ConversationReference from current context and stores it in property so it can be used to with ContinueConversation action.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property (named location to store information).", + "examples": [ + "user.age" + ] + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.GetConversationReference" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.GotoAction": { + "$role": "implements(Microsoft.IDialog)", + "title": "Go to action", + "description": "Go to an an action by id.", + "type": "object", + "required": [ + "actionId", + "$kind" + ], + "$policies": { + "lastAction": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "actionId": { + "$ref": "#/definitions/stringExpression", + "title": "Action Id", + "description": "Action Id to execute next" + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.GotoAction" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.GuidEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Guid entity recognizer", + "description": "Recognizer which recognizes guids.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.GuidEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.HashtagEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Hashtag entity recognizer", + "description": "Recognizer which recognizes Hashtags.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.HashtagEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.HttpRequest": { + "$role": "implements(Microsoft.IDialog)", + "type": "object", + "title": "HTTP request", + "description": "Make a HTTP request.", + "required": [ + "url", + "method", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "method": { + "type": "string", + "title": "HTTP method", + "description": "HTTP method to use.", + "enum": [ + "GET", + "POST", + "PATCH", + "PUT", + "DELETE" + ], + "examples": [ + "GET", + "POST" + ] + }, + "url": { + "$ref": "#/definitions/stringExpression", + "title": "Url", + "description": "URL to call (supports data binding).", + "examples": [ + "https://contoso.com" + ] + }, + "body": { + "$ref": "#/definitions/valueExpression", + "title": "Body", + "description": "Body to include in the HTTP call (supports data binding).", + "additionalProperties": true + }, + "resultProperty": { + "$ref": "#/definitions/stringExpression", + "title": "Result property", + "description": "A property to store the result of this action. The result can include any of the 4 properties from the HTTP response: statusCode, reasonPhrase, content, and headers. If the content is JSON it will be a deserialized object. The values can be accessed via .content for example.", + "default": "turn.results", + "examples": [ + "dialog.contosodata" + ] + }, + "contentType": { + "$ref": "#/definitions/stringExpression", + "title": "Content type", + "description": "Content media type for the body.", + "examples": [ + "application/json", + "text/plain" + ] + }, + "headers": { + "type": "object", + "title": "Headers", + "description": "One or more headers to include in the request (supports data binding).", + "additionalProperties": { + "$ref": "#/definitions/stringExpression" + } + }, + "responseType": { + "$ref": "#/definitions/stringExpression", + "title": "Response type", + "description": "Defines the type of HTTP response. Automatically calls the 'Send a response' action if set to 'Activity' or 'Activities'.", + "oneOf": [ + { + "type": "string", + "title": "Standard response", + "description": "Standard response type.", + "enum": [ + "none", + "json", + "activity", + "activities", + "binary" + ], + "default": "json" + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.HttpRequest" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.IActivityTemplate": { + "title": "Microsoft ActivityTemplates", + "description": "Components which are ActivityTemplate, which is string template, an activity, or a implementation of ActivityTemplate", + "$role": "interface", + "oneOf": [ + { + "$ref": "#/definitions/Microsoft.ActivityTemplate" + }, + { + "$ref": "#/definitions/Microsoft.StaticActivityTemplate" + }, + { + "$ref": "#/definitions/botframework.json/definitions/Activity", + "required": [ + "type" + ] + }, + { + "type": "string" + } + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Declarative", + "version": "4.13.2" + } + }, + "Microsoft.IAdapter": { + "$role": "interface", + "title": "Bot adapter", + "description": "Component that enables connecting bots to chat clients and applications.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime", + "version": "4.13.2" + }, + "properties": { + "route": { + "type": "string", + "title": "Adapter http route", + "description": "Route where to expose the adapter." + }, + "type": { + "type": "string", + "title": "Adapter type name", + "description": "Adapter type name" + } + } + }, + "Microsoft.IDialog": { + "title": "Microsoft dialogs", + "description": "Components which derive from Dialog", + "$role": "interface", + "oneOf": [ + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog" + }, + { + "$ref": "#/definitions/Microsoft.Ask" + }, + { + "$ref": "#/definitions/Microsoft.AttachmentInput" + }, + { + "$ref": "#/definitions/Microsoft.BeginDialog" + }, + { + "$ref": "#/definitions/Microsoft.BeginSkill" + }, + { + "$ref": "#/definitions/Microsoft.BreakLoop" + }, + { + "$ref": "#/definitions/Microsoft.CancelAllDialogs" + }, + { + "$ref": "#/definitions/Microsoft.CancelDialog" + }, + { + "$ref": "#/definitions/Microsoft.ChoiceInput" + }, + { + "$ref": "#/definitions/Microsoft.ConfirmInput" + }, + { + "$ref": "#/definitions/Microsoft.ContinueConversation" + }, + { + "$ref": "#/definitions/Microsoft.ContinueConversationLater" + }, + { + "$ref": "#/definitions/Microsoft.ContinueLoop" + }, + { + "$ref": "#/definitions/Microsoft.DateTimeInput" + }, + { + "$ref": "#/definitions/Microsoft.DebugBreak" + }, + { + "$ref": "#/definitions/Microsoft.DeleteActivity" + }, + { + "$ref": "#/definitions/Microsoft.DeleteProperties" + }, + { + "$ref": "#/definitions/Microsoft.DeleteProperty" + }, + { + "$ref": "#/definitions/Microsoft.EditActions" + }, + { + "$ref": "#/definitions/Microsoft.EditArray" + }, + { + "$ref": "#/definitions/Microsoft.EmitEvent" + }, + { + "$ref": "#/definitions/Microsoft.EndDialog" + }, + { + "$ref": "#/definitions/Microsoft.EndTurn" + }, + { + "$ref": "#/definitions/Microsoft.Foreach" + }, + { + "$ref": "#/definitions/Microsoft.ForeachPage" + }, + { + "$ref": "#/definitions/Microsoft.GetActivityMembers" + }, + { + "$ref": "#/definitions/Microsoft.GetConversationMembers" + }, + { + "$ref": "#/definitions/Microsoft.GetConversationReference" + }, + { + "$ref": "#/definitions/Microsoft.GotoAction" + }, + { + "$ref": "#/definitions/Microsoft.HttpRequest" + }, + { + "$ref": "#/definitions/Microsoft.IfCondition" + }, + { + "$ref": "#/definitions/Microsoft.LogAction" + }, + { + "$ref": "#/definitions/Microsoft.NumberInput" + }, + { + "$ref": "#/definitions/Microsoft.OAuthInput" + }, + { + "$ref": "#/definitions/Microsoft.QnAMakerDialog" + }, + { + "$ref": "#/definitions/Microsoft.RepeatDialog" + }, + { + "$ref": "#/definitions/Microsoft.ReplaceDialog" + }, + { + "$ref": "#/definitions/Microsoft.SendActivity" + }, + { + "$ref": "#/definitions/Microsoft.SendHandoffActivity" + }, + { + "$ref": "#/definitions/Microsoft.SetProperties" + }, + { + "$ref": "#/definitions/Microsoft.SetProperty" + }, + { + "$ref": "#/definitions/Microsoft.SignOutUser" + }, + { + "$ref": "#/definitions/Microsoft.SwitchCondition" + }, + { + "$ref": "#/definitions/Microsoft.TelemetryTrackEventAction" + }, + { + "$ref": "#/definitions/Microsoft.TextInput" + }, + { + "$ref": "#/definitions/Microsoft.ThrowException" + }, + { + "$ref": "#/definitions/Microsoft.TraceActivity" + }, + { + "$ref": "#/definitions/Microsoft.UpdateActivity" + }, + { + "type": "string", + "pattern": "^(?!(=)).*" + } + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Declarative", + "version": "4.13.2" + } + }, + "Microsoft.IEntityRecognizer": { + "$role": "interface", + "title": "Entity recognizers", + "description": "Components which derive from EntityRecognizer.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "oneOf": [ + { + "$ref": "#/definitions/Microsoft.AgeEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.ConfirmationEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.CurrencyEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.DateTimeEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.DimensionEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.EmailEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.GuidEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.HashtagEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.IpEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.MentionEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.NumberEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.NumberRangeEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.OrdinalEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.PercentageEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.PhoneNumberEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.RegexEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.TemperatureEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.UrlEntityRecognizer" + }, + { + "type": "string", + "title": "Reference to Microsoft.IEntityRecognizer", + "description": "Reference to Microsoft.IEntityRecognizer .dialog file." + } + ] + }, + "Microsoft.IfCondition": { + "$role": "implements(Microsoft.IDialog)", + "title": "If condition", + "description": "Two-way branch the conversation flow based on a condition.", + "type": "object", + "required": [ + "condition", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Expression to evaluate.", + "examples": [ + "user.age > 3" + ] + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + true, + "=user.age > 3" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Actions to execute if condition is true.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "elseActions": { + "type": "array", + "title": "Else", + "description": "Actions to execute if condition is false.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.IfCondition" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ILanguageGenerator": { + "title": "Microsoft LanguageGenerator", + "description": "Components which dervie from the LanguageGenerator class", + "$role": "interface", + "oneOf": [ + { + "$ref": "#/definitions/Microsoft.ResourceMultiLanguageGenerator" + }, + { + "$ref": "#/definitions/Microsoft.TemplateEngineLanguageGenerator" + }, + { + "type": "string" + } + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + } + }, + "Microsoft.InputDialog": { + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "default": false, + "examples": [ + false, + "=user.isVip" + ] + }, + "prompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Initial prompt", + "description": "Message to send to collect information.", + "examples": [ + "What is your birth date?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "unrecognizedPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Unrecognized prompt", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "invalidPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Invalid prompt", + "description": "Message to send when the user input does not meet any validation expression.", + "examples": [ + "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "defaultValueResponse": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Default value response", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "maxTurnCount": { + "$ref": "#/definitions/integerExpression", + "title": "Max turn count", + "description": "Maximum number of re-prompt attempts to collect information.", + "default": 3, + "minimum": 0, + "maximum": 2147483647, + "examples": [ + 3, + "=settings.xyz" + ] + }, + "validations": { + "type": "array", + "title": "Validation expressions", + "description": "Expression to validate user input.", + "items": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Expression which needs to met for the input to be considered valid", + "examples": [ + "int(this.value) > 1 && int(this.value) <= 150", + "count(this.value) < 300" + ] + } + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", + "examples": [ + "$birthday", + "dialog.${user.name}", + "=f(x)" + ] + }, + "alwaysPrompt": { + "$ref": "#/definitions/booleanExpression", + "title": "Always prompt", + "description": "Collect information even if the specified 'property' is not empty.", + "default": false, + "examples": [ + false, + "=$val" + ] + }, + "allowInterruptions": { + "$ref": "#/definitions/booleanExpression", + "title": "Allow Interruptions", + "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", + "default": true, + "examples": [ + true, + "=user.xyz" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.InputDialog" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.IpEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "IP entity recognizer", + "description": "Recognizer which recognizes internet IP patterns (like 192.1.1.1).", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.IpEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.IRecognizer": { + "title": "Microsoft recognizer", + "description": "Components which derive from Recognizer class", + "$role": "interface", + "oneOf": [ + { + "$ref": "#/definitions/Microsoft.AgeEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.ChannelMentionEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.ConfirmationEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.CrossTrainedRecognizerSet" + }, + { + "$ref": "#/definitions/Microsoft.CurrencyEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.DateTimeEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.DimensionEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.EmailEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.GuidEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.HashtagEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.IpEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.LuisRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.MentionEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.MultiLanguageRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.NumberEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.NumberRangeEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.OrdinalEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.PercentageEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.PhoneNumberEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.QnAMakerRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.RecognizerSet" + }, + { + "$ref": "#/definitions/Microsoft.RegexEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.RegexRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.TemperatureEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.UrlEntityRecognizer" + }, + { + "type": "string" + } + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Declarative", + "version": "4.13.2" + } + }, + "Microsoft.ITextTemplate": { + "title": "Microsoft TextTemplate", + "description": "Components which derive from TextTemplate class", + "$role": "interface", + "oneOf": [ + { + "$ref": "#/definitions/Microsoft.TextTemplate" + }, + { + "type": "string" + } + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Declarative", + "version": "4.13.2" + } + }, + "Microsoft.ITrigger": { + "$role": "interface", + "title": "Microsoft Triggers", + "description": "Components which derive from OnCondition class.", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "oneOf": [ + { + "$ref": "#/definitions/Microsoft.OnActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnAssignEntity" + }, + { + "$ref": "#/definitions/Microsoft.OnBeginDialog" + }, + { + "$ref": "#/definitions/Microsoft.OnCancelDialog" + }, + { + "$ref": "#/definitions/Microsoft.OnChooseEntity" + }, + { + "$ref": "#/definitions/Microsoft.OnChooseIntent" + }, + { + "$ref": "#/definitions/Microsoft.OnChooseProperty" + }, + { + "$ref": "#/definitions/Microsoft.OnCommandActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnCommandResultActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnCondition" + }, + { + "$ref": "#/definitions/Microsoft.OnContinueConversation" + }, + { + "$ref": "#/definitions/Microsoft.OnConversationUpdateActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnDialogEvent" + }, + { + "$ref": "#/definitions/Microsoft.OnEndOfActions" + }, + { + "$ref": "#/definitions/Microsoft.OnEndOfConversationActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnError" + }, + { + "$ref": "#/definitions/Microsoft.OnEventActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnHandoffActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnInstallationUpdateActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnIntent" + }, + { + "$ref": "#/definitions/Microsoft.OnInvokeActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnMessageActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnMessageDeleteActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnMessageReactionActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnMessageUpdateActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnQnAMatch" + }, + { + "$ref": "#/definitions/Microsoft.OnRepromptDialog" + }, + { + "$ref": "#/definitions/Microsoft.OnTypingActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnUnknownIntent" + }, + { + "type": "string", + "title": "Reference to Microsoft.ITrigger", + "description": "Reference to Microsoft.ITrigger .dialog file." + } + ] + }, + "Microsoft.ITriggerSelector": { + "$role": "interface", + "title": "Selectors", + "description": "Components which derive from TriggerSelector class.", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "oneOf": [ + { + "$ref": "#/definitions/Microsoft.ConditionalSelector" + }, + { + "$ref": "#/definitions/Microsoft.FirstSelector" + }, + { + "$ref": "#/definitions/Microsoft.MostSpecificSelector" + }, + { + "$ref": "#/definitions/Microsoft.RandomSelector" + }, + { + "$ref": "#/definitions/Microsoft.TrueSelector" + }, + { + "type": "string", + "title": "Reference to Microsoft.ITriggerSelector", + "description": "Reference to Microsoft.ITriggerSelector .dialog file." + } + ] + }, + "Microsoft.LanguagePolicy": { + "title": "Language policy", + "description": "This represents a policy map for locales lookups to use for language", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": { + "type": "array", + "title": "Per-locale policy", + "description": "Language policy per locale.", + "items": { + "type": "string", + "title": "Locale", + "description": "Locale like en-us." + } + }, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.LanguagePolicy" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.LogAction": { + "$role": "implements(Microsoft.IDialog)", + "title": "Log to console", + "description": "Log a message to the host application. Send a TraceActivity to Bot Framework Emulator (optional).", + "type": "object", + "required": [ + "text", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + true, + "=user.age > 3" + ] + }, + "text": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Text", + "description": "Information to log.", + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "label": { + "$ref": "#/definitions/stringExpression", + "title": "Label", + "description": "Label for the trace activity (used to identify it in a list of trace activities.)" + }, + "traceActivity": { + "$ref": "#/definitions/booleanExpression", + "title": "Send trace activity", + "description": "If true, automatically sends a TraceActivity (view in Bot Framework Emulator)." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.LogAction" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.LuisRecognizer": { + "$role": "implements(Microsoft.IRecognizer)", + "title": "LUIS Recognizer", + "description": "LUIS recognizer.", + "type": "object", + "required": [ + "applicationId", + "endpoint", + "endpointKey", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.AI.Luis", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." + }, + "applicationId": { + "$ref": "#/definitions/stringExpression", + "title": "LUIS application id", + "description": "Application ID for your model from the LUIS service." + }, + "version": { + "$ref": "#/definitions/stringExpression", + "title": "LUIS version", + "description": "Optional version to target. If null then predictionOptions.Slot is used." + }, + "endpoint": { + "$ref": "#/definitions/stringExpression", + "title": "LUIS endpoint", + "description": "Endpoint to use for LUIS service like https://westus.api.cognitive.microsoft.com." + }, + "endpointKey": { + "$ref": "#/definitions/stringExpression", + "title": "LUIS prediction key", + "description": "LUIS prediction key used to call endpoint." + }, + "externalEntityRecognizer": { + "$kind": "Microsoft.IRecognizer", + "title": "External entity recognizer", + "description": "Entities recognized by this recognizer will be passed to LUIS as external entities.", + "$ref": "#/definitions/Microsoft.IRecognizer" + }, + "dynamicLists": { + "$ref": "#/definitions/arrayExpression", + "title": "Dynamic lists", + "description": "Runtime defined entity lists.", + "items": { + "title": "Entity list", + "description": "Lists of canonical values and synonyms for an entity.", + "type": "object", + "properties": { + "entity": { + "title": "Entity", + "description": "Entity to extend with a dynamic list.", + "type": "string" + }, + "list": { + "title": "Dynamic list", + "description": "List of canonical forms and synonyms.", + "type": "array", + "items": { + "type": "object", + "title": "List entry", + "description": "Canonical form and synonynms.", + "properties": { + "canonicalForm": { + "title": "Canonical form", + "description": "Resolution if any synonym matches.", + "type": "string" + }, + "synonyms": { + "title": "Synonyms", + "description": "List of synonyms for a canonical form.", + "type": "array", + "items": { + "title": "Synonym", + "description": "Synonym for canonical form.", + "type": "string" + } + } + } + } + } + } + } + }, + "predictionOptions": { + "type": "object", + "title": "Prediction options", + "description": "Options to control LUIS prediction behavior.", + "properties": { + "includeAllIntents": { + "$ref": "#/definitions/booleanExpression", + "title": "Include all intents", + "description": "True for all intents, false for only top intent." + }, + "includeInstanceData": { + "$ref": "#/definitions/booleanExpression", + "title": "Include $instance", + "description": "True to include $instance metadata in the LUIS response." + }, + "log": { + "$ref": "#/definitions/booleanExpression", + "title": "Log utterances", + "description": "True to log utterances on LUIS service." + }, + "preferExternalEntities": { + "$ref": "#/definitions/booleanExpression", + "title": "Prefer external entities", + "description": "True to prefer external entities to those generated by LUIS models." + }, + "slot": { + "$ref": "#/definitions/stringExpression", + "title": "Slot", + "description": "Slot to use for talking to LUIS service like production or staging." + } + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.LuisRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.MentionEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Mentions entity recognizer", + "description": "Recognizer which recognizes @Mentions", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.MentionEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.MostSpecificSelector": { + "$role": "implements(Microsoft.ITriggerSelector)", + "title": "Most specific trigger selector", + "description": "Select most specific true events with optional additional selector", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "selector": { + "$kind": "Microsoft.ITriggerSelector", + "$ref": "#/definitions/Microsoft.ITriggerSelector" + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.MostSpecificSelector" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.MultiLanguageRecognizer": { + "$role": "implements(Microsoft.IRecognizer)", + "title": "Multi-language recognizer", + "description": "Configure one recognizer per language and the specify the language fallback policy.", + "type": "object", + "required": [ + "recognizers", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." + }, + "languagePolicy": { + "$kind": "Microsoft.LanguagePolicy", + "type": "object", + "title": "Language policy", + "description": "Defines fall back languages to try per user input language.", + "$ref": "#/definitions/Microsoft.LanguagePolicy" + }, + "recognizers": { + "type": "object", + "title": "Recognizers", + "description": "Map of language -> Recognizer", + "additionalProperties": { + "$kind": "Microsoft.IRecognizer", + "$ref": "#/definitions/Microsoft.IRecognizer" + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.MultiLanguageRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.NumberEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Number entity recognizer", + "description": "Recognizer which recognizes numbers.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.NumberEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.NumberInput": { + "$role": [ + "implements(Microsoft.IDialog)", + "extends(Microsoft.InputDialog)" + ], + "title": "Number input dialog", + "description": "Collect information - Ask for a number.", + "type": "object", + "$policies": { + "interactive": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "defaultValue": { + "$ref": "#/definitions/numberExpression", + "title": "Default value", + "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", + "examples": [ + 13, + "=user.age" + ] + }, + "value": { + "$ref": "#/definitions/numberExpression", + "title": "Value", + "description": "'Property' will be set to the value of this expression unless it evaluates to null.", + "examples": [ + 13, + "=user.age" + ] + }, + "outputFormat": { + "$ref": "#/definitions/expression", + "title": "Output format", + "description": "Expression to format the number output.", + "examples": [ + "=this.value", + "=int(this.text)" + ] + }, + "defaultLocale": { + "$ref": "#/definitions/stringExpression", + "title": "Default locale", + "description": "Default locale to use if there is no locale available..", + "default": "en-us" + }, + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "default": false, + "examples": [ + false, + "=user.isVip" + ] + }, + "prompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Initial prompt", + "description": "Message to send to collect information.", + "examples": [ + "What is your birth date?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "unrecognizedPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Unrecognized prompt", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "invalidPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Invalid prompt", + "description": "Message to send when the user input does not meet any validation expression.", + "examples": [ + "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "defaultValueResponse": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Default value response", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "maxTurnCount": { + "$ref": "#/definitions/integerExpression", + "title": "Max turn count", + "description": "Maximum number of re-prompt attempts to collect information.", + "default": 3, + "minimum": 0, + "maximum": 2147483647, + "examples": [ + 3, + "=settings.xyz" + ] + }, + "validations": { + "type": "array", + "title": "Validation expressions", + "description": "Expression to validate user input.", + "items": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Expression which needs to met for the input to be considered valid", + "examples": [ + "int(this.value) > 1 && int(this.value) <= 150", + "count(this.value) < 300" + ] + } + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", + "examples": [ + "$birthday", + "dialog.${user.name}", + "=f(x)" + ] + }, + "alwaysPrompt": { + "$ref": "#/definitions/booleanExpression", + "title": "Always prompt", + "description": "Collect information even if the specified 'property' is not empty.", + "default": false, + "examples": [ + false, + "=$val" + ] + }, + "allowInterruptions": { + "$ref": "#/definitions/booleanExpression", + "title": "Allow Interruptions", + "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", + "default": true, + "examples": [ + true, + "=user.xyz" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.NumberInput" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.NumberRangeEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Number range entity recognizer", + "description": "Recognizer which recognizes ranges of numbers (Example:2 to 5).", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.NumberRangeEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OAuthInput": { + "$role": "implements(Microsoft.IDialog)", + "title": "OAuthInput Dialog", + "description": "Collect login information before each request.", + "type": "object", + "required": [ + "connectionName", + "$kind" + ], + "$policies": { + "interactive": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "connectionName": { + "$ref": "#/definitions/stringExpression", + "title": "Connection name", + "description": "The connection name configured in Azure Web App Bot OAuth settings.", + "examples": [ + "msgraphOAuthConnection" + ] + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + true, + "=user.age > 3" + ] + }, + "text": { + "$ref": "#/definitions/stringExpression", + "title": "Text", + "description": "Text shown in the OAuth signin card.", + "examples": [ + "Please sign in. ", + "=concat(x,y,z)" + ] + }, + "title": { + "$ref": "#/definitions/stringExpression", + "title": "Title", + "description": "Title shown in the OAuth signin card.", + "examples": [ + "Login" + ] + }, + "timeout": { + "$ref": "#/definitions/integerExpression", + "title": "Timeout", + "description": "Time out setting for the OAuth signin card.", + "default": 900000 + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Token property", + "description": "Property to store the OAuth token result. WARNING: Changing this location is not recommended as you should call OAuthInput immediately before each use of the token.", + "default": "turn.token", + "examples": [ + "dialog.token" + ] + }, + "invalidPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Invalid prompt", + "description": "Message to send if user response is invalid.", + "examples": [ + "Sorry, the login info you provided is not valid." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "defaultValueResponse": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Default value response", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Login failed." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "maxTurnCount": { + "$ref": "#/definitions/integerExpression", + "title": "Max turn count", + "description": "Maximum number of re-prompt attempts to collect information.", + "default": 3, + "examples": [ + 3 + ] + }, + "defaultValue": { + "$ref": "#/definitions/expression", + "title": "Default value", + "description": "Expression to examine on each turn of the conversation as possible value to the property.", + "examples": [ + "@token" + ] + }, + "allowInterruptions": { + "$ref": "#/definitions/booleanExpression", + "title": "Allow interruptions", + "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", + "default": true, + "examples": [ + true, + "=f(x)" + ] + }, + "alwaysPrompt": { + "$ref": "#/definitions/booleanExpression", + "title": "Always prompt", + "description": "Collect information even if the specified 'property' is not empty.", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OAuthInput" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On activity", + "description": "Actions to perform on receipt of a generic activity.", + "type": "object", + "required": [ + "type", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "type": { + "type": "string", + "title": "Activity type", + "description": "The Activity.Type to match" + }, + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnAssignEntity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On entity assignment", + "description": "Actions to apply an operation on a property and value.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "operation": { + "type": "string", + "title": "Operation", + "description": "Operation filter on event." + }, + "property": { + "type": "string", + "title": "Property", + "description": "Property filter on event." + }, + "value": { + "type": "string", + "title": "Value", + "description": "Value filter on event." + }, + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnAssignEntity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnBeginDialog": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On begin dialog", + "description": "Actions to perform when this dialog begins.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnBeginDialog" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnCancelDialog": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On cancel dialog", + "description": "Actions to perform on cancel dialog event.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnCancelDialog" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnChooseEntity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On choose entity", + "description": "Actions to be performed when value is ambiguous for operator and property.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "operation": { + "type": "string", + "title": "Operation", + "description": "Operation filter on event." + }, + "property": { + "type": "string", + "title": "Property", + "description": "Property filter on event." + }, + "value": { + "type": "string", + "title": "Ambiguous value", + "description": "Ambiguous value filter on event." + }, + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnChooseEntity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnChooseIntent": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On ambiguous intent", + "description": "Actions to perform on when an intent is ambiguous.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "intents": { + "type": "array", + "title": "Intents", + "description": "Intents that must be in the ChooseIntent result for this condition to trigger.", + "items": { + "title": "Intent", + "description": "Intent name to trigger on.", + "type": "string" + } + }, + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnChooseIntent" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnChooseProperty": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On choose property", + "description": "Actions to take when there are multiple possible mappings of entities to properties and operations.", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "type": "object", + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnChooseProperty" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnCommandActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On Command activity", + "description": "Actions to perform on receipt of an activity with type 'Command'. Overrides Intent trigger.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnCommandActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnCommandResultActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On Command Result activity", + "description": "Actions to perform on receipt of an activity with type 'CommandResult'. Overrides Intent trigger.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnCommandResultActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnCondition": { + "$role": "implements(Microsoft.ITrigger)", + "title": "On condition", + "description": "Actions to perform when specified condition is true.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnCondition" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnContinueConversation": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On continue conversation", + "description": "Actions to perform when a conversation is started up again from a ContinueConversationLater action.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnContinueConversation" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnConversationUpdateActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On ConversationUpdate activity", + "description": "Actions to perform on receipt of an activity with type 'ConversationUpdate'.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnConversationUpdateActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnDialogEvent": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On dialog event", + "description": "Actions to perform when a specific dialog event occurs.", + "type": "object", + "required": [ + "event", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "event": { + "type": "string", + "title": "Dialog event name", + "description": "Name of dialog event." + }, + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnDialogEvent" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnEndOfActions": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On end of actions", + "description": "Actions to take when there are no more actions in the current dialog.", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "type": "object", + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnEndOfActions" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnEndOfConversationActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On EndOfConversation activity", + "description": "Actions to perform on receipt of an activity with type 'EndOfConversation'.", + "type": "object", + "required": [ + "$kind" + ], + "$policies": { + "nonInteractive": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnEndOfConversationActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnError": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On error", + "description": "Action to perform when an 'Error' dialog event occurs.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnError" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnEventActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On Event activity", + "description": "Actions to perform on receipt of an activity with type 'Event'.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnEventActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnHandoffActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On Handoff activity", + "description": "Actions to perform on receipt of an activity with type 'HandOff'.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnHandoffActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnInstallationUpdateActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On InstallationUpdate activity", + "description": "Actions to perform on receipt of an activity with type 'InstallationUpdate'.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnInstallationUpdateActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnIntent": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On intent recognition", + "description": "Actions to perform when specified intent is recognized.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "intent": { + "type": "string", + "title": "Intent", + "description": "Name of intent." + }, + "entities": { + "type": "array", + "title": "Entities", + "description": "Required entities.", + "items": { + "type": "string", + "title": "Entity", + "description": "Entity that must be present." + } + }, + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnIntent" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnInvokeActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On Invoke activity", + "description": "Actions to perform on receipt of an activity with type 'Invoke'.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnInvokeActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnMessageActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On Message activity", + "description": "Actions to perform on receipt of an activity with type 'Message'. Overrides Intent trigger.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnMessageActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnMessageDeleteActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On MessageDelete activity", + "description": "Actions to perform on receipt of an activity with type 'MessageDelete'.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnMessageDeleteActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnMessageReactionActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On MessageReaction activity", + "description": "Actions to perform on receipt of an activity with type 'MessageReaction'.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnMessageReactionActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnMessageUpdateActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On MessageUpdate activity", + "description": "Actions to perform on receipt of an activity with type 'MessageUpdate'.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnMessageUpdateActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnQnAMatch": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On QnAMaker match", + "description": "Actions to perform on when an match from QnAMaker is found.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnQnAMatch" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnRepromptDialog": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On RepromptDialog", + "description": "Actions to perform when 'RepromptDialog' event occurs.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnRepromptDialog" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnTypingActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On Typing activity", + "description": "Actions to perform on receipt of an activity with type 'Typing'.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnTypingActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnUnknownIntent": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On unknown intent", + "description": "Action to perform when user input is unrecognized or if none of the 'on intent recognition' triggers match recognized intent.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnUnknownIntent" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OrdinalEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Ordinal entity recognizer", + "description": "Recognizer which recognizes ordinals (example: first, second, 3rd).", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OrdinalEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.PercentageEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Percentage entity recognizer", + "description": "Recognizer which recognizes percentages.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.PercentageEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.PhoneNumberEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Phone number entity recognizer", + "description": "Recognizer which recognizes phone numbers.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.PhoneNumberEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.QnAMakerDialog": { + "$role": "implements(Microsoft.IDialog)", + "title": "QnAMaker dialog", + "description": "Dialog which uses QnAMAker knowledge base to answer questions.", + "type": "object", + "required": [ + "knowledgeBaseId", + "endpointKey", + "hostname", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.AI.QnA", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "knowledgeBaseId": { + "$ref": "#/definitions/stringExpression", + "title": "KnowledgeBase Id", + "description": "KnowledgeBase Id of your QnA Maker KnowledgeBase.", + "default": "=settings.qna.knowledgebaseid" + }, + "endpointKey": { + "$ref": "#/definitions/stringExpression", + "title": "Endpoint key", + "description": "Endpoint key for the QnA Maker KB.", + "default": "=settings.qna.endpointkey" + }, + "hostname": { + "$ref": "#/definitions/stringExpression", + "title": "Hostname", + "description": "Hostname for your QnA Maker service.", + "default": "=settings.qna.hostname", + "examples": [ + "https://yourserver.azurewebsites.net/qnamaker" + ] + }, + "noAnswer": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Fallback answer", + "description": "Default answer to return when none found in KB.", + "default": "Sorry, I did not find an answer.", + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "threshold": { + "$ref": "#/definitions/numberExpression", + "title": "Threshold", + "description": "Threshold score to filter results.", + "default": 0.3 + }, + "activeLearningCardTitle": { + "$ref": "#/definitions/stringExpression", + "title": "Active learning card title", + "description": "Title for active learning suggestions card.", + "default": "Did you mean:" + }, + "cardNoMatchText": { + "$ref": "#/definitions/stringExpression", + "title": "Card no match text", + "description": "Text for no match option.", + "default": "None of the above." + }, + "cardNoMatchResponse": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Card no match response", + "description": "Custom response when no match option was selected.", + "default": "Thanks for the feedback.", + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "strictFilters": { + "$ref": "#/definitions/arrayExpression", + "title": "Strict filters", + "description": "Metadata filters to use when calling the QnA Maker KB.", + "items": { + "type": "object", + "title": "Metadata filter", + "description": "Metadata filter.", + "properties": { + "name": { + "type": "string", + "title": "Name", + "description": "Name of filter property.", + "maximum": 100 + }, + "value": { + "type": "string", + "title": "Value", + "description": "Value to filter on.", + "maximum": 100 + } + } + } + }, + "top": { + "$ref": "#/definitions/numberExpression", + "title": "Top", + "description": "The number of answers you want to retrieve.", + "default": 3 + }, + "isTest": { + "type": "boolean", + "title": "IsTest", + "description": "True, if pointing to Test environment, else false.", + "default": false + }, + "rankerType": { + "$ref": "#/definitions/stringExpression", + "title": "Ranker type", + "description": "Type of Ranker.", + "oneOf": [ + { + "title": "Standard ranker", + "description": "Standard ranker types.", + "enum": [ + "default", + "questionOnly", + "autoSuggestQuestion" + ], + "default": "default" + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "strictFiltersJoinOperator": { + "$ref": "#/definitions/stringExpression", + "title": "StrictFiltersJoinOperator", + "description": "Join operator for Strict Filters.", + "oneOf": [ + { + "title": "Join operator", + "description": "Value of Join Operator to be used as conjunction with Strict Filter values.", + "enum": [ + "AND", + "OR" + ], + "default": "AND" + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.QnAMakerDialog" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.QnAMakerRecognizer": { + "$role": "implements(Microsoft.IRecognizer)", + "title": "QnAMaker recognizer", + "description": "Recognizer for generating QnAMatch intents from a KB.", + "type": "object", + "required": [ + "knowledgeBaseId", + "endpointKey", + "hostname", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.AI.QnA", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional unique id using with RecognizerSet." + }, + "knowledgeBaseId": { + "$ref": "#/definitions/stringExpression", + "title": "KnowledgeBase Id", + "description": "Knowledge base Id of your QnA Maker knowledge base.", + "default": "=settings.qna.knowledgebaseid" + }, + "endpointKey": { + "$ref": "#/definitions/stringExpression", + "title": "Endpoint key", + "description": "Endpoint key for the QnA Maker KB.", + "default": "=settings.qna.endpointkey" + }, + "hostname": { + "$ref": "#/definitions/stringExpression", + "title": "Hostname", + "description": "Hostname for your QnA Maker service.", + "default": "=settings.qna.hostname", + "examples": [ + "https://yourserver.azurewebsites.net/qnamaker" + ] + }, + "threshold": { + "$ref": "#/definitions/numberExpression", + "title": "Threshold", + "description": "Threshold score to filter results.", + "default": 0.3 + }, + "strictFilters": { + "$ref": "#/definitions/arrayExpression", + "title": "Strict filters", + "description": "Metadata filters to use when calling the QnA Maker KB.", + "items": { + "type": "object", + "title": "Metadata filters", + "description": "Metadata filters to use when querying QnA Maker KB.", + "properties": { + "name": { + "type": "string", + "title": "Name", + "description": "Name to filter on.", + "maximum": 100 + }, + "value": { + "type": "string", + "title": "Value", + "description": "Value to restrict filter.", + "maximum": 100 + } + } + } + }, + "top": { + "$ref": "#/definitions/numberExpression", + "title": "Top", + "description": "The number of answers you want to retrieve.", + "default": 3 + }, + "isTest": { + "$ref": "#/definitions/booleanExpression", + "title": "Use test environment", + "description": "True, if pointing to Test environment, else false.", + "examples": [ + true, + "=f(x)" + ] + }, + "rankerType": { + "title": "Ranker type", + "description": "Type of Ranker.", + "oneOf": [ + { + "type": "string", + "title": "Ranker type", + "description": "Type of Ranker.", + "enum": [ + "default", + "questionOnly", + "autoSuggestQuestion" + ], + "default": "default" + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "strictFiltersJoinOperator": { + "$ref": "#/definitions/stringExpression", + "title": "StrictFiltersJoinOperator", + "description": "Join operator for Strict Filters.", + "oneOf": [ + { + "title": "Join operator", + "description": "Value of Join Operator to be used as onjuction with Strict Filter values.", + "enum": [ + "AND", + "OR" + ], + "default": "AND" + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "includeDialogNameInMetadata": { + "$ref": "#/definitions/booleanExpression", + "title": "Include dialog name", + "description": "When set to false, the dialog name will not be passed to QnAMaker. (default) is true", + "default": true, + "examples": [ + true, + "=f(x)" + ] + }, + "metadata": { + "$ref": "#/definitions/arrayExpression", + "title": "Metadata filters", + "description": "Metadata filters to use when calling the QnA Maker KB.", + "items": { + "type": "object", + "title": "Metadata filter", + "description": "Metadata filter to use when calling the QnA Maker KB.", + "properties": { + "name": { + "type": "string", + "title": "Name", + "description": "Name of value to test." + }, + "value": { + "type": "string", + "title": "Value", + "description": "Value to filter against." + } + } + } + }, + "context": { + "$ref": "#/definitions/objectExpression", + "title": "QnA request context", + "description": "Context to use for ranking." + }, + "qnaId": { + "$ref": "#/definitions/integerExpression", + "title": "QnA Id", + "description": "A number or expression which is the QnAId to paass to QnAMaker API." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.QnAMakerRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.RandomSelector": { + "$role": "implements(Microsoft.ITriggerSelector)", + "title": "Random rule selector", + "description": "Select most specific true rule.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "seed": { + "type": "integer", + "title": "Random seed", + "description": "Random seed to start random number generation." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.RandomSelector" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.RecognizerSet": { + "$role": "implements(Microsoft.IRecognizer)", + "title": "Recognizer set", + "description": "Creates the union of the intents and entities of the recognizers in the set.", + "type": "object", + "required": [ + "recognizers", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." + }, + "recognizers": { + "type": "array", + "title": "Recognizers", + "description": "List of Recognizers defined for this set.", + "items": { + "$kind": "Microsoft.IRecognizer", + "$ref": "#/definitions/Microsoft.IRecognizer" + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.RecognizerSet" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.RegexEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Regex entity recognizer", + "description": "Recognizer which recognizes patterns of input based on regex.", + "type": "object", + "required": [ + "name", + "pattern", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "name": { + "type": "string", + "title": "Name", + "description": "Name of the entity" + }, + "pattern": { + "type": "string", + "title": "Pattern", + "description": "Pattern expressed as regular expression." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.RegexEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.RegexRecognizer": { + "$role": "implements(Microsoft.IRecognizer)", + "title": "Regex recognizer", + "description": "Use regular expressions to recognize intents and entities from user input.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." + }, + "intents": { + "type": "array", + "title": "RegEx patterns to intents", + "description": "Collection of patterns to match for an intent.", + "items": { + "type": "object", + "title": "Pattern", + "description": "Intent and regex pattern.", + "properties": { + "intent": { + "type": "string", + "title": "Intent", + "description": "The intent name." + }, + "pattern": { + "type": "string", + "title": "Pattern", + "description": "The regular expression pattern." + } + } + } + }, + "entities": { + "type": "array", + "title": "Entity recognizers", + "description": "Collection of entity recognizers to use.", + "items": { + "$kind": "Microsoft.IEntityRecognizer", + "$ref": "#/definitions/Microsoft.IEntityRecognizer" + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.RegexRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.RepeatDialog": { + "$role": "implements(Microsoft.IDialog)", + "type": "object", + "title": "Repeat dialog", + "description": "Repeat current dialog.", + "$policies": { + "lastAction": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "allowLoop": { + "$ref": "#/definitions/booleanExpression", + "title": "AllowLoop", + "description": "Optional condition which if true will allow loop of the repeated dialog.", + "examples": [ + "user.age > 3" + ] + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "options": { + "$ref": "#/definitions/objectExpression", + "title": "Options", + "description": "One or more options that are passed to the dialog that is called.", + "additionalProperties": { + "type": "string", + "title": "Options", + "description": "Options for repeating dialog." + } + }, + "activityProcessed": { + "$ref": "#/definitions/booleanExpression", + "title": "Activity processed", + "description": "When set to false, the dialog that is called can process the current activity.", + "default": true + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.RepeatDialog" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ReplaceDialog": { + "$role": "implements(Microsoft.IDialog)", + "type": "object", + "title": "Replace dialog", + "description": "Replace current dialog with another dialog.", + "$policies": { + "lastAction": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "dialog": { + "oneOf": [ + { + "$kind": "Microsoft.IDialog", + "pattern": "^(?!(=)).*", + "title": "Dialog", + "$ref": "#/definitions/Microsoft.IDialog" + }, + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=settings.dialogId" + ] + } + ], + "title": "Dialog name", + "description": "Name of the dialog to call." + }, + "options": { + "$ref": "#/definitions/objectExpression", + "title": "Options", + "description": "One or more options that are passed to the dialog that is called.", + "additionalProperties": { + "type": "string", + "title": "Options", + "description": "Options for replacing dialog." + } + }, + "activityProcessed": { + "$ref": "#/definitions/booleanExpression", + "title": "Activity processed", + "description": "When set to false, the dialog that is called can process the current activity.", + "default": true + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ReplaceDialog" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ResourceMultiLanguageGenerator": { + "$role": "implements(Microsoft.ILanguageGenerator)", + "title": "Resource multi-language generator", + "description": "MultiLanguage Generator which is bound to resource by resource Id.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional generator ID." + }, + "resourceId": { + "type": "string", + "title": "Resource Id", + "description": "Resource which is the root language generator. Other generaters with the same name and language suffix will be loaded into this generator and used based on the Language Policy.", + "default": "dialog.result" + }, + "languagePolicy": { + "type": "object", + "title": "Language policy", + "description": "Set alternate language policy for this generator. If not set, the global language policy will be used." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ResourceMultiLanguageGenerator" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.SendActivity": { + "$role": "implements(Microsoft.IDialog)", + "title": "Send an activity", + "description": "Respond with an activity.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action." + }, + "activity": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Activity", + "description": "Activity to send.", + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.SendActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.SendHandoffActivity": { + "$role": "implements(Microsoft.IDialog)", + "title": "Send a handoff activity", + "description": "Sends a handoff activity to trigger a handoff request.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "context": { + "$ref": "#/definitions/objectExpression", + "title": "Context", + "description": "Context to send with the handoff request" + }, + "transcript": { + "$ref": "#/definitions/objectExpression", + "title": "transcript", + "description": "Transcript to send with the handoff request" + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.SendHandoffActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.SetProperties": { + "$role": "implements(Microsoft.IDialog)", + "title": "Set property", + "description": "Set one or more property values.", + "type": "object", + "required": [ + "assignments", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + true, + "=user.age > 3" + ] + }, + "assignments": { + "type": "array", + "title": "Assignments", + "description": "Property value assignments to set.", + "items": { + "type": "object", + "title": "Assignment", + "description": "Property assignment.", + "properties": { + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property (named location to store information).", + "examples": [ + "user.age" + ] + }, + "value": { + "$ref": "#/definitions/valueExpression", + "title": "Value", + "description": "New value or expression.", + "examples": [ + "='milk'", + "=dialog.favColor", + "=dialog.favColor == 'red'" + ] + } + } + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.SetProperties" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.SetProperty": { + "$role": "implements(Microsoft.IDialog)", + "title": "Set property", + "description": "Set property to a value.", + "type": "object", + "required": [ + "property", + "value", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + true, + "=user.age > 3" + ] + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property (named location to store information).", + "examples": [ + "user.age" + ] + }, + "value": { + "$ref": "#/definitions/valueExpression", + "title": "Value", + "description": "New value or expression.", + "examples": [ + "='milk'", + "=dialog.favColor", + "=dialog.favColor == 'red'" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.SetProperty" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.SignOutUser": { + "$role": "implements(Microsoft.IDialog)", + "title": "Sign out user", + "description": "Sign a user out that was logged in previously using OAuthInput.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "userId": { + "$ref": "#/definitions/stringExpression", + "title": "UserId", + "description": "Expression to an user to signout. Default is user.id.", + "default": "=user.id" + }, + "connectionName": { + "$ref": "#/definitions/stringExpression", + "title": "Connection name", + "description": "Connection name that was used with OAuthInput to log a user in." + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + true, + "=user.age > 3" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.SignOutUser" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.StaticActivityTemplate": { + "$role": "implements(Microsoft.IActivityTemplate)", + "title": "Microsoft static activity template", + "description": "This allows you to define a static Activity object", + "type": "object", + "required": [ + "activity", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "activity": { + "$ref": "#/definitions/botframework.json/definitions/Activity", + "title": "Activity", + "description": "A static Activity to used.", + "required": [ + "type" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.StaticActivityTemplate" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.SwitchCondition": { + "$role": "implements(Microsoft.IDialog)", + "title": "Switch condition", + "description": "Execute different actions based on the value of a property.", + "type": "object", + "required": [ + "condition", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "condition": { + "$ref": "#/definitions/stringExpression", + "title": "Condition", + "description": "Property to evaluate.", + "examples": [ + "user.favColor" + ] + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + true, + "=user.age > 3" + ] + }, + "cases": { + "type": "array", + "title": "Cases", + "description": "Actions for each possible condition.", + "items": { + "type": "object", + "title": "Case", + "description": "Case and actions.", + "required": [ + "value" + ], + "properties": { + "value": { + "type": [ + "number", + "integer", + "boolean", + "string" + ], + "title": "Value", + "description": "The value to compare the condition with.", + "examples": [ + "red", + "true", + "13" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + } + } + } + }, + "default": { + "type": "array", + "title": "Default", + "description": "Actions to execute if none of the cases meet the condition.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.SwitchCondition" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.TelemetryTrackEventAction": { + "$role": "implements(Microsoft.IDialog)", + "type": "object", + "title": "Telemetry - track event", + "description": "Track a custom event using the registered Telemetry Client.", + "required": [ + "url", + "method", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "eventName": { + "$ref": "#/definitions/stringExpression", + "title": "Event name", + "description": "The name of the event to track.", + "examples": [ + "MyEventStarted", + "MyEventCompleted" + ] + }, + "properties": { + "type": "object", + "title": "Properties", + "description": "One or more properties to attach to the event being tracked.", + "additionalProperties": { + "$ref": "#/definitions/stringExpression" + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.TelemetryTrackEventAction" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.TemperatureEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Temperature recognizer", + "description": "Recognizer which recognizes temperatures.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.TemperatureEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.TemplateEngineLanguageGenerator": { + "$role": "implements(Microsoft.ILanguageGenerator)", + "title": "Template multi-language generator", + "description": "Template Generator which allows only inline evaluation of templates.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional generator ID." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.TemplateEngineLanguageGenerator" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.TextInput": { + "$role": [ + "implements(Microsoft.IDialog)", + "extends(Microsoft.InputDialog)" + ], + "type": "object", + "title": "Text input dialog", + "description": "Collection information - Ask for a word or sentence.", + "$policies": { + "interactive": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "defaultValue": { + "$ref": "#/definitions/stringExpression", + "title": "Default value", + "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", + "examples": [ + "hello world", + "Hello ${user.name}", + "=concat(user.firstname, user.lastName)" + ] + }, + "value": { + "$ref": "#/definitions/stringExpression", + "title": "Value", + "description": "'Property' will be set to the value of this expression unless it evaluates to null.", + "examples": [ + "hello world", + "Hello ${user.name}", + "=concat(user.firstname, user.lastName)" + ] + }, + "outputFormat": { + "$ref": "#/definitions/stringExpression", + "title": "Output format", + "description": "Expression to format the output.", + "examples": [ + "=toUpper(this.value)", + "${toUpper(this.value)}" + ] + }, + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "default": false, + "examples": [ + false, + "=user.isVip" + ] + }, + "prompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Initial prompt", + "description": "Message to send to collect information.", + "examples": [ + "What is your birth date?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "unrecognizedPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Unrecognized prompt", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "invalidPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Invalid prompt", + "description": "Message to send when the user input does not meet any validation expression.", + "examples": [ + "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "defaultValueResponse": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Default value response", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "maxTurnCount": { + "$ref": "#/definitions/integerExpression", + "title": "Max turn count", + "description": "Maximum number of re-prompt attempts to collect information.", + "default": 3, + "minimum": 0, + "maximum": 2147483647, + "examples": [ + 3, + "=settings.xyz" + ] + }, + "validations": { + "type": "array", + "title": "Validation expressions", + "description": "Expression to validate user input.", + "items": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Expression which needs to met for the input to be considered valid", + "examples": [ + "int(this.value) > 1 && int(this.value) <= 150", + "count(this.value) < 300" + ] + } + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", + "examples": [ + "$birthday", + "dialog.${user.name}", + "=f(x)" + ] + }, + "alwaysPrompt": { + "$ref": "#/definitions/booleanExpression", + "title": "Always prompt", + "description": "Collect information even if the specified 'property' is not empty.", + "default": false, + "examples": [ + false, + "=$val" + ] + }, + "allowInterruptions": { + "$ref": "#/definitions/booleanExpression", + "title": "Allow Interruptions", + "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", + "default": true, + "examples": [ + true, + "=user.xyz" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.TextInput" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.TextTemplate": { + "$role": "implements(Microsoft.ITextTemplate)", + "title": "Microsoft TextTemplate", + "description": "Use LG Templates to create text", + "type": "object", + "required": [ + "template", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "template": { + "title": "Template", + "description": "Language Generator template to evaluate to create the text.", + "type": "string" + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.TextTemplate" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ThrowException": { + "$role": "implements(Microsoft.IDialog)", + "title": "Throw an exception", + "description": "Throw an exception. Capture this exception with OnError trigger.", + "type": "object", + "required": [ + "errorValue", + "$kind" + ], + "$policies": { + "lastAction": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "errorValue": { + "$ref": "#/definitions/valueExpression", + "title": "Error value", + "description": "Error value to throw." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ThrowException" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.TraceActivity": { + "$role": "implements(Microsoft.IDialog)", + "title": "Send a TraceActivity", + "description": "Send a trace activity to the transcript logger and/ or Bot Framework Emulator.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + true, + "=user.age > 3" + ] + }, + "name": { + "$ref": "#/definitions/stringExpression", + "title": "Name", + "description": "Name of the trace activity" + }, + "label": { + "$ref": "#/definitions/stringExpression", + "title": "Label", + "description": "Label for the trace activity (used to identify it in a list of trace activities.)" + }, + "valueType": { + "$ref": "#/definitions/stringExpression", + "title": "Value type", + "description": "Type of value" + }, + "value": { + "$ref": "#/definitions/valueExpression", + "title": "Value", + "description": "Property that holds the value to send as trace activity." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.TraceActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.TrueSelector": { + "$role": "implements(Microsoft.ITriggerSelector)", + "title": "True trigger selector", + "description": "Selector for all true events", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.TrueSelector" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.UpdateActivity": { + "$role": "implements(Microsoft.IDialog)", + "title": "Update an activity", + "description": "Respond with an activity.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + true, + "=user.age > 3" + ] + }, + "activityId": { + "$ref": "#/definitions/stringExpression", + "title": "Activity Id", + "description": "An string expression with the activity id to update.", + "examples": [ + "=turn.lastresult.id" + ] + }, + "activity": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Activity", + "description": "Activity to send.", + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.UpdateActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.UrlEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Url recognizer", + "description": "Recognizer which recognizes urls.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.UrlEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "numberExpression": { + "$role": "expression", + "title": "Number or expression", + "description": "Number constant or expression to evaluate.", + "oneOf": [ + { + "type": "number", + "title": "Number", + "description": "Number constant.", + "default": 0, + "examples": [ + 15.5 + ] + }, + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=dialog.quantity" + ] + } + ] + }, + "objectExpression": { + "$role": "expression", + "title": "Object or expression", + "description": "Object or expression to evaluate.", + "oneOf": [ + { + "type": "object", + "title": "Object", + "description": "Object constant." + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "role": { + "title": "$role", + "description": "Defines the role played in the dialog schema from [expression|interface|implements($kind)|extends($kind)].", + "type": "string", + "pattern": "^((expression)|(interface)|(implements\\([a-zA-Z][a-zA-Z0-9.]*\\))|(extends\\([a-zA-Z][a-zA-Z0-9.]*\\)))$" + }, + "stringExpression": { + "$role": "expression", + "title": "String or expression", + "description": "Interpolated string or expression to evaluate.", + "oneOf": [ + { + "type": "string", + "title": "String", + "description": "Interpolated string", + "pattern": "^(?!(=)).*", + "examples": [ + "Hello ${user.name}" + ] + }, + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=concat('x','y','z')" + ] + } + ] + }, + "valueExpression": { + "$role": "expression", + "title": "Any or expression", + "description": "Any constant or expression to evaluate.", + "oneOf": [ + { + "type": "object", + "title": "Object", + "description": "Object constant." + }, + { + "type": "array", + "title": "Array", + "description": "Array constant." + }, + { + "type": "string", + "title": "String", + "description": "Interpolated string.", + "pattern": "^(?!(=)).*", + "examples": [ + "Hello ${user.name}" + ] + }, + { + "type": "boolean", + "title": "Boolean", + "description": "Boolean constant", + "examples": [ + false + ] + }, + { + "type": "number", + "title": "Number", + "description": "Number constant.", + "examples": [ + 15.5 + ] + }, + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=..." + ] + } + ] + }, + "schema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Core schema meta-schema", + "definitions": { + "schemaArray": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/schema" + } + }, + "nonNegativeInteger": { + "type": "integer", + "minimum": 0 + }, + "nonNegativeIntegerDefault0": { + "type": "integer", + "minimum": 0, + "default": 0 + }, + "simpleTypes": { + "enum": [ + "array", + "boolean", + "integer", + "null", + "number", + "object", + "string" + ] + }, + "stringArray": { + "type": "array", + "uniqueItems": true, + "default": [], + "items": { + "type": "string" + } + } + }, + "type": [ + "object", + "boolean" + ], + "default": true, + "properties": { + "$schema": { + "type": "string", + "format": "uri" + }, + "$ref": { + "type": "string", + "format": "uri-reference" + }, + "$comment": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "default": true, + "readOnly": { + "type": "boolean", + "default": false + }, + "writeOnly": { + "type": "boolean", + "default": false + }, + "examples": { + "type": "array", + "items": true + }, + "multipleOf": { + "type": "number", + "exclusiveMinimum": 0 + }, + "maximum": { + "type": "number" + }, + "exclusiveMaximum": { + "type": "number" + }, + "minimum": { + "type": "number" + }, + "exclusiveMinimum": { + "type": "number" + }, + "maxLength": { + "$ref": "#/definitions/schema/definitions/nonNegativeInteger" + }, + "minLength": { + "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" + }, + "pattern": { + "type": "string", + "format": "regex" + }, + "additionalItems": { + "$ref": "#/definitions/schema" + }, + "items": { + "anyOf": [ + { + "$ref": "#/definitions/schema" + }, + { + "$ref": "#/definitions/schema/definitions/schemaArray" + } + ], + "default": true + }, + "maxItems": { + "$ref": "#/definitions/schema/definitions/nonNegativeInteger" + }, + "minItems": { + "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" + }, + "uniqueItems": { + "type": "boolean", + "default": false + }, + "contains": { + "$ref": "#/definitions/schema" + }, + "maxProperties": { + "$ref": "#/definitions/schema/definitions/nonNegativeInteger" + }, + "minProperties": { + "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" + }, + "required": { + "$ref": "#/definitions/schema/definitions/stringArray" + }, + "additionalProperties": { + "$ref": "#/definitions/schema" + }, + "definitions": { + "type": "object", + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/schema" + } + }, + "properties": { + "type": "object", + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/schema" + } + }, + "patternProperties": { + "type": "object", + "propertyNames": { + "format": "regex" + }, + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/schema" + } + }, + "dependencies": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "$ref": "#/definitions/schema" + }, + { + "$ref": "#/definitions/schema/definitions/stringArray" + } + ] + } + }, + "propertyNames": { + "$ref": "#/definitions/schema" + }, + "const": true, + "enum": { + "type": "array", + "minItems": 1, + "uniqueItems": true, + "items": true + }, + "type": { + "anyOf": [ + { + "$ref": "#/definitions/schema/definitions/simpleTypes" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/schema/definitions/simpleTypes" + }, + "minItems": 1, + "uniqueItems": true + } + ] + }, + "format": { + "type": "string" + }, + "contentMediaType": { + "type": "string" + }, + "contentEncoding": { + "type": "string" + }, + "if": { + "$ref": "#/definitions/schema" + }, + "then": { + "$ref": "#/definitions/schema" + }, + "else": { + "$ref": "#/definitions/schema" + }, + "allOf": { + "$ref": "#/definitions/schema/definitions/schemaArray" + }, + "anyOf": { + "$ref": "#/definitions/schema/definitions/schemaArray" + }, + "oneOf": { + "$ref": "#/definitions/schema/definitions/schemaArray" + }, + "not": { + "$ref": "#/definitions/schema" + } + } + }, + "botframework.json": { + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "ChannelAccount": { + "description": "Channel account information needed to route a message", + "title": "ChannelAccount", + "type": "object", + "required": [ + "id", + "name" + ], + "properties": { + "id": { + "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", + "type": "string", + "title": "id" + }, + "name": { + "description": "Display friendly name", + "type": "string", + "title": "name" + }, + "aadObjectId": { + "description": "This account's object ID within Azure Active Directory (AAD)", + "type": "string", + "title": "aadObjectId" + }, + "role": { + "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", + "type": "string", + "title": "role" + } + } + }, + "ConversationAccount": { + "description": "Channel account information for a conversation", + "title": "ConversationAccount", + "type": "object", + "required": [ + "conversationType", + "id", + "isGroup", + "name" + ], + "properties": { + "isGroup": { + "description": "Indicates whether the conversation contains more than two participants at the time the\nactivity was generated", + "type": "boolean", + "title": "isGroup" + }, + "conversationType": { + "description": "Indicates the type of the conversation in channels that distinguish between conversation types", + "type": "string", + "title": "conversationType" + }, + "id": { + "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", + "type": "string", + "title": "id" + }, + "name": { + "description": "Display friendly name", + "type": "string", + "title": "name" + }, + "aadObjectId": { + "description": "This account's object ID within Azure Active Directory (AAD)", + "type": "string", + "title": "aadObjectId" + }, + "role": { + "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", + "enum": [ + "bot", + "user" + ], + "type": "string", + "title": "role" + } + } + }, + "MessageReaction": { + "description": "Message reaction object", + "title": "MessageReaction", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "Message reaction type. Possible values include: 'like', 'plusOne'", + "type": "string", + "title": "type" + } + } + }, + "CardAction": { + "description": "A clickable action", + "title": "CardAction", + "type": "object", + "required": [ + "title", + "type", + "value" + ], + "properties": { + "type": { + "description": "The type of action implemented by this button. Possible values include: 'openUrl', 'imBack',\n'postBack', 'playAudio', 'playVideo', 'showImage', 'downloadFile', 'signin', 'call',\n'payment', 'messageBack'", + "type": "string", + "title": "type" + }, + "title": { + "description": "Text description which appears on the button", + "type": "string", + "title": "title" + }, + "image": { + "description": "Image URL which will appear on the button, next to text label", + "type": "string", + "title": "image" + }, + "text": { + "description": "Text for this action", + "type": "string", + "title": "text" + }, + "displayText": { + "description": "(Optional) text to display in the chat feed if the button is clicked", + "type": "string", + "title": "displayText" + }, + "value": { + "description": "Supplementary parameter for action. Content of this property depends on the ActionType", + "title": "value" + }, + "channelData": { + "description": "Channel-specific data associated with this action", + "title": "channelData" + } + } + }, + "SuggestedActions": { + "description": "SuggestedActions that can be performed", + "title": "SuggestedActions", + "type": "object", + "required": [ + "actions", + "to" + ], + "properties": { + "to": { + "description": "Ids of the recipients that the actions should be shown to. These Ids are relative to the\nchannelId and a subset of all recipients of the activity", + "type": "array", + "title": "to", + "items": { + "title": "Id", + "description": "Id of recipient.", + "type": "string" + } + }, + "actions": { + "description": "Actions that can be shown to the user", + "type": "array", + "title": "actions", + "items": { + "$ref": "#/definitions/botframework.json/definitions/CardAction" + } + } + } + }, + "Attachment": { + "description": "An attachment within an activity", + "title": "Attachment", + "type": "object", + "required": [ + "contentType" + ], + "properties": { + "contentType": { + "description": "mimetype/Contenttype for the file", + "type": "string", + "title": "contentType" + }, + "contentUrl": { + "description": "Content Url", + "type": "string", + "title": "contentUrl" + }, + "content": { + "type": "object", + "description": "Embedded content", + "title": "content" + }, + "name": { + "description": "(OPTIONAL) The name of the attachment", + "type": "string", + "title": "name" + }, + "thumbnailUrl": { + "description": "(OPTIONAL) Thumbnail associated with attachment", + "type": "string", + "title": "thumbnailUrl" + } + } + }, + "Entity": { + "description": "Metadata object pertaining to an activity", + "title": "Entity", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "Type of this entity (RFC 3987 IRI)", + "type": "string", + "title": "type" + } + } + }, + "ConversationReference": { + "description": "An object relating to a particular point in a conversation", + "title": "ConversationReference", + "type": "object", + "required": [ + "bot", + "channelId", + "conversation", + "serviceUrl" + ], + "properties": { + "activityId": { + "description": "(Optional) ID of the activity to refer to", + "type": "string", + "title": "activityId" + }, + "user": { + "description": "(Optional) User participating in this conversation", + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", + "title": "user" + }, + "bot": { + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", + "description": "Bot participating in this conversation", + "title": "bot" + }, + "conversation": { + "$ref": "#/definitions/botframework.json/definitions/ConversationAccount", + "description": "Conversation reference", + "title": "conversation" + }, + "channelId": { + "description": "Channel ID", + "type": "string", + "title": "channelId" + }, + "serviceUrl": { + "description": "Service endpoint where operations concerning the referenced conversation may be performed", + "type": "string", + "title": "serviceUrl" + } + } + }, + "TextHighlight": { + "description": "Refers to a substring of content within another field", + "title": "TextHighlight", + "type": "object", + "required": [ + "occurrence", + "text" + ], + "properties": { + "text": { + "description": "Defines the snippet of text to highlight", + "type": "string", + "title": "text" + }, + "occurrence": { + "description": "Occurrence of the text field within the referenced text, if multiple exist.", + "type": "number", + "title": "occurrence" + } + } + }, + "SemanticAction": { + "description": "Represents a reference to a programmatic action", + "title": "SemanticAction", + "type": "object", + "required": [ + "entities", + "id" + ], + "properties": { + "id": { + "description": "ID of this action", + "type": "string", + "title": "id" + }, + "entities": { + "description": "Entities associated with this action", + "type": "object", + "title": "entities", + "additionalProperties": { + "$ref": "#/definitions/botframework.json/definitions/Entity" + } + } + } + }, + "Activity": { + "description": "An Activity is the basic communication type for the Bot Framework 3.0 protocol.", + "title": "Activity", + "type": "object", + "properties": { + "type": { + "description": "Contains the activity type. Possible values include: 'message', 'contactRelationUpdate',\n'conversationUpdate', 'typing', 'endOfConversation', 'event', 'invoke', 'deleteUserData',\n'messageUpdate', 'messageDelete', 'installationUpdate', 'messageReaction', 'suggestion',\n'trace', 'handoff'", + "type": "string", + "title": "type" + }, + "id": { + "description": "Contains an ID that uniquely identifies the activity on the channel.", + "type": "string", + "title": "id" + }, + "timestamp": { + "description": "Contains the date and time that the message was sent, in UTC, expressed in ISO-8601 format.", + "type": "string", + "format": "date-time", + "title": "timestamp" + }, + "localTimestamp": { + "description": "Contains the date and time that the message was sent, in local time, expressed in ISO-8601\nformat.\nFor example, 2016-09-23T13:07:49.4714686-07:00.", + "type": "string", + "format": "date-time", + "title": "localTimestamp" + }, + "localTimezone": { + "description": "Contains the name of the timezone in which the message, in local time, expressed in IANA Time\nZone database format.\nFor example, America/Los_Angeles.", + "type": "string", + "title": "localTimezone" + }, + "serviceUrl": { + "description": "Contains the URL that specifies the channel's service endpoint. Set by the channel.", + "type": "string", + "title": "serviceUrl" + }, + "channelId": { + "description": "Contains an ID that uniquely identifies the channel. Set by the channel.", + "type": "string", + "title": "channelId" + }, + "from": { + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", + "description": "Identifies the sender of the message.", + "title": "from" + }, + "conversation": { + "$ref": "#/definitions/botframework.json/definitions/ConversationAccount", + "description": "Identifies the conversation to which the activity belongs.", + "title": "conversation" + }, + "recipient": { + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", + "description": "Identifies the recipient of the message.", + "title": "recipient" + }, + "textFormat": { + "description": "Format of text fields Default:markdown. Possible values include: 'markdown', 'plain', 'xml'", + "type": "string", + "title": "textFormat" + }, + "attachmentLayout": { + "description": "The layout hint for multiple attachments. Default: list. Possible values include: 'list',\n'carousel'", + "type": "string", + "title": "attachmentLayout" + }, + "membersAdded": { + "description": "The collection of members added to the conversation.", + "type": "array", + "title": "membersAdded", + "items": { + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount" + } + }, + "membersRemoved": { + "description": "The collection of members removed from the conversation.", + "type": "array", + "title": "membersRemoved", + "items": { + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount" + } + }, + "reactionsAdded": { + "description": "The collection of reactions added to the conversation.", + "type": "array", + "title": "reactionsAdded", + "items": { + "$ref": "#/definitions/botframework.json/definitions/MessageReaction" + } + }, + "reactionsRemoved": { + "description": "The collection of reactions removed from the conversation.", + "type": "array", + "title": "reactionsRemoved", + "items": { + "$ref": "#/definitions/botframework.json/definitions/MessageReaction" + } + }, + "topicName": { + "description": "The updated topic name of the conversation.", + "type": "string", + "title": "topicName" + }, + "historyDisclosed": { + "description": "Indicates whether the prior history of the channel is disclosed.", + "type": "boolean", + "title": "historyDisclosed" + }, + "locale": { + "description": "A locale name for the contents of the text field.\nThe locale name is a combination of an ISO 639 two- or three-letter culture code associated\nwith a language\nand an ISO 3166 two-letter subculture code associated with a country or region.\nThe locale name can also correspond to a valid BCP-47 language tag.", + "type": "string", + "title": "locale" + }, + "text": { + "description": "The text content of the message.", + "type": "string", + "title": "text" + }, + "speak": { + "description": "The text to speak.", + "type": "string", + "title": "speak" + }, + "inputHint": { + "description": "Indicates whether your bot is accepting,\nexpecting, or ignoring user input after the message is delivered to the client. Possible\nvalues include: 'acceptingInput', 'ignoringInput', 'expectingInput'", + "type": "string", + "title": "inputHint" + }, + "summary": { + "description": "The text to display if the channel cannot render cards.", + "type": "string", + "title": "summary" + }, + "suggestedActions": { + "description": "The suggested actions for the activity.", + "$ref": "#/definitions/botframework.json/definitions/SuggestedActions", + "title": "suggestedActions" + }, + "attachments": { + "description": "Attachments", + "type": "array", + "title": "attachments", + "items": { + "$ref": "#/definitions/botframework.json/definitions/Attachment" + } + }, + "entities": { + "description": "Represents the entities that were mentioned in the message.", + "type": "array", + "title": "entities", + "items": { + "$ref": "#/definitions/botframework.json/definitions/Entity" + } + }, + "channelData": { + "description": "Contains channel-specific content.", + "title": "channelData" + }, + "action": { + "description": "Indicates whether the recipient of a contactRelationUpdate was added or removed from the\nsender's contact list.", + "type": "string", + "title": "action" + }, + "replyToId": { + "description": "Contains the ID of the message to which this message is a reply.", + "type": "string", + "title": "replyToId" + }, + "label": { + "description": "A descriptive label for the activity.", + "type": "string", + "title": "label" + }, + "valueType": { + "description": "The type of the activity's value object.", + "type": "string", + "title": "valueType" + }, + "value": { + "description": "A value that is associated with the activity.", + "title": "value" + }, + "name": { + "description": "The name of the operation associated with an invoke or event activity.", + "type": "string", + "title": "name" + }, + "relatesTo": { + "description": "A reference to another conversation or activity.", + "$ref": "#/definitions/botframework.json/definitions/ConversationReference", + "title": "relatesTo" + }, + "code": { + "description": "The a code for endOfConversation activities that indicates why the conversation ended.\nPossible values include: 'unknown', 'completedSuccessfully', 'userCancelled', 'botTimedOut',\n'botIssuedInvalidMessage', 'channelFailed'", + "type": "string", + "title": "code" + }, + "expiration": { + "description": "The time at which the activity should be considered to be \"expired\" and should not be\npresented to the recipient.", + "type": "string", + "format": "date-time", + "title": "expiration" + }, + "importance": { + "description": "The importance of the activity. Possible values include: 'low', 'normal', 'high'", + "type": "string", + "title": "importance" + }, + "deliveryMode": { + "description": "A delivery hint to signal to the recipient alternate delivery paths for the activity.\nThe default delivery mode is \"default\". Possible values include: 'normal', 'notification'", + "type": "string", + "title": "deliveryMode" + }, + "listenFor": { + "description": "List of phrases and references that speech and language priming systems should listen for", + "type": "array", + "title": "listenFor", + "items": { + "type": "string", + "title": "Phrase", + "description": "Phrase to listen for." + } + }, + "textHighlights": { + "description": "The collection of text fragments to highlight when the activity contains a ReplyToId value.", + "type": "array", + "title": "textHighlights", + "items": { + "$ref": "#/definitions/botframework.json/definitions/TextHighlight" + } + }, + "semanticAction": { + "$ref": "#/definitions/botframework.json/definitions/SemanticAction", + "description": "An optional programmatic action accompanying this request", + "title": "semanticAction" + } + } + } + } + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/schemas/sdk.uischema b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/schemas/sdk.uischema new file mode 100644 index 0000000000..9cf19c6919 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/schemas/sdk.uischema @@ -0,0 +1,1409 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema", + "Microsoft.AdaptiveDialog": { + "form": { + "description": "This configures a data driven dialog via a collection of events and actions.", + "helpLink": "https://aka.ms/bf-composer-docs-dialog", + "hidden": [ + "triggers", + "generator", + "selector", + "schema" + ], + "label": "Adaptive dialog", + "order": [ + "recognizer", + "*" + ], + "properties": { + "recognizer": { + "description": "To understand what the user says, your dialog needs a \"Recognizer\"; that includes example words and sentences that users may use.", + "label": "Language Understanding" + } + } + } + }, + "Microsoft.Ask": { + "flow": { + "body": { + "field": "activity", + "widget": "LgWidget" + }, + "footer": { + "description": "= Default operation", + "property": "=action.defaultOperation", + "widget": "PropertyDescription" + }, + "header": { + "colors": { + "icon": "#5C2E91", + "theme": "#EEEAF4" + }, + "icon": "MessageBot", + "widget": "ActionHeader" + }, + "hideFooter": "=!action.defaultOperation", + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-send-activity", + "label": "Send a response to ask a question", + "order": [ + "activity", + "*" + ], + "subtitle": "Ask Activity" + } + }, + "Microsoft.AttachmentInput": { + "flow": { + "body": "=action.prompt", + "botAsks": { + "body": { + "defaultContent": "", + "field": "prompt", + "widget": "LgWidget" + }, + "header": { + "colors": { + "icon": "#5C2E91", + "theme": "#EEEAF4" + }, + "icon": "MessageBot", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "nowrap": true, + "userInput": { + "header": { + "colors": { + "icon": "#0078D4", + "theme": "#E5F0FF" + }, + "disableSDKTitle": true, + "icon": "User", + "menu": "none", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "widget": "PromptWidget" + }, + "form": { + "helpLink": "https://aka.ms/bfc-ask-for-user-input", + "label": "Prompt for a file or an attachment", + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Attachment Input" + } + }, + "Microsoft.BeginDialog": { + "flow": { + "body": { + "dialog": "=action.dialog", + "widget": "DialogRef" + }, + "footer": { + "description": "= Return value", + "property": "=action.resultProperty", + "widget": "PropertyDescription" + }, + "hideFooter": "=!action.resultProperty", + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-understanding-dialogs", + "label": "Begin a new dialog", + "order": [ + "dialog", + "options", + "resultProperty", + "*" + ], + "properties": { + "resultProperty": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Begin Dialog" + } + }, + "Microsoft.BeginSkill": { + "flow": { + "body": { + "operation": "Host", + "resource": "=coalesce(action.skillEndpoint, \"?\")", + "singleline": true, + "widget": "ResourceOperation" + }, + "colors": { + "color": "#FFFFFF", + "icon": "#FFFFFF", + "theme": "#004578" + }, + "footer": { + "description": "= Result", + "property": "=action.resultProperty", + "widget": "PropertyDescription" + }, + "hideFooter": "=!action.resultProperty", + "icon": "Library", + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bf-composer-docs-connect-skill", + "label": "Connect to a skill", + "properties": { + "resultProperty": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Skill Dialog" + } + }, + "Microsoft.BreakLoop": { + "form": { + "label": "Break out of loop", + "subtitle": "Break out of loop" + } + }, + "Microsoft.CancelAllDialogs": { + "flow": { + "body": { + "description": "(Event)", + "property": "=coalesce(action.eventName, \"?\")", + "widget": "PropertyDescription" + }, + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-understanding-dialogs", + "label": "Cancel all active dialogs", + "subtitle": "Cancel All Dialogs" + } + }, + "Microsoft.ChoiceInput": { + "flow": { + "body": "=action.prompt", + "botAsks": { + "body": { + "defaultContent": "", + "field": "prompt", + "widget": "LgWidget" + }, + "header": { + "colors": { + "icon": "#5C2E91", + "theme": "#EEEAF4" + }, + "icon": "MessageBot", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "nowrap": true, + "userInput": { + "header": { + "colors": { + "icon": "#0078D4", + "theme": "#E5F0FF" + }, + "disableSDKTitle": true, + "icon": "User", + "menu": "none", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "widget": "PromptWidget" + }, + "form": { + "helpLink": "https://aka.ms/bfc-ask-for-user-input", + "label": "Prompt with multi-choice", + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Choice Input" + } + }, + "Microsoft.ConfirmInput": { + "flow": { + "body": "=action.prompt", + "botAsks": { + "body": { + "defaultContent": "", + "field": "prompt", + "widget": "LgWidget" + }, + "header": { + "colors": { + "icon": "#5C2E91", + "theme": "#EEEAF4" + }, + "icon": "MessageBot", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "nowrap": true, + "userInput": { + "header": { + "colors": { + "icon": "#0078D4", + "theme": "#E5F0FF" + }, + "disableSDKTitle": true, + "icon": "User", + "menu": "none", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "widget": "PromptWidget" + }, + "form": { + "helpLink": "https://aka.ms/bfc-ask-for-user-input", + "label": "Prompt for confirmation", + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Confirm Input" + } + }, + "Microsoft.ContinueLoop": { + "form": { + "label": "Continue loop", + "subtitle": "Continue loop" + } + }, + "Microsoft.DateTimeInput": { + "flow": { + "body": "=action.prompt", + "botAsks": { + "body": { + "defaultContent": "", + "field": "prompt", + "widget": "LgWidget" + }, + "header": { + "colors": { + "icon": "#5C2E91", + "theme": "#EEEAF4" + }, + "icon": "MessageBot", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "nowrap": true, + "userInput": { + "header": { + "colors": { + "icon": "#0078D4", + "theme": "#E5F0FF" + }, + "disableSDKTitle": true, + "icon": "User", + "menu": "none", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "widget": "PromptWidget" + }, + "form": { + "helpLink": "https://aka.ms/bfc-ask-for-user-input", + "label": "Prompt for a date or a time", + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Date Time Input" + } + }, + "Microsoft.DebugBreak": { + "form": { + "label": "Debug Break" + } + }, + "Microsoft.DeleteProperties": { + "flow": { + "body": { + "items": "=action.properties", + "widget": "ListOverview" + }, + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-using-memory", + "label": "Delete properties", + "properties": { + "properties": { + "intellisenseScopes": [ + "user-variables" + ] + } + }, + "subtitle": "Delete Properties" + } + }, + "Microsoft.DeleteProperty": { + "flow": { + "body": "=action.property", + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-using-memory", + "label": "Delete a property", + "properties": { + "property": { + "intellisenseScopes": [ + "user-variables" + ] + } + }, + "subtitle": "Delete Property" + } + }, + "Microsoft.EditActions": { + "flow": { + "body": "=action.changeType", + "widget": "ActionCard" + }, + "form": { + "label": "Modify active dialog", + "subtitle": "Edit Actions" + } + }, + "Microsoft.EditArray": { + "flow": { + "body": { + "operation": "=coalesce(action.changeType, \"?\")", + "resource": "=coalesce(action.itemsProperty, \"?\")", + "widget": "ResourceOperation" + }, + "footer": { + "description": "= Result", + "property": "=action.resultProperty", + "widget": "PropertyDescription" + }, + "hideFooter": "=!action.resultProperty", + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-using-memory", + "label": "Edit an array property", + "properties": { + "itemsProperty": { + "intellisenseScopes": [ + "user-variables" + ] + }, + "resultProperty": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Edit Array" + } + }, + "Microsoft.EmitEvent": { + "flow": { + "body": { + "description": "(Event)", + "property": "=coalesce(action.eventName, \"?\")", + "widget": "PropertyDescription" + }, + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-custom-events", + "label": "Emit a custom event", + "subtitle": "Emit Event" + } + }, + "Microsoft.EndDialog": { + "form": { + "helpLink": "https://aka.ms/bfc-understanding-dialogs", + "label": "End this dialog", + "subtitle": "End Dialog" + } + }, + "Microsoft.EndTurn": { + "form": { + "helpLink": "https://aka.ms/bfc-understanding-dialogs", + "label": "End turn", + "subtitle": "End Turn" + } + }, + "Microsoft.Foreach": { + "flow": { + "loop": { + "body": "=concat(\"Each value in \", coalesce(action.itemsProperty, \"?\"))", + "widget": "ActionCard" + }, + "nowrap": true, + "widget": "ForeachWidget" + }, + "form": { + "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", + "hidden": [ + "actions" + ], + "label": "Loop: For each item", + "order": [ + "itemsProperty", + "*" + ], + "properties": { + "index": { + "intellisenseScopes": [ + "variable-scopes" + ] + }, + "itemsProperty": { + "intellisenseScopes": [ + "user-variables" + ] + }, + "value": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "For Each" + } + }, + "Microsoft.ForeachPage": { + "flow": { + "loop": { + "body": "=concat(\"Each page of \", coalesce(action.pageSize, \"?\"), \" in \", coalesce(action.page, \"?\"))", + "widget": "ActionCard" + }, + "nowrap": true, + "widget": "ForeachWidget" + }, + "form": { + "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", + "hidden": [ + "actions" + ], + "label": "Loop: For each page (multiple items)", + "order": [ + "itemsProperty", + "pageSize", + "*" + ], + "properties": { + "itemsProperty": { + "intellisenseScopes": [ + "user-variables" + ] + }, + "page": { + "intellisenseScopes": [ + "variable-scopes" + ] + }, + "pageIndex": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "For Each Page" + } + }, + "Microsoft.GetActivityMembers": { + "flow": { + "body": { + "description": "= ActivityId", + "property": "=coalesce(action.activityId, \"?\")", + "widget": "PropertyDescription" + }, + "footer": { + "description": "= Result property", + "property": "=coalesce(action.property, \"?\")", + "widget": "PropertyDescription" + }, + "widget": "ActionCard" + } + }, + "Microsoft.GetConversationMembers": { + "flow": { + "footer": { + "description": "= Result property", + "property": "=action.property", + "widget": "PropertyDescription" + }, + "widget": "ActionCard" + } + }, + "Microsoft.HttpRequest": { + "flow": { + "body": { + "operation": "=action.method", + "resource": "=action.url", + "singleline": true, + "widget": "ResourceOperation" + }, + "footer": { + "description": "= Result property", + "property": "=action.resultProperty", + "widget": "PropertyDescription" + }, + "hideFooter": "=!action.resultProperty", + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-using-http", + "label": "Send an HTTP request", + "order": [ + "method", + "url", + "body", + "headers", + "*" + ], + "properties": { + "resultProperty": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "HTTP Request" + } + }, + "Microsoft.IfCondition": { + "flow": { + "judgement": { + "body": "=coalesce(action.condition, \"\")", + "widget": "ActionCard" + }, + "nowrap": true, + "widget": "IfConditionWidget" + }, + "form": { + "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", + "hidden": [ + "actions", + "elseActions" + ], + "label": "Branch: If/Else", + "subtitle": "If Condition" + } + }, + "Microsoft.LogAction": { + "form": { + "helpLink": "https://aka.ms/composer-telemetry", + "label": "Log to console", + "subtitle": "Log Action" + } + }, + "Microsoft.NumberInput": { + "flow": { + "body": "=action.prompt", + "botAsks": { + "body": { + "defaultContent": "", + "field": "prompt", + "widget": "LgWidget" + }, + "header": { + "colors": { + "icon": "#5C2E91", + "theme": "#EEEAF4" + }, + "icon": "MessageBot", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "nowrap": true, + "userInput": { + "header": { + "colors": { + "icon": "#0078D4", + "theme": "#E5F0FF" + }, + "disableSDKTitle": true, + "icon": "User", + "menu": "none", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "widget": "PromptWidget" + }, + "form": { + "helpLink": "https://aka.ms/bfc-ask-for-user-input", + "label": "Prompt for a number", + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Number Input" + } + }, + "Microsoft.OAuthInput": { + "flow": { + "body": { + "operation": "Connection", + "resource": "=coalesce(action.connectionName, \"?\")", + "singleline": true, + "widget": "ResourceOperation" + }, + "footer": { + "description": "= Token property", + "property": "=action.property", + "widget": "PropertyDescription" + }, + "hideFooter": "=!action.property", + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-using-oauth", + "label": "OAuth login", + "order": [ + "connectionName", + "*" + ], + "subtitle": "OAuth Input" + } + }, + "Microsoft.OnActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Activities", + "order": [ + "condition", + "*" + ], + "subtitle": "Activity received" + }, + "trigger": { + "label": "Activities (Activity received)", + "order": 5.1, + "submenu": { + "label": "Activities", + "placeholder": "Select an activity type", + "prompt": "Which activity type?" + } + } + }, + "Microsoft.OnAssignEntity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Handle a condition when an entity is assigned", + "order": [ + "condition", + "*" + ], + "subtitle": "EntityAssigned activity" + } + }, + "Microsoft.OnBeginDialog": { + "form": { + "hidden": [ + "actions" + ], + "label": "Dialog started", + "order": [ + "condition", + "*" + ], + "subtitle": "Begin dialog event" + }, + "trigger": { + "label": "Dialog started (Begin dialog event)", + "order": 4.1, + "submenu": { + "label": "Dialog events", + "placeholder": "Select an event type", + "prompt": "Which event?" + } + } + }, + "Microsoft.OnCancelDialog": { + "form": { + "hidden": [ + "actions" + ], + "label": "Dialog cancelled", + "order": [ + "condition", + "*" + ], + "subtitle": "Cancel dialog event" + }, + "trigger": { + "label": "Dialog cancelled (Cancel dialog event)", + "order": 4.2, + "submenu": "Dialog events" + } + }, + "Microsoft.OnChooseEntity": { + "form": { + "hidden": [ + "actions" + ], + "order": [ + "condition", + "*" + ] + } + }, + "Microsoft.OnChooseIntent": { + "form": { + "hidden": [ + "actions" + ], + "order": [ + "condition", + "*" + ] + }, + "trigger": { + "label": "Duplicated intents recognized", + "order": 6 + } + }, + "Microsoft.OnCommandActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Command received", + "order": [ + "condition", + "*" + ], + "subtitle": "Command activity received" + }, + "trigger": { + "label": "Command received (Command activity received)", + "order": 5.81, + "submenu": "Activities" + } + }, + "Microsoft.OnCommandResultActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Command Result received", + "order": [ + "condition", + "*" + ], + "subtitle": "Command Result activity received" + }, + "trigger": { + "label": "Command Result received (Command Result activity received)", + "order": 5.81, + "submenu": "Activities" + } + }, + "Microsoft.OnCondition": { + "form": { + "hidden": [ + "actions" + ], + "label": "Handle a condition", + "order": [ + "condition", + "*" + ], + "subtitle": "Condition" + } + }, + "Microsoft.OnConversationUpdateActivity": { + "form": { + "description": "Handle the events fired when a user begins a new conversation with the bot.", + "helpLink": "https://aka.ms/bf-composer-docs-conversation-update-activity", + "hidden": [ + "actions" + ], + "label": "Greeting", + "order": [ + "condition", + "*" + ], + "subtitle": "ConversationUpdate activity" + }, + "trigger": { + "label": "Greeting (ConversationUpdate activity)", + "order": 5.2, + "submenu": "Activities" + } + }, + "Microsoft.OnDialogEvent": { + "form": { + "hidden": [ + "actions" + ], + "label": "Dialog events", + "order": [ + "condition", + "*" + ], + "subtitle": "Dialog event" + }, + "trigger": { + "label": "Custom events", + "order": 7 + } + }, + "Microsoft.OnEndOfActions": { + "form": { + "hidden": [ + "actions" + ], + "label": "Handle a condition when actions have ended", + "order": [ + "condition", + "*" + ], + "subtitle": "EndOfActions activity" + } + }, + "Microsoft.OnEndOfConversationActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Conversation ended", + "order": [ + "condition", + "*" + ], + "subtitle": "EndOfConversation activity" + }, + "trigger": { + "label": "Conversation ended (EndOfConversation activity)", + "order": 5.3, + "submenu": "Activities" + } + }, + "Microsoft.OnError": { + "form": { + "hidden": [ + "actions" + ], + "label": "Error occurred", + "order": [ + "condition", + "*" + ], + "subtitle": "Error event" + }, + "trigger": { + "label": "Error occurred (Error event)", + "order": 4.3, + "submenu": "Dialog events" + } + }, + "Microsoft.OnEventActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Event received", + "order": [ + "condition", + "*" + ], + "subtitle": "Event activity" + }, + "trigger": { + "label": "Event received (Event activity)", + "order": 5.4, + "submenu": "Activities" + } + }, + "Microsoft.OnHandoffActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Handover to human", + "order": [ + "condition", + "*" + ], + "subtitle": "Handoff activity" + }, + "trigger": { + "label": "Handover to human (Handoff activity)", + "order": 5.5, + "submenu": "Activities" + } + }, + "Microsoft.OnInstallationUpdateActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Installation updated", + "order": [ + "condition", + "*" + ], + "subtitle": "Installation updated activity" + } + }, + "Microsoft.OnIntent": { + "form": { + "hidden": [ + "actions" + ], + "label": "Intent recognized", + "order": [ + "intent", + "condition", + "entities", + "*" + ], + "subtitle": "Intent recognized" + }, + "trigger": { + "label": "Intent recognized", + "order": 1 + } + }, + "Microsoft.OnInvokeActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Conversation invoked", + "order": [ + "condition", + "*" + ], + "subtitle": "Invoke activity" + }, + "trigger": { + "label": "Conversation invoked (Invoke activity)", + "order": 5.6, + "submenu": "Activities" + } + }, + "Microsoft.OnMessageActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Message received", + "order": [ + "condition", + "*" + ], + "subtitle": "Message activity received" + }, + "trigger": { + "label": "Message received (Message activity received)", + "order": 5.81, + "submenu": "Activities" + } + }, + "Microsoft.OnMessageDeleteActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Message deleted", + "order": [ + "condition", + "*" + ], + "subtitle": "Message deleted activity" + }, + "trigger": { + "label": "Message deleted (Message deleted activity)", + "order": 5.82, + "submenu": "Activities" + } + }, + "Microsoft.OnMessageReactionActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Message reaction", + "order": [ + "condition", + "*" + ], + "subtitle": "Message reaction activity" + }, + "trigger": { + "label": "Message reaction (Message reaction activity)", + "order": 5.83, + "submenu": "Activities" + } + }, + "Microsoft.OnMessageUpdateActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Message updated", + "order": [ + "condition", + "*" + ], + "subtitle": "Message updated activity" + }, + "trigger": { + "label": "Message updated (Message updated activity)", + "order": 5.84, + "submenu": "Activities" + } + }, + "Microsoft.OnQnAMatch": { + "trigger": { + "label": "QnA Intent recognized", + "order": 2 + } + }, + "Microsoft.OnRepromptDialog": { + "form": { + "hidden": [ + "actions" + ], + "label": "Re-prompt for input", + "order": [ + "condition", + "*" + ], + "subtitle": "Reprompt dialog event" + }, + "trigger": { + "label": "Re-prompt for input (Reprompt dialog event)", + "order": 4.4, + "submenu": "Dialog events" + } + }, + "Microsoft.OnTypingActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "User is typing", + "order": [ + "condition", + "*" + ], + "subtitle": "Typing activity" + }, + "trigger": { + "label": "User is typing (Typing activity)", + "order": 5.7, + "submenu": "Activities" + } + }, + "Microsoft.OnUnknownIntent": { + "form": { + "hidden": [ + "actions" + ], + "label": "Unknown intent", + "order": [ + "condition", + "*" + ], + "subtitle": "Unknown intent recognized" + }, + "trigger": { + "label": "Unknown intent", + "order": 3 + } + }, + "Microsoft.QnAMakerDialog": { + "flow": { + "body": "=action.hostname", + "widget": "ActionCard" + } + }, + "Microsoft.RegexRecognizer": { + "form": { + "hidden": [ + "entities" + ] + } + }, + "Microsoft.RepeatDialog": { + "form": { + "helpLink": "https://aka.ms/bfc-understanding-dialogs", + "label": "Repeat this dialog", + "order": [ + "options", + "*" + ], + "subtitle": "Repeat Dialog" + } + }, + "Microsoft.ReplaceDialog": { + "flow": { + "body": { + "dialog": "=action.dialog", + "widget": "DialogRef" + }, + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-understanding-dialogs", + "label": "Replace this dialog", + "order": [ + "dialog", + "options", + "*" + ], + "subtitle": "Replace Dialog" + } + }, + "Microsoft.SendActivity": { + "flow": { + "body": { + "field": "activity", + "widget": "LgWidget" + }, + "header": { + "colors": { + "icon": "#5C2E91", + "theme": "#EEEAF4" + }, + "icon": "MessageBot", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-send-activity", + "label": "Send a response", + "order": [ + "activity", + "*" + ], + "subtitle": "Send Activity" + } + }, + "Microsoft.SendHandoffActivity": { + "flow": { + "widget": "ActionHeader" + }, + "form": { + "helpLink": "https://aka.ms/bfc-send-handoff-activity", + "label": "Send a handoff request", + "subtitle": "Send Handoff Activity" + }, + "menu": { + "label": "Send Handoff Event", + "submenu": [ + "Access external resources" + ] + } + }, + "Microsoft.SetProperties": { + "flow": { + "body": { + "items": "=foreach(action.assignments, x => concat(coalesce(x.property, \"?\"), \" : \", coalesce(x.value, \"?\")))", + "widget": "ListOverview" + }, + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-using-memory", + "label": "Set properties", + "properties": { + "assignments": { + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + } + } + }, + "subtitle": "Set Properties" + } + }, + "Microsoft.SetProperty": { + "flow": { + "body": "${coalesce(action.property, \"?\")} : ${coalesce(action.value, \"?\")}", + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-using-memory", + "label": "Set a property", + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Set Property" + } + }, + "Microsoft.SignOutUser": { + "form": { + "label": "Sign out user", + "subtitle": "Signout User" + } + }, + "Microsoft.SwitchCondition": { + "flow": { + "judgement": { + "body": "=coalesce(action.condition, \"\")", + "widget": "ActionCard" + }, + "nowrap": true, + "widget": "SwitchConditionWidget" + }, + "form": { + "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", + "hidden": [ + "default" + ], + "label": "Branch: Switch (multiple options)", + "properties": { + "cases": { + "hidden": [ + "actions" + ] + }, + "condition": { + "intellisenseScopes": [ + "user-variables" + ] + } + }, + "subtitle": "Switch Condition" + } + }, + "Microsoft.TextInput": { + "flow": { + "body": "=action.prompt", + "botAsks": { + "body": { + "defaultContent": "", + "field": "prompt", + "widget": "LgWidget" + }, + "header": { + "colors": { + "icon": "#5C2E91", + "theme": "#EEEAF4" + }, + "icon": "MessageBot", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "nowrap": true, + "userInput": { + "header": { + "colors": { + "icon": "#0078D4", + "theme": "#E5F0FF" + }, + "disableSDKTitle": true, + "icon": "User", + "menu": "none", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "widget": "PromptWidget" + }, + "form": { + "helpLink": "https://aka.ms/bfc-ask-for-user-input", + "label": "Prompt for text", + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Text Input" + } + }, + "Microsoft.ThrowException": { + "flow": { + "body": { + "description": "= ErrorValue", + "property": "=coalesce(action.errorValue, \"?\")", + "widget": "PropertyDescription" + }, + "widget": "ActionCard" + }, + "form": { + "label": "Throw an exception", + "subtitle": "Throw an exception" + } + }, + "Microsoft.TraceActivity": { + "form": { + "helpLink": "https://aka.ms/composer-telemetry", + "label": "Emit a trace event", + "subtitle": "Trace Activity" + } + }, + "Microsoft.UpdateActivity": { + "flow": { + "body": { + "field": "activity", + "widget": "LgWidget" + }, + "header": { + "colors": { + "icon": "#656565", + "theme": "#D7D7D7" + }, + "icon": "MessageBot", + "title": "Update activity", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "form": { + "label": "Update an activity", + "subtitle": "Update Activity" + } + } +} diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/schemas/update-schema.ps1 b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/schemas/update-schema.ps1 new file mode 100644 index 0000000000..67715586e4 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/schemas/update-schema.ps1 @@ -0,0 +1,27 @@ +$SCHEMA_FILE="sdk.schema" +$UISCHEMA_FILE="sdk.uischema" +$BACKUP_SCHEMA_FILE="sdk-backup.schema" +$BACKUP_UISCHEMA_FILE="sdk-backup.uischema" + +Write-Host "Running schema merge." + +if (Test-Path $SCHEMA_FILE -PathType leaf) { Move-Item -Force -Path $SCHEMA_FILE -Destination $BACKUP_SCHEMA_FILE } +if (Test-Path $UISCHEMA_FILE -PathType leaf) { Move-Item -Force -Path $UISCHEMA_FILE -Destination $BACKUP_UISCHEMA_FILE } + +bf dialog:merge "*.schema" "!**/sdk-backup.schema" "*.uischema" "!**/sdk-backup.uischema" "!**/sdk.override.uischema" "!**/generated" "../*.csproj" "../package.json" -o $SCHEMA_FILE + +if (Test-Path $SCHEMA_FILE -PathType leaf) +{ + if (Test-Path $BACKUP_SCHEMA_FILE -PathType leaf) { Remove-Item -Force -Path $BACKUP_SCHEMA_FILE } + if (Test-Path $BACKUP_UISCHEMA_FILE -PathType leaf) { Remove-Item -Force -Path $BACKUP_UISCHEMA_FILE } + + Write-Host "Schema merged succesfully." + if (Test-Path $SCHEMA_FILE -PathType leaf) { Write-Host " Schema: $SCHEMA_FILE" } + if (Test-Path $UISCHEMA_FILE -PathType leaf) { Write-Host " UI Schema: $UISCHEMA_FILE" } +} +else +{ + Write-Host "Schema merge failed. Restoring previous versions." + if (Test-Path $BACKUP_SCHEMA_FILE -PathType leaf) { Move-Item -Force -Path $BACKUP_SCHEMA_FILE -Destination $SCHEMA_FILE } + if (Test-Path $BACKUP_UISCHEMA_FILE -PathType leaf) { Move-Item -Force -Path $BACKUP_UISCHEMA_FILE -Destination $UISCHEMA_FILE } +} diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/schemas/update-schema.sh b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/schemas/update-schema.sh new file mode 100644 index 0000000000..50beec9c4c --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/schemas/update-schema.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash +SCHEMA_FILE=sdk.schema +UISCHEMA_FILE=sdk.uischema +BACKUP_SCHEMA_FILE=sdk-backup.schema +BACKUP_UISCHEMA_FILE=sdk-backup.uischema + +while [ $# -gt 0 ]; do + if [[ $1 == *"-"* ]]; then + param="${1/-/}" + declare $param="$2" + fi + shift +done + +echo "Running schema merge." +[ -f "$SCHEMA_FILE" ] && mv "./$SCHEMA_FILE" "./$BACKUP_SCHEMA_FILE" +[ -f "$UISCHEMA_FILE" ] && mv "./$UISCHEMA_FILE" "./$BACKUP_UISCHEMA_FILE" + +bf dialog:merge "*.schema" "!**/sdk-backup.schema" "*.uischema" "!**/sdk-backup.uischema" "!**/sdk.override.uischema" "!**/generated" "../*.csproj" "../package.json" -o $SCHEMA_FILE + +if [ -f "$SCHEMA_FILE" ]; then + rm -rf "./$BACKUP_SCHEMA_FILE" + rm -rf "./$BACKUP_UISCHEMA_FILE" + echo "Schema merged succesfully." + [ -f "$SCHEMA_FILE" ] && echo " Schema: $SCHEMA_FILE" + [ -f "$UISCHEMA_FILE" ] && echo " UI Schema: $UISCHEMA_FILE" +else + echo "Schema merge failed. Restoring previous versions." + [ -f "$BACKUP_SCHEMA_FILE" ] && mv "./$BACKUP_SCHEMA_FILE" "./$SCHEMA_FILE" + [ -f "$BACKUP_UISCHEMA_FILE" ] && mv "./$BACKUP_UISCHEMA_FILE" "./$UISCHEMA_FILE" +fi diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/settings/appsettings.json b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/settings/appsettings.json new file mode 100644 index 0000000000..5743912bbc --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/settings/appsettings.json @@ -0,0 +1,109 @@ +{ + "customFunctions": [], + "defaultLanguage": "en-us", + "defaultLocale": "en-us", + "importedLibraries": [], + "languages": [ + "en-us" + ], + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "luFeatures": { + "enableCompositeEntities": true, + "enableListEntities": true, + "enableMLEntities": true, + "enablePattern": true, + "enablePhraseLists": true, + "enablePrebuiltEntities": true, + "enableRegexEntities": true + }, + "luis": { + "authoringEndpoint": "", + "authoringRegion": "", + "defaultLanguage": "en-us", + "endpoint": "", + "environment": "composer", + "name": "SimpleHostBotComposer" + }, + "MicrosoftAppId": "", + "MicrosoftAppPassword": "", + "publishTargets": [], + "qna": { + "hostname": "", + "knowledgebaseid": "", + "qnaRegion": "westus" + }, + "runtime": { + "command": "dotnet run --project SimpleHostBotComposer.csproj", + "customRuntime": true, + "key": "adaptive-runtime-dotnet-webapp", + "path": "../" + }, + "runtimeSettings": { + "adapters": [], + "features": { + "removeRecipientMentions": false, + "showTyping": false, + "traceTranscript": false, + "useInspection": false, + "setSpeak": { + "voiceFontName": "en-US-AriaNeural", + "fallbackToTextForSpeechIfEmpty": true + } + }, + "components": [], + "skills": { + "allowedCallers": [ + "*" + ] + }, + "storage": "", + "telemetry": { + "logActivities": true, + "logPersonalInformation": false, + "options": { + "connectionString": "" + } + } + }, + "downsampling": { + "maxImbalanceRatio": -1 + }, + "skillConfiguration": {}, + "skillHostEndpoint": "http://localhost:35010/api/skills", + "skill": { + "echoSkillBotComposerDotNet": { + "endpointUrl": "http://localhost:35410/api/messages", + "msAppId": "00000000-0000-0000-0000-000000000000" + }, + "echoSkillBotDotNet": { + "endpointUrl": "http://localhost:35400/api/messages", + "msAppId": "00000000-0000-0000-0000-000000000000" + }, + "echoSkillBotDotNet21": { + "endpointUrl": "http://localhost:35405/api/messages", + "msAppId": "00000000-0000-0000-0000-000000000000" + }, + "echoSkillBotDotNetV3": { + "endpointUrl": "http://localhost:35407/api/messages", + "msAppId": "00000000-0000-0000-0000-000000000000" + }, + "echoSkillBotJs": { + "endpointUrl": "http://localhost:36400/api/messages", + "msAppId": "00000000-0000-0000-0000-000000000000" + }, + "echoSkillBotJsv3": { + "endpointUrl": "http://localhost:36407/api/messages", + "msAppId": "00000000-0000-0000-0000-000000000000" + }, + "echoSkillBotPython": { + "endpointUrl": "http://localhost:37400/api/messages", + "msAppId": "00000000-0000-0000-0000-000000000000" + } + } +} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/simplehostbotcomposer.dialog b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/simplehostbotcomposer.dialog new file mode 100644 index 0000000000..d72a4dcbd3 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/simplehostbotcomposer.dialog @@ -0,0 +1,104 @@ +{ + "$kind": "Microsoft.AdaptiveDialog", + "$designer": { + "name": "SimpleHostBotComposer", + "description": "", + "id": "A79tBe" + }, + "autoEndDialog": true, + "defaultResultProperty": "dialog.result", + "triggers": [ + { + "$kind": "Microsoft.OnConversationUpdateActivity", + "$designer": { + "id": "376720" + }, + "actions": [ + { + "$kind": "Microsoft.Foreach", + "$designer": { + "id": "518944", + "name": "Loop: for each item" + }, + "itemsProperty": "turn.Activity.membersAdded", + "actions": [ + { + "$kind": "Microsoft.IfCondition", + "$designer": { + "id": "641773", + "name": "Branch: if/else" + }, + "condition": "string(dialog.foreach.value.id) != string(turn.Activity.Recipient.id)", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "$designer": { + "id": "859266", + "name": "Send a response" + }, + "activity": "${SendActivity_Greeting()}" + }, + { + "$kind": "Microsoft.BeginDialog", + "$designer": { + "id": "fTvoh5" + }, + "activityProcessed": true, + "dialog": "CallEchoSkill" + } + ] + } + ] + } + ] + }, + { + "$kind": "Microsoft.OnUnknownIntent", + "$designer": { + "id": "mb2n1u" + }, + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "$designer": { + "id": "kMjqz1" + }, + "activity": "${SendActivity_DidNotUnderstand()}" + } + ] + }, + { + "$kind": "Microsoft.OnEndOfConversationActivity", + "$designer": { + "id": "xPU1pB" + }, + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "$designer": { + "id": "M2LqJr" + }, + "activity": "${SendActivity_M2LqJr()}" + }, + { + "$kind": "Microsoft.SendActivity", + "$designer": { + "id": "bgTcyn" + }, + "activity": "${SendActivity_bgTcyn()}" + }, + { + "$kind": "Microsoft.BeginDialog", + "$designer": { + "id": "s9BrZr" + }, + "activityProcessed": true, + "dialog": "CallEchoSkill" + } + ] + } + ], + "generator": "SimpleHostBotComposer.lg", + "id": "SimpleHostBotComposer", + "recognizer": "SimpleHostBotComposer.lu.qna" +} diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/wwwroot/default.htm b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/wwwroot/default.htm new file mode 100644 index 0000000000..8ddd3ef885 --- /dev/null +++ b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/wwwroot/default.htm @@ -0,0 +1,364 @@ + + + + + + + SimpleHostBotComposer + + + + + +
+
+
+
SimpleHostBotComposer
+
+
+
+
+
Your bot is ready!
+
You can test your bot in the Bot Framework Emulator
+ by connecting to http://localhost:3978/api/messages.
+
+
Visit Azure + Bot Service to register your bot and add it to
+ various channels. The bot's endpoint URL typically looks + like this:
+
https://your_bots_hostname/api/messages
+
+
+
+
+ +
+ + + \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/FunctionalTestsBots.sln b/tests/functional/Bots/DotNet/FunctionalTestsBots.sln new file mode 100644 index 0000000000..ea5591067b --- /dev/null +++ b/tests/functional/Bots/DotNet/FunctionalTestsBots.sln @@ -0,0 +1,106 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30621.155 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Consumers", "Consumers", "{12088D79-235C-4387-9DA8-69AB93D52A8E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Skills", "Skills", "{39117C87-FD02-40CD-A9A9-9A4C0A630521}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CodeFirst", "CodeFirst", "{C7A60083-78C8-4CEF-A358-4E53CBF0D12A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleHostBot", "Consumers\CodeFirst\SimpleHostBot\SimpleHostBot.csproj", "{AAE978F8-D22B-41E8-B445-872FF4194713}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleHostBot-2.1", "Consumers\CodeFirst\SimpleHostBot-2.1\SimpleHostBot-2.1.csproj", "{0443C38C-A0DF-4A1A-8931-4A4BFFEEB386}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CodeFirst", "CodeFirst", "{6EF38D8C-7953-4D54-BA31-FFF055B7B217}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EchoSkillBot-2.1", "Skills\CodeFirst\EchoSkillBot-2.1\EchoSkillBot-2.1.csproj", "{56864219-785B-4600-9849-43CAF90F37E9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EchoSkillBot", "Skills\CodeFirst\EchoSkillBot\EchoSkillBot.csproj", "{692F26DD-F7BA-49F3-AC6D-73047C1E5D61}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Composer", "Composer", "{33FA275E-9E5D-4582-BFF7-24B2C5DB2962}" + ProjectSection(SolutionItems) = preProject + Consumers\Composer\Directory.Build.props = Consumers\Composer\Directory.Build.props + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Composer", "Composer", "{33E2281F-C6A7-40EC-961A-FF9FF254FDDC}" + ProjectSection(SolutionItems) = preProject + Skills\Composer\Directory.Build.props = Skills\Composer\Directory.Build.props + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WaterfallHostBot", "Consumers\CodeFirst\WaterfallHostBot\WaterfallHostBot.csproj", "{15A946BE-39F9-4945-9895-0019ED3392FC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WaterfallSkillBot", "Skills\CodeFirst\WaterfallSkillBot\WaterfallSkillBot.csproj", "{E3BECBEF-E41F-48D1-9EEB-A4D7E1CD34E3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EchoSkillBot-v3", "Skills\CodeFirst\EchoSkillBot-v3\EchoSkillBot-v3.csproj", "{41BC9547-FD9E-40E1-B1D9-C3F25BC9A2F3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleHostBotComposer", "Consumers\Composer\SimpleHostBotComposer\SimpleHostBotComposer.csproj", "{FDC53B3A-0E15-4FDF-A587-05C8F90BC2B6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EchoSkillBotComposer", "Skills\Composer\EchoSkillBotComposer\EchoSkillBotComposer.csproj", "{9BA47CF9-7D90-4B5C-A9FA-01797A435D53}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {AAE978F8-D22B-41E8-B445-872FF4194713}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AAE978F8-D22B-41E8-B445-872FF4194713}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AAE978F8-D22B-41E8-B445-872FF4194713}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AAE978F8-D22B-41E8-B445-872FF4194713}.Release|Any CPU.Build.0 = Release|Any CPU + {0443C38C-A0DF-4A1A-8931-4A4BFFEEB386}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0443C38C-A0DF-4A1A-8931-4A4BFFEEB386}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0443C38C-A0DF-4A1A-8931-4A4BFFEEB386}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0443C38C-A0DF-4A1A-8931-4A4BFFEEB386}.Release|Any CPU.Build.0 = Release|Any CPU + {56864219-785B-4600-9849-43CAF90F37E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {56864219-785B-4600-9849-43CAF90F37E9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {56864219-785B-4600-9849-43CAF90F37E9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {56864219-785B-4600-9849-43CAF90F37E9}.Release|Any CPU.Build.0 = Release|Any CPU + {692F26DD-F7BA-49F3-AC6D-73047C1E5D61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {692F26DD-F7BA-49F3-AC6D-73047C1E5D61}.Debug|Any CPU.Build.0 = Debug|Any CPU + {692F26DD-F7BA-49F3-AC6D-73047C1E5D61}.Release|Any CPU.ActiveCfg = Release|Any CPU + {692F26DD-F7BA-49F3-AC6D-73047C1E5D61}.Release|Any CPU.Build.0 = Release|Any CPU + {15A946BE-39F9-4945-9895-0019ED3392FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {15A946BE-39F9-4945-9895-0019ED3392FC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {15A946BE-39F9-4945-9895-0019ED3392FC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {15A946BE-39F9-4945-9895-0019ED3392FC}.Release|Any CPU.Build.0 = Release|Any CPU + {E3BECBEF-E41F-48D1-9EEB-A4D7E1CD34E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E3BECBEF-E41F-48D1-9EEB-A4D7E1CD34E3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E3BECBEF-E41F-48D1-9EEB-A4D7E1CD34E3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E3BECBEF-E41F-48D1-9EEB-A4D7E1CD34E3}.Release|Any CPU.Build.0 = Release|Any CPU + {41BC9547-FD9E-40E1-B1D9-C3F25BC9A2F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {41BC9547-FD9E-40E1-B1D9-C3F25BC9A2F3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {41BC9547-FD9E-40E1-B1D9-C3F25BC9A2F3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {41BC9547-FD9E-40E1-B1D9-C3F25BC9A2F3}.Release|Any CPU.Build.0 = Release|Any CPU + {FDC53B3A-0E15-4FDF-A587-05C8F90BC2B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FDC53B3A-0E15-4FDF-A587-05C8F90BC2B6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FDC53B3A-0E15-4FDF-A587-05C8F90BC2B6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FDC53B3A-0E15-4FDF-A587-05C8F90BC2B6}.Release|Any CPU.Build.0 = Release|Any CPU + {9BA47CF9-7D90-4B5C-A9FA-01797A435D53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9BA47CF9-7D90-4B5C-A9FA-01797A435D53}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9BA47CF9-7D90-4B5C-A9FA-01797A435D53}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9BA47CF9-7D90-4B5C-A9FA-01797A435D53}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {C7A60083-78C8-4CEF-A358-4E53CBF0D12A} = {12088D79-235C-4387-9DA8-69AB93D52A8E} + {AAE978F8-D22B-41E8-B445-872FF4194713} = {C7A60083-78C8-4CEF-A358-4E53CBF0D12A} + {0443C38C-A0DF-4A1A-8931-4A4BFFEEB386} = {C7A60083-78C8-4CEF-A358-4E53CBF0D12A} + {6EF38D8C-7953-4D54-BA31-FFF055B7B217} = {39117C87-FD02-40CD-A9A9-9A4C0A630521} + {56864219-785B-4600-9849-43CAF90F37E9} = {6EF38D8C-7953-4D54-BA31-FFF055B7B217} + {692F26DD-F7BA-49F3-AC6D-73047C1E5D61} = {6EF38D8C-7953-4D54-BA31-FFF055B7B217} + {33FA275E-9E5D-4582-BFF7-24B2C5DB2962} = {12088D79-235C-4387-9DA8-69AB93D52A8E} + {33E2281F-C6A7-40EC-961A-FF9FF254FDDC} = {39117C87-FD02-40CD-A9A9-9A4C0A630521} + {15A946BE-39F9-4945-9895-0019ED3392FC} = {C7A60083-78C8-4CEF-A358-4E53CBF0D12A} + {E3BECBEF-E41F-48D1-9EEB-A4D7E1CD34E3} = {6EF38D8C-7953-4D54-BA31-FFF055B7B217} + {41BC9547-FD9E-40E1-B1D9-C3F25BC9A2F3} = {6EF38D8C-7953-4D54-BA31-FFF055B7B217} + {FDC53B3A-0E15-4FDF-A587-05C8F90BC2B6} = {33FA275E-9E5D-4582-BFF7-24B2C5DB2962} + {9BA47CF9-7D90-4B5C-A9FA-01797A435D53} = {33E2281F-C6A7-40EC-961A-FF9FF254FDDC} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {2B77A921-EEA6-4006-ABD2-159C92F9F874} + EndGlobalSection +EndGlobal diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Authentication/AllowedCallersClaimsValidator.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Authentication/AllowedCallersClaimsValidator.cs new file mode 100644 index 0000000000..5b0b053639 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Authentication/AllowedCallersClaimsValidator.cs @@ -0,0 +1,70 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Security.Claims; +using System.Threading.Tasks; +using Microsoft.Bot.Connector.Authentication; +using Microsoft.Extensions.Configuration; + +namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot21.Authentication +{ + /// + /// Sample claims validator that loads an allowed list from configuration if present + /// and checks that requests are coming from allowed parent bots. + /// + public class AllowedCallersClaimsValidator : ClaimsValidator + { + private const string ConfigKey = "AllowedCallers"; + private readonly List _allowedCallers; + + /// + /// Initializes a new instance of the class. + /// Loads the appIds for the configured callers. Only allows access to callers it has configured. + /// + /// The list of configured callers. + public AllowedCallersClaimsValidator(IConfiguration config) + { + if (config == null) + { + throw new ArgumentNullException(nameof(config)); + } + + // AllowedCallers is the setting in the appsettings.json file + // that consists of the list of parent bot IDs that are allowed to access the skill. + // To add a new parent bot, simply edit the AllowedCallers and add + // the parent bot's Microsoft app ID to the list. + // In this sample, we allow all callers if AllowedCallers contains an "*". + var section = config.GetSection(ConfigKey); + var appsList = section.Get(); + if (appsList == null) + { + throw new ArgumentNullException($"\"{ConfigKey}\" not found in configuration."); + } + + _allowedCallers = new List(appsList); + } + + /// + /// Checks that the appId claim in the skill request is in the list of callers configured for this bot. + /// + /// The list of claims to validate. + /// A task that represents the work queued to execute. + public override Task ValidateClaimsAsync(IList claims) + { + // If _allowedCallers contains an "*", we allow all callers. + if (SkillValidation.IsSkillClaim(claims) && !_allowedCallers.Contains("*")) + { + // Check that the appId claim in the skill request is in the list of callers configured for this bot. + var appId = JwtTokenValidation.GetAppIdFromClaims(claims); + if (!_allowedCallers.Contains(appId)) + { + throw new UnauthorizedAccessException($"Received a request from a bot with an app ID of \"{appId}\". To enable requests from this caller, add the app ID to your configuration file."); + } + } + + return Task.CompletedTask; + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Bots/EchoBot.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Bots/EchoBot.cs new file mode 100644 index 0000000000..14cccdbc7a --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Bots/EchoBot.cs @@ -0,0 +1,50 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Schema; + +namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot21.Bots +{ + public class EchoBot : ActivityHandler + { + /// + /// Processes a message activity. + /// + /// Context for the current turn of conversation. + /// CancellationToken propagates notifications that operations should be cancelled. + /// A representing the result of the asynchronous operation. + protected override async Task OnMessageActivityAsync(ITurnContext turnContext, CancellationToken cancellationToken) + { + if (turnContext.Activity.Text.Contains("end") || turnContext.Activity.Text.Contains("stop")) + { + // Send End of conversation at the end. + await turnContext.SendActivityAsync(MessageFactory.Text($"Ending conversation from the skill..."), cancellationToken); + var endOfConversation = Activity.CreateEndOfConversationActivity(); + endOfConversation.Code = EndOfConversationCodes.CompletedSuccessfully; + await turnContext.SendActivityAsync(endOfConversation, cancellationToken); + } + else + { + await turnContext.SendActivityAsync(MessageFactory.Text($"Echo: {turnContext.Activity.Text}"), cancellationToken); + await turnContext.SendActivityAsync(MessageFactory.Text("Say \"end\" or \"stop\" and I'll end the conversation and back to the parent."), cancellationToken); + } + } + + /// + /// Processes an end of conversation activity. + /// + /// Context for the current turn of conversation. + /// CancellationToken propagates notifications that operations should be cancelled. + /// A representing the result of the asynchronous operation. + protected override Task OnEndOfConversationActivityAsync(ITurnContext turnContext, CancellationToken cancellationToken) + { + // This will be called if the host bot is ending the conversation. Sending additional messages should be + // avoided as the conversation may have been deleted. + // Perform cleanup of resources if needed. + return Task.CompletedTask; + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Controllers/BotController.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Controllers/BotController.cs new file mode 100644 index 0000000000..c2fe9a198a --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Controllers/BotController.cs @@ -0,0 +1,43 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Integration.AspNet.Core; + +namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot21.Controllers +{ + /// + /// This ASP Controller is created to handle a request. Dependency Injection will provide the Adapter and IBot implementation at runtime. + /// Multiple different IBot implementations running at different endpoints can be achieved by specifying a more specific type for the bot constructor argument. + /// + [Route("api/messages")] + [ApiController] + public class BotController : ControllerBase + { + private readonly IBotFrameworkHttpAdapter _adapter; + private readonly IBot _bot; + + /// + /// Initializes a new instance of the class. + /// + /// Adapter for the BotController. + /// Bot for the BotController. + public BotController(IBotFrameworkHttpAdapter adapter, IBot bot) + { + _adapter = adapter; + _bot = bot; + } + + /// + /// Processes an HttpPost request. + /// + /// A representing the result of the asynchronous operation. + [HttpPost] + public async Task PostAsync() + { + await _adapter.ProcessAsync(Request, Response, _bot); + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/EchoSkillBot-2.1.csproj b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/EchoSkillBot-2.1.csproj new file mode 100644 index 0000000000..2df857a613 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/EchoSkillBot-2.1.csproj @@ -0,0 +1,25 @@ + + + + netcoreapp2.1 + latest + Microsoft.BotFrameworkFunctionalTests.EchoSkillBot21 + Microsoft.BotFrameworkFunctionalTests.EchoSkillBot21 + + + + DEBUG;TRACE + + + + + + + + + + Always + + + + \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Program.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Program.cs new file mode 100644 index 0000000000..bdfda7669a --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Program.cs @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Microsoft.AspNetCore; +using Microsoft.AspNetCore.Hosting; + +namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot21 +{ + public class Program + { + /// + /// The entry point of the application. + /// + /// The command line args. + public static void Main(string[] args) + { + CreateWebHostBuilder(args).Build().Run(); + } + + /// + /// Creates a new instance of the class with pre-configured defaults. + /// + /// The command line args. + /// The initialized . + public static IWebHostBuilder CreateWebHostBuilder(string[] args) => + WebHost.CreateDefaultBuilder(args) + .UseStartup(); + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Properties/launchSettings.json b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Properties/launchSettings.json new file mode 100644 index 0000000000..791f7e6a3b --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Properties/launchSettings.json @@ -0,0 +1,28 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:35405/", + "sslPort": 0 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": false, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "EchoSkillBotDotNet21": { + "commandName": "Project", + "launchBrowser": true, + "applicationUrl": "http://localhost:35405/", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/SkillAdapterWithErrorHandler.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/SkillAdapterWithErrorHandler.cs new file mode 100644 index 0000000000..76ef40f872 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/SkillAdapterWithErrorHandler.cs @@ -0,0 +1,63 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Bot.Builder.TraceExtensions; +using Microsoft.Bot.Connector.Authentication; +using Microsoft.Bot.Schema; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot21 +{ + public class SkillAdapterWithErrorHandler : BotFrameworkHttpAdapter + { + /// + /// Initializes a new instance of the class to handle errors. + /// + /// The configuration properties. + /// An implementation of the bots credentials. + /// The configuration setting for the authentication. + /// An instance of a logger. + /// A state management object for the conversation. + public SkillAdapterWithErrorHandler(IConfiguration configuration, ICredentialProvider credentialProvider, AuthenticationConfiguration authConfig, ILogger logger) + : base(configuration, credentialProvider, authConfig, logger: logger) + { + OnTurnError = async (turnContext, exception) => + { + try + { + // Log any leaked exception from the application. + logger.LogError(exception, $"[OnTurnError] unhandled error : {exception.Message}"); + + // Send a message to the user + var errorMessageText = "The skill encountered an error or bug."; + var errorMessage = MessageFactory.Text(errorMessageText + Environment.NewLine + exception, errorMessageText, InputHints.IgnoringInput); + errorMessage.Value = exception; + await turnContext.SendActivityAsync(errorMessage); + + errorMessageText = "To continue to run this bot, please fix the bot source code."; + errorMessage = MessageFactory.Text(errorMessageText, errorMessageText, InputHints.ExpectingInput); + await turnContext.SendActivityAsync(errorMessage); + + // Send a trace activity, which will be displayed in the Bot Framework Emulator + // Note: we return the entire exception in the value property to help the developer, this should not be done in prod. + await turnContext.TraceActivityAsync("OnTurnError Trace", exception.ToString(), "https://www.botframework.com/schemas/error", "TurnError"); + + // Send and EndOfConversation activity to the skill caller with the error to end the conversation + // and let the caller decide what to do. + var endOfConversation = Activity.CreateEndOfConversationActivity(); + endOfConversation.Code = "SkillError"; + endOfConversation.Text = exception.Message; + await turnContext.SendActivityAsync(endOfConversation); + } + catch (Exception ex) + { + logger.LogError(ex, $"Exception caught in SkillAdapterWithErrorHandler : {ex}"); + } + }; + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Startup.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Startup.cs new file mode 100644 index 0000000000..1c0bacc9bd --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Startup.cs @@ -0,0 +1,76 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.BotFramework; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Bot.Connector.Authentication; +using Microsoft.BotFrameworkFunctionalTests.EchoSkillBot21.Bots; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot21 +{ + public class Startup + { + public Startup(IConfiguration config) + { + Configuration = config; + } + + public IConfiguration Configuration { get; } + + /// + /// This method gets called by the runtime. Use this method to add services to the container. + /// + /// Method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); + + // Configure credentials + services.AddSingleton(); + + // Register AuthConfiguration to enable custom claim validation. + services.AddSingleton(sp => new AuthenticationConfiguration { ClaimsValidator = new Authentication.AllowedCallersClaimsValidator(sp.GetService()) }); + + // Create the Bot Framework Adapter with error handling enabled. + services.AddSingleton(); + + // Create the bot as a transient. In this case the ASP Controller is expecting an IBot. + services.AddTransient(); + + if (!string.IsNullOrEmpty(Configuration["ChannelService"])) + { + // Register a ConfigurationChannelProvider -- this is only for Azure Gov. + services.AddSingleton(); + } + } + + /// + /// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + /// + /// The application request pipeline to be configured. + /// The web hosting environment. + public void Configure(IApplicationBuilder app, IHostingEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + else + { + app.UseHsts(); + } + + app.UseDefaultFiles(); + app.UseStaticFiles(); + + // app.UseHttpsRedirection(); + app.UseMvc(); + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/appsettings.json b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/appsettings.json new file mode 100644 index 0000000000..c61cdb4d79 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/appsettings.json @@ -0,0 +1,11 @@ +{ + "MicrosoftAppId": "", + "MicrosoftAppPassword": "", + "ChannelService": "", + // This is a comma separate list with the App IDs that will have access to the skill. + // This setting is used in AllowedCallersClaimsValidator. + // Examples: + // [ "*" ] allows all callers. + // [ "AppId1", "AppId2" ] only allows access to parent bots with "AppId1" and "AppId2". + "AllowedCallers": [ "*" ] +} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/wwwroot/default.htm b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/wwwroot/default.htm new file mode 100644 index 0000000000..56d1b43377 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/wwwroot/default.htm @@ -0,0 +1,420 @@ + + + + + + + EchoSkillBot-2.1DotNet + + + + + +
+
+
+
EchoSkillBot-2.1DotNet Bot
+
+
+
+
+
Your bot is ready!
+
You can test your bot in the Bot Framework Emulator
+ by connecting to http://localhost:3978/api/messages.
+ +
Visit Azure + Bot Service to register your bot and add it to
+ various channels. The bot's endpoint URL typically looks + like this:
+
https://your_bots_hostname/api/messages
+
+
+
+
+ +
+ + + \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/wwwroot/manifests/echoskillbot-manifest-1.0.json b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/wwwroot/manifests/echoskillbot-manifest-1.0.json new file mode 100644 index 0000000000..68b6a165ff --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/wwwroot/manifests/echoskillbot-manifest-1.0.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/skills/v2.1/skill-manifest.json", + "$id": "EchoSkillBotDotNet21", + "name": "EchoSkillBotDotNet21", + "version": "1.0", + "description": "This is a skill for echoing what the user sent to the bot (using .netcore 2.1).", + "publisherName": "Microsoft", + "privacyUrl": "https://microsoft.com/privacy", + "copyright": "Copyright (c) Microsoft Corporation. All rights reserved.", + "license": "https://github.com/microsoft/BotFramework-FunctionalTests/blob/main/LICENSE", + "tags": [ + "echo" + ], + "endpoints": [ + { + "name": "default", + "protocol": "BotFrameworkV3", + "description": "Localhost endpoint for the skill (on port 35405)", + "endpointUrl": "http://localhost:35405/api/messages", + "msAppId": "00000000-0000-0000-0000-000000000000" + } + ] +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/ApiControllerActionInvokerWithErrorHandler.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/ApiControllerActionInvokerWithErrorHandler.cs new file mode 100644 index 0000000000..4ad82c1409 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/ApiControllerActionInvokerWithErrorHandler.cs @@ -0,0 +1,41 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Connector; +using Newtonsoft.Json; +using System.IO; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using System.Web.Http.Controllers; + +namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBotv3 +{ + /// + /// Web Api Controller to intersect HTTP operations when the Action Invoker is triggered to capture exceptions and send it to the bot as an Activity. + /// + internal class ApiControllerActionInvokerWithErrorHandler : ApiControllerActionInvoker + { + public async override Task InvokeActionAsync(HttpActionContext actionContext, CancellationToken cancellationToken) + { + var result = base.InvokeActionAsync(actionContext, cancellationToken); + + if (result.Exception != null && result.Exception.GetBaseException() != null) + { + var stream = new StreamReader(actionContext.Request.Content.ReadAsStreamAsync().Result); + stream.BaseStream.Position = 0; + var rawRequest = stream.ReadToEnd(); + var activity = JsonConvert.DeserializeObject(rawRequest); + + activity.Type = "exception"; + activity.Text = result.Exception.ToString(); + activity.Value = result.Exception; + + await Conversation.SendAsync(activity, () => new Dialogs.RootDialog()); + } + + return await result; + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/App_Start/WebApiConfig.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/App_Start/WebApiConfig.cs new file mode 100644 index 0000000000..97fc72a901 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/App_Start/WebApiConfig.cs @@ -0,0 +1,39 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; +using System.Web.Http; +using System.Web.Http.Controllers; + +namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBotv3 +{ + public static class WebApiConfig + { + public static void Register(HttpConfiguration config) + { + // Json settings + config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; + config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); + config.Formatters.JsonFormatter.SerializerSettings.Formatting = Formatting.Indented; + JsonConvert.DefaultSettings = () => new JsonSerializerSettings() + { + ContractResolver = new CamelCasePropertyNamesContractResolver(), + Formatting = Newtonsoft.Json.Formatting.Indented, + NullValueHandling = NullValueHandling.Ignore, + }; + + // Web API configuration and services + + // Web API routes + config.MapHttpAttributeRoutes(); + + config.Routes.MapHttpRoute( + name: "DefaultApi", + routeTemplate: "api/{controller}/{id}", + defaults: new { id = RouteParameter.Optional } + ); + config.Services.Replace(typeof(IHttpActionInvoker), new ApiControllerActionInvokerWithErrorHandler()); + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Authentication/CustomAllowedCallersClaimsValidator.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Authentication/CustomAllowedCallersClaimsValidator.cs new file mode 100644 index 0000000000..7d3de967b2 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Authentication/CustomAllowedCallersClaimsValidator.cs @@ -0,0 +1,72 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Microsoft.Bot.Connector.SkillAuthentication; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Claims; +using System.Threading.Tasks; + +namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBotv3.Authentication +{ + /// + /// Sample claims validator that loads an allowed list from configuration if present + /// and checks that requests are coming from allowed parent bots. + /// + public class CustomAllowedCallersClaimsValidator : ClaimsValidator + { + private readonly IList _allowedCallers; + + public CustomAllowedCallersClaimsValidator(IList allowedCallers) + { + // AllowedCallers is the setting in web.config file + // that consists of the list of parent bot IDs that are allowed to access the skill. + // To add a new parent bot simply go to the AllowedCallers and add + // the parent bot's Microsoft app ID to the list. + + _allowedCallers = allowedCallers ?? throw new ArgumentNullException(nameof(allowedCallers)); + if (!_allowedCallers.Any()) + { + throw new ArgumentNullException(nameof(allowedCallers), "AllowedCallers must contain at least one element of '*' or valid MicrosoftAppId(s)."); + } + } + + /// + /// This method is called from JwtTokenValidation.ValidateClaimsAsync + /// + /// + public override Task ValidateClaimsAsync(IList claims) + { + if (claims == null) + { + throw new ArgumentNullException(nameof(claims)); + } + + if (!claims.Any()) + { + throw new UnauthorizedAccessException("ValidateClaimsAsync.claims parameter must contain at least one element."); + } + + if (SkillValidation.IsSkillClaim(claims)) + { + // if _allowedCallers has one item of '*', allow all parent bot calls and do not validate the appid from claims + if (_allowedCallers.Count == 1 && _allowedCallers[0] == "*") + { + return Task.CompletedTask; + } + + // Check that the appId claim in the skill request is in the list of skills configured for this bot. + var appId = JwtTokenValidation.GetAppIdFromClaims(claims).ToUpperInvariant(); + if (_allowedCallers.Contains(appId)) + { + return Task.CompletedTask; + } + + throw new UnauthorizedAccessException($"Received a request from a bot with an app ID of \"{appId}\". To enable requests from this caller, add the app ID to your configuration file."); + } + + throw new UnauthorizedAccessException($"ValidateClaimsAsync called without a Skill claim in claims."); + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Authentication/CustomSkillAuthenticationConfiguration.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Authentication/CustomSkillAuthenticationConfiguration.cs new file mode 100644 index 0000000000..2d01093e67 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Authentication/CustomSkillAuthenticationConfiguration.cs @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Microsoft.Bot.Connector.SkillAuthentication; +using System.Configuration; +using System.Linq; + +namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBotv3.Authentication +{ + public class CustomSkillAuthenticationConfiguration : AuthenticationConfiguration + { + private const string AllowedCallersConfigKey = "EchoBotAllowedCallers"; + public CustomSkillAuthenticationConfiguration() + { + // Could pull this list from a DB or anywhere. + var allowedCallers = ConfigurationManager.AppSettings[AllowedCallersConfigKey].Split(',').Select(s => s.Trim().ToUpperInvariant()).ToList(); + ClaimsValidator = new CustomAllowedCallersClaimsValidator(allowedCallers); + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Controllers/MessagesController.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Controllers/MessagesController.cs new file mode 100644 index 0000000000..55cc612cd5 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Controllers/MessagesController.cs @@ -0,0 +1,93 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Diagnostics; +using System.Net; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using System.Web.Http; +using Autofac; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Builder.Dialogs.Internals; +using Microsoft.Bot.Connector; +using Microsoft.Bot.Connector.SkillAuthentication; +using Microsoft.BotFrameworkFunctionalTests.EchoSkillBotv3.Authentication; + +namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBotv3 +{ + // Specify which type provides the authentication configuration to allow for validation for skills. + [SkillBotAuthentication(AuthenticationConfigurationProviderType = typeof(CustomSkillAuthenticationConfiguration))] + public class MessagesController : ApiController + { + /// + /// POST: api/Messages + /// Receive a message from a user and reply to it + /// + public async Task Post([FromBody]Activity activity) + { + if (activity.GetActivityType() == ActivityTypes.Message) + { + await Conversation.SendAsync(activity, () => new Dialogs.RootDialog()); + } + else + { + await HandleSystemMessage(activity); + } + var response = Request.CreateResponse(HttpStatusCode.OK); + return response; + } + + private async Task HandleSystemMessage(Activity message) + { + string messageType = message.GetActivityType(); + + if (messageType == ActivityTypes.EndOfConversation) + { + Trace.TraceInformation($"EndOfConversation: {message}"); + + // This Recipient null check is required for PVA manifest validation. + // PVA will send an EOC activity with null Recipient. + if (message.Recipient != null) + { + // Clear the dialog stack if the root bot has ended the conversation. + using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, message)) + { + var botData = scope.Resolve(); + await botData.LoadAsync(default(CancellationToken)); + + var stack = scope.Resolve(); + stack.Reset(); + + await botData.FlushAsync(default(CancellationToken)); + } + } + } + else if (messageType == ActivityTypes.DeleteUserData) + { + // Implement user deletion here + // If we handle user deletion, return a real message + } + else if (messageType == ActivityTypes.ConversationUpdate) + { + // Handle conversation state changes, like members being added and removed + // Use Activity.MembersAdded and Activity.MembersRemoved and Activity.Action for info + // Not available in all channels + } + else if (messageType == ActivityTypes.ContactRelationUpdate) + { + // Handle add/remove from contact lists + // Activity.From + Activity.Action represent what happened + } + else if (messageType == ActivityTypes.Typing) + { + // Handle knowing that the user is typing + } + else if (messageType == ActivityTypes.Ping) + { + } + + return null; + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Dialogs/RootDialog.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Dialogs/RootDialog.cs new file mode 100644 index 0000000000..1ae1313a31 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Dialogs/RootDialog.cs @@ -0,0 +1,88 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Threading.Tasks; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Connector; + +namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBotv3.Dialogs +{ + [Serializable] + public class RootDialog : IDialog + { + public Task StartAsync(IDialogContext context) + { + context.Wait(MessageReceivedAsync); + + return Task.CompletedTask; + } + + private async Task MessageReceivedAsync(IDialogContext context, IAwaitable result) + { + var activity = await result as Activity; + + var options = new MessageOptions + { + InputHint = InputHints.AcceptingInput + }; + + try + { + if (activity.Type == "exception") + { + await PostExceptionAsync(context, activity, activity.Value as Exception); + } + else if (activity.Text.ToLower().Contains("end") || activity.Text.ToLower().Contains("stop")) + { + // Send an `endOfconversation` activity if the user cancels the skill. + await context.SayAsync($"Ending conversation from the skill...", options: options); + var endOfConversation = activity.CreateReply(); + endOfConversation.Type = ActivityTypes.EndOfConversation; + endOfConversation.Code = EndOfConversationCodes.CompletedSuccessfully; + endOfConversation.InputHint = InputHints.AcceptingInput; + await context.PostAsync(endOfConversation); + } + else + { + await context.SayAsync($"Echo: {activity.Text}", options: options); + await context.SayAsync($"Say \"end\" or \"stop\" and I'll end the conversation and back to the parent.", options: options); + } + } + catch (Exception exception) + { + await PostExceptionAsync(context, activity, exception); + } + + context.Wait(MessageReceivedAsync); + } + + //Send exception message and trace + private static async Task PostExceptionAsync(IDialogContext context, Activity reply, Exception exception) + { + // Send a message to the user + var errorMessageText = "The skill encountered an error or bug."; + var activity = reply.CreateReply(); + activity.Text = errorMessageText + Environment.NewLine + exception; + activity.Speak = errorMessageText; + activity.InputHint = InputHints.IgnoringInput; + activity.Value = exception; + await context.PostAsync(activity); + + errorMessageText = "To continue to run this bot, please fix the bot source code."; + activity = reply.CreateReply(); + activity.Text = errorMessageText; + activity.Speak = errorMessageText; + activity.InputHint = InputHints.ExpectingInput; + await context.PostAsync(activity); + + // Send and EndOfConversation activity to the skill caller with the error to end the conversation + // and let the caller decide what to do. + activity = reply.CreateReply(); + activity.Type = ActivityTypes.EndOfConversation; + activity.Code = "SkillError"; + activity.Text = exception.Message; + await context.PostAsync(activity); + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/EchoSkillBot-v3.csproj b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/EchoSkillBot-v3.csproj new file mode 100644 index 0000000000..4f5be44f73 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/EchoSkillBot-v3.csproj @@ -0,0 +1,232 @@ + + + + + Debug + AnyCPU + + + 2.0 + {41BC9547-FD9E-40E1-B1D9-C3F25BC9A2F3} + {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + Microsoft.BotFrameworkFunctionalTests.EchoSkillBot + Microsoft.BotFrameworkFunctionalTests.EchoSkillBot + + v4.7.2 + 512 + true + 3979 + enabled + disabled + false + + + + + + + + true + full + false + bin\ + DEBUG;TRACE + prompt + 4 + MSB3276 + + + pdbonly + true + bin\ + TRACE + prompt + 4 + + + + $(SolutionDir)packages\Autofac.4.6.0\lib\net45\Autofac.dll + + + $(SolutionDir)packages\Chronic.Signed.0.3.2\lib\net40\Chronic.dll + + + $(SolutionDir)packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll + + + $(SolutionDir)packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll + + + $(SolutionDir)packages\Microsoft.Azure.DocumentDB.1.22.0\lib\net45\Microsoft.Azure.Documents.Client.dll + + + $(SolutionDir)packages\Microsoft.Azure.KeyVault.Core.1.0.0\lib\net40\Microsoft.Azure.KeyVault.Core.dll + + + $(SolutionDir)packages\Microsoft.Bot.Builder.3.30.0\lib\net46\Microsoft.Bot.Builder.dll + True + + + $(SolutionDir)packages\Microsoft.Bot.Builder.3.30.0\lib\net46\Microsoft.Bot.Builder.Autofac.dll + True + + + $(SolutionDir)packages\Microsoft.Bot.Builder.Azure.3.16.3.40383\lib\net46\Microsoft.Bot.Builder.Azure.dll + + + $(SolutionDir)packages\Microsoft.Bot.Builder.History.3.30.0\lib\net46\Microsoft.Bot.Builder.History.dll + True + + + $(SolutionDir)packages\Microsoft.Bot.Connector.3.30.0\lib\net46\Microsoft.Bot.Connector.dll + True + + + + ..\..\..\packages\Microsoft.Data.Edm.5.8.4\lib\net40\Microsoft.Data.Edm.dll + + + ..\..\..\packages\Microsoft.Data.OData.5.8.4\lib\net40\Microsoft.Data.OData.dll + + + ..\..\..\packages\Microsoft.Data.Services.Client.5.8.4\lib\net40\Microsoft.Data.Services.Client.dll + + + $(SolutionDir)packages\Microsoft.IdentityModel.Clients.ActiveDirectory.4.4.0\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.dll + + + $(SolutionDir)packages\Microsoft.IdentityModel.Logging.1.1.4\lib\net451\Microsoft.IdentityModel.Logging.dll + + + $(SolutionDir)packages\Microsoft.IdentityModel.Protocol.Extensions.1.0.4.403061554\lib\net45\Microsoft.IdentityModel.Protocol.Extensions.dll + + + $(SolutionDir)packages\Microsoft.IdentityModel.Protocols.2.1.4\lib\net451\Microsoft.IdentityModel.Protocols.dll + + + $(SolutionDir)packages\Microsoft.IdentityModel.Protocols.OpenIdConnect.2.1.4\lib\net451\Microsoft.IdentityModel.Protocols.OpenIdConnect.dll + + + $(SolutionDir)packages\Microsoft.IdentityModel.Tokens.5.1.4\lib\net451\Microsoft.IdentityModel.Tokens.dll + + + $(SolutionDir)packages\Microsoft.Rest.ClientRuntime.2.3.8\lib\net452\Microsoft.Rest.ClientRuntime.dll + + + $(SolutionDir)packages\Microsoft.WindowsAzure.ConfigurationManager.3.2.3\lib\net40\Microsoft.WindowsAzure.Configuration.dll + + + $(SolutionDir)packages\WindowsAzure.Storage.7.2.1\lib\net40\Microsoft.WindowsAzure.Storage.dll + + + $(SolutionDir)packages\Newtonsoft.Json.10.0.2\lib\net45\Newtonsoft.Json.dll + + + + + + + + + + $(SolutionDir)packages\System.IdentityModel.Tokens.Jwt.5.1.4\lib\net451\System.IdentityModel.Tokens.Jwt.dll + + + + $(SolutionDir)packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll + + + ..\..\..\packages\System.Spatial.5.8.4\lib\net40\System.Spatial.dll + + + + + + + + $(SolutionDir)packages\Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll + + + $(SolutionDir)packages\Microsoft.AspNet.WebApi.WebHost.5.2.3\lib\net45\System.Web.Http.WebHost.dll + + + + + + + + + + Designer + + + + + + + + + + Global.asax + + + + + + + Designer + + + Web.config + + + Web.config + + + + + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + true + + + true + true + + + + + + + + + True + True + 3978 + / + http://localhost:35407 + False + False + + + False + + + + + + + + + \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Global.asax b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Global.asax new file mode 100644 index 0000000000..745e35c7cc --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Global.asax @@ -0,0 +1 @@ +<%@ Application Codebehind="Global.asax.cs" Inherits="Microsoft.BotFrameworkFunctionalTests.EchoSkillBotv3.WebApiApplication" Language="C#" %> diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Global.asax.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Global.asax.cs new file mode 100644 index 0000000000..29c3e1e36f --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Global.asax.cs @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Web.Http; +using Microsoft.Bot.Builder.Azure; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Builder.Dialogs.Internals; +using Autofac; +using Microsoft.Bot.Connector; +using System.Reflection; + +namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBotv3 +{ + public class WebApiApplication : System.Web.HttpApplication + { + protected void Application_Start() + { + GlobalConfiguration.Configure(WebApiConfig.Register); + + Conversation.UpdateContainer( + builder => + { + builder.RegisterModule(new AzureModule(Assembly.GetExecutingAssembly())); + + // Bot Storage: Here we register the state storage for your bot. + // Default store: volatile in-memory store - Only for prototyping! + // We provide adapters for Azure Table, CosmosDb, SQL Azure, or you can implement your own! + // For samples and documentation, see: [https://github.com/Microsoft/BotBuilder-Azure](https://github.com/Microsoft/BotBuilder-Azure) + var store = new InMemoryDataStore(); + + // Other storage options + // var store = new TableBotDataStore("...DataStorageConnectionString..."); // requires Microsoft.BotBuilder.Azure Nuget package + // var store = new DocumentDbBotDataStore("cosmos db uri", "cosmos db key"); // requires Microsoft.BotBuilder.Azure Nuget package + + builder.Register(c => store) + .Keyed>(AzureModule.Key_DataStore) + .AsSelf() + .SingleInstance(); + }); + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Properties/AssemblyInfo.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..450505c46b --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("BotApplication")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("BotApplication")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("287d6db1-a34e-44db-bbf5-e1312cd4737f")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.1")] +[assembly: AssemblyFileVersion("1.0.0.1")] diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Web.Debug.config b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Web.Debug.config new file mode 100644 index 0000000000..fae9cfefa9 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Web.Debug.config @@ -0,0 +1,30 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Web.Release.config b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Web.Release.config new file mode 100644 index 0000000000..da6e960b8d --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Web.Release.config @@ -0,0 +1,31 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Web.config b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Web.config new file mode 100644 index 0000000000..e9f3490f0e --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Web.config @@ -0,0 +1,57 @@ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/default.htm b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/default.htm new file mode 100644 index 0000000000..46acb6def1 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/default.htm @@ -0,0 +1,12 @@ + + + + + + + +

Echo Skill bot

+ This bot demonstrates a Bot Builder V3 bot as a Skill. + + + diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/manifests/echoskillbotv3-manifest-1.0.json b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/manifests/echoskillbotv3-manifest-1.0.json new file mode 100644 index 0000000000..c45e0fe08c --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/manifests/echoskillbotv3-manifest-1.0.json @@ -0,0 +1,30 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/skills/v2.1/skill-manifest.json", + "$id": "EchoSkillBotDotNetV3", + "name": "EchoSkillBotDotNetV3", + "version": "1.0", + "description": "This is a skill for echoing what the user sent to the bot (using BF V3).", + "publisherName": "Microsoft", + "privacyUrl": "https://microsoft.com/privacy", + "copyright": "Copyright (c) Microsoft Corporation. All rights reserved.", + "license": "https://github.com/microsoft/BotFramework-FunctionalTests/blob/main/LICENSE", + "tags": [ + "echo" + ], + "endpoints": [ + { + "name": "default", + "protocol": "BotFrameworkV3", + "description": "Localhost endpoint for the skill (on port 35407)", + "endpointUrl": "http://localhost:35407/api/messages", + "msAppId": "00000000-0000-0000-0000-000000000000" + } + ], + "activities": { + "EchoDotNetV3": { + "description": "Echo user responses", + "type": "message", + "name": "V3Echo" + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/packages.config b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/packages.config new file mode 100644 index 0000000000..dcb3d850a1 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/packages.config @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Authentication/AllowedCallersClaimsValidator.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Authentication/AllowedCallersClaimsValidator.cs new file mode 100644 index 0000000000..0f5a4e3152 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Authentication/AllowedCallersClaimsValidator.cs @@ -0,0 +1,70 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Security.Claims; +using System.Threading.Tasks; +using Microsoft.Bot.Connector.Authentication; +using Microsoft.Extensions.Configuration; + +namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot.Authentication +{ + /// + /// Sample claims validator that loads an allowed list from configuration if present + /// and checks that requests are coming from allowed parent bots. + /// + public class AllowedCallersClaimsValidator : ClaimsValidator + { + private const string ConfigKey = "AllowedCallers"; + private readonly List _allowedCallers; + + /// + /// Initializes a new instance of the class. + /// Loads the appIds for the configured callers. Only allows access to callers it has configured. + /// + /// The list of configured callers. + public AllowedCallersClaimsValidator(IConfiguration config) + { + if (config == null) + { + throw new ArgumentNullException(nameof(config)); + } + + // AllowedCallers is the setting in the appsettings.json file + // that consists of the list of parent bot IDs that are allowed to access the skill. + // To add a new parent bot, simply edit the AllowedCallers and add + // the parent bot's Microsoft app ID to the list. + // In this sample, we allow all callers if AllowedCallers contains an "*". + var section = config.GetSection(ConfigKey); + var appsList = section.Get(); + if (appsList == null) + { + throw new ArgumentNullException($"\"{ConfigKey}\" not found in configuration."); + } + + _allowedCallers = new List(appsList); + } + + /// + /// Checks that the appId claim in the skill request is in the list of callers configured for this bot. + /// + /// The list of claims to validate. + /// A task that represents the work queued to execute. + public override Task ValidateClaimsAsync(IList claims) + { + // If _allowedCallers contains an "*", we allow all callers. + if (SkillValidation.IsSkillClaim(claims) && !_allowedCallers.Contains("*")) + { + // Check that the appId claim in the skill request is in the list of callers configured for this bot. + var appId = JwtTokenValidation.GetAppIdFromClaims(claims); + if (!_allowedCallers.Contains(appId)) + { + throw new UnauthorizedAccessException($"Received a request from a bot with an app ID of \"{appId}\". To enable requests from this caller, add the app ID to your configuration file."); + } + } + + return Task.CompletedTask; + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Bots/EchoBot.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Bots/EchoBot.cs new file mode 100644 index 0000000000..1e740b419c --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Bots/EchoBot.cs @@ -0,0 +1,50 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Schema; + +namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot.Bots +{ + public class EchoBot : ActivityHandler + { + /// + /// Processes a message activity. + /// + /// Context for the current turn of conversation. + /// CancellationToken propagates notifications that operations should be cancelled. + /// A representing the result of the asynchronous operation. + protected override async Task OnMessageActivityAsync(ITurnContext turnContext, CancellationToken cancellationToken) + { + if (turnContext.Activity.Text.Contains("end") || turnContext.Activity.Text.Contains("stop")) + { + // Send End of conversation at the end. + await turnContext.SendActivityAsync(MessageFactory.Text($"Ending conversation from the skill..."), cancellationToken); + var endOfConversation = Activity.CreateEndOfConversationActivity(); + endOfConversation.Code = EndOfConversationCodes.CompletedSuccessfully; + await turnContext.SendActivityAsync(endOfConversation, cancellationToken); + } + else + { + await turnContext.SendActivityAsync(MessageFactory.Text($"Echo: {turnContext.Activity.Text}"), cancellationToken); + await turnContext.SendActivityAsync(MessageFactory.Text("Say \"end\" or \"stop\" and I'll end the conversation and back to the parent."), cancellationToken); + } + } + + /// + /// Processes an end of conversation activity. + /// + /// Context for the current turn of conversation. + /// CancellationToken propagates notifications that operations should be cancelled. + /// A representing the result of the asynchronous operation. + protected override Task OnEndOfConversationActivityAsync(ITurnContext turnContext, CancellationToken cancellationToken) + { + // This will be called if the host bot is ending the conversation. Sending additional messages should be + // avoided as the conversation may have been deleted. + // Perform cleanup of resources if needed. + return Task.CompletedTask; + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Controllers/BotController.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Controllers/BotController.cs new file mode 100644 index 0000000000..3877bc87f3 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Controllers/BotController.cs @@ -0,0 +1,43 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Integration.AspNet.Core; + +namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot.Controllers +{ + /// + /// This ASP Controller is created to handle a request. Dependency Injection will provide the Adapter and IBot implementation at runtime. + /// Multiple different IBot implementations running at different endpoints can be achieved by specifying a more specific type for the bot constructor argument. + /// + [Route("api/messages")] + [ApiController] + public class BotController : ControllerBase + { + private readonly IBotFrameworkHttpAdapter _adapter; + private readonly IBot _bot; + + /// + /// Initializes a new instance of the class. + /// + /// Adapter for the BotController. + /// Bot for the BotController. + public BotController(IBotFrameworkHttpAdapter adapter, IBot bot) + { + _adapter = adapter; + _bot = bot; + } + + /// + /// Processes an HttpPost request. + /// + /// A representing the result of the asynchronous operation. + [HttpPost] + public async Task PostAsync() + { + await _adapter.ProcessAsync(Request, Response, _bot); + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/EchoSkillBot.csproj b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/EchoSkillBot.csproj new file mode 100644 index 0000000000..75badf2f19 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/EchoSkillBot.csproj @@ -0,0 +1,25 @@ + + + + netcoreapp3.1 + latest + Microsoft.BotFrameworkFunctionalTests.EchoSkillBot + Microsoft.BotFrameworkFunctionalTests.EchoSkillBot + + + + DEBUG;TRACE + + + + + + + + + + Always + + + + diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Program.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Program.cs new file mode 100644 index 0000000000..5a43557181 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Program.cs @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; + +namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot +{ + public class Program + { + /// + /// The entry point of the application. + /// + /// The command line args. + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + /// + /// Creates a new instance of the class with pre-configured defaults. + /// + /// The command line args. + /// The initialized . + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }); + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Properties/launchSettings.json b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Properties/launchSettings.json new file mode 100644 index 0000000000..547cc9c69d --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Properties/launchSettings.json @@ -0,0 +1,28 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:35400/", + "sslPort": 0 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": false, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "EchoSkillBotDotNet": { + "commandName": "Project", + "launchBrowser": true, + "applicationUrl": "http://localhost:35400/", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/SkillAdapterWithErrorHandler.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/SkillAdapterWithErrorHandler.cs new file mode 100644 index 0000000000..340e8a68ea --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/SkillAdapterWithErrorHandler.cs @@ -0,0 +1,62 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Bot.Builder.TraceExtensions; +using Microsoft.Bot.Connector.Authentication; +using Microsoft.Bot.Schema; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot +{ + public class SkillAdapterWithErrorHandler : BotFrameworkHttpAdapter + { + /// + /// Initializes a new instance of the class to handle errors. + /// + /// The configuration properties. + /// An implementation of the bots credentials. + /// The configuration setting for the authentication. + /// An instance of a logger. + public SkillAdapterWithErrorHandler(IConfiguration configuration, ICredentialProvider credentialProvider, AuthenticationConfiguration authConfig, ILogger logger) + : base(configuration, credentialProvider, authConfig, logger: logger) + { + OnTurnError = async (turnContext, exception) => + { + try + { + // Log any leaked exception from the application. + logger.LogError(exception, $"[OnTurnError] unhandled error : {exception.Message}"); + + // Send a message to the user + var errorMessageText = "The skill encountered an error or bug."; + var errorMessage = MessageFactory.Text(errorMessageText + Environment.NewLine + exception, errorMessageText, InputHints.IgnoringInput); + errorMessage.Value = exception; + await turnContext.SendActivityAsync(errorMessage); + + errorMessageText = "To continue to run this bot, please fix the bot source code."; + errorMessage = MessageFactory.Text(errorMessageText, errorMessageText, InputHints.ExpectingInput); + await turnContext.SendActivityAsync(errorMessage); + + // Send a trace activity, which will be displayed in the Bot Framework Emulator + // Note: we return the entire exception in the value property to help the developer, this should not be done in prod. + await turnContext.TraceActivityAsync("OnTurnError Trace", exception.ToString(), "https://www.botframework.com/schemas/error", "TurnError"); + + // Send and EndOfConversation activity to the skill caller with the error to end the conversation + // and let the caller decide what to do. + var endOfConversation = Activity.CreateEndOfConversationActivity(); + endOfConversation.Code = "SkillError"; + endOfConversation.Text = exception.Message; + await turnContext.SendActivityAsync(endOfConversation); + } + catch (Exception ex) + { + logger.LogError(ex, $"Exception caught in SkillAdapterWithErrorHandler : {ex}"); + } + }; + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Startup.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Startup.cs new file mode 100644 index 0000000000..9af686442b --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Startup.cs @@ -0,0 +1,75 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.BotFramework; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Bot.Connector.Authentication; +using Microsoft.BotFrameworkFunctionalTests.EchoSkillBot.Bots; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot +{ + public class Startup + { + public Startup(IConfiguration config) + { + Configuration = config; + } + + public IConfiguration Configuration { get; } + + /// + /// This method gets called by the runtime. Use this method to add services to the container. + /// + /// Method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + services.AddControllers().AddNewtonsoftJson(); + + // Configure credentials + services.AddSingleton(); + + // Register AuthConfiguration to enable custom claim validation. + services.AddSingleton(sp => new AuthenticationConfiguration { ClaimsValidator = new Authentication.AllowedCallersClaimsValidator(sp.GetService()) }); + + // Create the Bot Framework Adapter with error handling enabled. + services.AddSingleton(); + + // Create the bot as a transient. In this case the ASP Controller is expecting an IBot. + services.AddTransient(); + + if (!string.IsNullOrEmpty(Configuration["ChannelService"])) + { + // Register a ConfigurationChannelProvider -- this is only for Azure Gov. + services.AddSingleton(); + } + } + + /// + /// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + /// + /// The application request pipeline to be configured. + /// The web hosting environment. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseDefaultFiles() + .UseStaticFiles() + .UseRouting() + .UseAuthorization() + .UseEndpoints(endpoints => + { + endpoints.MapControllers(); + }); + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/appsettings.json b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/appsettings.json new file mode 100644 index 0000000000..c61cdb4d79 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/appsettings.json @@ -0,0 +1,11 @@ +{ + "MicrosoftAppId": "", + "MicrosoftAppPassword": "", + "ChannelService": "", + // This is a comma separate list with the App IDs that will have access to the skill. + // This setting is used in AllowedCallersClaimsValidator. + // Examples: + // [ "*" ] allows all callers. + // [ "AppId1", "AppId2" ] only allows access to parent bots with "AppId1" and "AppId2". + "AllowedCallers": [ "*" ] +} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/wwwroot/default.htm b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/wwwroot/default.htm new file mode 100644 index 0000000000..416365e6bc --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/wwwroot/default.htm @@ -0,0 +1,420 @@ + + + + + + + EchoSkillBotDotNet + + + + + +
+
+
+
EchoSkillBotDotNet Bot
+
+
+
+
+
Your bot is ready!
+
You can test your bot in the Bot Framework Emulator
+ by connecting to http://localhost:3978/api/messages.
+ +
Visit Azure + Bot Service to register your bot and add it to
+ various channels. The bot's endpoint URL typically looks + like this:
+
https://your_bots_hostname/api/messages
+
+
+
+
+ +
+ + + \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/wwwroot/manifests/echoskillbot-manifest-1.0.json b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/wwwroot/manifests/echoskillbot-manifest-1.0.json new file mode 100644 index 0000000000..974de692e4 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/wwwroot/manifests/echoskillbot-manifest-1.0.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/skills/v2.1/skill-manifest.json", + "$id": "EchoSkillBotDotNet", + "name": "EchoSkillBotDotNet", + "version": "1.0", + "description": "This is a skill for echoing what the user sent to the bot (using .netcore 3.1).", + "publisherName": "Microsoft", + "privacyUrl": "https://microsoft.com/privacy", + "copyright": "Copyright (c) Microsoft Corporation. All rights reserved.", + "license": "https://github.com/microsoft/BotFramework-FunctionalTests/blob/main/LICENSE", + "tags": [ + "echo" + ], + "endpoints": [ + { + "name": "default", + "protocol": "BotFrameworkV3", + "description": "Localhost endpoint for the skill (on port 35400)", + "endpointUrl": "http://localhost:35400/api/messages", + "msAppId": "00000000-0000-0000-0000-000000000000" + } + ] +} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Authentication/AllowedCallersClaimsValidator.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Authentication/AllowedCallersClaimsValidator.cs new file mode 100644 index 0000000000..cc811d5d82 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Authentication/AllowedCallersClaimsValidator.cs @@ -0,0 +1,60 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Security.Claims; +using System.Threading.Tasks; +using Microsoft.Bot.Connector.Authentication; +using Microsoft.Extensions.Configuration; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Authentication +{ + /// + /// Sample claims validator that loads an allowed list from configuration if present + /// and checks that requests are coming from allowed parent bots. + /// + public class AllowedCallersClaimsValidator : ClaimsValidator + { + private const string ConfigKey = "AllowedCallers"; + private readonly List _allowedCallers; + + public AllowedCallersClaimsValidator(IConfiguration config) + { + if (config == null) + { + throw new ArgumentNullException(nameof(config)); + } + + // AllowedCallers is the setting in the appsettings.json file + // that consists of the list of parent bot IDs that are allowed to access the skill. + // To add a new parent bot, simply edit the AllowedCallers and add + // the parent bot's Microsoft app ID to the list. + // In this sample, we allow all callers if AllowedCallers contains an "*". + var section = config.GetSection(ConfigKey); + var appsList = section.Get(); + if (appsList == null) + { + throw new ArgumentNullException($"\"{ConfigKey}\" not found in configuration."); + } + + _allowedCallers = new List(appsList); + } + + public override Task ValidateClaimsAsync(IList claims) + { + // If _allowedCallers contains an "*", we allow all callers. + if (SkillValidation.IsSkillClaim(claims) && !_allowedCallers.Contains("*")) + { + // Check that the appId claim in the skill request is in the list of callers configured for this bot. + var appId = JwtTokenValidation.GetAppIdFromClaims(claims); + if (!_allowedCallers.Contains(appId)) + { + throw new UnauthorizedAccessException($"Received a request from a bot with an app ID of \"{appId}\". To enable requests from this caller, add the app ID to your configuration file."); + } + } + + return Task.CompletedTask; + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Bots/SkillBot.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Bots/SkillBot.cs new file mode 100644 index 0000000000..ffad563104 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Bots/SkillBot.cs @@ -0,0 +1,61 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Schema; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Bots +{ + public class SkillBot : ActivityHandler + where T : Dialog + { + private readonly ConversationState _conversationState; + private readonly Dialog _mainDialog; + private readonly Uri _serverUrl; + + public SkillBot(ConversationState conversationState, T mainDialog, IHttpContextAccessor httpContextAccessor) + { + _conversationState = conversationState; + _mainDialog = mainDialog; + _serverUrl = new Uri($"{httpContextAccessor.HttpContext.Request.Scheme}://{httpContextAccessor.HttpContext.Request.Host.Value}"); + } + + public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default) + { + if (turnContext.Activity.Type == ActivityTypes.ConversationUpdate) + { + // Let the base class handle the activity (this will trigger OnMembersAddedAsync). + await base.OnTurnAsync(turnContext, cancellationToken); + } + else + { + // Run the Dialog with the Activity. + await _mainDialog.RunAsync(turnContext, _conversationState.CreateProperty("DialogState"), cancellationToken); + } + + // Save any state changes that might have occurred during the turn. + await _conversationState.SaveChangesAsync(turnContext, false, cancellationToken); + } + + protected override async Task OnMembersAddedAsync(IList membersAdded, ITurnContext turnContext, CancellationToken cancellationToken) + { + foreach (var member in membersAdded) + { + if (member.Id != turnContext.Activity.Recipient.Id) + { + var activity = MessageFactory.Text("Welcome to the waterfall skill bot. \n\nThis is a skill, you will need to call it from another bot to use it."); + activity.Speak = "Welcome to the waterfall skill bot. This is a skill, you will need to call it from another bot to use it."; + await turnContext.SendActivityAsync(activity, cancellationToken); + + await turnContext.SendActivityAsync($"You can check the skill manifest to see what it supports here: {_serverUrl}manifests/waterfallskillbot-manifest-1.0.json", cancellationToken: cancellationToken); + } + } + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/BotController.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/BotController.cs new file mode 100644 index 0000000000..eff768c82a --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/BotController.cs @@ -0,0 +1,48 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Extensions.Logging; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Controllers +{ + // This ASP Controller is created to handle a request. Dependency Injection will provide the Adapter and IBot + // implementation at runtime. Multiple different IBot implementations running at different endpoints can be + // achieved by specifying a more specific type for the bot constructor argument. + [ApiController] + public class BotController : ControllerBase + { + private readonly IBotFrameworkHttpAdapter _adapter; + private readonly IBot _bot; + private readonly ILogger _logger; + + public BotController(BotFrameworkHttpAdapter adapter, IBot bot, ILogger logger) + { + _adapter = adapter; + _bot = bot; + _logger = logger; + } + + [Route("api/messages")] + [HttpGet] + [HttpPost] + public async Task PostAsync() + { + try + { + // Delegate the processing of the HTTP POST to the adapter. + // The adapter will invoke the bot. + await _adapter.ProcessAsync(Request, Response, _bot); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error processing request"); + throw; + } + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/CardsController.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/CardsController.cs new file mode 100644 index 0000000000..817c197758 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/CardsController.cs @@ -0,0 +1,28 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.IO; +using Microsoft.AspNetCore.Mvc; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Controllers +{ + // This ASP Controller is created to handle a request. Dependency Injection will provide the Adapter and IBot + // implementation at runtime. Multiple different IBot implementations running at different endpoints can be + // achieved by specifying a more specific type for the bot constructor argument. + [ApiController] + public class CardsController : ControllerBase + { + private static readonly string Music = "music.mp3"; + + [Route("api/music")] + [HttpGet] + public ActionResult ReturnFile() + { + var filename = Music; + var filePath = Path.Combine(Directory.GetCurrentDirectory(), "Dialogs/Cards/Files", filename); + var fileData = System.IO.File.ReadAllBytes(filePath); + + return File(fileData, "audio/mp3"); + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/ProactiveController.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/ProactiveController.cs new file mode 100644 index 0000000000..ae96c51bbb --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/ProactiveController.cs @@ -0,0 +1,86 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Concurrent; +using System.Net; +using System.Security.Claims; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs; +using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Proactive; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Controllers +{ + [Route("api/notify")] + [ApiController] + public class ProactiveController : ControllerBase + { + private readonly IBotFrameworkHttpAdapter _adapter; + private readonly ConcurrentDictionary _continuationParametersStore; + private readonly ConversationState _conversationState; + private readonly ActivityRouterDialog _mainDialog; + + public ProactiveController(ConversationState conversationState, ActivityRouterDialog mainDialog, BotFrameworkHttpAdapter adapter, ConcurrentDictionary continuationParametersStore) + { + _conversationState = conversationState; + _adapter = adapter; + _continuationParametersStore = continuationParametersStore; + _mainDialog = mainDialog; + } + + // Note: in production scenarios, this controller should be secured. + public async Task Get(string user) + { + _continuationParametersStore.TryGetValue(user, out var continuationParameters); + + if (continuationParameters == null) + { + // Let the caller know a proactive messages have been sent + return new ContentResult + { + Content = $"

No messages sent


There are no conversations registered to receive proactive messages for {user}.", + ContentType = "text/html", + StatusCode = (int)HttpStatusCode.OK, + }; + } + + Exception exception = null; + try + { + async Task ContinuationBotCallback(ITurnContext context, CancellationToken cancellationToken) + { + await context.SendActivityAsync($"Got proactive message for user: {user}", cancellationToken: cancellationToken); + + // If we didn't have dialogs we could remove the code below, but we want to continue the dialog to clear the + // dialog stack. + // Run the main dialog to continue WaitForProactiveDialog and send an EndOfConversation when that one is done. + // ContinueDialogAsync in WaitForProactiveDialog will get a ContinueConversation event when this is called. + await _mainDialog.RunAsync(context, _conversationState.CreateProperty("DialogState"), cancellationToken); + + // Save any state changes so the dialog stack is persisted. + await _conversationState.SaveChangesAsync(context, false, cancellationToken); + } + + // Continue the conversation with the proactive message + await ((BotFrameworkAdapter)_adapter).ContinueConversationAsync((ClaimsIdentity)continuationParameters.ClaimsIdentity, continuationParameters.ConversationReference, continuationParameters.OAuthScope, ContinuationBotCallback, default); + } + catch (Exception ex) + { + exception = ex; + } + + // Let the caller know a proactive messages have been sent + return new ContentResult + { + Content = $"

Proactive messages have been sent


Timestamp: {DateTime.Now}
Exception: {exception}", + ContentType = "text/html", + StatusCode = (int)HttpStatusCode.OK, + }; + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/SkillController.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/SkillController.cs new file mode 100644 index 0000000000..ea90b07c02 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/SkillController.cs @@ -0,0 +1,53 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Bot.Builder.Skills; +using Microsoft.Bot.Schema; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Controllers +{ + /// + /// A controller that handles skill replies to the bot. + /// This example uses the that is registered as a in startup.cs. + /// + [ApiController] + [Route("api/skills")] + public class SkillController : ChannelServiceController + { + public SkillController(ChannelServiceHandler handler) + : base(handler) + { + } + + public override Task ReplyToActivityAsync(string conversationId, string activityId, Activity activity) + { + try + { + return base.ReplyToActivityAsync(conversationId, activityId, activity); + } + catch (Exception ex) + { + Console.WriteLine(ex); + throw; + } + } + + public override Task SendToConversationAsync(string conversationId, Activity activity) + { + try + { + return base.SendToConversationAsync(conversationId, activity); + } + catch (Exception ex) + { + Console.WriteLine(ex); + throw; + } + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/ActivityRouterDialog.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/ActivityRouterDialog.cs new file mode 100644 index 0000000000..11acef467c --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/ActivityRouterDialog.cs @@ -0,0 +1,148 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Concurrent; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Builder.Integration.AspNet.Core.Skills; +using Microsoft.Bot.Builder.Skills; +using Microsoft.Bot.Builder.TraceExtensions; +using Microsoft.Bot.Connector.Authentication; +using Microsoft.Bot.Schema; +using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Auth; +using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Cards; +using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Delete; +using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.FileUpload; +using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.MessageWithAttachment; +using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Proactive; +using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Sso; +using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Update; +using Microsoft.Extensions.Configuration; +using Newtonsoft.Json; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs +{ + /// + /// A root dialog that can route activities sent to the skill to different sub-dialogs. + /// + public class ActivityRouterDialog : ComponentDialog + { + private static readonly string _echoSkill = "EchoSkill"; + + public ActivityRouterDialog(IConfiguration configuration, IHttpContextAccessor httpContextAccessor, ConversationState conversationState, SkillConversationIdFactoryBase conversationIdFactory, SkillHttpClient skillClient, ConcurrentDictionary continuationParametersStore) + : base(nameof(ActivityRouterDialog)) + { + AddDialog(new CardDialog(httpContextAccessor)); + AddDialog(new MessageWithAttachmentDialog(new Uri($"{httpContextAccessor.HttpContext.Request.Scheme}://{httpContextAccessor.HttpContext.Request.Host.Value}"))); + AddDialog(new WaitForProactiveDialog(httpContextAccessor, continuationParametersStore)); + AddDialog(new AuthDialog(configuration)); + AddDialog(new SsoSkillDialog(configuration)); + AddDialog(new FileUploadDialog()); + AddDialog(new DeleteDialog()); + AddDialog(new UpdateDialog()); + + AddDialog(CreateEchoSkillDialog(conversationState, conversationIdFactory, skillClient, configuration)); + + AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[] { ProcessActivityAsync })); + + // The initial child Dialog to run. + InitialDialogId = nameof(WaterfallDialog); + } + + private static SkillDialog CreateEchoSkillDialog(ConversationState conversationState, SkillConversationIdFactoryBase conversationIdFactory, SkillHttpClient skillClient, IConfiguration configuration) + { + var botId = configuration.GetSection(MicrosoftAppCredentials.MicrosoftAppIdKey)?.Value; + + var skillHostEndpoint = configuration.GetSection("SkillHostEndpoint")?.Value; + if (string.IsNullOrWhiteSpace(skillHostEndpoint)) + { + throw new ArgumentException("SkillHostEndpoint is not in configuration"); + } + + var skillInfo = configuration.GetSection("EchoSkillInfo").Get() ?? throw new ArgumentException("EchoSkillInfo is not set in configuration"); + + var skillDialogOptions = new SkillDialogOptions + { + BotId = botId, + ConversationIdFactory = conversationIdFactory, + SkillClient = skillClient, + SkillHostEndpoint = new Uri(skillHostEndpoint), + ConversationState = conversationState, + Skill = skillInfo + }; + var echoSkillDialog = new SkillDialog(skillDialogOptions); + + echoSkillDialog.Id = _echoSkill; + return echoSkillDialog; + } + + private async Task ProcessActivityAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + // A skill can send trace activities, if needed. + await stepContext.Context.TraceActivityAsync($"{GetType().Name}.ProcessActivityAsync()", label: $"Got ActivityType: {stepContext.Context.Activity.Type}", cancellationToken: cancellationToken); + + switch (stepContext.Context.Activity.Type) + { + case ActivityTypes.Event: + return await OnEventActivityAsync(stepContext, cancellationToken); + + default: + // We didn't get an activity type we can handle. + await stepContext.Context.SendActivityAsync(MessageFactory.Text($"Unrecognized ActivityType: \"{stepContext.Context.Activity.Type}\".", inputHint: InputHints.IgnoringInput), cancellationToken); + return new DialogTurnResult(DialogTurnStatus.Complete); + } + } + + // This method performs different tasks based on the event name. + private async Task OnEventActivityAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + var activity = stepContext.Context.Activity; + await stepContext.Context.TraceActivityAsync($"{GetType().Name}.OnEventActivityAsync()", label: $"Name: {activity.Name}. Value: {GetObjectAsJsonString(activity.Value)}", cancellationToken: cancellationToken); + + // Resolve what to execute based on the event name. + switch (activity.Name) + { + case "Cards": + return await stepContext.BeginDialogAsync(FindDialog(nameof(CardDialog)).Id, cancellationToken: cancellationToken); + + case "Proactive": + return await stepContext.BeginDialogAsync(FindDialog(nameof(WaitForProactiveDialog)).Id, cancellationToken: cancellationToken); + + case "MessageWithAttachment": + return await stepContext.BeginDialogAsync(FindDialog(nameof(MessageWithAttachmentDialog)).Id, cancellationToken: cancellationToken); + + case "Auth": + return await stepContext.BeginDialogAsync(FindDialog(nameof(AuthDialog)).Id, cancellationToken: cancellationToken); + + case "Sso": + return await stepContext.BeginDialogAsync(FindDialog(nameof(SsoSkillDialog)).Id, cancellationToken: cancellationToken); + + case "FileUpload": + return await stepContext.BeginDialogAsync(FindDialog(nameof(FileUploadDialog)).Id, cancellationToken: cancellationToken); + + case "Echo": + // Start the EchoSkillBot + var messageActivity = MessageFactory.Text("I'm the echo skill bot"); + messageActivity.DeliveryMode = stepContext.Context.Activity.DeliveryMode; + return await stepContext.BeginDialogAsync(FindDialog(_echoSkill).Id, new BeginSkillDialogOptions { Activity = messageActivity }, cancellationToken); + + case "Delete": + return await stepContext.BeginDialogAsync(FindDialog(nameof(DeleteDialog)).Id, cancellationToken: cancellationToken); + + case "Update": + return await stepContext.BeginDialogAsync(FindDialog(nameof(UpdateDialog)).Id, cancellationToken: cancellationToken); + + default: + // We didn't get an event name we can handle. + await stepContext.Context.SendActivityAsync(MessageFactory.Text($"Unrecognized EventName: \"{activity.Name}\".", inputHint: InputHints.IgnoringInput), cancellationToken); + return new DialogTurnResult(DialogTurnStatus.Complete); + } + } + + private string GetObjectAsJsonString(object value) => value == null ? string.Empty : JsonConvert.SerializeObject(value); + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Auth/AuthDialog.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Auth/AuthDialog.cs new file mode 100644 index 0000000000..39d26e238d --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Auth/AuthDialog.cs @@ -0,0 +1,83 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Schema; +using Microsoft.Extensions.Configuration; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Auth +{ + public class AuthDialog : ComponentDialog + { + private readonly string _connectionName; + + public AuthDialog(IConfiguration configuration) + : base(nameof(AuthDialog)) + { + _connectionName = configuration["ConnectionName"]; + + // This confirmation dialog should be removed once https://github.com/microsoft/BotFramework-FunctionalTests/issues/299 is resolved (and this class should look like the class in the issue) + AddDialog(new ConfirmPrompt(nameof(ConfirmPrompt))); + AddDialog(new OAuthPrompt( + nameof(OAuthPrompt), + new OAuthPromptSettings + { + ConnectionName = _connectionName, + Text = $"Please Sign In to connection: '{_connectionName}'", + Title = "Sign In", + Timeout = 300000 // User has 5 minutes to login (1000 * 60 * 5) + })); + + AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[] { PromptStepAsync, LoginStepAsync, DisplayTokenAsync })); + + // The initial child Dialog to run. + InitialDialogId = nameof(WaterfallDialog); + } + + private async Task PromptStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + return await stepContext.BeginDialogAsync(nameof(OAuthPrompt), null, cancellationToken); + } + + private async Task LoginStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + // Get the token from the previous step. + var tokenResponse = (TokenResponse)stepContext.Result; + if (tokenResponse != null) + { + stepContext.Values["Token"] = tokenResponse.Token; + + // Show the token + var loggedInMessage = "You are now logged in."; + await stepContext.Context.SendActivityAsync(MessageFactory.Text(loggedInMessage, loggedInMessage, InputHints.IgnoringInput), cancellationToken); + + return await stepContext.PromptAsync(nameof(ConfirmPrompt), new PromptOptions { Prompt = MessageFactory.Text("Would you like to view your token?") }, cancellationToken); + } + + var tryAgainMessage = "Login was not successful please try again."; + await stepContext.Context.SendActivityAsync(MessageFactory.Text(tryAgainMessage, tryAgainMessage, InputHints.IgnoringInput), cancellationToken); + return await stepContext.ReplaceDialogAsync(InitialDialogId, cancellationToken: cancellationToken); + } + + private async Task DisplayTokenAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + var result = (bool)stepContext.Result; + if (result) + { + var showTokenMessage = "Here is your token:"; + await stepContext.Context.SendActivityAsync(MessageFactory.Text($"{showTokenMessage} {stepContext.Values["Token"]}", showTokenMessage, InputHints.IgnoringInput), cancellationToken); + } + + // Sign out + var botAdapter = (BotFrameworkAdapter)stepContext.Context.Adapter; + await botAdapter.SignOutUserAsync(stepContext.Context, _connectionName, null, cancellationToken); + var signOutMessage = "I have signed you out."; + await stepContext.Context.SendActivityAsync(MessageFactory.Text(signOutMessage, signOutMessage, inputHint: InputHints.IgnoringInput), cancellationToken); + + return await stepContext.EndDialogAsync(cancellationToken: cancellationToken); + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/AdaptiveCardExtensions.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/AdaptiveCardExtensions.cs new file mode 100644 index 0000000000..a0cb2216a6 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/AdaptiveCardExtensions.cs @@ -0,0 +1,75 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using AdaptiveCards; +using Microsoft.Bot.Schema; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Cards +{ + public static class AdaptiveCardExtensions + { + /// + /// Creates a new attachment from AdaptiveCard. + /// + /// The instance of AdaptiveCard. + /// The generated attachment. + public static Attachment ToAttachment(this AdaptiveCard card) + { + return new Attachment + { + Content = card, + ContentType = AdaptiveCard.ContentType, + }; + } + + /// + /// Wrap BotBuilder action into AdaptiveCard submit action. + /// + /// The instance of adaptive card submit action. + /// Target action to be adapted. + public static void RepresentAsBotBuilderAction(this AdaptiveSubmitAction action, CardAction targetAction) + { + if (action == null) + { + throw new ArgumentNullException(nameof(action)); + } + + if (targetAction == null) + { + throw new ArgumentNullException(nameof(targetAction)); + } + + var wrappedAction = new CardAction + { + Type = targetAction.Type, + Value = targetAction.Value, + Text = targetAction.Text, + DisplayText = targetAction.DisplayText, + }; + + var serializerSettings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; + + var jsonStr = action.DataJson ?? "{}"; + JToken dataJson = JObject.Parse(jsonStr); + dataJson["msteams"] = JObject.FromObject(wrappedAction, JsonSerializer.Create(serializerSettings)); + + action.Title = targetAction.Title; + action.DataJson = dataJson.ToString(); + } + + /// + /// Wrap BotBuilder action into AdaptiveCard submit action. + /// + /// Target bot builder action to be adapted. + /// The wrapped adaptive card submit action. + public static AdaptiveSubmitAction ToAdaptiveCardAction(this CardAction action) + { + var adaptiveCardAction = new AdaptiveSubmitAction(); + adaptiveCardAction.RepresentAsBotBuilderAction(action); + return adaptiveCardAction; + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/CardDialog.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/CardDialog.cs new file mode 100644 index 0000000000..8ded48ff2c --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/CardDialog.cs @@ -0,0 +1,340 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using AdaptiveCards; +using Microsoft.AspNetCore.Http; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Builder.Dialogs.Choices; +using Microsoft.Bot.Schema; +using Microsoft.Bot.Schema.Teams; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Cards +{ + public class CardDialog : ComponentDialog + { + // for file upload + private static readonly string TeamsLogoFileName = "teams-logo.png"; + + // for video card + private static readonly string CorgiOnCarouselVideo = "https://www.youtube.com/watch?v=LvqzubPZjHE"; + + // for animation card + private static readonly string MindBlownGif = "https://media3.giphy.com/media/xT0xeJpnrWC4XWblEk/giphy.gif?cid=ecf05e47mye7k75sup6tcmadoom8p1q8u03a7g2p3f76upp9&rid=giphy.gif"; + + // list of cards that exist + private static readonly List _cardOptions = Enum.GetValues(typeof(CardOptions)).Cast().ToList(); + + private readonly Uri _serverUrl; + + public CardDialog(IHttpContextAccessor httpContextAccessor) + : base(nameof(CardDialog)) + { + _serverUrl = new Uri($"{httpContextAccessor.HttpContext.Request.Scheme}://{httpContextAccessor.HttpContext.Request.Host.Value}"); + + AddDialog(new ChoicePrompt("CardPrompt", CardPromptValidatorAsync)); + AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[] { SelectCardAsync, DisplayCardAsync })); + + InitialDialogId = nameof(WaterfallDialog); + } + + private static CardOptions ParseEnum(string card) + { + return (CardOptions)Enum.Parse(typeof(CardOptions), card, true); + } + + private static HeroCard MakeUpdatedHeroCard(WaterfallStepContext stepContext) + { + var heroCard = new HeroCard + { + Title = "Newly updated card.", + Buttons = new List() + }; + + var data = stepContext.Context.Activity.Value as JObject; + data = JObject.FromObject(data); + data["count"] = data["count"].Value() + 1; + heroCard.Text = $"Update count - {data["count"].Value()}"; + heroCard.Title = "Newly updated card"; + + heroCard.Buttons.Add(new CardAction + { + Type = ActionTypes.MessageBack, + Title = "Update Card", + Text = "UpdateCardAction", + Value = data + }); + + return heroCard; + } + + private async Task SelectCardAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + // Create the PromptOptions from the skill configuration which contain the list of configured skills. + var messageText = "What card do you want?"; + var repromptMessageText = "This message will be created in the validation code"; + var options = new PromptOptions + { + Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), + RetryPrompt = MessageFactory.Text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput), + Choices = _cardOptions.Select(card => new Choice(card.ToString())).ToList(), + Style = ListStyle.List + }; + + // Ask the user to enter their name. + return await stepContext.PromptAsync("CardPrompt", options, cancellationToken); + } + + private async Task DisplayCardAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + if (stepContext.Context.Activity.Value != null) + { + await HandleSpecialActivity(stepContext, cancellationToken); + } + else + { + // Checks to see if the activity is an adaptive card update or a bot action respose + var card = ((FoundChoice)stepContext.Result).Value.ToLowerInvariant(); + var cardType = ParseEnum(card); + + if (ChannelSupportedCards.IsCardSupported(stepContext.Context.Activity.ChannelId, cardType)) + { + switch (cardType) + { + case CardOptions.AdaptiveCardBotAction: + await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(MakeAdaptiveCard("botaction").ToAttachment()), cancellationToken); + break; + case CardOptions.AdaptiveCardTeamsTaskModule: + await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(MakeAdaptiveCard("taskmodule").ToAttachment()), cancellationToken); + break; + case CardOptions.AdaptiveCardSubmitAction: + await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(MakeAdaptiveCard("submitaction").ToAttachment()), cancellationToken); + break; + case CardOptions.Hero: + await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(CardSampleHelper.CreateHeroCard().ToAttachment()), cancellationToken).ConfigureAwait(false); + break; + case CardOptions.Thumbnail: + await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(CardSampleHelper.CreateThumbnailCard().ToAttachment()), cancellationToken).ConfigureAwait(false); + break; + case CardOptions.Receipt: + await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(CardSampleHelper.CreateReceiptCard().ToAttachment()), cancellationToken).ConfigureAwait(false); + break; + case CardOptions.Signin: + await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(CardSampleHelper.CreateSigninCard().ToAttachment()), cancellationToken).ConfigureAwait(false); + break; + case CardOptions.Carousel: + // NOTE: if cards are NOT the same height in a carousel, Teams will instead display as AttachmentLayoutTypes.List + await stepContext.Context.SendActivityAsync( + MessageFactory.Carousel(new[] + { + CardSampleHelper.CreateHeroCard().ToAttachment(), + CardSampleHelper.CreateHeroCard().ToAttachment(), + CardSampleHelper.CreateHeroCard().ToAttachment() + }), + cancellationToken).ConfigureAwait(false); + break; + case CardOptions.List: + // NOTE: MessageFactory.Attachment with multiple attachments will default to AttachmentLayoutTypes.List + await stepContext.Context.SendActivityAsync( + MessageFactory.Attachment(new[] + { + CardSampleHelper.CreateHeroCard().ToAttachment(), + CardSampleHelper.CreateHeroCard().ToAttachment(), + CardSampleHelper.CreateHeroCard().ToAttachment() + }), + cancellationToken).ConfigureAwait(false); + break; + case CardOptions.O365: + + await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(MakeO365CardAttachmentAsync()), cancellationToken).ConfigureAwait(false); + break; + case CardOptions.TeamsFileConsent: + await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(MakeTeamsFileConsentCard()), cancellationToken); + break; + case CardOptions.Animation: + await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(MakeAnimationCard().ToAttachment()), cancellationToken); + break; + case CardOptions.Audio: + await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(MakeAudioCard().ToAttachment()), cancellationToken); + break; + case CardOptions.Video: + await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(MakeVideoCard().ToAttachment()), cancellationToken); + break; + case CardOptions.AdaptiveUpdate: + await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(MakeUpdateAdaptiveCard().ToAttachment()), cancellationToken); + break; + case CardOptions.End: + return new DialogTurnResult(DialogTurnStatus.Complete); + } + } + else + { + await stepContext.Context.SendActivityAsync(MessageFactory.Text($"{cardType} cards are not supported in the {stepContext.Context.Activity.ChannelId} channel."), cancellationToken); + } + } + + return await stepContext.ReplaceDialogAsync(InitialDialogId, "What card would you want?", cancellationToken); + } + + private async Task HandleSpecialActivity(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + if (stepContext.Context.Activity.Text == null) + { + await stepContext.Context.SendActivityAsync(MessageFactory.Text($"I received an activity with this data in the value field {stepContext.Context.Activity.Value}"), cancellationToken); + } + else + { + if (stepContext.Context.Activity.Text.ToLowerInvariant().Contains("update")) + { + if (stepContext.Context.Activity.ReplyToId == null) + { + await stepContext.Context.SendActivityAsync(MessageFactory.Text($"Update activity is not supported in the {stepContext.Context.Activity.ChannelId} channel."), cancellationToken); + } + else + { + var heroCard = MakeUpdatedHeroCard(stepContext); + + var activity = MessageFactory.Attachment(heroCard.ToAttachment()); + activity.Id = stepContext.Context.Activity.ReplyToId; + await stepContext.Context.UpdateActivityAsync(activity, cancellationToken); + } + } + else + { + await stepContext.Context.SendActivityAsync(MessageFactory.Text($"I received an activity with this data in the text field {stepContext.Context.Activity.Text} and this data in the value field {stepContext.Context.Activity.Value}"), cancellationToken); + } + } + } + + private async Task CardPromptValidatorAsync(PromptValidatorContext promptContext, CancellationToken cancellationToken) + { + if (!promptContext.Recognized.Succeeded) + { + // This checks to see if this response is the user clicking the update button on the card + if (promptContext.Context.Activity.Value != null) + { + return await Task.FromResult(true); + } + + if (promptContext.Context.Activity.Attachments != null) + { + return await Task.FromResult(true); + } + + // Render the activity so we can assert in tests. + // We may need to simplify the json if it gets too complicated to test. + promptContext.Options.RetryPrompt.Text = $"Got {JsonConvert.SerializeObject(promptContext.Context.Activity, Formatting.Indented)}\n\n{promptContext.Options.Prompt.Text}"; + return await Task.FromResult(false); + } + + return await Task.FromResult(true); + } + + private HeroCard MakeUpdateAdaptiveCard() + { + var heroCard = new HeroCard + { + Title = "Update card", + Text = "Update Card Action", + Buttons = new List() + }; + + var action = new CardAction + { + Type = ActionTypes.MessageBack, + Title = "Update card title", + Text = "Update card text", + Value = new JObject { { "count", 0 } } + }; + + heroCard.Buttons.Add(action); + + return heroCard; + } + + private AdaptiveCard MakeAdaptiveCard(string cardType) + { + var adaptiveCard = cardType switch + { + "botaction" => CardSampleHelper.CreateAdaptiveCardBotAction(), + "taskmodule" => CardSampleHelper.CreateAdaptiveCardTaskModule(), + "submitaction" => CardSampleHelper.CreateAdaptiveCardSubmit(), + _ => throw new ArgumentException(nameof(cardType)), + }; + + return adaptiveCard; + } + + private Attachment MakeO365CardAttachmentAsync() + { + var card = CardSampleHelper.CreateSampleO365ConnectorCard(); + var cardAttachment = new Attachment + { + Content = card, + ContentType = O365ConnectorCard.ContentType, + }; + + return cardAttachment; + } + + private Attachment MakeTeamsFileConsentCard() + { + var filename = TeamsLogoFileName; + var filePath = Path.Combine("Dialogs/Cards/Files", filename); + var fileSize = new FileInfo(filePath).Length; + + return MakeTeamsFileConsentCardAttachment(filename, fileSize); + } + + private Attachment MakeTeamsFileConsentCardAttachment(string filename, long fileSize) + { + var consentContext = new Dictionary + { + { "filename", filename }, + }; + + var fileCard = new FileConsentCard + { + Description = "This is the file I want to send you", + SizeInBytes = fileSize, + AcceptContext = consentContext, + DeclineContext = consentContext, + }; + + var asAttachment = new Attachment + { + Content = fileCard, + ContentType = FileConsentCard.ContentType, + Name = filename, + }; + + return asAttachment; + } + + private AnimationCard MakeAnimationCard() + { + var url = new MediaUrl(url: MindBlownGif); + return new AnimationCard(title: "Animation Card", media: new[] { url }, autostart: true); + } + + private VideoCard MakeVideoCard() + { + var url = new MediaUrl(url: CorgiOnCarouselVideo); + return new VideoCard(title: "Video Card", media: new[] { url }); + } + + private AudioCard MakeAudioCard() + { + var url = new MediaUrl(url: $"{_serverUrl}api/music"); + return new AudioCard(title: "Audio Card", media: new[] { url }, autoloop: true); + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/CardOptions.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/CardOptions.cs new file mode 100644 index 0000000000..f5cd97dafe --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/CardOptions.cs @@ -0,0 +1,88 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Cards +{ + public enum CardOptions + { + /// + /// Adaptive card - Bot action + /// + AdaptiveCardBotAction, + + /// + /// Adaptive card - Task module + /// + AdaptiveCardTeamsTaskModule, + + /// + /// Adaptive card - Submit action + /// + AdaptiveCardSubmitAction, + + /// + /// Hero cards + /// + Hero, + + /// + /// Thumbnail cards + /// + Thumbnail, + + /// + /// Receipt cards + /// + Receipt, + + /// + /// Signin cards + /// + Signin, + + /// + /// Carousel cards + /// + Carousel, + + /// + /// List cards + /// + List, + + /// + /// O365 cards + /// + O365, + + /// + /// File cards + /// + TeamsFileConsent, + + /// + /// Animation cards + /// + Animation, + + /// + /// Audio cards + /// + Audio, + + /// + /// Video cards + /// + Video, + + /// + /// Adaptive update cards + /// + AdaptiveUpdate, + + /// + /// Ends the card selection dialog + /// + End + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/CardSampleHelper.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/CardSampleHelper.cs new file mode 100644 index 0000000000..8ae3df2ada --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/CardSampleHelper.cs @@ -0,0 +1,508 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using AdaptiveCards; +using Microsoft.Bot.Schema; +using Microsoft.Bot.Schema.Teams; +using Newtonsoft.Json.Linq; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Cards +{ + public static class CardSampleHelper + { + public static AdaptiveCard CreateAdaptiveCardBotAction() + { + var adaptiveCard = new AdaptiveCard(new AdaptiveSchemaVersion(1, 2)); + adaptiveCard.Body.Add(new AdaptiveTextBlock("Bot Builder actions")); + + var action1 = new CardAction(ActionTypes.ImBack, "imBack", null, null, null, "text"); + var action2 = new CardAction(ActionTypes.MessageBack, "message back", null, null, null, JObject.Parse(@"{ ""key"" : ""value"" }")); + var action3 = new CardAction(ActionTypes.MessageBack, "message back local echo", null, "text received by bots", "display text message back", JObject.Parse(@"{ ""key"" : ""value"" }")); + var action4 = new CardAction("invoke", "invoke", null, null, null, JObject.Parse(@"{ ""key"" : ""value"" }")); + + adaptiveCard.Actions.Add(action1.ToAdaptiveCardAction()); + adaptiveCard.Actions.Add(action2.ToAdaptiveCardAction()); + adaptiveCard.Actions.Add(action3.ToAdaptiveCardAction()); + adaptiveCard.Actions.Add(action4.ToAdaptiveCardAction()); + + return adaptiveCard; + } + + public static AdaptiveCard CreateAdaptiveCardTaskModule() + { + var taskModuleAction = new TaskModuleAction("Launch Task Module", @"{ ""hiddenKey"": ""hidden value from task module launcher"" }"); + + var adaptiveCard = new AdaptiveCard(new AdaptiveSchemaVersion(1, 2)); + adaptiveCard.Body.Add(new AdaptiveTextBlock("Task Module Adaptive Card")); + adaptiveCard.Actions.Add(taskModuleAction.ToAdaptiveCardAction()); + + return adaptiveCard; + } + + public static AdaptiveCard CreateAdaptiveCardSubmit() + { + var adaptiveCard = new AdaptiveCard(new AdaptiveSchemaVersion(1, 2)); + adaptiveCard.Body.Add(new AdaptiveTextBlock("Bot Builder actions")); + adaptiveCard.Body.Add(new AdaptiveTextInput { Id = "x" }); + adaptiveCard.Actions.Add(new AdaptiveSubmitAction { Type = "Action.Submit", Title = "Action.Submit", Data = new JObject { { "key", "value" } } }); + + return adaptiveCard; + } + + public static Attachment CreateTaskModuleHeroCard() + { + return new HeroCard() + { + Title = "Task Module Invocation from Hero Card", + Subtitle = "This is a hero card with a Task Module Action button. Click the button to show an Adaptive Card within a Task Module.", + Buttons = new List() + { + new TaskModuleAction("Adaptive Card", new { data = "adaptivecard" }), + }, + }.ToAttachment(); + } + + public static SampleData CreateSampleData(AdaptiveCard adaptiveCard) + { + if (adaptiveCard == null) + { + throw new ArgumentNullException(nameof(adaptiveCard)); + } + + if (adaptiveCard.Body.Count < 4) + { + throw new Exception("Adaptive Card Body contains too few elements"); + } + + var userText = (adaptiveCard.Body[1] as AdaptiveTextBlock)?.Text; + var choiceSet = adaptiveCard.Body[3] as AdaptiveChoiceSetInput; + + if (choiceSet?.Choices?.Count < 3) + { + throw new Exception("Adaptive Card Body[3] contains too few choice elements"); + } + + return new SampleData + { + Question = userText, + MultiSelect = choiceSet.IsMultiSelect ? "true" : "false", + Option1 = choiceSet.Choices[0].Title, + Option2 = choiceSet.Choices[1].Title, + Option3 = choiceSet.Choices[2].Title, + }; + } + + public static AdaptiveCard CreateAdaptiveCardEditor(SampleData sampleData = null) + { + var cardData = sampleData ?? new SampleData(); + + return new AdaptiveCard(new AdaptiveSchemaVersion(1, 2)) + { + Body = new List + { + new AdaptiveTextBlock("This is an Adaptive Card within a Task Module") + { + Weight = AdaptiveTextWeight.Bolder, + }, + new AdaptiveTextBlock("Enter text for Question:"), + new AdaptiveTextInput() { Id = "Question", Placeholder = "Question text here", Value = cardData.Question }, + new AdaptiveTextBlock("Options for Question:"), + new AdaptiveTextBlock("Is Multi-Select:"), + new AdaptiveChoiceSetInput + { + Type = AdaptiveChoiceSetInput.TypeName, + Id = "MultiSelect", + Value = cardData.MultiSelect, + IsMultiSelect = false, + Choices = new List + { + new AdaptiveChoice() { Title = "True", Value = "true" }, + new AdaptiveChoice() { Title = "False", Value = "false" }, + }, + }, + new AdaptiveTextInput() { Id = "Option1", Placeholder = "Option 1 here", Value = cardData.Option1 }, + new AdaptiveTextInput() { Id = "Option2", Placeholder = "Option 2 here", Value = cardData.Option2 }, + new AdaptiveTextInput() { Id = "Option3", Placeholder = "Option 3 here", Value = cardData.Option3 }, + }, + Actions = new List + { + new AdaptiveSubmitAction + { + Type = AdaptiveSubmitAction.TypeName, + Title = "Submit", + Data = new JObject { { "submitLocation", "messagingExtensionFetchTask" } }, + }, + }, + }; + } + + public static AdaptiveCard CreateAdaptiveCard(SampleData data) + { + if (data == null) + { + throw new ArgumentNullException(nameof(data)); + } + + return new AdaptiveCard(new AdaptiveSchemaVersion(1, 2)) + { + Body = new List + { + new AdaptiveTextBlock("Adaptive Card from Task Module") { Weight = AdaptiveTextWeight.Bolder }, + new AdaptiveTextBlock($"{data.Question}") { Id = "Question" }, + new AdaptiveTextInput() { Id = "Answer", Placeholder = "Answer here..." }, + new AdaptiveChoiceSetInput + { + Type = AdaptiveChoiceSetInput.TypeName, + Id = "Choices", + IsMultiSelect = bool.Parse(data.MultiSelect), + Choices = new List + { + new AdaptiveChoice() { Title = data.Option1, Value = data.Option1 }, + new AdaptiveChoice() { Title = data.Option2, Value = data.Option2 }, + new AdaptiveChoice() { Title = data.Option3, Value = data.Option3 }, + }, + }, + }, + Actions = new List + { + new AdaptiveSubmitAction + { + Type = AdaptiveSubmitAction.TypeName, + Title = "Submit", + Data = new JObject { { "submitLocation", "messagingExtensionSubmit" } }, + }, + }, + }; + } + + public static HeroCard CreateHeroCard() + { + var heroCard = new HeroCard + { + Title = "BotFramework Hero Card", + Subtitle = "Microsoft Bot Framework", + Text = "Build and connect intelligent bots to interact with your users naturally wherever they are," + + " from text/sms to Skype, Slack, Office 365 mail and other popular services.", + Images = new List { new CardImage("https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg") }, + Buttons = new List { new CardAction(ActionTypes.OpenUrl, "Get Started", value: "https://docs.microsoft.com/bot-framework") }, + }; + + return heroCard; + } + + public static HeroCard CreateHeroCard(string type) + { + var heroCard = new HeroCard + { + Title = "BotFramework Hero Card", + Subtitle = "Microsoft Bot Framework", + Text = "Build and connect intelligent bots to interact with your users naturally wherever they are," + + " from text/sms to Skype, Slack, Office 365 mail and other popular services.", + Images = new List { new CardImage("https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg") }, + Buttons = new List { new CardAction(ActionTypes.OpenUrl, "Get Started", value: "https://docs.microsoft.com/bot-framework") }, + }; + + return heroCard; + } + + public static ThumbnailCard CreateThumbnailCard() + { + var heroCard = new ThumbnailCard + { + Title = "BotFramework Thumbnail Card", + Subtitle = "Microsoft Bot Framework", + Text = "Build and connect intelligent bots to interact with your users naturally wherever they are," + + " from text/sms to Skype, Slack, Office 365 mail and other popular services.", + Images = new List { new CardImage("https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg") }, + Buttons = new List { new CardAction(ActionTypes.OpenUrl, "Get Started", value: "https://docs.microsoft.com/bot-framework") }, + }; + + return heroCard; + } + + public static ReceiptCard CreateReceiptCard() + { + var receiptCard = new ReceiptCard + { + Title = "John Doe", + Facts = new List { new Fact("Order Number", "1234"), new Fact("Payment Method", "VISA 5555-****") }, + Items = new List + { + new ReceiptItem( + "Data Transfer", + price: "$ 38.45", + quantity: "368", + image: new CardImage(url: "https://github.com/amido/azure-vector-icons/raw/master/renders/traffic-manager.png")), + new ReceiptItem( + "App Service", + price: "$ 45.00", + quantity: "720", + image: new CardImage(url: "https://github.com/amido/azure-vector-icons/raw/master/renders/cloud-service.png")), + }, + Tax = "$ 7.50", + Total = "$ 90.95", + Buttons = new List + { + new CardAction( + ActionTypes.OpenUrl, + "More information", + "https://account.windowsazure.com/content/6.10.1.38-.8225.160809-1618/aux-pre/images/offer-icon-freetrial.png", + value: "https://azure.microsoft.com/en-us/pricing/"), + }, + }; + + return receiptCard; + } + + public static SigninCard CreateSigninCard() + { + var signinCard = new SigninCard + { + Text = "BotFramework Sign-in Card", + Buttons = new List { new CardAction(ActionTypes.Signin, "Sign-in", value: "https://login.microsoftonline.com/") }, + }; + + return signinCard; + } + + public static O365ConnectorCard CreateSampleO365ConnectorCard() + { + var actionCard1 = new O365ConnectorCardActionCard( + O365ConnectorCardActionCard.Type, + "Multiple Choice", + "card-1", + new List + { + new O365ConnectorCardMultichoiceInput( + O365ConnectorCardMultichoiceInput.Type, + "list-1", + true, + "Pick multiple options", + null, + new List + { + new O365ConnectorCardMultichoiceInputChoice("Choice 1", "1"), + new O365ConnectorCardMultichoiceInputChoice("Choice 2", "2"), + new O365ConnectorCardMultichoiceInputChoice("Choice 3", "3") + }, + "expanded", + true), + new O365ConnectorCardMultichoiceInput( + O365ConnectorCardMultichoiceInput.Type, + "list-2", + true, + "Pick multiple options", + null, + new List + { + new O365ConnectorCardMultichoiceInputChoice("Choice 4", "4"), + new O365ConnectorCardMultichoiceInputChoice("Choice 5", "5"), + new O365ConnectorCardMultichoiceInputChoice("Choice 6", "6") + }, + "compact", + true), + new O365ConnectorCardMultichoiceInput( + O365ConnectorCardMultichoiceInput.Type, + "list-3", + false, + "Pick an option", + null, + new List + { + new O365ConnectorCardMultichoiceInputChoice("Choice a", "a"), + new O365ConnectorCardMultichoiceInputChoice("Choice b", "b"), + new O365ConnectorCardMultichoiceInputChoice("Choice c", "c") + }, + "expanded", + false), + new O365ConnectorCardMultichoiceInput( + O365ConnectorCardMultichoiceInput.Type, + "list-4", + false, + "Pick an option", + null, + new List + { + new O365ConnectorCardMultichoiceInputChoice("Choice x", "x"), + new O365ConnectorCardMultichoiceInputChoice("Choice y", "y"), + new O365ConnectorCardMultichoiceInputChoice("Choice z", "z") + }, + "compact", + false) + }, + new List + { + new O365ConnectorCardHttpPOST( + O365ConnectorCardHttpPOST.Type, + "Send", + "card-1-btn-1", + @"{""list1"":""{{list-1.value}}"", ""list2"":""{{list-2.value}}"", ""list3"":""{{list-3.value}}"", ""list4"":""{{list-4.value}}""}") + }); + + var actionCard2 = new O365ConnectorCardActionCard( + O365ConnectorCardActionCard.Type, + "Text Input", + "card-2", + new List + { + new O365ConnectorCardTextInput( + O365ConnectorCardTextInput.Type, + "text-1", + false, + "multiline, no maxLength", + null, + true, + null), + new O365ConnectorCardTextInput( + O365ConnectorCardTextInput.Type, + "text-2", + false, + "single line, no maxLength", + null, + false, + null), + new O365ConnectorCardTextInput( + O365ConnectorCardTextInput.Type, + "text-3", + true, + "multiline, max len = 10, isRequired", + null, + true, + 10), + new O365ConnectorCardTextInput( + O365ConnectorCardTextInput.Type, + "text-4", + true, + "single line, max len = 10, isRequired", + null, + false, + 10) + }, + new List + { + new O365ConnectorCardHttpPOST( + O365ConnectorCardHttpPOST.Type, + "Send", + "card-2-btn-1", + @"{""text1"":""{{text-1.value}}"", ""text2"":""{{text-2.value}}"", ""text3"":""{{text-3.value}}"", ""text4"":""{{text-4.value}}""}") + }); + + var actionCard3 = new O365ConnectorCardActionCard( + O365ConnectorCardActionCard.Type, + "Date Input", + "card-3", + new List + { + new O365ConnectorCardDateInput( + O365ConnectorCardDateInput.Type, + "date-1", + true, + "date with time", + null, + true), + new O365ConnectorCardDateInput( + O365ConnectorCardDateInput.Type, + "date-2", + false, + "date only", + null, + false) + }, + new List + { + new O365ConnectorCardHttpPOST( + O365ConnectorCardHttpPOST.Type, + "Send", + "card-3-btn-1", + @"{""date1"":""{{date-1.value}}"", ""date2"":""{{date-2.value}}""}") + }); + + var section = new O365ConnectorCardSection( + "**section title**", + "section text", + "activity title", + "activity subtitle", + "activity text", + "http://connectorsdemo.azurewebsites.net/images/MSC12_Oscar_002.jpg", + "avatar", + true, + new List + { + new O365ConnectorCardFact("Fact name 1", "Fact value 1"), + new O365ConnectorCardFact("Fact name 2", "Fact value 2"), + }, + new List + { + new O365ConnectorCardImage + { + Image = "http://connectorsdemo.azurewebsites.net/images/MicrosoftSurface_024_Cafe_OH-06315_VS_R1c.jpg", + Title = "image 1" + }, + new O365ConnectorCardImage + { + Image = "http://connectorsdemo.azurewebsites.net/images/WIN12_Scene_01.jpg", + Title = "image 2" + }, + new O365ConnectorCardImage + { + Image = "http://connectorsdemo.azurewebsites.net/images/WIN12_Anthony_02.jpg", + Title = "image 3" + } + }); + + var card = new O365ConnectorCard() + { + Summary = "O365 card summary", + ThemeColor = "#E67A9E", + Title = "card title", + Text = "card text", + Sections = new List { section }, + PotentialAction = new List + { + actionCard1, + actionCard2, + actionCard3, + new O365ConnectorCardViewAction( + O365ConnectorCardViewAction.Type, + "View Action", + null, + new List + { + "http://microsoft.com" + }), + new O365ConnectorCardOpenUri( + O365ConnectorCardOpenUri.Type, + "Open Uri", + "open-uri", + new List + { + new O365ConnectorCardOpenUriTarget + { + Os = "default", + Uri = "http://microsoft.com" + }, + new O365ConnectorCardOpenUriTarget + { + Os = "iOS", + Uri = "http://microsoft.com" + }, + new O365ConnectorCardOpenUriTarget + { + Os = "android", + Uri = "http://microsoft.com" + }, + new O365ConnectorCardOpenUriTarget + { + Os = "windows", + Uri = "http://microsoft.com" + } + }) + } + }; + + return card; + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/ChannelSupportedCards.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/ChannelSupportedCards.cs new file mode 100644 index 0000000000..426c3c118b --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/ChannelSupportedCards.cs @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Collections.Generic; +using Microsoft.Bot.Connector; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Cards +{ + public static class ChannelSupportedCards + { + /// + /// This tracks what cards are not supported in a given channel. + /// + private static readonly Dictionary> UnsupportedChannelCards = new Dictionary> + { + { + Channels.Emulator, new List + { + CardOptions.AdaptiveCardTeamsTaskModule, + CardOptions.AdaptiveUpdate, + CardOptions.O365, + CardOptions.TeamsFileConsent + } + }, + { Channels.Directline, new List { CardOptions.AdaptiveUpdate } }, + { + Channels.Telegram, new List + { + CardOptions.AdaptiveCardBotAction, + CardOptions.AdaptiveCardTeamsTaskModule, + CardOptions.AdaptiveCardSubmitAction, + CardOptions.List, + CardOptions.TeamsFileConsent + } + } + }; + + /// + /// This let's you know if a card is supported in a given channel. + /// + /// Bot Connector Channel. + /// Card Option to be checked. + /// A bool if the card is supported in the channel. + public static bool IsCardSupported(string channel, CardOptions type) + { + if (UnsupportedChannelCards.ContainsKey(channel)) + { + if (UnsupportedChannelCards[channel].Contains(type)) + { + return false; + } + } + + return true; + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/Files/buildreactionbotframework.jpg b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/Files/buildreactionbotframework.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f410fc137e4d78ef6934f7a06f7b0e50b7b45267 GIT binary patch literal 65992 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
  • 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%0D`!{J7<*jP93$p#* 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 b7On43EM4=dB^(`JDI-si{pp%v_$nOfp(Kaus+ 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 z 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

    paC55m_>ryRNvbU22jABe5< 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 zak { + console.log(`\n${server.name} listening to ${server.url}`); + console.log('\nGet Bot Framework Emulator: https://aka.ms/botframework-emulator'); + console.log('\nTo talk to your bot, open the emulator select "Open Bot"'); +}); + +const maxTotalSockets = (preallocatedSnatPorts, procCount = 1, weight = 0.5, overcommit = 1.1) => + Math.min( + Math.floor((preallocatedSnatPorts / procCount) * weight * overcommit), + preallocatedSnatPorts + ); + +const authConfig = new AuthenticationConfiguration([], allowedCallersClaimsValidator); + +// Create adapter. +// See https://aka.ms/about-bot-adapter to learn more about how bots work. +const adapter = new BotFrameworkAdapter({ + appId: process.env.MicrosoftAppId, + appPassword: process.env.MicrosoftAppPassword, + authConfig: authConfig, + clientOptions: { + agentSettings: { + http: new http.Agent({ + keepAlive: true, + maxTotalSockets: maxTotalSockets(1024, 4, 0.3) + }), + https: new https.Agent({ + keepAlive: true, + maxTotalSockets: maxTotalSockets(1024, 4, 0.7) + }) + } + } +}); + +// Catch-all for errors. +adapter.onTurnError = async (context, error) => { + // This check writes out errors to console log .vs. app insights. + // NOTE: In production environment, you should consider logging this to Azure application insights. + console.error(`\n [onTurnError] unhandled error: ${error}`); + + try { + const { message, stack } = error; + + // Send a message to the user. + let errorMessageText = 'The skill encountered an error or bug.'; + let errorMessage = MessageFactory.text(`${errorMessageText}\r\n${message}\r\n${stack}`, errorMessageText, InputHints.IgnoringInput); + errorMessage.value = { message, stack }; + await context.sendActivity(errorMessage); + + errorMessageText = 'To continue to run this bot, please fix the bot source code.'; + errorMessage = MessageFactory.text(errorMessageText, errorMessageText, InputHints.ExpectingInput); + await context.sendActivity(errorMessage); + + // Send a trace activity, which will be displayed in Bot Framework Emulator + await context.sendTraceActivity( + 'OnTurnError Trace', + `${error}`, + 'https://www.botframework.com/schemas/error', + 'TurnError' + ); + + // Send and EndOfConversation activity to the skill caller with the error to end the conversation + // and let the caller decide what to do. + await context.sendActivity({ + type: ActivityTypes.EndOfConversation, + code: 'SkillError', + text: error + }); + } catch (err) { + console.error(`\n [onTurnError] Exception caught in onTurnError : ${err}`); + } +}; + +const continuationParametersStore = {}; + +// Define the state store for your bot. +// See https://aka.ms/about-bot-state to learn more about using MemoryStorage. +// A bot requires a state storage system to persist the dialog and user state between messages. +const memoryStorage = new MemoryStorage(); + +// Create conversation and user state with in-memory storage provider. +const conversationState = new ConversationState(memoryStorage); + +adapter.use(new SsoSaveStateMiddleware(conversationState)); + +// Create the conversationIdFactory +const conversationIdFactory = new SkillConversationIdFactory(memoryStorage); + +// Create the credential provider; +const credentialProvider = new SimpleCredentialProvider(process.env.MicrosoftAppId, process.env.MicrosoftAppPassword); + +// Create the skill client +const skillClient = new SkillHttpClient(credentialProvider, conversationIdFactory); + +// Create the main dialog. +const dialog = new ActivityRouterDialog(server.url, conversationState, conversationIdFactory, skillClient, continuationParametersStore); + +// Create the bot that will handle incoming messages. +const bot = new SkillBot(conversationState, dialog, server.url); + +// Expose the manifest +server.get('/manifests/*', restify.plugins.serveStatic({ directory: './manifests', appendRequestPath: false })); + +// Expose images +server.get('/images/*', restify.plugins.serveStatic({ directory: './images', appendRequestPath: false })); + +// Listen for incoming requests. +server.post('/api/messages', (req, res) => { + adapter.processActivity(req, res, async (context) => { + // Route to main dialog. + await bot.run(context); + }); +}); + +// Create and initialize the skill classes. + +// Workaround for communicating back to the Host without throwing Unauthorized error due to the creation of a new Connector Client in the Adapter when the continueConvesation happens. + +// Uncomment this when resolved. +// const handler = new SkillHandler(adapter, bot, conversationIdFactory, credentialProvider, authConfig); +// const skillEndpoint = new ChannelServiceRoutes(handler); +// skillEndpoint.register(server, '/api/skills'); + +// Remove this when resolved +const handler = new SkillHandler(adapter, bot, conversationIdFactory, credentialProvider, authConfig); +server.post('/api/skills/v3/conversations/:conversationId/activities/:activityId', async (req, res) => { + try { + const authHeader = req.headers.authorization || req.headers.Authorization || ''; + const activity = await ChannelServiceRoutes.readActivity(req); + const ref = await handler.conversationIdFactory.getSkillConversationReference(req.params.conversationId); + const claimsIdentity = await handler.authenticate(authHeader); + + const response = await new Promise(resolve => { + return adapter.continueConversation(ref.conversationReference, ref.oAuthScope, async (context) => { + context.turnState.set(adapter.BotIdentityKey, claimsIdentity); + context.turnState.set(adapter.SkillConversationReferenceKey, ref); + + const newActivity = TurnContext.applyConversationReference(activity, ref.conversationReference); + + if (newActivity.type === ActivityTypes.EndOfConversation) { + await handler.conversationIdFactory.deleteConversationReference(req.params.conversationId); + SkillHandler.applyEoCToTurnContextActivity(context, newActivity); + resolve(await bot.run(context)); + } + + resolve(await context.sendActivity(newActivity)); + }); + }); + + res.status(200); + res.send(response); + res.end(); + } catch (error) { + ChannelServiceRoutes.handleError(error, res); + } +}); + +// Listen for incoming requests. +server.get('/api/music', restify.plugins.serveStatic({ directory: 'dialogs/cards/files', file: 'music.mp3' })); + +// Listen for incoming notifications and send proactive messages to users. +server.get('/api/notify', async (req, res) => { + let error; + const { user } = req.query; + + const continuationParameters = continuationParametersStore[user]; + + if (!continuationParameters) { + res.setHeader('Content-Type', 'text/html'); + res.writeHead(200); + res.write(`

    No messages sent


    There are no conversations registered to receive proactive messages for ${user}.`); + res.end(); + return; + } + + try { + adapter.continueConversation(continuationParameters.conversationReference, continuationParameters.oAuthScope, async context => { + await context.sendActivity(`Got proactive message for user: ${user}`); + await bot.run(context); + }); + } catch (err) { + error = err; + } + + res.setHeader('Content-Type', 'text/html'); + res.writeHead(200); + res.write(`

    Proactive messages have been sent


    Timestamp: ${new Date().toISOString()}
    Exception: ${error || ''}`); + res.end(); +}); diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/manifests/waterfallskillbot-manifest-1.0.json b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/manifests/waterfallskillbot-manifest-1.0.json new file mode 100644 index 0000000000..0e2c4109f1 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/manifests/waterfallskillbot-manifest-1.0.json @@ -0,0 +1,105 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/skills/v2.1/skill-manifest.json", + "$id": "WaterfallSkillBotJS", + "name": "WaterfallSkillBotJS", + "version": "1.0", + "description": "This is a skill definition for multiple activity types (implemented using waterfall dialogs).", + "publisherName": "Microsoft", + "privacyUrl": "https://microsoft.com/privacy", + "copyright": "Copyright (c) Microsoft Corporation. All rights reserved.", + "license": "https://github.com/microsoft/BotFramework-FunctionalTests/blob/main/LICENSE", + "tags": [ + "travel", + "weather", + "luis" + ], + "endpoints": [ + { + "name": "default", + "protocol": "BotFrameworkV3", + "description": "Localhost endpoint for the skill (on port 35420)", + "endpointUrl": "http://localhost:35420/api/messages", + "msAppId": "00000000-0000-0000-0000-000000000000" + } + ], + "activities": { + "bookFlight": { + "description": "Books a flight (multi turn).", + "type": "event", + "name": "BookFlight", + "value": { + "$ref": "#/definitions/bookingInfo" + }, + "resultValue": { + "$ref": "#/definitions/bookingInfo" + } + }, + "getWeather": { + "description": "Retrieves and returns the weather for the user's location.", + "type": "event", + "name": "GetWeather", + "value": { + "$ref": "#/definitions/location" + }, + "resultValue": { + "$ref": "#/definitions/weatherReport" + } + }, + "passthroughMessage": { + "type": "message", + "description": "Receives the user's utterance and attempts to resolve it using the skill's LUIS models.", + "value": { + "type": "object" + } + } + }, + "definitions": { + "bookingInfo": { + "type": "object", + "required": [ + "origin" + ], + "properties": { + "origin": { + "type": "string", + "description": "This is the origin city for the flight." + }, + "destination": { + "type": "string", + "description": "This is the destination city for the flight." + }, + "travelDate": { + "type": "string", + "description": "The date for the flight in YYYY-MM-DD format." + } + } + }, + "weatherReport": { + "type": "array", + "description": "Array of forecasts for the next week.", + "items": [ + { + "type": "string" + } + ] + }, + "location": { + "type": "object", + "description": "Location metadata.", + "properties": { + "latitude": { + "type": "number", + "title": "Latitude" + }, + "longitude": { + "type": "number", + "title": "Longitude" + }, + "postalCode": { + "type": "string", + "title": "Postal code" + } + } + } + } +} diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/middleware/ssoSaveStateMiddleware.js b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/middleware/ssoSaveStateMiddleware.js new file mode 100644 index 0000000000..e0c1806c4b --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/middleware/ssoSaveStateMiddleware.js @@ -0,0 +1,41 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { CardFactory } = require('botbuilder'); + +class SsoSaveStateMiddleware { + /** + * @param {import('botbuilder').ConversationState} conversationState + */ + constructor (conversationState) { + this.conversationState = conversationState; + } + + /** + * @param {import('botbuilder').TurnContext} turnContext + */ + async onTurn (turnContext, next) { + // Register outgoing handler. + turnContext.onSendActivities(this.outgoingHandler.bind(this)); + + // Continue processing messages. + await next(); + } + + /** + * @param {import('botbuilder').TurnContext} turnContext + * @param {Partial[]} activities + * @param {Function} next + */ + async outgoingHandler (turnContext, activities, next) { + for (const activity of activities) { + if (!!activity.attachments && activity.attachments.some(attachment => attachment.contentType === CardFactory.contentTypes.oauthCard)) { + this.conversationState.saveChanges(turnContext); + } + } + + return next(); + } +} + +module.exports.SsoSaveStateMiddleware = SsoSaveStateMiddleware; diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/package.json b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/package.json new file mode 100644 index 0000000000..f7990840f7 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/package.json @@ -0,0 +1,27 @@ +{ + "name": "waterfall-skill-bot", + "version": "1.0.0", + "description": "A simple waterfall skill bot for testing skills", + "author": "Microsoft", + "license": "MIT", + "main": "index.js", + "scripts": { + "start": "node ./index.js", + "watch": "nodemon ./index.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://github.com" + }, + "dependencies": { + "botbuilder": "~4.13.3", + "botbuilder-dialogs": "~4.13.3", + "dotenv": "^8.2.0", + "node-fetch": "^2.6.1", + "restify": "~8.5.1" + }, + "devDependencies": { + "nodemon": "~2.0.4" + } +} diff --git a/tests/functional/Bots/Python/.gitignore b/tests/functional/Bots/Python/.gitignore new file mode 100644 index 0000000000..01e8a341d5 --- /dev/null +++ b/tests/functional/Bots/Python/.gitignore @@ -0,0 +1,3 @@ + +# Ignore .deployment files generated to deploy Python to linux from VSCode +**/.deployment \ No newline at end of file diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/.env b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/.env new file mode 100644 index 0000000000..11aabb20f4 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/.env @@ -0,0 +1,24 @@ +MicrosoftAppId= +MicrosoftAppPassword= +SkillHostEndpoint=http://localhost:37000/api/skills + +skill_EchoSkillBotComposerDotNet_appId= +skill_EchoSkillBotComposerDotNet_endpoint=http://localhost:35410/api/messages + +skill_EchoSkillBotDotNet_appId= +skill_EchoSkillBotDotNet_endpoint=http://localhost:35400/api/messages + +skill_EchoSkillBotDotNet21_appId= +skill_EchoSkillBotDotNet21_endpoint=http://localhost:35405/api/messages + +skill_EchoSkillBotDotNetV3_appId= +skill_EchoSkillBotDotNetV3_endpoint=http://localhost:35407/api/messages + +skill_EchoSkillBotJS_appId= +skill_EchoSkillBotJS_endpoint=http://localhost:36400/api/messages + +skill_EchoSkillBotJSV3_appId= +skill_EchoSkillBotJSV3_endpoint=http://localhost:36407/api/messages + +skill_EchoSkillBotPython_appId= +skill_EchoSkillBotPython_endpoint=http://localhost:37400/api/messages diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/adapter_with_error_handler.py b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/adapter_with_error_handler.py new file mode 100644 index 0000000000..f8271d257a --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/adapter_with_error_handler.py @@ -0,0 +1,141 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. +import sys +import traceback + +from botbuilder.core import ( + BotFrameworkAdapter, + BotFrameworkAdapterSettings, + ConversationState, + MessageFactory, + TurnContext, +) +from botbuilder.integration.aiohttp.skills import SkillHttpClient +from botbuilder.schema import ActivityTypes, Activity, InputHints + +from config import DefaultConfig, SkillConfiguration +from bots.host_bot import ACTIVE_SKILL_PROPERTY_NAME + + +class AdapterWithErrorHandler(BotFrameworkAdapter): + def __init__( + self, + settings: BotFrameworkAdapterSettings, + config: DefaultConfig, + conversation_state: ConversationState, + skill_client: SkillHttpClient = None, + skill_config: SkillConfiguration = None, + ): + super().__init__(settings) + self._config = config + + if not conversation_state: + raise TypeError( + "AdapterWithErrorHandler: `conversation_state` argument cannot be None." + ) + self._conversation_state = conversation_state + self._skill_client = skill_client + self._skill_config = skill_config + + self.on_turn_error = self._handle_turn_error + + async def _handle_turn_error(self, turn_context: TurnContext, error: Exception): + # This check writes out errors to console log + # NOTE: In production environment, you should consider logging this to Azure + # application insights. + print(f"\n [on_turn_error] unhandled error: {error}", file=sys.stderr) + traceback.print_exc() + await self._send_error_message(turn_context, error) + await self._end_skill_conversation(turn_context, error) + await self._clear_conversation_state(turn_context) + + async def _send_error_message(self, turn_context: TurnContext, error: Exception): + if not self._skill_client or not self._skill_config: + return + try: + exc_info = sys.exc_info() + stack = traceback.format_exception(*exc_info) + + # Send a message to the user. + error_message_text = "The bot encountered an error or bug." + error_message = MessageFactory.text( + error_message_text, error_message_text, InputHints.ignoring_input + ) + error_message.value = {"message": error, "stack": stack} + await turn_context.send_activity(error_message) + + await turn_context.send_activity(f"Exception: {error}") + await turn_context.send_activity(traceback.format_exc()) + + error_message_text = ( + "To continue to run this bot, please fix the bot source code." + ) + error_message = MessageFactory.text( + error_message_text, error_message_text, InputHints.ignoring_input + ) + await turn_context.send_activity(error_message) + + # Send a trace activity, which will be displayed in Bot Framework Emulator. + await turn_context.send_trace_activity( + label="TurnError", + name="on_turn_error Trace", + value=f"{error}", + value_type="https://www.botframework.com/schemas/error", + ) + except Exception as exception: + print( + f"\n Exception caught on _send_error_message : {exception}", + file=sys.stderr, + ) + traceback.print_exc() + + async def _end_skill_conversation( + self, turn_context: TurnContext, error: Exception + ): + if not self._skill_client or not self._skill_config: + return + + try: + # Inform the active skill that the conversation is ended so that it has a chance to clean up. + # Note: the root bot manages the ActiveSkillPropertyName, which has a value while the root bot + # has an active conversation with a skill. + active_skill = await self._conversation_state.create_property( + ACTIVE_SKILL_PROPERTY_NAME + ).get(turn_context) + + if active_skill: + bot_id = self._config.APP_ID + end_of_conversation = Activity(type=ActivityTypes.end_of_conversation) + end_of_conversation.code = "RootSkillError" + TurnContext.apply_conversation_reference( + end_of_conversation, + TurnContext.get_conversation_reference(turn_context.activity), + True, + ) + + await self._conversation_state.save_changes(turn_context, True) + await self._skill_client.post_activity_to_skill( + bot_id, + active_skill, + self._skill_config.SKILL_HOST_ENDPOINT, + end_of_conversation, + ) + except Exception as exception: + print( + f"\n Exception caught on _end_skill_conversation : {exception}", + file=sys.stderr, + ) + traceback.print_exc() + + async def _clear_conversation_state(self, turn_context: TurnContext): + try: + # Delete the conversationState for the current conversation to prevent the + # bot from getting stuck in a error-loop caused by being in a bad state. + # ConversationState should be thought of as similar to "cookie-state" for a Web page. + await self._conversation_state.delete(turn_context) + except Exception as exception: + print( + f"\n Exception caught on _clear_conversation_state : {exception}", + file=sys.stderr, + ) + traceback.print_exc() diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/app.py b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/app.py new file mode 100644 index 0000000000..283492ff41 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/app.py @@ -0,0 +1,89 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from aiohttp import web +from aiohttp.web import Request, Response +from botbuilder.core import ( + BotFrameworkAdapterSettings, + ConversationState, + MemoryStorage, +) +from botbuilder.core.integration import ( + aiohttp_channel_service_routes, + aiohttp_error_middleware, +) +from botbuilder.core.skills import SkillHandler +from botbuilder.integration.aiohttp.skills import SkillHttpClient +from botbuilder.schema import Activity +from botframework.connector.auth import ( + AuthenticationConfiguration, + SimpleCredentialProvider, +) + +from dialogs import SetupDialog +from skill_conversation_id_factory import SkillConversationIdFactory +from authentication import AllowedSkillsClaimsValidator +from bots import HostBot +from config import DefaultConfig, SkillConfiguration +from adapter_with_error_handler import AdapterWithErrorHandler + +CONFIG = DefaultConfig() +SKILL_CONFIG = SkillConfiguration() + +# Whitelist skills from SKILL_CONFIG +AUTH_CONFIG = AuthenticationConfiguration( + claims_validator=AllowedSkillsClaimsValidator(CONFIG).claims_validator +) +# Create adapter. +# See https://aka.ms/about-bot-adapter to learn more about how bots work. +SETTINGS = BotFrameworkAdapterSettings( + app_id=CONFIG.APP_ID, + app_password=CONFIG.APP_PASSWORD, + auth_configuration=AUTH_CONFIG, +) + +STORAGE = MemoryStorage() +CONVERSATION_STATE = ConversationState(STORAGE) + +ID_FACTORY = SkillConversationIdFactory(STORAGE) +CREDENTIAL_PROVIDER = SimpleCredentialProvider(CONFIG.APP_ID, CONFIG.APP_PASSWORD) +CLIENT = SkillHttpClient(CREDENTIAL_PROVIDER, ID_FACTORY) + +ADAPTER = AdapterWithErrorHandler( + SETTINGS, CONFIG, CONVERSATION_STATE, CLIENT, SKILL_CONFIG +) + +# Create the Bot +DIALOG = SetupDialog(CONVERSATION_STATE, SKILL_CONFIG) +BOT = HostBot(CONVERSATION_STATE, SKILL_CONFIG, CLIENT, CONFIG, DIALOG) + +SKILL_HANDLER = SkillHandler(ADAPTER, BOT, ID_FACTORY, CREDENTIAL_PROVIDER, AUTH_CONFIG) + + +# Listen for incoming requests on /api/messages +async def messages(req: Request) -> Response: + # Main bot message handler. + if "application/json" in req.headers["Content-Type"]: + body = await req.json() + else: + return Response(status=415) + + activity = Activity().deserialize(body) + auth_header = req.headers["Authorization"] if "Authorization" in req.headers else "" + + try: + await ADAPTER.process_activity(activity, auth_header, BOT.on_turn) + return Response(status=201) + except Exception as exception: + raise exception + + +APP = web.Application(middlewares=[aiohttp_error_middleware]) +APP.router.add_post("/api/messages", messages) +APP.router.add_routes(aiohttp_channel_service_routes(SKILL_HANDLER, "/api/skills")) + +if __name__ == "__main__": + try: + web.run_app(APP, host="localhost", port=CONFIG.PORT) + except Exception as error: + raise error diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/authentication/__init__.py b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/authentication/__init__.py new file mode 100644 index 0000000000..550f9b54b6 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/authentication/__init__.py @@ -0,0 +1,6 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from .allowed_skills_claims_validator import AllowedSkillsClaimsValidator + +__all__ = ["AllowedSkillsClaimsValidator"] diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/authentication/allowed_skills_claims_validator.py b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/authentication/allowed_skills_claims_validator.py new file mode 100644 index 0000000000..7f0d26f087 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/authentication/allowed_skills_claims_validator.py @@ -0,0 +1,44 @@ +from typing import Awaitable, Callable, Dict, List + +from botframework.connector.auth import JwtTokenValidation, SkillValidation + +from config import DefaultConfig + + +class AllowedSkillsClaimsValidator: + + config_key = "ALLOWED_CALLERS" + + def __init__(self, config: DefaultConfig): + if not config: + raise TypeError( + "AllowedSkillsClaimsValidator: config object cannot be None." + ) + + # ALLOWED_CALLERS is the setting in config.py file + # that consists of the list of parent bot ids that are allowed to access the skill + # to add a new parent bot simply go to the AllowedCallers and add + # the parent bot's microsoft app id to the list + caller_list = getattr(config, self.config_key) + if caller_list is None: + raise TypeError(f'"{self.config_key}" not found in configuration.') + self._allowed_callers = caller_list + + @property + def claims_validator(self) -> Callable[[List[Dict]], Awaitable]: + async def allow_callers_claims_validator(claims: Dict[str, object]): + # if allowed_callers is None we allow all calls + if "*" not in self._allowed_callers and SkillValidation.is_skill_claim( + claims + ): + # Check that the appId claim in the skill request is in the list of skills configured for this bot. + app_id = JwtTokenValidation.get_app_id_from_claims(claims) + if app_id not in self._allowed_callers: + raise PermissionError( + f'Received a request from a bot with an app ID of "{app_id}".' + f" To enable requests from this caller, add the app ID to your configuration file." + ) + + return + + return allow_callers_claims_validator diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/bots/__init__.py b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/bots/__init__.py new file mode 100644 index 0000000000..acb6f75c35 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/bots/__init__.py @@ -0,0 +1,7 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from .host_bot import HostBot + + +__all__ = ["HostBot"] diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/bots/host_bot.py b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/bots/host_bot.py new file mode 100644 index 0000000000..ab1e383cc8 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/bots/host_bot.py @@ -0,0 +1,186 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. +import copy +from typing import List +from botbuilder.core import ( + ActivityHandler, + ConversationState, + MessageFactory, + TurnContext, +) +from botbuilder.core.skills import BotFrameworkSkill +from botbuilder.dialogs import Dialog +from botbuilder.schema import ( + ActivityTypes, + ChannelAccount, + ExpectedReplies, + DeliveryModes, +) +from botbuilder.integration.aiohttp.skills import SkillHttpClient + +from config import DefaultConfig, SkillConfiguration +from helpers.dialog_helper import DialogHelper + +DELIVERY_MODE_PROPERTY_NAME = "deliveryModeProperty" +ACTIVE_SKILL_PROPERTY_NAME = "activeSkillProperty" + + +class HostBot(ActivityHandler): + def __init__( + self, + conversation_state: ConversationState, + skills_config: SkillConfiguration, + skill_client: SkillHttpClient, + config: DefaultConfig, + dialog: Dialog, + ): + self._bot_id = config.APP_ID + self._skill_client = skill_client + self._skills_config = skills_config + self._conversation_state = conversation_state + self._dialog = dialog + self._dialog_state_property = conversation_state.create_property("DialogState") + + # Create state property to track the delivery mode and active skill. + self._delivery_mode_property = conversation_state.create_property( + DELIVERY_MODE_PROPERTY_NAME + ) + self._active_skill_property = conversation_state.create_property( + ACTIVE_SKILL_PROPERTY_NAME + ) + + async def on_turn(self, turn_context): + # Forward all activities except EndOfConversation to the active skill. + if turn_context.activity.type != ActivityTypes.end_of_conversation: + # Try to get the active skill + active_skill: BotFrameworkSkill = await self._active_skill_property.get( + turn_context + ) + + if active_skill: + delivery_mode: str = await self._delivery_mode_property.get( + turn_context + ) + + # Send the activity to the skill + await self.__send_to_skill(turn_context, delivery_mode, active_skill) + return + + await super().on_turn(turn_context) + # Save any state changes that might have occurred during the turn. + await self._conversation_state.save_changes(turn_context) + + async def on_message_activity(self, turn_context: TurnContext): + if turn_context.activity.text in self._skills_config.SKILLS: + delivery_mode: str = await self._delivery_mode_property.get(turn_context) + selected_skill = self._skills_config.SKILLS[turn_context.activity.text] + v3_bots = ["EchoSkillBotDotNetV3", "EchoSkillBotJSV3"] + + if ( + selected_skill + and delivery_mode == DeliveryModes.expect_replies + and selected_skill.id.lower() in (id.lower() for id in v3_bots) + ): + message = MessageFactory.text( + "V3 Bots do not support 'expectReplies' delivery mode." + ) + await turn_context.send_activity(message) + + # Forget delivery mode and skill invocation. + await self._delivery_mode_property.delete(turn_context) + + # Restart setup dialog + await self._conversation_state.delete(turn_context) + + await DialogHelper.run_dialog( + self._dialog, + turn_context, + self._dialog_state_property, + ) + + async def on_end_of_conversation_activity(self, turn_context: TurnContext): + await self.end_conversation(turn_context.activity, turn_context) + + async def on_members_added_activity( + self, members_added: List[ChannelAccount], turn_context: TurnContext + ): + for member in members_added: + if member.id != turn_context.activity.recipient.id: + await turn_context.send_activity( + MessageFactory.text("Hello and welcome!") + ) + await DialogHelper.run_dialog( + self._dialog, + turn_context, + self._dialog_state_property, + ) + + async def end_conversation(self, activity, turn_context): + # Forget delivery mode and skill invocation. + await self._delivery_mode_property.delete(turn_context) + await self._active_skill_property.delete(turn_context) + + eoc_activity_message = ( + f"Received {ActivityTypes.end_of_conversation}.\n\nCode: {activity.code}." + ) + if activity.text: + eoc_activity_message = eoc_activity_message + f"\n\nText: {activity.text}" + if activity.value: + eoc_activity_message = eoc_activity_message + f"\n\nValue: {activity.value}" + await turn_context.send_activity(eoc_activity_message) + + # We are back + await turn_context.send_activity(MessageFactory.text("Back in the host bot.")) + + # Restart setup dialog. + await DialogHelper.run_dialog( + self._dialog, + turn_context, + self._dialog_state_property, + ) + + await self._conversation_state.save_changes(turn_context) + + async def __send_to_skill( + self, + turn_context: TurnContext, + delivery_mode: str, + target_skill: BotFrameworkSkill, + ): + # NOTE: Always SaveChanges() before calling a skill so that any activity generated by the skill + # will have access to current accurate state. + await self._conversation_state.save_changes(turn_context, force=True) + + if delivery_mode == "expectReplies": + # Clone activity and update its delivery mode. + activity = copy.copy(turn_context.activity) + activity.delivery_mode = delivery_mode + + # Route the activity to the skill. + expect_replies_response = await self._skill_client.post_activity_to_skill( + self._bot_id, + target_skill, + self._skills_config.SKILL_HOST_ENDPOINT, + activity, + ) + + # Route response activities back to the channel. + response_activities: ExpectedReplies = ( + ExpectedReplies().deserialize(expect_replies_response.body).activities + ) + + for response_activity in response_activities: + if response_activity.type == ActivityTypes.end_of_conversation: + await self.end_conversation(response_activity, turn_context) + + else: + await turn_context.send_activity(response_activity) + + else: + # Route the activity to the skill. + await self._skill_client.post_activity_to_skill( + self._bot_id, + target_skill, + self._skills_config.SKILL_HOST_ENDPOINT, + turn_context.activity, + ) diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/config.py b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/config.py new file mode 100644 index 0000000000..6e4da1d2a4 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/config.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python3 +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import os +from typing import Dict +from botbuilder.core.skills import BotFrameworkSkill +from dotenv import load_dotenv + +""" Bot Configuration """ + + +class DefaultConfig: + """ Bot Configuration """ + + load_dotenv() + + PORT = 37000 + APP_ID = os.getenv("MicrosoftAppId") + APP_PASSWORD = os.getenv("MicrosoftAppPassword") + SKILL_HOST_ENDPOINT = os.getenv("SkillHostEndpoint") + SKILLS = [] + + # Callers to only those specified, '*' allows any caller. + # Example: os.environ.get("AllowedCallers", ["54d3bb6a-3b6d-4ccd-bbfd-cad5c72fb53a"]) + ALLOWED_CALLERS = os.environ.get("AllowedCallers", ["*"]) + + @staticmethod + def configure_skills(): + skills = list() + env_skills = [x for x in os.environ if ((x.lower().startswith("skill_")) and ('group' not in x.lower()))] + + for envKey in env_skills: + keys = envKey.split("_") + bot_id = keys[1] + key = keys[2] + index = -1 + + for i, newSkill in enumerate(skills): + if newSkill["id"] == bot_id: + index = i + + if key.lower() == "appid": + attr = "app_id" + elif key.lower() == "endpoint": + attr = "skill_endpoint" + else: + raise ValueError( + f"[SkillsConfiguration]: Invalid environment variable declaration {key}" + ) + + env_val = os.getenv(envKey) + + if index == -1: + skill = {"id": bot_id, attr: env_val} + skills.append(skill) + else: + skills[index][attr] = env_val + pass + + DefaultConfig.SKILLS = skills + + +DefaultConfig.configure_skills() + + +class SkillConfiguration: + SKILL_HOST_ENDPOINT = DefaultConfig.SKILL_HOST_ENDPOINT + SKILLS: Dict[str, BotFrameworkSkill] = { + skill["id"]: BotFrameworkSkill(**skill) for skill in DefaultConfig.SKILLS + } diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/dialogs/__init__.py b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/dialogs/__init__.py new file mode 100644 index 0000000000..0ea48d3bd7 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/dialogs/__init__.py @@ -0,0 +1,6 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from .setup_dialog import SetupDialog + +__all__ = ["SetupDialog"] diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/dialogs/setup_dialog.py b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/dialogs/setup_dialog.py new file mode 100644 index 0000000000..fe87c91941 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/dialogs/setup_dialog.py @@ -0,0 +1,129 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from botbuilder.dialogs import ( + ComponentDialog, + WaterfallDialog, + WaterfallStepContext, + DialogTurnResult, +) +from botbuilder.dialogs.choices.list_style import ListStyle +from botbuilder.dialogs.prompts import ( + TextPrompt, + ChoicePrompt, + PromptOptions, +) +from botbuilder.dialogs.choices import Choice +from botbuilder.core import MessageFactory, ConversationState +from botbuilder.schema import InputHints, DeliveryModes + +from bots.host_bot import ACTIVE_SKILL_PROPERTY_NAME, DELIVERY_MODE_PROPERTY_NAME +from config import SkillConfiguration + + +class SetupDialog(ComponentDialog): + def __init__( + self, conversation_state: ConversationState, skills_config: SkillConfiguration + ): + super(SetupDialog, self).__init__(SetupDialog.__name__) + + self._delivery_mode_property = conversation_state.create_property( + DELIVERY_MODE_PROPERTY_NAME + ) + self._active_skill_property = conversation_state.create_property( + ACTIVE_SKILL_PROPERTY_NAME + ) + self._delivery_mode = "" + + self._skills_config = skills_config + + # Define the setup dialog and its related components. + # Add ChoicePrompt to render available skills. + self.add_dialog(ChoicePrompt(self.select_delivery_mode_step.__name__)) + self.add_dialog(ChoicePrompt(self.select_skill_step.__name__)) + self.add_dialog(TextPrompt(self.final_step.__name__)) + # Add main waterfall dialog for this bot. + self.add_dialog( + WaterfallDialog( + WaterfallDialog.__name__, + [ + self.select_delivery_mode_step, + self.select_skill_step, + self.final_step, + ], + ) + ) + self.initial_dialog_id = WaterfallDialog.__name__ + + # Render a prompt to select the delivery mode to use. + async def select_delivery_mode_step( + self, step_context: WaterfallStepContext + ) -> DialogTurnResult: + # Create the PromptOptions with the delivery modes supported. + message = "What delivery mode would you like to use?" + reprompt_message = ( + "That was not a valid choice, please select a valid delivery mode." + ) + options = PromptOptions( + prompt=MessageFactory.text(message, message, InputHints.expecting_input), + retry_prompt=MessageFactory.text( + reprompt_message, reprompt_message, InputHints.expecting_input + ), + choices=[Choice("normal"), Choice("expectReplies")], + ) + return await step_context.prompt( + self.select_delivery_mode_step.__name__, options + ) + + # Render a prompt to select the skill to call. + async def select_skill_step( + self, step_context: WaterfallStepContext + ) -> DialogTurnResult: + # Set delivery mode. + self._delivery_mode = step_context.result.value + await self._delivery_mode_property.set( + step_context.context, step_context.result.value + ) + + # Create the PromptOptions from the skill configuration which contains the list of configured skills. + message = "What skill would you like to call?" + reprompt_message = "That was not a valid choice, please select a valid skill." + options = PromptOptions( + prompt=MessageFactory.text(message, message, InputHints.expecting_input), + retry_prompt=MessageFactory.text(reprompt_message, reprompt_message), + choices=[ + Choice(value=skill.id) + for _, skill in sorted(self._skills_config.SKILLS.items()) + ], + style=ListStyle.suggested_action + ) + + return await step_context.prompt(self.select_skill_step.__name__, options) + + # The SetupDialog has ended, we go back to the HostBot to connect with the selected skill. + async def final_step(self, step_context: WaterfallStepContext) -> DialogTurnResult: + # Set active skill. + for i in self._skills_config.SKILLS.keys(): + if i.lower() == step_context.result.value.lower(): + selected_skill = self._skills_config.SKILLS.get(i) + + await self._active_skill_property.set(step_context.context, selected_skill) + + v3_bots = ['EchoSkillBotDotNetV3', 'EchoSkillBotJSV3'] + + if self._delivery_mode == DeliveryModes.expect_replies and selected_skill.id.lower() in (id.lower() for id in v3_bots): + message = MessageFactory.text("V3 Bots do not support 'expectReplies' delivery mode.") + await step_context.context.send_activity(message) + + # Forget delivery mode and skill invocation. + await self._delivery_mode_property.delete(step_context.context) + await self._active_skill_property.delete(step_context.context) + + # Restart setup dialog + return await step_context.replace_dialog(self.initial_dialog_id) + + await step_context.context.send_activity( + MessageFactory.text("Type anything to send to the skill.", "Type anything to send to the skill.", InputHints.expecting_input) + ) + + return await step_context.end_dialog() diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/helpers/dialog_helper.py b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/helpers/dialog_helper.py new file mode 100644 index 0000000000..6b2646b0ba --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/helpers/dialog_helper.py @@ -0,0 +1,19 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from botbuilder.core import StatePropertyAccessor, TurnContext +from botbuilder.dialogs import Dialog, DialogSet, DialogTurnStatus + + +class DialogHelper: + @staticmethod + async def run_dialog( + dialog: Dialog, turn_context: TurnContext, accessor: StatePropertyAccessor + ): + dialog_set = DialogSet(accessor) + dialog_set.add(dialog) + + dialog_context = await dialog_set.create_context(turn_context) + results = await dialog_context.continue_dialog() + if results.status == DialogTurnStatus.Empty: + await dialog_context.begin_dialog(dialog.id) diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/requirements.txt b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/requirements.txt new file mode 100644 index 0000000000..47a60840f5 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/requirements.txt @@ -0,0 +1,3 @@ +botbuilder-integration-aiohttp>=4.13.0 +botbuilder-dialogs>=4.13.0 +python-dotenv diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/skill_conversation_id_factory.py b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/skill_conversation_id_factory.py new file mode 100644 index 0000000000..8b3ab86d14 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/skill_conversation_id_factory.py @@ -0,0 +1,75 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. +from typing import Union + +from botbuilder.core import Storage, TurnContext +from botbuilder.core.skills import ( + ConversationIdFactoryBase, + SkillConversationIdFactoryOptions, + SkillConversationReference, +) +from botbuilder.schema import ConversationReference + + +class SkillConversationIdFactory(ConversationIdFactoryBase): + def __init__(self, storage: Storage): + if not storage: + raise TypeError("storage can't be None") + + self._storage = storage + + async def create_skill_conversation_id( + self, + options_or_conversation_reference: Union[ + SkillConversationIdFactoryOptions, ConversationReference + ], + ) -> str: + if not options_or_conversation_reference: + raise TypeError("Need options or conversation reference") + + if not isinstance( + options_or_conversation_reference, SkillConversationIdFactoryOptions + ): + raise TypeError( + "This SkillConversationIdFactory can only handle SkillConversationIdFactoryOptions" + ) + + options = options_or_conversation_reference + + # Create the storage key based on the SkillConversationIdFactoryOptions. + conversation_reference = TurnContext.get_conversation_reference( + options.activity + ) + skill_conversation_id = ( + f"{conversation_reference.conversation.id}" + f"-{options.bot_framework_skill.id}" + f"-{conversation_reference.channel_id}" + f"-skillconvo" + ) + + # Create the SkillConversationReference instance. + skill_conversation_reference = SkillConversationReference( + conversation_reference=conversation_reference, + oauth_scope=options.from_bot_oauth_scope, + ) + + # Store the SkillConversationReference using the skill_conversation_id as a key. + skill_conversation_info = {skill_conversation_id: skill_conversation_reference} + await self._storage.write(skill_conversation_info) + + # Return the generated skill_conversation_id (that will be also used as the conversation ID to call the skill). + return skill_conversation_id + + async def get_conversation_reference( + self, skill_conversation_id: str + ) -> Union[SkillConversationReference, ConversationReference]: + if not skill_conversation_id: + raise TypeError("skill_conversation_id can't be None") + + # Get the SkillConversationReference from storage for the given skill_conversation_id. + skill_conversation_info = await self._storage.read([skill_conversation_id]) + + return skill_conversation_info.get(skill_conversation_id) + + async def delete_conversation_reference(self, skill_conversation_id: str): + await self._storage.delete([skill_conversation_id]) diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/.env b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/.env new file mode 100644 index 0000000000..382c7b2790 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/.env @@ -0,0 +1,53 @@ +MicrosoftAppId= +MicrosoftAppPassword= +SkillHostEndpoint=http://localhost:37020/api/skills +SsoConnectionName= +SsoConnectionNameTeams= + +skill_EchoSkillBotDotNet_group=Echo +skill_EchoSkillBotDotNet_appId= +skill_EchoSkillBotDotNet_endpoint=http://localhost:35400/api/messages + +skill_EchoSkillBotDotNet21_group=Echo +skill_EchoSkillBotDotNet21_appId= +skill_EchoSkillBotDotNet21_endpoint=http://localhost:35405/api/messages + +skill_EchoSkillBotDotNetV3_group=Echo +skill_EchoSkillBotDotNetV3_appId= +skill_EchoSkillBotDotNetV3_endpoint=http://localhost:35407/api/messages + +skill_EchoSkillBotJS_group=Echo +skill_EchoSkillBotJS_appId= +skill_EchoSkillBotJS_endpoint=http://localhost:36400/api/messages + +skill_EchoSkillBotJSV3_group=Echo +skill_EchoSkillBotJSV3_appId= +skill_EchoSkillBotJSV3_endpoint=http://localhost:36407/api/messages + +skill_EchoSkillBotPython_group=Echo +skill_EchoSkillBotPython_appId= +skill_EchoSkillBotPython_endpoint=http://localhost:37400/api/messages + +skill_WaterfallSkillBotDotNet_group=Waterfall +skill_WaterfallSkillBotDotNet_appId= +skill_WaterfallSkillBotDotNet_endpoint=http://localhost:35420/api/messages + +skill_WaterfallSkillBotJS_group=Waterfall +skill_WaterfallSkillBotJS_appId= +skill_WaterfallSkillBotJS_endpoint=http://localhost:36420/api/messages + +skill_WaterfallSkillBotPython_group=Waterfall +skill_WaterfallSkillBotPython_appId= +skill_WaterfallSkillBotPython_endpoint=http://localhost:37420/api/messages + +skill_TeamsSkillBotDotNet_group=Teams +skill_TeamsSkillBotDotNet_appId= +skill_TeamsSkillBotDotNet_endpoint=http://localhost:35430/api/messages + +skill_TeamsSkillBotJS_group=Teams +skill_TeamsSkillBotJS_appId= +skill_TeamsSkillBotJS_endpoint=http://localhost:36430/api/messages + +skill_TeamsSkillBotPython_group=Teams +skill_TeamsSkillBotPython_appId= +skill_TeamsSkillBotPython_endpoint=http://localhost:37430/api/messages diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/.pylintrc b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/.pylintrc new file mode 100644 index 0000000000..0eb8d1d4f6 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/.pylintrc @@ -0,0 +1,590 @@ +[MASTER] + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. +extension-pkg-whitelist= + +# Add files or directories to the blacklist. They should be base names, not +# paths. +ignore= + +# Add files or directories matching the regex patterns to the blacklist. The +# regex matches against base names, not paths. +ignore-patterns= + +# Python code to execute, usually for sys.path manipulation such as +# pygtk.require(). +#init-hook= + +# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the +# number of processors available to use. +jobs=1 + +# Control the amount of potential inferred values when inferring a single +# object. This can help the performance when dealing with large functions or +# complex, nested conditions. +limit-inference-results=100 + +# List of plugins (as comma separated values of python modules names) to load, +# usually to register additional checkers. +load-plugins= + +# Pickle collected data for later comparisons. +persistent=yes + +# Specify a configuration file. +#rcfile= + +# When enabled, pylint would attempt to guess common misconfiguration and emit +# user-friendly hints instead of false-positive error messages. +suggestion-mode=yes + +# Allow loading of arbitrary C extensions. Extensions are imported into the +# active Python interpreter and may run arbitrary code. +unsafe-load-any-extension=no + + +[MESSAGES CONTROL] + +# Only show warnings with the listed confidence levels. Leave empty to show +# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED. +confidence= + +# Disable the message, report, category or checker with the given id(s). You +# can either give multiple identifiers separated by comma (,) or put this +# option multiple times (only on the command line, not in the configuration +# file where it should appear only once). You can also use "--disable=all" to +# disable everything first and then reenable specific checks. For example, if +# you want to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use "--disable=all --enable=classes +# --disable=W". +disable=print-statement, + parameter-unpacking, + unpacking-in-except, + old-raise-syntax, + backtick, + long-suffix, + old-ne-operator, + old-octal-literal, + import-star-module-level, + non-ascii-bytes-literal, + raw-checker-failed, + bad-inline-option, + locally-disabled, + file-ignored, + suppressed-message, + useless-suppression, + deprecated-pragma, + use-symbolic-message-instead, + apply-builtin, + basestring-builtin, + buffer-builtin, + cmp-builtin, + coerce-builtin, + execfile-builtin, + file-builtin, + long-builtin, + raw_input-builtin, + reduce-builtin, + standarderror-builtin, + unicode-builtin, + xrange-builtin, + coerce-method, + delslice-method, + getslice-method, + setslice-method, + no-absolute-import, + old-division, + dict-iter-method, + dict-view-method, + next-method-called, + metaclass-assignment, + indexing-exception, + raising-string, + reload-builtin, + oct-method, + hex-method, + nonzero-method, + cmp-method, + input-builtin, + round-builtin, + intern-builtin, + unichr-builtin, + map-builtin-not-iterating, + zip-builtin-not-iterating, + range-builtin-not-iterating, + filter-builtin-not-iterating, + using-cmp-argument, + eq-without-hash, + div-method, + idiv-method, + rdiv-method, + exception-message-attribute, + invalid-str-codec, + sys-max-int, + bad-python3-import, + deprecated-string-function, + deprecated-str-translate-call, + deprecated-itertools-function, + deprecated-types-field, + next-method-defined, + dict-items-not-iterating, + dict-keys-not-iterating, + dict-values-not-iterating, + deprecated-operator-function, + deprecated-urllib-function, + xreadlines-attribute, + deprecated-sys-function, + exception-escape, + comprehension-escape, + bad-continuation, + duplicate-code, + redefined-outer-name, + missing-docstring, + too-many-instance-attributes, + too-few-public-methods, + redefined-builtin, + too-many-arguments, + no-self-use, + fixme, + broad-except, + bare-except, + too-many-public-methods, + cyclic-import, + too-many-locals, + too-many-function-args, + too-many-return-statements, + import-error, + no-name-in-module, + too-many-branches + +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time (only on the command line, not in the configuration file where +# it should appear only once). See also the "--disable" option for examples. +enable=c-extension-no-member + + +[REPORTS] + +# Python expression which should return a note less than 10 (10 is the highest +# note). You have access to the variables errors warning, statement which +# respectively contain the number of errors / warnings messages and the total +# number of statements analyzed. This is used by the global evaluation report +# (RP0004). +evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) + +# Template used to display messages. This is a python new-style format string +# used to format the message information. See doc for all details. +#msg-template= + +# Set the output format. Available formats are text, parseable, colorized, json +# and msvs (visual studio). You can also give a reporter class, e.g. +# mypackage.mymodule.MyReporterClass. +output-format=text + +# Tells whether to display a full report or only the messages. +reports=no + +# Activate the evaluation score. +score=yes + + +[REFACTORING] + +# Maximum number of nested blocks for function / method body +max-nested-blocks=5 + +# Complete name of functions that never returns. When checking for +# inconsistent-return-statements if a never returning function is called then +# it will be considered as an explicit return statement and no message will be +# printed. +never-returning-functions=sys.exit + + +[LOGGING] + +# Format style used to check logging format string. `old` means using % +# formatting, while `new` is for `{}` formatting. +logging-format-style=old + +# Logging modules to check that the string format arguments are in logging +# function parameter format. +logging-modules=logging + + +[SPELLING] + +# Limits count of emitted suggestions for spelling mistakes. +max-spelling-suggestions=4 + +# Spelling dictionary name. Available dictionaries: none. To make it working +# install python-enchant package.. +spelling-dict= + +# List of comma separated words that should not be checked. +spelling-ignore-words= + +# A path to a file that contains private dictionary; one word per line. +spelling-private-dict-file= + +# Tells whether to store unknown words to indicated private dictionary in +# --spelling-private-dict-file option instead of raising a message. +spelling-store-unknown-words=no + + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME, + XXX, + TODO + + +[TYPECHECK] + +# List of decorators that produce context managers, such as +# contextlib.contextmanager. Add to this list to register other decorators that +# produce valid context managers. +contextmanager-decorators=contextlib.contextmanager + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E1101 when accessed. Python regular +# expressions are accepted. +generated-members= + +# Tells whether missing members accessed in mixin class should be ignored. A +# mixin class is detected if its name ends with "mixin" (case insensitive). +ignore-mixin-members=yes + +# Tells whether to warn about missing members when the owner of the attribute +# is inferred to be None. +ignore-none=yes + +# This flag controls whether pylint should warn about no-member and similar +# checks whenever an opaque object is returned when inferring. The inference +# can return multiple potential results while evaluating a Python object, but +# some branches might not be evaluated, which results in partial inference. In +# that case, it might be useful to still emit no-member and other checks for +# the rest of the inferred objects. +ignore-on-opaque-inference=yes + +# List of class names for which member attributes should not be checked (useful +# for classes with dynamically set attributes). This supports the use of +# qualified names. +ignored-classes=optparse.Values,thread._local,_thread._local + +# List of module names for which member attributes should not be checked +# (useful for modules/projects where namespaces are manipulated during runtime +# and thus existing member attributes cannot be deduced by static analysis. It +# supports qualified module names, as well as Unix pattern matching. +ignored-modules= + +# Show a hint with possible names when a member name was not found. The aspect +# of finding the hint is based on edit distance. +missing-member-hint=yes + +# The minimum edit distance a name should have in order to be considered a +# similar match for a missing member name. +missing-member-hint-distance=1 + +# The total number of similar names that should be taken in consideration when +# showing a hint for a missing member. +missing-member-max-choices=1 + + +[VARIABLES] + +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid defining new builtins when possible. +additional-builtins= + +# Tells whether unused global variables should be treated as a violation. +allow-global-unused-variables=yes + +# List of strings which can identify a callback function by name. A callback +# name must start or end with one of those strings. +callbacks=cb_, + _cb + +# A regular expression matching the name of dummy variables (i.e. expected to +# not be used). +dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ + +# Argument names that match this expression will be ignored. Default to name +# with leading underscore. +ignored-argument-names=_.*|^ignored_|^unused_ + +# Tells whether we should check for unused import in __init__ files. +init-import=no + +# List of qualified module names which can have objects that can redefine +# builtins. +redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io + + +[FORMAT] + +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +expected-line-ending-format= + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines=^\s*(# )??$ + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren=4 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=' ' + +# Maximum number of characters on a single line. +max-line-length=120 + +# Maximum number of lines in a module. +max-module-lines=1000 + +# List of optional constructs for which whitespace checking is disabled. `dict- +# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. +# `trailing-comma` allows a space between comma and closing bracket: (a, ). +# `empty-line` allows space-only lines. +no-space-check=trailing-comma, + dict-separator + +# Allow the body of a class to be on the same line as the declaration if body +# contains single statement. +single-line-class-stmt=no + +# Allow the body of an if to be on the same line as the test if there is no +# else. +single-line-if-stmt=no + + +[SIMILARITIES] + +# Ignore comments when computing similarities. +ignore-comments=yes + +# Ignore docstrings when computing similarities. +ignore-docstrings=yes + +# Ignore imports when computing similarities. +ignore-imports=no + +# Minimum lines number of a similarity. +min-similarity-lines=4 + + +[BASIC] + +# Naming style matching correct argument names. +argument-naming-style=snake_case + +# Regular expression matching correct argument names. Overrides argument- +# naming-style. +#argument-rgx= + +# Naming style matching correct attribute names. +attr-naming-style=snake_case + +# Regular expression matching correct attribute names. Overrides attr-naming- +# style. +#attr-rgx= + +# Bad variable names which should always be refused, separated by a comma. +bad-names=foo, + bar, + baz, + toto, + tutu, + tata + +# Naming style matching correct class attribute names. +class-attribute-naming-style=any + +# Regular expression matching correct class attribute names. Overrides class- +# attribute-naming-style. +#class-attribute-rgx= + +# Naming style matching correct class names. +class-naming-style=PascalCase + +# Regular expression matching correct class names. Overrides class-naming- +# style. +#class-rgx= + +# Naming style matching correct constant names. +const-naming-style=UPPER_CASE + +# Regular expression matching correct constant names. Overrides const-naming- +# style. +#const-rgx= + +# Minimum line length for functions/classes that require docstrings, shorter +# ones are exempt. +docstring-min-length=-1 + +# Naming style matching correct function names. +function-naming-style=snake_case + +# Regular expression matching correct function names. Overrides function- +# naming-style. +#function-rgx= + +# Good variable names which should always be accepted, separated by a comma. +good-names=i, + j, + k, + ex, + Run, + _ + +# Include a hint for the correct naming format with invalid-name. +include-naming-hint=no + +# Naming style matching correct inline iteration names. +inlinevar-naming-style=any + +# Regular expression matching correct inline iteration names. Overrides +# inlinevar-naming-style. +#inlinevar-rgx= + +# Naming style matching correct method names. +method-naming-style=snake_case + +# Regular expression matching correct method names. Overrides method-naming- +# style. +#method-rgx= + +# Naming style matching correct module names. +module-naming-style=snake_case + +# Regular expression matching correct module names. Overrides module-naming- +# style. +#module-rgx= + +# Colon-delimited sets of names that determine each other's naming style when +# the name regexes allow several styles. +name-group= + +# Regular expression which should only match function or class names that do +# not require a docstring. +no-docstring-rgx=^_ + +# List of decorators that produce properties, such as abc.abstractproperty. Add +# to this list to register other decorators that produce valid properties. +# These decorators are taken in consideration only for invalid-name. +property-classes=abc.abstractproperty + +# Naming style matching correct variable names. +variable-naming-style=snake_case + +# Regular expression matching correct variable names. Overrides variable- +# naming-style. +#variable-rgx= + + +[STRING] + +# This flag controls whether the implicit-str-concat-in-sequence should +# generate a warning on implicit string concatenation in sequences defined over +# several lines. +check-str-concat-over-line-jumps=no + + +[IMPORTS] + +# Allow wildcard imports from modules that define __all__. +allow-wildcard-with-all=no + +# Analyse import fallback blocks. This can be used to support both Python 2 and +# 3 compatible code, which means that the block might have code that exists +# only in one or another interpreter, leading to false positives when analysed. +analyse-fallback-blocks=no + +# Deprecated modules which should not be used, separated by a comma. +deprecated-modules=optparse,tkinter.tix + +# Create a graph of external dependencies in the given file (report RP0402 must +# not be disabled). +ext-import-graph= + +# Create a graph of every (i.e. internal and external) dependencies in the +# given file (report RP0402 must not be disabled). +import-graph= + +# Create a graph of internal dependencies in the given file (report RP0402 must +# not be disabled). +int-import-graph= + +# Force import order to recognize a module as part of the standard +# compatibility libraries. +known-standard-library= + +# Force import order to recognize a module as part of a third party library. +known-third-party=enchant + + +[CLASSES] + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__, + __new__, + setUp + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected=_asdict, + _fields, + _replace, + _source, + _make + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg=cls + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg=cls + + +[DESIGN] + +# Maximum number of arguments for function / method. +max-args=5 + +# Maximum number of attributes for a class (see R0902). +max-attributes=7 + +# Maximum number of boolean expressions in an if statement. +max-bool-expr=5 + +# Maximum number of branch for function / method body. +max-branches=12 + +# Maximum number of locals for function / method body. +max-locals=15 + +# Maximum number of parents for a class (see R0901). +max-parents=7 + +# Maximum number of public methods for a class (see R0904). +max-public-methods=20 + +# Maximum number of return / yield for function / method body. +max-returns=6 + +# Maximum number of statements in function / method body. +max-statements=50 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=2 + + +[EXCEPTIONS] + +# Exceptions that will emit a warning when being caught. Defaults to +# "BaseException, Exception". +overgeneral-exceptions=BaseException, + Exception diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/adapter_with_error_handler.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/adapter_with_error_handler.py new file mode 100644 index 0000000000..d2fc861c15 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/adapter_with_error_handler.py @@ -0,0 +1,140 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import sys +import traceback + +from botbuilder.core import ( + BotFrameworkAdapter, + BotFrameworkAdapterSettings, + ConversationState, + MessageFactory, + TurnContext, +) +from botbuilder.integration.aiohttp.skills import SkillHttpClient +from botbuilder.schema import ActivityTypes, Activity, InputHints + +from skills_configuration import DefaultConfig, SkillsConfiguration +from bots.root_bot import ACTIVE_SKILL_PROPERTY_NAME + + +class AdapterWithErrorHandler(BotFrameworkAdapter): + def __init__( + self, + settings: BotFrameworkAdapterSettings, + config: DefaultConfig, + conversation_state: ConversationState, + skill_client: SkillHttpClient = None, + skill_config: SkillsConfiguration = None, + ): + super().__init__(settings) + self._config = config + + if not conversation_state: + raise TypeError( + "AdapterWithErrorHandler: `conversation_state` argument cannot be None." + ) + self._conversation_state = conversation_state + self._skill_client = skill_client + self._skill_config = skill_config + + self.on_turn_error = self._handle_turn_error + + async def _handle_turn_error(self, turn_context: TurnContext, error: Exception): + # This check writes out errors to console log + # NOTE: In production environment, you should consider logging this to Azure + # application insights. + print(f"\n [on_turn_error] unhandled error: {error}", file=sys.stderr) + traceback.print_exc() + await self._send_error_message(turn_context, error) + await self._end_skill_conversation(turn_context, error) + await self._clear_conversation_state(turn_context) + + async def _send_error_message(self, turn_context: TurnContext, error: Exception): + if not self._skill_client or not self._skill_config: + return + try: + exc_info = sys.exc_info() + stack = traceback.format_exception(*exc_info) + + # Send a message to the user. + error_message_text = "The bot encountered an error or bug." + error_message = MessageFactory.text( + error_message_text, error_message_text, InputHints.ignoring_input + ) + error_message.value = {"message": error, "stack": stack} + await turn_context.send_activity(error_message) + + await turn_context.send_activity(f"Exception: {error}") + await turn_context.send_activity(traceback.format_exc()) + + error_message_text = ( + "To continue to run this bot, please fix the bot source code." + ) + error_message = MessageFactory.text( + error_message_text, error_message_text, InputHints.ignoring_input + ) + await turn_context.send_activity(error_message) + + # Send a trace activity, which will be displayed in Bot Framework Emulator. + await turn_context.send_trace_activity( + label="TurnError", + name="on_turn_error Trace", + value=f"{error}", + value_type="https://www.botframework.com/schemas/error", + ) + except Exception as exception: + print( + f"\n Exception caught in _send_error_message : {exception}", + file=sys.stderr, + ) + traceback.print_exc() + + async def _end_skill_conversation(self, turn_context: TurnContext): + if not self._skill_client or not self._skill_config: + return + + try: + # Inform the active skill that the conversation is ended so that it has a chance to clean up. + # Note: the root bot manages the ActiveSkillPropertyName, which has a value while the root bot + # has an active conversation with a skill. + active_skill = await self._conversation_state.create_property( + ACTIVE_SKILL_PROPERTY_NAME + ).get(turn_context) + + if active_skill: + bot_id = self._config.APP_ID + end_of_conversation = Activity(type=ActivityTypes.end_of_conversation) + end_of_conversation.code = "RootSkillError" + TurnContext.apply_conversation_reference( + end_of_conversation, + TurnContext.get_conversation_reference(turn_context.activity), + True, + ) + + await self._conversation_state.save_changes(turn_context, True) + await self._skill_client.post_activity_to_skill( + bot_id, + active_skill, + self._skill_config.SKILL_HOST_ENDPOINT, + end_of_conversation, + ) + except Exception as exception: + print( + f"\n Exception caught on _end_skill_conversation : {exception}", + file=sys.stderr, + ) + traceback.print_exc() + + async def _clear_conversation_state(self, turn_context: TurnContext): + try: + # Delete the conversationState for the current conversation to prevent the + # bot from getting stuck in an error-loop caused by being in a bad state. + # ConversationState should be thought of as similar to "cookie-state" for a Web page. + await self._conversation_state.delete(turn_context) + except Exception as exception: + print( + f"\n Exception caught on _clear_conversation_state : {exception}", + file=sys.stderr, + ) + traceback.print_exc() diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/app.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/app.py new file mode 100644 index 0000000000..63bdfd6db7 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/app.py @@ -0,0 +1,101 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from http import HTTPStatus + +from aiohttp import web +from aiohttp.web import Request, Response +from aiohttp.web_response import json_response +from botbuilder.core import ( + BotFrameworkAdapterSettings, + ConversationState, + MemoryStorage, + UserState, +) +from botbuilder.core.integration import ( + aiohttp_channel_service_routes, + aiohttp_error_middleware, +) +from botbuilder.schema import Activity +from botbuilder.integration.aiohttp.skills import SkillHttpClient +from botframework.connector.auth import ( + AuthenticationConfiguration, + SimpleCredentialProvider, +) + +from authentication import AllowedSkillsClaimsValidator +from bots import RootBot +from dialogs import MainDialog +from skills_configuration import DefaultConfig, SkillsConfiguration +from adapter_with_error_handler import AdapterWithErrorHandler +from skill_conversation_id_factory import SkillConversationIdFactory +from token_exchange_skill_handler import TokenExchangeSkillHandler + +CONFIG = DefaultConfig() +SKILL_CONFIG = SkillsConfiguration() + +# Create MemoryStorage, UserState and ConversationState +MEMORY = MemoryStorage() +USER_STATE = UserState(MEMORY) +CONVERSATION_STATE = ConversationState(MEMORY) +ID_FACTORY = SkillConversationIdFactory(MEMORY) + +CREDENTIAL_PROVIDER = SimpleCredentialProvider(CONFIG.APP_ID, CONFIG.APP_PASSWORD) +CLIENT = SkillHttpClient(CREDENTIAL_PROVIDER, ID_FACTORY) + +# Whitelist skills from SKILLS_CONFIG +AUTH_CONFIG = AuthenticationConfiguration( + claims_validator=AllowedSkillsClaimsValidator(SKILL_CONFIG).claims_validator +) + +# Create adapter. +# See https://aka.ms/about-bot-adapter to learn more about how bots work. +SETTINGS = BotFrameworkAdapterSettings(CONFIG.APP_ID, CONFIG.APP_PASSWORD) +ADAPTER = AdapterWithErrorHandler( + SETTINGS, CONFIG, CONVERSATION_STATE, CLIENT, SKILL_CONFIG +) + +DIALOG = MainDialog(CONVERSATION_STATE, ID_FACTORY, CLIENT, SKILL_CONFIG, CONFIG) + +# Create the Bot +BOT = RootBot(CONVERSATION_STATE, DIALOG) + +SKILL_HANDLER = TokenExchangeSkillHandler( + ADAPTER, + BOT, + CONFIG, + ID_FACTORY, + SKILL_CONFIG, + CLIENT, + CREDENTIAL_PROVIDER, + AUTH_CONFIG, +) + + +# Listen for incoming requests on /api/messages +async def messages(req: Request) -> Response: + # Main bot message handler. + if "application/json" in req.headers["Content-Type"]: + body = await req.json() + else: + return Response(status=HTTPStatus.UNSUPPORTED_MEDIA_TYPE) + + activity = Activity().deserialize(body) + auth_header = req.headers["Authorization"] if "Authorization" in req.headers else "" + + invoke_response = await ADAPTER.process_activity(activity, auth_header, BOT.on_turn) + if invoke_response: + return json_response(data=invoke_response.body, status=invoke_response.status) + return Response(status=HTTPStatus.OK) + + +APP = web.Application(middlewares=[aiohttp_error_middleware]) +APP.router.add_post("/api/messages", messages) +APP.router.add_get("/api/messages", messages) +APP.router.add_routes(aiohttp_channel_service_routes(SKILL_HANDLER, "/api/skills")) + +if __name__ == "__main__": + try: + web.run_app(APP, host="localhost", port=CONFIG.PORT) + except Exception as error: + raise error diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/authentication/__init__.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/authentication/__init__.py new file mode 100644 index 0000000000..550f9b54b6 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/authentication/__init__.py @@ -0,0 +1,6 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from .allowed_skills_claims_validator import AllowedSkillsClaimsValidator + +__all__ = ["AllowedSkillsClaimsValidator"] diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/authentication/allowed_skills_claims_validator.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/authentication/allowed_skills_claims_validator.py new file mode 100644 index 0000000000..69bfddabc8 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/authentication/allowed_skills_claims_validator.py @@ -0,0 +1,33 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from typing import Awaitable, Callable, Dict, List +from botframework.connector.auth import JwtTokenValidation, SkillValidation +from skills_configuration import SkillsConfiguration + + +class AllowedSkillsClaimsValidator: + def __init__(self, skills_config: SkillsConfiguration): + if not skills_config: + raise TypeError( + "AllowedSkillsClaimsValidator: config object cannot be None." + ) + + skills_list = [skill.app_id for skill in skills_config.SKILLS.values()] + self._allowed_skills = frozenset(skills_list) + + @property + def claims_validator(self) -> Callable[[List[Dict]], Awaitable]: + async def allow_callers_claims_validator(claims: Dict[str, object]): + if SkillValidation.is_skill_claim(claims): + # Check that the appId claim in the skill request is in the list of skills configured for this bot. + app_id = JwtTokenValidation.get_app_id_from_claims(claims) + if app_id not in self._allowed_skills: + raise PermissionError( + f'Received a request from a bot with an app ID of "{app_id}".' + f" To enable requests from this caller, add the app ID to your configuration file." + ) + + return + + return allow_callers_claims_validator diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/bots/__init__.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/bots/__init__.py new file mode 100644 index 0000000000..6a5060f62f --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/bots/__init__.py @@ -0,0 +1,7 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from .root_bot import RootBot + + +__all__ = ["RootBot"] diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/bots/root_bot.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/bots/root_bot.py new file mode 100644 index 0000000000..3ad5213c8a --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/bots/root_bot.py @@ -0,0 +1,84 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import json +import os.path +from typing import List +from botbuilder.core import ( + ActivityHandler, + ConversationState, + MessageFactory, + TurnContext, +) +from botbuilder.dialogs import Dialog, DialogExtensions +from botbuilder.schema import ActivityTypes, ChannelAccount, Attachment + +DELIVERY_MODE_PROPERTY_NAME = "deliveryModeProperty" +ACTIVE_SKILL_PROPERTY_NAME = "activeSkillProperty" + + +class RootBot(ActivityHandler): + def __init__( + self, + conversation_state: ConversationState, + main_dialog: Dialog, + ): + self._conversation_state = conversation_state + self._main_dialog = main_dialog + + self._dialog_state_property = conversation_state.create_property("DialogState") + + # Create state property to track the delivery mode and active skill. + self._delivery_mode_property = conversation_state.create_property( + DELIVERY_MODE_PROPERTY_NAME + ) + self._active_skill_property = conversation_state.create_property( + ACTIVE_SKILL_PROPERTY_NAME + ) + + async def on_turn(self, turn_context: TurnContext): + if turn_context.activity.type != ActivityTypes.conversation_update: + # Run the Dialog with the Activity. + await DialogExtensions.run_dialog( + self._main_dialog, + turn_context, + self._dialog_state_property, + ) + else: + # Let the base class handle the activity. + await super().on_turn(turn_context) + + # Save any state changes that might have occurred during the turn. + await self._conversation_state.save_changes(turn_context) + + async def on_members_added_activity( + self, members_added: List[ChannelAccount], turn_context: TurnContext + ): + # Greet anyone that was not the target (recipient) of this message. + # To learn more about Adaptive Cards, see https://aka.ms/msbot-adaptivecards. + for member in members_added: + if member.id != turn_context.activity.recipient.id: + welcome_card = self._create_adaptive_card_attachment() + activity = MessageFactory.attachment(welcome_card) + activity.speak = "Welcome to the waterfall host bot" + await turn_context.send_activity(activity) + await DialogExtensions.run_dialog( + self._main_dialog, + turn_context, + self._dialog_state_property, + ) + + @staticmethod + def _create_adaptive_card_attachment() -> Attachment: + """ + Load attachment from embedded resource. + """ + + relative_path = os.path.abspath(os.path.dirname(__file__)) + path = os.path.join(relative_path, "../cards/welcomeCard.json") + with open(path) as in_file: + card = json.load(in_file) + + return Attachment( + content_type="application/vnd.microsoft.card.adaptive", content=card + ) diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/cards/welcomeCard.json b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/cards/welcomeCard.json new file mode 100644 index 0000000000..0cb25e2570 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/cards/welcomeCard.json @@ -0,0 +1,29 @@ +{ + "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", + "type": "AdaptiveCard", + "version": "1.0", + "body": [ + { + "type": "Image", + "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQtB3AwMUeNoq4gUBGe6Ocj8kyh3bXa9ZbV7u1fVKQoyKFHdkqU", + "size": "stretch" + }, + { + "type": "TextBlock", + "spacing": "Medium", + "size": "Medium", + "weight": "Bolder", + "text": "Welcome to the Skill Dialog Sample!", + "wrap": true, + "maxLines": 0, + "color": "Accent" + }, + { + "type": "TextBlock", + "size": "default", + "text": "This sample allows you to connect to a skill using a SkillDialog and invoke several actions.", + "wrap": true, + "maxLines": 0 + } + ] +} \ No newline at end of file diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/__init__.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/__init__.py new file mode 100644 index 0000000000..3f3a5f6f9a --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/__init__.py @@ -0,0 +1,8 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from .main_dialog import MainDialog +from .tangent_dialog import TangentDialog +from .sso import SsoDialog, SsoSignInDialog + +__all__ = ["MainDialog", "TangentDialog", "SsoDialog", "SsoSignInDialog"] diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/main_dialog.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/main_dialog.py new file mode 100644 index 0000000000..46981efa20 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/main_dialog.py @@ -0,0 +1,456 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import copy +import json + +from botbuilder.dialogs import ( + ComponentDialog, + DialogContext, + WaterfallDialog, + WaterfallStepContext, + DialogTurnResult, + ListStyle, +) +from botbuilder.dialogs.choices import Choice, FoundChoice +from botbuilder.dialogs.prompts import ( + PromptOptions, + ChoicePrompt, +) +from botbuilder.dialogs.skills import ( + SkillDialogOptions, + SkillDialog, + BeginSkillDialogOptions, +) +from botbuilder.core import ConversationState, MessageFactory, TurnContext +from botbuilder.core.skills import ConversationIdFactoryBase +from botbuilder.schema import Activity, ActivityTypes, InputHints, DeliveryModes +from botbuilder.integration.aiohttp.skills import SkillHttpClient + +from skills_configuration import SkillsConfiguration, DefaultConfig + +from dialogs.tangent_dialog import TangentDialog +from dialogs.sso.sso_dialog import SsoDialog + +SSO_DIALOG_PREFIX = "Sso" +ACTIVE_SKILL_PROPERTY_NAME = "MainDialog.ActiveSkillProperty" +DELIVERY_MODE_NAME = "MainDialog.DeliveryMode" +SELECTED_SKILL_KEY_NAME = "MainDialog.SelectedSkillKey" +JUST_FORWARD_THE_ACTIVITY = "JustForwardTurnContext.Activity" + +DELIVERY_MODE_PROMPT = "DeliveryModePrompt" +SKILL_GROUP_PROMPT = "SkillGroupPrompt" +SKILL_PROMPT = "SkillPrompt" +SKILL_ACTION_PROMPT = "SkillActionPrompt" + + +class MainDialog(ComponentDialog): + def __init__( + self, + conversation_state: ConversationState, + conversation_id_factory: ConversationIdFactoryBase, + skill_client: SkillHttpClient, + skills_config: SkillsConfiguration, + configuration: DefaultConfig, + ): + super().__init__(MainDialog.__name__) + + self._configuration = configuration + if not self._configuration: + raise TypeError( + "[MainDialog]: Missing parameter. configuration is required" + ) + + bot_id = self._configuration.APP_ID + + self._skills_config = skills_config + if not self._skills_config: + raise TypeError( + "[MainDialog]: Missing parameter. skills_config is required" + ) + + if not skill_client: + raise TypeError("[MainDialog]: Missing parameter. skill_client is required") + + if not conversation_state: + raise TypeError( + "[MainDialog]: Missing parameter. conversation_state is required" + ) + + if not conversation_id_factory: + raise TypeError( + "[MainDialog]: Missing parameter. conversation_id_factory is required" + ) + + # Use helper method to add SkillDialog instances for the configured skills. + self._add_skill_dialogs( + conversation_state, + conversation_id_factory, + skill_client, + skills_config, + bot_id, + ) + + # Create state property to track the active skill. + self.active_skill_property = conversation_state.create_property( + ACTIVE_SKILL_PROPERTY_NAME + ) + + # Register the tangent dialog for testing tangents and resume. + self.add_dialog(TangentDialog()) + + # Add ChoicePrompt to render available delivery modes. + self.add_dialog(ChoicePrompt(DELIVERY_MODE_PROMPT)) + + # Add ChoicePrompt to render available types of skill. + self.add_dialog(ChoicePrompt(SKILL_GROUP_PROMPT)) + + # Add ChoicePrompt to render available skills. + self.add_dialog(ChoicePrompt(SKILL_PROMPT)) + + # Add ChoicePrompt to render skill actions. + self.add_dialog(ChoicePrompt(SKILL_ACTION_PROMPT)) + + # Special case: register SSO dialogs for skills that support SSO actions. + self._add_sso_dialogs(self._configuration) + + # Add main waterfall dialog for this bot. + self.add_dialog( + WaterfallDialog( + WaterfallDialog.__name__, + [ + self._select_delivery_mode_step, + self._select_skill_group_step, + self._select_skill_step, + self._select_skill_action_step, + self._call_skill_action_step, + self._final_step, + ], + ) + ) + + self.initial_dialog_id = WaterfallDialog.__name__ + + async def on_continue_dialog(self, inner_dc: DialogContext): + """ + This override is used to test the "abort" command to interrupt skills from the parent and + also to test the "tangent" command to start a tangent and resume a skill. + """ + + # This is an example on how to cancel a SkillDialog that is currently in progress from the parent bot. + active_skill = await self.active_skill_property.get(inner_dc.context) + activity = inner_dc.context.activity + + if ( + active_skill + and activity.type == ActivityTypes.message + and activity.text + and "abort" in activity.text.lower() + ): + # Cancel all dialogs when the user says abort. + # The SkillDialog automatically sends an EndOfConversation message to the skill to let the + # skill know that it needs to end its current dialogs, too. + await inner_dc.cancel_all_dialogs() + return await inner_dc.replace_dialog( + self.initial_dialog_id, + "Canceled! \n\n What delivery mode would you like to use?", + ) + + # Sample to test a tangent when in the middle of a skill conversation. + if ( + active_skill + and activity.type == ActivityTypes.message + and activity.text + and activity.text.lower() == "tangent" + ): + # Start tangent. + return await inner_dc.begin_dialog(TangentDialog.__name__) + + return await super().on_continue_dialog(inner_dc) + + async def _select_delivery_mode_step( + self, step_context: WaterfallStepContext + ) -> DialogTurnResult: + """ + Render a prompt to select the delivery mode to use. + """ + + # Create the PromptOptions with the delivery modes supported. + message_text = ( + str(step_context.options) + if step_context.options + else "What delivery mode would you like to use?" + ) + retry_message_text = ( + "That was not a valid choice, please select a valid delivery mode." + ) + + options = PromptOptions( + prompt=MessageFactory.text( + message_text, message_text, InputHints.expecting_input + ), + retry_prompt=MessageFactory.text( + retry_message_text, retry_message_text, InputHints.expecting_input + ), + choices=[ + Choice(DeliveryModes.normal.value), + Choice(DeliveryModes.expect_replies.value), + ], + ) + + # Prompt the user to select a delivery mode. + return await step_context.prompt(DELIVERY_MODE_PROMPT, options) + + async def _select_skill_group_step(self, step_context: WaterfallStepContext): + """ + Render a prompt to select the group of skills to use. + """ + + # Remember the delivery mode selected by the user. + step_context.values[DELIVERY_MODE_NAME] = step_context.result.value + + # Create the PromptOptions with the types of supported skills. + message_text = "What group of skills would you like to use?" + retry_message_text = ( + "That was not a valid choice, please select a valid skill group." + ) + + choices = [] + groups = [] + for skill in self._skills_config.SKILLS.values(): + if skill.group not in groups: + groups.append(skill.group) + choices.append(Choice(skill.group)) + + options = PromptOptions( + prompt=MessageFactory.text( + message_text, message_text, InputHints.expecting_input + ), + retry_prompt=MessageFactory.text( + retry_message_text, retry_message_text, InputHints.expecting_input + ), + choices=choices, + ) + + # Prompt the user to select a type of skill. + return await step_context.prompt(SKILL_GROUP_PROMPT, options) + + async def _select_skill_step( + self, step_context: WaterfallStepContext + ) -> DialogTurnResult: + """ + Render a prompt to select the skill to call. + """ + + skill_group = step_context.result.value + + # Create the PromptOptions from the skill configuration which contain the list of configured skills. + message_text = "What skill would you like to call?" + retry_message_text = "That was not a valid choice, please select a valid skill." + + options = PromptOptions( + prompt=MessageFactory.text( + message_text, message_text, InputHints.expecting_input + ), + retry_prompt=MessageFactory.text( + retry_message_text, retry_message_text, InputHints.expecting_input + ), + style=ListStyle.list_style, + choices=[ + Choice(skill.id) + for skill in self._skills_config.SKILLS.values() + if skill.group.lower().startswith(skill_group.lower()) + ], + ) + + # Prompt the user to select a skill. + return await step_context.prompt(SKILL_PROMPT, options) + + async def _select_skill_action_step(self, step_context: WaterfallStepContext): + """ + Render a prompt to select the begin action for the skill. + """ + + # Get the skill info based on the selected skill. + selected_skill_id = step_context.result.value + delivery_mode = str(step_context.values[DELIVERY_MODE_NAME]) + v3_bots = ["EchoSkillBotDotNetV3", "EchoSkillBotJSV3"] + + # Exclude v3 bots from ExpectReplies + if ( + delivery_mode == DeliveryModes.expect_replies + and selected_skill_id in v3_bots + ): + await step_context.context.send_activity( + MessageFactory.text( + "V3 Bots do not support 'expectReplies' delivery mode." + ) + ) + + # Restart setup dialog + return await step_context.replace_dialog(self.initial_dialog_id) + + selected_skill = next( + val + for key, val in self._skills_config.SKILLS.items() + if val.id == selected_skill_id + ) + + # Remember the skill selected by the user. + step_context.values[SELECTED_SKILL_KEY_NAME] = selected_skill + + skill_action_choices = [ + Choice(action) for action in selected_skill.get_actions() + ] + if len(skill_action_choices) == 1: + # The skill only supports one action (e.g. Echo), skip the prompt. + return await step_context.next( + FoundChoice(value=skill_action_choices[0].value, index=0, score=0) + ) + + # Create the PromptOptions with the actions supported by the selected skill. + message_text = f"Select an action to send to **{selected_skill.id}**." + + options = PromptOptions( + prompt=MessageFactory.text( + message_text, message_text, InputHints.expecting_input + ), + choices=skill_action_choices, + ) + + # Prompt the user to select a skill action. + return await step_context.prompt(SKILL_ACTION_PROMPT, options) + + async def _call_skill_action_step(self, step_context: WaterfallStepContext): + """ + Starts the SkillDialog based on the user's selections. + """ + + selected_skill = step_context.values[SELECTED_SKILL_KEY_NAME] + + # Save active skill in state. + await self.active_skill_property.set(step_context.context, selected_skill) + + # Create the initial activity to call the skill. + skill_activity = self._create_begin_activity( + step_context.context, selected_skill.id, step_context.result.value + ) + + if skill_activity.name == "Sso": + # Special case, we start the SSO dialog to prepare the host to call the skill. + return await step_context.begin_dialog( + f"{SSO_DIALOG_PREFIX}{selected_skill.id}" + ) + + # We are manually creating the activity to send to the skill; ensure we add the ChannelData and Properties + # from the original activity so the skill gets them. + # Note: this is not necessary if we are just forwarding the current activity from context. + skill_activity.channel_data = step_context.context.activity.channel_data + skill_activity.additional_properties = ( + step_context.context.activity.additional_properties + ) + + # Create the BeginSkillDialogOptions and assign the activity to send. + skill_dialog_args = BeginSkillDialogOptions(activity=skill_activity) + if str(step_context.values[DELIVERY_MODE_NAME]) == DeliveryModes.expect_replies: + skill_dialog_args.activity.delivery_mode = DeliveryModes.expect_replies + + # Start the skillDialog instance with the arguments. + return await step_context.begin_dialog(selected_skill.id, skill_dialog_args) + + async def _final_step(self, step_context: WaterfallStepContext): + """ + The SkillDialog has ended, render the results (if any) and restart MainDialog. + """ + + active_skill = await self.active_skill_property.get(step_context.context) + + # Check if the skill returned any results and display them. + if step_context.result: + message = f'Skill "{active_skill.id}" invocation complete.' + message += f" Result: {json.dumps(step_context.result)}" + await step_context.context.send_activity( + MessageFactory.text(message, message, InputHints.ignoring_input) + ) + + # Clear the delivery mode selected by the user. + step_context.values[DELIVERY_MODE_NAME] = None + + # Clear the skill selected by the user. + step_context.values[SELECTED_SKILL_KEY_NAME] = None + + # Clear active skill in state. + await self.active_skill_property.delete(step_context.context) + + # Restart the main dialog with a different message the second time around. + return await step_context.replace_dialog( + self.initial_dialog_id, + f'Done with "{active_skill.id}". \n\n What delivery mode would you ' + f"like to use?", + ) + + def _add_skill_dialogs( + self, + conversation_state: ConversationState, + conversation_id_factory: ConversationIdFactoryBase, + skill_client: SkillHttpClient, + skills_config: SkillsConfiguration, + bot_id: str, + ): + """ + Helper method that creates and adds SkillDialog instances for the configured skills. + """ + + for skill_info in self._skills_config.SKILLS.values(): + # Create the dialog options. + skill_dialog_options = SkillDialogOptions( + bot_id=bot_id, + conversation_id_factory=conversation_id_factory, + skill_client=skill_client, + skill_host_endpoint=skills_config.SKILL_HOST_ENDPOINT, + conversation_state=conversation_state, + skill=skill_info, + ) + + # Add a SkillDialog for the selected skill. + self.add_dialog(SkillDialog(skill_dialog_options, skill_info.id)) + + def _create_begin_activity( + self, context: TurnContext, skill_id: str, selected_option: str + ): + if selected_option.lower() == JUST_FORWARD_THE_ACTIVITY.lower(): + # Note message activities also support input parameters but we are not using them in this example. + # Return a deep clone of the activity so we don't risk altering the original one + return copy.deepcopy(context.activity) + + # Get the begin activity from the skill instance. + activity: Activity = self._skills_config.SKILLS[skill_id].create_begin_activity( + selected_option + ) + + # We are manually creating the activity to send to the skill; ensure we add the ChannelData and Properties + # from the original activity so the skill gets them. + # Note: this is not necessary if we are just forwarding the current activity from context. + activity.channel_data = context.activity.channel_data + activity.additional_properties = context.activity.additional_properties + + return activity + + # Special case. + # SSO needs a dialog in the host to allow the user to sign in. + # We create and several SsoDialog instances for each skill that supports SSO. + def _add_sso_dialogs(self, configuration: DefaultConfig): + connection_name = configuration.SSO_CONNECTION_NAME + + for sso_skill_dialog in [ + skill_dialog + for skill_dialog in self._dialogs._dialogs.values() # pylint: disable=W0212 + if skill_dialog.id.startswith("WATERFALLSKILL") + ]: + self.add_dialog( + SsoDialog( + f"{SSO_DIALOG_PREFIX}{sso_skill_dialog.id}", + sso_skill_dialog, + connection_name, + ) + ) diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/__init__.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/__init__.py new file mode 100644 index 0000000000..f489fd4fae --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/__init__.py @@ -0,0 +1,7 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from .sso_dialog import SsoDialog +from .sso_signin_dialog import SsoSignInDialog + +__all__ = ["SsoDialog", "SsoSignInDialog"] diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/sso_dialog.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/sso_dialog.py new file mode 100644 index 0000000000..1145358a33 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/sso_dialog.py @@ -0,0 +1,137 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from botbuilder.dialogs import ( + ComponentDialog, + WaterfallDialog, + WaterfallStepContext, + Choice, + ChoicePrompt, + PromptOptions, + Dialog, + BeginSkillDialogOptions, +) +from botbuilder.core import MessageFactory +from botbuilder.dialogs.dialog_turn_result import DialogTurnResult +from botbuilder.dialogs.dialog_turn_status import DialogTurnStatus +from botbuilder.schema import Activity, ActivityTypes, InputHints + +from .sso_signin_dialog import SsoSignInDialog + + +class SsoDialog(ComponentDialog): + """ + Helps prepare the host for SSO operations and provides helpers to check the status and invoke the skill. + """ + + def __init__(self, dialog_id: str, sso_skill_dialog: Dialog, connection_name): + super().__init__(dialog_id) + + self._connection_name = connection_name + self.skill_dialog_id = sso_skill_dialog.id + + self.add_dialog(ChoicePrompt(ChoicePrompt.__name__)) + self.add_dialog(SsoSignInDialog(self._connection_name)) + self.add_dialog(sso_skill_dialog) + + self.add_dialog( + WaterfallDialog( + WaterfallDialog.__name__, + [ + self.prompt_action_step, + self.handle_action_step, + self.prompt_final_step, + ], + ) + ) + + self.initial_dialog_id = WaterfallDialog.__name__ + + async def prompt_action_step(self, step_context: WaterfallStepContext): + message_text = "What SSO action do you want to perform?" + reprompt_message_text = ( + "That was not a valid choice, please select a valid choice." + ) + + options = PromptOptions( + prompt=MessageFactory.text( + message_text, message_text, InputHints.expecting_input + ), + retry_prompt=MessageFactory.text( + reprompt_message_text, reprompt_message_text, InputHints.expecting_input + ), + choices=await self.get_prompt_choices(step_context), + ) + + # Prompt the user to select an SSO action. + return await step_context.prompt(ChoicePrompt.__name__, options) + + async def get_prompt_choices(self, step_context: WaterfallStepContext): + """ + Create the prompt choices based on the current sign in status + """ + + prompt_choices = list() + token = await step_context.context.adapter.get_user_token( + step_context.context, self._connection_name + ) + + if token is None: + prompt_choices.append(Choice("Login")) + + # Token exchange will fail when the host is not logged on and the skill should + # show a regular OAuthPrompt + prompt_choices.append(Choice("Call Skill (without SSO)")) + else: + prompt_choices.append(Choice("Logout")) + prompt_choices.append(Choice("Show token")) + prompt_choices.append(Choice("Call Skill (with SSO)")) + + prompt_choices.append(Choice("Back")) + + return prompt_choices + + async def handle_action_step(self, step_context: WaterfallStepContext): + action = str(step_context.result.value).lower() + + if action == "login": + return await step_context.begin_dialog(SsoSignInDialog.__name__) + + if action == "logout": + await step_context.context.adapter.sign_out_user( + step_context.context, self._connection_name + ) + await step_context.context.send_activity("You have been signed out.") + return await step_context.next(step_context.result) + + if action == "show token": + token = await step_context.context.adapter.get_user_token( + step_context.context, self._connection_name + ) + + if token is None: + await step_context.context.send_activity("User has no cached token.") + else: + await step_context.context.send_activity( + f"Here is your current SSO token: { token.token }" + ) + + return await step_context.next(step_context.result) + + if action in ["call skill (with sso)", "call skill (without sso)"]: + begin_skill_activity = Activity(type=ActivityTypes.event, name="Sso") + + return await step_context.begin_dialog( + self.skill_dialog_id, + BeginSkillDialogOptions(activity=begin_skill_activity), + ) + + if action == "back": + return DialogTurnResult(DialogTurnStatus.Complete) + + # This should never be hit since the previous prompt validates the choice + raise Exception(f"Unrecognized action: {action}") + + async def prompt_final_step(self, step_context: WaterfallStepContext): + # Restart the dialog (we will exit when the user says end) + return await step_context.replace_dialog(self.initial_dialog_id) diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/sso_signin_dialog.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/sso_signin_dialog.py new file mode 100644 index 0000000000..242679dc36 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/sso_signin_dialog.py @@ -0,0 +1,57 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from botbuilder.dialogs import ( + ComponentDialog, + WaterfallDialog, + WaterfallStepContext, + OAuthPrompt, + OAuthPromptSettings, +) + + +class SsoSignInDialog(ComponentDialog): + def __init__(self, connection_name: str): + super().__init__(SsoSignInDialog.__name__) + + self.add_dialog( + OAuthPrompt( + OAuthPrompt.__name__, + OAuthPromptSettings( + connection_name=connection_name, + text=f"Sign in to the host bot using AAD for SSO and connection {connection_name}", + title="Sign In", + timeout=60000, + ), + ) + ) + + self.add_dialog( + WaterfallDialog( + WaterfallDialog.__name__, + [ + self.signin_step, + self.display_token, + ], + ) + ) + + self.initial_dialog_id = WaterfallDialog.__name__ + + async def signin_step(self, step_context: WaterfallStepContext): + return await step_context.begin_dialog(OAuthPrompt.__name__) + + async def display_token(self, step_context: WaterfallStepContext): + sso_token = step_context.result + if sso_token: + if isinstance(sso_token, dict): + token = sso_token.get("token") + else: + token = sso_token.token + + await step_context.context.send_activity(f"Here is your token: {token}") + + else: + await step_context.context.send_activity("No token was provided.") + + return await step_context.end_dialog() diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/tangent_dialog.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/tangent_dialog.py new file mode 100644 index 0000000000..957aba021b --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/tangent_dialog.py @@ -0,0 +1,51 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from botbuilder.dialogs import ( + ComponentDialog, + WaterfallDialog, + WaterfallStepContext, + TextPrompt, + PromptOptions, +) +from botbuilder.core import MessageFactory +from botbuilder.schema import InputHints + + +class TangentDialog(ComponentDialog): + """ + A simple waterfall dialog used to test triggering tangents from "MainDialog". + """ + + def __init__(self): + super().__init__(TangentDialog.__name__) + + self.add_dialog(TextPrompt(TextPrompt.__name__)) + self.add_dialog( + WaterfallDialog( + WaterfallDialog.__name__, [self._step_1, self._step_2, self._end_step] + ) + ) + + self.initial_dialog_id = WaterfallDialog.__name__ + + async def _step_1(self, step_context: WaterfallStepContext): + message_text = "Tangent step 1 of 2, say something." + prompt_message = MessageFactory.text( + message_text, message_text, InputHints.expecting_input + ) + return await step_context.prompt( + TextPrompt.__name__, PromptOptions(prompt=prompt_message) + ) + + async def _step_2(self, step_context: WaterfallStepContext): + message_text = "Tangent step 2 of 2, say something." + prompt_message = MessageFactory.text( + message_text, message_text, InputHints.expecting_input + ) + return await step_context.prompt( + TextPrompt.__name__, PromptOptions(prompt=prompt_message) + ) + + async def _end_step(self, step_context: WaterfallStepContext): + return await step_context.end_dialog() diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/helpers/dialog_helper.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/helpers/dialog_helper.py new file mode 100644 index 0000000000..6b2646b0ba --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/helpers/dialog_helper.py @@ -0,0 +1,19 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from botbuilder.core import StatePropertyAccessor, TurnContext +from botbuilder.dialogs import Dialog, DialogSet, DialogTurnStatus + + +class DialogHelper: + @staticmethod + async def run_dialog( + dialog: Dialog, turn_context: TurnContext, accessor: StatePropertyAccessor + ): + dialog_set = DialogSet(accessor) + dialog_set.add(dialog) + + dialog_context = await dialog_set.create_context(turn_context) + results = await dialog_context.continue_dialog() + if results.status == DialogTurnStatus.Empty: + await dialog_context.begin_dialog(dialog.id) diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/requirements.txt b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/requirements.txt new file mode 100644 index 0000000000..02460b14f9 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/requirements.txt @@ -0,0 +1,3 @@ +botbuilder-integration-aiohttp>=4.13.0 +botbuilder-dialogs>=4.13.0 +python-dotenv~=0.15.0 diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skill_conversation_id_factory.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skill_conversation_id_factory.py new file mode 100644 index 0000000000..06c5e5a2f5 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skill_conversation_id_factory.py @@ -0,0 +1,76 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from typing import Union + +from botbuilder.core import Storage, TurnContext +from botbuilder.core.skills import ( + ConversationIdFactoryBase, + SkillConversationIdFactoryOptions, + SkillConversationReference, +) +from botbuilder.schema import ConversationReference + + +class SkillConversationIdFactory(ConversationIdFactoryBase): + def __init__(self, storage: Storage): + if not storage: + raise TypeError("storage can't be None") + + self._storage = storage + + async def create_skill_conversation_id( + self, + options_or_conversation_reference: Union[ + SkillConversationIdFactoryOptions, ConversationReference + ], + ) -> str: + if not options_or_conversation_reference: + raise TypeError("Need options or conversation reference") + + if not isinstance( + options_or_conversation_reference, SkillConversationIdFactoryOptions + ): + raise TypeError( + "This SkillConversationIdFactory can only handle SkillConversationIdFactoryOptions" + ) + + options = options_or_conversation_reference + + # Create the storage key based on the SkillConversationIdFactoryOptions. + conversation_reference = TurnContext.get_conversation_reference( + options.activity + ) + skill_conversation_id = ( + f"{conversation_reference.conversation.id}" + f"-{options.bot_framework_skill.id}" + f"-{conversation_reference.channel_id}" + f"-skillconvo" + ) + + # Create the SkillConversationReference instance. + skill_conversation_reference = SkillConversationReference( + conversation_reference=conversation_reference, + oauth_scope=options.from_bot_oauth_scope, + ) + + # Store the SkillConversationReference using the skill_conversation_id as a key. + skill_conversation_info = {skill_conversation_id: skill_conversation_reference} + await self._storage.write(skill_conversation_info) + + # Return the generated skill_conversation_id (that will be also used as the conversation ID to call the skill). + return skill_conversation_id + + async def get_conversation_reference( + self, skill_conversation_id: str + ) -> Union[SkillConversationReference, ConversationReference]: + if not skill_conversation_id: + raise TypeError("skill_conversation_id can't be None") + + # Get the SkillConversationReference from storage for the given skill_conversation_id. + skill_conversation_info = await self._storage.read([skill_conversation_id]) + + return skill_conversation_info.get(skill_conversation_id) + + async def delete_conversation_reference(self, skill_conversation_id: str): + await self._storage.delete([skill_conversation_id]) diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/echo_skill.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/echo_skill.py new file mode 100644 index 0000000000..560f0adb14 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/echo_skill.py @@ -0,0 +1,25 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from enum import Enum +from botbuilder.schema import Activity +from skills.skill_definition import SkillDefinition + + +class EchoSkill(SkillDefinition): + class SkillAction(str, Enum): + MESSAGE = "Message" + + def get_actions(self): + return self.SkillAction + + def create_begin_activity(self, action_id: str): + if action_id not in self.SkillAction: + raise Exception(f'Unable to create begin activity for "${action_id}".') + + # We only support one activity for Echo so no further checks are needed + activity = Activity.create_message_activity() + activity.name = self.SkillAction.MESSAGE.value + activity.text = "Begin the Echo Skill" + + return activity diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/skill_definition.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/skill_definition.py new file mode 100644 index 0000000000..3e0d43e498 --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/skill_definition.py @@ -0,0 +1,25 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from botbuilder.core.skills import BotFrameworkSkill + + +class SkillDefinition(BotFrameworkSkill): + """ + Extends BotFrameworkSkill and provides methods to return the actions and the begin activity + to start a skill. + This class also exposes a group property to render skill groups and narrow down the available + options. + Remarks: This is just a temporary implementation, ideally, this should be replaced by logic that + parses a manifest and creates what's needed. + """ + + def __init__(self, id: str = None, group: str = None): + super().__init__(id=id) + self.group = group + + def get_actions(self): + raise NotImplementedError("[SkillDefinition]: Method not implemented") + + def create_begin_activity(self, action_id: str): + raise NotImplementedError("[SkillDefinition]: Method not implemented") diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/teams_skill.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/teams_skill.py new file mode 100644 index 0000000000..6631c869ea --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/teams_skill.py @@ -0,0 +1,36 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from enum import Enum +from botbuilder.schema import Activity +from skills.skill_definition import SkillDefinition + + +class TeamsSkill(SkillDefinition): + class SkillAction(str, Enum): + TEAMS_TASK_MODULE = "TeamsTaskModule" + TEAMS_CARD_ACTION = "TeamsCardAction" + TEAMS_CONVERSATION = "TeamsConversation" + CARDS = "Cards" + PROACTIVE = "Proactive" + ATTACHMENT = "Attachment" + AUTH = "Auth" + SSO = "Sso" + ECHO = "Echo" + FILE_UPLOAD = "FileUpload" + DELETE = "Delete" + UPDATE = "Update" + + def get_actions(self): + return self.SkillAction + + def create_begin_activity(self, action_id: str): + if action_id not in self.SkillAction: + raise Exception(f'Unable to create begin activity for "${action_id}".') + + # We don't support special parameters in these skills so a generic event with the + # right name will do in this case. + activity = Activity.create_event_activity() + activity.name = action_id + + return activity diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/waterfall_skill.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/waterfall_skill.py new file mode 100644 index 0000000000..34db3b6abc --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/waterfall_skill.py @@ -0,0 +1,33 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from enum import Enum +from botbuilder.schema import Activity +from skills.skill_definition import SkillDefinition + + +class WaterfallSkill(SkillDefinition): + class SkillAction(str, Enum): + CARDS = "Cards" + PROACTIVE = "Proactive" + AUTH = "Auth" + MESSAGE_WITH_ATTACHMENT = "MessageWithAttachment" + SSO = "Sso" + FILE_UPLOAD = "FileUpload" + ECHO = "Echo" + DELETE = "Delete" + UPDATE = "Update" + + def get_actions(self): + return self.SkillAction + + def create_begin_activity(self, action_id: str): + if action_id not in self.SkillAction: + raise Exception(f'Unable to create begin activity for "${action_id}".') + + # We don't support special parameters in these skills so a generic event with the + # right name will do in this case. + activity = Activity.create_event_activity() + activity.name = action_id + + return activity diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills_configuration.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills_configuration.py new file mode 100644 index 0000000000..1b29374ffb --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills_configuration.py @@ -0,0 +1,88 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import os +from typing import Dict + +from botbuilder.dialogs import ObjectPath +from dotenv import load_dotenv + +from skills.skill_definition import SkillDefinition +from skills.waterfall_skill import WaterfallSkill +from skills.echo_skill import EchoSkill +from skills.teams_skill import TeamsSkill + +load_dotenv() + + +class DefaultConfig: + """ + Bot Default Configuration + """ + + PORT = 37020 + APP_ID = os.getenv("MicrosoftAppId") + APP_PASSWORD = os.getenv("MicrosoftAppPassword") + SSO_CONNECTION_NAME = os.getenv("SsoConnectionName") + SSO_CONNECTION_NAME_TEAMS = os.getenv("SsoConnectionNameTeams") + + +class SkillsConfiguration: + """ + Bot Skills Configuration + A helper class that loads Skills information from configuration + Remarks: This class loads the skill settings from env and casts them into derived + types of SkillDefinition so we can render prompts with the skills and in their + groups. + """ + + SKILL_HOST_ENDPOINT = os.getenv("SkillHostEndpoint") + SKILLS: Dict[str, SkillDefinition] = dict() + + def __init__(self): + skills_data = dict() + skill_variable = [x for x in os.environ if x.lower().startswith("skill_")] + + for val in skill_variable: + names = val.split("_") + bot_id = names[1] + attr = names[2] + + if bot_id not in skills_data: + skills_data[bot_id] = dict() + + if attr.lower() == "appid": + skills_data[bot_id]["app_id"] = os.getenv(val) + elif attr.lower() == "endpoint": + skills_data[bot_id]["skill_endpoint"] = os.getenv(val) + elif attr.lower() == "group": + skills_data[bot_id]["group"] = os.getenv(val) + else: + raise ValueError( + f"[SkillsConfiguration]: Invalid environment variable declaration {attr}" + ) + + for skill_id, skill_value in skills_data.items(): + definition = SkillDefinition(id=skill_id, group=skill_value["group"]) + definition.app_id = skill_value["app_id"] + definition.skill_endpoint = skill_value["skill_endpoint"] + self.SKILLS[skill_id] = self.create_skill_definition(definition) + + # Note: we hard code this for now, we should dynamically create instances based on the manifests. + # For now, this code creates a strong typed version of the SkillDefinition based on the skill group + # and copies the info from env into it. + @staticmethod + def create_skill_definition(skill: SkillDefinition): + if skill.group.lower() == ("echo"): + skill_definition = ObjectPath.assign(EchoSkill(), skill) + + elif skill.group.lower() == ("waterfall"): + skill_definition = ObjectPath.assign(WaterfallSkill(), skill) + + elif skill.group.lower() == ("teams"): + skill_definition = ObjectPath.assign(TeamsSkill(), skill) + + else: + raise Exception(f"Unable to find definition class for {skill.id}.") + + return skill_definition diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/token_exchange_skill_handler.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/token_exchange_skill_handler.py new file mode 100644 index 0000000000..1da847ef5f --- /dev/null +++ b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/token_exchange_skill_handler.py @@ -0,0 +1,199 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import traceback +from uuid import uuid4 +from typing import Union + +from botbuilder.core import Bot, TurnContext +from botbuilder.core.card_factory import ContentTypes +from botbuilder.core.skills import ( + SkillHandler, + BotFrameworkSkill, +) +from botbuilder.integration.aiohttp.skills import SkillHttpClient +from botbuilder.schema import ( + ResourceResponse, + ActivityTypes, + SignInConstants, + TokenExchangeInvokeRequest, +) +from botframework.connector.auth import ( + CredentialProvider, + AuthenticationConfiguration, + ClaimsIdentity, + Activity, + JwtTokenValidation, +) +from botframework.connector.token_api.models import TokenExchangeRequest + +from adapter_with_error_handler import AdapterWithErrorHandler +from skill_conversation_id_factory import SkillConversationIdFactory +from skills.skill_definition import SkillDefinition +from skills_configuration import SkillsConfiguration, DefaultConfig + + +class TokenExchangeSkillHandler(SkillHandler): + def __init__( + self, + adapter: AdapterWithErrorHandler, + bot: Bot, + configuration: DefaultConfig, + conversation_id_factory: SkillConversationIdFactory, + skills_config: SkillsConfiguration, + skill_client: SkillHttpClient, + credential_provider: CredentialProvider, + auth_configuration: AuthenticationConfiguration, + ): + super().__init__( + adapter, + bot, + conversation_id_factory, + credential_provider, + auth_configuration, + ) + self._token_exchange_provider = adapter + if not self._token_exchange_provider: + raise ValueError( + f"{self._token_exchange_provider} does not support token exchange" + ) + + self._configuration = configuration + self._skills_config = skills_config + self._skill_client = skill_client + self._conversation_id_factory = conversation_id_factory + self._bot_id = configuration.APP_ID + + async def on_send_to_conversation( + self, claims_identity: ClaimsIdentity, conversation_id: str, activity: Activity, + ) -> ResourceResponse: + if await self._intercept_oauth_cards(claims_identity, activity): + return ResourceResponse(id=str(uuid4())) + + return await super().on_send_to_conversation( + claims_identity, conversation_id, activity + ) + + async def on_reply_to_activity( + self, + claims_identity: ClaimsIdentity, + conversation_id: str, + activity_id: str, + activity: Activity, + ) -> ResourceResponse: + if await self._intercept_oauth_cards(claims_identity, activity): + return ResourceResponse(id=str(uuid4())) + + return await super().on_reply_to_activity( + claims_identity, conversation_id, activity_id, activity + ) + + def _get_calling_skill( + self, claims_identity: ClaimsIdentity + ) -> Union[SkillDefinition, None]: + app_id = JwtTokenValidation.get_app_id_from_claims(claims_identity.claims) + + if not app_id: + return None + + return next( + skill + for skill in self._skills_config.SKILLS.values() + if skill.app_id == app_id + ) + + async def _intercept_oauth_cards( + self, claims_identity: ClaimsIdentity, activity: Activity + ) -> bool: + if activity.attachments: + oauth_card_attachment = next( + ( + attachment + for attachment in activity.attachments + if attachment.content_type == ContentTypes.oauth_card + ), + None, + ) + + if oauth_card_attachment: + target_skill = self._get_calling_skill(claims_identity) + if target_skill: + oauth_card = oauth_card_attachment.content + token_exchange_resource = oauth_card.get( + "TokenExchangeResource" + ) or oauth_card.get("tokenExchangeResource") + if token_exchange_resource: + context = TurnContext(self._adapter, activity) + context.turn_state["BotIdentity"] = claims_identity + + # We need to know what connection name to use for the token exchange so we figure that out here + connection_name = ( + self._configuration.SSO_CONNECTION_NAME + if target_skill.group == "Waterfall" + else self._configuration.SSO_CONNECTION_NAME_TEAMS + ) + + if not connection_name: + raise ValueError("The SSO connection name cannot be null.") + + # AAD token exchange + try: + uri = token_exchange_resource.get("uri") + result = await self._token_exchange_provider.exchange_token( + context, + connection_name, + activity.recipient.id, + TokenExchangeRequest(uri=uri), + ) + + if result.token: + # If token above is null, then SSO has failed and hence we return false. + # If not, send an invoke to the skill with the token. + return await self._send_token_exchange_invoke_to_skill( + incoming_activity=activity, + connection_name=oauth_card.get("connectionName"), + resource_id=token_exchange_resource.get("id"), + token=result.token, + target_skill=target_skill, + ) + + except Exception as exception: + print(f"Unable to exchange token: {exception}") + traceback.print_exc() + return False + + return False + + async def _send_token_exchange_invoke_to_skill( + self, + incoming_activity: Activity, + resource_id: str, + token: str, + connection_name: str, + target_skill: BotFrameworkSkill, + ) -> bool: + activity = incoming_activity.create_reply() + activity.type = ActivityTypes.invoke + activity.name = SignInConstants.token_exchange_operation_name + activity.value = TokenExchangeInvokeRequest( + id=resource_id, token=token, connection_name=connection_name + ) + skill_conversation_reference = await self._conversation_id_factory.get_conversation_reference( + incoming_activity.conversation.id + ) + activity.conversation = ( + skill_conversation_reference.conversation_reference.conversation + ) + activity.service_url = ( + skill_conversation_reference.conversation_reference.service_url + ) + + # Route the activity to the skill + response = await self._skill_client.post_activity_to_skill( + from_bot_id=self._bot_id, + to_skill=target_skill, + service_url=self._skills_config.SKILL_HOST_ENDPOINT, + activity=activity, + ) + + return 200 <= response.status <= 299 diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/app.py b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/app.py new file mode 100644 index 0000000000..5a87c33513 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/app.py @@ -0,0 +1,135 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import json +import sys +import traceback +from datetime import datetime + +from aiohttp import web +from aiohttp.web import Request, Response +from botbuilder.core import ( + BotFrameworkAdapter, + BotFrameworkAdapterSettings, + TurnContext, + MessageFactory, +) +from botbuilder.schema import Activity, ActivityTypes, InputHints +from botframework.connector.auth import AuthenticationConfiguration + +from bots import EchoBot +from config import DefaultConfig +from authentication import AllowedCallersClaimsValidator +from http import HTTPStatus + +CONFIG = DefaultConfig() +CLAIMS_VALIDATOR = AllowedCallersClaimsValidator(frozenset(CONFIG.ALLOWED_CALLERS)) +AUTH_CONFIG = AuthenticationConfiguration( + claims_validator=CLAIMS_VALIDATOR.validate_claims +) +# Create adapter. +# See https://aka.ms/about-bot-adapter to learn more about how bots work. +SETTINGS = BotFrameworkAdapterSettings( + app_id=CONFIG.APP_ID, + app_password=CONFIG.APP_PASSWORD, + auth_configuration=AUTH_CONFIG, +) +ADAPTER = BotFrameworkAdapter(SETTINGS) + +# Catch-all for errors. +async def on_error(context: TurnContext, error: Exception): + # This check writes out errors to console log .vs. app insights. + # NOTE: In production environment, you should consider logging this to Azure + # application insights. + print(f"\n [on_turn_error] unhandled error: {error}", file=sys.stderr) + traceback.print_exc() + + try: + exc_info = sys.exc_info() + stack = traceback.format_exception(*exc_info) + + # Send a message to the user + error_message_text = "The skill encountered an error or bug." + error_message = MessageFactory.text( + f"{error_message_text}\r\n{error}\r\n{stack}", + error_message_text, + InputHints.ignoring_input, + ) + error_message.value = {"message": error, "stack": stack} + await context.send_activity(error_message) + + error_message_text = ( + "To continue to run this bot, please fix the bot source code." + ) + error_message = MessageFactory.text( + error_message_text, error_message_text, InputHints.expecting_input + ) + await context.send_activity(error_message) + + # Send a trace activity, which will be displayed in Bot Framework Emulator + if context.activity.channel_id == "emulator": + # Create a trace activity that contains the error object + trace_activity = Activity( + label="TurnError", + name="on_turn_error Trace", + timestamp=datetime.utcnow(), + type=ActivityTypes.trace, + value=f"{error}", + value_type="https://www.botframework.com/schemas/error", + ) + await context.send_activity(trace_activity) + + # Send and EndOfConversation activity to the skill caller with the error to end the conversation and let the + # caller decide what to do. Send a trace activity if we're talking to the Bot Framework Emulator + end_of_conversation = Activity( + type=ActivityTypes.end_of_conversation, code="SkillError", text=f"{error}" + ) + await context.send_activity(end_of_conversation) + except Exception as exception: + print( + f"\n Exception caught on on_error : {exception}", file=sys.stderr, + ) + traceback.print_exc() + + +ADAPTER.on_turn_error = on_error + +# Create Bot +BOT = EchoBot() + +# Listen for incoming requests on /api/messages +async def messages(req: Request) -> Response: + # Main bot message handler. + if "application/json" in req.headers["Content-Type"]: + body = await req.json() + else: + return Response(status=HTTPStatus.UNSUPPORTED_MEDIA_TYPE) + + activity = Activity().deserialize(body) + auth_header = req.headers["Authorization"] if "Authorization" in req.headers else "" + + try: + response = await ADAPTER.process_activity(activity, auth_header, BOT.on_turn) + # DeliveryMode => Expected Replies + if response: + body = json.dumps(response.body) + return Response(status=response.status, body=body) + + # DeliveryMode => Normal + return Response(status=HTTPStatus.CREATED) + except Exception as exception: + raise exception + + +APP = web.Application() +APP.router.add_post("/api/messages", messages) + +# simple way of exposing the manifest for dev purposes. +APP.router.add_static("/manifests", "./manifests/") + + +if __name__ == "__main__": + try: + web.run_app(APP, host="localhost", port=CONFIG.PORT) + except Exception as error: + raise error diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/authentication/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/authentication/__init__.py new file mode 100644 index 0000000000..b6383973c8 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/authentication/__init__.py @@ -0,0 +1,6 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from .allowed_callers_claims_validator import AllowedCallersClaimsValidator + +__all__ = ["AllowedCallersClaimsValidator"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/authentication/allowed_callers_claims_validator.py b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/authentication/allowed_callers_claims_validator.py new file mode 100644 index 0000000000..d790e36f34 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/authentication/allowed_callers_claims_validator.py @@ -0,0 +1,29 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from botframework.connector.auth import JwtTokenValidation, SkillValidation + + +class AllowedCallersClaimsValidator(): + """ + Sample claims validator that loads an allowed list from configuration if present and checks + that requests are coming from allowed parent bots. + """ + + def __init__(self, allowed_callers: frozenset): + self.allowed_callers = allowed_callers + + # Load the AppIds for the configured callers (we will only allow responses from parent bots we have configured). + # DefaultConfig.ALLOWED_CALLERS is the list of parent bot Ids that are allowed to access the skill. + # To add a new parent bot simply go to the config.py file and add + # the parent bot's Microsoft AppId to the array under AllowedCallers, e.g.: + # AllowedCallers=["195bd793-4319-4a84-a800-386770c058b2","38c74e7a-3d01-4295-8e66-43dd358920f8"] + async def validate_claims(self, claims: dict): + if SkillValidation.is_skill_claim(claims) and self.allowed_callers: + # Check that the appId claim in the skill request is in the list of skills configured for this bot. + app_id = JwtTokenValidation.get_app_id_from_claims(claims) + if app_id not in self.allowed_callers: + raise ValueError( + f'Received a request from an application with an appID of "{ app_id }". To enable requests' + ' from this bot, add the id to your configuration file.' + ) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/bots/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/bots/__init__.py new file mode 100644 index 0000000000..f95fbbbadd --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/bots/__init__.py @@ -0,0 +1,6 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from .echo_bot import EchoBot + +__all__ = ["EchoBot"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/bots/echo_bot.py b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/bots/echo_bot.py new file mode 100644 index 0000000000..4c69deb366 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/bots/echo_bot.py @@ -0,0 +1,32 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from botbuilder.core import ActivityHandler, MessageFactory, TurnContext +from botbuilder.schema import Activity, ActivityTypes, EndOfConversationCodes + +class EchoBot(ActivityHandler): + async def on_message_activity(self, turn_context: TurnContext): + if "end" in turn_context.activity.text or "stop" in turn_context.activity.text: + # Send End of conversation at the end. + await turn_context.send_activity( + MessageFactory.text("Ending conversation from the skill...") + ) + + end_of_conversation = Activity(type=ActivityTypes.end_of_conversation) + end_of_conversation.code = EndOfConversationCodes.completed_successfully + await turn_context.send_activity(end_of_conversation) + else: + await turn_context.send_activity( + MessageFactory.text(f"Echo: {turn_context.activity.text}") + ) + await turn_context.send_activity( + MessageFactory.text( + f'Say "end" or "stop" and I\'ll end the conversation and back to the parent.' + ) + ) + + async def on_end_of_conversation_activity(self, turn_context: TurnContext): + # This will be called if the host bot is ending the conversation. Sending additional messages should be + # avoided as the conversation may have been deleted. + # Perform cleanup of resources if needed. + pass diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/config.py b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/config.py new file mode 100644 index 0000000000..8de1e0a9b4 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/config.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import os + +""" Bot Configuration """ + +class DefaultConfig: + """ Bot Configuration """ + + PORT = 37400 + APP_ID = os.environ.get("MicrosoftAppId", "") + APP_PASSWORD = os.environ.get("MicrosoftAppPassword", "") + # If ALLOWED_CALLERS is empty, any bot can call this Skill. Add MicrosoftAppIds to restrict callers to only those specified. + # Example: os.environ.get("AllowedCallers", ["54d3bb6a-3b6d-4ccd-bbfd-cad5c72fb53a", "3851a47b-53ed-4d29-b878-6e941da61e98"]) + ALLOWED_CALLERS = os.environ.get("AllowedCallers", []) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/manifests/echoskillbot-manifest-1.0.json b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/manifests/echoskillbot-manifest-1.0.json new file mode 100644 index 0000000000..9e995c0101 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/manifests/echoskillbot-manifest-1.0.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/skills/v2.1/skill-manifest.json", + "$id": "EchoSkillBotPython", + "name": "EchoSkillBotPython", + "version": "1.0", + "description": "This is a skill for echoing what the user sent to the bot (using Python).", + "publisherName": "Microsoft", + "privacyUrl": "https://microsoft.com/privacy", + "copyright": "Copyright (c) Microsoft Corporation. All rights reserved.", + "license": "https://github.com/microsoft/BotFramework-FunctionalTests/blob/main/LICENSE", + "tags": [ + "echo" + ], + "endpoints": [ + { + "name": "default", + "protocol": "BotFrameworkV3", + "description": "Localhost endpoint for the skill (on port 37400)", + "endpointUrl": "http://localhost:37400/api/messages", + "msAppId": "00000000-0000-0000-0000-000000000000" + } + ] +} diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/requirements.txt b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/requirements.txt new file mode 100644 index 0000000000..3658c09bb6 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/requirements.txt @@ -0,0 +1 @@ +botbuilder-integration-aiohttp>=4.13.0 diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/.env b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/.env new file mode 100644 index 0000000000..e83f3f1d74 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/.env @@ -0,0 +1,11 @@ +MicrosoftAppId= +MicrosoftAppPassword= +ConnectionName=TestOAuthProvider +SsoConnectionName= +ChannelService= +AllowedCallers=* +SkillHostEndpoint=http://localhost:37420/api/skills + +EchoSkillInfo_id=EchoSkillBot +EchoSkillInfo_appId= +EchoSkillInfo_skillEndpoint=http://localhost:37400/api/messages diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/.pylintrc b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/.pylintrc new file mode 100644 index 0000000000..6e8d5976b6 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/.pylintrc @@ -0,0 +1,582 @@ +[MASTER] + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. +extension-pkg-whitelist= + +# Python code to execute, usually for sys.path manipulation such as +# pygtk.require(). +#init-hook= + +# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the +# number of processors available to use. +jobs=1 + +# Control the amount of potential inferred values when inferring a single +# object. This can help the performance when dealing with large functions or +# complex, nested conditions. +limit-inference-results=100 + +# List of plugins (as comma separated values of python modules names) to load, +# usually to register additional checkers. +load-plugins= + +# Pickle collected data for later comparisons. +persistent=yes + +# Specify a configuration file. +#rcfile= + +# When enabled, pylint would attempt to guess common misconfiguration and emit +# user-friendly hints instead of false-positive error messages. +suggestion-mode=yes + +# Allow loading of arbitrary C extensions. Extensions are imported into the +# active Python interpreter and may run arbitrary code. +unsafe-load-any-extension=no + + +[MESSAGES CONTROL] + +# Only show warnings with the listed confidence levels. Leave empty to show +# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED. +confidence= + +# Disable the message, report, category or checker with the given id(s). You +# can either give multiple identifiers separated by comma (,) or put this +# option multiple times (only on the command line, not in the configuration +# file where it should appear only once). You can also use "--disable=all" to +# disable everything first and then reenable specific checks. For example, if +# you want to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use "--disable=all --enable=classes +# --disable=W". +disable=print-statement, + parameter-unpacking, + unpacking-in-except, + old-raise-syntax, + backtick, + long-suffix, + old-ne-operator, + old-octal-literal, + import-star-module-level, + non-ascii-bytes-literal, + raw-checker-failed, + bad-inline-option, + locally-disabled, + file-ignored, + suppressed-message, + useless-suppression, + deprecated-pragma, + use-symbolic-message-instead, + apply-builtin, + basestring-builtin, + buffer-builtin, + cmp-builtin, + coerce-builtin, + execfile-builtin, + file-builtin, + long-builtin, + raw_input-builtin, + reduce-builtin, + standarderror-builtin, + unicode-builtin, + xrange-builtin, + coerce-method, + delslice-method, + getslice-method, + setslice-method, + no-absolute-import, + old-division, + dict-iter-method, + dict-view-method, + next-method-called, + metaclass-assignment, + indexing-exception, + raising-string, + reload-builtin, + oct-method, + hex-method, + nonzero-method, + cmp-method, + input-builtin, + round-builtin, + intern-builtin, + unichr-builtin, + map-builtin-not-iterating, + zip-builtin-not-iterating, + range-builtin-not-iterating, + filter-builtin-not-iterating, + using-cmp-argument, + eq-without-hash, + div-method, + idiv-method, + rdiv-method, + exception-message-attribute, + invalid-str-codec, + sys-max-int, + bad-python3-import, + deprecated-string-function, + deprecated-str-translate-call, + deprecated-itertools-function, + deprecated-types-field, + next-method-defined, + dict-items-not-iterating, + dict-keys-not-iterating, + dict-values-not-iterating, + deprecated-operator-function, + deprecated-urllib-function, + xreadlines-attribute, + deprecated-sys-function, + exception-escape, + comprehension-escape, + bad-continuation, + duplicate-code, + redefined-outer-name, + missing-docstring, + too-many-instance-attributes, + too-few-public-methods, + redefined-builtin, + too-many-arguments, + no-self-use, + fixme, + broad-except, + bare-except, + too-many-public-methods, + cyclic-import, + too-many-locals, + too-many-function-args, + too-many-return-statements, + import-error, + no-name-in-module, + too-many-branches + +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time (only on the command line, not in the configuration file where +# it should appear only once). See also the "--disable" option for examples. +enable=c-extension-no-member + + +[REPORTS] + +# Python expression which should return a note less than 10 (10 is the highest +# note). You have access to the variables errors warning, statement which +# respectively contain the number of errors / warnings messages and the total +# number of statements analyzed. This is used by the global evaluation report +# (RP0004). +evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) + +# Template used to display messages. This is a python new-style format string +# used to format the message information. See doc for all details. +#msg-template= + +# Set the output format. Available formats are text, parseable, colorized, json +# and msvs (visual studio). You can also give a reporter class, e.g. +# mypackage.mymodule.MyReporterClass. +output-format=text + +# Tells whether to display a full report or only the messages. +reports=no + +# Activate the evaluation score. +score=yes + + +[REFACTORING] + +# Maximum number of nested blocks for function / method body +max-nested-blocks=5 + +# Complete name of functions that never returns. When checking for +# inconsistent-return-statements if a never returning function is called then +# it will be considered as an explicit return statement and no message will be +# printed. +never-returning-functions=sys.exit + + +[LOGGING] + +# Format style used to check logging format string. `old` means using % +# formatting, while `new` is for `{}` formatting. +logging-format-style=old + +# Logging modules to check that the string format arguments are in logging +# function parameter format. +logging-modules=logging + + +[SPELLING] + +# Limits count of emitted suggestions for spelling mistakes. +max-spelling-suggestions=4 + +# Spelling dictionary name. Available dictionaries: none. To make it working +# install python-enchant package.. +spelling-dict= + +# List of comma separated words that should not be checked. +spelling-ignore-words= + +# A path to a file that contains private dictionary; one word per line. +spelling-private-dict-file= + +# Tells whether to store unknown words to indicated private dictionary in +# --spelling-private-dict-file option instead of raising a message. +spelling-store-unknown-words=no + + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME, + XXX, + TODO + + +[TYPECHECK] + +# List of decorators that produce context managers, such as +# contextlib.contextmanager. Add to this list to register other decorators that +# produce valid context managers. +contextmanager-decorators=contextlib.contextmanager + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E1101 when accessed. Python regular +# expressions are accepted. +generated-members= + +# Tells whether missing members accessed in mixin class should be ignored. A +# mixin class is detected if its name ends with "mixin" (case insensitive). +ignore-mixin-members=yes + +# Tells whether to warn about missing members when the owner of the attribute +# is inferred to be None. +ignore-none=yes + +# This flag controls whether pylint should warn about no-member and similar +# checks whenever an opaque object is returned when inferring. The inference +# can return multiple potential results while evaluating a Python object, but +# some branches might not be evaluated, which results in partial inference. In +# that case, it might be useful to still emit no-member and other checks for +# the rest of the inferred objects. +ignore-on-opaque-inference=yes + +# List of class names for which member attributes should not be checked (useful +# for classes with dynamically set attributes). This supports the use of +# qualified names. +ignored-classes=optparse.Values,thread._local,_thread._local + +# List of module names for which member attributes should not be checked +# (useful for modules/projects where namespaces are manipulated during runtime +# and thus existing member attributes cannot be deduced by static analysis. It +# supports qualified module names, as well as Unix pattern matching. +ignored-modules= + +# Show a hint with possible names when a member name was not found. The aspect +# of finding the hint is based on edit distance. +missing-member-hint=yes + +# The minimum edit distance a name should have in order to be considered a +# similar match for a missing member name. +missing-member-hint-distance=1 + +# The total number of similar names that should be taken in consideration when +# showing a hint for a missing member. +missing-member-max-choices=1 + + +[VARIABLES] + +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid defining new builtins when possible. +additional-builtins= + +# Tells whether unused global variables should be treated as a violation. +allow-global-unused-variables=yes + +# List of strings which can identify a callback function by name. A callback +# name must start or end with one of those strings. +callbacks=cb_, + _cb + +# A regular expression matching the name of dummy variables (i.e. expected to +# not be used). +dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ + +# Argument names that match this expression will be ignored. Default to name +# with leading underscore. +ignored-argument-names=_.*|^ignored_|^unused_ + +# Tells whether we should check for unused import in __init__ files. +init-import=no + +# List of qualified module names which can have objects that can redefine +# builtins. +redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io + + +[FORMAT] + +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +expected-line-ending-format= + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines=^\s*(# )??$ + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren=4 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=' ' + +# Maximum number of characters on a single line. +max-line-length=120 + +# Maximum number of lines in a module. +max-module-lines=1000 + +# List of optional constructs for which whitespace checking is disabled. `dict- +# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. +# `trailing-comma` allows a space between comma and closing bracket: (a, ). +# `empty-line` allows space-only lines. +no-space-check=trailing-comma, + dict-separator + +# Allow the body of a class to be on the same line as the declaration if body +# contains single statement. +single-line-class-stmt=no + +# Allow the body of an if to be on the same line as the test if there is no +# else. +single-line-if-stmt=no + + +[SIMILARITIES] + +# Ignore comments when computing similarities. +ignore-comments=yes + +# Ignore docstrings when computing similarities. +ignore-docstrings=yes + +# Ignore imports when computing similarities. +ignore-imports=no + +# Minimum lines number of a similarity. +min-similarity-lines=4 + + +[BASIC] + +# Naming style matching correct argument names. +argument-naming-style=snake_case + +# Regular expression matching correct argument names. Overrides argument- +# naming-style. +#argument-rgx= + +# Naming style matching correct attribute names. +attr-naming-style=snake_case + +# Regular expression matching correct attribute names. Overrides attr-naming- +# style. +#attr-rgx= + +# Bad variable names which should always be refused, separated by a comma. +bad-names=foo, + bar, + baz, + toto, + tutu, + tata + +# Naming style matching correct class attribute names. +class-attribute-naming-style=any + +# Regular expression matching correct class attribute names. Overrides class- +# attribute-naming-style. +#class-attribute-rgx= + +# Naming style matching correct class names. +class-naming-style=PascalCase + +# Regular expression matching correct class names. Overrides class-naming- +# style. +#class-rgx= + +# Naming style matching correct constant names. +const-naming-style=UPPER_CASE + +# Regular expression matching correct constant names. Overrides const-naming- +# style. +#const-rgx= + +# Minimum line length for functions/classes that require docstrings, shorter +# ones are exempt. +docstring-min-length=-1 + +# Naming style matching correct function names. +function-naming-style=snake_case + +# Regular expression matching correct function names. Overrides function- +# naming-style. +#function-rgx= + +# Good variable names which should always be accepted, separated by a comma. +good-names=i, + j, + k, + ex, + Run, + _ + +# Include a hint for the correct naming format with invalid-name. +include-naming-hint=no + +# Naming style matching correct inline iteration names. +inlinevar-naming-style=any + +# Regular expression matching correct inline iteration names. Overrides +# inlinevar-naming-style. +#inlinevar-rgx= + +# Naming style matching correct method names. +method-naming-style=snake_case + +# Regular expression matching correct method names. Overrides method-naming- +# style. +#method-rgx= + +# Naming style matching correct module names. +module-naming-style=snake_case + +# Regular expression matching correct module names. Overrides module-naming- +# style. +#module-rgx= + +# Colon-delimited sets of names that determine each other's naming style when +# the name regexes allow several styles. +name-group= + +# Regular expression which should only match function or class names that do +# not require a docstring. +no-docstring-rgx=^_ + +# List of decorators that produce properties, such as abc.abstractproperty. Add +# to this list to register other decorators that produce valid properties. +# These decorators are taken in consideration only for invalid-name. +property-classes=abc.abstractproperty + +# Naming style matching correct variable names. +variable-naming-style=snake_case + +# Regular expression matching correct variable names. Overrides variable- +# naming-style. +#variable-rgx= + + +[STRING] + +# This flag controls whether the implicit-str-concat-in-sequence should +# generate a warning on implicit string concatenation in sequences defined over +# several lines. +check-str-concat-over-line-jumps=no + + +[IMPORTS] + +# Allow wildcard imports from modules that define __all__. +allow-wildcard-with-all=no + +# Analyse import fallback blocks. This can be used to support both Python 2 and +# 3 compatible code, which means that the block might have code that exists +# only in one or another interpreter, leading to false positives when analysed. +analyse-fallback-blocks=no + +# Deprecated modules which should not be used, separated by a comma. +deprecated-modules=optparse,tkinter.tix + +# Create a graph of external dependencies in the given file (report RP0402 must +# not be disabled). +ext-import-graph= + +# Create a graph of every (i.e. internal and external) dependencies in the +# given file (report RP0402 must not be disabled). +import-graph= + +# Create a graph of internal dependencies in the given file (report RP0402 must +# not be disabled). +int-import-graph= + +# Force import order to recognize a module as part of the standard +# compatibility libraries. +known-standard-library= + +# Force import order to recognize a module as part of a third party library. +known-third-party=enchant + + +[CLASSES] + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__, + __new__, + setUp + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected=_asdict, + _fields, + _replace, + _source, + _make + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg=cls + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg=cls + + +[DESIGN] + +# Maximum number of arguments for function / method. +max-args=5 + +# Maximum number of attributes for a class (see R0902). +max-attributes=7 + +# Maximum number of boolean expressions in an if statement. +max-bool-expr=5 + +# Maximum number of branch for function / method body. +max-branches=12 + +# Maximum number of locals for function / method body. +max-locals=15 + +# Maximum number of parents for a class (see R0901). +max-parents=7 + +# Maximum number of public methods for a class (see R0904). +max-public-methods=20 + +# Maximum number of return / yield for function / method body. +max-returns=6 + +# Maximum number of statements in function / method body. +max-statements=50 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=2 + + +[EXCEPTIONS] + +# Exceptions that will emit a warning when being caught. Defaults to +# "BaseException, Exception". +overgeneral-exceptions=BaseException, + Exception diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/app.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/app.py new file mode 100644 index 0000000000..354fe400a8 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/app.py @@ -0,0 +1,176 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import os +from datetime import datetime +from http import HTTPStatus +from typing import Dict +from aiohttp import web +from aiohttp.web import Request, Response, json_response +from botbuilder.core import ( + BotFrameworkAdapterSettings, + ConversationState, + MemoryStorage, + TurnContext, +) +from botbuilder.core.skills import SkillHandler +from botbuilder.core.integration import ( + aiohttp_channel_service_routes, + aiohttp_error_middleware, +) +from botbuilder.integration.aiohttp.skills import SkillHttpClient +from botbuilder.schema import Activity +from botframework.connector.auth import ( + AuthenticationConfiguration, + SimpleCredentialProvider, +) +from authentication import AllowedCallersClaimsValidator +from bots import SkillBot +from config import DefaultConfig +from dialogs import ActivityRouterDialog +from dialogs.proactive import ContinuationParameters +from middleware import SsoSaveStateMiddleware +from skill_conversation_id_factory import SkillConversationIdFactory +from skill_adapter_with_error_handler import AdapterWithErrorHandler + +CONFIG = DefaultConfig() + +# Create MemoryStorage and ConversationState. +MEMORY = MemoryStorage() +CONVERSATION_STATE = ConversationState(MEMORY) + +# Create the conversationIdFactory. +CONVERSATION_ID_FACTORY = SkillConversationIdFactory(MEMORY) + +# Create the credential provider. +CREDENTIAL_PROVIDER = SimpleCredentialProvider(CONFIG.APP_ID, CONFIG.APP_PASSWORD) + +VALIDATOR = AllowedCallersClaimsValidator(CONFIG).claims_validator +AUTH_CONFIG = AuthenticationConfiguration(claims_validator=VALIDATOR) + +# Create adapter. +# See https://aka.ms/about-bot-adapter to learn more about how bots work. +SETTINGS = BotFrameworkAdapterSettings( + app_id=CONFIG.APP_ID, + app_password=CONFIG.APP_PASSWORD, + auth_configuration=AUTH_CONFIG, +) +ADAPTER = AdapterWithErrorHandler(SETTINGS, CONVERSATION_STATE) + +ADAPTER.use(SsoSaveStateMiddleware(CONVERSATION_STATE)) + +# Create the skill client. +SKILL_CLIENT = SkillHttpClient(CREDENTIAL_PROVIDER, CONVERSATION_ID_FACTORY) + +CONTINUATION_PARAMETERS_STORE: Dict[str, ContinuationParameters] = dict() + +# Create the main dialog. +DIALOG = ActivityRouterDialog( + configuration=CONFIG, + conversation_state=CONVERSATION_STATE, + conversation_id_factory=CONVERSATION_ID_FACTORY, + skill_client=SKILL_CLIENT, + continuation_parameters_store=CONTINUATION_PARAMETERS_STORE, +) + +# Create the bot that will handle incoming messages. +BOT = SkillBot(CONFIG, CONVERSATION_STATE, DIALOG) +SKILL_HANDLER = SkillHandler( + ADAPTER, BOT, CONVERSATION_ID_FACTORY, CREDENTIAL_PROVIDER, AUTH_CONFIG +) + +# Listen for incoming requests on /api/messages +async def messages(req: Request) -> Response: + # Main bot message handler. + if "application/json" in req.headers["Content-Type"]: + body = await req.json() + else: + return Response(status=HTTPStatus.UNSUPPORTED_MEDIA_TYPE) + + activity = Activity().deserialize(body) + auth_header = req.headers["Authorization"] if "Authorization" in req.headers else "" + + try: + website_hostname = os.getenv("WEBSITE_HOSTNAME") + if website_hostname: + CONFIG.SERVER_URL = f"https://{website_hostname}" + else: + CONFIG.SERVER_URL = f"{req.scheme}://{req.host}" + + response = await ADAPTER.process_activity(activity, auth_header, BOT.on_turn) + # DeliveryMode => Expected Replies + if response: + return json_response(data=response.body, status=response.status) + + # DeliveryMode => Normal + return Response(status=HTTPStatus.CREATED) + except Exception as exception: + raise exception + + +# Listen for incoming requests on /api/notify +async def notify(req: Request) -> Response: + error = "" + user = req.query.get("user") + + continuation_parameters = CONTINUATION_PARAMETERS_STORE.get(user) + + if not continuation_parameters: + return Response( + content_type="text/html", + status=HTTPStatus.OK, + body=f"

    No messages sent

    " + f"
    There are no conversations registered to receive proactive messages for { user }.", + ) + + try: + + async def callback(context: TurnContext): + await context.send_activity(f"Got proactive message for user: { user }") + await BOT.on_turn(context) + + await ADAPTER.continue_conversation( + continuation_parameters.conversation_reference, + callback, + CONFIG.APP_ID, + continuation_parameters.claims_identity, + continuation_parameters.oauth_scope, + ) + except Exception as err: + error = err + + return Response( + content_type="text/html", + status=HTTPStatus.OK, + body=f"

    Proactive messages have been sent

    " + f"
    Timestamp: { datetime.utcnow() }
    Exception: { error }", + ) + + +# Listen for incoming requests on /api/music +async def music(req: Request) -> web.FileResponse: # pylint: disable=unused-argument + file_path = os.path.join(os.getcwd(), "dialogs/cards/files/music.mp3") + return web.FileResponse(file_path) + + +APP = web.Application(middlewares=[aiohttp_error_middleware]) +APP.router.add_post("/api/messages", messages) +APP.router.add_routes(aiohttp_channel_service_routes(SKILL_HANDLER, "/api/skills")) + +# Simple way of exposing the manifest for dev purposes. +APP.router.add_static("/manifests", "./manifests/") + +# Simple way of exposing images folder. +APP.router.add_static("/images", "./images/") + +# Listen for incoming requests. +APP.router.add_get("/api/music", music) + +# Listen for incoming notifications and send proactive messages to users. +APP.router.add_get("/api/notify", notify) + +if __name__ == "__main__": + try: + web.run_app(APP, host="localhost", port=CONFIG.PORT) + except Exception as error: + raise error diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/authentication/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/authentication/__init__.py new file mode 100644 index 0000000000..b6383973c8 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/authentication/__init__.py @@ -0,0 +1,6 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from .allowed_callers_claims_validator import AllowedCallersClaimsValidator + +__all__ = ["AllowedCallersClaimsValidator"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/authentication/allowed_callers_claims_validator.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/authentication/allowed_callers_claims_validator.py new file mode 100644 index 0000000000..b2ca42c61f --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/authentication/allowed_callers_claims_validator.py @@ -0,0 +1,50 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from typing import Awaitable, Callable, Dict, List +from botframework.connector.auth import JwtTokenValidation, SkillValidation +from config import DefaultConfig + + +class AllowedCallersClaimsValidator: + """ + Sample claims validator that loads an allowed list from configuration if present + and checks that requests are coming from allowed parent bots. + """ + + config_key = "ALLOWED_CALLERS" + + def __init__(self, config: DefaultConfig): + if not config: + raise TypeError( + "AllowedCallersClaimsValidator: config object cannot be None." + ) + + # AllowedCallers is the setting in the appsettings.json file + # that consists of the list of parent bot IDs that are allowed to access the skill. + # To add a new parent bot, simply edit the AllowedCallers and add + # the parent bot's Microsoft app ID to the list. + # In this sample, we allow all callers if AllowedCallers contains an "*". + caller_list = getattr(config, self.config_key) + if caller_list is None: + raise TypeError(f'"{self.config_key}" not found in configuration.') + self._allowed_callers = frozenset(caller_list) + + @property + def claims_validator(self) -> Callable[[List[Dict]], Awaitable]: + async def allow_callers_claims_validator(claims: Dict[str, object]): + # If _allowed_callers contains an "*", we allow all callers. + if "*" not in self._allowed_callers and SkillValidation.is_skill_claim( + claims + ): + # Check that the appId claim in the skill request is in the list of callers configured for this bot. + app_id = JwtTokenValidation.get_app_id_from_claims(claims) + if app_id not in self._allowed_callers: + raise PermissionError( + f'Received a request from a bot with an app ID of "{app_id}".' + f" To enable requests from this caller, add the app ID to your configuration file." + ) + + return + + return allow_callers_claims_validator diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/bots/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/bots/__init__.py new file mode 100644 index 0000000000..b58a3b0653 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/bots/__init__.py @@ -0,0 +1,6 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from .skill_bot import SkillBot + +__all__ = ["SkillBot"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/bots/skill_bot.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/bots/skill_bot.py new file mode 100644 index 0000000000..542423fd3a --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/bots/skill_bot.py @@ -0,0 +1,69 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from typing import List +from botbuilder.core import ( + ActivityHandler, + TurnContext, + ConversationState, +) +from botbuilder.dialogs import Dialog, DialogExtensions +from botbuilder.schema import Activity, ActivityTypes, ChannelAccount +from config import DefaultConfig + + +class SkillBot(ActivityHandler): + def __init__( + self, + config: DefaultConfig, + conversation_state: ConversationState, + dialog: Dialog, + ): + if config is None: + raise Exception("[SkillBot]: Missing parameter. config is required") + if conversation_state is None: + raise Exception( + "[SkillBot]: Missing parameter. conversation_state is required" + ) + if dialog is None: + raise Exception("[SkillBot]: Missing parameter. dialog is required") + + self.config = config + self.conversation_state = conversation_state + self.dialog = dialog + + async def on_turn(self, turn_context: TurnContext): + if turn_context.activity.type == ActivityTypes.conversation_update: + await super().on_turn(turn_context) + + else: + await DialogExtensions.run_dialog( + self.dialog, + turn_context, + self.conversation_state.create_property("DialogState"), + ) + + # Save any state changes that might have occurred during the turn. + await self.conversation_state.save_changes(turn_context) + + async def on_members_added_activity( + self, members_added: List[ChannelAccount], turn_context: TurnContext + ): + text = ( + "Welcome to the waterfall skill bot. \n\n" + "This is a skill, you will need to call it from another bot to use it." + ) + + for member in members_added: + if member.id != turn_context.activity.recipient.id: + await turn_context.send_activity( + Activity( + type=ActivityTypes.message, + text=text, + speak=text.replace("\n\n", ""), + ) + ) + await turn_context.send_activity( + f"You can check the skill manifest to see what it supports here: " + f"{self.config.SERVER_URL}/manifests/waterfallskillbot-manifest-1.0.json" + ) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/config.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/config.py new file mode 100644 index 0000000000..c688cb431d --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/config.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import os +from botbuilder.core.skills import BotFrameworkSkill +from dotenv import load_dotenv + +load_dotenv() + + +class DefaultConfig: + """ + Bot Configuration + """ + + SERVER_URL = "" # pylint: disable=invalid-name + PORT = os.getenv("Port", "37420") + APP_ID = os.getenv("MicrosoftAppId") + APP_PASSWORD = os.getenv("MicrosoftAppPassword") + CONNECTION_NAME = os.getenv("ConnectionName") + SSO_CONNECTION_NAME = os.getenv("SsoConnectionName") + CHANNEL_SERVICE = os.getenv("ChannelService") + SKILL_HOST_ENDPOINT = os.getenv("SkillHostEndpoint") + # If ALLOWED_CALLERS is empty, any bot can call this Skill. + # Add MicrosoftAppIds to restrict callers to only those specified. + # Example: + # os.getenv("AllowedCallers", ["54d3bb6a-3b6d-4ccd-bbfd-cad5c72fb53a", "3851a47b-53ed-4d29-b878-6e941da61e98"]) + ALLOWED_CALLERS = os.getenv("AllowedCallers") + ECHO_SKILL_INFO = BotFrameworkSkill( + id=os.getenv("EchoSkillInfo_id"), + app_id=os.getenv("EchoSkillInfo_appId"), + skill_endpoint=os.getenv("EchoSkillInfo_skillEndpoint"), + ) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/__init__.py new file mode 100644 index 0000000000..80d6165e54 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/__init__.py @@ -0,0 +1,6 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from .activity_router_dialog import ActivityRouterDialog + +__all__ = ["ActivityRouterDialog"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/activity_router_dialog.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/activity_router_dialog.py new file mode 100644 index 0000000000..1c38f4d7f2 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/activity_router_dialog.py @@ -0,0 +1,166 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import json +from typing import Dict +from datetime import datetime + +from botbuilder.core import MessageFactory, ConversationState +from botbuilder.dialogs import ( + WaterfallDialog, + WaterfallStepContext, + DialogTurnResult, + DialogTurnStatus, + ComponentDialog, +) +from botbuilder.dialogs.skills import ( + SkillDialogOptions, + SkillDialog, + BeginSkillDialogOptions, +) +from botbuilder.schema import Activity, ActivityTypes, InputHints +from botbuilder.integration.aiohttp.skills import SkillHttpClient +from config import DefaultConfig +from skill_conversation_id_factory import SkillConversationIdFactory +from dialogs.cards import CardDialog +from dialogs.delete import DeleteDialog +from dialogs.proactive import WaitForProactiveDialog +from dialogs.message_with_attachment import MessageWithAttachmentDialog +from dialogs.auth import AuthDialog +from dialogs.sso import SsoSkillDialog +from dialogs.file_upload import FileUploadDialog +from dialogs.update import UpdateDialog + +ECHO_SKILL = "EchoSkill" + + +class ActivityRouterDialog(ComponentDialog): + def __init__( + self, + configuration: DefaultConfig, + conversation_state: ConversationState, + conversation_id_factory: SkillConversationIdFactory, + skill_client: SkillHttpClient, + continuation_parameters_store: Dict, + ): + super().__init__(ActivityRouterDialog.__name__) + + self.add_dialog(CardDialog(configuration)) + self.add_dialog(MessageWithAttachmentDialog(configuration)) + + self.add_dialog( + WaitForProactiveDialog(configuration, continuation_parameters_store) + ) + + self.add_dialog(AuthDialog(configuration)) + self.add_dialog(SsoSkillDialog(configuration)) + self.add_dialog(FileUploadDialog()) + self.add_dialog(DeleteDialog()) + self.add_dialog(UpdateDialog()) + + self.add_dialog( + self.create_echo_skill_dialog( + configuration, conversation_state, conversation_id_factory, skill_client + ) + ) + self.add_dialog( + WaterfallDialog(WaterfallDialog.__name__, [self.process_activity]) + ) + + self.initial_dialog_id = WaterfallDialog.__name__ + + def create_echo_skill_dialog( + self, + configuration: DefaultConfig, + conversation_state: ConversationState, + conversation_id_factory: SkillConversationIdFactory, + skill_client: SkillHttpClient, + ) -> SkillDialog: + if configuration.SKILL_HOST_ENDPOINT is None: + raise Exception("SkillHostEndpoint is not in configuration") + + if configuration.ECHO_SKILL_INFO is None: + raise Exception("EchoSkillInfo is not set in configuration") + + options = SkillDialogOptions( + bot_id=configuration.APP_ID, + conversation_id_factory=conversation_id_factory, + skill_client=skill_client, + skill_host_endpoint=configuration.SKILL_HOST_ENDPOINT, + conversation_state=conversation_state, + skill=configuration.ECHO_SKILL_INFO, + ) + + return SkillDialog(options, ECHO_SKILL) + + async def process_activity(self, step_context: WaterfallStepContext): + # A skill can send trace activities, if needed. + await step_context.context.send_activity( + Activity( + type=ActivityTypes.trace, + timestamp=datetime.utcnow(), + name="ActivityRouterDialog.process_activity()", + label=f"Got ActivityType: {step_context.context.activity.type}", + ) + ) + + if step_context.context.activity.type == ActivityTypes.event: + return await self.on_event_activity(step_context) + + # We didn't get an activity type we can handle. + await step_context.context.send_activity( + activity_or_text=f'Unrecognized ActivityType: "{step_context.context.activity.type}".', + input_hint=InputHints.ignoring_input, + ) + return DialogTurnResult(DialogTurnStatus.Complete) + + async def on_event_activity(self, step_context: WaterfallStepContext): + activity = step_context.context.activity + await step_context.context.send_activity( + Activity( + type=ActivityTypes.trace, + timestamp=datetime.utcnow(), + name="ActivityRouterDialog.on_event_activity()", + label=f"Name: {activity.name}. Value: {json.dumps(activity.value)}", + ) + ) + + if activity.name == "Cards": + return await step_context.begin_dialog(CardDialog.__name__) + + if activity.name == "Proactive": + return await step_context.begin_dialog(WaitForProactiveDialog.__name__) + + if activity.name == "MessageWithAttachment": + return await step_context.begin_dialog(MessageWithAttachmentDialog.__name__) + + if activity.name == "Auth": + return await step_context.begin_dialog(AuthDialog.__name__) + + if activity.name == "Sso": + return await step_context.begin_dialog(SsoSkillDialog.__name__) + + if activity.name == "FileUpload": + return await step_context.begin_dialog(FileUploadDialog.__name__) + + if activity.name == "Echo": + # Start the EchoSkillBot + message_activity = MessageFactory.text("I'm the echo skill bot") + message_activity.delivery_mode = activity.delivery_mode + dialog = await self.find_dialog(ECHO_SKILL) + return await step_context.begin_dialog( + dialog.id, BeginSkillDialogOptions(activity=message_activity) + ) + + if activity.name == "Delete": + return await step_context.begin_dialog(DeleteDialog.__name__) + + if activity.name == "Update": + return await step_context.begin_dialog(UpdateDialog.__name__) + + # We didn't get an event name we can handle. + await step_context.context.send_activity( + activity_or_text=f'Unrecognized EventName: "{step_context.context.activity.name}".', + input_hint=InputHints.ignoring_input, + ) + return DialogTurnResult(DialogTurnStatus.Complete) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/auth/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/auth/__init__.py new file mode 100644 index 0000000000..938f3d16ea --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/auth/__init__.py @@ -0,0 +1,6 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from .auth_dialog import AuthDialog + +__all__ = ["AuthDialog"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/auth/auth_dialog.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/auth/auth_dialog.py new file mode 100644 index 0000000000..2957371462 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/auth/auth_dialog.py @@ -0,0 +1,106 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from botbuilder.core import MessageFactory +from botbuilder.dialogs import ( + WaterfallDialog, + WaterfallStepContext, + PromptOptions, + ComponentDialog, +) +from botbuilder.dialogs.prompts import OAuthPrompt, OAuthPromptSettings, ConfirmPrompt +from botbuilder.schema import InputHints +from config import DefaultConfig + + +class AuthDialog(ComponentDialog): + def __init__(self, configuration: DefaultConfig): + super().__init__(AuthDialog.__name__) + + self.connection_name = configuration.CONNECTION_NAME + + self.add_dialog(ConfirmPrompt(ConfirmPrompt.__name__)) + self.add_dialog( + OAuthPrompt( + OAuthPrompt.__name__, + OAuthPromptSettings( + connection_name=self.connection_name, + text=f"Please Sign In to connection: '{self.connection_name}'", + title="Sign In", + timeout=300000, # User has 5 minutes to login (1000 * 60 * 5) + ), + ) + ) + + self.add_dialog( + WaterfallDialog( + WaterfallDialog.__name__, + [ + self.prompt_step, + self.login_step, + self.display_token, + ], + ) + ) + + # The initial child Dialog to run. + self.initial_dialog_id = WaterfallDialog.__name__ + + async def prompt_step(self, step_context: WaterfallStepContext): + return await step_context.begin_dialog(OAuthPrompt.__name__) + + async def login_step(self, step_context: WaterfallStepContext): + # Get the token from the previous step. + token_response = step_context.result + + if token_response: + # Workaround, step_context.result value using DirectLine returns a 'dict' instead of TokenResponse + if isinstance(token_response, dict): + step_context.values["token"] = token_response.get("token") + else: + step_context.values["token"] = token_response.token + + # Show the token + logged_in_message = "You are now logged in." + await step_context.context.send_activity( + MessageFactory.text( + logged_in_message, logged_in_message, InputHints.ignoring_input + ) + ) + + options = PromptOptions( + prompt=MessageFactory.text("Would you like to view your token?") + ) + return await step_context.prompt(ConfirmPrompt.__name__, options) + + try_again_message = "Login was not successful please try again." + await step_context.context.send_activity( + MessageFactory.text( + try_again_message, try_again_message, InputHints.ignoring_input + ) + ) + return await step_context.replace_dialog(self.initial_dialog_id) + + async def display_token(self, step_context: WaterfallStepContext): + if step_context.result: + show_token_message = "Here is your token:" + await step_context.context.send_activity( + MessageFactory.text( + f'{show_token_message} {step_context.values["token"]}', + show_token_message, + InputHints.ignoring_input, + ) + ) + + # Sign out + await step_context.context.adapter.sign_out_user( + step_context.context, self.connection_name + ) + sign_out_message = "I have signed you out." + await step_context.context.send_activity( + MessageFactory.text( + sign_out_message, sign_out_message, InputHints.ignoring_input + ) + ) + + return await step_context.end_dialog() diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/__init__.py new file mode 100644 index 0000000000..465fe91fee --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/__init__.py @@ -0,0 +1,9 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from .card_dialog import CardDialog +from .card_options import CardOptions +from .card_sample_helper import CardSampleHelper +from .channel_supported_cards import ChannelSupportedCards + +__all__ = ["CardDialog", "CardOptions", "CardSampleHelper", "ChannelSupportedCards"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_dialog.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_dialog.py new file mode 100644 index 0000000000..519bc77fb7 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_dialog.py @@ -0,0 +1,282 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import json + +from botbuilder.core import MessageFactory, CardFactory +from botbuilder.dialogs import ( + ComponentDialog, + DialogTurnResult, + DialogTurnStatus, + WaterfallDialog, + WaterfallStepContext, + Choice, + ListStyle, +) +from botbuilder.dialogs.prompts import ( + ChoicePrompt, + PromptOptions, + PromptValidatorContext, +) +from botbuilder.schema import ( + InputHints, + HeroCard, + CardAction, + ActionTypes, +) +from config import DefaultConfig +from dialogs.cards.card_options import CardOptions +from dialogs.cards.channel_supported_cards import ChannelSupportedCards +from dialogs.cards.card_sample_helper import CardSampleHelper + + +CORGI_ON_CAROUSEL_VIDEO = "https://www.youtube.com/watch?v=LvqzubPZjHE" +MIND_BLOWN_GIF = ( + "https://media3.giphy.com/media/xT0xeJpnrWC4XWblEk/giphy.gif?" + "cid=ecf05e47mye7k75sup6tcmadoom8p1q8u03a7g2p3f76upp9&rid=giphy.gif" +) +MUSIC_API = "api/music" +TEAMS_LOGO_FILE_NAME = "teams-logo.png" + + +class CardDialog(ComponentDialog): + def __init__(self, configuration: DefaultConfig): + super().__init__(CardDialog.__name__) + self.configuration = configuration + + self.add_dialog(ChoicePrompt(ChoicePrompt.__name__, self.card_prompt_validator)) + self.add_dialog( + WaterfallDialog( + WaterfallDialog.__name__, + [self.select_card_step, self.display_card_step], + ) + ) + + self.initial_dialog_id = WaterfallDialog.__name__ + + def make_update_hero_card(self, step_context: WaterfallStepContext): + hero_card = HeroCard(title="Newly updated card.", buttons=[]) + + data = step_context.context.activity.value + data["count"] = data["count"].value + 1 + hero_card.text = f"Update count - {data['count'].value}" + + hero_card.buttons.push( + CardAction( + type=ActionTypes.message_back, + title="Update Card", + text="UpdateCardAction", + value=data, + ) + ) + + return CardFactory.hero_card(hero_card) + + async def select_card_step(self, step_context: WaterfallStepContext): + # Create the PromptOptions from the skill configuration which contain the list of configured skills. + message_text = "What card do you want?" + reprompt_message_text = "This message will be created in the validation code" + + options = PromptOptions( + prompt=MessageFactory.text( + message_text, message_text, InputHints.expecting_input + ), + retry_prompt=MessageFactory.text( + reprompt_message_text, reprompt_message_text, InputHints.expecting_input + ), + choices=[Choice(card.value) for card in CardOptions], + style=ListStyle.list_style, + ) + + return await step_context.prompt(ChoicePrompt.__name__, options) + + async def display_card_step(self, step_context: WaterfallStepContext): + if step_context.context.activity.value is not None: + await self.handle_special_activity(step_context) + else: + # Check to see if the activity is an adaptive card or a bot action response + card_type = CardOptions(step_context.result.value) + + if ChannelSupportedCards.is_card_supported( + step_context.context.activity.channel_id, card_type + ): + if card_type == CardOptions.ADAPTIVE_CARD_BOT_ACTION: + await step_context.context.send_activity( + MessageFactory.attachment( + CardSampleHelper.create_adaptive_card_bot_action() + ) + ) + + elif card_type == CardOptions.ADAPTIVE_CARD_TEAMS_TASK_MODULE: + await step_context.context.send_activity( + MessageFactory.attachment( + CardSampleHelper.create_adaptive_card_task_module() + ) + ) + + elif card_type == CardOptions.ADAPTIVE_CARD_SUBMIT_ACTION: + await step_context.context.send_activity( + MessageFactory.attachment( + CardSampleHelper.create_adaptive_card_submit() + ) + ) + + elif card_type == CardOptions.HERO: + await step_context.context.send_activity( + MessageFactory.attachment(CardSampleHelper.create_hero_card()) + ) + + elif card_type == CardOptions.THUMBNAIL: + await step_context.context.send_activity( + MessageFactory.attachment( + CardSampleHelper.create_thumbnail_card() + ) + ) + + elif card_type == CardOptions.RECEIPT: + await step_context.context.send_activity( + MessageFactory.attachment( + CardSampleHelper.create_receipt_card() + ) + ) + + elif card_type == CardOptions.SIGN_IN: + await step_context.context.send_activity( + MessageFactory.attachment(CardSampleHelper.create_signin_card()) + ) + + elif card_type == CardOptions.CAROUSEL: + # NOTE if cards are NOT the same height in a carousel, + # Teams will instead display as AttachmentLayoutTypes.List + await step_context.context.send_activity( + MessageFactory.carousel( + [ + CardSampleHelper.create_hero_card(), + CardSampleHelper.create_hero_card(), + CardSampleHelper.create_hero_card(), + ] + ) + ) + + elif card_type == CardOptions.LIST: + await step_context.context.send_activity( + MessageFactory.list( + [ + CardSampleHelper.create_hero_card(), + CardSampleHelper.create_hero_card(), + CardSampleHelper.create_hero_card(), + ] + ) + ) + + elif card_type == CardOptions.O365: + await step_context.context.send_activity( + MessageFactory.attachment( + CardSampleHelper.create_o365_connector_card() + ) + ) + + elif card_type == CardOptions.TEAMS_FILE_CONSENT: + await step_context.context.send_activity( + MessageFactory.attachment( + CardSampleHelper.create_teams_file_consent_card( + TEAMS_LOGO_FILE_NAME + ) + ) + ) + + elif card_type == CardOptions.ANIMATION: + await step_context.context.send_activity( + MessageFactory.attachment( + CardSampleHelper.create_animation_card(MIND_BLOWN_GIF) + ) + ) + + elif card_type == CardOptions.AUDIO: + await step_context.context.send_activity( + MessageFactory.attachment( + CardSampleHelper.create_audio_card( + f"{self.configuration.SERVER_URL}/{MUSIC_API}" + ) + ) + ) + + elif card_type == CardOptions.VIDEO: + await step_context.context.send_activity( + MessageFactory.attachment( + CardSampleHelper.create_video_card(CORGI_ON_CAROUSEL_VIDEO) + ) + ) + + elif card_type == CardOptions.ADAPTIVE_UPDATE: + await step_context.context.send_activity( + MessageFactory.attachment( + CardSampleHelper.create_adaptive_update_card() + ) + ) + + elif card_type == CardOptions.END: + return DialogTurnResult(DialogTurnStatus.Complete) + + else: + await step_context.context.send_activity( + f"{card_type.value} cards are not supported in the " + f"{step_context.context.activity.channel_id} channel." + ) + + return await step_context.replace_dialog( + self.initial_dialog_id, "What card would you want?" + ) + + async def handle_special_activity(self, step_context: WaterfallStepContext): + if step_context.context.activity.text is None: + await step_context.context.send_activity( + MessageFactory.text( + f"I received an activity with this data in the value field {step_context.context.activity.value}" + ) + ) + else: + if "update" in step_context.context.activity.text.lower(): + if step_context.context.activity.reply_to_id is None: + await step_context.context.send_activity( + MessageFactory.text( + f"Update activity is not supported in the " + f"{step_context.context.activity.channel_id} channel" + ) + ) + else: + hero_card = self.make_update_hero_card(step_context) + + activity = MessageFactory.attachment(hero_card) + activity.id = step_context.context.activity.reply_to_id + + await step_context.context.update_activity(activity) + + else: + await step_context.context.send_activity( + MessageFactory.text( + f"I received an activity with this data in the text field {step_context.context.activity.text} " + f"and this data in the value field {step_context.context.activity.value}" + ) + ) + + @staticmethod + async def card_prompt_validator(prompt_context: PromptValidatorContext) -> bool: + if not prompt_context.recognized.succeeded: + # This checks to see if this response is the user clicking the update button on the card + if prompt_context.context.activity.value is not None: + return True + + if prompt_context.context.activity.attachments: + return True + + # Render the activity so we can assert in tests. + # We may need to simplify the json if it gets too complicated to test. + activity_json = json.dumps( + prompt_context.context.activity.__dict__, indent=4, default=str + ).replace("\n", "\r\n") + prompt_context.options.retry_prompt.text = ( + f"Got {activity_json}\n\n{prompt_context.options.prompt.text}" + ) + return False + return True diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_options.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_options.py new file mode 100644 index 0000000000..99b98e5b66 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_options.py @@ -0,0 +1,23 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from enum import Enum + + +class CardOptions(str, Enum): + ADAPTIVE_CARD_BOT_ACTION = "AdaptiveCardBotAction" + ADAPTIVE_CARD_TEAMS_TASK_MODULE = "AdaptiveCardTeamsTaskModule" + ADAPTIVE_CARD_SUBMIT_ACTION = "AdaptiveCardSubmitAction" + HERO = "Hero" + THUMBNAIL = "Thumbnail" + RECEIPT = "Receipt" + SIGN_IN = "Signin" + CAROUSEL = "Carousel" + LIST = "List" + O365 = "O365" + TEAMS_FILE_CONSENT = "TeamsFileConsent" + ANIMATION = "Animation" + AUDIO = "Audio" + VIDEO = "Video" + ADAPTIVE_UPDATE = "AdaptiveUpdate" + END = "End" diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_sample_helper.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_sample_helper.py new file mode 100644 index 0000000000..8ef19fe7ae --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_sample_helper.py @@ -0,0 +1,557 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import os +from botbuilder.core import CardFactory +from botbuilder.schema.teams import ( + FileConsentCard, + O365ConnectorCard, + O365ConnectorCardActionCard, + O365ConnectorCardDateInput, + O365ConnectorCardFact, + O365ConnectorCardHttpPOST, + O365ConnectorCardImage, + O365ConnectorCardMultichoiceInput, + O365ConnectorCardMultichoiceInputChoice, + O365ConnectorCardOpenUri, + O365ConnectorCardOpenUriTarget, + O365ConnectorCardSection, + O365ConnectorCardTextInput, + O365ConnectorCardViewAction, +) +from botbuilder.schema import ( + ActionTypes, + Attachment, + AnimationCard, + AudioCard, + HeroCard, + VideoCard, + ReceiptCard, + SigninCard, + ThumbnailCard, + MediaUrl, + CardAction, + CardImage, + Fact, + ReceiptItem, +) +from botbuilder.schema.teams.additional_properties import ContentType + + +class CardSampleHelper: + @staticmethod + def create_adaptive_card_bot_action(): + return CardFactory.adaptive_card( + { + "type": "AdaptiveCard", + "version": "1.2", + "body": [ + { + "text": "Bot Builder actions", + "type": "TextBlock", + } + ], + "actions": [ + { + "type": "Action.Submit", + "title": "imBack", + "data": { + "msteams": { + "type": ActionTypes.im_back.value, + "value": "text", + } + }, + }, + { + "type": "Action.Submit", + "title": "message back", + "data": { + "msteams": { + "type": ActionTypes.message_back.value, + "value": {"key": "value"}, + } + }, + }, + { + "type": "Action.Submit", + "title": "message back local echo", + "data": { + "msteams": { + "type": ActionTypes.message_back.value, + "text": "text received by bots", + "displayText": "display text message back", + "value": {"key": "value"}, + } + }, + }, + { + "type": "Action.Submit", + "title": "invoke", + "data": { + "msteams": {"type": "invoke", "value": {"key": "value"}} + }, + }, + ], + } + ) + + @staticmethod + def create_adaptive_card_task_module(): + return CardFactory.adaptive_card( + { + "type": "AdaptiveCard", + "version": "1.2", + "body": [ + { + "type": "TextBlock", + "text": "Task Module Adaptive Card", + } + ], + "actions": [ + { + "type": "Action.Submit", + "title": "Launch Task Module", + "data": { + "msteams": { + "type": "invoke", + "value": '{\r\n "hiddenKey": ' + '"hidden value from task module launcher",\r\n "type": "task/fetch"\r\n}', + } + }, + } + ], + } + ) + + @staticmethod + def create_adaptive_card_submit(): + return CardFactory.adaptive_card( + { + "type": "AdaptiveCard", + "version": "1.2", + "body": [ + { + "type": "TextBlock", + "text": "Bot Builder actions", + }, + { + "type": "Input.Text", + "id": "x", + }, + ], + "actions": [ + { + "type": "Action.Submit", + "title": "Action.Submit", + "data": { + "key": "value", + }, + } + ], + } + ) + + @staticmethod + def create_adaptive_update_card() -> Attachment: + card = HeroCard(title="Update card", text="Update Card Action", buttons=[]) + + action = CardAction( + type=ActionTypes.message_back, + title="Update card title", + text="Update card text", + value={"count": 0}, + ) + + card.buttons.push(action) + + return CardFactory.hero_card(card) + + @staticmethod + def create_hero_card() -> Attachment: + card = HeroCard( + title="BotFramework Hero Card", + subtitle="Microsoft Bot Framework", + text="Build and connect intelligent bots to interact with your users naturally wherever they are, " + "from text/sms to Skype, Slack, Office 365 mail and other popular services.", + images=[ + CardImage( + url="https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/" + "buildreactionbotframework_960.jpg", + ) + ], + buttons=[ + CardAction( + type=ActionTypes.open_url, + title="Get Started", + value="https://docs.microsoft.com/bot-framework", + ) + ], + ) + return CardFactory.hero_card(card) + + @staticmethod + def create_thumbnail_card() -> Attachment: + card = ThumbnailCard( + title="BotFramework Thumbnail Card", + subtitle="Microsoft Bot Framework", + text="Build and connect intelligent bots to interact with your users naturally wherever they are, " + "from text/sms to Skype, Slack, Office 365 mail and other popular services.", + images=[ + CardImage( + url="https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/" + "buildreactionbotframework_960.jpg", + ) + ], + buttons=[ + CardAction( + type=ActionTypes.open_url, + title="Get Started", + value="https://docs.microsoft.com/bot-framework", + ) + ], + ) + return CardFactory.thumbnail_card(card) + + @staticmethod + def create_receipt_card() -> Attachment: + card = ReceiptCard( + title="John Doe", + facts=[ + Fact( + key="Order Number", + value="1234", + ), + Fact( + key="Payment Method", + value="VISA 5555-****", + ), + ], + items=[ + ReceiptItem( + title="Data Transfer", + image=CardImage( + url="https://github.com/amido/azure-vector-icons/raw/master/renders/traffic-manager.png", + ), + price="$ 38.45", + quantity="368", + ), + ReceiptItem( + title="App Service", + image=CardImage( + url="https://github.com/amido/azure-vector-icons/raw/master/renders/cloud-service.png", + ), + price="$ 45.00", + quantity="720", + ), + ], + total="$ 90.95", + tax="$ 7.50", + buttons=[ + CardAction( + type=ActionTypes.open_url, + title="More information", + image="https://account.windowsazure.com/content/6.10.1.38-.8225.160809-1618/aux-pre/" + "images/offer-icon-freetrial.png", + value="https://azure.microsoft.com/en-us/pricing/", + ) + ], + ) + return CardFactory.receipt_card(card) + + @staticmethod + def create_signin_card() -> Attachment: + card = SigninCard( + text="BotFramework Sign-in Card", + buttons=[ + CardAction( + type=ActionTypes.signin, + title="Sign-in", + value="https://login.microsoftonline.com/", + ) + ], + ) + + return CardFactory.signin_card(card) + + @staticmethod + def create_o365_connector_card() -> Attachment: + section = O365ConnectorCardSection( + title="**section title**", + text="section text", + activity_title="activity title", + activity_subtitle="activity subtitle", + activity_text="activity text", + activity_image="http://connectorsdemo.azurewebsites.net/images/MSC12_Oscar_002.jpg", + activity_image_type="avatar", + markdown=True, + facts=[ + O365ConnectorCardFact(name="Fact name 1", value="Fact value 1"), + O365ConnectorCardFact(name="Fact name 2", value="Fact value 2"), + ], + images=[ + O365ConnectorCardImage( + image="http://connectorsdemo.azurewebsites.net/images/" + "MicrosoftSurface_024_Cafe_OH-06315_VS_R1c.jpg", + title="image 1", + ), + O365ConnectorCardImage( + image="http://connectorsdemo.azurewebsites.net/images/WIN12_Scene_01.jpg", + title="image 2", + ), + O365ConnectorCardImage( + image="http://connectorsdemo.azurewebsites.net/images/WIN12_Anthony_02.jpg", + title="image 3", + ), + ], + ) + + action_card1 = O365ConnectorCardActionCard( + type="ActionCard", + name="Multiple Choice", + id="card-1", + inputs=[ + O365ConnectorCardMultichoiceInput( + type="MultichoiceInput", + id="list-1", + is_required=True, + title="Pick multiple options", + choices=[ + O365ConnectorCardMultichoiceInputChoice( + display="Choice 1", value="1" + ), + O365ConnectorCardMultichoiceInputChoice( + display="Choice 2", value="2" + ), + O365ConnectorCardMultichoiceInputChoice( + display="Choice 3", value="3" + ), + ], + style="expanded", + is_multi_select=True, + ), + O365ConnectorCardMultichoiceInput( + type="MultichoiceInput", + id="list-2", + is_required=True, + title="Pick multiple options", + choices=[ + O365ConnectorCardMultichoiceInputChoice( + display="Choice 4", value="4" + ), + O365ConnectorCardMultichoiceInputChoice( + display="Choice 5", value="5" + ), + O365ConnectorCardMultichoiceInputChoice( + display="Choice 6", value="6" + ), + ], + style="compact", + is_multi_select=True, + ), + O365ConnectorCardMultichoiceInput( + type="MultichoiceInput", + id="list-3", + is_required=False, + title="Pick an option", + choices=[ + O365ConnectorCardMultichoiceInputChoice( + display="Choice a", value="a" + ), + O365ConnectorCardMultichoiceInputChoice( + display="Choice b", value="b" + ), + O365ConnectorCardMultichoiceInputChoice( + display="Choice c", value="c" + ), + ], + style="expanded", + is_multi_select=False, + ), + O365ConnectorCardMultichoiceInput( + type="MultichoiceInput", + id="list-4", + is_required=False, + title="Pick an option", + choices=[ + O365ConnectorCardMultichoiceInputChoice( + display="Choice x", value="x" + ), + O365ConnectorCardMultichoiceInputChoice( + display="Choice y", value="y" + ), + O365ConnectorCardMultichoiceInputChoice( + display="Choice z", value="z" + ), + ], + style="compact", + is_multi_select=False, + ), + ], + actions=[ + O365ConnectorCardHttpPOST( + type="HttpPOST", + name="Send", + id="card-1-btn-1", + body='{"list1":"{{list-1.value}}", "list2":"{{list-2.value}}", ' + '"list3":"{{list-3.value}}", "list4":"{{list-4.value}}"}', + ) + ], + ) + + action_card2 = O365ConnectorCardActionCard( + type="ActionCard", + name="Text Input", + id="card-2", + inputs=[ + O365ConnectorCardTextInput( + type="TextInput", + id="text-1", + is_required=False, + title="multiline, no maxLength", + is_multiline=True, + ), + O365ConnectorCardTextInput( + type="TextInput", + id="text-2", + is_required=False, + title="single line, no maxLength", + is_multiline=False, + ), + O365ConnectorCardTextInput( + type="TextInput", + id="text-3", + is_required=True, + title="multiline, max len = 10, isRequired", + is_multiline=True, + max_length=10, + ), + O365ConnectorCardTextInput( + type="TextInput", + id="text-4", + is_required=True, + title="single line, max len = 10, isRequired", + is_multiline=False, + max_length=10, + ), + ], + actions=[ + O365ConnectorCardHttpPOST( + type="HttpPOST", + name="Send", + id="card-2-btn-1", + body='{"text1":"{{text-1.value}}", "text2":"{{text-2.value}}", ' + '"text3":"{{text-3.value}}", "text4":"{{text-4.value}}"}', + ) + ], + ) + + action_card3 = O365ConnectorCardActionCard( + type="ActionCard", + name="Date Input", + id="card-3", + inputs=[ + O365ConnectorCardDateInput( + type="DateInput", + id="date-1", + is_required=True, + title="date with time", + include_time=True, + ), + O365ConnectorCardDateInput( + type="DateInput", + id="date-2", + is_required=False, + title="date only", + include_time=False, + ), + ], + actions=[ + O365ConnectorCardHttpPOST( + type="HttpPOST", + name="Send", + id="card-3-btn-1", + body='{"date1":"{{date-1.value}}", "date2":"{{date-2.value}}"}', + ) + ], + ) + + card = O365ConnectorCard( + summary="O365 card summary", + theme_color="#E67A9E", + title="card title", + text="card text", + sections=[section], + potential_action=[ + action_card1, + action_card2, + action_card3, + O365ConnectorCardViewAction( + type="ViewAction", + name="View Action", + target=["http://microsoft.com"], + ), + O365ConnectorCardOpenUri( + type="OpenUri", + name="Open Uri", + id="open-uri", + targets=[ + O365ConnectorCardOpenUriTarget( + os="default", uri="http://microsoft.com" + ), + O365ConnectorCardOpenUriTarget( + os="iOS", uri="http://microsoft.com" + ), + O365ConnectorCardOpenUriTarget( + os="android", uri="http://microsoft.com" + ), + O365ConnectorCardOpenUriTarget( + os="windows", uri="http://microsoft.com" + ), + ], + ), + ], + ) + + return Attachment(content=card, content_type=ContentType.O365_CONNECTOR_CARD) + + @staticmethod + def create_teams_file_consent_card(file_name: str): + file_path = os.path.join(os.getcwd(), "Dialogs/Cards/Files", file_name) + file_size = os.path.getsize(file_path) + + consent_context = {{"filename", file_name}} + + file_card = FileConsentCard( + description="This is the file I want to send you", + size_in_bytes=file_size, + accept_context=consent_context, + decline_context=consent_context, + ) + + return Attachment( + content=file_card, + content_type=ContentType.FILE_CONSENT_CARD, + name=file_name, + ) + + @staticmethod + def create_animation_card(url: str) -> Attachment: + card = AnimationCard( + title="Animation Card", + media=[MediaUrl(url=url)], + autostart=True, + ) + return CardFactory.animation_card(card) + + @staticmethod + def create_audio_card(url: str) -> Attachment: + card = AudioCard(title="Audio Card", media=[MediaUrl(url=url)], autoloop=True) + return CardFactory.audio_card(card) + + @staticmethod + def create_video_card(url: str) -> Attachment: + card = VideoCard( + title="Video Card", + media=[MediaUrl(url=url)], + ) + return CardFactory.video_card(card) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/channel_supported_cards.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/channel_supported_cards.py new file mode 100644 index 0000000000..13cbffa194 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/channel_supported_cards.py @@ -0,0 +1,33 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from botframework.connector import Channels + +from dialogs.cards.card_options import CardOptions + + +UNSUPPORTED_CHANNEL_CARDS = { + Channels.emulator.value: [ + CardOptions.ADAPTIVE_CARD_TEAMS_TASK_MODULE, + CardOptions.ADAPTIVE_UPDATE, + CardOptions.O365, + CardOptions.TEAMS_FILE_CONSENT, + ], + Channels.direct_line.value: [CardOptions.ADAPTIVE_UPDATE], + Channels.telegram.value: [ + CardOptions.ADAPTIVE_CARD_BOT_ACTION, + CardOptions.ADAPTIVE_CARD_TEAMS_TASK_MODULE, + CardOptions.ADAPTIVE_CARD_SUBMIT_ACTION, + CardOptions.LIST, + CardOptions.TEAMS_FILE_CONSENT, + ], +} + + +class ChannelSupportedCards: + @staticmethod + def is_card_supported(channel: str, card_type: CardOptions): + if channel in UNSUPPORTED_CHANNEL_CARDS: + if card_type in UNSUPPORTED_CHANNEL_CARDS[channel]: + return False + return True diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/files/buildreactionbotframework.jpg b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/files/buildreactionbotframework.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f410fc137e4d78ef6934f7a06f7b0e50b7b45267 GIT binary patch literal 65992 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
    g&!070;qVGiM2~tPU?r5EUS(_U zTmD_|mif|aH;JHfQi~YJChpx$bRVZ&xZHdOCp=K;ykNMZonw})O7^k?yT(ahM`zco zg|Q(~iKF(L4zZq1I@^a4yWRK#)!ZC2dox$)7)KgzVMR5X-J9Y(fO-{E*i-p_G(AHZ z0%3(RLMlu^u3ezKc@!EaO);YbzmQ-BZafdhQyub8veI#si({ntKXZfsFX#V&f(>HXO~8I^D)BVQg?E+y;a`^z zY5S%vk33`L0j?CO&-R8gO*c_coDuL%4XmR$Qf)?1n{sScj5$ocQiZ@pn%ST#JSq4k zFb1fyzuI1xjeqBp+$ zmu@6keK+7jM(k-hszwoNySsJXNgor~Q0wc( zfd%n75_NfBIIvk*v6|Z>b_$I_%-TXE8jd{6OIj`}3Bsm+cZK=(03UwEF>oBWEwdAP znt^+z-H`G`Ndg+!NCVn2QlvN&TYNUt|6XsBU-qs_fOdUKY%M(aiOGs^Gq}D<_!3(t zcOE*=*K!gteNy@TdmBCDDA_}AswCQ8S%`fhZ&pC%WALc4$I{K;*d$N0-s$A1!1T^C zsj?{+hV)o-ubjHpatL3q5NBgJilv}a zI7MHKY*MGr6KE(@hBPW)xEi~)e!usaU%w5cHHa7Oj8XPwwu^Q9dHMM)KxQ3<_4bM7lY01jCEI zgqW_u)}}wUExa4A{`l$gK6@)rva(4~ixAt9y>z#W*HNEt=Lmup#$@ya-Q7_GLs2e# zc8V0O_?cl0QGH(t=bBD_!6!n_CZ`VZ#Y}T{r!5zECo*rD8fze7!V%h%wEfgLBXY{I zYbInUD-NW%JF3H|0&$O$ezy1|-EFek0Qn=?n?-d#EX@C%gPdtr;$;c@0-nkbmfLxx z39dCT$vcxDMiuwgB`b!2Y?f(-o=xU9=-UuH9Hm0L@cbp8YS$eBqhA`^vWA$=uzDuW zc>93tOBLKSK%#YF#B=j#zSiYyxEtty>W#zyfhzxiLeFFRAQeP2JXQ0r^ue;O@DUWU z%7$9Nq9~yTzG{}5Pi!#cQw-{Xbs9NzGx01;iO^zFPAx7$g=lmlOuMkscHG%b?SXPK z#7NmiMWC;U(T1tK6hj(*8nzPcoQ81NNibB0^G(CbIQD2GyirN|*@@Cq@K;+qH%SkYMP6CS=+91j$=FE^C8MxQQcqzVY>k58*Q@L1*BaIn`&c9B zm0ygbG#w`x;cBjB@Xym|h5f4=Jf%%M9}UOx$QWxbZRG;VQ;AkjCk{)2C=HW)t;Yn3lLFPulYmF>E4p(I^BBJf}59fT4sb62(>H>Xp zdt^(rQ@gM}(7H~i&YidEJjI6nnCAD}*2n*D1WJAo^V&X;na|nFrJxEo}gPqm-ZWO{f-pc>`|L#c5AcR z7mD9$|9I;QmyMi5%obd5ce)fOH$Y7M3EXzwj!Da8udJ&eNitbi8L%w8k&~ZZ+0;J9 zNz&c{?!s%&X_wLtPL@S{D#_c(lTIb>BLnn%W;ENm4#V2L{AfWa_enyZam62Jeje-z z+qDJO4Ik_)z@|;N`hFS}(Gi@r%B)jz%o7gTAme-Y8X%-#5)M>7bT~|FVTQ;YQ763db*$ZxeMp<+`jdLf58=YwOtIp135j1#||WyFD`+Q zlx74Z5HK+cq9PzQDGPHkv#@R{m*mf!id86&mC?@TZ^xVD*HZaa*fdMGb)Cf4A!xP`C0pg>l~6ofK~blkpYGCI|^TY@25 zFwbS<9S0VZi2K!xsGU@s>ub&mQ8l(c-|FzjpY}c{)y4{8DDaB1OzfEQbJLH>RaK%g zLfnJQKb{$0)5e9d^ojg%{jSbnY#&Iv^pM3sE zx&8l1*}?x2@Bbz7A5c(mF+MZ1`#yahROA@FVWs}BlR|c_a*LZRiUVrY&Q{Fwzkh`tQgBZmjax!P z8MA~RA1B7bjHle3T`aNSUDw3Qy46Wm4f{S$atC7;eDgBDOuS?@)&DD{1%Hml-3!Xb zi}w^0x#z7WLF@b-0$Br+lcb~dTM!90r{ABt$m7LtOBYH?+vsnH(t-@kjrAMZEJ+Pi zu#GP3xLgRS%7QMdOCKc6{0!2KAz1?P+&mhpm9;DG79B6bs==La`0`uSeRez(%dfFy z2A^R|krhV`y6TMz|$cIPQ3+FIqxmJ9mGys8=*1XWomgsY?1 z(cc2W9OB6~&uaB&7ajbHJ`z#!dsVDsT{yGO>!PW%(vaKg(DcUtymZO2$d9(Z$;lq+ z!N|Z}?VoJ9bOdcrutGE~i3O1AzswZTvoE0Dse}D!BIAU6JkToBq?C&9VovcHD1J6# zVO2nNR*0y#{^kT?DKDg#gE{8vZ%ZYvJ{|SBN|!qwj!1eIW=yO`js6{)Tpp(6 zjHdAJ1)kF2uL3c|lTJe9#+f({R0B%9jqx99_9LGAv+5eT<=?dW+m*2@0dH@@Gi~Q; zB4rwIYm{)(J4RwVqN4hLAK#iGIDC0VL!U9If#~6-$R8o9or62qWZ3FyaKBlr+%gxC0!xD)6*PShAWX+zq2OE08?A+w*LF(;uvSwHP0dtx&u8C*$&#WJ zjm%=xiOMkJ)`9VwvH_rHt+XCg{^JtwBiz2nnQ*4jgK`Mk=gSk1jVBas4Rgap2xZ#e z39&ulW|U%Q;{f&uHl#)3H%;d8YH_0J!%jNV(T9SVN3_#YHMEyF<Q2)id~7C$q&*1{wK{_nIh%B=~jVdBz6=K`x?m)Of{ndUk2C_xvfnmD!Nj zFE$f9U(($y_)8X_)<2zjZST)G@l51^%yvJ2IHRg8sxre{MfwtAf~LMO8p^_tW*d-1 ziVVopj~Fmsi&uALfn0HiiWMM@2FBF&(9xDyrgQ8wV2P2tmhqR*CM{v$43RuuHxcFB z_JM>jmXYBMB|$a-h9cln|{ctau=-FAZXH`>i?8v z^Wpx}VYpY-rBK4zyY{uh(b>OUJz3QhZ9>^sKo(Y-> z`aM1IxqNxJ$*`8iWj2pqZ3F zC_tD@56&9Nl?N!vW_f{NOY4n&fg3wavxa>z@1V7Y%TKEkB}NA=1eL}mvJ#ka6WV51 zZ=`k_MOLI)iS}6r(_{Yxl7!`F^Tio+H!;*NmrL~4;J#!e8m5aQ6q?r~0c?49s81vj%&$C=)R z+b%5EvJxvG${QpI*ilrHQr`yE*yGWVh3Sp(Di+(uv6$f>sDu+V8;3_qHsF6Wlh_QS zRZ8Vu4ZP1{u@rv!LgWp@{*31Q8AKW?QIcHpznDAAs5aX-+XoLGoM6Q@K!D&-+@0W7 z9D)_M7K*zB5AN>nE$(hbD!9{9q@~nO=gj+Y=FC~^%zxJT`eZ#HpWnUjoqg?Vxi_D1 z(It|nbkszF9%rSO`&vF&$M^7x@F+t3oTS9lBPoTWK~hwmmuKRr=&AN3xBw}CLfhlJ z{cbb;gh}q~nQTlnp z4|kQFG@%qk79dFxv?h#Jb(|7tYdc{gYtuA@Y(=(=hDT-K;j1vk)tt7!T_tuBMzb{j zJzXy}O{*U84L#W~!E%tt5u0mhIgo*Jz*L5mo<|UM5MObUO@;M~O+MIW*tv$D?p&0G zw9w>$^emL*aRi=BcUn$XR3PaC&s0Q1yLS$JmyYScJ}gz*W0{ab>fDP_rz7E8x#c^|J}wPdr3C|Cw4-8C8K~mwdGOa zl)VgMAKXC=Ec?0eg(l3RTzPMgBHBT$Yj>hFIEp*{Y-3Vz&??;Cf4j&n zBW3aZPc`=(-2|f)Rvu%z!*9uxX@BEOZdwYGLUX07GsBSGqDau6Yr%h3 zc6LU=@nv0k_Pg?FZ0uj%7SmW_zV*lJpVKwyUwt)iKfH(k%TrJPK*88y?Lx=SWwVjS z-Qlv0=Kg;hjdouAmNf(_KyV7D28nu#n!AJ!Xf;03QnFJ? zU#X`9`malo1^Bdg(_l7ht)Q6ta4!u=`DM|f^tL=9{M~!46 zvPK+asXxm$8uiJ`?EV?1US<+z#+VXbao2o`m0q~u>&IQMq&alzA%cj{?Ro2#$7GbNsiJvRH%>UF%%^kff=-;JR>{=y%p*mfrCJ<0H;XdjAaw+OD5eV=H27Xv*Xk4I`S1vTYB{$I_FUTUs zPJ1}3o@Wa_A}Sg{#F88!6_QiSl;CL(RfhWfsVh%-*tnu24glj5OC9g+fBXtA%6Jd= za4Rt48*4-nf>}{CCc%76FuN1FSA3|0dVPo&ERK~(HB6aX>gD5+@-3#4&{75&zEG~G z?x`&2y=f^+u4-B=8p>2H1fT*}TbTyyg%j}G2U#cMf+yqglhPCM4pPY$zc$>}L~$-+ zw0Vn@HY*V5CF_)q5|MYEAl!<`H15!UpU5xR{|K(tEYOEG^5lPD!p!RV;Hvz_k>l8x zBAOI*JXVe3#WEA;u7$C25zQ$Kd4NzBM(3B9$gw+tFHerI4!?(J?D50{qy7Z1i5nCO@O2qz=y&O0oLL6y zc>M~gReam9??tuwn`W3JDAjVi`x(6emN5BT&*5Ru+W$%H|M&m)PoPoZZ=jK1GjR6u z@wvlU&oicStwx(Khk_zb_uXx0Lc+4?2I7^;WN48^MHCt=fT+>G#aw$IYtrg;*Yq;D z6$6QQ8HEup%}O#<&see)K8SNgn{YW%SJxlJI*jm;e(x(#)_C^vPZC&DJy z$JRX%FDU zaGtkW52_NsUN~<{wHA#Z5}T~7B-^nhwbvHEv3r_d5l!8(JeYONp?kiT!9Yxt?x{01 z-+WWiU>GYhr+I?b9UyLSk@YOdpf)hs;Euk7#cCx%jesn7G|JkvlO`xYg9E1|cuU{d zJR$0iw@lGc?OT-|P!Ls@XfMl$cn4B`L~SIww7oa zkpuOy`%%qpKx{7gYZkFHiS*9hjeRY|w0A4A!|#V?(H@PC#^>{nQGKo+zZ>0bnb__9 zK8y0SsfN0OWb%%sY1Y8zP|rn)UU!52uA%SVbG1+JP2!Du#UK0^EB2HF@bg*Jz0Q0+ zo;RjU#av9Bt$o)OujefDe_@(olI5Y~8vnX=1DwzN+I3V2k92OjM_(rXwAb+b&k2Sc za2VVri$xs=KAl9_)mCxPPHz?Fg@Xu^ERegHBF-gM+?>`Yia0^6BcB# z0zOa;JcHo3>NpL@;Xd2Z)3TE=vb*ClEi%G*Rg`}90dHNQppd+bcI(9cRv=_-?$An_ zAX`F+$Y06MMw;zuu=fvFoD)o@p$Q9ylD4)R^-_a-re0aXcWLmwA>5vqo+#fs@C>!5 zEop|S-)h!kU!dDSWi=9NYBkuUxt>Ro=A7Q=b&EdkK*(F_!*5ks*=M6l68yUfYzr=$ z{1fmu1n@7R#y>(K6JhXoa5`{;VEc{3*$XSCYL&m^P@`8c=gxtF2PM@P$^CyVg)|(_ z{eV2i7|t4RPfP_;PgxLVrfZ#VIXH|4KxrLknk3q&nMsb9pw>V(PJ&V7zuny4?xB+#7P4>ISqsxNh4$<1)DeVFYlJh(U8 zi=~sc_Cn3?@G(K-!uptR2|i)GYuCtI&-n3!)?>A(@x1qI-SI`V5o;%{C$E*`Li~xC zg0#g^_M}SdgICUZsJ6Vcq`}LUhYB%%u4V-+^r&~!NcP@rot#0EZPZZ^yf|hMAxBKBs zNRaBBy?pEIBrn^9Lk;Vr8=F@XV%Bs7c@#D381cjMV|!7m7@SkR7&%cH=xMT;d0JSQ zi)5^w3E|#s1QJ^B=c2)pnC5p2ft)nnX3DMdK@?hC-Yl~%M-sCVVkZn#`0_RXC?De*0FCd6{o17WR{F>X}?i)h&;7Wl(;)$Eo-!s0+H)?otY&Zn$i+tLg zyQZpQ%&rF>{<1y1IacBwG)q+a>~xJ))6Fg+J2#rf(BvUd!73Rz*r(<~TaD5xH*=y> z;aOWR5b*Rlp-yl0-7Ym%ZgEY4nT2}^y8)Pvn+`@9@p zNcszjDMhD;jrpzV!N`fMWcnd45ab%#!ADW91;4%$ojfIBSqLYF?hQoC+wYcF>)8<*Q%bdz=Q0vL`S1-dpW4vx*oAbJE zW`V3pb~D*DU`nWg3`b9X6N4n~X2ET0i&V~H8Uv1o`eIH3vZJyKoRl!Hfy`@&{(G5k zYCu>dW#<<4f6me?mPk(+kkcV1dlIVM-g5TM+>y$8hPmu^zK&Q0jTdFaApd2mDCoDP zC4qi+)A)G~pQeXVSt7MV?$Ph>TItBI{<+8I2dAG2AUC2VzNBTFa$^R`ZRt_W#Ciwl zo&(gp~S1NeWK~*kCHSo_l zN%YF=OqaDBkSd}vsb=pUYw8Y{&N1$oh1lA*TH1o1#*M8i*!|E$jNFhMB*e|aUZ;78 z*}h0)HF#!23TQda;_-{NdeYupk8}JvTWA7HKUFz6>x(*$8yYGil|?lP*eTn zNg)hD#uUjkOyo5pY;F{ch`-_UUpo)Fb$pw@tW6vB!Gb!^h!*2HIRNDQRl~L`sgo@m zCapTWj+fl0tC$yNQwAHwFD3=y%BG{yP?5!Nm$I`Y(PxqR_2CYbaj>B0`D#kdl)%X| zW}_!b8m1b1mm;D#rlwe5_A>k64MA18OVJ5sn(etF;}q0kCiH5Z1o9vQK?=)>2U8oC zXE(-njAUqG6Bm&YbmNRv@?!)(t9Yt&hac<}<&Leh!;T=u58R(_JmmK z8GA6>xau%t>&!3G5*x^tDtaD|=_hYq)@WNu9}Q9374Nv0M{9uETZ?B@>D}vXhB=-; zGc6vt#W&UH5`d)9wh>u+Ne}C;N)f$Nw+(tPR4Uz$x7>R;sEmw$G`d)%93I!jG@{u& z$}vk0J%YKZ?v{ID8se3%W{Hb&>^ym@HPwzKCbO5VI{i&O!M%1I9zM8yRJ9r{Rhb-<7b(=WuivIF;7JW)2q|O8w}z?DD~w0uu#!9v47n*JI~xJr zczQO-v*R4sXl`ad{!L&^AJjMDP6aQgsc}0pcy79$5EoVR-Ik4_JbjmsySf~r=U+=v zf({O5c`Rc6b6h<>cV#!Wct8K!$J%miYOpM*=C!ovu;RK!`?j|A4K!hV>EGk8ij-+Q_>n!D8i_Tg`7GT-xzwQ|(7IOcM?m82%L}LYzCq?s%u2GA z?Q3?lSk^L$L1cA~l|9%|${k$HRYuInInwki)G|eXIJmL1@yE-XE*CiTYb@Gc>qG3 zgx|xh_Of$AG*=o`fG6%y;5C^_u zXNZkky70=sAlUHlP{6@OERH_c^qeB3ad#rnW>V^ve>uz?{$8U#831mtK~9P}g9 zB%tB(ByzXekvQT6h6r3d>J&HUUN+gZJ%bUbyqJ5K7?1Aj+e+D%0`2JQq&AimTUsfM zW$UccOJ}nUYvdOu2hCV6CliEcW=F4(JaK~zGAZ1 zbI(XneL`(t!i6A_$D$A%2E*0!T!4C5Q3*S+d{?pf$O+e)XkReWR$Vj;zTZ8BXGBlk zCak|~E|iyuK2pqOkz7$F&vKn^1c(NI%VQ*{iJPJp)?1$hpv;7`KBIL_dqM1KdfTWhr>5bHJFVz_1rZ-6oDrnT2 zNqfg-PhMs>z4&?OS;}uqPWf(-L5r-XZiZ-)SVLI@-2BGJUM zq1EWD69lyYacNn$=u)w&zFrzLZ&N$_OsQL z0O5cFlmYgyF4@fn9K)5@+>G{}5i#~f1Vn=CtJJ6!u8R^YmzWND+CQS!WxlKM@{H6Q{TROVF=6 zkK%m2{XUeH;UfE4@ z@E4W#5d!3-(Id|==d>V21*tY5+0Yx?J#G#vCh0ic0;T!EW{Gi`_CE!mz8PNw?I$0uwH}f3+YH-KTj#_JCXZ@9-162t zEdA**a~k#%xfmd|+So~-Q8mYY7I$i~NfwvX#T57A4r|gR*)Tmgt!=W(k7$Fe#G=r% zQd=yI?Y-*u*!8RIrmofxvnCj$nO;njlWcyqyGdtpI@uy=FVXX$(pfsOYp1+73GXP5 zm)dKox<=^UHO00pH2jYiyvsQm{1CHw+?t!waU!s?$$cZvdv-K?FLdhHAYCF1_sp<2 zWr1X%MHHH1ayou>`alvSHxaH(iAK%7fk!T>KvW~vG6vnskU|+`Xg$@w*H{H#f7NMO~{Pq^{b>_m+h5Rt8l7s zOG2JB3pL~vs7s1qf{vs&HNx`C0NOkR z@yS0IUa2LE?MMMd9laHJfr=sMPfOzm&ePPit4aObi-hk7xUi#INzfL^p&j}HO%#fQ zS@TXLjq;lnUDO3_?{@kHGdDs?G}>k-qwcK+bZdTJ^70TLkEp3mmyg=1&OIS9Fj)Gc zr|0HcAVA$4cZG)t5yYcmPhE^9TkSIAriUnSdmSlsPM$S%jlo$iN}0!+RQyT!eYHW; zIY&iSPuyJ_#kr}ntGbvE@foTd21Dy(*V#^jP2Ol zIoFc=KQk^!!NW-QHYYeJB@`vwHJ1chX>q_LSU#B6-&Q~GUzymCZmcJt?MO6F$o!ae z9)sbV2`-D4<5MbUo!- zU4L#0R?kwaYePbBDZLFr{S+C?!)X>DyM%on$elEGf_rTG)}ueC28WE^qmw=aDZwAv zpM4AkLB{KOd-AnbNtaIabQR1lKavXr#*BtlqG`cO%K#B;){+B-a4l78Fdl`WC?GY! zWAdC4&Z?hPaa1~`c4hf3jPw&jl1D*Z_$J3`1*1v?R6E%~LaypnDH#{ESS-W+oMS9p z4!s6}DZexd+*L@tc*`awTFo^v)YZq&;q{?ILT5caFtklrdv{>3mWs%)a9Z^+mKj!R zFH-=k_HT4FW-*-Ov@=sZH=WHbYqnSxJE0`qUe&A{`Q0uAPbi3$5y_g3u@I$U+-Dp3VUzxs48^-Q|2=`o zf36R&oL3zjc7gMk+gc3+00;V9t?z{Z%yJ>F0O1mVfO?SoH+dQh`cr&cV)DLwN##T&pNW!xF>Ha2NhbJOTMc<#_ZJaj!MP=%qpKqmL2C$yRkQYkccW zZF92|Nl;XmBh_j8A`2%-=7Ks7b{r0MO3ano5jxisOuEOeYJZ!Cf}hlo#M$tP2ryZ8=7x^Tg0wzTqu4NW^{;E9&Xf-Y^}rNt6BJVVQTk`}u*6 z`#^AC2tF>2yo1}$$yS-3L8Ir7>}9)G#8e&p0-M*0iddlI(!$(l?v?!-Zuy?VIKdn) zOtrunSwO-;0%NVC1fw&c3Y^S=f|UiwM^lLncZyCN=PO5*e1dHzP%=@&r%C#>izu} zlK2tl@{~kkM}n(Zlb9mPBftQJ;?Sq`*p5)Csm=NPsx$;)^^&(Q;Aqud?+hWBr;3dq zr{I-j1;$Vf-S=3~zL#v*zIA_-_$+Z0#7p4UY?3{(X|Kb60&bMCB7vyHF<2b;A;}K7 zLh_3_Xp`o@z51!x{D;B>v-eg1MR&Jp<;Jx8PAaERiI&*Pa`ZGl78HT0LZ}C-xox4_ zs1ynV=9eS-IT7gjw=r~JQcw>?jdNp41_?cobRPiVKyq>#AUvnTOVPLFb;W=Ncm+-N zJuWT!xD-RzSjQ3UT8v=O%CoMR(xU=?b=y9VHIWMDRB~Ks@0jd_g4Cj9_TzNk+E4N& z%dE?-Os}Xn=@N#<^5nq^BFtNsQCX#7>+ub5fQgjw>g8=8gIl;yesp&B`I0c@6$Rq1 zxBabu_+!$rmuSdla;q~Q>xSJTAuK_U>D31pV;W%cjBUD$Q6jE)L2MazWNv*ouUo@a zyl~K#`8;nTOaghSet%lwmnlF!P==Ny7I5i6o@9S!_jJX3M;Lls3^o;#tdt4=YP$W#?LF^|f0Ibq#N!q&D}A1#l!oYnXhFe7yV+rnSimvj4C zRCvSK@&E8!w=ny6)MP9@=yxxUYPw#jV4~T_qY@44H+Yb} zRy_F56}pFFNGEQ+=c=v#w5m1fRk|VdqoeCfZT-!ZH-7T`SaDJ{`{m+!%9zzFi9pi% zsj+fHfsqZ;Am7XSE4W>u=IbTbKX;|N1Pdk(rhB$z?smyj+re;AvX>aDk*w_!fEnNf zYb`}} zQQf|g-_0BK2btCTej{VqOC1fmK!rcB?|Md8!dR|?bgt)lmCr|?OSVD+SQ@4G{0>rH zmP=%=tpvTEpF0RJa&s~gGS6=frSoGDV|bD(JZ%tBq(xQBQBhvh>A|HGRi-y58eLC% zdD=GG+4;5eZp7;F&lD0D7LA2D>up7dFP-P3rz{)|jrIX@!)z6(q$!_3nGRSeDA3XI zz+P#&L}0*olI<6r@(N&rXV?t$c?S_TxN&&U(;=^%Us+|rtrPa^TVagKk<1F_S<;?A zd;>Gl@}xX0w06AT4IFk~s59q|eq)MV!FKiHv>Eeb11sBpb?|a|yLWlLp5LLN&0%z> zLBpqRYj~YkG8nM`qo4nwkyVm0(OY8%-;nzz?;X9zrz4Rd+@ChW-`|^OZ6yrfd#7of zvI(=_%TXpO){WZ+wD!J&->$8G)HfDZ2+e*{axz<)7jd07`^`)#_yvLEr=!`PXX|;{ zFcM-+Q`Phx6duDXG4`$k_jo&HWk{UE#87!812r`xBUk_)R$`L|0s|O1AyCsRxo{k! zcOqzp+g}24;;{w9-jQK8nv&yCq4K+7jnPAV@+HaJgS9?90rzA%YZJDZ1=;V`$~doj zZtn^P{cUf>0=W1?o{E`I;sv>V`Y!BE99D>rJZyXI=ep=XlB2&}ykJV6?b3Koy%?lo zl_Lf5Hmx&r>zxaFmizgSp;M!};~D?Ugu&#Hcb>gEa^7>zpVvFzdz^5U)@rGP>q+wS zF3l<-Wf7m>mn>xeDiEstxV}ihZ(Z?U7Pb5X1y|=a*C5S@FN8FW&mp~ZY#HWPM;RAY zf)~;QRaaP17y_(Ys(rEvA)jSe$Y8`c6uEk}af=c0L$bSN0teQhy3a5#fdi0pM!`U? zW|Y{236qW8j8ro5)Xdsq`z)D5Q;kk3y&TWrauSBB@FA_-aai8W)w4(@l1~R>E5_K6 z$2!%9Uv!;!-cdLO3XJtztkLF$V2DK^T32XZW5UY|UF9PmSo06HaEoIX>HJ1DHSKHj zkp!0r$p&)tMzg!O9^Q9^km5(z7aKlAvhfN8uAZl=>=iCMQxSXdP|Yq}y+YL}T2d-C zAy11oY&wHnyxWYpG`@HYw>$<-dC&dz_JGPbT?y{a-z61H)|>59M~LYu{DpZFWiuyq z$EQ}dO3Fm36u>9YG}5hH=;NtiYpz;c62Gsv9JMZReJp~Iykk6U$rHeehR!H!o#`@k z5yBPCDBh+LLm$Vo9J6appq8cR&>j_EV9j%SmjGvrA-H+#(L9lpamPhnGAAOxN$12z zN7Ch%uq(CD{$n=#w0R?U-Sw`mZc*KJJFI;WOJk-b+vS<4Z=j6Q#AFEEuogj$wDDrR zfoYhNQBoav#J_Fy+)@-Z{=2mT0=LbIg?HYub;VuIur0E<8&G+$tjUD0z;O_uj<04R zBdb%}i_b#)RZA{|9yJeTk&v)*$ourO;Jl0!>V1=v_%z1c;My3r3@#c*Ccq|G$qNp^ zU*im1kKj`WLWXc`Zo(#jEApk&bAp59S1_}}KI%ULxNmQzZLxfV-XCqwo`$t7RG2!L zts6brGU{{*xuZ2)?`ADa(yMXKTl43%O1gUPy-j6@K$qaN>j@u<(#(hIK$8ZG|1PpJ{?n%1iS0Y_!aL zjBd4+MDgS6jF8&X1SXNYWm>k{=Rz?OnZ08Hb!5b%PCq14J=$l;JEzRyOT> zBgT$6cwx!=N+5y5G2qbnUoU-Rn1vKa9V5|s5_ebk!Gx$(M`4f~pPbGi_)pt6a21WR zj<`oLqN0kh{%b{jkXE_|_Jz@*pumKjqO5Sqj^O4E27877-%W%Sf?u-VnSs9>GhdwM z^XC;I{7-J0ldLSs3oAO=qH4ZStm)19dEj`O6m;4O#bkbGOo}tLEu3W|mc$EhYEz>f z#?W%^;%<6It}Ct#dro6GiO>Ar;+2!p)0sU}c}cbJlaL?;*C@N4IY}gm-FSC=#kY>R zxe9M&gJqDdl;%KS*~MqYu8zd=@~=3NF+ku8j{Mo-nv|V(=DUSlHInDp(BVNM)+NE= zJPAGQp<$<74y?$!jy@DJODK47*Y8~cwwK^S*f}33q7`+5XnJ@*DfZp2ky_RT{=jaijrd3nlJHTWw(Q8CFMDU~(en#7ik z;o@lV#m%=(bv)hVtUX~~y43p_^WHc_8mB5-A+u`}Kg$EG>!CA!R0%(`4#cf`b2Cl% zn)R!?U`mBT?K-2SxhB5F+v3h8&Z8IRs!8Xm4S8`VTuq*4CgvJ}ON?f|-gkUZ!kNXq z_}K898>X%4z%V0KlhOTQ-F`3@Dvd~kfK3i^{k;=!XbG$wZu*u~-M`KC6%Z#pQVeBx)i5%Ga!U;FFI423% zbMvLwefEKAH={krMQbac1V@J|w^0e?8IzEvCllIK@POUU!1st{0{(DRc)z(-JgP+S z^+%9}I`5fM)P2UyYQ=M@woJ3?Cc0ZR zS=kglSl{WNmC*$gmB0I2)&)A}Ee9$XD$N~1L2bJv?MCdRv4%{n#{(? zg>4#f7*kjiyvt2OP`OSjy3#yJs$0gTVcnDJd_2r8@g)yF_#W|}j#K=5pb>|~dF@9K z?BR%zW)X3AOD|q-_!kNXzA%?x-PLpGx{(-EaK6^`b=gD8@kj;Ap=tC9cFHh4bZZ-S z^*npK8Ccg)W0@@DQqUGX!BAQ`r4EVp4?G@zYKQ6(mVvARY+`~o=q&xIBcqMt)2?!2 z+JPTQ@>bq}2HPoGVmk_c>&Ox#7H{@K^fV z5v&r0Qu)Oy=z>7*8S%)I>u*e=-TG2+}Vw(twCDvl)l2lmf0augnsADywJhh==+s(Y4I;cPYMhylGpcR z<%*KYBY;#9QM?EmN+uj~p;86_w{2_deD$pA76VlczSZ?XU7 z701W0nX$1a6T&x}fdK3HOs$7#m13{eDUIpj$JU)Fj6!Gb>;YopZoyNb>{ia$>w%=m z(K7w_eNYDPgh0xON6a=ZHV>|HzP#tgEJ{XIhI{6~alr$J;S`K~a#aF#|Mf=|(!p@l zLJZt6Mgq5gfteZy$>^i#Xy}1FCpGt(+fCtRWR+--GE)s(PiHOuV z)s+*rv|UZEpZ)m-Sb;=Da~Hj?X6|MXl+&ElWQrgS%E}F@Iu*~Sv?j|R!yCuQv$b0q zv!j+u7bgJwB%|u+vxK`-By4!~;XCa_@rmbyJ-=)=cjuDS2T#^Nc$86wsqAsh{34(x zP*-6ri&wbg-PLGSH^|Lwo$RTNkZq3xdsBwT2`ker7K*!`-YJmLCe4`X32w@P++u#~ z=X>W_c(rsjn$}XF7F;t6TAif*Y<3>*u@&t}#6H@`=_vNh=w?dw{#`A{T0U-leQw|4 z;~srQw|N75ILp1rD!t*^mNY!Rk>tts;ar&Mca<&<3SzFg!NVACOQh?#HA!;=u8)Qz z0rlk!OhQrCLP2k^bE!=M@!=#S_Rk{Jb#F|nZXm@*#I%!86c zYHb*GZ-~RE)s*x|7PT}RqB(PGo zFx~;?{iJ@&%nvJmzvhx^O2^wh94|??_>IjG8O&MpYVoPHotU*sk8{HkBLxoI@R;-r zxjXeX&W7yXh+XZ6t*M2ldC}b`lwjSXtb~>_L)5sQicrPERxRhsWoPMS&aXbZY}0-5vr3mqNQU!kDo9)C?2Uv7M5BWf4e;qt4xIuqT~7ZdCxy1@ZdiqC~esQH+g z>Jiy(#xS0M=ELkO=ac%^W{<(v zawz%gck$^_PP;+rb!B98Qpll20^-Zuj=$?vN`?rA?1x6f!f;qaSuqOhuAsMcN-;a2 zYrJiD20Jt|uNQCkndg$k!NAfMYg4b>7a|xegxmrFXZyLaW7dqvRlmu^z5O3$7pFS` z`m?!VTnx`lKOlSHs=Y*mtv$kjyxNiNjp6&*9SGpvl92B{^>&ZNOW9gIQ&0^OI%@Y| za;`+}Iq6<&uF5Fu)OFDEo&54rm5thaip)9c5f;F=p_q_k@spU})i0TZt??z5x_69$ zK)oE8*@=a$Uh4-}U;d?*Z7DOqkP@x=Z%*LhDYyTvt8WT2p7hw(2m^(#N9TPU8TkE{ z)fu1jV-^F^23BDvBTWu;fAU>9u=KSu$ZI4#>HLA4=LB8x^Z2%0?m%S*9)j%yno;7{ zP~j-UY*IRzrJu@{`V?_u(7Mn;0qs$nvSw*%Uf*}HckH|fcNjiTrdh+8V6TNOS%E0M z@1~rYcj63Nm$f>s{d_;^MMEr~Ki8Agt@?t)t3I4A9_6w!4gqu$({@FJ1ayOJ@`3AZ z!3bpoOR#Q6c7y|xTeCiZ+ga`YXIAe*uqB3idL!0#vYBk3RV7#1RMly_Q4=~;gOx(* z$Hqzp^JssVDW)L=*?H~YRdLMqC3+XJ5S~^k*GizpI+qZfP2~O+EXV8&EU9FZqt4r% z0}mx?99>6>aH23lU5t57Cf0prID@7_4<81we8{ayo~U#kqtWpbR4#}{31#dihS-<8gZ;lV<>G!=DS4Ogpzw~ zVyVm!`(1sf|EY1Pzd~XChmKR+t~-t8b4cjlaVWzp>Ado|4wt`{f)u5n`!k zj;{pF&Y|eEdsUfdNEG&OH-b3B$Zlew$DR{EIFpSgZtNqAKLLspldP*#J&c|VPwm~{ z`wtP34%=1$AA#tBR2 zh-UxiFZ;lKKPTR$H6(eVwyD-?N)=}j+vX1Z8N#L8_yrjyx+)40PaW8Dij{I8-G+DB zUpklUearcn6hG+;#pOuHN46PAwRP~4rIY6@{od|3asi8TAHyjtLJTgr7}rGo%4})g z-dN50od-`}F&GaIp~?&o<15kRI7&=lF7EOZfg%ovB@Se+gak~n^Oz8*jfxV*+qi2x zd9}W4u83Jwf8m1z2a0PUg7s~2&Wf7+davL60O2yhQ2}q(-DBq^MijMTpi4T68yh(x z@V6mQ$LyWNVR=m&>E@c=hfa5u=;-WG(A@YtXO|&EUQSb&YO4WDL)hj95&u|wqMAV+ z1DuO_^a7rJK?dOqKH3pkvzpMDmF%)vqm+;4FpjW(-S zX@(TGrMFd%bzkg+Xj=quiZtA1)MfiHo&8lw@d)fT{$%+1V4t6dWs-!JPbEF$&C;?2{2T{((Iu|@hV}E#b|U)6KK2_JzC9_ z%1Uxhz%E5V#M4`B(WxxhWiX$Dlt8&cStp(`)+1}G@#j}q>h)5dd%rBtnfOqXK*r)o*i2DoN0ws)fMy(l+*d>2x*KrK z7-X=kZrgMve1OD~e0eBr^R8*^pgeFGv#BWYjJLCAgL~~rW(hhh`GK{Vj~P|fVp-$D z75__H@IQ_!|35taccp-R?7VsrWFL4u_xSudB=w1SwIttJ>Zl&fWw5$klL!~n7g(+zxTZeN~`^ss116=_`ZFt{G#~(B@vB^f{VAkL81${)QQznTt{xX#c00 z=4Vz3U4g)1B$)Bza+xL(K#Y47+rdQEnlqew)DxhH&8}?2hOxxRg#FUGYDTss9aHg} z1&VG$1w0ZKIROt}e!o1{?ESQvgBd$s=TNL6^QufDRdKKXa~{t)wYa`r;9Iu!$XuTL zj#uscnUf!@_pl3JPk#)eQ!l(w$``D$ua9G&6=f7 z(bPz7%2;#-F^7J?P|r>l#aY$|5(g)8t7;f_XmPN;(jIt|9`=Wc*KCc{bFX0YNJ3?9 zPPHpSXU277-LRHU@0?^jDgUHlt3JKgZB!NgX$eqB4M1(s0F9`Is`d-Gi3$LSp^Rt( zzJoATbEp&v2IisW1JXB|ovrbh3Z0z*vkCyiTWE)S50@$4OofLzbafj_PZMjzu&4C6rh+b*i| zTfe5X$Q{h=v3IJ@0Dre=S1zTfgh@y}ccu@@S-hrk(+N9#*N&kdLlVo$PejO)$$m;X#nnnrKuA$3&D^TA!0&CbeTLFmhnB#$cJP1e1Z*hQLx(K-#)QJW^p3__-4dwWZ5n_ION&Avdh zyu`Rusg8XPWS%1Cb?A~U-KmJsA0KsiASGFvyx=dptEJVjvS6&=epB5f(i{D}=n1Mu z5*qY&H*lyT2(Wv$LuIODvS)Jj0>m0lz2Cd`!CFTw$U!kl(grW>LPUyP_B_y>o?>HJ zZ6xq>5{E*-E3d@fXPt)k$YF8{A~UNWbchWL7k~8h%yePI+#Q@MN?k4)rf#vF1R2eA zBC6g(S8^fc{@FN6uJx+wr$|bTM2^BL!*`8RqG4^QiFa|wpgqr5{VIrMvCK6_7O^P0 ztv8BU0pR{cA`-uIYaVDFdjyxXmej@{^B8?!Pu~j_ht^X+X=33>+&O-mqGQc3Tuocf z@r-DPS6rapd0~}QQlx+@3z5HL2|H!FM{*snO*VJf#yQgn5Wb))E!V3^I`ax{5uyrO zxn!p4cq*~?rE$?Zc2|RjCgZ#&>w*_k#4Lc*>1Hjggb5fsKEs(qrh8c{9}U=TC*ek; zMA@6l2gQ-0!s0sQC2N-qYi+QSEjB*O&k{&^&FgnLkIf3;(O|r|G|rK?83m)O#fCE^ zzI=-o7LIABQAb^vF*Ws|VFe2j9w%|a&2Kb>G0w&`6l&2|B-NSaa0TLBsJ!5QY%+*NUa*r=iSY zQ-4BhxvYFmQhg%L;_NwOL(P$W&Sach3clC7@!yAqeK(!?1kW!I8~xrwqOpw_m2vca zQIFHKxohGpn&c&9J}f44gya*2HcH1_Cg5EQixS1Zr@v9l+3_|oQJy-;gl)kr+QLOe z!k^BuAeyi=94D&Fe|&}f*tPT=-KbKKY%i)hD>`jb>Fvl)HC8XaF;FFTo{!Lyi@uxn zy`W5fyedLWLm|!?A)xfF(8$*cst==xEg#-;2o`Ph=Xo(lIM4+wmvo|B4n7nTisB%K zo;QeP{7Nit=C4SOT}(FhbGe}gJ7;`F z^5nAA2TcGpMgpjLN&pdL95tp8VrC{ArQ}gi6hlp)F2y0P&+qe+6J*Hzw=`}fNRx>p zPB~^<{}*##85BpuZaEBt>%ahm%OHaf?g=^!Fuj=Sn8qWqzv66=uz!xghFx^!Z+VZ9^W; z_^e+eK%44U%EeUFpL+~RK@Sd)Uan?BD=1%)wa2C2kpn=w{%a0NEqv5ZC2a0l_pu(2 z$1hqPpoO_$+R^c8NmwJ^X}BNko)FDcFf2BXlIi0z}!hG zpDZyYd?iriAop=!N&ND*!N~Isl_JLq<~+~X$b=CV8DC~$iLJG%uD-j3g(-7y%=>n~ zJEHEI^gh)J*&Vc$DKLQCbtvIm9&bpjGO2hRB($4vF_`Ib<=QV+?zZ@JWcMIRqa1gi zd3fBSotdm+z+&%&cN)}4<)o<*+LVzf6cJ+aQF3VWpfUkB4#vCJwryLQ(HvPnlFE8i ztAs2vYQN*Q^UHa&=wU`P#BCg6Ls^e;0(`~wPpw?w1m?P#azN2}{atrc^T$!%tw z2zQrr&Z~hSkg=A4V8NwN-*)g9?65kKN7d2l$7g)D(Z7vqw#pCWC?NS49H zp05{vD!wWsB`mj)wsjq~Ui~B?Q?axvyzHfI7Gt_X-R#7l1>Isr{T0-~r|xw&1t|&g zU$2QG1|SmB9vw`&S}$QnptsR=b>SF)MIkUSqEDzYS*X1DM}^C^V6mO&zPe@l?D_dG zeb54A8+${2(jWSg7iQt#_?Z;dm_QZO`(!=sH1}p||{f>^n*0 zowaKntD$)E6CJSE0{>6LyIkWLBms<-)!+rXod~=(_R2;;LvbbXA z4786%bd)UFX?Tocc$Zc^D@OG_0qV^gv3rxZ9dpCzH-q8ioPv*;Pf|N7wD0Km4Pn_t zFOpq1)S0oT=0!Yy;H7AdyhFgf zWAcL}2SP2+VKudzu?Q@^)zg)o@Z6`J8mf^99~mbDWr!qHmnrp0jk2h_l3Zw^xq1}I z_1!7N$V?hdB~Ei|=TvW=$eB5r%G1Wt2mhLx_;RNO>s6H~2c%%OW!If{k<>@E)OaP9 z$*&pY7v-Uz-kVb}G#lP2B9S5!y6o%gCsc}5)J}MS&)*T`4DwGwLQ?MwcR#Q=|DiPy zs#39;`}8jNiAGN7RLxmLcU^m^#P@lcliU}zsS-++-{aH2fC@r;=*eC?*Bj50zizrO z=Tc(Z63T)B0l3Qjf8+7PgjF*D|JgF=h$?i!EXZmf3ISFsHO zfSTk#bMIodw;_$%wCSVfJp%LNz-CgS?@Rq6o}w-zeI@c?RnV*io$Rp+f$sLl?;Z)ahNc?DX1u27J~iO{#gUQ|RTg(_f+Ub&DM{^JgA+eL6!0v3FlT zA>BNXOfs527wF6Re-;Pv4=7Z--0od6kRS2re}PL_wGMk?a;c&qtS5PX+dha=#Ubw- z9A&(QlfHe4kecmKmlo5h0Ktivcp=U?`9NBz1e%zS;f<|t!oG<)c-?9<%Ma_SL?D~u z=K3)<-WbU{r{>;}^nn1HMJ`NvMd>?F={b5#&ui~uyCAJGTt0(O<-b19NI0mEBO|`Y z3g^G)tTb(!Rg-n}tqIe+tyowA9|~upNhM3}vR~d%CMkjo22R&>_jIru*Clu*Xkm0& zNOv__AO|q#iD*n5f znrU)h#}Q~GdH*!MO4X9!FvK(m%Eh4WMRrsEMu|05r`BbQJGa8N*@|9@>K@mOTmRJ; z@}-^QL->_IrnB%~Axs#o!^EVS`OUQRa}ZnoKUzp9A6+nVGYuKh>jW z-k5y&t}#R8R;@mRYb+6$Q5d&#sSmh~aVhOkjeW^-Y5q=O25daV>?u@n>P_nd6NuIx zbA-<(n!wx5(RG~|uh&h!+V|G^Dty#=?v-(h;jY2KvVt@E8AjDde`}jO_)%r7PF{At z((==q_hA=I6g6$e#74p|DeZ8&1a7Y3TGEn$Lhj0w#B_p?zNQDW!qTqW9iihKz#09q z^$argDmV{KR?~~}Hq(<}^JdPp!kn|u7<_R%lK@Mz)uQx=BKv(iW^e)WxIXm zVLx|Nx!b>z_=v5y0djOG9^>$$I))|j#ba9{E2MAukGFlFoh4un#`F(ksiq4i1xi@{ zKX63=Oh?FeEdF}Oc*m|~Yt3`@ua zfPXFWNT*C#=5uiyMODq2RP3VAh1~l87Klc3hkPwuq zY#@26AZTQvlPW)%waHh|PKIg)S$0=hBgICS>Wj=s1-)yvZu(BVF8_YB5nN=@9sLkJGWk*tA>9ou{V_{ihp(7%oO+8Z!)VZkdPNmn<383w2^w3>9%wf!3h5eob~eVH7VMI zhNC_{WyB0MtQCA?_@2ooO0=IE^Rjk2(z<`v4!N`*oU2ChaZreKXdYW!R2O8?DAZbuW41OzY~u8=6ZrX2_x4E@zE6`rL*> zW7~eLja`|Ea0Jl(ZE%duD+GTV`(~xDJ?M9@_Wi(jlpCFfwRW@!(0Iq($!q+` z5p>$9cTR0?%pNmU`EB1j2&oxO40zjB$6eu?f;&r94G!N6DMPglsSbscj()mLJ_cHP zme7Th-ihs+HyW_ox@*5-!Sd48bNr>3Xd%0WtQ1!0NmV698f(;bFguD{mxuDWULJk< zP;qQox4}dchaRkk%s#(peXC>?H@jcEoY_`8A$Fov@76q*;kW7Q;QQl~tgW1L=^?`2 zKI;t+~nvVxI z(_-@$D>P>#gZF>7@~Mlx)?ajIU99syZ?-HD^}G4fbSP_UINj))CQ=CGRks(neKgqh zpUf=&Z)oukDA?mof1(ZQHavd(<$BR)A5$qKc9t=!DRn+jBalL%W(F6CtMt;_CF}-i zCL9pivGYo6hPG!)OP-P+sS>o4@Ue(t7ldv$B-9zjT|3~EpiJ@)x~mVJ7i`97FnyMy zH*8Jf&!Jo*2_e;wo3*lyS~p@|C(SHHA`dk^43#wm#654>gS@zrVAt9`{5XGq1#B~I z;ewIpZ~4aC)ZXxkPlpxX)ObjG!_TMUy>&};{DTRxadKY>$dsqJ?rb0?$e+P?lUF7% zx}S(f4MPT98xm?SsB$xQJ7mGyt`?K)D_fvHTK9js4~G&UOyP`5)}8|S4uAUL%fY~I zfFXehnX?oL1tnFvQ3TC50(_ekP*n`XCYI@8diBQn{89i(sYn%3+4?Dmi-b&Df&3Ek z%s^XtJY)Y?zm*q->}Qql8%Mvc3oJI9R|Wqv6YcdJFYU)iKb8{dRaIt|WB=)~X!gKz z@xZOGk!~PTs(6+(`CF}@OK%Ylx5@q>~-YD?s*T9uioZfLLlE44;NB7pF-$i0YriSv3->eTEO!vGc@)ANeF55l{MY2N@l*eMYP)+zC~rAj#dbn+VZ$$ z-DJdYEt&lFAJ!#%(x zf$eoQxw-69pcPGT-Z}>Y--kU+EWIa+PCL+W#btTvcllQ{ZlBb&A&E3I0*kh+OWI3) zWBD8!=p4+LC166}GB?XOsPv`AYe&*L6fIVZPK)JUP)Ful-TfhN>Gr^WuN%1*1AbF1 zt7+TZQLweGz>kt%^iX8@c$O04BG;N)_xM@jxQnB7-aXJ@hSc%sNd|qHUCApw@Q`tF zg<>t8Q3F|=nU$7zFJ6N2UWX;Pi`!(Iv@+sQ2$B6TBt?F!L0>llI9cUsDW{|68LTOM zp4d(VCeGC+)2Nnl>K{*Xdd8br9>LrK7n`%Nc-nSD+x_Z#aYL=_zZePr7hw1wf=1#@ zr?p#9NL=t_dE!oapPRiza$%q_TCK}9Y(VAt?esw#mGsV6Z*y5Ca>&o#KCwJ>>_Ir1 z61a3L+6b~I^pWJ6F3wUi#9jUAj*?UvFz5SyXUwC}n5^(6W7k~)msmdRX|YL60?d-H z2TuD=u?=Lq=06do*@_wdQp^*)yzRdvPumv}kjkb=j5;D~*Gp$OI-rSctB)fBB!IWE zzG}mHvUPK>6vs0->X?*;xFhcolj%6smH42$37wo!X?Yp`fpyuKm?Tej3E1=K^aiA7 zzykkwJyY+{ncZyP%L3=-0WpX>?X{n2qfVpvN`803eW2AVVotgr?u)xpK`i)yhqD)`a zU3t@+^_;>G5UcP8d`9KN)IFdyZezX1rHIS0`~3mn}95YXm7evU@rv4WN-c|vP`#l=5WE$WaRQ4(t{Kmz_pHFO074@DJ<{a(q_R&fP)QaVo%;tC>a zlH+F%b(OP0vd;809I&Z#{kC?@q#LqPvW7IMVp2>t<7WNuJdH`1n80h3%k{tYUn-7u zugA$Y)my?REY;B3WZDsGPHHN+{lMkb^_iqIY~~Z?RqdFZ!}FdQQ_qYc2g`%=xIBb! z3(>k;`{$8Y=Ii~fqb^KUsRCS{SFTZGxz4}zT(H5u2dlGlx7v38J7KKu^!;--Gpi?8 zbE1CcsT1u3cM5FHp2^){nysw*q^r+vdM3i9h@6Jv0xj7}ek!C=O081!PK1lLC43K? z3#QYE1$;N{(j4bzB(|rbr=gAi70rzZ^=z4buW6e=ZnC*8sw zBTH;RC)v}XE}qC=Lww{myRtj9H`avBUPPAbPWknzYcP@VM;}^GeQFyr63l0F>71IM ziBBB=qT$aUf4Pop7C$iQ?R3=~Ie`|L-I|b?1Ea5h=ez2N*F;3hsi_J{jui$7Hz=bAt&R>htI$H3Y}qDi%jRzj76zmYqVAK? z`E7*>lyAB3)D>q3+F2OLWZ#1%a4l^y__X?L2WrYDMBHNOq4H8``MZ_U4Xm#W{agw>Y#aIp|) zuodm2RNO$!@I)55TA^p`vAxZYqv7(Lmlv@GFGo~-YCfKqH?X};>?K-&H!yP2ai@IM z1|8#<+2rVPJ#162QGpGNHX|3v^x>oZ#w$_fr~qG>rkNEW@q94+8|#Qj2mg-zPtBgHP22h=%U4RAJ~$=3|4z zS2S`dtR;PZjL{oC4VVj*9aa9j37RZ?2`&Y)xYM)3SGjopGD~kDB{eY^*^ul=yUN{~ za{jn}kF6)O1;Vdvmr9qo)G++1LEog2DgJ=)6JK3sX%b>#yLT!%m8|U4_fL&`DSJqk4HJy~>KpZ%*S%=4cfXtk`e;ayN8xQ+3k$4z7+(RQI88 zC*-MBz2wv;=8L%W`rnD%5wB7d>At*i`qOT+{&W{h{|C`H0S5D^*v$w-M;JP3c$%qU zVXvbbf@Le{WZ3DAS`r-rXl}7o;Km%#Fu9qKik*|PjDylCobny{aEwj_V7OvbAxbUZ zlo{bb2nO=g5`cy%cr7rrL5@>*Fm!yKkN}8nBor|-o&SO15wXIFZo5R+eN|nEah-Qr zT)WlY#Cl1+#Sn=z|CT*8>>w!>c4vOwLv3)AymDl;`ZPfscvp!wK%I< z=EUB#dkW*@Q?6+tyd0zV8zaM^b|&(O4_{3-k(E+Z;N&AMUQ#VH-1w$MSBla;|9;zk^*ZC`wLW@(IN2mD3t?uj?a zyz$De;3FGt%6 zPLcVRGKNqSK56`8ZoyA}=38&k4aiF0Y$-274lI@kQx@tGale8GrYNK^nSgh0< z$GTokhJfhxwZFSjtMj(~ivQ&M>wY?N93<)&ewh;)M)2*|kLxiSS>LwJu@RWYn9pip z+o&c*OWNgwyBixlLQYp5M`l*!|BtxIe?XxQe+vq@sddU*N+Dt0zPu74cA2r-e%n3t zbQ}>NjOF0iRikIKg^wT%< zBj5XVu`iP)0%-8Y%&99-#5@r5K!}SY@=C)IUaIb7uQ%qK6Pcp%URPR!MIm|Dbo|@n z-#@g-bI*fB?N*u!gUxZ{Ioqf(A#0;0i2lWVUTJ8{PeJA_aS7`e@9t?^Rj)q#{pRb{ zSU2*Ovw=9J?x9u4eFjooWn-fm~*SjE`(Q`3vhL!+hzB zfk0Vq`f^@DbZ^szkcit)wrjbPKwtMu%S~bbru_3*s~1W{z30AsG{1dwbtf!)-l{BA zv#3-09Br>OxvnO8o)TiCsbnnKd<2)jour}pxMql`bee|O=k$yBi3}hhwruw@5Wqi1 z-DPuhY<3L`%QGRJG~!8Hkr=!f*PWHloWIlXC4xUP>YXCuiMkmvoc}{mE$z4)dRRUa zjf92fC_-GUVywB>yvi8T9VG=*9j;d*J;IY>6EyqkN2?98m22*m6{djnimJymFqDo? z*C#sTe4RO*^(@b5`@7G_0`K|+Fu$wyF!IsKlPVoEP;!|e_<78ek6>FNWDO;Gr;5dO z#LzGpCPr2%Jq>h>iNq3|GKe%F9A}<-SA~{R{wNqn&EWiPvM?3C)Bh7X1nl>BF1`4Q&cnZZgA=YI(%HFI)KUj#O)hcG6 zYQCx=1*A}<=SwcK@kX?YO#TE2UvEIM78-heQAXg;3&h!{%}(yb13 zV`n~t@k|p}cyRvh=4{wFh3s@?#{3%C!Q%AQrXQ0W%pKAsxuJ(W_}O9%j!&yPjA5VY%zBarP<9qtheJ)7gbR>8}+a*Nnf2SO1}* zSj524{{9?EHF+F!Y24e0AUd)FT5ia8v^b9KJg=~UWkP1G-d#PQJkF(Z)`?WkSWNI^PPVSs_c$---Eu z9_p+_6U!4F%d_SDFmZx8GeVViksx|_NLh#=zpXI8g*=H?T~*;xM)VK>IuRZw@n6(72Ig-ogX4dC}<|-7J-;en$cnejf-6E&54R50WVtU z1)UcUi4ruHn=NAGK2}eqU4K>c)vfYkwe)@x?@K#ey?Xh)WFMcp*8D4k{Zz=+)#4@z zM5>dAjca67$2QHH+SunUw4+^gy%zaaTN2;XmFggNK_Hmp4sa$1R-; zL$^EZo*%Y~33HD*{o(Tz?7QV!&I?43C$8p0ehpwFBBWoRsGnNvQ9o{NTVjdiK0yEN zo@p1}d5X{2iZ}Lz5$O`KBslY$B0voOv{arkHPylS2rbGN25w`L)VV&Ms$)ESM?^Hl z#HQ%)Y+D0bh0JX7S9r(aedG8V|>xnQh?_ZRflqFV=qQ3>1aO|OdN0PI0^_5Ou%Rea%WLNOaSQX zTtV{}{$>Pf`+yU0j*=K}2`-ZCgUZ|cCai}9M6cusAf~DyK6ts#m~^cgk@3V{?xb;V ziDGPx2uNpcC@qOB2GSq-J<2dm{==cP5l_Ddwjkn0L>BKq;!;8%)zDvo&nHDWkQk75 zSR6;y;GRwVOw<&p_f53R<10FI1_L!jw!X8C5v({7{i4|FNoyk~MvX;A-7s+8!A-Zj zHp}ziWE1b8vh+mvxHQSDk?q1Q+96Z&UTTfoAIMH^xJU^!Kdv1CD4*z^oGy)tIVLbF z3MOKpuQzv!)<2^WlFQ4&nfxq0L{UuSal5@^V=Pe=3BNNeh8?6m+Ka?p5gbI?(vc@9 z!qXoP!T!sMtcdzw!p6m+)itFZ;=;m0)|fZ0t|JN{l(~YrwOA|q*zR~ytVU~1`*Ke6 z{gr$qR4`$#}Y5V+R zFrmPCUPb$B2KtbTR1>JC)9;|Evp5*bqY*8hVw^<6Ja@4mDW5zY2?Q1tjSvz@OH1~9 zPXJV3oY4a4&M8XrYG%IC)!67lXyvW)v}|K5{zzBqjTMGqYP4uXXo;i4qqa4jA(NY= ztF(3OJ2=r9b4Aff@N^{1CpPqI<8~lh=|kKaFGaDxR(1!Ig>*JP_hC11J&`UyA1mb~ zW175HC*ap@>*O;cmra>#o>wZkx-8W~Gn~XKu|~4Q8}mTYcg#|>{dx+6F3pFwvo+o` z0*{CNB(DP#NnDSy)xXS%WV5ftE0i-xl^HIlAoWN762h_@A8iTjdYiPp9@s!j4G+cc z4`s^oRc$`_Q}`PW01|<2$1!kwBRbd50Q+(tv^6ueWWE?U-{uHv1A#hGk*a>=el9|h z2_WXqiMTCyPcc4mM$8=i-pN@&bu6JftnzhRk`*Y@)`B^L6s)}9#4|6ItPaaW2_ZiZ zU64`WKFplVXb_ZNytaM8C~ z+@&l^q#(?6v``)qI=qOKPfwqarKz3Y96D5&o*eI#0r`RjmKQoM(pt7QGSDSU0|8zO z{tWbR2nH7>b$HH>H*f2n6;?L(?tKC^84U@mE2POFq9^C&rKzs+rQnjNGB?dwXC|N9 z_WDs~6Q3S1$$t|QxKLp%!BsqM#O}OSycetZc3Dx{&30<1aBP2YfY)?nW;~nU{*CDb z_EUCO3H{qoXCqlQ1>o$xN2?TXb)Htr6qa~|)+1zyjJtE6Si?#bqB&dCq~;1zqKCUc zcp%;h3?3hekFdt`fjUP?>qNttJ2WCN=>jl(D!1zUs^>~J+p&I#CZ0diuH3erQZoqOBJavNW29p{3uw#Ifw-ZI#Nw}sa&R?QF30o@k9-9E z@W~s_$!TxB!Vi!r#7p$kl|OTryx(j6lNi z0|B@i)XmW1a_e0?7%x3C4ba41k7cWd2}wTJx!1_R*Tc2c7MfeixOGxl#qFW>HHu~& z8}CZ2E}@?0u90(S8*KjjF)Z^fAz@}g1aK-4s{75A2y0GW(*$p-;1BO=%DBEW(+xW+ zy`E}xiSL>jT09&`xW~7P7lnr2>(N9`^E{F+SX;Iz+{|f8w`PUJUC4Ifbcl#B3n*7` zWh`2qZi39ey5e+9ia)0WZc*{HAOYBb7@tcvHmpmY#_g2a7-zD8cyRit6xj{EO~FQP zQPri`ZqYJ9zdBmY(*rM1P1{!0G#HmI`4XICRFmGCv?p!rOgu=3lwN>F25mf4jUVzY znQ%v?-}z(9Q;-1mOCT%$J8;6Yf}sg4(yU;LVdj)gExG!ERD)5o5zt#*Ynl zpUAGy<;2k?#eGP`I?bI=@yBM=eLF1V)uOxoSJ>ow+(94u+Jz|M#@?Y#qLFX6Wh}-{ z7j>!Nb0+$9?0jNIYlRhj=>x&izb%2+wzDU_R-YPkLb_J}MPKZ{pD+9m-}w(H{J<}{ z-&!AT+lMFaWS(5@mD4qq#@Md~3{*lapu;~RtFVb>4>?)dx4`=tJyaWAboIBlaPx4wH! zWw%{gZpVR3=mw%T%xvB0aYFJXWDj%SSX*s9W!#1`mfxiWb2i{l_m*{VS}(bBU(#1N z>6oV*ymol`CAD*=p-(BbB)jGy_-5!v>@n+)^_1l>N&el95TWyP)jc}$akE#r)SDVl z+W2iIix17@ZQRa_S~@C#RemZ608#&gq^%fIjc-T_2_CC7jabwQFIl7xxl zymgzh!$4RS54*ascS}mti+aj3YM$2^?g55`3fC0u z$tT39rM*QWaJ4+OHRg!qh7YeZSi+qa6p$h&R;t0>01Oe!94THI3W3N^%uqwaHB&9$ zOSVNy}7OxFK%h< z*Q%49l`K!0kR1{;U=TZX&KkPR@l^7u%2l`2dfigRoiq@D48oHEqARl>`s3=zR1nF; z9|wVkmg3I84{F9TK&r}9hRW^h+5mI*J}^~N@|adK30Oo7@kk4_rQ0SIgRkYRyJ7TI?OiZ4Gx0*v|g zaOymVK1l?7(mZ}1;G_Sd+7ZOR zKs*VCCBLekSSW9R6?BODsPX+aEoDgP8p}WMJ56IN5BN(h=lsPx@Wjs?*Iwv-cSxCy zP9tT_csi%-c@*CS-uN?BMS_Y&wtPWYzOT>_)>f#ZV|-4zCRymd%T`!kpX-Hpy}A!O zqZ}baB{Kk65e=YaOVz7xo=J+va(^OT_r=Thnv?sJVQ?Z>FUkZHu`<%OH3mr-u>rG&5b&58 zH=>;am1g2l{n*4!SQn+jft_VOh$?gdGiv}JZS5%1irt@^kbN_@yF5%j^tU54V=}Sq zV4?dYa8$`7txD@#-qM@c;-{)-Yq;}4E|ORxlWP7XT{n)fZgoLx3p46lpr_gPABCsl z66@Yv2qmv}=Nv!7)0dX#*uY38JBY(;Zr5#275X(E9*m98OKK6cskQz~)h9yXFOTJ?x$zP3n zgRKml#?)L@=kzgBvS{)mE&gR?{ONlrt<7`qCvDs8hB_a*3{_m3hApE;urIaUxTVO? zc#)yL&#sEAQiAcm8hq48R0-#A?9%RW$`dJ;i%3>|kD&jUs^C9d5d0q>{71Xg zhFg7P;TW=&{3Fd>bZe!>zDAd+S1G!A$a%qmKO0#a>96)F%F!`+$ZTZL% zod7tIu!jzE%FGlwOpN%2ykDEW*sIV>rR6WlxBaj&Xz+Dx%kmrhR}{DY7jFu^l!pG} zOyiYdzvfqoBM+wE%#gS4I?tm8;QZ!Z5&bfPC9iaacw98W|# z#AB*pL`WoPo%&6j@AcF>@`=$!g(~=A&9FdnJ9&4^p|+!qcL4eO5J|A-Tb}r{VeV$( z)(071PTNEAzZ09-*fsCGCfgUFD`D=-9I95iUxozb-oTZr_R%z}iD_ zfusbaU>qXM9V0U?CX>S`{}3fB8S;{bxCo9TY!hoMGgoM}3ai|Wf+EWrX^7d-JonM} zu%2TLD#HEKu7`3?TEMY}F-JCB+g>|reY0OneA;_XhmUp^zKiBTjPOy68QT!WROp@1 zfY*1!eUB(eiM8VOD$9JFW<<$z+_!FZ=4=7jxYiS8L#>9-8BRZMq;Khx;V?gZYyeD(yLBvH0U%4NdC6|GmJ zu8a$=q1454)x>i-IC5*jz!VbP*fPuLcxm$xtnk5TjXW#rIcujEISQ{D9&MN)H@AlW z@~C5j?R|Icg$T!v*0yb5?a*J=ei|0(-_i)!MyYIu)*e6vVZjc~Kk#p*jxn@6&LdDq zR^e4PL~IN*hPa6hVGyovobGKHWY47zxIFi}ZW2xviL~6`I?>^^YF<$2dceUhoG6<_ z$9H!9tyn&K@AEDzXKTA2SygqCovP48A$&3auIQP=X_j=jg?tt0>(U@;x^`{G{_uF~ zIpjX}XR8ObW@99G1BkA1MYec?5}Y*XTwc)b0$)my7YZKHbzng_I)k%&FhV&F#I){Z z>84c0AYTJDLNT6tfK$G!h9J~1doM<>yLe*%hDkMmAl_=^CE%52oVU2ej=|^i-q+@N ze8!)$SZg&O7_BFXx=7QT(~H2=jG$kFgrVe$q`j(j&ct}{_*qHKG#y0y!xTkQD*+{* z4o)}5Hfl@1D=H?$hz2k&y;xntQ`2KA=u>oELMDu8xe$)0V2LD#XeO6m$Li?mkUD6- zyaUnPA+qumHmg-XaA3yk5PH6zk#ZXN&tA9oe}seoe&L@&ApyVgPF^o)QItFl7rVo` zUMXXM%NX_Q!hh-Mcn;}h^i{I*w8N0S-*-;QPetC_PxC2r9U+%WQ$w8<(`VdauIJ%V z^OS$bS3mxOO73B^LcwfjPbui*kkXO}<ktL8u2!c-Z(=&qch$~Tzl z>Vo)wDqWV%?9Z=&GW?}T^3*azKK(<}*s`P=Q&pG`Sf=F~+QOpFt1l#bln~2+(}>+# z&m8ys>3mV6KK;>B*e!}nnhM6Zje2z+{VE968SA($i6e3}r_CLyir@!F$O2_Vrgu%u zUh(}E{!$#3Sov4kR-U;vU|#;}_~2R`k1e$2N|yuiL~iN@J}OxT=sjT~_z#QS$&J zgBuZobOm|Wzog=-VH|<)X>E4;Xw1Dtu0DI_Y9Qjicg!+h6l^4om$}@amY;kB4*F$v zqFqPvZFw6_ocFnk+wO9v1;uJ>?&>Xk3&LD6j}*lDf36?QU!N%|?D+6)1w6f~?pM76 zHBPJ=p~_T5?Z9{n=yIPt@d=W)P!d=A&DK!wggXSt=VZ>$RG!)9&!sJ9>xf-G%5&JX z^ZYvZ<^9$!EjalHszNu|hfVb?f+2+}NuqlQXqgnw%vEO(ApIh2CE=iOz;f5%$nuF{ z7F6ZIvNWo|e%+4eYamRRtn2#^N`3|<8P>PtDB7jmO?REW&ZkZu?~Z=YU$ZLt;(u$8 z1+C3oQ?S-_3)64PMHjnj8Fi2MY15d;r(rtmp2l>ptNg*vnQnChxnYVO z{K&{EfHit*Xq@nn`7=E8h5h}9kW(o-v7nv)cAJ)6#$(S&P@Xs>QsXWwJgyoy67d*fE1A00lsG+n@T zzRj)k3xg9jP#o(!Fj+wXRAfAr8&Dpr(qTKoLlnSYsEX3TnfZKs&T`4JJYU;&SZmxJ zgIaU*5Gi-s{HtF;I}mC6(YC~)%6gg}zMGEN3&Eq8r|`{*s=)-()aP_BGoEWfESE~J zW~w5%%A*J>bi|~q2en{Xy%_qIVRHBRTa<^ z5XgV;STWA8`fc*Z*1VgS$Jc4}tRyv^oU%{LAWL$Z`;c%(l2^+hIMpGi-y=gt8Wf+_ zpVrn5wUQpLuPpKk`TV`icw0MVgk1Ja5gtwRjx^h0i5ZfQswm)hP4dsz>8%@oH7;1a zS27~Mr49b&YMt@4^sP}}b2@&VJe*orI-PWm9E9ABwTwwuW#s3nexraC`>B}FWs+i6 z#3hc7FsMKqNQs3w7;nYxCn;U$tpKCUvnB4*4fqOGV@GuZB$7TmQC6{*(`6QLNz7(T+g3t8|6-pD7Bn!Fv5(Yx+#tbhi+RP6jArC3U$ZLY zm62_RCW#Uatj@^SY;V$aCbj7ZHdg8=yS5d-Mz#!15pJ@*Aq9(APN*ov0JT&;CdAM^ zKO9e%&-U1rCE^6m&>_b`eeaWBc*cr`9Ddjtdy^lHxG39A*mk`s6QD)Pf6%d{x7m zjRKwIDik>>ex@ET|5d&eKBd{lS2sMAJ;mY~)}A>4&%Lrg;HZLf#qJOgqa>$|Vx(k@ zv$v9(Rk{Bw^P>Ofm;HZn{09``oDAPtIQqU6vHb0tu*S|%dAIpEr82zBWuU3Omy{gH z3tHB=o56t{{qwPYT+-@*z zWsAL{iovK(h;}puEC7I%!bT?Ua?>_G?g3U-4)5m5SybD_<5v znTDBJIeO4MgkXt5sSh#pA@4wIZu2{gM618_X~{+Z;p7_sk?dy7T;8kG)^80<`A)>h zgv-QqYJ6&`j)hmWnWVbPCz7>ELNb_j^+P7%0ON^`{Pi)fvB4tU7RR6VNju-^(X=pd zss&j^ruTH@oyqw#uDHp$??nKrJsyk}7c_c{)_lU>wUvZl0+~!&Rn=9jT1&o04OoKb zWLCZiQC+s13DIKA(PgiDRxadn`S|e9OSTgg0bOD^uY|tNXMp;4N632PB1wP3mkPR7 zRaxa6p`1_1b3O3{mlkSfp2PV=4X9GY&*r*8lw^sgmXDt0FI}NcmLBTK=h!`n$t*rS2x?N_kRyZr5Z(ToS zKMxde+@4DMvn|1I`YeAtcNRBiI}=zcK-RBB(Y_N1Gv%a>HRTaxZMb;uO2SoLB}uUK zolwvaHF>1U&qwe%Y8tF?ZvT8;MHov-LGI4}-t(aF zv&Zv<6DA)0^v6${s>5po4?^djHy^V&nYMe$8u$R_Nq=>CziOF2o>}A^y055CPd=tr zRczokLWcj9@4HS*yH=%gsjY2jYt=%s{LZVw766Wdt3snQ;QcOO_Vh9%;_T_zAvd!^ z@I+feoQ*>phr{@_74gQN->6Ve&}gh;264zz_KfT7^uzwNSVPB^I_y^{n-}L!^eR6J zXgJXCp0VxbNo&n!X+s6X{(a~ChL1f~fG^E&F@!DX+f*DuyG5`V8+)3T)SP5p>6zt- zQSk#dZULAS7<0W$W%=#7NB7r7NfHie-FlU34h=L;a1TG6#@!{jL-3#p?(P8+oZ!Ji0)*so&iU7^dvCqEU+y{QytKVQsF{Qnw5UO>SX0KkCSExmn1kG(QO@ui^`!10Gm`(Xxv z6WZb^ED-uKCMt_eSn<@2BQdgmI3@AA*l740?ktZPstfm`L7H8q47EbGhC5a_2!jnx zW`2@%LV;gj$GTAPc&Tg_=K)XPzW7FZ(&ViB{qwjJ>&F_8{DK(mL-DARrW`N?Xi zgQ)|ZmI%1KZ+e!pYy6yM%`X0|9^KZw|6u9o18c~0@TDzYJYKnSz9zj!D%4=O}}#(^pufgh;|pigCpmJU6X{mWlXC`2s@0s%0~pK`Dv z?7U*iAkhq{`5t{VJ|K)BoF0`G8EgW9`=!6MeWGZzq1Vf2I3>Qdrb=-a?i*G7A)YLu znQMf3`0Gi*5r`|cufE^0M!96B&T`Xbvb5yU=X@@CCmU%?h>R}<9@;z-${zwOrH-Vl z=I86kDWJ6Tl=M-(^Za(Iu&rE96fiij5wqDkJ#7_Wr)J2~Ov$Brpqo4#Vu?HTgRdq8 zDY%e~q)W|$z2{ldB1xSiOXYAeUm{i_x$Hsy)Z&AX^|7iUC_wVbM`(M}3e;%S=Z@Kq9UmD%s{@c69!YLXXm8i$g z&ufR4PNC#LOmsyC+R8}2c-Y#&KB{LpF9?T-WRb9=F%1NQk!tiRKarmkDYKecR zNlVACuu|ShzR=(}kNw4)eh|1O-W|l%VkoNKD=KWd2Q+xiUpxPN>cCqr3RJdt^g!r* z$sV_Qm}W{jP)vHBFdOOiFADx-@yCBohG?yJ(akh-L+z$|MX;yyG!6dUS+T2@&DS?> zSy(46x$FLm^M{{u>N?YNaGujYIyJwYjgl3r96hW0yd+wxzC7L6xxF)#8o5GIOqC^a zBUS;8j>`6f#sV9adahyN zrI^(#srlQmH6(HI_HT1dh(SoW{u?n`O{Xl~r0c3jr#7)QVO;~MyuRtP_3}E-RI^V# z?Sh%J8(p=_%U-0-b63q@?7yr|;SeG3AXrTtGBUyUQkKHgIGkRM?&0f+@ZmA=pfDDm zBQbg%XJ}Ci(jL8#8NM76?B;c|aR&5*bl4#>;d&PF}nd5sbKR&2y zgwUwXHckmMxr~HKaXMY}0|j;3WjOJYEU>bFLqmnSV60!HW=7NsX{o4wJWOCOA?=2v z|3tA^)FE_0T4!E*+;Wf^Q+3Vk>Hyr15&>tMElZNpZrk_Sn?`#-tJ^L3{!`B&|5vT?FZqD5 zUvt*ft4n4wxeJ^+eyC#M*`pwi%+ux+TmF-SEy}Mv(x2s@E8~+02`_?R{eK9@Q)Yb09Bq(iTOy1f8mEHPNAkd?}xa7|Nj-o7L za&TH3iW@BQYX{$}J&YYs1kiI%iH@447^-U65}pJp;$6w}{uyx+SXlH^a<&z5L!#BX zt(4Abk1il-kd^8dQmP3|!blVy`GKh#+8J2hWiUPD%Goe^5tz+g4C52d82>pSkoxVA>1w%NX(%k}|HRlM?hIw7j{%sl*TT~1SkVFG zb#j7`NdUP>4T1q#K1VtXhs0u+Vw8&7|;f$iDt%iAHO;*K6(O*z% zhTlL3#7Y`M{V2d94lec{4R7>9Y{Pe~X*ICfRfRT`y9s=Ps+R;fwrf&WsJ<=co!1a` zE?SDwO(zS$t(yR<&pme?OII za#fq!Xo(|v5mF6M0flnq>Oovm=H4c zg&Uv)*`ToLlQ%-PomupQIvuv^KR$RvY-($5UMn;=17)4A_6&7+2~g-qG(MU-%WB?Ebs<|`Woz-bfb zW0NCQV?tXU>4~uAWy1-zwfB&{-9T@pcHuR~u?F_8Z>OZKwBl}Oy2D~s)~lAEUMk7| ze>s8tUm*eTFQ$NQY`=b{3H9HEJ{G#3tiHsy%DbJM4dV;gPkaH31}~T4j@74G*i6tk zRB~81^C|@AsDv7&z)|DWP(@M0ly+p>W*CXX^$ud3*xT&n>y4?9z)&xl?t1G&(me*1 zXo#@V5XbTHmhkYw0CZ4JdEUNDvv4o~=>a7UVVXLrNuex5+tDH`yOJFM%o|Q8JCCpH zD!!HL-KP&hA;*46G|wi3f<3`a~qbf6%NsIS(=MfvCuioB!~qm4(_1mNHoq zV8p%xU^CGJMn{xn5EVdb=8!IKbL=H@VWKp=lMc&pQ4^9g2$9R7)G{-&CqMb-K&mA2{iD{ z=1=nRJBB5!2P)1rCduO)uq6ZTcanL^ZJ{!1QtIX~9wB{Irv}@0m4E2llRXcR7?;yj=-<6#b81hZC!Fc7W{r1FFthU?qr~$z&sG2=baHQ| zf>psBDKzp(`rHBvN+4>uth;-)%?`CyQ>4vtsZ|&|r`5S4_-Izp+8N_2faKtlu-`Bg zp+I__M1F!|B9D>tyLTjk5&z1bA_^I$zGJ6YXHN^eKR(6FDjI*`0HMT$?{Cck{HX+b zl;Q;rPslKSBr`vtZY~Qd&^*7uHXPEo=YJ=}@P;T$hsIQSDCuA)R%=j9|2|JZ@p5!} zBTr+Xo{Y-vRbtJ$4csUS8X^qTK5g>LHWZz(?Bh(%PuC>xIb z=d{WfImC~5)QcINj;TnS1eZao^hFt!BtSQq)3s>v3~gGYPQ1DTkues1q8o?jqZ6 zWf_U+yN=zY%^cj&i;@R=9md^^}*Qq~-U}cN+iqQ1dUQ zU}nE|#%ISl3*5MHj6ShG%$DN4xLDF|JrnHZe};gKaoAkaEGiCYu*8D6-@L>d>;ITX z^0>wuXE!NCF_MKn!GIdnKe+APhiw=Zu_m~m-cw0qqvK_B*?r!ljGc&_@7?LKFwA2Q znUhsaaTnDn{%A*SEw&7=Qc*ABx25%E_=D~n$q-_3 z?$#j`=J}(`P2eWKBFuB0bxeMrD_i~^XxBN-&`ORP^GyoE491ynRWuJFHq;6toUd;v z^6fI7gmUso#&lV;gd{stc-P*u>Y{SZ7QW4uYEhh@Ra5%LMGrkHEZ}x1M|_{9HqQ3J zt`fOTx51NiuP2~EwFu&=KAgR|QQy@<9rK1hFz8JHGKSsVw+MbuySofB)DJfu^jEfx zg}F=&R8JFX^=s+5@A3l}1akIiiG%sD}QiqLI$=(H0iX;scpE$$`E`WXx7X3;2j3UFBwX6~VU$M38!MAtR&5i+=s zEdH=(?PGAHVms~cL?lJZufKH28Rskz++4HhxTaO$fq;TrMK8izKJ?=mea|&o5qNDE zH-1R>JiV~ipuF?kxm4NArcrSOIVA^=mpl8o3P%MlhdZSi zF)1n$CJ~7w=1ZqIKggdHOiS^@`ZR2uJR!Yk4L_hnGwqookSs zYu7pbqH^XhcBL(ICeM*Y?OcY$jjorbsIR&DI{D+b;i-S*cq{)4Rl@&H5dO#We}F=C zBz)}*`j6@X^ik{$FwS%(U%TOCcj~asVP;0MGeCzDyGF3%t33m)cooTYWs>z*!275~ zR4ING%BE&*22Nh)48#Vrfc6gV{Q}yeH~Y>#B%Q04M4!P_@^3I(J_++>zyLlAQ{aZ*)eFtXAiXj!@t)xjlvl4~J(Wr<8iztLQtv(|z&yQo}6yIN3i z>B{}W`d;5L;x!jZaW-A{q^i??yJ0km^5OA-=COOQX>C;;T=T^V7?l%kC}vrf{_M<_ zeNE@Q7Wp~ea9V64r^&|Vn@;oZ4O+WvkM5_}2QQls~u^P#Ec?tKC9 z75SX6d>AAyYPJykI-~8g{#q&qF(y;inha&u`4fLp%vsIB&=G!KCgRg9ndJN45^o_( z!g6Mo>Qx!!!B3-X6*jsorXYrrhXvVVluT~n}>$N$)Uf7GHK;lxRy96 zQ!um9B?%98q_|c`Z0^6a>O0(5xDXESEXPTvR2xp2iFK+m4xx0AFIxq@b?kW0@GB`h z?>!2rxLMKniTh6VqmD>T%bPx}+>YR{Zf(N*LV*omP3tYedw_NyG&*-H++XI4dE*o+=vn&|;`@DH)L48=(8l6lGN>GQ-3Q#&^m zTO=s)z$&4ib%P~B<;$7-j`aHi} zA_z^SIQL{4=nB0pm&M_ppt=Jk9E!P2!i$OxbuGA~e;J}v_N+YcVl!XsrY9VtuAO>( zg^yX{SC)}T@jFS#$?%YQdrH(^x2c`NNsA z8+%~ak~0M5cgbslnyep$alkrNGVwkIhQuZ+eS-+3aD9~VUk>N$rk=ej<{-fbQ+nu^ zcRuhF+`bO3c6b)~XU*tSs+JM&9p!ZfNoD1s^w^^K#F4RD)v2{c$sRs))7Xp(so1J( zuD5h0W8CcVrI_f1DC!mL1b0Uy3G5KwV4KrQFgpV$r6?E2dD!F2cv=TUXgxkxM)>ju=i^|X4=&o+RfvN2JmgDzRtp+#h0FDN){mPs5`$Y) zv<>dr736cH7pg%d8a2zJWy@ud7aq{2t^(8S@%%X z&FsB?&4|W7=-JgSf;BAQaee-P{U+{V;O+RQR+JstWCPJn@}}i+Mjlsf?L>T-n}`Zl zK~n)87Z9Ue$r@U$NLRZIzq~sf5?328#~HkNDWCXjk|vPCg^twO^6hh*55&ZwbrcoR z7iyIsQj9aNn3TWx0{ddUzJBkh_bhk%0G^y&9g^onTS+$8&Xvo3k-{z%v6Q*+H16b; zJg4PH&i{K|@ISb~|8emz^>7SdT*|ZYT%Vyd@i?icqbSpC*!{i_6F9*gYuTj-08rE2 zY?$+tDE|R*kPqAHII9#Q!@xCG=(f6_!{wtbu;NMM0ooMo4)|iJT125dwwNSl%65DC zmSyGGWFzezlwW5&&eH2yvWxhuYJMk-CYc_($C2e#<;H@VB^-oi~M0YfSoU+4Qj z6`54czpFJ7PV-;XOZfWBz^sA4EQO&ZYE{#eCe>!Lg{%%_;m=Y~*5aj*Ji7Ru^YyHL zR!g_f*To;U^ZTl||CG4=yM1o@}CIF@@{rE+s$NKSiLC4(Wn0k?b zPyptDH2fe^&Y0u|^tJ7IW zmYtEUCoHEvp0vUu7r0#7WwdwRc;v}Wfz7baDpIS={g-eetxr-vJB&#wE0{M+0N$$Z+J>4i5cF&3Syp4dJ;1%`wN~t$P7Zudze5O;t5#>5K3vKGB zrr{z5b#apP5vw~LGj~0c_NUeicTB1V&ZuP@4Ppx=MlaF|Y;D$k8xClppt@qUZu`4q zSQO=|M{;w$M@2%L$wvt8hvwG?y?rfif{ku}h?W!lRaQ(UyD|$WYs`6+QkBh>8MQMX zWyhvW1)LQ0`s5~zI;W_@!^U?)hqvxHh^EguTNlAa3|D!Z?Phh@OMm!I?S#sHUhSGE z&H7IRjNQy9$k=E!QSl;CP}nf1o7h3A<&!%vjV%e7$RKiwG3hV>#DTkzC0Dwi&`j?Y zA;^E4p7O9feAg)o<=A)4KdFcRHAsThzH}S7M=`r&!zne~;jj3%~ah0YEWswQ8FcI^tV+|IlOp$_F3@De> z+Q=-wS7MU;%w6}h7%#IXj#VdX)hdQ#axGZ47x#xUe=VDue zfRlR7?LU&qbntkA|2`e@@1TH+{sIbAd4W1d+#6zEd?uzVWoqiX=R=xpjxR1}2q2@p zU0s!CZ#xu|p{H%+RN*<6iP1_Qmi+fo;=1bau{#%!uz zCj5%Uihc+~@wA{`l-VTNE`760vp5i?6c2HVfU@g`6WIze{i=5w6E&#ckD3(l&ew2n z=}gwBi6TtMRQfl>v;E*jj-@FPNE#YLix{=L2P64U?Z`=Xpv$0P-ZCc*!^7AQ9)AH(R!HFsMsaLhPn$XT6mCUzGaURVOC>}F>nd_37<*qV};}C$!AD>%&LC- z`)i1Z-sES^wE#;SLT}Fxd;)&VHV&Ce)z)7X_437jn{w{gf~HMs3aUhL_DZ&DKalzt zs`fXEF^Nbf)a%Wl8GT`_uw-7?|LPE?ea7i|_Xl+fw<$04yrcUqZWP5^lhKlp z#)Rt{SH0wEBhTjG=?wpebHD44KLV#WvtM&ROuHa*0191pN3`YsMDWI8`|)D62mvB= zFuwp^p@0mLDk?G~J{o2c4N(Suo~M>bvO`E1nT5KJfyiQalpONTUk0^+@O(a}{Th%(iXh`cc)alEo!==5oKKXPT^`Q+Ls|%f3J9l!)tR?s=fLRGt6| zcKaD)G*RJFb&uo~IYkkTy9csWGFOk!L0Aok1cwhrH03Aq%HW>4A5)({?9PK;;Cj-d zN;JHXx-2%SlR_sqLx7z9xXeZjAQ8=7i4;nVi7ZdL-?v?oZak#p&}?_TGO% zbjtsc9{f)q|HTwcV5`o?{->+;d5Nwk`_}FG5Z;ULL;eECi62^asZ$7<5B9Sz^#T7V z<$fx*XA84(?PtTnw9=|Vg@)oV1Axo@DeCmZTpY<&oMIHyv(iyGOuCfNaKLu3S^PYU zRheDO359<9l(mgvnYrolO z=rw7PS9C}@Q;Wza#oai#NKlyK_ahUJio2iMbPK7u;Wv(>isx=`zB1DfyBb#ImDRJ; zLM{qjM?Zr5)JcO*onGZ63uiYu3p{=!vfEz0g#d;4dZrA9=urW&Dva4_@pQ(@=D|}K ziNyuV&=GYM0-%Qj5Jn9GvbjZbQXiHCvSI@CErb{eT&Y?oaP+~jiU-03JU}w3Z*GI7 zf63Y;AXQR*e}Syo<>+mWqJvXyg-GiE25Gz%Zo3n@MNq7lIe!vL!5R`?N|dm+M5SS)r|RXP4`6@E(%j%SAWwKhj*dj}hdDVN3yA`azbhpt zthjYS_BwVdGMmzve!-?xpO#i#={pUYo>fUHAT+e&bf4iGq%4BQ`fm6fNNtTJ^hrmu zHj$(wW#nKrbiY-U{MZ^4tPiQcJBxXnQfs9(7-N#UH&ap-KQ8)c!f5EULWn&4AXaQB z>rhL&>fXvrU#HzbBwPeF4nXs%98Y+|^hu+PrhUZwuaB{np`7pX&KUOl%4AaS+u@Hb z6Ig{KeI}_^x`fHUex}9s$O*USkNsy%ib|BQNU#O7cGHT_pDP;y6iurF%_)$<$kk!XX z*e8%w2TksDv{I2rM7|*{4C|@zz9eR24$s%3n{1i( z<0n()%~@YLuP?hgSK-|5V6_j=GevxTP@K0Qv=G;lp-G;^lwMsCb*>FON$0Kyi6u5$ zFFDM=x~$3J>Ot>sN#T|k%;as~Pd$r8q}ifD&{(1px~CHRBY&smwJBek=ioKYf=moL zzMJRwdn}0i73GA0{yVxM{#9oTw$j%P@HhGFO3CI2)u8t&guKMIM#MlIaHpG___5Gf z57OO>jZ}-j(Z5pqj>0UHHz7(VkMASRr+^G0l=He$?kB@T51XaTxIW6FDgDJGxJ-gW zvs9;~s;>Mca}k-UQ&IU1yIyKG76c~}%b-Ly0;s7qiY~!SUe+rzSbyu`L^jW6NBF5iAh#zfL?tfX)TXX=kQ-xgnDP>&eGe!vBtJ`S|Rhti$QV$*7i6>mPxL_;1`c349{v&Zij6A`ECzk3BUhv|;t#$Kbu$PMrs zIqOnIkX(Al`Ixm5TCPh2QN^)YC5k1|4ncppO_k z*@D3v#vTe*PSK#EU_pzgx(clDGZx0h*`osUMjn4J_Kevqp&)Urzcf99p+ndAZqM+~ zIV(4;4uG6zHS!XNoRk_0xOtI7d>)WImpUakkdh)tf_!BB&F=_4OVw>lZD8$s%nwse^-S z3jJzH#2;Z?=hwLZA(RQ1XVYM<3vKx;P9EgC~;A&K4! zZFaS4TAiMsg?d7HpCnmhM-!ZyF%E5l7vjlmFBwIzJw0B@T5F2?n#P}Iae(fdiJwB~SNB%RNmg;b z9sZOT_$@LL)e$%7*m*=Nh!gwk8B_gLBug^Ea47|ga-#0uE>@sI5Q=R@l+A4kS=nq+ z3=!<6`tH2V^6pbn1%lo4tHE_iquXoV1=yI;Td|SDs^4Lhew?j&Awmat2^vg=LCViBn0gHK`o4~ z^L5qvpPYXR9I1S1?gW$`_D<~3hvc9xfdM=HHn)l|VV~6eov0(OM97GQHaf7hM-BpO zPd0@Z%gmvRZaL*Pls|+-g5LW_XjNnoli=zxLcOp`bU4}#DQ^5Ctei@9WNE!-7`dml zwNp{2m3kqKJ*beXA`G>rltgmtXU96b36;0rxkeESiBiFP%R}aJxKZ*eEVyA^!|2+z zUdlBU(TIZh8)qGU1wG9Sq1w?k>OE32Q18vr$vBXgJGj)A@vVr>nCP58p4*{w^0 z;niT9DNkDwJ(!gNwgV7ZPIehL6nuSx>??@AewcHNOo)TAzI%eCOQ(xAvfR`x~3T~eY-dMgf5 zEtoPf1))QQ4I5&evxK_a#T1TMFXJ_tiqA49Hb%who5>3JFoSbulT~InQW29W6PNYl z{Mr$~&5ii?3cJS-@QOfvniHVN=iJ}^GaOVnW|yNYfv#p1+d zW|89qq?)$SB)G_G#K}W#Vd+UiQnX(v0 zn;ie{cn)aNi(5bZe6~~#^gQ==KFNMuNB(a=?SlI6c^^4X8khnO zJmbbcN0R~-A_tIB+-O>wCLKAqs-E`+B#d}})QLEu&Xd2#gHX3B(LpDlW=|};tVJ$y z9y?vd4@P!hl3#)I?{?hr0hM2lm~b!*u;JWEqqIn@4&Kp14hTA5Lqz=w>BXBQmuz48(uqIe95j|z{B zOK;C-+WzAla$b=S3#}{HErW0qutlz`QvkJ}cz#D7`rexi_8&RD2>rKSQ$zz;3{3od z21#w!AC}vi9zGagfoj)qcfVD8-gq5W2!1pfKfm=b;4sz~ECFC^%*Gf0-opcLiK;WB%QC7h|f1 z|M0nXL1uevW%;=m8uu9N-kce}C}S#s0=sd4HuBzgWYc>C`qmv}6xXLZL$!AomtFLGGbv9qmcwPXDHpc8?0THe zuYUqya^8;uR#+8XGN-*N@pvkkkse*Dj#0H;50jo_tsPi0YlFmj>iRIuRSFgo&LLD8tDI$dyNF4D=xnwH^R8jQKa==T7VOmP$)o z?OBy~U~1{dSLhXZFPltYpLb#lS?y?)O;P(&EEm=`<2O0w$!HMQLkKGg-9vS;55^Ip z0v1iR_sP);I>psLMx4VJDXcVJD;ULAXn8~VI$wQU{Du?1ZucoN>p{CEZIqMgag9k%(&Bo*ZdO+YsMYoJV4|wg*IZVG=tJw{cZS2--a{-H*dUZLz}cpi z!p~$o@IM(d{v8zXFi`9@(z|SKhAyxJT~FHS!wMl9C*R|Lv>qkC#I^zeUZ`^d-{zTU z=9nnQQC<%XsmP~e&Mo1EMxfH|;{xQk!UZTtS^;wDgi&A{<>5Wd0esLP$ZXb8HOU57 zE{qAF97Zrt??D_dCR90Xr%`g0@?n`egM|mc`24;@WU~&s3@|_BkGF`S%7c7dbB`O6 zj5)7$7^>Vp)h6jNxN+}KPtCh_3i<4Ll&HHc>qu3Tk}2OPaC>MB`@;BOYP_z=B~oKn zqJ3HRk64Rgv&lK1{opE$NPR5raX+7i2cC`!npx}IHu-EnkU6d{!y_py^?d2*6!`OU zELT*ZVTw5duxFb%%fKa-j>030gFtQye-&O|V?`WHNfI57y`CF`9fMV7qpX|u+swFm z9ZWvcE!T{7zPb>DShy5+BQ(Ft%tYl5b5%?PIg$+H1cLzH5r*UuR@>H$n67+B<=2sOT#kLudh z_0@*E>!lGCKX5fN?vH2_uBmbUX;xlic1R34%yv@iv1;+}TMItpC-I;3P?Ptf&sjPt zw;?MOAWz}1t6yEjj8X?v3kWGPfQ~x^^xlEA?m^Ndpayz=fDnk8A9TP5u4k1*O#KR4 zrZiNx6oOB_UpcTvLMJoz2!CQrk(PFZv^#j6-z#QpP zp0c2DHqZ(g*t=d}xf2|=3F#FUlA;l?G6Mnh`J1Ydk>LWb!s(kMD=?u<+IrmhJ6GgJ z()3!OmK&PbQhD5`kVpqSBcX%enEi4%1T4GP^V1d*^1E_N15JyS&gB(Nf(O6R2*P$A zSg63||7?wBeJZA~KqbgXGf|wt!u%D?ij!W1h!k{43}4AHv5Sr)_I}W1S&Ln?RS^aY z%qjZ542~c9EL%c!4a@~z-8vLpH>+?vRKM4 zrpVf2J+aooM5ARdWU0OBka!P1X&3;Xny?1nE1I2^ZR8JYkW#l)f0z72k83TxKI5qM z<(V)BCb!~WB$AGUqZe&gR()66V563#8#_=%+Xu&L zPI4NI6&@-x|EANXa0Bb?6jK@GT65hPb^MvkQavR@iiZkvaWiQnbrE@MQVS}-7sbtL zL|uKe^KN=I42L=?7@_=%vf(19Jf*Ttc7?%F$(WpGr~^A>q` zWK|Iqg|Xk#DWR+x)hq61XpCeGtMS}h@Dob8g5OR4j}j(s?=#30$OjaxCNtSwE4~no z9L!C6EA&4DeQs(cIJi(wsN>g_-BTjz+{4!8K-Ql6L)rup=_BI~#5H1n4M}D880wMpE2J;pz6IQ+CUtt%f2&NW|-Dbim$iO%Z)bW*#D9#5C5+< z1>hJmY>w&$6!v*2N?$~F0b0Ja+u><^a+|&SzcU4$3|{8~gH(!0dUCf{Ie$oVx3F@g z>@hG|sRb)hQKF?$;jU;q07SoazX*~PN1}?&9`_nr6>_RVWhuV7EJB_O+3ia=1h>zy z&E>%)o6x;?6v(5X9bWKZ4>PNR`OZKXRO?EaW~{M2@Pos8gertS?+dgjMFg8W!0vLn zG!=oUirWg_xiuYI)9z6?(Ru}+HP-a)^a@@@EN{sCg45@u zn@kt)sWDQ&dv(Xd!nbBSi!-Qid)H8-}+=%eO#_~y*IvtZ9=9{?bi9eNiJ zpiFSYAcJQh6cI#9J0J3oD5qlgGU`20? z7lruSW%(fR8tH9GMNFhk7f{QG`AJl+0S;z*VU*u6bBT))p7ijV#|HD3)HYt`kW>_z zDqcbnC2K{xn1IWYz$lt5mj#?aPY#x3MqhAOd$d#omN}lUiUmJh%qqKedia6|*P`X( zHuC!!!NmLGszhIh4|i=>rJvQer4zY6{^jlrjejXcHRjFfYmyr2O_Ql?Q_NYVk0gpc ziB&g5bAoXC47kDRJ*EV+urj}iNw>^AX=RA zx;*8AOZv?4JGABsqui>3Xq4qE=$nEP+PZVIg}Y4S)*q)sbRu)J;tjg48TB0hEr9TE z0P*jJMquI`P#wgcW9y~Rh+OKno2UaY@=8%k_SEK$Q z`q#PbJMy+`ifZ3*QU-TN|7ZJeunQQ~mvx>y9#=;*Vcc)^CH(A67iuu=N7bN&$?_i% zzsun&C7+4787S(qz(@ncsAkuU7@_1^0*nP|uW98Dt;T*!DGu<-;aQq(8MYZ5S*W}- zHEY@AmI}^AGg4F$S+f*avux*T*w&>s=Q`BQs#_^2h}}@TJAao2db^S^CXJ0d!MZPm zaoF)D(JmB)n1|*yr+Y3acd0IKz12*30MK*NgF>!Qp}yMlCy(T?xicz z6sZfb8oZ^1+uapqALEi?;5qPzrRwVwnpZsQ-F+#1y_xYGp8tNzlVauJ?v}=G#;Yia z{hbJ%+T~}j!zFeM5$ypgUA|t=;I1!fHf#FOMfMi#`g+iqH%Eg3FmwKwycPf@M>bZb zuG2MVI_Wy9lZ-q$;X3Y@dkzXNRyaF#E-FSqM5ug@8%lHJxK|EF=yfDL4>@r-N6dH1 z0D@AMysKJ)oV?iB$Q%HH_ap((DpUm2uWG4}hX=8@JBS4$lf-5-6N1)&?jae~q?ROH zmM0a|ENB)N);BKks8&`^?S-OAx0Uw`J@sO&E3`SvDGs*CYSPHw=J;VX>>|Y36En|~m$yjWOg+|=&%+t#0JTWSvv(*4?#Yw=UNJ@n9gSsH+> zW=LLSO$S%X|{QtXV5hzh%(ltskq!g94{RRuNh3PB;w=MP?UMnTlhi+UbMd z7wHpyj@_v9>YS_3r#!5Rxv=yl2JAWm zcJQ0sOna@*o+Iw>C!Oc~mU3YfX1Blo3tW!>t{#A+KON?&l5OWV)G7A8pc-^P%0ymz zB!}W4_PATk{s1!SUdknibM^eYKkq#Z)%x%YgS1JYl_q z+2lY!O3oBCCEd_S7{H54i4_{olqS2{zedci5IFBzDV=7=$`L6zYZ%$z>n0F!Wh1G{ z_IYXEl#yuZ!9B$8Rmkv<<9A&8jhrN+$F{=mAl4+d&XZxaEOtpIIu?s-8BY;9uI{(7 z1-*{KR#K*vLp^Pi!~uk>3q-{ZKM5_lIPNv3!C)Yp2dODANi%EM)Smdx_H;V)*JUY( zNVC(sa+9HWmOhW1hu;ARuP>E9)hI3$0V=`)p|GQoLh`&8s{_ZVD8(Rl^7RC#`I3t3 zXeuC@PJVns=xjd*B@h>dKnm|*W?{0znQhZ*(d)z$upV!mEZkb_kCZ&`O}*%3Q8vn zmdZ3zCyxexa5tpR9*S@EhBFau-spBMm7;K$QXw<%5>zF6^e`R$m5Fe zMEo(72FYj1TJnifXNMk6v}op@2m@-&Ck z6l+F`Fds%y7ji$o@qLl25rUApNaL~Um~uMQqsy*>Ihtyv$Rya9suH8rzQriIPq^4M z(h-~dNvHBNJl)N=r)ITCmKLJP>-pGrR?*6R5xx>-nZ;sfsE*^kL|BWoX?B~6f!k4T zp*^JsSIE4n;9s%~rq5FGJ-0kdq^C>_1G;}HevcYC3ad+Z^ARBRqoSBHzv$_f*u6D= z-=x~nC2tF!Mp4F@QT4b)h}Fx>X^n&zDyAC+x+mVuwudBf2{gXQD5jjNFWzDw%998d z?Yjn(y2k>Hd>lEkKA+*L2vCjDso+QweinnP5Ebkh<{^q3oB?1PcF+v~a)0z3`w=cj zK{7KLHzGd^i&8_n0gemK46XEwWUI(DTm{nIyh_$wVsgH;gt=DSC!DFi-_uArRC_KG z@QR@!)*p*IcD1=!U`RQ{O525_@q&3wfSn!WrI&EbF(biJ5YXRQ5+8(z6Imvz#FToI zO!iiwAm1d9HNuf87;CK7FQ;Y9o#@Iu=!?a(Gn@W#YIzIa@8K6hT9ARGPm5_Ow^_4a zP8&|hyaVu?Ev`}OTys`I1Iy0&I|R`G(0cNpbH;d8HiEyucGD!O@V#sbE>~MFEg3I)05p zDVql;hGdwH!Uzdq*`XsPiBZgjijMp4xIG?LYwt(r-3Gn`OLFomdkl-p@$Ix-?4EU@;W07DhOTR89u=Ud>Bf;=pmVp1djU9>EAheWP$J{B z&_rTjkv@|qZsWJ%jBB%BH6Bm69lc+I4}Z)V_-BMV0N4nPw4XymqMH+2x(f_edI}3d zzHx&Vuv5dNmT`>@CdSDNdUzj+jL{I_Mn*cvV4+U1unkL{p`XP7@fm0fc4Z4|{RW~~ z)v}zKQ1*JpybZDjzk6bj2BzI@!)sb7$x+<|7u*`4lz5S&F+NY!bbuC8TMucLg_#0; ziy!rB@v>27xbucV)mAS2ioBZ{eN3v}dT>y!m8|453l3=hq*h`a^T2Ibl4hVlhUZv= z6$V5Nd~?a`pDxVkZgU5T2XYm^rQf~cokhBNJR{6-jn;9PW^jOhb@Am#5|uk=@Ot(J zvEz{LV5eA7M#U<&#uCSUFA<-#?Hgc-gM%sdUd5;ZhO4v$W9St!4M6JdA%jlk*=ME( zQGs#Fqag3Lft14gT>gN~ELU&rOvDu74BN7FNJd>W)pD6RbE@Fj*j|Yw*BU+33ndB~ z+HDnYEWc31cBnB411P-&E=4-8mB~tyT!?mMmQk}_;deEhz&iJtbcq@SO-x*l_HB`d@N zG_@Ql$0)B=W0Z3N(Ne@hQF+;X<5yI?UQ#Cx!w$N*Wr#>$jt__#`dpQ<6sh*08B)bi z+fJjiN7y8yG)`;ISCCBd)AYt}WhD(cat%RZA>W!eKAn`wBHQFAqb_P7CTGJ}7Agj9 zv&PxDa$ofO>w9l-fB9CrC(0W4`G!39kNiAe`)qjhyYg?Dkuch^G)3$Qs%OpXwcmF6?X|ybvBtpBPb@oY^n~V!TwpzhFW^ylFF+RC z)NsKjV9wIczWf7OwOjozHL1Dp35{38`(vOW;r-M5|BgVJf6f`v6Rt}GVaS_>rXK`P zNcHU9F=GEf3O^o@!as@v8}_iZuctC_m8p+thjqR z*?qZ~8)aV?&~&^sP>*kLY1+S%vjbPh$=opH!nP@GLdRho;;E%Vp1@fz_I#YrB*JpM zOd||M6(SWs?uw#q^Vx#uM2Y0v?jT>YB|AKcY>KgF~MS4#dqr%p}u z+Lq%Ypr8{{vzyB9>9KX*e0Ntb@V8AX7NC}ScSd-TQ|eev$6{|Ci>wVW>^0wNa|oTU zljBt6Nu$#|v=t=}t}#piopX*D^&BV1-N*--i*jilI4rI-#MEo*iq+)X({*u4h_TaU zPw~^^UpDe_3wQJFS0_J;pI=|Zj*=0($e=g5Orhpx7m_r_4mM;SKBf^F2yS{QsbZC? zI`^g^GyU_!c_Gc#=OWT?N1r;n@^V?|y)iMf2pK*4GZj}cb*QoL9=}BMx88TIb~CAx z`_Rs7>paLD_2lCxYkjgol8rr2#uRa*^XQo#9SAS%ip{HX%>U+EFu@~Eb&pqsW?Yv` zeHA@ohYdQ><5Q)DsnPeI{Bloo@Qp>|kr2BtW~e}qRM{pIqMJCa+wpnx=U?m|mo!z^ zo7B7fd?``ZyewCVPY>LF7mQs5mJg`D9A7pGGHpq%GYlivQGIW)9}XFI%s3EDo_S^ zUgI)97y&;!XexP0>17o;L*MQ)Fw&8ny$~S+)%MzsV?w`3*p$Fj3ILDwp(7YlH4I8C z(9@H-XP`B>Q6lY!3r^bHB%aDELVwdlL%L`Lq}#xwV7C%Y4+powRiet>Pf{aI{L0FJ zi%t{5P;gDioRDhtoe6sVNN_jtjo4Zx5*OScqNQ9-Y3RV^JAD;Avt~KV^l>uWR;MZ; zFngCpFHM@_n7EGXJp~1_)V1;EMt>rFPK*#yS;agSzOG!FH|cBz&9St_q#L`)KE;(7 z#Bjk1*XCjyVoOUVVYsjAm zZzN})QhkM*&Ee8l@KkheI)g7$^Q^ia5pYm_k5i~~u-_#cwOWd8uk#9opP`nB85g_{ zJxN{ew*T##h<~;Z=u@{P#vCa@G<%sLPa!zO8U*@z?Qd^!|jJFm@!c4 zdjPqDnwltCR|t`0SqKeY+ET}q%n=_-McjV3#u}{CV&tn7eVWhCficL=M-8fF*}?&#R7|IzINjWaUQ2an{)uQGD;B+WcFnURGxpmTIkGD3};P##%i6OG6LK7EIF*jc(i%+`C=_k0t zi03MlcYd{PahjpW#|jEZKD#TVPbeW3?z8G;xxI@FrOY{_@j6RJDiaOxu>IGHJ721g z6Kq}l&`*5&-h2fB9EqU>Vt>(KC@Y7c8idBA29;1o(ri*C4rmO3lN}KRVIwf6WFvq^ z5w`l$(}5#FAToUfcuSvjecYhUpFT3#t4?Q}in-;ub{LY3UGP??ddY zm=FMU6niyY{}56j2CEnanlp{_OJ((`5Y+ZMkz zH{u_^xhsEU(S67KQjv}Ka(A-Y_)`VxEhkKgbOswt8O=0l4PYcUaD+%dXuzYeqF+M8 zWeT%!nVe%Ci7bgaTcQJpBTXiY=!JDBI1GMUsw736hx|Q(|J1sXCY<9>%ruSLb{xjj zqCddo9}0W76pQlrM2V-4Q1D)7Yd@|%>!b+fW;&3n(&n2uD`{WFE&Z+oAZI^hkD7W4 zyBtjU%B{7|r5RU>WpVM7N{KO^EpI)HpLNq%UAs5JnZ$gi?n;jE2Ya?E`tjm~#{{q|Gy-!_N*7gC6GUX~4g zKnnBy4|7HPwa z9?MVfwXy@0>A+IzoWW*>@t*$#yl~@9;BQ zqmMK$k502Cf=6m?w6YNo4;esD-bW(t-T7BE1ZYID`3JklcrQVRu=9xnHVj;?hN zxu+0z&WcW`a<>UanBFF-XQv?id4Ss;_a5W!km(W>Mll-UISX~nGKl9=F@?%si(0n zouQ=jZ}XDdMmF@tUT&T0O zRnIjm2@ifYoqZe{S3kYw=<~L22oPCPT+linfmfJyS|g`T|8vJ1x}R)40nC1^tfPqY z*f}j-Y?qA+KPxzoewob!TlXD^i0aba88;KGC_fBkdrdMMiH@QuGDA9CUzw&J3LnpS zImp_@(H-cC37D()MF;@a!UqZsR&9>mi^x|mGpE0WtbQk!<`7##*_GHCwVY^_ZYHhT z7cjS#2olFvFC-##fptARgudIfB(Z8KQ*G?CjZcXVJ)?G-t9W#hEQIy^ynY8sSBtCj z5lI`V%W&zLq^LL-TIZ?W7e8gfDNQ|CmvaA-$ZIOU+dlANUOvRCcAp0&^x92M^{u=Z^ais$+^tRHN#L#ZtIMv`jI+&f^kk>y4@* z`>W2UK9zw+d@#!+&&X;T$|Z;NkHmt#M8ou z&>OTfD^j@v=Ll)nJyW-3_3Y@CW7B}=7Rpk`r{QZ)4nces zr^9xnYv)}#;%@u=5oj86i|Oyw)nwgoqH4lJ^_AqQBj)U1ku5M>9iTQJARzd{dQpb^X7-0T&>k3)IEu`aQb@y+X#=)K*0s{b6rtjrlMay zZh?DZ)M&B<=m;CFLPF|rmeDkzSym2cl~k#=h{t(rL?o)Hp`*cJZnARsERKmHF54rN z11v=)!qjj_j0P>zod#8KCPo_|Wt;=H*CU7@ldd->n?dvLwKA~v-pu2U$&o;ggee)a zvG7D?@#po`p^$)$j|Q!EFb=0f3lLj_zp8=J%1gq4k?5Mg`EvxZ>4DBlavW^uKSxu{ z2ts(tr|PlTw-Um!txw95ZmM&!T2I{9IaBg$ZLi-sy#!Gyha=faKymJ?=0KhX{2~Ue z{iEBUQk6nSLa$0!3TpBK0!ZY)MqQ*HeW$^JvJx3|%rH@v|F#pstX{k)!9gF{SJA*jsW+tS&w414IMzBS8; zFs6@E;4rsE>>T}V{?6Ic&swWzs__Khoy#euCAWnnhHEzx3;Ypc9Q*AFPDS55p%%#ZTt~r$JFyK(^E^wES+>AseSD&lu;vpi0zd-4{RD$Lt(mdfXRl886SGGA}yENo&iwbRw^4z8;| z^dD`#(u$8gJa7vzln-TRI@c7?;Nk`m$EV5HH|iHF+-jdTuCOrW*oAy|ocR;m?bXFM zM=@VG8UBZzdHOKukxO z5?`<}+8k{B6SH`d+ZDdt=%uu0F6rT)Q*~l;Nyia1475r5I4HN^%uVEtc!}yGQ@@?&n=bW3G9~-2E ztn1TBq_fIQAlYy9#<5^z7DOEmhOG{GrRdQqBTWk;;) z#u0C{yYu)1eCDwVm(0*nGI7bu;7xBCf9)7rxcOWt`ZSr3_%^e-2XcO5i@cc^;EV*A zI%#W452roiTzi)=oC&DJ;euoW7E`~EI5?EUGu{AjQ}iDg2(?OL5S_`Rt5wCbPe)W@3z%)6IB^hmkZ9HoJ9`2ypKGz7j)vMq*}xpkN6lZZ%hKN@0dRQjyytqpv#7 zB_EX7YE?vEu280|6?OihMCZW3%B8?L+{X?th1| z(*Ifm{vl}Vf&u*KbLV&!Z-LY~^Nt!Mp zhC_@3C&h~lg2U@3h~TP^jB?>7!H)b$xvHZ`Arl!5rvfD6yD2I0wkf-3T-(Scg!wr< zUdwc`7BMEvwn%G>d==L_tPafP#?k89i|Pry9Ya|rYUv=kjV;J0uzc5b!O{E6CDS({ zIOBLVYARpOlNPJ!>jpJ;`KFn;2IJfe9yvN^H+|Tg;jpwdpX_(RS&v=+R3%b2dAm^} z%3@X<8~p*i{JwFMqn(pi(V5)td>@THaN^8ebIaCbmvpV^HtMs6{<@jQ^nJRx8n#*B zb3%g!pehb7h~@P+tgoR3t58y6>sZJ`Jidi!Il9z|;fLb}XH-tQ9V~JrWa)onpi|0I zmDsY$w**o+`{X{3`)su)QCo1Q33i?%i2C+aiW0;6h#Gj@QU0q%M8N?tmhnR$KBU8I z72*7{TUx|jW^|xHkJ%w1Cm*uu1{4G zFPqtGNPn7?LpxPs+52sXMJclXolDFQ=egI_7InwueWtR!I(Y<+Y49r1R_NCVWdyy3?`%A`jPJ~j4#r)tD3rNP7m#Asn zj*a$&%k}~2EbW5RutzJ?6q`G}^9mhtjjBoAu5%%aV|RmN#ldgWIBYa~WhaX8aP6pF z%#_gG-xOouLpYf)7Tp}zbXQ?Fer^NkfCak46B%(%yV$(NEo z%grekjtQRm77QM{1YghHxTf+~+X6ZJZSIP@xC4GA?+_Ry@OX>QS-QML z&6?AAB2~b%lB({@fhfl!@;sfWDw?WV0Hq)ENTDT8lp+QTmKqCMH?*QrBTp44o4<0EC zJq4MtaL3iDNm0In2!}haxt5039{%xXxC|Q33Aj;5t=tJ3Ei0pUo4kzq>)GaHYeLe_ z@p)o};qHuPOsV=5n>Upe0hw5zewtFSh4zW8w1$E$nKPnuI22M=KXo%^*feUUaI3~O z+4Nz5GfyNR7eGV$iV-+a8h7TPamUzXT#!d=@HY_0GT!!VlY8A( z_S1!HPQpsQ1B=Cl18)j39)6cJG=eg`Hz zx^-{3$e1HTawpz!QKX`CU}^p~aqtXk9(h!S-Yo=k*8ZPv%{HY{XmldjK$6o%kklFE7wDO5u> zR<-rvb=-UV(r!MF{oJ`LQgYFAP(r(2k+9_^95AcNj8Hv;>p>?)-CCqg5rzU*6-UXl-{#3C8}2Y_06YX zG{Mtu&TOsd^}@)Y@`F_x3uTN9l`@oZIxilZh9w_+#0l@-ML6|4_G;)p=nDltVH8Ft z+!gGoKu|TbQ_ygQ7PMwqk&bPUf!3bo=%wiu9TSmPQg!5DF98K(KbI&F9)#fnagL>-+3U3{?i$(DYU^xpq znb|z52{YS1s*Tlt)ncQmh3OzFev<*q9#=f^&Uq6-E_<7gZL#m_|e{QVAi*_S2}%gYtn|y*0!Lh zVsDSHx2$hqz|S)*=(pQO6v`GA7S0;ExSh`%Uc0ueU7UY4`9L{AY(9+sPOQu__o2?@ zCEtFH3GStHgjH*-9_p3GLi{!1cUpDr?FvZaN$ANU?@->rxAO+JPAdwXQa?it;ERs6 z)C8OMl<1l-+*J_rhNf#J_kX` zf&iRRDhBTecHisfLkhm&zEyINtY2?<+aUeiv0WUEOP5v;fA<_lWG~l8D4sk zL8|PDhcjXc8X;Pbh;oGxVtEz>D_pdRJZNWRh;h}8Cbi-{UW%382WNo_NZ8PX>j$Z< z#N=cDX<#0u)`#ZAo`#;nDw0m(3ntTQaE1XG6F@C(^y~oqUOT=QWy=+lvihQzVl_a#9z#0&-d1T*QQGyW zL0X-L7nY!~gl$nsf47=Sz1$fJ;jdTtQtK@8V^C1o;D-_a8VN*9dP=&}X*H{;OR~A3 zomYgbm6f#OtJ}Z02XD@PeYYhY+!SoKu+!o)U46Pp$1m|k{EP0w$Cf6;H#Jw!L_%w6 zB^kcva-XiS?pzx=eC3@ZVJ-POmgq!J>@Jb5pYS%yhPe{W<{pJ~$R#YMlBClDu`!8_ zX6ko9_<+PMU`w>5H!wOPeVw=pZ=_6zdWQ_hj^E}Jv#V9x6`J*vVKU*Q)Cbot)4E$f zNllX1e!cIxABp>gx^O7p@Wb-B6(q&c??cXnMoC;};!pIFmtRz9vfXCQaTw0yE~mWc zM4vv$Pq(8#z5LrOXtz?Ul5fD6;a=hS^HkjhzwEnrQ9=j4uWDZi+nr9Ml4j|nsZ`Ds zk~ZRJ40!}{UYp#ruJw`~NcrwH#V!8u!MuBx_++hH9_TNfqGo6A z4TLmCB5)9ZliGe3)DemI;GK}A<#XVW@hy_JFC`;KsPL-XvXx29S#`S3g{=nLLJ=6H z`RC#IjNuNKS;~EeBR*T}<_#HvTD#<-=I%*fjsJNH*HG4V9 z!)d}%P3$EcB?^M+DYi$63MQ=;@=e@3%nVmLjcM2^*Uh%uyuaC6e&~63+@=yho+5t2 z!$SNlLpW)w8t-Pu89H z`@e1*f^EC^`dHmnnIWFW-^Ge8xjtoTMmx8*5uu%8SVRCSgrnpkNy-(MY=m_0akZtU zJ4oY3yr5e?g;-kSm0irvL4Pz}c6|@%mDO*FBMkHk~G!Kt^FNiPWs7y6XZZ&Xm|`REk*Z6HX&lE*M<%rLY88 zZLP3#SY7k|?25m6qU8+7a|n!cLm`1;Ysj{jlqm$I@dESGHd(h=iu~QDrXK)N0{}pC z&1oDuFM4$c`^>51$;c#X>*zu%Zh|8#DRz74V$X#|DuSE%$d~L9{cxh&Hspzh5w(;- z@=r?T7@UKmvyYqz50))F3F@6v$mYY8CM#f%Be?IT zG2VF&5lPeAr%%@A+`U(g)en7sQ73X6S$Lqzp5@uf@>l=T*`6d$)YYmeQwTtv-+r9^ zFz0PFXc970opY1uMfaA=ux?(~D2+K?$GWz*QC)ndZze#waHY}Mo~ydvYV$gmn8=+^ z3v94Q!8cy1TUA`cIm)N6W9mx*0&|DscrjwCdZ{t6wj4O6a2ADnl9J3_d?r$zCyf1O zxS~32?e!bOXDi!I;cUeGtcsSScq%8Td0$^sH05WQy1){{uc|f`UAtei?mui!gHb_Mw@qz5X2!Fd zt$&)WL%noB#k~yreZBPXKn0c2dN= z8~|a8F&}CIU|$Hk-?d*o{FsnKHNEa+WvUpG8T0a+4EbuOQ%cSxDWNBI@ge?)-r-0s zKny;cZ`S9Kz2z>J{@|&+`a%q%bq?xd?UP7eeI4(sHaV(RLd14mLs@IR7l~`2` zWFl_$lHUlS-fY z!Oi9EA9yCtpVBsp+sbh<;(OF^%2OHgDY$8zPZZ5b_Dp0O`P$thHT^HI(vJ3e{jK}l z2Om704x9(g0qToa3!`a5!?j5{m}u9=|51HvLxh)2YGN4Ax7rd zBe}wpEP0Ae3qW3gC4jRGB~+3F^Sbq#lI(JeeJ_E=O5KyweP=mtTwTG9-9oP3`+b!^)|K&33k3*Y)~9N?TC)`0YR$HQl~qa{AB{>kaor z2V|RL-&ynT!rK!o#%5o0?o%J+b+ky!HN~ zB8KPHQqSre;T2~exQvY&Ji>$d^FA|O3Tanw{4ri%->B4E_poOOdhx!~ie>h#ocnM57q3Dc*8cp6D(73w zd+SZ5{JcI623Zgc`%_OYqo+tN=ESa?c?9B77hz_f;Mzw&M{^kaI3?Ql|NdEcXE zkFx@`ZU%eJn514JdY_#OcwGqz5acd`A75Bs(7hNb(lWO1vH$Zx_{#qawC^D(Gr#+q zg1N_h$w7DTB%KXjB+feY!hF1ts8DW?t0Uei8)R&#Gnb~Po%--M{6BpC3n~0@GN9~r z^qnD{{o{V-ZAnyW-h3R>c+ly3`&P~u06=8beZ!ibHVT=HEScEr9r2AcK+u53(Ed0| zIOHS#1d0zXEZA7F4$H|1-!VN%oT?T!-lLVvW@4_mH;<=Fp!bHhmMHK5NnY%Rb z;25fX%H^WXv)Q4Qm16XkqodmVC*p}{S)LH`=9fX6CtMBlnyy>*sc}~gPttc2;u*pI zfPi3UAvJ3|W{aODt6zJtvc8zUYt(Dlb{)oAsBwEW^r#a14Cv}l9Z89Lqb*H46aOy zZzy+7G2g|>6(e`Ri?pfoWM8uVFR#MsOK!~yuf``2nELOG7kR*gzE|fsV=z)dDzd&w z=(52*+`oqYdTsWE*?i+JZ=HR$S!HI(iP7V!x(lt`REY|1k2<;#jc|NTPR{+rN+8UO%#;2~sGL)cRk6nn&YS;%9!f6+O11QIg$ zF7isS=}G}iGyJYsT*^mG9F~y|cn20WRLtxV0IS(h&IC?co?G#Y9Wl0pYjvRh)EYeAj34>q}B+*&6)^=WzQ9+_5&2J%DpXQ+nKoO8Ks z5<;yvSxKbaZluKLqhaTiD0KE%?kF)O>_R|`k5TW|_}k^Vn$cQ!pa~!Kx@wz(i-m(Y zwf;c`q5qbTK{>yn(7cBKx^dD?zhj~5l)&3My@0g<+@zYXeyMn9%AbtQFWUTn*}9cm+@ zLb!uxG<6U^Sdpi=+f`zS)WY`TI6@~GL?~L!reU`nErtcjtG4xR2t=*UkFSA>%2nr` z#M0W?YgwtXjic&7SoOXQ>@+}I!AEgXyH-W`6dM?H@3G1gkJXW!MwVjbh}B)~jlxb; zd-cSR)Vo4xAm_*u-dnCOAN`C+GTL~tVym>5jg(~MQOC_;EO>nveAM(VIewt1Q7vII zi%}gYQ0|c?r7>FwCr+w$ZKLWzbmm9I*P8|rto{xx=1-t(Js(HO_z*K!#2!2LumyOW z!6_xaaiq9p3@aT>#~;b}kX)jf(m-QZNnR~!lqW!k-j!({kgSMy-~Po#{xWHZk3zF* z&kfAVFDY*qSyhm!3Rj=fRLwcLpcG>1mzbG+>F|xS9v&UuxnARBe3~HmDni}d&~fp_ z2(ZrE|6BDrCJH4R%+?&Nv8nNvJ-fsvc9c2L>E~mWDJ}K!Se&}?V-L`bY4z0x=8ISz z@yCOlQ}qUq;BW*dkGh$f|GmgJYyS(akv}99M?)ZhGHE19ei4~!V9-qYG#W=TD)X3N zjk+|&1SGc&GC-NpwUrTybGiYf9Ov{4I67w@CMe{917R)S2C_hOHTx5bn9=N}4eI3f z1l!kS_|Odf&2&zUvhQiC?)@($RxVF=K*E%5t#VvVr>Hi2W>dIk1!mPq%~l;o+ntiz z`971O1MgrU1noehQCuQ8SKUP%hjh-rDj!8YCp!D-&TsQpT+^(!xr1k&H@`u}ch3zW z2kL+2lw>N&vu#QeQ?D?L77IG2oY+x|0ydjo_RNM{it71S2Ap}1{9dk6XZ;Me`g+b$ zEO?nh<}19jb^CFBM2vH@J^s4a1&B?hq~d6 zNH#R#!}g1%feaqF<3Jc#H?dw0JTS$gMGh0j;E9oo<7+`9h@l^IXy^?S(|?Nsv6pV-L9U=?l5tBqNwJ1XjJ)|U>9Bb=X@4VGzo{04gb$}_hr zd*q$;(KYk#>G5ya-ScMhQvhanFJ?}N~AK&(NuB47<0qhHBRYJ#PPPeoY}>1Ew&$i^f`3L@d0>n-ED zV<(7;BGXNvJ;x+8EMbQ?PZg_1S{9SuhQAV~bT+3PnK5a{O5_To#m2V4CX6Cxy9Ioy z)Nl$FlMnfpH)1hJrcP{7687A`vJKR)s~Vuql`}edXs3>3cyzY(A(*H_Aihw|YeJ>X zG%xUS0YmZ%KNAYhS6$sHru2S=i2N!XpO-bHa#84fvRt8DC})tp+3m5|xW`NWlI_dx zB8S1795Ridr6u4 zJoQ<<{cB;As#7!(CPoa3$4Q}@^oRpu32zjm$nGrFPSq1z(K-+QO6S-ynK*Zl*@-2( zT8qt$`*a^Q^KD9elbFvat6pq%aQNbLTP&#r0W?F0ffs6!qNlsP_z&*L6>VtXV@TN_VqN?(#cuHq*nCnwC`I<0so{f{p=ig08 zj57arrP!LcX^={}h|sdz8$)A8A{xSACpiWg#^v zAQ`+$Pdk;>76ue#X-Xrn@N1ulax7h?!9WsEG{)AqmTIF>G)D+B7L(|C_;&Lj1>DW=HTi5)M7+H;M zk2`1PM+e9YKP>(+S+>wB8O2o51gnaArD*_^-GJa2OV6J`JzxBn#x!&@7jrR9A$dH( zM&dL3_a;NHQ?{tD^Km0$(l(9n|GE zSW(v_qigoUq3mhgUcR&v0d>FO2WMU~XT4?| z96=}?JW4S3q2ec9VFp{_dpRT)BG}hJeoRbJn5ZZcxR|_ywMl$XA?IIsGfZk~%D7(D zN)qTfWe|E)M99pzNj5|JE;*fA~SGn`yfQ6iR@|EAuS0$1bd{azhy85*UL3-s!mgu@B z&QWF*xZn!ait9qw+cj$`K65%X@PaC{J_LA(oBDS)ep>JO{V?jGCVgM9l;%uYBS*UX zpj($q0rBBR8w-!)c$C35aZFOh)F8uPT~Py04JD!83_nU}&LW_21v^d)~YpEyuWd?Y5958|K`Lr+_A8F z=fQnyOO(u5qdqoa_|AONwl+J1wRKQA_lKEs+OG?j;1|s^#F?)w4$rz(`PMj*SsjeC zs+>YKC6jW9lGbl7aQ1{$IEO49GaZ1PUR4fTh#ou`DuEkN&=GZY88s25L>QS^6BId- z?X!?Keo5H=9V#XY%h9N>ELZN)kFy5B6@viQw`O9&04DDsi)t&6Z#Ot zo%4+INP|yt>TY1QyW7;nK{R#K)-lui9Rel`z7D#?T&$YKD)F#?vp?hi8#yiMxb7K( z__6OzG!;y0W8H;OZyw4%WP_b`4MHw~5~8_h0%;$q7-$0}MhtjE>NHiPqv+|RK=-3! z;?#^q2g% zI7ZngwO?C1xJ%p8ddArR55^ldP`2~O<@90>qL6Y?$h;}EiV{+n1rY>8sMMiUG|*jE zNRu#Aecz}Ut=}e#n#45L0WNk>zET*9!L8)N%Arv44(H5_ z{2CF>l`jN#X?dYSS+`6V7vT9OY>oQw7jtj2EsbnX2peb4pAqWJ_?c6H-4)ZcY#l^=%npdVRyqnRA4TfZ}Z2u_1s6REY^ppb}u+c~v zn1PiF10yvpBr7sHqt3vAJc&4ycj}p0E|xdHrVi~g|7fZ z++`_pL2%>KAtK=%X%1ZYymaC*Z9z8Fn@EFISNe|;Gg}QW1K;nSQ#&gI z$*5m5`s`ZYzuMesdn6B$J!vrR(9iRfzC+Hd-FvDh%fANy|A4mePoz-e;j((+r91mh z=dAL9rogga3e(%q96Nz=JMRwp;&X6lcE9mnL_*)ICT4skOg#4M>&d!>QJNhqmLDkCT@^g3v;rTs7txt(u^x z7CTDr0c{eM=M%L1Zu5vGBk!(^+|j19I}oi=4k3=W+B&l$7ykGPT|h!|!RbUK{kbr} zsg2p0-o+uZchYcPrA{b-tYnK5)?;o}$PoJo%8T-v%&FMe>AL1{S}*#Hsv39=KfFu@ zjr1(=N_QQSR-5#R+^8N50{~33GOg>XV)JdhQzJG^@&y1nx=PA|Eh;Q{3{Wv!0DFvX z_yDN*DzcF@fnDqwi>4!m(+lD)vBT+@i(B-7t~+$=K4VQ?n*nCek?~$;d94tyY;y5W} zV)F*rq>cjf92_awZ1V;Lk$|X}D2Ok_!Iy0s9gFAXt$_yu2b-%qAE$!MIYUMcp;H3sp?QAtfs-EIZj{(G_e^ zw>`lr=hWX?6cSt3k3vu;5V)l*?}qtjs^063|G?ls$uUm5UYJvhdzrYE+tVcb@}Z0SZ?|UbF$m#)@#gHT_^QO}(^_ zJZ|1{iOUaR!Wf%bT@QB8S4K|0d*466HnYhU<4sDZHW7QSykkgq``lz-N|hhv{v}Ck zCLIg)L!((pos**J%*kS1tvhh-V)!YL(x`OgsbN|Bb|!J;?0rQ&oxamkqESo7rXDG+ za$_}{2H6xU69U7lC5;aq;##*zmmscjvtKf(gddc$a=~WX3omP!Om#PUa zy7Rw2{@Yd4|7a@y)jnvstzA6Pet#_3*Zx${&b}H0^Eo>mOMc)k4MGEn!TiF52R=S{ zv~tThAQGSntc{X|no3B?k%3rw)zJl*&W+FXgZ-lF!_c$|eX2fa_!C`C*#BVeEu-3c z-)+$(1PCEO2(CqgL(l?6f?Kd)!Gk*m3KS?U?(R}3?yjX2T3pi>mmu;KbgE&G1azNH{!Au^#;5 z%?EdCMn`&~T_hTF8rh#4a?+~Jda3!pxX&(VANNAXO1S-?8+L1rW zrCQOvq`WX-43bq+sx8>O`(+5=J?t&3Pdz*}JjY0229ys65~aeTQit5xFjPa4L*H3b zVF26+0Zc#)+4R>bQL3a{dPhe#dE4wz3$6f)NN^RWe;y7%9b=ycvEj|~F?t5^c=H~x zCdyIbyQlo3vv6_nt;Y#??h65q)CRe}+!jAAypnX%M_!lrJH(vya}?quSmW=xJfWSc zAfO1z`yPRe>|6S4QDKr#P(FvP_a%C14!ri3#vh=2L8D;@w{NG-jvasgqo~@1F+JnY z5A1HPxYzn^?Y-xN(e&o7Gz~Kfb*qTRcb4nX=f+C2-(Jqr7fO}`0HTa)wq=^h%-fVj z$;iTz+eP48j2P;|J!bYF@l9meW0vT4;EXG6MHR#ve@~*l>1J&>Y~kXIWfHrvCb0=P z{~-@b?`J}_x+#U7tcr{?`Lv*Q=9P2#k&y%LSb%oco9@mW?Kfi7kIW|jUiA56f+`aF6@HKtm z{7U;Orf`RPaWZE2p{ zdq*B*xK-KEZSoO^llHwh6J}ORlNQ%zUV6MYQeP7H_uQ^mhs76Jx_A4kjSG^4nxlcR z(HjA1nHxHCBblk?s*4yoGNVY@3!d3YI<(Z!dV3+h7}szj1MEX$#S!;RuWC4qB^-wX z3gs0U{NA6`oNy&_caC6pc?8BaDz$aztBJF#>WH%lfgxwcnIX#U*<-5H>wewZth2mv z+_O$yRnwK&s8KP73fzWzS9Wo4dF(|T{Phc4n+t~o6ZWiZt*!HFC+t1qTY8L)eMP1ehs*#$PlSmnhncs@yC0_m zv?HD(&YtD>?GP!I9hj`JoRkt7yAp4VC_16fL-t#vZMRYnU#=G^#k(5Rjrj!UP)=xJ zgkxXnuITW_<+nQV`--}s*jM#*V9q3o``!v{1=QK!f5eFRvHMG4ZmCQou2KCSbPhlw z;W;RwohzOj4TTLGPZ=qJXyakAnnE;(;>5L{L?lq+@;TJdknrHnC~p-g83;E;s^YTz z(W*ntov*aM3TW?0NjG*{vkHgmRsU>L?{-)^r=^|U;U~~fzI#gjpy#@jIb-0>KBz2h zl6HCDJ-a@z5d?uC(Hi4%#tP0B@;HUUCU$xjv~nTOWv#5k*Yw8Jl=o&ytmAM#&0iN? zMCS^gg=f4$lt$$-$(qY|8YYipS5+sUd^NOs{rDzZol<;h^zB=UYDjZ@1WP9ODrd6Q zhrI|fg9mNTDXeN0)he3m|G@zOCh;`fZVL#_XTS*tszVMcBm!DXR7gTj8c)X*e=8}T zI<;YhS))w00#ZiAv67s&v(T`xyqJS#k1xDmxWWWEQ5@|T%?x651J;VT5UerT zGewozB#RL8!XZqfZr^0&y^4p>x7^2skoCV;J=!-DG)Q&I3q(7X`F3?n25cFY; zFZ)H}`Mh1d%?q$z3SW4CcK1&by3u*f4yMs&FgKp8iPXv zs+1i+@muA2YzbJ;LR_^V`NAcZgd(=1_lyJd2K`H|Vqp=2Rjq>t|Db_4hI6-|`=28B z0VMZ`$5hMLfJ87}qMcZ)yQXi0cGr8+VJIa>aNi$Q;e3xDWqMTFJiX9+n#h;qf? z;>Z(GWpqZrWA#mQyUj#P+r(`ig_*EgqZO)-5?0G{`pQBv`x#?{WMK!22{nkLN4OTo zL1Wcl1Fkqrwr;E2>DldvoElQ*YCczW4cWk64Gsry;3ejP_$*GNBZP|k~qs-K2 zwZ@oqIs&}qCdF@iI;Yc5JSile))V}gAg`J;aW%GSCU~}&SXh}BQ0`b)M73YIhk63y zgCM>1v<~*fceQsyZrh>FbM@^LTFXml4-r45REc^5x~;ORG(KF2e#mEUi|50AZ+_Ob z>Y%%Ky`pv%ck+5rjx)qQAK_`!L+Gtb*-r}gO8q^5RYi$NQ7=p!j|uqMCdogM@WDNu z^6Mw1pb!3vpVf8kpC4IKK4pD+$17`F(&!5XgR@6u;(T#OY>LU4#BK)j{k{4ZBwUM? zVU_BxsVgcMYWFMF^P!Q&pG=FPZU*66{4={5xpS#eeRg-K7joV0*dSxh#~H8`!AXf} z{4_pajzz{+8kz5;jq#CarDe*{vBa6mI+z?~ED7yT6!J}+RDJwHT`g;*AS%?RDsNtV z@|Vw`U~@8HviVnL>r1w>fZ6dk4F-+|h}gncmh!Uk7Zp7ee>U1Ib;3Yt7$v43W%@0HY5Ul& zn?9qsG?dFmx_85W8@TDP7#By>QtU$Vg0XUGU7Vjetcq0GK0^;@^S+?2{63Z;)#2_4LzkvSWHi?m$T{aN`y`ov6@MTn@8 zAxL?L5I(b1)me3a%mdMtn8C3e`>KEn@fz%QZ7ly`0WD?f9#!2b*twvnH@zi2Z}19^ zl}2IMU?O0rOouwrhf)~+xcCAMnokKj*~OwS77#%=Q~n|@yDXY|VL}zo4AF-xQ?F><noP_7Pwxj_|Q1Zh=3ahkS`$qFs+qCL~tb zgqp1q`#=Pxsp1!68vBBjQT1E?^Y?MHRhaI}Ts0XJRt|B*H5 z5#U#0(3PBWVMj(iq9gvpb&wgLM}HXfyA$o}>J{*S_Jcy1I{$W`mIa?B&4#2^@>Du2 zIz6t?Tz-0xY9`rbZ)m0Ffl|Oy_uGeTbB%Am728X>{8A`6>cc78B!9;SoQpp6KcXm5 z81V99-y91MS2fLbe5j*n&dT_tj4a?GbI9vbo8xeYWy!$ziz4}_BTqt~FDol{eo+j} z=~>&uiQe{X(P9la*B+jWjLuORA(0TZj{+E}K8t6FB2K45@+a|5Aa;g~20U8_oLxHJ zo0>CdXk{lerlaq_n_Thyxfy9K$qz;=0Ft;?)ko_``;uMaa?Q(S6$Q8yB|`jU)xwKZ z7mlzMVL27NL}Ok#b8id~ycMXA@$MFp7l=DHKS~sMRF0C5IKpJHdAl8%pL(R9ILb&AM)yq`JvBI#EqMRjIW|J(VK4f>j6b? za5<}R^`8GWzT!hC1QGh=M#JAuBtg$ORAiHs+q3DPpy$dO7R6`NSc+BVC?rKAVo;(T zoHje(+s&zT$UQ0cJxJ5WBI`X6GtoZQh;*XwBf{o(D35D9o&b6--R^LqTGyxcr0PnP zah-ow6^6ZQzY1%Hq*eFIIbap+%^6t6WHZ<0r}hi?4@KCUk6YE_Ke1QPQ>F9vOfOT- z>I=8`S?u9{P+!FIk-ag@pc7uc@80O!(^Xa7Tz1Ho(|>zC@JDHKsdLf8gEyRC(OX2` z0;QeS+y&7p=#QEKP{)ehu^N@33de`Uv8BU2-Q08(aLV$um#Rom?IVES%M{KacURKv z9$8=RX)eZr0hYRI{ib<>J1_SGu+gA{jabh8ItAI+qB^hlMru5bm7Lw}!lojzbu@L@ zo(DZmPtqy?oowntI5cJ^S*W@(DUDWJn_}S9ta~Ns8H;;X0WU{!5_D!?dRK}zPLo(2 zvLQg1&*IQU^PmNYm0=Ll%NA;;Ic$vg|F|R{`ZdQ#(-8BuHle;oKrBmm`Ebz_0N@{R zruy+?VPc+#F%IBtI?2l#ex$o90SoTw4HOgQZ`ufSW>Q=1U~g= z&i6o+ARHvlxR{&`- zvpczJO2HvTDKVPBZr1i+w+EOds?`r)T*{95LWo{u#dX^Y)-kC>=XUhP)#I5@vK~1i zst#It)D_cGzsgzYW7=N#%)D0`%PWoBrzoi@Fr>*t8*uUX^pJ_8a z_s^iEVlBcmC%5o{WHZz^K00gepXLnW~BT4zK zL=&V0i6?b+i_C(X_`YV4Iv(Z{EHAj-Kuk437jX8Vre)th*t8~U2--rV__=xHBC;mq z)Z=emNR4lN0@|;-qEeuEca(COL5HtypEM?*;aYCsaCmdM#t4lc$eM zS`e;RNKOJk81hXhmJwGbf0Wz@UPHSHMfTiy6 zN-`RaJH{}?aRA1%<7rc)t7y>>(bL|?E0PGc_hq%s_jY-Ng)P}f0L{9J} zaQ{7LX6+?WM7>{&4^Kv6S&NWSV%Bys_#f?6aAQX$v__vL#7FHtv|8%Irn7)XwYrD? zVs~DAC4wwDHNS>ks=8!_*UC_q(!ZNGvBO23vSg9RHS%kCso9=}#~*(aUZ zIZAPXnTbGL5;tJY=N{1_9+ct$-DXv1)c$7rT&vDD(mqqvFMr5}^EMlk`5s zHOA49t=P=2%0J^Goz9Keq=#4k6;iA3rb34@mvfH(Hn{xCz7wLwC60_B8qN2_ zz*DV_`pM)~BR?akv=YryOIHbl1^%n{XMj7n;UmjJ~!-Sf&%&fvjNhsA@ zo`|CT)z(B~V_%dl_pdM}O_qIZ9Brg{8^oiZN#j8)_Skh9)Uw}NgO z(wzmK7L^0i`mq5}U@T4`5otOJ*U|kg9m>l5xjX)j|KoWS-?7WJB`mf9Z>oySo6kpQ zmA+!ay7qWHY*MmNibb;Yssm6c*r4*>-oO* zh&S|0!+aBJv+*VC1NXnbv@&l~n{^Q<+Gh=1>2g@k^G1={SAU_9A0J#}SUWGl2Uy>t zclMiz{lu*BXUiq;$-9H~yzjqRP63?y-?t}h=CY0Eue`^W;NyWM6CCZcncajq^f)$` zpbCE(iN+5jAj4=IZ9}UWscCFAfHfQDdCp305D(O3oHRI=wL(SNO5dmBCHop<7}V$}C=Mq?CC`Nb%|eX#kSQkK{_SHa=s*xWE-uq6sf^r6-Hmk3~8NYNE1h z`BO(!=cA&HlXy5IhYB4=r)f)MS!!kQU3e{$cub9*H$>s5Aj6jCM54Ae7LgtC|6Cy1)oLnl>hr4C?SW4m6Z^_&{Ha!q{C=-!{;gFb>ra1PoyzuJ zeSQV<@r60~-}|uUTu3q`Yh;6qrmr~e>?|7nBk=zbT>b?LhjfnE6P#|?HX$kd9?bU^ zuuA@uL&oU3RGmIS{5!Ck)~frh&o)EmJwlEG7{cpH0j3L&IV_QLj@hStzMpY`+Jvf* zF1FY3JNw9C-jUAj)FuSo)hkHm3&}H;(8*i+oI>g6?_8r93Xh-9O^9sWN(Sdfm~Q6ib5~2+t zDx%7Kw93EQJ+8$~R)T@KqGr+1Thek%A%|W=0DLtwKgxq$@HI}BC9(CE8Am3)S zZxMof`P(aNZw2+=zBGXTYFTbHqtO))L(mz>Z}6Dk6);MUDz_lu9xY7@Y~I z9LN3Qz^_1F48sIVL=LS@J9%di#;_21NGu60RXk)-yDJ7ge)*0HfX27y zUcL-6{?ebm|8bD(BE_Sx70Wq{d;iYmoLK7mj-QDR`3I`!KEKj<{kePt&OI`VXkD$9 zC(<*#{#x=R@aFS=5oNJ={h7Cnf2iBnhqvG+)#6!XlTDf7!0?MA^mKiP+l~0B_bU%8 zgaQuq60|I+#`bWr-Bafup0H7ZOz!vf+X_re)!K@2akGnfR5>?JN}AD+s(KtLhTIZh zYm&UfI_AvL{QID7&58Fzhl*(*PkMqrT2XTHOiSgw)1+AO^uIb_`hP7X{sju8x7-#N zLoq)uyhA_S7kFYj{vY{JlB0+JGYaNA3+GX{SB}5R96c(#&tLq;IfJ;cf+-qMB&c$b zT+E-T+Q7lcFQYJOZf%R;;TOdOhUy670I^_BghS>E#iOF=qEX5m6R?pl)PBYD6R!W` zE2XLWx6(JquS{$+k9mmVTi@$C6^NMF zqkBuaGIYD%d_2Y0o{}Q-M(kv%O*>X-nFj|%Y@6)FrIJDw8`To8?fHutiZ!yjb!R6G zyPfHzGF)G(NA_iP&u!_{c9#j}KM+9TQ#bhWtu`+FE7A>%k6-0_cBHZ2Tq}eNioZD+D^)Gl(9S-vsG5BC z=9V69NAJvCT2ZsZz%7T3))WU5>YIq?mqr9>>SSZBGWq1%uKnDVHmd^6jCV)gJu6!) zF*){UdA~0T56_?3Q!V9N7KHu!$2>Q`$LLX$BTc;#b&NWORnWxFAi)Z4Q2ch2E2K~+ zjg>m9(ae<&-6bc59W!{MHQYMqkKi5#MAo2eeZ&I=NfIVBh-&#j(NWV;RSk*YqHJxI zOPAr~p>iHoAn6dkegy6S%g>75@q-Mj>=B58j7`8q=#O0p>1V!3s9s0i}?`kn;*3FfELoq)SN zpw{&)8WN40VWsw9Z{*`Gu9UC+5`!9sn9=|YmOcabG)Ll7VkxYBbZ0bhg8Qn+-0Ke> z4FCWaN!AxxRJn;JMtOj6YIza}hKY|L!+-()q||arHK!nu(-Q$X+R^mD0>2@!1BBAA zp|DdGASlQHW+XF>KzPOG>9y}<-}F!Y&HHX9pX-s|6x3`LoykX6i}cb;v_ zsJ%n-r8uE2e688R`$54uj`f`*YYWa|o6gcn-T%ejf|8hsgVO)bjPl<-1t#}7lVWGT zbqZ#myReK~bY(K1-WQIRcYP?`?34wNGl6LGui$L2)>uhJF`mTY{IuhMD1i5vL#Fe` z6|H>oCaygn!}8(<8j=51f`uZJ=)W$JEbardd2o#+Z`@E=#g zDwkh;V4aA#B8QAeXL%UFMdSD^3QgJE{$5JoIIelDE5$i2g-1?~^jt5?-DSwz6_h`U zUYXmzuf)8+8n|oYA#>hQd^Gk%n#fRh#7jCx{>&P_?=k5nb2;{QjtIvDt?F16LxGIU zhB|jtLgW-CsUwMM5fa4x%D|xmtNL7r5mzLGP>fNwl&vEt!YxI~%2wm2lWAAy2P^h= zQ}7)rg^jd{VqW&*9u9a-d-o41-A(zkt^1~DlNFEfkoT6q&ZkIR#Pf7K-wb|ry1%S0 zNBwyIHkZX()v!-%<2Ne}cv)ThKQmhw=o#hvJ6;dFn%<1$YsGuIeN+xCx(g1jqE;v3!^V7z86`n4l8(W>$pRE71B07yX4 zS)O)^LO5l05sI>hd}?@6w;N4Dd6%2f-^^YH zfLPs(z0O+i?rZS=VpYqq9DmxBa<{E_6uR|(+H1PjYvcNK8U?$k=?^3>wr*=Ji(P0AOKGFrTkc?f6k`-}QGnD;vVn ztztIYua~!K3IAyRcZjC{WyVIzcmoPW2B=L!vB+J42&?HF{T6X0A?I$7n~~)28wqKg zRgV8SuoL1qy_@9`J2AuwIU3DH(OtWUf!OB8DKuq(w=o3F>r7oO7|P*OgX- zzNXQD@ZRQUF&gz2C9#6i%vxBDqmw%fM}__c*`8WE^$5n33$f(K_!>1eR|7<%1YYEDMjq+3Ur=+)hJWHnP2)Xk zD6o7+t-U}@QI$B-|9Y(IHELSYO$RHl3&|?L{Tg@7V*R++_JO5_N~}AHfL{1Woorb26OJ*RT0^-80Bab==Aa=wI8($Ie5YZ><#;R&Etc0hz2FN<1>xt;O z#mf)*xJZGiGM}XxD$VOePjnxtM!V4E%6+UauNIW9EA;;EP_)ozq!yI093G=fH}}&Ol|Fg23bw-b@Ev;~|krVI2BDv&gmvu6*tY zchc>>9Xru}j8hF0t}~eyZ%`IgoSJ(@2lIPQl<8^vaJp}Th(3HCL|qA%L%F4H?BA41 z;fFP-N%rfzAR&#u#;0{jsFTb46!Ru-f1@s0;eCZUoIUp45+m51&#yN+dLx-9E+ zs^Qcljf{SqsftP^{_RhM|p_CYzDc)Yf?BX3@C)?-XRO?L(RNw?M zaiI_ZW4!d~sSYNP>8W5;B8k0pah^*iscz{=tpnMzQen62;`EcleTLBYy5&9b@`}wn zdUDvc>Jk&=GtmgAj2arxU#86ZB0Tv5==UmZ-cm3wYTQ$j+0Qe`Gvg$vni{{FBSVXS zd0@jnRm4`L!F3+LSCy+j9t93J|0&Y zY&1@_PCvU(e*|n#E(=GVo%Yv@-Az1h-&!kA`={8|#ix0T@Y=uMs~yQvTUk`VT2jCq z`M)yz{}XTiRXvcryD?)c#Q1&i{;7CRC&I?3OxeICW42i0V-TU^4@e$`+0VbC%LiEb zb0wt%EBqbehLJ>!Q7K56-V+68JYYQ*pyG#$^eZ(K8i3OR$!_J!){@`G8h^~Yqg0Zw z+GDlMquz9t%0=$8HQXhEyRwtTyq1`iJuYuFt(kS4a|mcNQCMZS^eGs*6rxbs?%jRb z%U9KQe2<6FU#zb~KXW!q5WKA-TDi&}khMxq0(?KW&rfGb(c&uUGG?AceRSS9!>#Hs z3x!Loev~)v&Z<@KAa#h_aI)@hh{HWPJsfadRn%@z#Tdh zsf(>IN=$Gf0-O#NWyCdhBy|Lu$P*fXrS&cm@nuGHtJhR= zshYvP(+HLa(@f6h9m0CVJqXFM-iG-l8kzo+)B37lzdTd8u979sWk4#oNHJ@2tizX; zs3{r#V43~}Gc}3WaGviEeIpKRdC^2bNaE?hkcwnwTteQSt^;IXxO|>WUy$HUP;8i+ z*twngf<%RcF@&4hRwYtG-40zbe6L10Y*T47a(GxQ2AHeS9wG+UH6EQgP&#kmvHVk< zBI(g*W~mWoU+W<)^eNuh3F?^`#4KK-T?Sd!WuUxe4??XkCnIx3`CAfMsb;+<7wb2S zQ#62_)YNSFw^H0spTufNS>;Uut0&3%!`6Q;Y_ycM*4%yalehTDLtb{JtV~28_M`e! zLJke}-4cr)wRGdBhMQ?iQ*iCQkS;ryYNDL_!`a~6_YHTg^|GWs8VN&;Jl^T>&T+7A z?F_|*$a&K;7b+BMOKRO?P)=8h=48(W&V3o?P}j&6*?~yCkzo|$-X-SC_2RjbT=KK! zjd9dTyZPaAJk1Yo6SQM>=s3^(Y|PZjc|LQv!;NM(#Gr_hF7HAITHOK@)I`Y&epSC7 z5UrkUY0#`weq>{3T9jjKb?NMM#KU+MLQ>qqGc1huw z?C{wBN8kK+pG(F63B>p}C_HjoI5Bh;+)iWu52C<)RHf50D7*ix+f86g{5u(^3BA;Y z|7*HrlHVS$m>o1Bz!)?@9$vySHOm7rFdB@7Q^$PoS+t~W>X7a&Yk`(trvc*oKhFxr zRLZz4?I-HO#_=JZI(?-saBwp3LYAfZ?Np&p`OD`;w4R6VNyBu?ds;DUHrIn$el&!6 z`?}{N#_H!&&h78hz8Y)p`dOK1YhAl*d+nq!Ad$^D$K&_Ubae?)+wzv;cHMuIKNedp zrzBH$8WfB@yc?(HCN91`+aliEltAukK+o6EbM(W`|NgV?RsUPRBQi(&Exo}b-dcCk zcrK#)9&2-ErUJ77z%h~ua5ANr_#+~MCma?_BS=FnY1PuNT(LGR!D67W#lzj3Sv5)A z;U!AGGe_6UrZ%pr=0T(9?s0fP8`Z{{Xj<6b@G9(9P_YZ`Cs`B8i8o<2v~1KbK8{UM z=`fRuY-CS3eBTm;)X4DFtM_tcfvtFqIXmBPgc3o>$QEhXOOT~xj=avLrZl2a1Cq4U z5M%;2<%6c~W8dod$AV}h3&!VgMsaC&<7x_BVMS;4way>)W6%<%X$>D(2k1ygJ#S35 z;IKGiGrtKrqzxSv>E6$Y%f+n8!b0#4u3R!aNc^ZK7nsu=_>q>rlM_uuDHu}fatjT_ z@qVCNvc0Q#p9EtD$v0MOdtg-;{7wRh?GV(y@qn8URky&CCgyDMr-#3L%Y(`#5BAnj z3(aF%V5`-O<-a3#EcsnPV_tWpO>xaHH)CVsQRSp(^t_D<9c86vY^<3^nXHsHzhv+X z4;PMdubWXe5*5S?&E=g5oa@h~Q+RkR!0Et|&vK~Ik(mwcY@+^1uWAdMGvGRpO88?g zHf|Of!J@V7V3^s%$$k!qf;m)|q8ykc;W!Dng1C(iD*QGo7kabSh00|{1uiL}jEQdW z*T~NZj}|V&G}srkQ^kEpMK71uP!P42AC1A#8&VT)zJPe_S|ZAr>>e$MMK#`;j@B;E zBsnh$fhg%9t!R~_;vUpqt;s-1Zg*({QkIybip=#!(CDDX2ZlJPI;f07NySy# zb#`!xGrDg=gtdFLRHIa>KNxR23`NqK)Z%yrL+rxL8Nk4RgICJa_j7|u{U=>Dk|cY4 z*`JAwxF^U>icVHEJ4J+Y9h+9yWy~HTou+uaFRdVt0+@VJ_dbp2RJe)>3#MBn&6LG( zUI4qfQ{)3m+7YGf>AJ5WDOVZAB5hFty;Y_Wj|ytSx3iSJ8@6(6S+<7>E>9CrJ{@}t zmlm^1Lf>aLD%#C&Xr5GsN#-1dToSjaLHSpPO|No3tpqF28XCA1+0c);%T{IG4vmGC zz&Ybc3jyctM=`Wf*i??4DYG}|5?Wkj$56R@*Dz&g1)Ndf%k<_JU#_dwlWJA*<-qa0 zu6xUmyV+kXf3RBW6`>fvWzXpS`^)An9sbZ4s2Astn$&__e&(yjN2@n#b^MCjecNrK zzr|IaHdQ_BWF!;d?fgOQ^l!+Lw{Hwf+>Fm3@rC#t)$9*+5AKF5nVGMIS4E}TTr5!v zSKbNqAR~d0kZRUzM&t4tO)3O}rc0dcLj8Z26{_G2+owHpWnXL)_-rliXVyPIk_sa# zJf~$fuTzJ*NV*#G7rOSJ}jVI$ilg=jDXJ{Wo#Dv?a*ZNW)=Z1tO$ZYDL-8%kdl$K)g;Z+sRyGe*FPVhRTP7$>t7kNHxdY zRBq@_U7E&Y*jO}S*bVXqhZlcNy5?LmvkDpq0#-&6iV2Xh%NmJ+Kb3O*j~&BmN}qV} zIOy31x^Ux)tkx`7*IyTW*<{M2xoh5w?a9%6%XG_l)u^`EML#(hRO$d(Ir2~qj97B~ zIHC7t-8fqntWnP&=k;ijLTmV;b^l6Bapvcx1pp_IXX8F&lC0D4#-Vd&c{?pgf|VkJ z7~|fetWDrJ#YaM>AmxI)ZR%|hA|?RICH=*8^x7aIrRDl2*FpxW%`690AbcgQ3g;I8 zb}0$Zr9UpFlRt0?YSj~YW_VzpZ!gW7q19S2RY*=@sDUSOP}Jk7^IT?2F@TPF7z_g> z;EzR&4ysQ)sg~1|&GDKZkbO~~PAz@l2KT)y(oTfynfvWH+9=_?vyFs=xHb2+pH{;r z@*NWN`=A+4TLICVd7}$&>thKsSuWK_{H`xPq;e-AyPevT6N&iEpt?G&j|=5cOsTAI zjS&=J!Q52FdS(o0J2qLBdNpK9vvd{LUGXMnE&CY96m&SLtyY9N$>AJ)bYm1UbZ)k` zf06Uc9D?hxo;z8lvPjsKWmSm)}I*C^I(x0;{L;wP*zPJDdEJZACazV zYR;8h0+~-VFV$ij8b1^mT|CIjPNpAhn!giJ>!I}HI{5MyFUCM*-yE3cdZ(P^aVk<1 zbZ7vqMWn<7vkxJNT1a#)m?dE>Qd|lT1O?|LfGl5(h87;8! zecsGjqsHSl=d~dM*BbrBqAfQqF)?~ykfz-m!2?%>7sWIcXHdp)P2U33)uw0CYASfa zhGV*biOkjAasHf(f<J{@8DO<+u5U^qBWjKmABQpe{b-cK9qDA#5j``4rvUN=UBz4Y?BVFDOwus zaZ|D84|pw&!rYBzx;rapmk_)~3P;m)d8PrIWs1gnZbT9e4nH%Qvfk9c$%(($1BS$R znowKc;ygXgDc_rLrUgOflF7z+QseR{@@!E1KDf$OJ~=iuG#2`!61nItJL?;XS^z?y~yl z>ptLS+p0X(FSMOHclhuzO=0;XM~B4JWY>0`3Z)4*52i?Fs30|1N6j6*R1b{gKwta; zla8YsV2&U z{0@Oync2I8Iq$MJ2enhvr2OP6pYzmgFlLm9S6l^eZe}nq`Bci&ON9>{G}7a@w5Ruo zb#PXK!W-{mk8HSRPTv9xIm$}1QB2zkOehzSb`0l23^`PdS(S(_FlIk<6gqwnHY^E> zF(CuxkfKe<0M7IfzSLm&Y%w06iuda#L#Dyv?s7<-7PF&X4QrYSsYh7mws?@kjc6Af z#o|Cm3)6rOQ}3i^z=WNiaJc8=O4y(W049K3wSSUHT+&DkXyVDKNO%iLNT@aW6G)8qCO4T#bRo6O zk(C^QBSV4Ow}=7d<+u?P?es34ifYt3KfubP^SSwBOGjwdwf@>{8U)AF29M_0_4k#T zx!9<+?yRF8703@Ek13YM8basF*x;G<9u7x|0o3gfkVozj%dzo!$bflz$D#4*Po$eM zzqPw9t#?!PTjl^EmYk$j?#Yxh2xw%qnmck4)vK3V&xyxMM22)db{T^(Rkq|=RG_~g zUnfFR%Q-or(Z?KNORN*)T3k6I&@k}R^~!pl#7kcCNz231t$x{| zsr|FVM!Pp-VM>HFsXc+>rEM;bY7(H1bgchO`J?x~S%p2dZ+0WFw~az%jv2t;wBMFu zC1y3U#?aD&IZkpmeEA7i_rQ|#yaCw@$MkOu35D^}TA7xyX-eULsKr0X1dI7QC0O;o za`I;_9MQ*LEwS_2J!Aaj=hXUK7-^OImFm~kT~5t>0aN#1qWXN49GjbVt#SeO`JESJ zje_EAGQpea24rG-PGAHerEuCKD=wXpkpoQ&=INeP)j}h__=&&4orUyps|I}Vh1MAt zVwW9Ln60_&$eEPz77951Kxz{EoY_#ZEYrfTRvAL!SxgPKO;(XR5a2w zt*FbDou7Tc*`KFbGRHbE8|Xi5<(w5a(F`M4O%{eiJpHWvg}cZg^PM%hoQb6kwO2!VI22q4r=%+PKUT2*VYc2|ss2zI^;_lR^(}6}wbadvsKV+Twt6`>=|q;=h1xfK zWD9c$6(?*2Teg7%c}ycy?BOFgyqt5r3g($jWLm0H?hXVSpAM&J=9m1f9*NY%dCJr& z#B|6M)AD?nEuN8+s{YQaY6KffBz~|Hi4c_0+#5FvgV3?QRePLdtRcW(4Q()`+t5Qq zP*kUu(DO<(hciTf@~z26Vq-7#!OLcrGU~RMoVH8{z-ZJ6P*2tM4dQXJIC%iK8G;8y zVj@31%*}5&@N)+Kf~s=EpL$GcA)Jd? zK>XsOns&I9m;^|cX9@$!gN9cAxFldfoEB#j4kEhOS=po#r*!qPs3-x1kDDpAbMjcL zN}X9cwDT)D_m}59jMG-E@fF(bW-$oW#3kia&aZd73N9HKU$C?-d6#6{xqlxEi|RN# zKy=kqhBF3oCK$blZ2<(|%0IlxQ{`q)7pw@~(4ijGV{b85re7McZQ`$xH@ch^we75| z^-32AS+z^Jb@z96RA9B4a@1EcqAXhnmQ~bzY+uM2(sPAf^S9_**%hwSXaDy!&;J4i zQbV^nuMihi!s+piLt_I+P#MbLNPLW33Q4@BC;k_3+W65vwEau<%nSS~st)JO~& z6Fr3dsw8PWDFqa@BLVo*1_alO2QD(u51|<|?oMEarx0p7^h!_=4K=GeFZp;1v8c&6 z-<#E_(wDVeQ4;(E@T_r>+4w zIl03_$MHG(ycWslhF+7dFp>QUy%VhPB)^F#csX*w()(|wPv&bJF6gf2rHsi$Z;C2I3T3$2RWp6s1WD0B>Us9)!%QlBt1C zqdEsvZO}8EBidXvG6tkFouFWVNNr_|Uaf$0_o&-!OLdKk8jsd5*)N(oW=|V@Bz3*s z))YKGVgb=Q=4fCjva)4L=5qbj6r7vjKX?R-@Fm*jD0HR^2x?W-JE#P0PLg~s7vv8B zq~cW59NASy{FpwAqq$JRIB`e^>Nl~Z4x93+3c{SgMReoIZ>o(lg`xt9R4Ov%46fA}8L1}^lL0YHoV3O4Bpkn8%ZckLz__Vk)-s3Lfc7J<~ka*H4DWO~XZoWif z(7Sk0T-nE_Wu)oF9q-OOar#`_8UK}(jub;|Po!&xnnh8tm3)Dfv(aWp#QcJSpN+>4 z4>5vh|tT!}pS zMi@Z;KbU)~sJOazOSo`%hl1cPg%_6KRN+v#g`#lxAPK?UwQzTLC%8j`YY6U;K!Aj3 zbGqNY>F#s$o&Ns6Z`U6CVvn(&x#weZ9vB!BsX~@sYIHVm3O!5b#y*blV#kL2aCQ2{ z`5GSl(8zytqen##nf#>m#u6tknxqcR|H(!wkBRY%Jv9?D-4vOLm%Xl2n8Sjho3o3J z#TsobYtHu=#SjD;87)=&#i{hNwtF95Au^pH$0l1NmLU)bLbD;ozVrDrW!-Q`saylb{kEjYbLdfLiC0WUN5NNtt*>1jZ9 z1yGCl4hS%lVyN3%CO|{Y0Y)*SPNSHeF2iq}(Uxsp=3ZYe_Prfmb6^*fJ<#uz_j~oD z##={I<$emzu96NK=^eM#YmIiS?j@6%mxJp z8mp3}qzF#fu-I<*WU90aGu0>Q9*6!9s+@*O)yT5hdN7lNPr<4BT^f+l`O~=78jCIe z@CqwV$4s-4>E;_v&osOt&f$2XA%z>wWLUncOkwvq16@m0_>7dC~Y?D zoW?hC&Nd6RWJ4PRe2u#G$y&k#DyXC4eY%L7X&7(#dsYI@=DQVA6W$I6sk;acD{JmO ztFGfEFdTaMJ$kzAx9I9`?p}Ik#B8$_NvmD@QxUggfr3);_ln5yMXk+7&K#|2FiyI8 zR01XvDCWF4nWjB8G8Cch(Kont@W3C27AZx74H#!*>vShJ1M!+JG2>fvTVvpH<+JdC z82wQq^XGQaMe^%C7WLmF;|0q$fBfdhGmm5uaSx_J94}p_g^koAM^84`IbTLEY?~%`@oVt19-$Os< z_#?Pe`@cLtmchWIU_elm19RLJ{tnORv5v8T9L^AIhQ`=n_Q1f0PrO)GbyqN-ab#Mg4`6 z-bA0u_y-gD{}&y||E>7=4=4=(hn#{YWQF%fp~Gb*e4|vS{sj#yYMX;-#dB{yIcshH zC5^6};=F|Kt%S*AvD~=yNZw!`0M*kCTtt^;1Sz6U=6HZaSMrCFxi^;>4V3tuMZT39 z&w$cL%23usFy(2gx#Sm_F+{$L9lXm9fwgL+7(LGlFpz-%!glmpUNQw<66fWTG?fb$ zf;!ublU%NTNPlWDD;c|V0j-c^ahM8!?050|A*Dv9S@68h;{j}d;1b&bu_=2e1e2!p zMWf=UB?~E9>hhSkz_hJ5C`59ttHKVm0KaHF#)VQ!!|(Nb68T-1wD;p#R<3?qJ6K#p zQ1$=gd>@YiNuJ@JTs8M54zt8Ucx`81ozkuoc_J$N{8Q4vR&qwk2ZC2_r(> z%1Tdb&)=fOu!JQbrp8)J=F{j`YH^a5wD#ei)E*XoUq$h&Gu&x;QC-Tp=$%$!5u4^b}hvuDU-lP}zh%Xx=H|)xA#A{CRmwO3lYrb} zszIXG%)<*UZB&hMINSTx?FiP)XPTH{;df;YgjC!tG`zYOTU<~VAh>GyOYPe4fWKy; zT8V7w4XmeAub)?UmwHNs$j|wa+G7&qgmB|tgVpIjkdn((my)|GWME*ZFgmjL+22io zT-{iRY|~PzWXiO)6|J=o;hR|$@(HX~b8H81Klf>S1`mnukhM?!8C=eABkBsw=oU~H z&Udk>YW9*zK|kCQS+Lm~6Z&-`%N9?TcOY;~^5OaWiMZBg9LthWciZ@VW0)>I(Xb_2 z$TSS=w7o^M7)&ZmU{!|T^d<5?59iZe63Wm>($e)Y3!E6jo(R>74+EtH`= ziFchnt>jM`%DpSYTQ0fjAGosBNc!X}`Ye<#f@s|IyC?mdoI}i$cge@aQ{F+cKi-}1 ze8`ywY^e9RoO`f1rtB5EUJ!lDu&gg3g_Oh#?rKWFUIRucnAH)>p(-H*G-8#5V6JHE zTRAzMgmZ=NXnv( z$W&4YWaQVKlch(H5w)p4FUQxQ%=m>wroHd3g{L~`5-Uf>qd_c0RIK8f9N_O7g0rg2 z&N1JdxS03MOV-$CmniQ75!=o0U{vzNRerm!Y$j8CU>Pm(1a)FfVpRP#h^5jjL zi@1MN7GJ^ma0mf^B^DlH%#sr7mOgOLcynf6jhL~u7~m>fyrZNQS4yhqw_@F zS6#}N*EP~EAF(H6LPoJG)G9&t<$>7OF*sYjGx~jkauE;s1R@P-mRZjOq|~+B^&8*OVv=J7n3J)eCF?~LBRS-TFyVRRAxEb37vY>B2x)*&w$8`#^iSS zY>U#!!<_@kuPBoThE2v7`o~yUE|#vj&WS0VLyEVUwT3Gve|=KvR{pY9#z5dd7KFqjPiPxNvqfx9c1m__QHVH zQ1`)_$?{St^IkW*D;@1<~olv=NSU{dH&$B1T<)fX+cjL>61 zFIzIC+>)r(L3j{KknDaY$C=u%T$oRn9)Dfz+_RV8Ul7+P`p$MWFDt$_|LlA73imNv zp1h0UNQ2{}?{M2hgjXnS`ES)NLu$#|nN@>IY}0_=0=?9dIk(UJHapJ^jhtq`C4Qv; zn*Qo@zEbdVxy;roo3jCD_JLsYpjol%`fRcu!CKP6?C(Zl>BN>Xj2^Tfy(txTCLy+1 zT+d!uImOhUr+qyCi8$Uecm7gxo}>knkC&iR6@y^VlbuMy2kgC*u~U-7Xq4?B(F-9r zVZ|Y;MNNy4M@u@|wyNHi{ z%KbchFTEXVay3GXw?-f>;GFu6_x;S-xt%VTt+@nWaK2H5$lPqHxQhbm=Ynn((sa+? zo7@@fOh2Hf`6hhIJnP$sy=_0sTHpO_ru{XeFYrc&{&}5eYJCnZHK}dtN0EjO-!qmr z(i|reBTuW$%X`slZS$3Wjgf$(*zScT*rMTkL!lFYMCQ+duO@%nO+=~FUKd0(27fF6 zCVA;C@bi7g{{;cZe@Y5_wgy3N0KgCDo_BM7fM?LGmyb`Fa4F35PV7ly06?4#Q?%9> zz52f8z#Qv-L;O+B#d=uWV`Z6%j*|hGAc2PvkidleGB{WqgMze=l_EfCdzD|_yxO)b z%wuwGaB_?3kCm(VozGZc6s~Xm0e3sn9;*AflhT|qn6Fp&TmIXv;t*!OaXxZV(h0SS zRayhvSH_3^M35ady;dr=&%abnXKtR9l%Ms^INu)Pu*QtD7>IJ#Gv#G%&5upZB;~2r z9R;RjD_+gPKf;Wvxih!h1wNiB{d|{xuhyzx!DhbQaQNVRVk7iDW3tla8{P7{-HYDs zfh!eP*mkver05mG*JC%U+P>VZdH@sgyP1>hNsb^0U)Wl3x@|lVnLWZ?2EQwA_Wl}mV`e;(<~F_YqY66j(KHr z6j37yyx|Vp)`a96-ep{$z-5tTVVx=~8_gOIjO;%WQ^XTaGB~&9#mV7`hzfR~wdm{ZS))FW=}L;aogN0mDPV*IY$ULAbkCG)ghn~Q? zpHLUhDM79{*Nr2OKbXW8e{+g%t*PSRrqkXP{fMGO94=H7g$CM-!>I8p+w-g?x%6c4 ze0-^()85YGk%=XCI_qY7;vPczo>@rnUE&Sv{uC)~`Tj9(M-NCcyhrq9P47k(h;TW zu^5ubF9PJ*Z-tXlHU*5P%LgNx(^3%h4$z&w!8=iSPi%z*M9mquWwz4pZ9N~{Wq{Wq zJ@)Wnk7woD6<5VbSK6%(YgS#8M5G&RlzRk^Bmb@SuD9;v5$F43gMM2RTSP0_k0F<` z5GX8nU1psQXF2$kWF({N7r`N{2YUa?X>*<*s$=-gapFmDekMm9W(&^7Hr=$$)Ib^N#x-k=P0hch0i`+TbP%3_m9&YU}ay zy(n_$&Fm8>5H-ixdK$#E!w8`wAUSNwt&ydm9Y7>PNZG)kP)-E?crP zFUP+|UQK|y)zI~8Vc^I{HNk%DbeP(!+PgKuW>X_KN#sLfPN-+UKgFiw>voCXYh2uW z0dbN+hO5%u`JXFO6)3-1*-53RiMoytu<>Wyej2MYY&0nseSU=0eVQlB>A1ELh^@c_`|X}(_cO(f$2^zE!wV|B9_2LT==?I}6rn(>9!>UWJq;^_6Id^nZiKynC(^tl7|Rik6{@Qn?s%EF;Nr}m3& zF?i7bqL{+})OXLbUvtvZLeAFH5jmXI(&*SaU`4I*6aoh?Wl4`a?zHO?Bqvd(ML zSX~JEM^p(40v0r|^#mF^tFYWCJUB8s@6m5_7D(Ta(ZqT$dzT8U4pmm!`OEoO|Tn_Q<~k zTfAvkGguy@sSHzoAlT7dqQ$@Lb+U09Qk=cUBiK$cyUjsRxq)*y)z2G+vQvrNWjBcx zr>K_%SQtVTKRZ&@H6L=2e<(gBbyii6Ac0kPr%I2Ursx-|ZBjA3xZT;+*MSHMxr%N1 zadFl?h9Thq1rrw}yq(`H3J!hO7lj4mV6UF$K!`DX!GRJtZdk>kV-L#?MQqHPoqIUEbe%owuktrK|eVTajhiwoCe;B^Gn2A3m zf!4p=SsD1t%(I+0PmN~9>w;E+sfPXZySa>{&?r>PjEicu*1lt=+Hlc1$`tCTTs#pCP3e6%8KAja+ zi~wwauFC<0vE(tD6|s_9!oh?}Q&Bz+SD6;wIp+G4%$jRAoC064%Z$wF1E~>Mv0T+VN$SV;{g%4 z`cDg?i>%{xXzk~?wfG-f!h*NE18Zl_NHY(;qQBgDICL_Ev zWE{8XL{<+()He^a3o`;bPc23AD1Hq9MsH&=F3BD%9;c zWMkO6g(JiC%?nX+xSqLjtLpv2-@hjR{>kTmnh%8b>wy9qkV*V40XrNwQ=LNi6+Gz@ z>pvE!`@1NaSwVo*eOI;w;OKz3yx@~0JzI;R8n06ZuUITPnl@@^5j!Qexrg2t7@i)v zZ)_2Up@AS4ld-*GODW zPws1@bQ;uQr2^Dc(k_)0l~$LMia5$;-&!V|PW0piD;B(-#1%7xc!M_-NeXP9#Znrl z=Ths#weo_>F8Z&dUB1*JAInOnW}@Srhk|-y)q@z6D=AlXbnPZD*K^6Vi%Dp)QLP7* zKZ|(LQ3u^4a2biDeFbpONL4m!G{U0b&udkXtLS{`jNS zOYi2U+VWkrs)-BB_5?0?zVT5fj^>jqw>)7xAqig=SU{v-9(6VVB8p9>B+BqiJ!JwK zbG{QCo?pqL*t<$DAy^EF-tdJz*lK5K33}t z^I8TM?ExP3lVT>KYKd208dOYVhz*H7`Dv-QBRbxy&f91f+;L1d^Tpf?O!TCbmQ1ub zZv7d$c{QdXu`C!oc|f#QT%0~_Ulm8Smr4`H&SO9?qH;OW7=NL~(VhL|?F&fm zCfCd{G=_js;^z(I1}n~iR`L}EuC_Y%^0r~eLd2>J5Xy*1YG%-^S7pm@ub# z9R4h}Il%~C3ZW|Qp60G#=y)-j2Ej1%EhS|-k6f$_Id|oF8p*45&)0JU#3I_+%3PQ& zY20g>j0dyzSzjx$jE=2fItDreUID4#42UFc@Ld&RbaZT^K&etp7nqs8O|g$`f#o{C=QZhvQY>-Ob~efbjf zQ`a)Pt4D-_ohmJ7hR&%k)9lt8UwY1!<(LZPF}n2E9UUtA{D&3ako=T)|G)Ge|IbY0 zA5Z|;um99i_uIYV7IcX@WY8~#)$d&$oQwPiD1e}%=yD{cY#E&)&5%+8+h@aIy#Q^U z!3Yvd+xV(w^tm(=Id9o)t(b6A81Tp;Zx|cg%(!2n5}J4m4q1bCxX@hTMMPGH2K|1> zTABTB5s!>LPZ-3C_pHu{{%x`-r0d0ipUBNs-Lb6urP+b?QF?NI_*S~p*00H@lkHyB z8rt8ceJL!XCK-RxE9eOvuKJO{=)^UXsra)>@>rv8vd*U21`qeumKan$yrTA#<0qdv z^D@a)@UUN9-RISsm%0G;7a~&je!R1Zv(9%?vz&b*td>ZW_s16Oh)^y~bPAZDE~dSb zKT3)*jpv0pBbMn^p0aGY&0?G~g`P1fjLQBBgWRFGix%C$o7Y|6!S{hZtsaMA)aQ5#Yk)OXgWicJ{@BFCJ+x|F{vjl@+e;|dTh<;w9C z3fKsq`M+X^qNx{kc?$v4lD#=ehj^6(Jwr^#TtcUk+rg zx4B$=UHk(p{bzxK5CBFnF27jr@IaaTxE~k=7xdK&gPgbu8xy}>aeRm%g;1A?Fv;t4jJLR2`3*Ny}}`CLqZvBH%M+{jZn3{7n&J)rCyNcw4$> zJtExIu&c=csy5R^8PGj}g_oiT&*8N@^VwM5XXWBRXMc(V0)(KT0Um0G?+WW>ckjKU zV_HE~-~&XUWW?chSpqK^Yn(x@<3stBm0oLY@|_~)$uxQ|Lf9F?$9=LmSSw|wyuxzX z`1xNEQu;r~{(pM;k$L&Mn={ zwxJwi1P+#m#(Js6mdNa3F2wsC(`s6-JVnpkG;bvj#tuKz`lzwb>fVm*^SQqLXc0cF z%-o~r^SROrCXl<>EL>_Sb-#eNKC68=6D!_o={7iOD**R#=x2Ssh}%bQ{roqLw&udI zD<$V|t)1SKF)5eDF5R);dE{F{q<%-EiG@gE1&k{Dg$b9eao1iTgBIw;i$2E+GdHM>4)pSQiW@V)>{ zSr;eqo*5keC=4pqoCClJdx!K~l2Z z##RR>ZE?zQqiB@Zc5i;Kot4$Mahk`;NQ}e93;}_`Zvm4<9lX>c(fST8jE<)0m?&_C zlh+eu3hrX4MI_XURgh%jXa>e)euNdJS<)+;_X=z|7a%X)#jAN@>`g&g1$xe4h-ny# z=CC){ntG$=358^M2KUl6$y7=%aMYOUJT2R~y< zYq2X&D&m`vUaf!tx5?45D;ri>IP1yC-e$Uu{XJ6qhOYJprDxKM+Qe3K-#NiqoY!m3EwfEtrWp)EAV_!~@H&h$D?okp_04f%|H(YH-%cI_O6 z<^NR?*8ep2|I-KmfC9GtLR=2Qd%K?2+>O_j_G6)Gy-d=DYU_n)WknePs?KsItF1kJ zXj$EbA%V&=8;TC{Tpm$m5lD~^@j<5+BMc*y?zDV433m5u^+X9G4ArExPam&CRgz7) zn+`nLkDoS)^lD&Ji+8!oYBKir?(=2ddTacXzFm$ly^nNL^T~0ooAXsFHjx~$tUb(n zQblol(2{k~-np$Co2r=uQQTW|qFtTMH$uZ_rshH5bkEY1d8$N|Iv0FDx;o($D@@%^XOUJxp3tad9lClY)5Nry3*j1Vh84mA#f{?uKw zT8eiqO*s1AQmmC$Lel!OsAn=JwbP{a^(sQ>{eg|kGX~?9wa2$7*HiVsN>Hk$xSz;W zkU3P1#!>A!V!l(z#alg9QQj`ngPV3GB9q5hr~B-i@tB*)S~seRIGfLT+zov`X}*-l z8ncjDSG!*?WM;!ETjf9^;a%+K<%`wTCS?Aqev(kZ41tl9Hq(GHwv4kjeZF-34EN04 zTi1*=mYCK~iy+*izYBWp-p=o8wdYu4Y`eA`7EqWwherr>5HtWqJx=wpG@&^Xbb@NE z;$-4`KH^9n)X-c>?C3Gub;biUJ^F1$8yUu%9}uce2C|Z;#OiK@tZ||?O&6#a@rVSqxX+AqgY|x40ablc9v*8Y`$qS% zE6N>r10e*9Mm^+9lFGQQejv-e>TR5d?(}i! zP8BIJXGr^Gh+&EHP9}}?^aU!e1aN3848&vPV)Oq_{_s!waAm*Zq-A6DA%XUY=3HPUh#tD6sJ%R&z*x=jL_%M-PnLeFC!lx?*{bHScK z$x4uPDpkN%a4ea>z>~AOQ-AHx>bngmbr-pAS{jF%*k)xX4Hgd?j=Y#)HMrhL{jooK z_Po*dMG|X`XmDy-=-xtCCrY9~i?=_K`<=I(tNd7k{=;SgtX)t*=nd}k6YkA+{yZrl z#HMXz|K2fmAP!-9bzAZ^q-yH+th(1TWB)Xts};W_dO6R)mFx)PqBU~Dqv?RxsBgnd zk3&+A8E5Y7u!ifyJ?{KR+<*w-Z?xmfb5%EIaVaL#$VVnj*YO-(>WYJg{` z{4*g%y?mwD;tN~ROm|JiXdbtSVyBZpUAQgd#bPdB+|!@@7(t$C-mJ;)@lr(MM6)zK zQ8#_1w0sqmZka?xMTDT#0?CexE$^RCOGZHe+DtBiddNsq z=BJ(wYvL=q)D=^-dZuQMVS!g^oevL2VUgG&&dPfV!^7_)_cU9&{lgs_+C_uuSPnvn z&zeu0QXMa>ZBu!7{0T{qw6YAJ$@IwIIJX)kzWlZ)n519IN>}*qSQJif7qm%E{(V!` z*S$Sp>&4SjBXn~(GDk+xOi!4HS+tXA#fufUP1i4(hd>xllN;+Cv!-Y0OK(Pw>+gSM z@bEwV)&CbC{EvY~ObPqdr_E{b2LAMuKU5d+s8p-IKLbs?rB<}EJLh3L$NChA5tO~|>bv+Z=6xBRS?=osf4dSw14U?SF}tjtEM~0fs&qJSPy5O0kzo-5{;_EDLL%pzgjQAx%l@o zB))6Lv4$`svUlqiZKGl-RE5L^J5-&+v8GCOvK++mwIKkhgt9V{S?YC(QVJ9z)ZxPw zWg%xfKqP}Vf>BwP6qnvPIN8pFPd^!mdPPDL76x}&iIu)esIJ{yJ{PfMb`pe7qLjxz zC8ivJ$KXR)k1kE!%}!(SuqetQeMh-r9iN@xc5DXWbjDcxtLK(mYC)DG)r+;(dYbQb z_qXfR&!G=jVIv4GK@~;foYjQ(I0+h5=x_am5Uz_b{Tbd87qYfCqWQXwi<(QZ@N*(L;fg3$F>#=2&+QWD@Z;>z{ZXEXyDDSb(Agknl7qxqfjrh3ev;fU zCjYeKABNhdg>u@S8{1-1Ccm6BG$-PcICwqY0P=D6=o`AtzX3fujRY?@%75 zta8`TkfSziiT-(xI(gggD*IQ#-QWfJU5%V$Al802O_{?*&ie@F^5SL_mLk9Kz7^)9 zeAxkrbwnmR?-KPF6Ac*&6I;KuWTf{Nm6~SW3u8!4%$l5jrPF@cCn;;m&+YHf?kH!zFJlt77s z4NReG#VN78_BajPT)vmN=GwNB;y`9Fy*8-7WNvh+J9B6-ZHMfYk$Hu7xO=;UjfF=e zR%5Yx$PrbJvsMo38%!|^KgMc#!ygtnEYR~3@17gqRGV@zq+eT1zHX?TFreVNMq$#HvM)j(||_+a}yd` z6<1b8ePp#PnEOf>7hucn0X$?#M2&cgpY&kjauC3Bd^`*nUEPYB9d{NjgmYCr!g8pH z-h;2CR>Xt z35_!La0spEUUIVM>%OK>LP=2uq>W>hJ}($ZT1r{GbXq)Z z#}YI@Dtlk>uFM;~A;U9VJrR<*vuQXYI5Sz0;*P7On{w%`^}H%BbN{Uq){8cgr2#`X zCJi0wFx7l+wDkFEBS1=&LHdj{czvB}v$f>#nymt=mu=ae@5p?XBu#XPwC&&WCF90s zRyX?)O(BBm#94(w{lVl{x*yBw8jN`h+euKBvSUWHyZK+nnrEOp~AABM4|ftpx6 zcq6_nfuF4lD@~7Z?5(xr`6%YqJZU!n_}-^PeJWe-gu`js z<51+%_u6AZ2-?`}-!7R9y_nOIkEUlo!jE2alMQACU~0HKMM=pC(K{$?!$Z5d5Qi1& z!<5P)%!d5lziMA~ij-OIjPQO?MeY8{5b$OhlkBGM3Rbt^StXepF+;L5P%daV?GZ1# z%K%*uKV0$jYbn+Qvq)1DHXH@58LSB8he{?%ZbmeU>S{g+Z|u)*uvIONL{{o$WO-JT zpMqTlG+AN@B-78cj;U41MRjXdvv@81iPk>5u8;V#l;CwGu6Wt5zo^RwK>^i6Rf!BLDfEHE8F@4<#%++P>>btsb?fjPeEAH9+Rs`HH&0RI~^u% zcR#HM2OqAzVE*t7&UufQ4+H7hRK)OW&Wl&k`k&;=ZW@`!aImcdetSf(!{eM~Ob|Yp zai5I^qxm&>yYvoPHl;PdKYp^(EhBSON{g?oY8Ec*>dqxzDwF;I22Oyk>Ij*p)j#Z8 zd==v@^XXsN$cpG_hBT$lE0O3~L0l}!5lN@0#e|1=S)ds0(=X&44Dr#bPVB$P)#-nm zPt|h7Gi0i^OBhl?QwDc~dDT!jrpAz%f%(rq`ttRLU^IJj-(xhAbkZ{SLnaFiyYYJU z>XpXE-jX(04fV1h3wBcTCIkx2g)&O-9BXC0qb{w}9dyjLcXN57QCt4d%=HHw^qY)?g zv#aIv_$(WW0n)rgs8q>@rh?X)0&RU0#iq4M~5tbi^=QljE8PGCY zqBmoKj#Aq235r}c*ZAh5uety&C+a7UF++4ulDnKd8Ni{>sZ>|^eaRi}HPZubsub2b zusp)FU4gy^RoY`BV7z(vS{glbnoHXJmhJtEMm8Kng)GA4+(^TH24(}--ec#TJm zrqBa{i9(v(ikiFyEorKlv-v-93Xzub+A)rwzxn*Xlsf?a=ae&<<3gH0!hLp*_R8k6 zmx1J|`Ea&(u-k5LKHJFN6(WqKcuyic1NfT{Bi62YkR}i9@V64wXjI5Bqni5gJtB09N$Pg5lQ#l_!*eIPDJx8aN-JW!5yu+6-DS%f=qg=oxCGw@1K}NGU8MbcMVvYLx&f)J#dIzyaltyI; zN+wQx(P?H816g!Ze5lb(-TRq6E`Q3^qVsyUu=-@8$_>HjHt!(6_EC;J?XWy%A9>m|zvA^TW{0SoQo1s9Tzs4YFJaZ(;$AVc6SvTy-5HD^FkD&=M;W(ZTOAe@W4DgYfJ{Q(}C)s1b znTRq@l|@)#8|NV*oQ<2k)2NvupBc8|<&Ep$0GR!wyw@xH0pW-xD= zOrJ5d37`QMRO2#*TQ9BH5tMfQ3P_-+X!nV6h)gQF+_*-TC0i?x?{vDzs}Ac*O)>r3 zkmMhxpkTlD(+y#Nq)|iThHpj(Eq!7NX@^XGoLqC#k0vTYmMm|q+bbiV$(dt*cy8^1 zh}?$_8tEWpA)XwlDLd>f=mct@I4cCQot>m83CkN(6mN^>opK#s^`RQW#5PP6gEfgx zi{oLUSOk#CztPF=5Oq9D)^C0tnL{Vw)+<}AMbVu6Ah!m#9< zxulFqNw73yq<02@$pJU z!NgNI>eNupaW8_XIz2#pjl6gP>sUD&1a?S>i?Swnf7?90^_DZ7KnY9xk7C$6N~;Q} z%E1bM6DQ|uJ|SYY(VG=)C5DNg)O;}@4HAuCS{RPm__oV-k#)2bypMrYg*7JpHQ(@e z%_3h_is_oVV`lC|bo(;XRpG+pzZ$l$eby~{NUjv|Jgraph_G{O`kAUyDgZQ!zAu~? z>gm*m8#KEyl}gb2{aSIb?{CV0 z#S&pze48FRO<*fbJ8BIWAr7|2p1{ZvR5ipW#Sc}JldsA?=RgbTt`BkTpZ)TNkh49Y zLLSLfpqOtoaF#yDwUR_%5thk&+s#bQQ#+XHO?hI5g%o;Nb_DINX>MN zG%1J~^PHwNDNNy$cB8)yk?vw!i=jbYCXsP(z#K^i%1TL2&{jN`FPQ7zI4Z^wscZ@B z7Ic(<+l^#B*!=m9Qj$fNhd8#*goE{(1fZ_0ZQtSTZOC2Yh`mG}S~G!n$;4S)$3;{j zxXQM3*#*ERK?eXLxnCv?Va8$7s%Kl5SbkWDCaj18Q0E+{FfB1#&2~g$Gm~Tk@GqGb zd-$N4@8WK#DMb`}*A%uC$f4lFjzV^4k4P<KM8g*n>yHka+sFrFk2&n(sIGWgLr_$ntc;(lz^oq#IIXoxEXOq*9Q$E zl73kucD2!I#eP|BrdKSV+AaE&?|E(aFLxisss)s}R_CkYXM5lboz8;al;3DY9IQm5 z+WeR{zKy6ZaatG_7o(f}lu`_hmF&Wxva-s$RC_#n6w-MKF2`7)*HHc*5vRM3()ttbkI1gCI!E!=}k6n81yrEm}K?ry;$1Pz`9 zO+rZi=8W?{^tcbVZ;$SCyWjR6MSaY4ts|Aip`jjOqtMKf zp*eMgfl9dpzS8SGA4-YTD1~pbwHY}!%ww15H4eHEG(^L@kNIoKvn&CX^~G3Gi{%#G zik<>}kaq}3r`{^@>etTk`udz9Q`hW~=_yY)%k~yFPwR$}$4_3%KvZ5Cqamf$o;0A) zKY1WSC>)lb_ikwcE85n*{7K3P*yiL)hf$H2G7XRcePyQQ(aIwm-jQP_1hevX9Td zKXD_sg;z4L_J!_(RrZ%X|0mVg3Q2BG{oQ_k{nSbQQ=03X)oTy)o?VlW_Oh36GL{>n zX+f+^d29C0PZ2+HC4Pe1AaYj(#-1E@JPB@~gmpBp7zO1+jh|iTp@E68bM8k_FbM`w zkTN(dJXN7rZfJRLa~MFM-MA!Zq&607N&i*t%$~huB51|*Vm|PgAtdd~wCt`q58)*R z(x9FpS)q8^mrc!weCijE5I=${2?TiQOpoHGtE!BkOOzCkZ!p($rC|s;vg$X=#w%?IlJy+0 z#Qd*XnEsz_f&ZoV{{#if5NG{!E!*|Ay8lRM?4VsK(|YPD49`4SA9{Lzl7pO7+Hw?d zAz695+@u??jHwm%L%f|L5>Vgi9}EO!FqFXbtsUSTH-*XE(kzV*{)pXhh3HtQ_jgUW zbMzaV2&tXsPcHB6@ z^&9I@Fpv7Q&XgX z9L@#6GN8lrjMvUa>Ua85qq~sBi_s%>639Wsm=*kTgRa1kFW7V#gYJ*}o0*&u8tF2j z1g@`|s!qo)UVM3-9mRjFBJSFvE+D|u2Gwv;ZAJ&p)w)P#rcW7|@x0?4R>CICcjvf~ z+x<~&k)S#+l(4AUs-j~K-Z3rG4u58>P)VSx zh(mVmvp70}^`ptnrR(|%A;32@?ni`D4Zv`I)ygzO-cDA?5#PqCVu>!(o~^Q;}# zD&??Z_m)b_@3hXx^fozRG+1a)-d+>*sBlgVntd4?5^Vi}Xv7DM?jcfeY$9xYMtH)T zte95R>Ki`o;0rbR7=6p6j_BmP604W)n$?#qb#Tw|C`lJNDdCaIU(5VQqD0H)#lF5f z1fg}8(ER)|`~>JUN_XtYuGKCq9eWapZ!vpNX1nyFYHxBvuzXb*d#Rx0Yaf0i>2>n8 zR2LoSI*h$`V@2Jv%Z~CPOP8zDt!ty2telU5-`VsBiWqNlm4rCeaJ>NAQq|wE<&QA< zoS3iQo;?j1U2tBGq1|>%JQX#c?yo7#_soiE1k-@bxYH_+kz6rnFmpS zEV5~T`8IRY=NmOSxnaNlv59$5){B?=JQ?X9Sh-93oDKQkzvD$=tYE23{us9bcQ_!<*w2--8;DqP0hE}{hx-2{{#gbUiU?{ zm$nOIe6+Lnr|tB9Wd?Qj2L}tVO1Acv2}YYCkVN~65`OceGq zhcQ127dyvW*wp%3c|?fiJV_Fatdpz(++fuylPhBhun7nY;SvxQjWv<>LFGQ#RsjTI#sH*FS9n9?fhTw0C2d=DA^ZI5qg7@ z;y=_;q47yVoXNGkZvI*9-W*i|U=3jr80WFL%=a!pOxBNNHmFSE{3#})vG!;owIwma zEk7drHK*dT5ULqTtq?)LLPJ4P*`1Jol+QX+y2hhrpCa;I07lbucH>OBK(YdA8%qA?w*iI%mAtP&JTmidvJI_#!u`7WCs%KUzyW1;Er!C4%(;V-XV77e^f<@aYb!8fmYAa z0zVdMkf|PY&-CW(AN<3Krvnmx4pvSuj2`-Tt|p$_BJ2s}O{`bBETe8qeVFfRm_t0_ z{+IDNt1u5H(@cmEPl14Ts5Cv#+UCyQ^4An4g+M%{hR;!&S%wcO>s?J&46IW7Mwx|rtd8ILy8Qd@B{Ni1x_uU$HvN2RzuGA%`w6Rm>fOC- z#x4Dpr8no~)<7H;yI=eeRUj=U*A!~f@n+f;(6mu%cTjR@^KnE4vK!nrn_Us?3#K4% zltZ;{(yDQ%ArqI~0v&(5v{k-(bLShtCt!ER@$)jRLV&~`zd|*?_|uD^3D%q@--8p- z3UYPiX2ObVp>%)eU{2lqcR$W}oyIlxl&W<8KhJQQjSi*Ssd}IF^5RFj9pmO&uxiO3 zT0uia69{IYSk!!iI^L-AXBgOLu{qJ)OzTUXSF(f2d-tO_TOQMX3RO+#e@OG0@GcR{ zCK5D^aDF1y<2m?sp|sVpScnMA8TXFIV$xQ>jesXICvMu+Rc_v zCp0zNzCEK}#p{Dul`%v6#kvm5nQz9*^kx`0gIauZC7#w^UWt?>U{q`1#ZV$gwSmU9 z1M<;$WPx%@f5YO3hTUMpDl$W0Sv#g8rX$H+(ob|lzqUdW%N@e4Bjx4y)XP3z;!U(_ zpvpHxWX5Ku+qv*p@iPI#plMPHyzmg~2V*qX%^`y|s8zyHccZg*c>Ci(1{R|Ccof|0nMJ|M2L) zOo7B{VLHfWcgY>!-T5Ncny^f{4skJD0dqR7?I}XTm64GN=Hpm}&8d4D59Q90K>Tro z0Z+!jCzHG?1o?%;8CJgvcL(A+k=s?Ckb)PslI4r6FAN)BkTs}MWHgIXmc(iZbKEQV z`jSzO+lFoH!glHJqDRTBI%EmHlIT^Sxz6T2=(G|2je0^b6k@pNJs)i?W_ z*S>0GWAAI`$a;uH3P0;uSOjMD6Onb?1LoN(ALgtxe(SO%^O*7BDF>3|bq+lCwoNN1 zNV{1EPJ;UeZ^qp?IPiw#>lP)E+U{RX)Xp+4NMt@QKHQ?PSWX4!7%VnAzHaf6r&uFm z51o5hHF0JX0Ln$w=FkB{CKBcxNR*&9n$9$s#I46efmWRb%_Jn+{8zjq%ey4@1r9Kl zho_rD^kr6s0v8e3skN=g(nq3Pv(K<<2U;AJ8xMEv-v2u=TiTT$H2Ddc@kXnXo0mRR zkEg=7tLX^fSbUW3=Qvfk9;<39!JW5#TNBtA|5hbZ@({s|)7b^f}AsdZV9NW5z~NV+!@;)5?U>)C;D%n$F~7xh2{PN9~kj>ZKmO@K$gJha)OTEFCrG z*-^fgw;boLII+WcG*hd@Lr_f!6o_SwFz&RAj~w%#@~5vFuc8vlnu!gn9arYxgN|Fj z>?UZNG;j|{{3Y?3k++3w2a&E@uUUd(6BXTqmTNp*&!fzO)lKUHSWP*GRzBauxO z_p-1)y`EZ(LR*7N{AaAEohtk?rp$9J)i>Tf@^eM~?P+=+M~;Q-%;wtr4n!dMqe8Yi zRqFmzplh9f0Xmnu=e*+ZKVl=8NN3GI)F3X;6MGqSK!poB*|1%?TF9rF`D!r3IJXhH zdSLa^gzQU%BB2Yhuqo}8LaK|dGEX{*2|w9s*$|2EvqP>~8_YP?oHD~RtM zx6hgLUb{#7kh6Q?xs|xQ6TsRIg zEcV;;;VnnRrcKS_L1D;dO;%S0^b>>BZ|gTZR2%=atB}OKcq!EE<)iU+yNSO8RY?++ zD%R@78`PiA92Rjyp@=bvXH=+_%DC(0GOCgElGXNE@!h*_nl0#v=Zh5yuXb9qRkJqh z)4S^xDwJURsu!2`CEiMN7IQ{9otO!AhS9Z1jHvOaKVSi?yU`Q4CNwr$F$4Z;yGGpn z(b(H(`{U}X)}+GUW*J?{qypgg_hAtMH~^0f<~M{gKf^`K(8JAPVeIOJ#!{*-trfB4 z-=z0LO4ApuRDG2NyqzRRYH6iS4TTl$=s;$bS^PW%v9EkD+-Ugle@K;^mEuiJU`g(N z7ZOO?H;cv!V7&MBd7bz`ZOClk&QLaMZFmt?p)@NjR-W9XnV^Vg)Gjz zznw06@j2j3k0Vu_@Fp^%WNxKKWQ(xI1?y7emV|u0IP+>5X5jv(ZmIF}MMqMd-Nk4| z-IwK@u88R^H%mJFWP+tKOPXOqF>f{_WmQV;E_ZKRH${jBL$#7< zee&$gllFse!%RaceY5m;>;qWju06p$k#mBZkNNoTenzx>Sn~FMac~8=t;>rt31);B zknW%b6A>5c=(P!9TQ|uYjS=(8KW+0B2XsY#d$~z7ZbzkCN~crfe$0bkF7)Nx@ao`R zr*6=rv+J0i)o3<QsV#l zr8Nlt{qZ;(#<`cOdxd0%Y-ARDe@;kC)Hs54wr5ys0~7KGk!awYL3p z$#2={%2VT+nJF2u>AblQ5h1@Kr0cYNg_24Baq8R%*$F=S|Bqw*TRr$V>YuB>Gu;3_ zJQ0PKXLWV*b$jQSTQH}mKI3=wA+b%d9EB{VMA`;`Hf7*&24y0e2#p)Q1`AeGEoneJ z^N5YYs}qos;-or#1}<6K$CXq2wichY zYY81U-zXnXnPRl|MFhW8u~=b;6u1%n95B=jRhY9Z{^MXNS+AzS*~NOioZYQVK88a4 zPORmh3d`sNr9P@zxx6W;N04tdm+_F5`7?`;zBblR!iwn&ShU@togQ=GZuIMXb~F~S z+!Ofgx;KO+J6Fg9>;Cjn76GsnG~Y_7ieQLILkD9SVzF>KVBoq9W>Ih%7eu<-OhATcI3wnFGZo@`NG)bZh`sr#|fvUfhrvM_1VxA4tWNz;i8V<#ukq_ z-`-I(HlOoWm%}K3tYN{Y>#aY+ZJAoiHTTFFj6wWk<#8U(90{e(F9e1$Ei!*w40SUT zGiMVI-XcyBE86u6<#F*P;;$*)cts=o|DdA*fGH{9bSyRbZ?bwEXpe{?bXp~na7QLN z6#&+lL?j}#uBvpvDZe8%oJ$FHUW~D>s`xN#a!rmV4?UWz$zD0gBR$6tUCx0}>Hv1z zS&iY`Chmcs7$!*LuRK784o9ZZ3Bof+X@Wf+t*Q6+ygAW#_GfLRyIT4ce0eb}G0+7?6n)zERYlk8hfb->+agwY1YAZuuEnPjH(u%}YwtHR$ZYjiquCb2JYr+Lj`$-5 z1**vn{q|KU(u(|%B$zA8suqM6fgNg>vWMsN*2$YIoRzw0F*^b)CwORFS4q2cn-0_x ztWKcciFbj0d8=07&S-1b%9{?YGR{a;uJT$l#d9vM;K)mk@OejM z+-H>X8Do=?-bD+}z2Ep9Dr-W7o$kAJ+_<414?Mg6`D+?iWo$QgTKAY=)6G40>?U6x zW-q%MEng%Ndu%NH>MMawVqgPvPiVE0OwO|e3NpC&@wh)qSf87MM^c=x%9(oN zD&%bfLm^ysTZFlY^aUjjS3pq4QK~9Eehq=#Z=JVm+=nOjZuTYPoEk~267g5nDr!6h z2=aH~|NB|O6Pft8dcbsC5PC9Bk6zLi+Fz8=i$CSNBTh@gTAX_;8Xqz6nE?23yc2Xl zlw&sfq&NxILKa|JH9j1CKL{)hnV}(|MuT9A(VN7K+E33R+_~4W8Fu-%J?V- zdk6m@)HbFx2%i`cYD#-kW?Lii4nMtDDkxpq4coC|Nh4%QszcYr^CbDAI>dr>&60R; z$twnV==<7Wv1bInTPyX*V=`>C;oTFHZ!>*5kx=~*M#N%CMa3YMR{36WBz^n(+HjFJ zjVZpm*Bhmr4=t(}BD|=)9k*Gh?lg$!4-Y zZ4(|}_X*7b?3w79m(1ca^K21I<41g$@-#_DQmBEXTHdrNBh=NjnszTNRGq>@o#T3| zkV!@VjFRG$cXrn1tDm#7J@%Ty3r)dUfz>Lu*Sac@d!f)aLWOK&P55;=dFZq`3^b{g zLM`q2NLPG}vzeAud;0E_ZAMRBIO25%h~CdTI`h zmd^rtiE(XJS{2x$kCfX)IC8AG+)(c+^j8QEjk!BFZJ+k&R!1DPsR>v(h`7@vXVm{K zFHqDx_V(^^Qs=wzKfI3r;LuX1tOpR|%XJ<8u^N38m{@<@hCSL=Mq8!3^H)_`f}(+R zp^)>libJlL1_;_m*wBRu1%>O{nZYR(xUt44Th@T|rq(k69Lga?>R5Cb^{^9w{T0kY zEj#+7OdmiMg|-@|8X=}EQz@#Q0^p`;Gl;(zn-)M(Xcs}C%OT9CUlcbJV)EnQVGPOY zB`-Ya+N2W;c?neuX?v)U z;dHBXAX)J3~AaCoc3QI8=r>9VKtDY(|>djlv zBU$^YI(Z532lFl4#pIId6lR)w6H-5NNNsn}q{sis<&pn=Vev0hNOabJt*$9H?N0mN z{vwDzs6^+oH|bDRv_i0_*9!_243_0F)gVL5iJV~}jf@58>H_5aAXZxdv3x<5ty|l%PI48WV@C*1_OI*{wW7SbbqsNM$=Wz)>NZ04U-A{rB`* zq@iUUmx^T7tfCvG>d0|FRg-&%8BTDProJv>B5BL>^gPd47++3F5~e`E1O+eLf-$Gq zxA5pWV|kLI(v3>>L+s?*IhYmu(65ZV-B_e}hqy^VQz@2qaBYW+Z4!7tYpR2;f(XKh z$^e6hWdB=muvcZ*C7>0?)_@zVN+Ywa!UQDIR}7WMePNB_M0WM7k%DuiXq<5|AWrhg zN3C_@7_?DeS8uBA%B))V< zdyWnhkCFXXiBe*OBI4ZY;hAQG<-3QX{9WJth*L_XC0ky!o}<#;{A3 zLq;VBj)bVu`YX_hYSggeZBOJAqi})Z3|xyFJgB`t#cE zB{mKKA!^UsM>SZR?<}j{7+{C7?96+6Y=^3I$CAZg$R`E2(j~6}%NCQZ)~R8>C}UkH zN6vzW<8N*Y%dB_B`LvGAUo{9OZtjeow9~7Wk+T!3aA%4k(8vdSY4SO)$fh!K%N^*r zCMTk^hE-^c-_K#_vK~|CuxEGX?xx&!L!uc^KPLYnnP~Wp$ekXTokx_Lv>9QZqSLG5 z^OiWi!lJI%N4w&Z!#i@g4lxaVkeT(VKHhx!_U3OpUVzgfu~HFvm2*>N#8}u_W~qmGIGjxv?D#RWS34rnm5s6YB4l zR`!>q9Vd^4n}<_C!z;yE1*Ht%NHr`)eLG1aHrR7VlO0@d^4A)2rVw5$D5wNm@%S;PmY=Ph68RcIx2l%ee2%leeDeTnCT4ieTIBH z|4_1U?9MOvMm>evNBZtWp6WPy3@n~Ko%Tl&6B_gvq_wqb1=9nDf{3=L-s>OqV;_aPn?ra|7Ze`~Lt&>>&8Ar5dGP zoVy?Q)ik$ds!GrRGFdU=`Z~-)s5tJ{WOZ3UP+}FfeeM1N#!eY+=^vPJKGwoYi4qg!6KfgF;-Q$o`#p|E8bU!$y}HdM z0ge6}Ld1<$>f?rK98pQmDsqG>XLQTY5<(~jV4btzYQiQPak!y8M1iW%ge9q1vL6bUh*4J0VB@5}GY38H}Hs&F(iWtw8z293Ac0(F$ z=RD~Y^f9Yx4-d}||F5x4{tF7ePRp;g?2MQB@TJ`^S{ORZ6fb)-_d)u2}m@G`m z`bKo_WCXs7l}@M;h&?_wl%yDdhf$&?6UTW=&nKxAf*B*F_{;N2UZ|#i(3(|6CiuNL zv4)GmM3r)O;&%;^Fn9QfYO`<|d4ya zp4~%^W!0HX^MM-MrtS~9U2O^MHIerFUF`&uyD>10yxOs?Pjhu1(+eABUk_%)0ReCI zdO;OxilpvGl`5~2+X}pD)uefn@>bTIX`IepTlCdIO^mj+mbLKi4n{aOe>Op6I6~E& zM)V><5F-o{5_(ujUM#-ouqZbpLW&A6J^{o`G#JDNd2gj8`cN1S!IHTSKXiPKY4E!uxl?VeQ^W}D?5>* z0nzbAQr$TbnARWmWW&VsDe!Pp`4=OJsL>k0MVr$z)=DP;T&5P|qc;Rp-JFSWU+K~& z5AmOaDT~}gu_E=3w!mjUewr_zAv& zn2T2P3jH4w3WbPH1Ix|q7rBKj%Satm(ew1vimC@1y%I~+D$5+qR+pd*mTEh7mKfga z80tS`6`xJ)dkjp_(Kh5V5UT5tTk z8%W^AqO8HZe|m6cA!pj#nlb9;XDM;W_uPU3;AZFP#GC7mQ58-cGVrt-%#VJ6>?!+v zP<`D~30^)sFd4By6HJ(l6&Ab$**md|<|V-q`BlIiE}_Ti6N8E6Iu1Z?Dll!@b{jC` z-U`#VnbX%lZQZ%9aLcg`}91{&N}X z*XROyzBi?%^&h+-XFry;BwSK^xs16Skq7T*ncLDP6(3NpezqU@{;vRre?cM4>Emk? z#Lq9l$@P~&OH=oJwb|3CgN_y_;r1pmatiGb9e6A_9jFFL9vk_|zwRwq>tN*Ur%97U zJMbDk7N0y)CKwRsyRcEmQ%dd8AoSU}v8FZTaJDV<0ZxNDzWU@Jaqe=WrTp24Yk;Tg33sUghcCNcDyoPF2 z0Q{JLe=?&5eamHLywNOed){NJ;OSqPwRDH$6xCo4Hx}pP(ZYR*@$#?wGebXdeY58K z=auOZ$&8f;ws7cHBP^pPStp}B8)xLw8a)_|{k;-Ffe?tySxZPq$OIFTgKRJfD-I5h zj!od*bHmMxX2JrcsURO>vApb+jOaWPV^}d}hZ~03a(pZRok9D8%9~GLZuoFA-xCun zvw4}gh2~6S$joY24vl(ux~eG@5yXsXpfcv@rTA#X24PC^f1xhPr||WQ8A9d}aQNw1 zD*w?GWp?V4!d9_Pe*8pl|h;x8Z4|}S%y0&bM5J2oTcU!9E4_V zAN898@xvV@s+RW{CCG-unOC|t?*OVw&Vn ze}x!bZaYB|3$&3)Y(Bj!#J zc%>~)nBtvhWI74BrA|;3gou>1FqdEWJ5K%Nj@ec?9F1(l8~K(@FuB;Y=esjCfgOc8 zx$ujQm>3gvt@HgEGv||Yx&fV;Bm_$5i3xrVLR-WVw#`~1W!*Ae74!>A&eK$nMYtU3{7IpRf zeA;qVJMJr&-F~)!jQjeMT|#3GDrmId)pbP@4>V|SHSqen`RX8=O4p82|T-Dr?AA`a%E`&HO=vcVzt%PUlIn__B)Oop`g)Wk?sEB+D`}Z#?qv;!yN6 z2pc64#jDVbY)e)#;^hx0-&---cs;y|X?jKixu77>cpUuBq2YXCKt)W{*oth9SS%w3 zU$ixP>gSh6%(l%Dc@tM(58FA)sMd~f->Pw<`r4k>tj(<|PZv8+JX$~&eGA@gF$9HEFU!g$%yMJ0luU1_(3m5YTVM(o1iN0k$IRO2 z#Dh(`@=D##*RM@5g zh9ds^o&iXoKJYZTjyDWp8JPYq>ywhFThLKC6Lp^npWm~7 zoTle*(Mow{V=Zk~;l-un+q(Yt%d@y|ppPNo?Sjv8|MmTZ|7bY=Cn(@3J;@ZZZGWEe z(OUSZzh~geHE693<|%IG{@WgmrNoY>p`;4VLdaxM%OHZ2qZO?8trx9_txIt6G??Fr z1rAIy+rzDyoI}yE@z90ut@D(g!VO3Eu!?Qsi(*Ke#&Z9P@iUr)x7prgKGNrPkwTzYtHg=>l~>Ri>h{7QyCB<=vv*V^ z(UH^EjgR=zI9DS+6umc@D!3Uv;lBH@^TeQOejnra=Kr{w>rYQtk*&SDi=kBEX4l~j zMnz(Np~j>R#bOgTLkvsZ}Bez1%u{Ocznxsb8K z6a@TdRJ8T)Y}B-LUF%;-s4+JIIVC+FPIgPoqTk_S#d;-Hv82w~#_w~lJ(-Hx)@H#O zTZ8g&IeC<1@|f!1ejmy_=HLsLTIeGeFBJ`Ub`Rlm%9uC3x{`G9^GRl_g=8PgWh{_q zaZ~=t=mN)J!5Tc(vPe+$EhNK*@NefA$Q67LqL!2RKqO?QG)J0yy z__%F~nQA9ht_opB^`-UFHt?xp9y#o?gVLL!CFCpE9_^~Qzc|VEA%bmUoX5FCVr{SD zN{E&IeN*$?W8eG~ekf*Q*B_=S@Vx!!&$yq`E!o^?F!3O6j z&oh3wvDSfuy>3?39@_tbca^sD-Dq6XFZ-$woi42p4I)%8T~91HUlkOdT*tgXMzb8% zB)tW{0#qq7e#(*5Upjegx~$Xv*63oP_`{LbxznGjZmVeL%caFmwf|_4a!n_O94W`_ z=Ft}x7|C~A_&x?17{W{3GX{}iaS}(f)u)BZD1fqpamCzs{RoP|rP)DTXS&K1CW$ly zhng?A7fuDgcoy0T(CR1G4Soj#zb@`r3Gh|Dck#FRl>Hm@Z0@o%wkbrO&_!cQkG%E# zvjG&T=)9jWNaz;rRuYY|+l6X#j?e*-mt=M!cT{m56#fN`%@61FiSPeX` zBWXUxUzir9yBMf+za2_>?{|80QT#}%A$|?q-)SkyO!$6t-{pqA%HQ zcrW@zusc8Q$C*L@Q9xD659r~pw>Xbkd`45nP4^EhLuwdR%d}U4?Uh-*Q8agKSqpfnvV*6 z=e&8Znl@kdzhmb3WYTx60-PH`fNEg+pz5@&sp_>5TeB4J0vGMuX>O%DH8w52#}k*; zR&T2t0~Ruk!*UaXf{c|z-IW*IU-5Ih)l?FugY;JGR36$fHFj#cn;xrO`uv`T|0iq% z=ZS1!=T43d<9G<}U?@p&kqkK{k3Qx$wKmV8Py@4M+8u<&<`63u*uXh8N>QDR23&qd zjq;0HOhzz?b$?U|px{NXRI)2d&V2jVR3#2e;d5I$DA>dd)4QBWWau}?eFiGYvYMWWwWJ2jxy)ath&X(MA_mB3#tA;n=b@5 zx9)L7#d*-j;>4#l#Ma&3FyoW>EL09l6tyYUnna=LW0)DNV&J)cisIy#Ih4oM z$BMNTyz`UVL-pKAc36ICbl@#(S(Ocs7}ODt$EFuq^$;p0|E0G3y_+JIK&{dyRv6z- z)4b+4rd9czGT}!>^DZYJKWiGkMDM@4nQH|1tR#nZ8L}Qy5;xnSMbQ{+;ym#hgWfr< z-KG|sTLGsfpGySPzukM8|Sjtut}(5{`~<5TR(h2x@%{=yqr}FZCR0rtR$&KoLjudGLW%n)q$b#x zy)NzDEX8`W><;<{ErV2V-9J^F#_%3rnpxqv0J`OA9icce@N0%>%kq#My?-`)qbjPJ z#|oBpKG*T4E%bVAyB+)^#8;I*oo4t+rTwcA@tKRXpqW`|x2S(6w^{m!z0@CRHZ9G* z+H@b-6XsTqq~S*}bmr90-~Nic_bTwXAnHDvX{>6B%mzp#x9dLtGc)?d(YD>eEB)=X zVVU7cW0{n%8ZDu&On8pn3vjjJe^f00!4!5C(9m!+oj$I)qT%k(($+nd-1G^B2A4-k z2gnxZyY^;sd}^O;3nXE z%=eyrlzc}sRV}u(<>k_jYM)697U)l{bD)p1t`7LgG`Yun1nd%-L&dlr6V1=-SuNXg zK5WoRvc`&4&24+g|Ioj*)svsMKZ8pWK;(M`-kB4;AC)uxP%*4tkz-O76YPQO$n13DDX26P|4XV0Z*02TWbjj~s&Jnp(BT5EYV zOv+PK$}-!9GCBG#s%N?iymx#v&ksC$`L;e9>-Rx-l3I$16Tq5*mHZRbbcy}xSi_*bT8A029r zz4dyYLfUGN?ws9@Uw<Z%pl0; zrn!jS6E3IN><-QwrjHs+;H**xavd(<0OTUeVZnczuDHg4 z@EPrvH{RzT`kkcoRU1L7G^4%E-%~$JA&lc6O1U;^l`&l}Mh#e9r2h+-Km6NLxN%r= z&9c4zNJyLSemYL;S7K1tn^jWzWSpK6d_*HDk`XjYoS z(#AWGGxedUUwo@OcJ{w2DG>-FL6#qq9zln*9||o3&DXVmjgyEcdPSv+F}+>1z;z4e z;I(V|qiW?ht9D_F$DvCDS`-goUQB-o!YeuYeh&QYdf-|=JNJW{DeIXt7yaVoAPo)+ zrHkw+0vlI#Vkk5coB~vUB8PDa1tE4^Y%HFs7%~|MG~WapEv{~_LLFGGD5>)Tz}@7S zY`sXc&cq((BA{GsQ;$eeqOQ)7VVL|eU(Ej~+M|cYjgZRC)|$%UY-zZXW0AV>@G62o z_^`=rFfvk7qc{nm+fukAp~8Vpm{&A8t8j9YOk#2LJ();P6PU+I`OS0+wQ9MzDs=G} z;^k1KQt7I%xYN`KuNj4tHj~FQ$wja)<5ZCIYJfiQzx{_o{mY!ob7oaWzS^>;$r&=^ zDfyXTz!?6(a5#YbVu&P!9b1eX!%=m)7dtKiP|U~M(lIZo8~gi+&wwOKMv~Plr zk_k(*YoD zB1`m^S>unrZ4{ftqZQyF>U;XIv7~PFl?#njB4~59)crFJomzT(s%~y_F0nz{U;e4s zrJkn43&bLJ+Zm*r8$R`oEeCDgLjH`+Y~#Vd*BGb^-I2j)i^ z31~f(9+`K|Lp#e8jicw5MI;z@Wh75zY<$WhUC`rdrcT`Rr#EO!5IW)o`xvWKc{)Qv zs&hNuPrG^2f->A6x-EP2f@c2WgyqfPL-=w-l4S4or> zmLF^35*%;hB=dPlF|%k>=YiPBJ3w-vXm-xQw!vXOT=?=0D=`@bG{#Mr2-Jw}zz;?_ zrp)ZYH_xKhL}QxyPbh;*V$j>Mul@)OIVa(0-qRp15(2u829V~j4rDkEd#-g?@(l|e ztb@mjf(W6AOsKUc!OxcGycm>nE4FVHHra7CNo`lvfdigGEb*^(wHkvb!6ly zMM)bb)Z=mmCp5^S2bg&(pgVQ9T) z5;4JEOcs_LT%_Vbg|H(K`^lFUXTgbXym6gVK<8MkqZy~SfF!L>X z4TjMyBR8K&J(s>H3G@+X30o(l1Ftt~&iwuuNcholUX!tJ0i~U!xrhU(Np;b8j8g z_TRP(21p=4fZ*=#!QI^h1eX%rix+8WaDqF*-KBVe(*AIVqQy#!JCs6cOLf`zJUjF5 zoU=Q7X3lfo{WG6`Gv8~j`@S#Xsj+lee44lyG=sEJTX7j)4DeWa=9IzglsRFK5~xdB zPkz4gKYhgb4^Y6x(|2CjPd9)MKa@VWpc|NTi)0OVGe@Mw&hF|uII&@g53nMW@;Kqb zxDZ0;yogf!K30(p!b+)jR3a?pzY@kFI@V>uILb>5L08?xJcN^AIh zVymO970J>MBcpxf=+Pxlwa&s?>>kI52=JtIVp1z_`7gFTR_)kawuNLb8E4J33hPls zVRP?q{AwbQu0X49TC?qKHZ&oV2Z$zDmNjflhN3N=W_C0()b4QdV+DjZas*n3%!o-k zB8zJTOYjf|6jRH8+O&~LuI{ax5490$>(INwO28VVn5F{hNUbVNmPouMF5DNZ7dgG` zF9QY64|W^K+biNDdBLt4LTQUIS$;=zC=`F<${|eorH0?J>o&o31NdCz`)bCBI?LpjS#cO;RK9{U;;kb$ zeOIc&Ei1>WdOg})y}OAL{^N+c z&k$X|8Aaobl1XzLA16$e`sh}T|Muj(<~O1gAu$(1)VGp?G z8B|(WK>Fd}8t5)nVaE)j*w4^KnLvkwICIhfX^s?^nli9IXzn#Zj0%z7L2byuY* zp=TODTd;MB<#bK}>s3xq(uQ2jWKPPvo>=FM0KW`Qf_ZdxxwBt4{7ZdTZ}m@Z*9mhY z$1jTaUwbxAegv!WDy9stkDkyU+A}UkAQn^i@{zUUxgN&D zo|!?;Y3v1gQ|ox~Sj&?Cai@aZm6&x{q)EzGw{2(8~JXb7=S<5r%(_ z4;c3quTaPD8*_AJJ{Jx2W>p3)yUFaCUG8@i9o0C4dnV#DI`h>0^5tq$*xH?ZG~$c! zdd!)2qNNwlkVaxcUOS{1NK_uLnRY8}oEw2_^f6c^8$JKJr4YBUg~Q*|aQaRSc~H>S zRp0RfpmCV(KROEZ`T99)=KbV~CNpttTfHv-aIdZOtAwk3eS+kfnqut)ZthQgyjkt( zZT;gCxJgy;6uWW&_hxSNM8j559yTb4P2;!2&9LC=8FuyYWc{g&-g&0w(?zqFU1DjIHUw7AnfH$r}oa zq_GaajKlj+YVZQ5`-QB9;&}G#?8D~!%=?a;#XUNHa`PFOc%fL$;s`P8=nA3!GnsK# z0=Bq!M%2X&9ZQ>5cio;Q!cO&1AbR$S|Hvk^d??!33VQlGq^odK$z5=;!MsqXPA2xB zvOSeIxmaot1bp}dgcdMDij_DF*mXg8Xno$zL=+m)<7!Uqio5U&PG@;&%2CTB2 z@1qc(ZTsWz(c0R4T_N1%O>!&(win3f#PR+`H5}?G!X^XXBkk}fzlK^U@fEOhv^s<^ zPSw@bC2*dQ7x$`$5I=Ja(I@aOV_<3xHq|4^=9DKZ?vYy1lENy)j z*PxK2J4w=_ag0xFE20z5B5|^!=Uv&fi97Jb;|a}(U3}HvA}8DBZT;2fs9)e+-?PUF z${a)*9eV0@DUuU%yX$k6+&n=7Y*e7pBPa+&7OzN6PKy^uavDDpPmGOHCh`GA0pf<) z0OM9Ej{Sp^(bxtBCA}OA+ZLIz(tjCzj8>cKr@vHUw%H#yPQGsmt8w43WJ!S;H#bO) z?VPjOrcX$dl(`RXzNQFd-~tJWE%PJ3qZc?oCVuYb&&sa|-D%XWSPX{fp=wKz27Rvp zw!aPzD$hbzHVx{>GTxe(7T?(^(X*D>Eq#URFFPdgV9q97TONw6H41e&61bu&ZGHuX>;U`}eNw`w zReD2qs-wtJz!#a%%wW!My{SRCZT;h=;ztq{%46!?!XL`>!3M!&`T4~ATVg<|{Jjaw zp9+RYwE!RVL}7z+BKmwVvuJrhyhx$}F;A9r5Wgw_>X;v` zoH?v39|W~3;5kRVrSK6>Zf$wHzm!8Dux=WbESBZ4ppV6x)k#g4dzV)o6rNsaJe*uOL~Q9 zj<|671_9Pgf<+DxKq_ut_(aH2k(O0la|{mlMrVbvouMsax@Jka@0GiGduwKW8$3H$ zX7;g4K&nnW0(NU{XU1vZn;~poJk-HxTyy0t5UvL&>?o{&dMs@QCK3mT*_oLGk z?kazlTQsU(Ps+Yd(!p=7-)i+pYKYXVKktA{>!L#_F=MZu5}e0InuIVDuQ`+^-RGxQ ziA7C4@ua=cn4n;;9>R)gJmYAZCyvQ^*Y3PggQY*{fLiR?GrYz5q<{~Q#77Zf(0$2d z=@77%K1cOgv@Y>@G}aInKD+wx;Aha1JjKSx0SnOX>@LZ zw{{hZqAW9)6B3Uk-{gF>ikq$@Dn=5v5(!;y$KF=zmt3L)maD<)58U z{^LIRb8cf>CPdc|QxnV}_$Fd+rKPO76Iv{BF&3D5Can0^F)ypYitn2t3mvtf;x}s{ zSGC~dTJDQhVWCH}qci%&@XsF49BD_r9yo+s=l1=KNMuM?$A29i_jxl`GAlukq}(X&g$kB&xO}nwU|61Tv7bqSw^-pD7F}{ zw}KvN6dTRWPY!wYXNo?K4vk4mvkm6VI^Pl+lIE+Cvbtc&K!OUUED(B=l&pA#BxTk6NWxk6_iV+|ty22OY$d0TJXn#V=pxI(oms<`22&-7_V@&{Zs2F0#8PqN#tX&VhvkpKwlYmNRM2TruULB@$-=VB!EzqXc6`!J#uEU@uq@ z85nm7mIHOsSkISao0bet_N6P?((=`PA*H%OBVY)OX;4LL60WYhq3O>J~P}yH4m~SkNS+3wh{`h^enq5M$hW| zJAr18e;hd}zy8(}Z^<;Uk}OfH@_uXAAbsjHS>ZCKzFvMe+ZNu{&RpXkocobBY-X(3 zL_Xx)I*fPJ^5v_wmbFhQ&3XUq`6OFio@@DWRpA30qNMSQ;*jM-I*AT4JZ%7Mtn!WM z^7a@PnF`kW#T#NWGwA-MtpNRzep{lscJUIf^Uz_#)g;>3U38*GmlrA3di(r`+YM+}ND?ezPRjGZ+(uZgu zJHD}#-_d>>H*#a%Hkjt^m>e8}lv$1YC7s4!@aWQd^qAm~FYVyo6+*{r9Qt!<6#PY> z+p^#+u1C5&OCq+X!B1GQv%Rgc6b9q}C=+UB=O)HYTr}XLKW^ulo=efXK~wsw%%6Rz zS=Ro`%I2sgew=YYzL=q(FK~7YM;J$;2%=-i?~OI(5de5` z&_IQUn@mKx{z^8kJs_b{^VHu*7gVC7Gg!7F)?F|86+_D0!#Me zs;dzJm)8@9&Q#A6DklkZ9sKwQMpvvt8J8(t5@3RSXrydIJJRuWsC$(_nv3JW`gti8 zoNy0P0bn$i)rj6eUx_t=&;TLnT+RWKo3ui;gJKHa;K%k&GqG^)FlWm)TlMZY@IP&ML|LZM`Tz=Xoo)^9 zIqv~rkO{wUAbw~k{%{}yWeOQ_Q10cUpp3#LMstx-x_*q;WR62diF(nn0Ligk^6dEs z89==5gLp>boi(~bm+6FbnLW6()3))E2gDpKaf%jXWNS-GQSl~8`;C)MCZ`m&tW=n> zveBJibwV4%zg@mIL#FyAXWsa?zUk0dsA-|n!beZA#VXNTWh zhQE!qv+OlktZY1foZNr1rP1+B?zzf5IZps1g5$={Ks_{tk*{hnYEZfs1dO$bt*9eT zua5`ARW$fR78SRb8Cge?$)!zp%5RR?C{>f|b8=iWJ*#1u44keo?47o9@%o(l9C!l- zJ&OT0my?HN8cU3z*o7f`_fn>Z(DWNI>#XzpCp^3L%5AtQdPfI=7!Y28q+x*{J`EEP z!$V5r$%L_G#=>^OLs#((IkNSUQL}JqWk9@L#EjYK`9QiYO~3C|y-18_cibBBqFuzz z!BmiYeE?_WI(!H^n29fnKh#%)qKR3>dsKh?rOM%tbStpT@GK> zR%zo2L))NPefc;;ne9T{qm0$ZCe5swQW(|O1a3eXj=|sPkXc)r_eG{$!)eW=Ykrly zzW4iejNM9?Ukp^X>cz%0FD5;%-n4qjAqc3bxTtlzJ*R()(-845nSZ^)96i0WOGuu< z1XXgd=;eDLXxgS#dNAP09rbQz0LK8iO4@z|V2(mYdO@kKuo@oNr^D@J4aJ)vrfL56r6 zEfVOSf#FZh9cf?Dujb}WT~sxJL04BHTQRLyhSsT;2{$nUjc3yDQ76qhs;ukg^wba= zGF#P1389<%N|O??w}VkcZ2c$`8fM}BxK(j^Q`3mNC_`Gf{tGN~=3unhOm zKFejMI^FpA6{F>eSmBC|)6mMcHwhV~KT-{yaHN+S6>z=vg-+jWRFXfe-og3}p%$;D zU1r33ExD*hf%wsmU;r-}G{snfNER;<8;5W(;1`W7FcUj=NDgKQ$1wqK(gbTAiq8(A zGa3R!U->6PZ_O}yB9qB|Y=tq*KYPdmSe+OyA0-HBP~XmwSQQlqF!GE6Rg9IFE|@7{Om}8My1_A|)|MqP z3CUwx<+9$PX%Z5=w_dPQa$ceE@W6y_LyOKjg?OzDwevm0>5zmnnAnN7wjZ-SE`O$U z+!N*`ej&`mc>x^DtJ9ZMtg|oDfEr#*9SVz8qxo#8&W_<>!RSjeRMXP-lB5yyGPCqqX-M(0f6jJlGV?6g);r}m2l!jQ z`)o4YVkcE)lFbPnjgHQqQ1Wb5qP5=dL%+X6NHuXj9nN1q#slLmi+Li^a-xtD`qR8@ zEAtkZ(aJ@RW7b?@KYO~`m`L-h|XRn ztdTtka`5596(|GKx9Wp!{1DzK^+8KcedtlQRJSW~(^p*y%%@?iM)tNO~$p9m^;O(0w;^LfL zU61#9&7xm~RF?-{BrrdOnVBp-?rQ5MT|S9;aHDRdMrtkF=)J=*HZA;5-XH!$y9CAq zxz8{6>Rm6k&?)$zK4+N9m%iFfpUDFD1;VHCr6@8C z#8R8@cul2%2hhP9$07!eVyR$7DIZy4W86&~{cIKhQ2t6NL~$}2Zjxw9cj6<iS~CzV-)G zknK#d55Xve-LVL^YpiSBUkL3;1V4SN(BaB08W0!!J7H?x#ziPTvg&0G#}M!(Z=8O^ z9e-FuRYBU&H3b}Y4TDKbz)~QvxjJleF6YE(6@JDCy{{>}mm*PlkV60Pmeg$27i^>3 zW!teVo|xMsXBxW28&VZ(>TLIYSRm+>T!Dl!IrYc#x9UtTI8tfQcA|*LW&6m zeAm9@dzw?9Rm8esD)&3*!9aU!MIjbtRWfq*@Ns+sqMc{5YYU&>>){MoC+AHR&Qd>N z(qJrGf5E(U-Vz!Hg~1j8z`Pn*U#?=w6A2Cvk#YnK=m*2_z@&K~MEYtDv&U4kO;`{H ztcI4ls3llxYmTt7MSM0@-pVwh{U>#3D?^P2wV44&qrS7?C!x# zblHi0(6EFVg2jk*ULC@7%F-rF$JbB!>Awpyv9iiPxEzenzAdq;PLmpww`Q4JVtPJ@ z|4|ClOOec~bF*#tCT?hbO-{m7vo_QAR^r)D=a0ga|MuRO|9-ddua&|F_qWTvj@Mgr zv?EUh3>izRqdR?df9=*(SeoffhuF!AQW`Sc67&9n*#lv2Rr%eybX4x_@3&l8C4Nb7fnuH_NIre zi;`2cb>zz;3a=4Id!C%q(1?nD)vJ25$V`MqOQHQKn?MGzHjPQ3pkLp6bgR`)BJ@IU z!pge4OWgBfqF0_rm6Gf^)4VWPsC3G z7snNheWZuW^#NV?DBknBf>J^i-=md9OCmIzcm!_5L?b8qJ{M5Y~|dj?K|HjnJ%R52OacoSzOP z1)RANybjcRDj=fBQD-G8OIVTSLhFKNd7(6Ay$JGCb4=V`n3a#tjG_$PF1h8G?W1VB zqig0ZcwdTUKajoP8QJxlFLl-EtXjG9u>%=!fHWDcHKH1y62=#1Raym_{NfAXb(+(Y|y1Lj`Zd7BxCKd959t#&0Z3@Jm1z&^ri6_6r zGi7Cg&PAf}l5>a?mN(>?G^EOFBW}InXSpih;d$toz5SbVCLW=-40|C-J?7OOhU^)) z3>pTKv84cw+KMx*s8`2Mm_*CRx?|YNJkbGDoGW5W>@%ZxxiTi>gJ<2Vi4j!9YP+_L zB}nw|x3tIb)s~W`ry7<8%mc%MPE34d{ttaPNXM+H!W$bJ=iWQE1A-SGo*{dZ?uM!1 zw{(u#Co{eK_xSHSe&nE=EK2+@qRv-+uD&j@o&Hx;#QX~sUO6pz^*RNN3WWPSh6uA{ zJ{J)7NFN1txd+cGRAaHQfVjvrKOm#q{C)tjRfn-Up;!y<0Efg-TQLIMD(2CBQkBJW zOBg8?(G&_7d|f-d_NXbqrSZj?i)@uVI()Lq=WZiV$0t#Di0O$Jd<>{lu-t}el{gWy zX_~4j+7Q6RHkFeCL3q4({q@_dVoL>QdV}o6o8H-+R=Yb9(4$ zeKo!HGJe%)@yiBN`!%n1!z8VLXOeM2{Jn|JEFJ8J6;9>QpsS^;qXU8Wps(@9+Pq7=Q_!u1a+Qq8Si#of7tlUPVZ0l}DODJtv!Yj$ZgUzh6$ z=W-u@7VEw&3~xW)*O&SO4^6BcC_Zo%9uI1G3Vc>^YN&OnQE&7?)^Nk$%idbv(sa5v z^7Q6pKb&U^>Qd-s7RpV`Y=iUnKaYLhBv?q=rJhw+@gMOS$FDtnL@&QwJ{Dtlh{uLuCUKGC$ObHcOBf5_B^N$- zeiwFTInkHbhWEk!lRIFBI9x8etJYobOpUCH4OORdK2ptWNz6h_RLC|++%lc5`9>*S z^-pHXbCLWe-rV?oC(-8e$3{Uphh~f8l`gn1ydx{^^phd>2~Ohb z%`LPs92~cuaoHl6d<=9IxxQ1WYUHeXLs9csYJNPRMwtEARBx=2j5Vftoa=B!$YePrlRLK_56@5>1Ur!DAW_E1_x!( zQb2&1POq9)4B4|H%P0;}+BLewH>{489H|0KX@~6sI<~R7%WPc%%!SMYg-sbi^R$W4 zNgj0`u&S}&K?~`PNo-HfZ@w8WIT8Mr5Dva}Myg+BmY0OZPp68XSV(ww+?%i$3JL!r z?)WCv+Mi$}6ms~da$5Lr+&2b~;6*j{@nDTQ;(c!|0@}hoaU%VXA5Y$e{9f@AF!+E4 zeIUxFd6CHOL61!qm+MKSvbAF`86`vmMI;Xew}xYJ4G3|-nr37D1@z9O39z9-c33D+ zHyuOH)D6xQbxvsn?Yk~=QW9Prhn!^%Hdv`&A#spMp=RC~J1r7Ppn(|wrFn?+jU9-} zlBd;ngq-N`A$coR;C1=iRXY1o{(4nqUEGDa0mbzuL&v~hp&xY{3`&%@tY@A3D>5lw zY(ZXCohcUlyt7@Hr{*mE38OgXFumL5kaiRi;?`zvyknF+Scq(N5~%>2+2j&U)q-Xi z&Rnb&HSX9aA4ekR?=zP{)`#Bc_*0RPxldt!G4%i*obs+^p8OP+6v(AmN*ZYjHc-8Z z_MjqIvpEdo=|+}-!UMRDGaSI{&B_5WG0txQ6|$JD4oF2WkYn*crN>qy>Rwk#J!1tS zmW>r|zrI0vOy1AFZs_zG(q_s%t8VrEC{!^IHsv!L%(aq4r9+>Lb7*t$Q)J;_x7GpfC^gzr$ z)Q=-&L}y!VyZP+d9t}LLPnxSQaPKfDEJSN&J*~3zGF9$p*tzrXktvmbhJVM}<12SI z+Q9K|$!GoVCx`!d`43P4%azo95RD zX7ukjf()>=oK-&uT_7&9wX~U3WADRmpJ4|y&5vG6d`R`2$ZPu={_Q>?P3ZxoVr*yT*B^)KcDaOG}LRcDW;C0H!Ha~vUxc=ckeblSFiei2)+i8 z>H6-I{u9HEa|_2=W{y$rqoM>u@SrIIgeh=-17ot;WKyU|0u2WgJL-^x4?`*XSKetb z6L!e&m9~#h!1i3O%kN9fHe#VT+%aI&vQs&C@}k4HkK(4^oE`A8Y02kTA9a}1lk3oe zED@*(Pr530rB{O9QW@3w0pg*Z_e-fW2MPE=VJaaPl`c?#FRO0YK2aai?bLM#a_!qv zuD*{EliqbTY&%Ijys+y)3Mxib?J_p9u6pqFM~3JH(>Kngw_V?{iDgI4iM~*h7mEuQ z{icM@%I97d(eti}>wQev2^^kNhJaCkXaE-t`kq#vt}u}abB#@wR*M&{TwbgWqnYK* zRvWB75x`Y&!)DFIK|5(1;xbH*$L04-TR;;<$!Qv%{ShyAx{e~x+@Ti4CqET`wCL5t zsdCx9JhE#dOA?fsSnbDx_xV>u9Rsm*3_ajF$TpAsi`t^PeNlN!$$Yxy6OGC(gxTZE z><@vgk3c_@Xv%$^Wtds1JgX=;oJ5I&5l586-s#^yQTA@k(lt;uguTZ z{tcB5{|`v;pPv846jWRmz0&n=hGwSAd`=r|IE!>z6*8M;yWDuU2L=FxG@y8cEMJGx z&o7`{A*>h*h!YEzO9}(M&PY1#=1`5tKIU^d9(!O{|o6CiF z$Kkix&&G4={v1Un4Qdwc80ogii1ct~zpdXsF6B(y&xHsk<=l=9$Gc4sZC9w60K7Ec zM)Qkf24c)zYMwasv;GymXqOWI&eA!2GNZ}!U_9!xS{>p{<@jD5wvr00Ap`0e9TlRZ zI;_YE_L?_BxVkJjh}btWWKFpnO_@zSl~@fX%wBE^Mxpq!WwSMUytwx0_GMW`c5?OI zqT>}I4nqzZi`l9!Fb@`l#urMu3QvEDH}y#Urp#^);t>+4wB2hXtvmN!wUr47x&?MM z&v%4d5u!8Q5)ADdsk8B|?f&|a8848aZdJ+T$83Mf)0UR{6$Oa|qfDZv@(6Z*jEB=9 zw4rBfp0UdLaDH{wP}(QHKy@R+0P@LLx|6Oyk$G8_%?Lsz)3(An;?y*nu^+T5G&jd- z=0d*oLscc!RVV-8?__}GIfQ}0LApq%HoG|fsV|T>9qm0kG8Th}HH2ddAkmEmfZaz> z?=aJvDs3zaAV%vb&!fyd7QLCJsp3>Zy`mEzzSI1qr4zB`MqpB$U!}b+I1CIIDlqi~ zZjFyF^(FqC?jU>pqpPfwKM#0ye6NTqzabg@#h^!rC< zEu`%!aPi#x1+MgD)z(*91A2JB&h{G*Ia--A8!^ksG`AAc z(Ul|eMN4dx+t*l|%Ab7Kd0O-F!l0}U!_UWbeZ zalFIjV+#C7#FB!Wwb$s~S{`$?m1WNH?Opc>&NpB0^W;r>3+w-4Mbp1PAhJM$ z7GH=9UvTJd3RZXcss21WzhvB$0bpVAAnjKo#cq(ak}f*LNcS8kn4|zbN<)o^m|Y2o zT^^1F^29)K>*zkG0#aBqFw6LED!;vm`}+y8Rjd5tbG!eh|D%nXw#bp)>1~&nTyf=Z zEIiKd>?QgXRYRh%zJlGqYdzl?dpogW%dTrF#;81aU~QpB+V)GjS=~=Hu{JUSdp-Cd z-el44jQf>*Z(hS!NI4>8?;)05Mo}RY9gj~aRB7LxbC4;2O7g)zGQ6wfRXU+YT$@6= z@_EzE7WQod`?~!Y|7$NoLsI67g(C@Y-^7}anDG4Tw*D=Hm*C=We^8tR`+>e(hew14 z4De}rM>4zu0apSpmK0z=!c`kk?4h|46~Au_L#e7zIcq8jKF5uO)lSdF~G8cCZOD~Gc&P%_0pbIN5I(|NI?hXw`ZnFv8DQ-U4G-h_+`y2vo5_;sn- z8-*k~-50Vj#R|v~h#)00TL2&6Oldn7ESn$kym>1hyXox5iRrlTnhuRLnRXQ^r|AtaoSoP5T z|3a?xpLoLmrCq8mc~Cj0OMKtCq@8%8Z%@}yWb|NtI3MZcn!9N41+)nWiEesavC}dD zR3986yWkWCDr{mf4m*}91Tca}n$I(cG;hoLobyvd@-6mT`BXKUEL0-EyR>G#dBRrf zDo$Wd?o8|H3sd6JnVw1Awb|4R1O#pq81m&Oeh7>PpPb2J4<=HXJwq(QBwn(({*mvh z+VSFD>>rCoE2}p)R&Fb|!?QeB-*lgReHG~Cyk7eB2x5JtiI3o~t~%>?EV<1BV)DgJ zQubp&e#7@~Y3->bb3BC9UzPym1cKD5H} zw@Q6g)K6QHkz$U|QsUcnEM{;Ecv!*wsJ075Hflrc z7yROc-4@@?&M17b__WupWQ=*8|2u+rD}J2Qx43;JnA!EUBwHe(CTIQ<5ob*MI{Y-W z2q45KB+Du&EWF51dcAIx|T=?dF$E z0;pZUrRT8WYtXiUph^73?q-h(Y}I7ome7mRsqd#>_^-ZG`PA%PRH&@ zzJW~Y3-7rfCB+{0GkN2^m>>Q$V}2>Vv8O|e8{UyeM7Ce+&p2n>vg-5LO+O86dPv0m zsMx$}U-%$*$xvwbd~mROH;yK>&;UCsWzrWKM~d_00-fdDYSSP-Ckwah*E9V<~>F}GktAis6G=t;Syt9jENDR_^;jD2&@c)+XT zTi9^{4kW=ofz45R!RGsl_+OP&#k)aNZSTQ7RFVNzZ%*_XxJ~Qu0zU-APgYBQK|%he zm6oPXu$&`P*H$pWYgeAh2GxuZakw89-R$iavY^N$azB=glgqDzyWlFewBo!3PYw$c(Bb$f;)k*`S&B~WE#3{jUFQ&Qk0HZ`$pey*dHgyi zrt0O5C!Zt%YOB$fagM{oHpJ3$>js&&mk2@Y0NP$r-t=?gM~t*jTlq!$miF0svil9~ zZ4;=ejI_GMR+N4(q)|7Q9otY zF!OP+;&*ydu_i>W6(FHOGywZmM{jWmT?re zY`LFgvZ6_-3G(OrS{2dhI?L#LDDNtw5&oAG(Q%evFHtsjwx~bTq{}5z{Bo)>uf_EJ zDlv_gu+>|p!;*8^pVG_QgF>hED!P`DT@4@rPAn%|7G|v9`C5JOa)^j$c9b%)6ao?- zjhYQ>w@r=#sT3w=iCU@&CsH6-FUJ7@Qx3JIW}e5<`eod@g9U2IMGg@f^$Xqn$Pc)v zDIutO#xN&qwLL@)b1d^QE^y3Rh|WWk&b{^)L~JAECR#z~U!m=YnRRZan6Xv~CK9cW zy<`}z7T??wn3479F8&2^u0@aS43YoWOcpGF^&&Cvvf(ShowK z^!eWKErBQU9i!WxW&bvc@h?y)by@a$?85g!e`EQHfV~544NMp*vaI)i<}TIBlaBLS zOKzopaCpj%s75xrT1FFziLt0*Gm4lDlkT!ax1YG;0`Pi0F4k8u{qwSQX`SLX!H%gg zI$D>B9Hz$Ap%2lrj_lTE@ZkMZEg?d{yn1@f%kfU z!#}3h{npRHh~Sy}`%s?(rL{Hu>+H3S4$LnTc_xyN z>|9JKc@(L+!o0Ll)pGq3S~MciejRldzf!3~JGDmsuGlWDbLIAjx@!VXlSSS~qlAgt z5Qj0fX)46*)zR4BxafxK;(lS7aYFTa!#;v5A)AIqoxa0AFW4*%WaNcQC>cn6sI zyyxR^4q5^r#xqmy~`XJ>jQTo&5fbedD;9Nw8c}KMAf!SLZs>7f`cRRZ$LqE^0S#7UQPrxf0^Q`;M7^X9TZGx884&R{U9I^s7Q-)2TCqaEeQ*7>Tz zO`Tb}+&2VFishI4LDoy@w>lk6bkQEXla!2hG^`@YNd?AW6%W|V$v_GihEecra-^tE zosv>*hS#Z63<~x;$mI(1Wv@<|%iF+XLkxiz5`4MFq&yebY9FPPr+=^dmG{=0moZQ1 zrc4AFt2v?W6#s}3Fd3MB%G=D?Khbkd0nbQ52UI$-y{u+}u;>BmLgvtRr5Z|(3q z!E37-i46^N3z31m2)zs|&5GL85=}NUO+JSkuVwW)pAJ7*70;K3wjrZra&}d87bq)r zw1ncA@++B!QTYEx((tc#S-AW1`D1784FfvCKmjFI(h``k%O&|k(oFXpY=EFw4qZo| zIuE)RMOL}9gXpmmQi7f~Y6D2soe-^`+ab#t-SdyD?NBY zH;1=OA0|R;tuxz-15)1wB=So!_?^D$XX=)u}w&F8HSH?q&tCv4~@ocPfFdxXY2w8lS z`t2oYpV#mVaZf2OQr<*IPR9JUg{il%IC|Qv$7#(ZuO+ZS{=;oI7E2X~1+CtQeAIwJ z$A?m3^ug+MBHD-`9;7mUVH@whB$WjeYntyuo0eRu77{S{~dh0BVkK zXy`p2yQ*^1ckLlsB8~2cbFet8!gBcB7}-581KThF$dh19AF7Wp+r~35@`%Bet@xbF zd7U0K(1&tfN&vajEoh8JQkQdrPFV#H#VdXVK;p1f60fL9xnxb*j5ALB1;^&eK%&EC zZnpEk)vGKzn>KSFZ%v?fX^nDXLBqJuQ;e15^iO9+2uDGB5Rhsyh+P@#(f?~ z{*jQQkNwQx5{GVSQJQ05<*o}1+IneJlNq0V?6<4_L<_PUG`Ib(Bl>75ztkxs#Opyk zGuhmw%Mx9IQbdA2yALI(X#!|CtvqJc2HOL8hS#$T5~Cd3)=bz`0qVR%dX~OXAxkyQ zIu6#$GtvS`m{8XS13c|26N@zCiYc8i>9|6*O7wJv0AkcZliXCU+bfM0!N@cj&ArPl zMD;ZID-6+0kpj+Asp&O`ISw_X1WHYj>Q@4`Es|!-tMR=KA+@6Y7GFF9n$`u3zmr$U z?-8buX=(7~HMhfWa#i&U7zn@rT+IDLea0?e9U$9{zqu*sVUzl8X&`p`ZtFEkgp2}2 z^54b>{%>o9|NP@$M8WDIO(D$T`=k%uGoRB4X8#B0!|8quedpP;9xe`i-yXA<^qC*z zYTemuyX2jAV>3Ba5<<;Hsp)w7)A{d5yyr-3HTg{HqXEVqaq3U9|>t=rGscTLhwnx-?c_9Mt!k9h7Er>mPk(1}$viw3-kMXtHzKym888YAXebK5 z`6BYy^hLgvk4m1x_katb`jIErMrS+c?>@Yze0=xS{NV9lA1;D8|9>!z4ICdSZ^duK zytza(E7tZoC}5X8<}A=Wrp{pSZa_<(*&QIM0GA4+4~dwXm4CGQq)O+FdYbGO>Jp z6D%M(CxoDQNtq*Z5|~!7s*E+bX8`Tw;_xJ)X@hM95ONr^a_`}2BChRvi;s4#z3~#= z2-^7yREc(0u;&1SrWte4sD=1O$X(d9CPE!cKeB-a6#6UNOd+;PHv4prsyQQ_^2%SB z)lhdu!7n?4079sc6vyqr%!&Te#J$;#c2RwGy>h+V*3^k6Th=2wm$&dSeC%dXmfWlT z{d*KqOJXCEoAb^gxT_}naPfxbmA-QLQV8!x)-0q|zr}gr)DV_;pQ(Kq6IXdcA#<<* zmD5p22oe3Nr}#gZd#kXv-)>tJcMa|YcR~nm0fGkz5L}8A+$q);ch_LWDeh39rNteJ zTU&}dZK2RYTiVSz>wj_f#eUAW_w%i_*Ij;3-n;zXkvZp>V+<0IY2mJkYZ$la33fdA zG513({Hsx3UB}J^GT3`FuusDF|Mv; zq8N`_V{A3*|U!wWzwfh5?)~)jfnFyLbVqhb%-#_cyj@C^xT970%f}o zyYvVO6jv`$70s^;EC9(C#%KYcCF6@-w%=Y%NxrP6Hd@|X&KNz`&zN*BTb!=Cta6RS zX@vr%B_jhNQ_m+e9OS6IK|P7~23DJ|#PU9`S>Ty--Yq3l&aQ+1H`NIL-%Ix7? zeZw0EMhqm_G1?4c2L7bM-LDw1f5Z+Spuj-k0x(RcMFBWfmtX&4sDkVOWu_$r1_U%j zATMFCP;nhM=5{>oniOeTfb*)R1;y)e4ho;*@sl?W74&LVOD5%H9%)>5y_<{58O5#T z#N!K`4#uv_nfv_f92&;S(aYgH+{N#J$$urgtc#M4mk@e!=2=yW5YNC0WvbNvU|kPH zF<3Jqwx<|m{N|v@M`GZNh=%`= zA{mYv80HWf=BOIXKn`rfhs4Z=21#bhg0Yw~B2I=vehTd`XS46vnjwM&&Z_Ag>Q+g@ ztPBs=gU`VsC`!!MjtMU;SJ89G&zGrU{mx(AO*GAD8A^gjsuSEMRfi0&}iHn}n*zExp()UP*SBG?Vk4iqG#6tG z;}u;ico0-tMCvskDuc4h&Oc}B5({@|1@C>E^Y|L2L^>j%tGT$(2h5HEh`eR zHhO4r7}Snp#vA&tg_|Ft<2Gg{hfKco{V8%})v(wPiT6Ap>W#8V3&^g6tm} zAensorRSxxRb%vsU5lr?$`cy2*2-V=KQ}5VnguLo_lzT=i>-+$zQ0t65>xFw+5q;l zizq+!TUxBr;vAIpDpCp0%^X{mwrlraq~@=BJ3G;t*3C)z)|v*>P5{(?#Q)d}iK8GjbhOYV!=PcWFjBP=L>MezJhr=rsNpeDT3EV)F75pc~NpDJSc zJ;&f@d_f0)X?RLNOdj`(y298lGNIyR<}Sa_K^tK!vWRA;lg9Rmi*1#T0v7P4n0+>- zEIuKDeoBN;y_wx^8tuUrNZ@Is4h5rpwy1W`Ft*V}Lo#b8y<`w*fI0e^g(AP0=;JtA zUP_B*9p|;GkWbOFzvi`i{YaaOZru1yhL12sLhLZ$cHa;p4KJajLD?9E)f%xa3M+}5 z^;88dgd8B4Vxo3N+B3F`BhW)c9K0-xFYN73R+2n>o|be^C7WckyQ+!Kl8?iD_d{%A zcCXxFTpD9j_TkOpjYk>fqK#4(X*5{o!2to9!4>wQ&R;vt3cl&9G41A~Qh~d;aaw3z*_pZBPeFX;6eMfk6}%1}0%q(ipeO;5KiY1K~P>3Wg;v zmo0{7n(&ZYGN_t2B*-I~+A;KXBAqjG=kuEu({!p{`8VbJgP;l-YN7!DpaRIG zDnU_CL?_+5oXC}osGpt4%If^DTvq&7s*L{^6o~N2o#wTJh&v;Dr{8kOC2YGWg4FLd!xfrIh0s@j(&zSrv~ z`!z1{hxOKGFZIMW#Y=;D8n@^<(nLwv-gIJ(`I4peO>!DVk)~PEPr{~O^MUE-HF<#e zSg(E1?my>0E@>n6)9SR$`3tweN0H&+!Y`doO(yxZzo-&rJDWF0$x{e9D-6Zz6vd^9 zVn@&5Xt4EDr+0F;W#0 zBK&NE0U=r}3=LK0wq$x-{rMD4{sem0H}-Y|beOsQP7NmeymeX5WvM0_CJ_kLfhA0x z>8~w?#O-SzrGQ-`_9wd%T|cTJMbU?)LZdx&6TD|Z6&>k%}q}G2n@^|%qHNc zBziE&P__eXS^{oI4xaMxQpdPG8B~G025X0|eR8@GjpS_E50dU=spZe@=IfaDlam54 zaIkP|DvHq3MB8BPQnZ!z^fRJo6De06?P~Ec3OvDO1hJ&ld7kf#e#}5**7nam-=21GUcLu1qBTDiRWepZY(-Z?In%!dmmPMuyxvk z`9gBlxOAkb75;Qr_#;hyi)Z%m-K;=#DG#@il9k#nA5W94fW~A*wAL|1@;t4Sn6DHHI9_$a6h~k z<&M#KeRu>cU~H52JrFN#;dW3RvwE#Gqt`j!YPER7WXDT{q~D1b7y(ffpw6QkxHMto zB{;a`58;|0kPs!;0FX}A7prTDi2$3VoTB}sO{Xpj1ZAbc+=_nBa8{VM1~=UjoyW&( z-)$e=JT2hRASw9h)ZC_WBN5AV(PA}~>vS^%5R=(lX>GCy)e&1hXPK&=^+?%(4;c&gPcy*zuzWLY6&xMHOO_O#?B zlBqfB+PugqnUCN}4Ei?8IK!=uv3t1^Nz^?wr3~Vf1M7@FofonYNLuYw7Z;A5Ok0&T z6cn9^43O5?E61#zs-|SbK*_wC$=zAeD;#n}UpP64iOX4q``j6fp6$4^RT&%J4*K?H z`M+HCvR8^rmRZ8zt*pO%LG2;=w7Dj%ZTRLmElYmn=iYvT)@EHu-k$qb&h5+7_l=y! z$S*=2tt#PzYhS*6tkz%9k>#^*q^weDnBmuY?Z{3wp}+A- zA{)2Mjq&_6Jl9WjVvOUClESGZ&YyU1g|^zoL3zYmF5k0qiC{=ETaN&Js{Z^j)KQmn zU6-r8Z=%I?5ZR()s<&QW9Np2QOR?wU7W@=i(yKTu8<<3#l-rf^n?E~~tEA3eZsM%4 z3;HOg!D@v@{h8WSdxCq8F>a=_WnoDmi_eFrEpOC8BBesTCnj?(P9x?eJ4vlRrTTxr z!N(y>JVxzXP5)P9k^eK4`~wQ6s1MzupFC)Ytb{p|qddAawK6WH+b)FEArsiH8X4FzAvPt0#^mbEtw7 z1#Yw!DveDN%sesAm1o;hYFn@OoK-@4^}f?4FQ&u_feGezlTb|>7?A)oIugzUZx7#XB9Sl{;Ii7M|r zar)R4abdfIA04hH1Nc>iXuc67PLGQ;6-u67ANuyaJ}m6mw)XRI@+*fHKggJU?&EEZ zRCf0Rzmt*YTDKTD<*rMMz8Q zWk0S8ru;?sgNxwd_bn15o)Y6qlEwT6M~It=31Q=Kk}-?b8yWFR*yHGel!2W4FpVFv zY>a?btk|X2$VkG({#ra0CJlS`?rf<|b%BTl35K!Bsi5+yuRNyW4OmsPESag5^Y6J{ zT)uAEpNid))TN~+s==OB9DCMh!kVL!93`Af9B~D3oOib|R#wk};~P9>1^Aj%x-QA2E#-il!biDtDjCJ*IfxY1`oUV+L;HK*6xCY-4*L zkO`EMek7fK#E@?m8ZoAfG3*OLRfC}1c!|!KDYi}?qX@!oB3yOcNVPHoBI}`BT!K7q zcU>-JyeI(385%1@bLxUJ7jzM2CRt=UQ7tD2(;aNY)n%#uZT>R;@t6Cm)?5wi@=e!mH_cv*di=H_lXWMS9=~!QG3&G#rv4R)K)V{#fT11T;Lf5-(}H z!`Vq!OWyRlLc;l(X=uUzanlT6sVmN)MO{cPmE zqK}ucZpr9KR0P5^Hv)01u`;?HowK$RYUMNw1Ajk6buZi*B_K0)emi8qF|PHN(AuLdZE?f+GP>s9K^tE zS=XWJWM!gvuoM*f=&i}3TIyJH`6TOQ2I`pn9L$3?YMP9Kw>YuYrJYSIoqQ+91F0x!+p*X| zIV8C_&KUK*~LB(vtqy$S*CozWA#XY|?{whDdUv;NT0b=}qdxK?p;Xoc) zCDiuLw1~-jaLLkdI%eTLHr~Y8*)g0`JHAR<-(wCfzfLaHE~dDHbR_1_xS7b?A)d1ghf`>YY8OU4$a#+dMIFF zRgMe~-e!Q>*o$*XS4WSPCdCsQX!v4q2@Sy7ToHC$8LqZlcD_Vp7$ka(6X^?CB!k=A zq_y8_Ww}216Gh+-(#(j3#SBG^8aIyQ*$djfAzs#_^ zlBwmF%gE+nY_cBp+Ok)5A)Hu-JHN8ka;w5rQ!S)*!c~SEWk+kDqq%2*dUy=7uwuMR zAt2{#tMot`UGZL_o5VRzV$9n|^+Q*qsqjxV;<^3EeLb3vw_Z-)Y5^zLA`2@)2J$B5 zmli9i4cqDqFl`k#pV~)R*^I7hqB;>hR8YBS0Yjf1ERf$AJh(rr=n51io(bChP^>)e zuPxRhE}Kq=&mxx?BwX^RQ#k_c>ss<*Z69?F>;s3!UYV}pi2Wg zL-62l>6F%c%6z*ADK+E=1QQ}ekzTyKNx+;wLd_r2#*>_$fEK4*AWhW*+i?MfaFeE! z!Gr{V-y~QVF|&2}j+AAZ97+Sor2V^S5y81tQxVA_8C_h)KUUeDFFgvn&;yOoCd-K&+()<&@miD=$Ez}!?@7k zh^)z?QZf^_Vn2dk4Myv~X27d&{=R}QT6H;5Z06|g*PNjGlTrDAo{xQQUu!qPwOQ3b zfrjK`ytMYb2-{l1vI@K(U@OnYbd^fe*^vBCt}4}wA$tc)Dzlq274~Zvv_yHM9QGyVox2 zp))cczVxHJYD5C>q?ZI3?&zNP3TDo!`W#Y9v8Y95QE*`BdP)pZGO{!2G2;P8-bqMj z#K72*5Ps*=&BDX|F%cI64Irs;?A)Td16|F2k~yye%eHgHAhQZZ1e8SlL-6(Mdtz<` z4`(!&^oE>=0|{up@#o%9@8)6i#FhRxwO- z8HozxrNYa>_sJi__}){zliNBXG%#LIF_-t`>drl8MfC~**UP-PQIw(ROErEJjdmOMIw$obJrd0{H9-lJs<8B8WEiz;eWYkGf!#ZN9Onx5u(Ie%P zxw(3>ZA!VrY|TP<{6^r6h+b*VD|nat$ERpQ435p5;T!BVcDRTy1`{bpBV-3-m}`kG z3I1FM0?L@c#qN!Qt5egk(j&?Kprv`>l8jim!!`W$F%-$);bS6*1dh1L-!)$ab%pv4 z)ihQ3TH6<1^6^N{2+8^KhGg(!`@pr1qa!Xyk+H4IY-MIzfM{jb6GD5U2z&ZmJ$+tJ zA3gb{PCrMB$z9leU3iv;ThxhJD(dPrPd*RrW^0Bc0E;*m2vY`(^obi%H*-L$qpOqA zO97fA-6=S^sV|wTB`Pdbdh!yV5>Hfr^Cy^%iJU

    z7}I0tvHQO<>}wkPj5ol2OBy>-LXsE=eoc3n(u+p z?<>H}y>?A}4PP~jgJz;OW-7{o^MHJs!WW3xM-nBPv5{3yT{E3OAToPC=Qcag#R8t0H6}x;LqWc47C-y~3F_LpW7n3c4 z!NB^PYv$FwBNtF}+J5)jY_D(U=y)Yuv6^*994r=MpI$&3N=$`AEQG9sKbo6q+gR{b z345UXGf-7H{^FdvjTQUE>fp)$#oSv4#kqFdqBwM8jnlX^(73w>8t85u8kf*`V*!GP zBuL}#PH=Y%n&1w>B|w4)O+pA+A+|2xJ?qrDRcHU$Rrh>*pI`4&PrZMiQDe?I<``5= zRytaR@tF=*Q5sO-0gJO7f7@)5pRT*FFkipiS>**W3RCv^=7IH6fpC8f-x`nOht5c z#osd`<2*5IHs%lwh?F#?-|D%`6m87TTzS$Ld71kW_D=of%-CzXl@FmF8Ewo#l4tM6 zMg=_}K`iLI&B;Us%NIetfd7`Q%72)`!F}YkflJTZD<R#pe+?f}6PG&9q#Kn( z6fT?$B=R8&oc6+lwVLY!isf;$7{j*S;e-0@g(B%w>?IWJjcC0!5@PWY zVBL3aKUro7xq$>kX|`#{#@R~yxyjC|jnV>Bh3R6O&x)Cs!AY%JVior)Hn`_(X=Y?g zx=U__9eIhQy3^xgg`;0}ep_Y1*CQcHR!<*%PZ$X6kd3SHs|FBLS^a9VqB?$luAHH+ z_&c!0Iz+LM54dgfTL>-syfwq20d5!kH8e}Re%YAgsk`Ji+nP zeng(_^#Svz<%_jA2M>plNW23Sp+j2X6)YQ}1x9A=e{0dK%hsfx83Btg zegTx=r?b7G>Pb)S&R*ux{o;(r31GTDZERJx9NlAHWuO%`?yepc-wlqrn`e7$A;|h> z4oRt@-qG69jNH~}Nc=nz-`BXxO>OzB;PsnW-wuRLudl8){^2cEBvB&=9bV+rK#zP8 zBe!(lY}Fx*?@$9YAMZFwdQBq~RM|b*AnqIsI1DT4>Hg)d{M<;YQ1-Unkxu3li<;)% z_LLe`4Rs>HeGXwqN#h8Em=-ypLoveAC@UP!@ihwFe6@T3P$H>QYnsF5_vv{$R2s{ zo7=ZfRWda48M8A5->Vw!UAVe>CQ~TwV*g82j{kr{uH@aLcjp*-ElXC{O82%}Wf)B@iT$3RZhZV4{0~sxC>_1sVsWM)mM=(*0c4QBdD!9s*YwLq9fK` z@ZF1hr6&J5^=`ACIvP47Ah!X;YnGS;922IHEP!){32>LQhQ^u1I3l2lIO`)yT}QXE znLwMb4=DP%A~|B5`NAA8&*l-=*S#_riFd*|2)sdx0Bhr^5~rOsH64nj+@!iE8itP5 zv#hQMlBNl@4$sF0uX)Jof5>g*s9~7<<4Fy?Kx#EBl)ni{PMHXENpZfgNV5~tCKf$2zgP5?*tzx%imRY~ z5MN)9Khl_$^5MS8oZ>(nz4dRv@)$1?wj0t9ptg*9^sv&I3(#^`BS<((gAENyaWpmg8_wI z6BO^6(wou;5q_xlKvo1Fw+P2eDPDo3$Fe6Ts=5k_3(LR*aqF!tzRxe&C*_q5Q>g!p z#d7DSPm(%H7G`9pfPd*(pt4-n_E;8+>{?xQed@naWTnR^3f9W`X6OBh=B7z1uvLyg zJN@RAtM_jjF}zga$d{}0?GotPVashM&JWS*G{m2rAaTs-TtBl28!>ht8@G!);cGiQ z`M!l2F=+mK_hABY^YZ#Kg1%TZtx=fdE{#ut(HMU^KVjk#Iv zoyR7isLM5=!~JM7i^RREDLY*)9rc&-i)N7D2Zg}dEFP<8-3lGzD!wUs*v&G-bMXMP zu6%;6v8Q0Y#H=VQT4%|w)svJJ!sPHd)!E^|t+@i%$9|@gd^Bggx!Kv%nx`X8UgLfv z#qrAfDh=8m|EFe@|A0dI{q#Y|0D2+}zPbkm7U>G*CS|24H_6lc)Q4WeYK)eX*{WAv z#wtZw@^ET`J!@ue4`N8;jP0SCv}2TX_8JuvlSEaD(_m$rWo<*&bW!bC^ym|(48l$& zTD_wPu^2Alr;T#yxfwpcmvlQ5efRO;Q~hD4Ra{QfeJ`O!2}i#ZC|RVqjT47sYu@v5mIC5!Ku>~jM=$a)$C zi>n`<_F{b4_#{ECb7|NGwUk0cFEc|{TZ-6UB$5mEfoK@W1h$I~^YjK-X#$t+-rQ_4 zdL5*Bgw~IK^YBJ~O*X_}mfHXtUA{lP>}x!Q#@%WgIJcNDj0tjkeAY;3K4x(#I9jxk z7%0mrpt?x9i~97^MUKCJpZB}i&EfW&nP*oKB>GYO9uxEWFX{|CBF%BkRt0JHNI*cJ zrE%bhTuBV$v}mmJaBE(6$ku6^gTvs(fQho_6Roq`v0*W99+9V`ej{YgIl-D5Vmw^i z`P2)+Eg#R+I2c4C$x1xeya3K<8z20Ab#Bk>pBo ze)3Xsb;hua^bJqL)zyfR`v(iYJDnqD)>4rmf%qo((>5GQe~C2#ZvHL+DNtV|Yum2mZCIPA+!^CmmT@j_or?&v zq<4wri&(M&RF_ua5|VmM&XsGa^~)dfGKqiC-|KFflKF~_sc*)Qof0SiPrdN}PXqBk zd;A9!Z0>XD??GXi{9lpN$E!P^{aw#kU9v(v5FWO>A?JN1bca_tql0~QJVQQc(W;*9x{Pxo^`(nX%J^3|ZYZUZ- z<2<7y-yNF2H7j-0eFaCft|SdVJ8s^6btz+{9t)BbRPk|K5J zrovAVK&eNjc*ZNoO!_3AmwpVX<>?8^F|z?i((i&ZPAW}C;-=FIp(lj$)o=zD&@V!{ z(Ol8;Yn)Ut)59Fyh-s1-Vds>d42D3fA13Ne6Z=d#$fGlOqA~ps)`tr;Y8u*0mCLIg zvGVE+JkLEM7Nc0=VdEzsSf@vl^98-l1Z<2C6Gs}CmfM4pDnqEX(L?t|v=&MBt*^HWs zWpaI6ZSP?E0Mo>*Y2|<0OkYc24X{TRa0{@@Z0i_!UF3*U9r4DMr|2!I>)iM}0+T6H z5Fbn%MVTDR@;vw{I~uc8qbNFoMcEm|&Cbm#1M+JJsSKO79=?q4@?>})iVvrB8?2bB zu!5#^CRHbpAc1*I975H5h+H-={1!1f6QUxndU_y$$ym)6w_=pc!#*iL3i1~7Qfv8- zaQY)1j!WoqnpAH;)cVigeLhlc>kf_WMuFc>oq`<*gg;92h5UK-Ns(IXbOKzd&g!q~ z9cejE5a3$mx9j#8Jan0t_BecKvGVs@|CfM#GJKXN*tl3Jo)q4P7v&v9DBtw0$2@f- z#cn>Y_ykt2#0FJbgiF{(H3Yd>-%V^ljd`yB0tJCRa`5gWGH+(i z7s^d-N;-!3`%p#VVfcX-aslQn{Dhi{R+YW^X?W*&4&YKEe5Vt80X1z1PfN@Mw$z7bpEnE4`A%Mb*I2~7dS3x#R= zHgXT%c<~tgwfAajJwta}pqwR>Q{4mominyi+9we19mK~~Avx3BKt!F_DE|UqMMF_# zq_?TxfJV=z_9#B{ac!wb0QI*8&M4gqhztU5B4(kXgO*}Sf-^Ylr&wir5ih}3)_HC5 z@3W|!TvQ}G+l8w{Sxl43@g!yucp#2idvjhKZ(1=z%4CAPMc=%rWGTkD#}tl^W0g_0 zN|&8jdM&~;K@_={u9-l`TpLvSqEmNdfJXs)AGAp60YR@Oq?fV=pXuMbGEJ|ex>Y3 z(wdaJ&C4>8AK8e(+E1{a&f~Px8Q@@Zora5cAxmXg7;QGfgY@$&n5^Mf?P#v|Mka2> za-6ByPN+FEp2c0{y=LD0ENDfux!>!}hd#F4El1V@+%8yjH<*8pE?>fl3doAL=MKl%W}udSAcD>az3{ci+*FL(j;C_-O>pO>9U1)Wji|tj-@jinY@&?*7Il7lv;gUNV)xKTh|lwO43~= z?Z`esWV3mQIG01bN62Eu{{jAVCydHeufhF8jA?!TM!+TknxvdUm_-%%S_-*(m{p3T zL<`k*TfF4DZM}Nx*ApkV!%glSQ5Av;7BV`l+y_05+M;D=PclNELqY5kVe?(lRq?sa zv}{9d{=euMXp4sOu*b!N%EAPj*5!F zUa!G|R+I6^aY!SU2Vcs*@EHIc17MjSgIjA=g+$gnm?LPUJpKbGe+`pu6^c>+@cQX9GB&d z#g5Gp>+^rG-zj`aGHb%R|D{~DuN~7Vii1q}0u&k;A-c#W_`JioX-!p>#hutd^ zaAZsL=jt4A39Y=b&QFQhw1xnu({W$7G+X)?4G-~j66O{RfRJjgI6>_(Kg3Z@2+ibF zny-LwfqUVn zlQv@o;GtAlvTlUWVmu^xHnM>|hnvCoFk58DG7aG#Ciep?VerN-`O~P`%7DP8%_nT2 zjXw3@c}F?c0hvt7q&=4- zZJWyYEBiCCZ;e)C?|_QiTm(37QM6TBN+LkF=bj0jI#xcwTiI;nE|^Yl(*HECoi#7H z-9G#9^C%((85utjE3tg8VK{b%LuEg}$XEZ=6c^2V5SK8(6v3gO{oRR;0^!Smzu&F3 zlZYn9sG4vOVE7p006k4Mtq@1T2U5@aHOofuvx(ib`93tzGV!rZay|Jl5N6+c+mJd_ z8@~Ky*1rZSIOxuq#^M-dlrEId4u~-H6(e!5x#k+dL{dxk7isam zDz2&#phWAB96Cxjym)rbNk^Q5VGmU5@?EAg6mQL78U9j!=c_>epu^02l%w}z$)Y}`h2+Ih&~`NRkpdbYew zI-L}wo6TemNG|0_nHD)ov0*%JKrN&gPyLhOk zc)hUms+XS=1=F9h@B-#UP?+-(o@wtSgs1bG3%gIQCoVmxsTM>YXMM;CB*Y#>8n(M? zP98{*M8azPS;>HFus9Vtiegk>c}2A;2v3W_mx)tyEnv*B(gHe<)uMOp%$k>}+S-E}T01IR+&e7ueOkD9Q{RbL!mh zn|mrK*xyPItJdU3NIWo{bd(h&8{9*5?1{~ZNK(Skb9eDy$|~@(W?abrIBP~dh(Sal z)M^p6l{;FOi@Bd$k;jrY48|&HO(0<=&w4YzVGqq+b&h2#vc47D(;Y(JQF?T61NBXe zJ@FrzVOG8?GTV)lyhR0Jd?zY-vZ>Q^@wL}X!Ri*QP!xH*gB-0gpO}WYJTjCVmYJE8 z=hTkWKob;qf5pdJJb5eeJ$_*`i#<;X7#A^w^5J%zS=2YsUqrgo=Gxdy9r}4_nnKVd zA-qa_qQXKFuK^>Q4q_VA@A{5;xa0$YvYCt zw_WKJUgssA+l?D2Oh9cX$(#3Z4VkQ-R$ye$^-JD^yY5dqrIScg!DkO04oH4Us_@EK z^V56tra)>Ibdsy0L+$CP44;pbEff9*2nbqc=%re7^ic~foWV?L1LQE`-pq*U`&~C)uDtFj>S{L-h?BdIZ-t9ape~nM5^oqNn`)iSw4V0S zrJ~~j*jh}g_`6S|80PMqrqVAxh4k1jn)DQ5&K~S)Ll6-KUt5Z888eqJyoH8!5qB>c zplY^&rKQgndI0?#4s^iyxeZ|3ns?(7tD*Iy06$7tduz)IxwcB$@0uHsg^m+MKy^X= zFriy!WBt!|t!GK7QzE0)8e?akfEQkadbd=ral!aW<=P}=ENsQA((MNNyR-@O_&aWw z;gVPNTM^uc?3f`r8+IvX`>>ejoFVIUG$iyqc)H6GrLCQNN%CUncj?Id6|`@euycog zSKbrO$hQ}NPBg11J4*jDT1(P7e#w*J2KISvf=hiR7l)8u5nhAEqZb(V#-|;q=>@9>L`*+XB#5Bu6Lf-lTfD+Bz&Wx z!dL}$)vQVukpX74%DoKLrn#=nR!H7?X=a7@IL&8}PDZu;N|96Qlgx&urn~bl==OFm z=E0N6UFk6ZY0epgY+eG%bewC$b*a1@n$!&|ctk_9ki0-fcK{gk9lmU`S;}%}`3e%hSd)wWtoO9dI$?T+8dG1txmI!&lZ%^npVGNxA6p@@&?68GfeVq&`|U z97PgDL1h3Dw?J`aH8?z;u_4wH`^-0L6=o;Xd>S`4gU9aOPoCgnoG_RFuxk=&-o1`r zZ;z%NQy6<9$u?#JWNa?p{tDd>V)oFB*K{bLsNnxLN!JH#;muh3vv4=P%Y4`(Cef}A zKZ$&dn}5L7M(?N^!9>RWtMwXiALa52=F3sJzT%u6->0zF2&M-Dam9z~hx%PLoCM`7 z@Eq`g6^y8-#$&vt_O@_$aZu;KEp>Mo30#gWY2C>6>RIA$Al?nsoGn zeZ3!BTuw$glGV9H^^=Am^a5JNm7F1?6lHaGl?hIf8X@ho?O!xM^I(i=-7cYqX}{*q zSP2d~HaWmt4u8WJ6Li+!C+N1n&M|*q@sy3bs;WdG0{Ew_CgmWypVQ;4ND*_Dq93V;BD?{&LJdOY(O)?l*VLnv+CKH_bc8C!SH1lUSuPYRv)xpQj6iDJ?i=j~ zk%KCkrNgxh!Bm*Wa1ATEM?_$)&4y>XdM8|@0k1r=OSMK488ucP1zvr|A}mO}j=e;b zTE~(bp|soM6x$WCJ+!2f!~^zfHll4f0Rg7gVWZ0f`dli_3$|Ugh$cYCFs@vrleuo> z*ysSEF*jEzEk$2pq~y%3JGMsosrK?*{i4&{3rQ(MMZ)o6wgJKNHH8VY@XF@A()1~HF?)xgNIcm$@9N1<5jZ&E zAj#APOEDvo>G0ACJn6i!6vyzpl&F0*{?Or}A<@xULUR6LQxb&Qv8PPBi7{e4?bC7t z^Ir^}l)d-j%~yXE3@WfCQAqw|u6UIOGu30x|m6(vDhgK`& z(>cp*0>{^{e5J}RDj*+<2%S#g*autNC=bY8Jz#yHm}feJ!mPlHtYwRZy#_V)Q`h_6 zh^kDt>4EfG@J0TxnSUMXgTBr7NetFgUXroFmqnzsz1yA9x}jDoCQKk9XO_qGJ_*h03s;Vksi+n&VPsIe|mY|3G|Gw1)m zJ%<1F*8kI|e?YZ{02Qq0*p{C3WOA|A`NinmCRWbGJ@86~V|t~~0tq2LW^eB&ngDEA_E&fl{Uo1x`=Egu?M zSvLPpU$IF-UssOC`xV_F)yK_@uKEX`1_?#52%2|!8=V1xLg(j3ew&Y~`MS-f-@?MG zcRlpz9trzCE!1&xY3Hd`H;&uiO8oeiN8jOtbS;PNqbBY`QwjsqoY&_-_%`=Yo+OzO;FOF zia)+<@hsC@F2cOkINhumXwZIFGZQ?H;NJ2I9Ug;I@-T`BkANmAz45jamnfc2r<_mJ* zBtJupBJnU+n#zEt4Ysn6HT6hU8sypYeXhiXu9KE>gvJ9H%R?tH{FnLeFx;&k&-XT7 zC@Z3AbVd5qsY7CV{KvSo;?9U;|hEpfg zBF`%34@-yrHtJ-xv#}f(1ooUszbwca!9g*kHBt38GP~lWs}Qa(QH}b=Bh9M{ZkL>i z{W{cYJ8_w-7xl{OWsfhT(?}F)$~(?R(hLWF+@+qgt`VMrzqK3QY@q-TMz9t0Th@u* zY{S-pRif7b0#o%u%DfBHrjnv;?KDqzk&xp@DoJUwhF?^KjGoOVB(gCR+D3}#}qJ`?B0&Lkq8$YLDmg=VQa!b)LK&Fk9wk zBR0eVy=3{FBEG!a(iZQl&`8qAVD7ee4CzU6m%26SBkzeIce`5C7jtvZoB*)<;H6k_ zHWM^VEYHx`2jj}D9#`a+rzR_vaa~k9M~17V<4! z^o2R6j*qagbN>UsL<)=9_`hl?-<=ER0%tmYX-AHIyLL{Mc4RfQ6Pt7lVoJ&N%-HHn zw=RG3R*P&Ji1|zEF6{PTv8kgB9k_9degDz<{kNy=yKYpR`@2id$<$;*0;GiExa3d> z0}F}=@_;}mB!)m;cP*24u@yI*G;2btKDBmGg0)avxER8v)~fwYP?oSCB=MPv^vjOj zWPG2TD-%ejK zJ$H`ZU~Q{VZQ4&hgmq$+8^wiavmCj^h<3wohov?CRz7v zx^;Gwh&f@->#ukk#LkvSmvqfU9qH-jX4g4&_B|$sm4A)wN$C%HF*sQUm$)@60E_Z3<^mcHNDkKS3>KP9T^~A7dL+=ukLumNG?d6uGm}% zaX0T`$WqK~9wZn?Gg5q1Dix;I!z<>wg;6h-K6ter`HIOnWI165$~`|FVKh?fBxyD9 zV}ftHUn#FnFSLINd+>D@c|1{K!^b|atJTv#>9c#mgvT{WumZ;KX7=-FObA(sAXVZV4e_RpZtro_03q%b zx3*)aOO^SESXIc|s+wcYuOA_c88cJgQ@VT=DdIH|rOzyVDHvw7bS63cuX2Q}SF~cP z1XKICd!c}l04lA(ByUybrHY&v((DQ4r0E5;vk~%ctzmf<-BPiDrMl!fl&abs*^ivY zW=qF)fwZKL_31Mayucl1b&v00=V3}s_q-VwOM6=%8$6m}Ds?naZH5|}6rEdTMt^;; zgn7^7jDK5N_L^ORladPqx-7E)3!qNjS>`4!u0%kUHN-mlcd|W$e~y(f<@o+ycUrK` zEKfz?=?XlD;mK~p+Z^hTD)AS+aSIPc*yCqf$BMD2+QXmyF&CgbYfwL9f;hCp?QK$( z@GR6wwqOT$+rxPCEp&*5_yP%sM>Y&>L>7^m;-6I4#zbo*{b)yQnqKG zU%pOl`M+i|`43YdcbaSPlv&)@z3aIzADFyeXg3Y!3hMvApb& z&xi-rghGu0vex*eI2;GYSQ;MCXCC%?liD4sVQoVpEglJ>ceA3de;ZO9_BQeQB zZd?7!Zre#9vV~P9=g)A(I3=qy#R%nRu9x<@epW;kZrHCJr>TBFpc~W)x}vdH%#^^fgfewI6(_4y1o81VYs~>jyMulC6{nXyhHyd)cr?hJZ;{irzZU#`79?u3 z^jgY7QQG37?$t{ZjX&Pdl5J4~vZvA_BA>5Vaz12x(f;iSv`~hPLoUTBU7Z4Q-E)A&y8+{EFs2n@SoRn==fD+bHpSs`+@W?K?00^r90; z3l^DUXM1{ZH?@`%W5kuyCAV_nL6SUgc%CqxHI%d0#ZMq__pB?jfUgmp@P;Q|MxK-P z)ll65<{0VZxV%+w%V6_&#Dy=80F_}O7>+=Y0viBtOlA~p)9wIbswfm1Y z=C#RPcpHZ$1eo>!*E+9a^HJYV7SWEu-TBIRRJ{}4poDcMm{WdSi`Pb{7^pEhN;D-I9U8}W7ZqfO$Lhyz?`IzOoR z{|rK1+ z1bvXJYvr8HXZ8{)74)inhNt|ashltW*it^aOkmmwXGELW=Q`WWk)aX{9O_Mno-DQp zC>>7YmWW|wwA5RSApTSEhg4)Ihx|}4-~mBVKVg+i`zE2x+RCKb-tH6DQ|j3&J4U`G2 zk$feYq7*XQ+UfSYru|YvGX#!CaKY*DzD6bB*koF<86u@-<#@<2@T${bHgPh-eg-vg z>#PW=%%ph@kl3WrBrrdLZkh4$|dde`KJ7}jda%UTr|OgCg!KB z0)F|NG257qWNtzLcyu|0L&i9g*!8gx(ksUdx;z$z_sMEQZJ4U0UDM~r2h?NdwyL2t z!x1|$mheNhVSZZSqK?-Jhq-XSvY9Mp{B}=9l#5a{Ig>@NWao-y@#h$o`TpWRIFpg;<`k#GQoj7Pg;Lmoq=PKjDyV{?>@n3 zY0joymyXnoPGg5;`=NuT2>jz_K)JxWLty_1- z&P{Cb(Nco;$7)9-Qp>$pA&o4Rmd|7%28?hAac6>o(0k7u;i)pABH0|4T(X<49i?GuJ`=kUOD^=7yhXp65JLp z4D^QP$(am1$W-sOO9uDaCCA=-nL@z zCCNt|xO7JHg`RD8U!VDChQ&g)q!FmYeGWd-oFWu}UF*P_`5{`^I6yIr=V$gbsJ+1#t7O)sr7lD! zEJ>uop*MQ99m(^OYqi9s!b)A|)z|4_1zgh%v=tM=7&6&Ilr=3U&PC=XzH*{RWx@GI zx*8G?SFRx^Kz%iGX0?svy9ng{PorBsYWR#M0YO;V;>wWS6UO2`-beO zFa{Kd|M@^JpB}7q>xgot9P#_{!O-(3BAdoBbz#y`qIOzIJGO=j>NCP51sjbCzWTdz z;?-|JexV*OH8)`V-be1D#h&N!-?}3om*2^ z4&W?`48G@&X9j{nKq6uccqQNqg zIDFA%6hMx@k-Tvq+){v5Y4aE3-wDxtD%ou- z*zO7kJ)I$CAW$0rI3a@)sq^M$W_amRXn(+>%j1#A6PM=CW(Hk-Q*ZT_O-?M)F`X3p zo~w*nytofi9UM$^jtJ(AUZLueC(35cJe1ZtCsF)=0GAbk(Mr zbRDofWaEjRPbM3&1;J?Kof4^Q4K9k8G*d&%o4FmCZW(%;)jtbzw{X*;I2V$m$&>ZP&HRv2 zSj!ST&^)@74Vp8j&B)B`*s-#DxwY9@M$y`MH@Z3M+;239DMQ z9@CD+0#A<*200%Y?EGIt6b@iGIK=EOdK!;(KQA^h8DQf3*~ZJ1oA$4`h3>0|BJoNb zj!0bbJjw5m#A?cL;*%)qd~@QcN%LC2m{LSC+JlC+{I*J4b*pM$1|;MOS8ak#YA|E| z1q90E_B@XW3FOjOzgC$TZP} z6^hzp!I2-&;Q0?jlXQ9}?bOM59qr6(&Tl5OI=%==z{Dkl^1 zgBbi*r4*4krNm%blKFHN1sSKq#a5?no2qJfI&gdmC@SD>ltH!Oa7rSdt0g=XotmEu zzO{ZW)2|m0LEay+6HAdUn!ZR%PH|qnR!c&ZkjY?yZf7*sBCkC#Nzh$MmIP2gSQCrp z;BfQXPp7MGe%N{8hfb6@51c5{t#A>X{57|6iBoe2pc&`1E!xpR3<$hyepQqx1FRgdmQQSVy-d3MK!npXkG~ z@0`HGN;kyR9&#{YZ-__U7@(=vku%}wmWCH8x1u5^Kvak;AH__#Fx{?O3ZebT2#G19 zv^NErv@*gnKdDD73v~E%(t2g1bb{_|qKBy>%&2D5g%};__D3G#SW*I)N^@wWjgQVW zC_4C(zeQCk1xd12bb+4LgCS@~Q7!d&>P4>-s6*JWxi|x@Ba7Up-0WF^gH(5r>9+BY z*@B)VsHu1g&tnfPp}gWOn~|3I%vAT-8&;RCKJNxVp$P>I%v@5|nt#2H0zY5n2|Kbv z+Bi^}|9*=63T*`5a6fHioMvjz*mrgV}t;UV(Mx)oKNTs5_4Z8S~gI^fgt)FD+ z+1~4G^jOxXGR#S7)tAzzpCU~8@mQMl4>PUg)tlh5DV2ir*-A8TN7|$#54~-=)UkK> zna`PD;S$BK`S%*V+6x^8)4|6M7YRsL&oCV_x_o9{a~Bm$|FPr98_M55_q<9fuG@S6 z-Oa@RSt|So-+!3Grt6}Ig@eOp6Zk#}rW4#${Gdr(`ogEv?Y_?#MkLtej$lggmc)MM z7emhPo0PM_$dGqW$yY!)*Q!OeYCd;~x#(Fxm ze-^>mlCNg?=_`t&(_=cECU+hfH`Xlb%DAk+VF4S>58Zw_b2g z7;)U_HRsq=P`tgBe8(oiR=t7*P)vyQJuJ6pNcOHGv}Jz2U*vLq#?!8O}#wiR5uKxW5>w|VG* z`y)*NlXEl`*Kfs3kJP05Cojw?U9@ur3d;Zjse_XzGP{F20YV^{bfv0Aq)om=MVEr} zW?q$}hk3PcZ`rTT9XD?}CczRNA&I+7=Q@HStCzW6P59si*X*40V}c}SSm_Ci=yzKx4jd5L>Fm@n9)J%sT;pIHC?~m< zRr({@HB1`8R4nPty@#4>)D25fX{0F@s^bw=Wz(G{%F`-~`z75?NRTE@t7*y)V7l5U z7tG1dU%X7YPLQrGBbwSKiTit?*D;4uuSV*~Cvx^YLqdpElT|d)qGe)t3gtRk;nzlseb)FL|>K^nEdWce+P2C$*j`SoLTJ z2j9`uPEiee=2uupqv;r}EHNL4FqeUPbNyn&AX?5D$+Egz0Ehl3NoO6{X;JAuIDge~ zS9eqJ#Y?>O#u;X9!8Z$kr)m)EhPKWOIQuoap8xWE$x_;=Dot&cotm3Esi{rhZld=z zg%7QnYj$N5K3Ci4rQJmQm6xNsJU^GED3>YxKX{)1Jy-vLg0|DrPXpZ_dsp}CP@*DW zK-vB3gDiKplUGqusz8djF^JA0Z2%gI>rY_rx$_E|Po6}>g`+y~Wb9y` zDN&qZ$4=dA1^ux(SrDJD*mgHpXfYRR?F8WbNLQRjiagfpJubh>Q6hIvwpcB`Y7U62 z7|s}TtrW17(n*JB2Pso2OwW^dTTYps!j1AY7@Mp{;ey7rxmqJcO_FpSQ&r$PH_M8_ z;#YGc9PLz9oAU@rhQB!hlMkA-RH*zk0;r}?oK9jL@nW=-GiQ;S!=lU-E4(eCW=$Qz zlm4T=-cZ0(j0k$C8{0`u+BM>_)P_;_vm}Qmg->{}2inFP87U9n)1B`X67n9xJpHOvDrQdhV{hR+V-J$xmFizmg( z!;29aswUOe$vvQ77x@B#6MWjy&5F@m(XYe})3?G6Exwd-JwH~|0e819neG9yS(1Q! zrL0vUw5Z7>2B<^RHANPL2roEv=DTIMRgIXt5WTp`EJlu^y;*{z<#$uc&Kkp+Ft@?n z(26O7mYn>upe}6G`t93^AQs&kJV1v#f=ri}50Ix#ZR(qEX>n^~d?nO`LDKCWv zLtW-cSczQClNH{=etj|DXQre}V#siNga^u=zgwxrg5wq-EA!s`hy| zX5Z|8-!mQ%sa2*LZ?g2j_Q*{UUk6IWs&e#VLvit#o43S-ItE*;st{O25X0^qn=G{{e)eH z`DC1x)$?Hu9CA3vz^IYXrTc5ygqMKTq%vjSq@R(bgUy70zgb(V{&D(g{S?i*cR1BV55zMz^7^bZ4L&z+i< z9tXRD==ZNqbwk9huF~*5{P9&{6s}Ix{bb2VBvsfnq9W4vTnS+*r*^ub2I`U8YG7ZB z2*-@M6{ilK%YvT4-Q^hdvk&&O@|#}EbZkpC%U+>3Yb&V@$vqYy!ImMNN++}hS>~vX z*vY&1_3hfA7X}Qv8OhEw4IA&@JL>WA`$J3A8Ds25?#a!A%0h2_)#Lv%P5yPX@3zAf zxsyC3oMpVtlsJaW?265QACq6R>dhDCatu$9F_na3DZ3ks3#(H(`tMCE*f4Cq-%}T+ zic|K;oRPJSS6};ReLZkZvzy)f9A|nV0lQ-h>%*aeZRiG{hO(f5-3}K=;sHLhylYCz znGr+@P8Rn`nx{@u6iU5U`^_nAe@!=h*O5Ue+B@RzFf2BL?pJNLWu_KL-T2Fl0d7`# zgqsr;TT2&b$)#!3g!t%c5Zv%7owHuvBhyId_X-S34obFB4nKCE|8T3BkU=|22#Z_k zibweQ+N;U3MM?rE`UvQpqmpnW>@~X3iLD(3w6~r7-Z9xtA!veuvgMq0=eT>ZPeOww z5{0tx?9SSL{>bFsXOE{Tons@)DKH1ZaGvS}GTo8KhM>~-*tRJ%_fHChRgC7f6GNxQ zeu9);n)S7Hpe!+gNbfSeC(o>0&CgB_-1RxKH3;U6MSUp*{9R1!dPI<;BcqkS3@=x9 zPr5~DoV?Eosf1oZkTgmqru&A&uu+tXMPGg#?)IfK2%Q2rHpX3VXpf6-SNOT z8Eq-JlEUB@j>ym|o3Ic&93Yb@LXTV*k^&l2pf@=g42e<&T(SojuqXiZnLT2-lOLxD zI0E68AM5nUN)<>iRUApv|C-QZ?ieO2WvP;=&8QjMOCm>%5BMdfrhIt0yc5to_NJ)~pOxtq0 zIV-867&fqHL6N9mt)D)>d-8iOE3!e3Y0r*}?Bw|inz50}?5A-kH)76Q#q}~ozC3G< zqA2g$CVP#M`6HK4U7|w=*kYyY@)JP&3@roNt0@%iDJx}#hp06~0_|A^4g zIv;>xhxLae7GL$o#g4G^COj9DY`l*W&$8Ar)D|nVD?hGVbU%G-EW@8)Q2e#f&To)k zyD1%u&v4i@t1-@e+pmR3o^HW_O(|1UMbP!`ju9q3+L^HV>R4AnVj)wVYwRRU43EK7 zz2=|{_;3~)q9l;7+7qxewt&STUr`8SlWi6wi&|`0q-awyOkd>70omtTSp z)Oe%V-z*+8#!_Q@BnWWyrP!04P>`pz8VA$543hYRVwCOx!OzW>DH-s}nF;(};rf%= zESbAz3!$OHfD{+nk5vs;rXW?i#TO?w0%*Zz z^Y=vJHo~az#GD&C@V=2(g;)VS`*rsPO-uiHinGw5=LbsZ8r)8oQ*{~6z3$DSdOH7o zE?1*j!x{sjK%J}KseW+sS+Nsm{cxM8h|GP>wwh0wQ%WZ4&xpTzF_#^l3#g{Db*EJ} zj~r4e`_AdSvR{iGM2$r2vk2JGA2+%?avurZKR-BH5pmhG0YrjZ(71T2Y&KP>sK_Y_ zfKTjAc8ScM3QLc}fa~HooV??6{hFK0haNIQ61h=q&al+oR;4yiqZo`_C2y+i5_5xx zdfSlr&NmY(VdhC^}(o;SBkiqcLD`#~PQ-Q7~GKBnAe)>ahx z9@qSe+A8@Qgxe9X)Jmdtc39bH4X=8C$fXMtPL%*9sUIcp=V3KG_}m9_i<>#s&EIpsZSU9kRRybC@DfQlUZ!?gV>0bDRbl!{ICIB=L!v zf{i~9bis41xN&xE5-6j3T4wpG#)n*+P~%}X0y$Rs{N(A~0&!Dwcnb9Sa{k;rMXP8( z3|Fa=in1uU8hp-mPpP_GXvRSK%uI~;B^Mnv!j~Ysr29pSqW)Dlcl0JnZ(23U*5^!# zb7i{BB1w#C1xl41OV1`hSZ@;dz7#~R{I?${H#w~GIKL363X-DvVn5IdpF^nX-SF^#gEZ@k}hZJ7i14B}HaSrHWO}dY9C zxXY@s9?e+AUjHmZfQ76vZ%oAMug!EQKtG#t~hP_>AL;T zw<5ZPImH_rZ+jkbB5a10KnAQ>ULY5gPPSKZ=8BJVj<0P4xs70I1TUChfu5e#MKc$g z+x^`LnBQH2^;F^N~v&#PiHNp(dz*}$g5d9jLmjb}=s zxej=(clPmVF?ja88skxuvFQ#oRW9;R6wS3P2&r*D!hqa0lafilyE?MZuzrU>L3U~H zmo9Dm=#R%guRxgk**oQu>2bnC2k-vbjyyN`|77I&Pf);TaG0LXMt_|IFP#vm0%|_b)l9A z?bFqQmnysgS99Im73P)gDeunf_fX*SOk@1F6!2WP8+R80%M&H@yOH;WNfp0ZRZac~ zAgFP$uG!ig;DaMg#l?fAIP68C1g3I50irH1!odot>&16xC;KC1It7eG+S)Yq$;+DR z`hp<_)=T5$TB@HnK@mik8-)6!vtp{UkK>Ptg!j**Oo+LbkO=&z9wd)hBJVdh@}qsJ`M{ z*X$AuGgx*fxbqb=g{&Ly>NT$Yv8&iq6ykckEwQ1O()-A)BXh2ZfPzzPVy!&ZI@JE? zn7d&7l3Jw-|3>JbbLJi0P-+Qz@ED_U45_6BP0>9wyLDva%$7{VKxwRZU|(&XMq`B) zh2VrHOxaHI5siYw`&#)IPODs~Nv*?c3(OFfYk)5qq<6H?Ux|y5MDKC&x}0)N_iCF{ zvV}l%>m#-&-;6(7eP)^!;W^?j+?tdBD>^{yQ2|p;R*dxc?aPl07lR(5)FTOiw&f4k zn8CVyHo^FYicQPPB}AkVJSlnb09M|YFS=O_T2ZJy`kKy~vZbd@kY8LzOq{GoJ|u&@ zsRpKzfmIbEpwMOqdzMOlPf=7CQ-`|&Psq)5hnrXtDev6s8}c<~GMu|)v#;sNj7Y|x z!v~aG`2_a7s#GiuuDYoKtW51xiQ4&ZiVw}VIMg{W%?w0RsVSPaNVD`LBx49-`5uDg zQ;WSA>eG@W<@`5dpc@HTd;BAN1v3TMtO+MLQK6|2}+7>owDu)it`j*Z+6s)FK zR^yX*j5H+skK{q{A5(=UYrA$B$hsCwqPWyP)zeo9AU`U6CNO8bXMD@2Un_w9;;My zT8-M?BDcfuIu991EL(7B2>zw;lT-tIXOg!E05@Wh4I8z&ecTvgxB zw3R9n2YyHt7C_K1kEdC3ii8jAXO)yq00u>1Dg!*^cHXChW_gcO(VTK7#7(B@;ao!; zq$NhsJ-qanLz5N;MutU0pNu_3fzQm+&eYi`h$vufsZ~>($TWQ(L=qGgJcoGM(EDve zWUx=#l?lO9Tf;w#Bsx;QzFpP{=3)=g@?LvS&z_-XM@S|d8*e&{GSZl(3j-;EF=p?J z0WpLEfcS$ul=5**U!BBpNUlx({j8Vp)J@LDr z8ElTqH-}u2SKEK0xCw8TU}x3FfwT^rMsg|6c*vhcCCgAFQoqKmMCS5E^e6fG4Yof)8M&u_y_laX@q; z1A}@14gvdBD2rYaG&j2lnm!tjr>w~$Sru*Lb7sW8S++xnQC9t&YwA6FHM|T%RNy&HJ6w= zK3yxQWn!^asY*~W85fb8tFxB~>3S%Rgfm(8sbJ3ETG@5!8cRv~y7ixc-(*9InT6hO z-ST9l{<_RBXjT3tX2tk!0f-d}u>=t64(XM+bw?15sFJI(3>Gaj0I)+S@$o_A3_{tr z4ihNy?$9tiNqn4;(GY@@s-dD~tT4i0mZF%x}CYWU!uCN24u5zEUFBy|A|yRX)=+N%9muV9`Jw|vzW5fKyOw<15;O+Q$2 zbB7rziuYK&6g%Dt{agQE8U6mBhDLl%%$&2I*219(ARS5`ua zA;ADrJ>e;mpQ7TaLkcN`IdpkXg+)q zD=iz4=3P8xb2f??!?$im*RhU|t6%Cop--7Y{gf=Mf_HW+Ef=bK3jH(Ipz%@Ucl)D{ ziDijwpXGcoU!@k6XqHu?xG7_@pZ5LIT*a7PT0Fz>|A+KR{Sc1Fh)>yLaAj%w-QrxO`)Gyd2Y zyfll038VXhH}&5sV~NFxTjI038j+U{+zu`JJMGY~B~=@1P+7HAHTaqJ!W?1V;BvTc z{15iMvgZsxZcZ=xmPqWk*NaLfxO>EYy=&2J$aAXP*)nL9bx=|T0-#FiCpcY0xbd@f zxGeT#!}5_XZVYTfzPcdP;NBST2Twrs5O$n<(+GBaA=I%3{fkDm3YX6Gg)z^zMQ&(q z5$ghCS_w>JA{59v?NT>o9GE|sFv9h>sI`Z`lKt70p|9aABi_P-Ha#&)N?k2Awt{ao zeEu0;M}gp^++kfF^|cYYJd|->wo|R^8Y_4B^oZ*%HCa?In~fvm%7puNne%P48pCC? zw*&=igW#B|j{<9XEs^uSTw^<<_Q`&PDxDC*dJ{Z#QEVCcN;xXav10iwZMr9Zh*m-% zqzXb+Uxmfkv7K$;&VCxELON`OK3)hX8XO-QoJa+w>7-6p7VRjh(1I$yv1WRO z)!hoe&{hzqPqFj~C%_M%CFWIHy}#qTi*jG8uKpO$MRYVwrspz^#1XijDMHx|S1GbQj5ieHE|_^IO1DnS*$RlvSK+T=lpx z*a&|ji$rj%Ku}b8Ogr`%t?Wus1d{%|gV$|Kg*a3tMA(=@L~O9k_XCqsJE1}9bk?s(L{M#a~gh5 zcpP|cGyvgS_pWGeS`fr;6rm0T6xo!JH=$S^GSA$2#IaDS>Xz|uB^Gn`soiAr`?vW) zFd4rj3eKT|K5awaDf3umfv>Qt%^T6~R;FZpW1)`bF(Ud? zqu?X0sMrD~HZm-4`VeZ4mL{fzSTerU!DcXtX;)o!(}oP&Xj__h3!@^YDLHlla#`#i?R3L}8Bcde7((A-$~p z5&mW;8WC&(hjpuV^0T7i-1$yY#zVN8k4V|i6N0_{tgY1 zZsldOHI1vum*}EL_Tfh1OwZxJk>4T7)5C5R-1380l3bobdxP5XJY{&%pwgu#iPNrd zZK6Lm6fI4rH3vb2iP7tgydUN=(1BMRlfs-YK)hh<&f7G-s{5i-#SCSEf=rPpV`Z*d zn&L<&3k->zMU)zyc%W3mKUSRgl-NDl{m!G(VJ3vcvxnyUbuXtsZY5nAbI1=Gb6v-Y z<5|}=`mey@hL1d)soTku^c&iA$1$jJh!++|B3@Lweu(!f9G3hg-R;P{*m)(AwXlA=< zTl0D2V&bFo(bbIluoFW%9UH!Ka~@Pl(nlX*SD+UGaA8N8#KQx(Wu)Uzfj_~i1X$hW z;2%~q&!^>6-*QL24Ttd^+Dj^1L1bQ&v@N4iF*MGXi0a}?AV=!Cx1$#&cwkLZcP?uv zKKfZw%dok2f01=RcgR{}$(g-^=*<6OUWI=_!NgAQm!?kg_-E;d8u}5G&jV37JsrUo zdnW!MKH%D!VT^?@-aj8_#2yH33_)cFBmDsFwi0w%${N>v z&TYW;rtM0q|H((+Y86$)Z+|MFP%rB-hw-hh@~6fZ$Mvdg4^0H`gL{SPyTeOja~WQn zeKnQP^zFMd2_jeL5;i$_VgZSZw1|0?*OvLmxJ)-j0vuf48K(q=UNX|yKIhgf;LWBL zjy}FddS={dPkk}%|&C0&eVkQn?TC)5~HO4BN3}qwWRU-g-s4ibLAD|(v`%(scOf> zi+*IpP)7NwEe5g2c9;>1pSl~MmXOQHr>O0H_Cpa7M0uy-D0PphIqO~dr$5i4;2ljl z-&Xt7g5A{1uA&pi}kWZE*AJ@ZG3|Ar{^sKr;Vw!1K7=#=^C{v!2=gdkh9(Z^a z!WccVI!cA;(e30qY?~{+D#surzDy-w|zDV$Y?+wiZa48G4D%@ZOlWcpNeYF9+6I>8Gf zFCV4(QmlM39+jFp*kUvMU~XR;&~NTOYCK|QA}Lr)Z8I`0cI#}=&O6Hdr%2+wxp_aK zJDwCky=ilb^yKnXwXsjG@rWu5BMsffy=03U**8MW*b}>_odAij7s!pxc&%{tjBuQe zBut1%-()7Ad_t;?X|zmpU3tew@nP_EVP>=Kj^RBdH$Mn4+M=Y0U50IzG`|Jy!J-Iq zMJjJulJ_pEt-nWjv(l#6HD6E!?No#s2slL*&lh6KP6adqrI>U#A^t}yH3ZjfT1E2fY9egIh(|!sR?Ti(?S66C$NxI5^IuS~b67k# zMf0?Crk9_FOxTtO*)G6R>=!QD;z~qt!r6r$64qHrg$H2toJ27>-MRmS zAxMY;L-MM>5MzS~5fHoIrhmTsg?sp#a>}h5s}~`k?(qTN-knd z_DCdv+N+Q-P+6W2E}*$g?u*(NwMpHEWQNc3>m9ktH>+kyc-T;k*gR(0+42b>CrU;D zADk)~a37 zLv5@Gy&}=W+&<)p1d4@WPyGIFZov}b@w-kz-%5HdN6PA8v%=V1-j&;C!X)>jMc|kH zu$^FXEF=XsQ;*dm|6L3w} ze&&WOT+erp+^T)^`MEhvIj}22R_dwp3h)|UV+wW>w_g+NvgQx2AQF)}R%1CCRC11s zxc#rqV)_>pcpY@kU9?#i>wf&>46=OM{~$h`o(@~Lp7hrV``}3#B_ytJ&%n5)_JNrq zh*BmA0&=*pNy!MJm_UfZUXpJ+%Z?2!Mo=#-^7HZhvLl(m$ZY6lnWFy176TD4ZbPsy z-717+R6F2|&&ghzMzPBvkr!rf6Z3MRpRYs)Z=l<+MT^z5qNeypcGEA z+=RzQ3>G`ZXJzs(i^ykUePK{dLZ2Zc@4Lo!S`b>R4*%6A6>dHwcF@4lFskF_F(paXI3_G)H$3SHUU5t>koWeB9NOxzA2N*~z&Zn0d44kw|GKl= zY)Hy4Z5g;}Rc~rW#`BZ5z07utNmMleGru*=_`8>4Q@28r23jbTNx4UGiZy&<_}ulg z-bXn$7svANdX2AgdC>Se!i{}?ogH7SYSzAt14==d#8~zTv{>c(m<^JHuL)HRD;;z4 zV<4~#t5F@rk{BMhpkdXI#(|Jvkzq%9g0=W-5G=P9W}bHUDE_S7tbAXT*U1DS1jAt} zVbA6Kms~+U*|JuXatV-_R$5^Chq#C9AAVhr!s;YH6_BBMW^K!@HaoJtW>>tH5>F9* zeL662Aur=<^DOkJ_Sti7(LO5%elxUY%aC)gn+_~@){WxDW8!&(cKI-H%-Hx(6EO`_ z()IM`iONJxzl~Uo#xLxui8)N|Y*hG-t0g|n708k)SEqfqtI3$%d)K&cn4`HlZ(pmT zVT`F7(;3vl~)Eo^p=qUm6@QePd$m7XK{8Y_L9D!i!G5XYHsb^H5)L zvXUk#(Xq1BdR*$7@j-XiH1tB8kw%|K;QoFKTkO9*p7B9{_!ksjKb$^jYIAM%q`?ZuuXE#)=i(QOlOZRF)dvzLifM~1QgCDs%NESk;YdtMy~XGL)tsLL^z5H z+~%Hq0(GIq8?5f&|T_QnoYe%DbD5EW@VzycUhUF0I}k=?*X=yzS&FRF15 z_kFk&|3UlAyBcRMeZopy6P(rdV)f$wx=59J}?LCZCye= z5+}-fDGQ@#mEzXtCmKfliQL_v>-}qLR~HKfT0U63$j+vZf-dv>x0ORTolNodfi+q0F)Fb+@yj-Mq-DX)v%dNF%^o_^ia}d(IX0p}lS}ex4-h zX>bELKG`f`1ij=i)L0eLs#sNZeHgd&^}LW<)+88 z{pyYUZ4i10{Ewu0x~FVNfB2&ChE00sm+DVT)7l^dxeU{PAm?gl{Ayl&2_dJ?ldnjW z&X&h{u{xN>F-hM#b08ZVC(X$~BZ}gJ0{fIQD#jKj;Cp8AW>7W^=q{=k!N)31!yqQK z214$I2ir7X0~`=v>PG-iCcySAJ}V&=A1_gNAzwn3c?64_azu6+jjOnea-{uyt@_eNzX>k_ z;PTzBSd5lslr20uQaCvSYk6It>0<;QCzl+@-c1%l)Xh}0XaY~K2*xc&iedyw z0BYbrXsR?VBhkuJQ!+#Kw0u+N#H;05=J~H9{r?wX@&EA;|AIn*!@@(F!pSy2^viRQ zHobqT%*BIEVZP1&u1`(~OWYBOfp4m2Df<=gd<|o=Tfwzqxrj&wa6s{hqOtSMJ)OEP zgtIF(sLe@6``v9u&ssL~|4jF1ET|)$qHmXd zR|nrMgWgtb0o9APU%mhKgCZf$`GW^hq?nnZ26KdeieDCS4JPAwEK*hdcb+5Kq!yDg z*FJA>ftT|!?#){Z|Aq+wAcGo`u%4o}ND>o_pUtuuSHPPJhH*ilB%(H`T~8$fPrNP{ z;?KW`8IVSw-!B|f<;02;T72C9=qQ>#f2-w)ueX3Qyc%oA>(M`IuwV*DkPA!lv&2rr zw>Zd=1d6B8U;XxWiD~cbh4X9Vy1%>o)6bGH16o**!kP{5(lR$3Y62oV*LA!8*i6N$ zA6gc-pFT~w{Hf(ih+gTe|AI4@Q;F<{zLBVE>!ug(rGt-azeP>Gd?3n?WJLY4js0at z(`%E)@7&mhQP7;{2~aI}5V>7V)YL5+nVlIS+!k4c zz@Y?`Kq52^FpAu(8pJ1bEubXX1CPT#(SPVp7|4&HMUmDsx~Q=ti3z?hrOohpm5fnI zGmPTYc(8oGtwD!780$Mp(h*KAyssC7WJEhFEO`@m9Gql=mphOcUi_ldVyx1?PI4YO z5EV+UrR=?K3$t4qlMS`p(H14t9`HC(-uPX`3u!a48MC9jv!Oliuk+Zm2*Wa&xeC}4hj|*K&71>e>)dU8G6>G*4 zOq+n*zxq!M5Y3>JCgtfiV2FE)1L`T1YFxlJB@h_d)g*#k%ki(lU#t>GF44cKa`%)GMI8mO9aSE(?#kOt4y;7vtr5$VP zX2Juh5{GXsOneb2r!?y+fkJE?#%zdYad#H}b zU$HUjk1&``6pfP9Y_c^n^-ThI|g&se@x-NEAp5WqukE8b${pwow)9B)rJt zsbXZ{>NUa5`PlQ#mCbu+L@9Pu_A!U)-EW6KJSM zNbH7W74$4qW=@=s%XHGS4;SBj3eA%Kv#Gww51KN9%cyTgZG^yTH0O%V9MMhV@0Hc- z;;Ocqv1&(Um6Y$rmP#eFVbOLx;2=EF(+OQFTeT|%z)W#fw2=JaUC8tn@Cj*d(QC7% zrlHKD1u{P4P>YGY5_KZWDfgg)%w7Sv7v|>?8vGeE`ubJd0ZuwBI5CtkyT>pOLg~IT ze65#kqoFl5D~dxZO|)c$YNVZ#mjp8uSjh|oR)$z&DrqCY_wX!E;V3n;yf}t8M}?hf z?k7?E9PcP7kQ8p^@IeagO_Q`geE!9i7Xzsl?7@&*~kV{Jms?5D1_mYwT-K2*{5 zNz1f+;#1RBI6KGdA_JUCy5khA0CGMN8?J?DWvJw4g4jKgZQ)Hucj}Qit765T|Xd}Z>E{#hu*##eqX3VGb{*uVkT!|hB+OM z-WNgmo}i817>8RRSHSZ@Dl3j|V-g+{h4u3+^=%Vt>s`HqZRLDZ_Z&}SqHTkA)E;+i z&?(C(vybE@n+_8W(}7GaC$xr>$5i6t*|6CjF*5QEpuRW5B;CkprpNH*Qm+m9Kj zZQ+KOq|fO5{uryu5fmND>^{-y>>iKI3{DQNkli$@18?-_B(5g@RX3lfuZ+SP{q-fv zS~YJBS|0uX2a517xA>PSsM#;S6x8Zjyr5%r2I;WjK2*WjT-ZvAp7d96GU6J?Ib=Ss zOX!`73mvAey4U@p91qp!W9`i=vaLa}=hhUJWG`O*v}hA0|DBTZ zXl?)yZsGk=hEVf>ch@`|w zY6qxGCXr54MSf+|GczPP1a;cb<@ah zu}{gVB@!Z^Dp55c&Da$uP>(*6WNRbiGAA=1pvhR&8Hs=TS<6vY&m$KVCNbB4*_tfb2FRP%y(K~Q} zi|uQdy?;H=2q}#~tln$C=}0!yq6Gi`jl9}qdcDDlr7eZMKUn|(14YtnY_8HOFkFB`G{Zs z;0ZC-L+g52@={=aVdegEeMHj_Z;}>Yd?Qvdanf?9U!|`MIl`hRSn;?9EcvTvz>(0g zQzAFH_;#}c-wvKtB4DjFcm7Z&*7szwq)EDr&lhe=Ltm0huCI_*RLV0h%%dZD0?G@% zg&N+j##sbvFpreNGq2kK@*^Zp`3>RB?O?#~%bxg)SBiIcEUc>L4Yqz0wpvfuU}alT zw;^Db|91Bda_`a14X5%uf;3xyRnN`8cH&O-( zyurB;C$zwty-Z+m=>BU{>8wiqb$@68N+fq# zAy!mm5S!SVN{<0q14BJQp}_w0I-W-kSEotfiRy$WVi|}dhw;xT@lFTNZi?0V`U_gL zYdFotp(PE-cxW!_3gKr?qF>>t(EJvPl+=(wBZ`XZc3HjmHqV{B7b9P>BIiufqW-&- z%6~y2&SCMFpq<~WD;@JQkQJ-eC^u=}`x&yf^23?F?>Ns)RWKMnm)>!FtiPBu67r)q z1?VTCr5(3eY+)D>$R<_XH`<`udHOM!Ua2#DO-=2JEYKU4A`~zwYBYDrbEto}#mfiW zt!N39F{WR!k3I7#t7*RplWj;jZTTg7X!}hkm2lOt-f82&CL>gG#4UX%xVmOnft`$r zAi*(oTtK;ID_GiM$%hW5DnLD2TUJl)@X(gd4oVSZ2$mx$N#@Tzg0_80( zV<5A4^pu1Vy}P9(j9k4{Q6j)@dVCFrHorT|&M#wY1Ha_S<1eeif2jteiueCSC{qOs zRG+Cv?5)Hcp_BOur-X3rRm-cXXz81prm5k;fp0l{vKxQRYRo{>-w_d#fYfjD_bauMl(lJ3AysUg?hc9&FTHJ0>B0U0TKCA(X=Ay>;^#gHa0d6 z4r$b)E@TJ`1OWwyqyYhoA*#CM{47H0i2h(!J56y>StRhW^6sXJ2r<{W zU&gcNQhFa_af-IH1|R zxQios@Z7?rRG`E|omi%0b)Qq;X3%AC_6k|hah#RxOSe0#JAk~Ri^pf;0k=Z02KKW=+v0rNt z@3i-W!o3;9mLD=!&WgO&vmVJeB3)f+Ho{c*>115(XYc|>Y2x!IsWaq5ye6@!t)Qjb^A~bD)F!ea> zTsyjW(rHlvcr}b ztmq-%y{B(*3sLgU&Hx-^tU08VUM>tRqPBIPT_{V?mh$t6+m1mJT!iGMPE z8}vs?h;2tfxhuymSUplc(1#;9I82L%PL~Lfu1I_0P9BpbwDcmwUhEs(Fd3Zh_%=Ev z(q)q$Z)8=eYy@-lLfhvmbcg&ymp~cts>iSK8-H!=5P4gsJL+oEG_k6lCKDat=@5U|00#Cj8q|`iNJWROdXS2#H3x{jS1Eo|FRzy zj}uh9k9}dO^4$25?_9pyQMJi}PV@y%DpQ5)>|_3c`vCfBuSyCXJEvZ(j$S?v-Fvt!q#HyTT)6o&X{V$Avc zUP{zOz18g;#(2MRmfO-c+p2phBwCSSS3RiR>m;K`qRUiaMz|RquSUvL(#m6fA>ZKb zS7jn)Ud#Hk!PG7~==LyM_d?h#`U)xMC`WgeokQYc#o$VA4%PX#V2bgSvhIZz6G8{g!U(TjY3BD91wt_ovC*AqV+y`u0wAlWL=t6nK zev@afNdq1xZ$`+o)H;r|pLS{_ykg7%WDE}MeSKsx4nS#lS5eCp-7t4*leW|%rgL$eH|~9$xOJ5dHshUJy%<97J>QqIc9Qt&x1V1! zr%wlz<*Q*zmR7i?o#XYDjJV6&7g8(0Z;X?#aU^ue1lHu3^l1}Cp7Ax*2_&H`#~Zx{ zjLe}Q%zXDSJIYb9@*~*&k-oU7V?!q#TAMUw2u>>nCHNnx0a9OGeLriems#<&uDWNlI&Gi9W zK*5tGZX8Ia_Jqh0C9q0^yHm?>O~}$6CKV@^2FoHWQZla7fzLRxN}8*RzMkFSt`{hz zcnq$2BPK|dL%z;j=uZcgZ7_VoZquTa#LP&g1M?rsW!9_wQSX61tGLsd4*G$SecsaY zUS%c?B()x^o@?fV73M_7D8M&C%{?3qf>=`<*{`;{6j**gIZbuER4%vu@%nRpTr0*q zkH3T6=54Uy1Q!4R4f~C+#hRTwV0RGHHg*u&DnK4@XD!Ud)fYNARi#ND#-qwG15kSc zHP5N`cZSsC(e(*+8z1C+_hfczoT*A_`hJk$Vh^M{7R&|fa}hxui|fw3(Qqbv){EHg zMHjWIzGLI8qX|klWpkookm(*TiP8=0gOXBCPiB%5b%U-OL8y1!FWXqK-WG`?Zw z`?AL-t{P9fIdzt8(|b?@&+(G(kOk^Te{y|Lb3}cV8d=s_wJ_xY+S=2k`g!EXCY|cI~2Aw=^m$f>a7vGyZ(92_14c)K* zR{Vb-%=GW{ko9c-p&lxCdzP@^L6Ky@EfsIDi5qqkJr?g1_Q$Oz=^z0Ec?fQ4e@`)p zs*t1u+(jkA-yLDS^mIE?B_zn2EP^d}G4P*6F4glst<{>$hhQb^Di@#j>n102;j4G2 zjl#D|0)|2TrQN_m%W>8^WPT6c;>Z5$z1yz}EfppkMuHJOvmixkJ6luTJRO)oNfLzy z4+}T9kmG(|Qhe|fosYVC8Gm2BuhGvXLovso?4$zw_)iUs#@mm_I{o8+1uEa`KqcW> zE6Ss3>x~fv7XdRH9mbrkG#r)X7OzMt;6a_|EVro_9#uzQ7f+yI08wT!Etr6B_${ej z*8pz9&icnmVivS*DRzY+(h~b`SO-$!Xfhn^_|SH&+vJkq-NvCgy!_!JglGDYG1Ca% z^}=2k^ynrl0O-=d0%@TbClXqj;h%%q(>Ttqdz z3$6({!`W|NSUr*6{xv7*|6h{f~M-x;TlX zewZ3B_vQqT&U1>4eGV_XB6DN^CM-($f_VC=!{^q@^Hs!nd*!88@#*U)IWgnyvR;rR zc?ETt?%0F2LZv&un@nCb3^d@yR~SemA&8X6BV-0eEX=4Hi)P|*3Yn>^D8ynjM-Ix) za$V$~7} z_Ysjw^ts&TW%TqaEm_<+*xlNpfR>Vp^UUzvRGIX?v&(VeKV!8zqkE@8gaTHN^(Q8= zYC=r>pJVE|3tKRi$G(q#35pRqjV}snofIWsLW{c|`8~hfcL{ne(_~@$x-5yrvI8pY zkqxQZ!eFs@;i+QGhb%;Tz>=);!J#arp+Q7yJO#Vsdd%$iT<#Eo(liIkY>DFBi@Q9j zgDpp)H%`nnB8@V%R6eA*Bl8IyWqOdvV(@9bqqG^R@Zj$EUTW*ua@~mLBomp-)Fl# z%~4z1`$=lBqoCxB_gWeWYdZH8!rDha{a6hEXOLtMzQ$F@P)I4De$(unBqo)s`^wL` z@|>)_8vNHRM*n|FmH&W(fXB>gPwzT zn;!ysSx^#elqJka&9|x)M*%v#6S8LwG2y_zUh3vQao^oDowV!~0gA^mQtt`k4( zAEzgnD*c&h?X=s-nj$P24!aCP0Mj*CI6Bl+s=q{yQ}JXHz^rTsmu8B^tm2Dbtv_0% zUwH3%p+EGn^n=xuCgt5JPX3jU<)gHfqWV01)KE@g7aV`C8?R?#4(tFR=G~3X0R?U& zXvph~hx7?0A~Oj9`Y?@Okm!XYw7H}CRAj~?YD1!QNyUPoBD-%N#!F|5i}6 zYY^k~k?u*kr#pW%x+6`s`F2hq4B)3mYOug(^)lQVC_(2#?9@$L)&L--^PD8L!%Rcf z{ZYQQW-$Q%6LY=-qhFu&`PXGlte>7Z5Y_0-p4LsWK17#La4C^F;91Jfew82~;SrE8 z2QeAVKVVu#Sn+cEgvkV@lairI^8)f&sx(Lb2;gVo-)p5_cu`o&Y8ceCew)f+sE$um z8QVPUXfwAQ#F@ucpYN68Dq^r&MTP^ImFTWNrjy7zrky5u;GRZRR$&s!!uLij9ofJ= z*0zx8qQyuO{*hf+1I$@|Q8ca1ZztMX@28}lePs3%bN%5wkE`wI71d%2#Vk6uBVwW| z{gk*}>r-A117&o!WvM8`TnfOGjuynM;N9^GLl&t#M8JPc| zQo15wsZQ*B6yE-tKUWH}4e0^d7q-N<*fI?fFbRUNBMeL_v`hg^M1=T8B?HJpX0TuZ zfMSeZ3K1xYF$o&f?SqAO$tARzjwDEZAIw}fZC z7(U~JDCP*{*smBQpUs_#Bg*78iTEjqgGxXP%F5sd=0-)DmfI9edvHeSUlU}to*!cYufkEfN;BF4szj(c3` zX46%Mv;55bm-s0B2VDFE3e~ruVCdR8?z2vPyEtvrej5+vm{?BLSNys9Kb8VNfYlcgq`0h*zz9ZcQU}2RSS)S=9YJyetYS>nX?eX9Lgl+CR0dFa||67>#cvb5A+^-ozEhpD=s zQVL5Kf~xu-R6r@VUQ^+R6(W~H&T+CT(Rbu*UQ4jv(! z22+VVrYXLU9Gi6No~xY~v#%k*1TTc*AYTf(Oq?LN7!nvnHSi0>$4S-EBdwW07@F#u zAAWxv#HQ={-F+kHt#ab@CXtN*UaU@;C%1 zQA1Fe%axlmiT-Oir;0`(H(j2DN)~;dsUUseuMjVFXlb`CQrgk~9f;ruBhn!JR8vja zq!;FGhb1*a%mmzv2wO%#seXU?9aCmr-bkX;yJeF!arlmw)S0<0o70V)5KV0YdsWnO zS-2cr;mfs87npDa5kD@ZRwm}iE*klcS0~PHU*MecBele%KL(F4?kptf*Vftm%k$^| zCxiG8P`Cs2&~;AL@0+0rKl3~qw`IO%3XX|8^KEXPQ_Y=t06aV(-ddvXsFyI2NK!`! zG>n4jfn-St9*HDGmCoET3fakP7Eg2!Oc)h?SeZA))fszfo*wEJZp1YF?jein$Cuu* zYUt+PD{@B|VYCW|=a#%Y$q#aWK9ZR8Cmh?q+d8zgZ*5T2Y_;YPkLqcCq@~4y?~Pl? z8dL`YI>t)<VrS&O`;#P))L}-cPlz!Q1!n;PuM6F7B$ztF{l+ZX0a@p}* zTwg%G3w)Pg4#FZV1S!zZb|$a9?rif0W>BK-hMwdFdlt8wy9#GZkpF;&_KI~5_!Qo^ z+A>m9iNec(ja7hjknf`&RGJ&rOOsHTTU`=gyG#%h@^j6%@kpu?vXuzZQQjALFU2oD zA|!I3QZhpIcbCa;;!@S}!P9giJ%)&t?B08v43~eM+s5~@E_y2hw*cg-mlc+YrcUGo z>{?Tq4pGDT>7gCKSGhP;6n314wZZ5in*k^IfT$=PeYC_gFBB=`1xBsk( z#FubC8^s5T_9V z^khZ)?3Y>Cz0Py^5ziHBM7aDL?K2)w8E=X|7Zw-;>&P%bWtPgjZgCI0iPWQ>63{)! zu?zUU@%w_L?9g$~_a~@%FCk~i(J^f7123W=bg|QRDI~O>+lCSyg9iP*5;{Sg=HN z$R@5N@jCLHK-65HJGn|s0tY<+B+a2qgS?aYLiM}Us%W58tFzaGUjuY9$fA9_8*QiA zUt-_#;*;^j-iYQ9j_=0ZC307>f>yGFS##RwOBV0N# z{AdU>&a_dXf6qp?DZ^lo%@3|hmL@JjF8uThmkwM)9<8D=#HTvz%(+qOB;Y(&c(uI!lLOc>Iy zI%qce_^nt2rARz`X}+~i*H_Fl=a!=n8Mx4Z9TL3Qa?=6Cu>KSURi>@i;djC*QqPTx zjU*pq_^i?m+lfemyRctaFC{f|^#0nc{+4ywvux~_sqV|eHohg1zEteDw+88sm zwuAhPRSOe?cTG`1`h=m~kLIIy6yMnwoI6@0T37RPx1E9v7prJPA_eLn(79Bkh%~CBuQo@*>x|)=L~6{^Eqi|sO)EmvuiFh z@6_xhXqQY9v6yBSmJhKANSXJ1s}-82k(gy7R6&6U7^W>e1FQBsAw>bqg0~iu3p_&s z(beKWN&?p?B{CY~D3cPu9L&x0Ej*!UBrTXEYWR(@8WY}TBUb=Z_GI3+-88E@CXEn> zGJQxvXsS=Z)8CVPIIg&x8A9cKJ^pcrpfA3twa_h3=pGY|zUyUoC(E6D#16LsaAIYG z&WTQEUMvMqr}eHh*kGTK;y^rhT#Cj@vB5G>^s`($KpbKjn8W{|B5;T}_`jY}`~wPD_n8wb-H6FEGBM91e^&bf^)qD! zZ)vFD?;HU$V(kYRuh%qstRC<~UD7a~SOQh#nx43jS;C6McofIHF$GbfFuxgG)Irmx z$vEC-P$p)@d+4TrJ%DrfJw?XPCnEIJx~-I&?pM^h z$ch=B?0N<;k9AOxU!JgAS_f*Cj-Hor*FGK54x&hts#b|+)Tfw;s`gr+6LDw}+bYw* zs<@z=3bU3o&G9?NXut}bQqdfo+LO>|FdaW+g?|I$1Ub7LBaLv@TtK^g7cXx&^VH&& zm9|jlxhPb=$4{&H`uRN(?P)VuAb#GcTUHQ2n=_9{wSt#N_t*x&CaT7vCuqd2K;sDj z8#RL+ATT%D3>D5>E^btW(M1;f zjrG@b;d2=V7!l#ZT-(t2PQnCDD%TV$hEC+PFX=H2V512T{g$^v`pZn#M+Lx@!^{V*uGmJfMw>;y8+z z{a47x@Db?f2GqAm$5sFB6J1mM=DS&`JcpN10ihc|3d)Z!>EitEh_?=Tn^eGp>Q+Tp zqwkpxf3e=I*`PwC_|s`_2a|vCsihf;W7Z%ZMwOQIn8`s@T>-I4tavlmwr%>dsd=hs zGjklmSPUM@t}_ctqaZVyx+jak;9q7S&ZD}=VoefA+t6_?O$m{)H1xwU(HC0jiZce; ze4{6OCWzl&7wWU!1wQl{><%mv>zW6^V^2Evt>aD!qG-qt1WSGm_vYikn#G;w2?qF- zsVbjR-RYQe{O*WS@jdk{P|e7#SQO4*wC(~iDmdbRBr&+_vpi_2+-FyF$(A|_6N zy265=O5{#K0hG4U=eHE8^7VAFZ}|3biA@~wtt4El*Od*hYlQ#9^B+*iai4vpXHa|KbL1I(n=Y%It9~Y_;H}+q__$v3 zF+OjFn{#-Qr~J4~{t!4u54WI0CkQ9_0*S^zr7-H_g=jrSX5{U>0a&Gd&D2Dd!uqD? z9X;mq2~#APvX_@88f=B8IG?ghV{v#RL2kGt-tf)q!r}n?3&~IFjQ<1qYkhd151&f6 zaunXCQxSgZ&#xpn5~hOojY%};tTu?Lk(cB0b)vHexyT;d%&zk|cPd4foh#D~0T#3Q z^ty>0i(r~dA;OoU+Cf5zl^k5$<;JjSv#V)54+nT$?WxDlkiF~sF^s#aQRWL@C0B@2%`d*3SyVIrln8Tt z#yCUNBh=mJf{aedYUz$BD;y|hz6Icq5NzVPpkgB4piHfQH&+c-+=dwxCxk9SVGT(i?Tk!>97FC*a z{661`6jD>)*7M^4MB{<`npH)@e_}|PQ9P7Uk$;E#oBGgE88K>CZ7cIULbTt=Xhb}o z$jz|nrhqs_MLK$zCCIl$Elr!uPixy?*0`;?Ej=B*LR|raFj6o=}`>ML_*sg9d;jER2FKEF-8NKK7M>SZ2u{qwX zO!Rrt(3=<>nEyCZWiWNXBj+xEdc)TrN=|q&NB<&&=Kli-{O3>qfP#wK+#@|%n>F8C z_2JZ)!}_`M+3o6s#=mb)KPEIqdxW?zYIltaVh1-hop~tHQ990GNAEnzN;cOr7GwzS ziFHP+2-BB#)eMt$FNSsar|!EP2@xuzFVgM^ir`6FXp25w-zAJGwMr@v>Xua>ZmwC1 z9nei!Y?O(JkM$}l{3XHkRN9ps)nQz?Rj37j;6CxQDw&@7UZB%JH@Q#&Oi51O@ex0z z5T;Y+SNN)ch5D4Zu$Y_ddPm-zHB=`c7DcM})2?Cs6@n#xYm@*PMs6~mqxAYth2|a` z7})CX5#ut!hE=%wtGAQP`(;1SM|jb*fLNXBPUTQEic6mfZJPm{dz4?w4Ty51F&Bms zJFbVygIqu|;OkYG;n+}ZFeFY=DtB~A378Mh79&l&aP}rCTjBkJ?%(FCY-2YtN}QOX zr}Sjx%t#_V5Y`!(*IhDn*NVn$qP-rpYAxOR)$GB-*|P_GUPuo!imOZviFDZ+Sk^v( zxAK^Ai@y~L*iOnW^kPiIIrwD39P~7?&9L5N#81sH=OuP|%(=Sp3E9G1s#}?tbexo) z-NCw%JMJ2#+H=T+&al9p<;fFH54c@VRw=E#pe)>E;-Xx9B+S&#jx+3P2Yl{$4a%|N z6Gw#jBu|dG{p99@(%Bp~@9!$$ zaO%@I`?Dwu#l(^1X!mBx!6ofEb1QI0oWdh)1XB zk}~g&-6?(Un`B_E7g%9BG>Vp|AxrL}ty>ys7CB*L=I(5EGP4Z3z&>f_?k=)g@V8cf zR6~F9DNC7l`6!lMRKc?8x9IuqZb`dnGd=48E3O{4zj_$=cR-Q90%W3u$6 z3;#lO;Xi}Ge?I>+&=}=0^V46ydfVry=--$EY1u7PklRU?-Vf|)mLuTKfQGtfxzH1X z^_YCpxF{B#xry+%FoboA);e`6uu3+Ar5X)WP^qw4Qi10k;*i~gu20^PG3M~Omv`LvP}#(JX64k zHG<@;18iC|YWGHr<=pN{Yx9iDZa56~6o^`$(u=MDtZJ9x17?AOMdJDclvU z11oPb76bs8fq1!^kbdB)-?!FWF>;}!Ey ztRg`KWK2kW$2Z(z3J$taR#Q}D>=m|Ycl$UpYUwDUV(3srlLd{r?RaD;zm6q^h;bcp zl=ZtPNb+DjBe&P*ohymwf^al^0wD9W*TR)v2CG|6~ENpUc#|1_-+9mG2w7RF3 zOdCI>5!V2+$nV(*c%ymKHnzPzY+&ao?3|M~brj85ScmA{OE}(V!=3$jnMNmNqE8`d z+?L?AUDA?C_9;Esm-nz7V&AG8m0;ZI=0Z>7!{OnE#&XA=OAX~(snb7^6Z`2XxSc2H z(y`Tf%5o@j^^rg%;v~HQ@xQU%CN>9;D5_+K}e4gWN(l<__`0(M4_?%g1Q# z)hE&r4%6bcuzR$+l}~BEOZn^~TeNuY%&aLxA4D5(*10J8u4iyHXmbr>;E zFsHb9Q3r4#@};v#`U($ro**lDO@={4F>y_*S#d#bxw`}TM*v6R7~URsl6dh?m8GtC z7fxf#dI8H_3tPXu&K@i8VJtMsfhCEGXXTHh-=(lqllJGa>PE?7eXKb0Y`hFu7_itB z^%Gax18v{plIPHNp8#COyd@)*5P`a@+Uj3|?HxLc1`jOm;+$P*o3qtE{@vew#+OCH71PBT z{#>xJHJeJs^b0QrFA5(O+$xxpBpU;njY?ya;*zRHF)={^R<(B=OSslVhX$63 zRCPmtO{R|@Ec_)N6m|R=>3Z6o@7pq9i=%hX2|A75qsVg-)6}NT7&(D+9lQ_Ha!=N9 zeB6)THfYpO_a$N)`d)d zk~-!OxJloT%(F%G&cxN5wuqxtjYQ|pRmo$m%`v)q94AE5Xb%ft9t^#9_&pnGFY+8q z8n>zIz8ZE@9;Zu|B$kP~Dm*y)TMS9a@S60OZ#p*5t_q)UI?YP`Hd-YLNH4!1m&ZA+ z-yih_W+tEFWv8hPU~sM@bKh^y7B5?3REy#wx&8$9U=v79u<@xKuWGy(b{$3!@MTLK zttoZJji60Nu+R%Si)G1(ZnJzGJUZ}EQ;}_cL5XgrHEKRq)kqUTlXmR=9Ns-q=v1JT z@vHPA5P{i=1*YIY8g#(<(wZ_YB9bJY>8KWMKEIjA#>5S zbamq>?xU#wFeDc--atPdoh}s>`D-Q;h6a6l;Rb_&9f4rkIIlST-w)qeW%@NiSYTzk zRF)b~?8fKH+h7y~WG`WK_SKYaS@d*C#);od)Qu%Yd7d~06tl-lwRJMW!seeS9IQQ% zVx6vv*M97aulI`8-C4)(JNjClSP)1LFOxGRg>QEAjq9ZYQ^~8%9fEw^dbI`RW%+w{ zEK5uClu1ihFAQ5)<9I{Qhi-~F?S+~GI|p?Shl8khakeeicG52&RSAFRTMq9K zJ8xE`Rh@L=75QG{(EU!zPQGM^>`IX7T`myV-za=Q@X?`t<~~W#P}vKr`ETG8yQ#G;=J3@^0qRPlt~NaB zJ4i*tdQBE;^cC?%-)6YJwB5k4P?1?W97mhpWSV{`GCUY2L6+HeeNL49q7XY97PZ%* zQzbs|nzKgqGVUw!-I^~dc`r}B&7{1KP&psG2rfkKxTA87fjYaD^(PY^?`>jDo1rd` zJv@r2DuIw0DNj&m&7;d#cHbh2t?wrgrsRL_CcQ!QaQMz7ZWZ))Ka~wH#K~bO_f&nfQ_T+LA1 z&UybtcN%OYM9U3${54mZ(hz7Ew~_-=e_O0??|VIQoKYdCs4QGu5tH~{#U`?rH~E!e zoQlQE?)#6-@o|F%3Jss2rUQ8KkFC?aT)Ali@$hMcf%)3fFgu_qOH^7dUoW*Wq|zeo zv$w6ymyI%RhsVAfqNmNTxnGLu=$L|R z)sj|(c2VLAT{X$+Me#ZwCW!r^tz5pfc?*sJ{&golHaJtdB)6+oM)j;C8JGbx)PywI z2}4>b!D62>w0{_?Ezh`HX3ZM2E&W2+!0#QWU^HkLz-re~J?EiebPSV)kIW|IY1T+- zZ%`K}mibIyk`P9u(rC`8#)O1U3i&&Nu${hbtvwDn*vQhD-w7hcE zC8J5;Wi*qWJ<>8Dk6nlHH9RZc$XyoHBBVQ3>ED`7nxDjvpGYYNe&kF$(S2TNu-ho= zXr$wvL|#`+ttEZdnPn99X9AtY{&w%au_T1G<;K_IjH4qM_unb*;XnAoKcJB0aobWb zkej1em+(C8vgs|mciNlF%iLKJINGvB!kep^^KjQ!eiXr;O{@dvC7212L{D~j6hxDV zWkO`AcoFY^*8SkE9OAZe_F3>aeM$e@i~KP!$X<7pfbY5egO1r;g#%aby>=LfGraFt zb&`cGd@$YY03F-rErW<)Y`{DnMLkpGm#9G%x9kh-p<<8;?enn~nstEv!6$RYq2==| zd@TBs-6X^BU`QNTQc4S2z8`2#y5_l^qRYR{VRma?78C)at;z~k&nlfMNK}Qnq~BI5 z^og8i+nxE5<0hoy;pIZtIDwV^XQ%y9(7TlnALheNLd^Q!Ks**ynRL5JlV*W5t#qiK zXIgsO&2ur+xrxEryb(P)zXOXcLay#I6-ir#6_TgdG)K>eEuw0gUN+S(UVtf?0w=uf zsnHX|qzO==JTWZU5|6@jD$|ysyk9L#h@%dMTvHVcUTe6D^gFsmA9x!NO#HZPq_&=~U?x zYmL$YGxZU33WANXP6>c%+ATTzF(F(p1%t{TrCAN7-8bM;QjM07(qQl`4bi)d=59^) z@&ZFUHoCe1jv7#|Wm(B6GUSD?caAdK)+5EUM*7d}M_dh2iY)Y^;*fv~ZaqL^tyc}= zdC)q~L1;{%kmu14pQ9;^=b}+^N7n_a23173B*OpAm`BE?DLZCsFE`tkbtpbmCV|ZC zN_#F5b!6d4Gr{kdjau2Cv0Aej)c0#$e9UWodV+^H1_9v_OY;g&w3Ts^>T!%gJ3R#1 zrN^!0`H^#(yFfyaGVv(>K=~*e3HPg{B?JMfi9H}@$9raw*kdB7g9oznRsqJ5tcf?( zMmzAqpL4Jf8TY7CljqgDv>sSmM}<>$fDq<}ZUZ5nuXhKkv-`SslJ+W_bs!`_vQQZR z(n*=2V^dRS2+r%&jGi}+7O>1gi}WavY3n$5CKF^yZOn#_#G`{XN9#Nc_meXZfsD=eG7(7hALjrJg!kSv zk9{nz^9d%u*S3D#|8;7}r;kE^27hOw;1oHe{1wPZ^J1_F!UlODVO4Zg6 zzr&H{{C$z*$q@fMJ}(Zwd1u`|Hs7hH%rds`-C0!mKn1Kh9W#(ckJQ_HXeQN{RIe=neMcRn}|!c0T*laDzL8A@3yarw`2JrBM>2y)T1zv)os&EZ@Q& zi;rXcY3=Zvmi3-aR$hfE#lM%HDvHq;*d~68fs5E!1zPeX=f<6uzB5v~AX_+r@|e-| z+wCN3+fsF8 zt8-xeK1T5V0rMY|F1%`g82IICEC1Ms;8Ml1C*hyRS7+O`*PUZg8l$vNZPw=YiyJqz z_>vt$(#5_xI>hPWqu{;>HQr9A6XV+W5fw5f_8^x)JfdGD=J@e0+O$9dnx;M&u$k+X z?lqZn0N|}14IoMzY+2Qv{Gz>!HcPRw`>7}mMAKglCC0#pojL=qmIZs(FB^>)<#e9C zkpLK(UnNZBOTajb5Q)zdoO`-Kd^{EJv-N}y?$*DcqL+ty8RqawIdDbtU?lG;C2t?J z+k`!rS2R)7C|i_nn6rC}_mXX*?zLs*ie(~YjO2Pf(qf!|O;=1MY2RNH+xeIJU$)}lKN$;!N+L(EI1QB zgs&h+yip)YAOwJ93*0!0;5{Bl6rqUS|Mw8>G85_H=T(GLvfkzO-z| z56QcMH|gEuWxQBd8phuaHR{n437U3V^Ei1)OZ;1rgXRjDarBiVf`kwt{;r5!_XP#;5kG2~9 zNzp-Z{KXg@rznf3R+2mlic0>h@E&QzJXjWw0!ga^L6J7II8!l|pVI(mK?KGC^v|+B zL8B(C2o|^c^Ef5xv&V5Sh-*~qFV>u|bqrW?Ys)u|f4o^*W0|Doiquspb6HJ(J~F+Q zElAxJ=Yc$G=eimydxl!(mUZa z`yFR8PT2(D9;sIiSLF$%Yb$a)@3U4Gny)7m(5Fl1e~f(GllATC_M+EU?-R&i;u&=G8-X-?{Cm8k_~X4oM9kvN@p!} zlP}M^T+J?$7qKIj+B4g?`%rv%5VvE!YH`^8`XPyx@wyC;`T^I)GX>C8My^)$*)ucV zfC$T#%hxegrz&0!A?MbsXv4so@5>dTgydp!ibYZsZ!H+FzswcDkPo^X%>r1*d;2b&BH&O7=qRTv?xa%%d5*^= z`h^~^Zc55^7JGh8JgIF)X+NWAZDTUN#%<#1us8aI$%y#ym5%@_h8Z)l3w>|UO{Qq9 z1}!xA90`>7f%DciAK5(X%)p*vl}(04Ejq6}ZrEvtQ`9EP?kR|h!kr{SCgS<_b*_7t zSL$VIbe#9jq^o7(fqQPV<8~Hner-kfS?;Fjw`({!1O!c+WYenCm17diVZI!$u8!QZHcN#*jti0i-&FtP}Nz$fQ z*S*~ofG^PMoSB8G@`TUW?6mwm$Qlpp)mUwjt1dAR{!B)dDr4Iq}56*g~L1!flbL}OrQZD0*rJw!eaT~lCk5Vrh;N{ z#+Af)cII(+s5G-1cOYH+yeF-fVjUlq8foj;3z$H>4S$s_1-2e&&{QZW1?OII2SUEY zqWeWOJBzC>a5wvqb!5cr+hiM~+{Qv1O@6b4hB35Z^T#`1ZL*e)VdA<}fdH~RFZn>N zB}|T=n3_kbjkBJ%YrGK;?F4LZ6`UV}In>z$2o(LvWmcoH9v}$vJ&zjydDrnH6z=hD ze34SG334MR!K<;VtMxusPjxr1;Q$7_U%mh!1a0&#L$ygjVT4rxO^>9}J9^kWH&LMi zP8!wO8b|f&vDXB6se}@0evaC4J0p%&MFS5$u0HNb7t`Xmiihz8=Fpq?`^LZ2dVZjT z163F|GgJ9jOl&Kcv_nM=*Rmf47NvK&Hte{ScviB~k&^lD>G02Hy@ejAZWiJxYxS`X$Io>r zs!1VRg)>UHjq(KQXToaKiI-H%b1X9%q{>TLjjYH2`wb@i@0jurDCoG(p4^rXvu|1M z-R?uNFc+ww_NI!Ew|VsD@YgebeDODI*Hu9T@kySTTDm!|ojI7_x<6SEF=(k}5ah9~ z4yyEGiS=q<_tU+@>e>8KlQhOLK>effY?ap;SD~-i4aYMLvgyPs|6-OGQJd-l&nsN= z4V8IF3C|ddx?%V*B64c&@-KdI+v|4|cNC&Ug>{@~r|cpU?Uk+Ex?XlTz7ieSmVY4l z`p&G4V#0MDHU01jtF4HI!Eebc;9NyZgHYHw{dU-yl;RsN%?(M-uSWG^%6iFDYS^^x z&&T2^>$SNzO9wue!qMjJrQrKNSv|Kc;?Xn!X~9U!(-~4(-n6X3N(4(f9yLu8V9AFa zAC$J_u56G@-b|?Q!a45bt>UH0XosB@sPQS!{HS%lzRm|hKhFAX-GFSJcXCg1ocR{m z^ymlxrDm;ZH3orz#sDu~5GxNnj0H~9PwV0`KL>8mLl+rc)8oS+eO~9}0*JTE z)(Un9=@6_>A1r>hAmT+^$3H5^2*r5-q5fF0G)VAcrU(6P+5-L1qDFl;h{U$d!`qBL7J~r8# zAt8wQ>6H>iVSiJ9JurKn0}O3%F{iJN`C1ObSq_;oTMd#VA|l5qgA*DsWO;jQmIG?w zA$ofMRTH7fRjGn4{LaSO?bSbhc+k#E1KPrP@)AdI^pfXc0wVH#G^Ia z`A=TV7lmGD?WEE1?w7!mY<;s7rYHD1_@D~OsV;|AjJizrE>u@bx}2`M245K~e7gVT zTEYK*q5msR|A2z%ZTaA%FZhvC$m1b}9_RZC5&gX#-BqaD@1CC1J1BEEY@(>P{3Kxv zl0T*o>Fj2J=Q>yd#sTG`l(RGe7&xJafy6OprrLyz&)do^Y2TE^bSieL%zFlRL&vu* z=?RvixiCK{SJRGmwbHW@!cbB*7~3+?06DXVq_}xr1+@y7=PoTjuE|FY{E(jBGq{HG z!EaaaeVeP(&^0f?t|nfvsE(Op+~EsIV=ioWwp;g6@!gu~^q4pRHja@$RGyYPqIXv z7t0n~`UKmrfhfZ`JUa>*rrirN=o7oVN1+n5VL*!v%(h`Sxa!9T+}Ywv^U_r!z)h50 zkzgqB>$LqXkAYi=A7o4eDCoNksWrzI@0lP#A1Yu|DKg+#DlJP=GAHS{{#oGS6~Lz- z_mY}DUUp&Sj22q&Vz6f?EA=dq&qen90UH}XxZ|f?e;eVrE74HwXHm}VcW=mvMnc_- zd0bwHMW#%)kH2?w+@BXS*;gbyKC-O&q?KK6F8A$)S=jR=9oxol-D$+(XuLFYsBtim zTqZQSzbm3$esA2U6hQ z`165<(~m>H!DBExUfI;5lEgp1HdtX39x^P}d`opTTM|~GqG$HgY<^K(*TeU*vx2@{ z-XYf#%Iwn2U#rYjGrbdPG74MsXhe#ef6(`ykCnnr`olw>@-LM(i&Kv|D~H4-f^YjrT8^)sD_C;#3Nbnj4qbl6+^Y$3 zaw7NZWy^4V*|7$F_xTsTd6?e2f({CPlX_C}@Z;m}6@QnNUm#sH>zfjGJTk1By1v+; zK@$tC+OJ@UL(%Y<~Xw;2zWp+l0g@pk`qW7 z&=AHJdu8%rOnWuxMFI~Jb9<4DC(U=#TrYsNIZ+a&8#gkS8m0wngkokNieLv zfl?(?OfY-N4)c{+#S+qG+;kQ&e*DU`m9`8_ZVEb52yWO5Z~FS+c1=x}yrn3IRnJuP zVAZ=uE7 zDq%;fy$%6S#Q8^+_;?d%ka*3T$h|Af|0Bxr4=6x9roHo!U*4TDdj{)KarRdT88{|S z@IjS@iIek?kOkh`HDfN0KL;#{`FyCwH zrFCaJBPo7hsmTC~CH%Z8(0N(S@m>8L40I5@*)yZ(>I{u6ud_^EE~;nKGTr4J+f-Ih zRy@#jGckBMNMRGyyMH)k);4l>Zd3a8`*-f=3s1}1GRI~t?AAI~mYuO%u3js`pB7dv z;vSJ#66SHWe|I--8$7{GH-6)39@sh)nd>WQO8J#)rEUJ(2b-{>^INoi^g}FztqmT7 z>TS9m8?`L|*!YmF;tVLt-LzXNLF>L@i2{Z(x%sDh?FJL?~~a?5PmF`+!ka zfy|C`@}LaSS1kuJudhLjb>fUVs|U<0MH#49kO9jWC;G4+4l37CYpc#kHa)6u1i?ZU z;-Y-bo7HS~ibMm$g}=O~Q&ZJ0vn5LCjWSd$#y=YsPY>1Qe9bd|dlJYq^!mp{|A)KF z{gmTp0!_Lg#LM_?DHiWC*~%K2Z8~QKb8TVBx$$>pgxOH`;|1NiI`hZ0;=dR%GrmF> zT2`IJcyqdCE8pkwKdPxlk;Y~A6%h;wKNJNg8972A6gZF+rIhMaUpYS4IVoFz^dKiD z3NKA`sx+vtUo4chWXRrlQw2D2R^%Qi3;U(N3|p*5bQI2SQSz(2e#au``gh@gJT$|2 zCh5(mcd^+5^9$~jvN?E9`E~}ZC;)vwejIP2QLeP^j$7F)QbLmZs_Q zI~meB8J*h??UZGres8@Z7q?dz6Qu?9#Ldr#ujxyklW!%rjo z=GQCS{7dnYy@&iNay11ahCzxKu~VJ~?}9;l=Sz7@b#+g^t@B$LLy>yFA917i?xdBu zHNVnqY%T*0eBW<{A2dGq*Zi#Tl3}>iV(XsE)no>xNQQ}Qgo5%RJpo`2&> z{~z7*|DW{XpMge?e=~S@yq*+e;q<1scRRW)a~m4BBMkNEt%v*~;y*>>Ps3van8gehi&y(>_edmKrs@hlPB`#v>y`>pva5E;A**cI;`{<*?0whg3s| zR7@BdQ11A(a9Loy2iZ>3wSmEQxg%4t*BP|BA#nZoc7a?_{nc_#5iBlXC!QBtM}FcL zxy`e5NOGN*%zw$>$hYjLA8>qkeP@DgajtA3>*muNHd(!g4TVz@(#$BKj}n=wdq;5# zUO^Hy3;yDEJsrK52QB{4W5v+qqGmfCO#*38=Aiq{_oVT-fRWz-BEpNOe zIgAyQAzwa_iV6Ex(@CePO2VX9_g-cer=8Bg9CwJ+3dg>HOY$N7N%lwYU>g zA}7`4)l+#9&Ac@h)s!_peXN{G)?oLPup?)_#l>vQR((0ulS52k4GXq82Fd7ahekAW zrIa6&J~;*Zo6FEll|7toTsa9TuU3cIZ3MGcb?3R&2QP^e#fY-o-8nwYG8P?5I} zeE^!~6OxRvHIMuBs%`?cg!qyl*EMmx{~%S}s@pt<)zsP zd=4dH5d~Xe7PHl}cJ6>cs1=B=L>)Wa@R*Brg=WW|YBzbnM~7+1&iry^F0zb);?K~o z5x7~457_rbi*$<{wZ#>;dJ}R!PD%R33Hh1`Vo7|((YS8nc~PcbrUQAhG?7f`k*v!X zl)qF7k8>o6*C=aovepdXYp3~U^&|mmuKb`vMBHXBV>^rd%T)ISg_%7Zoo5|d{v+fl zU5rxx{J~y|RXQMHsIV;x{cE*F^HQ4l$Z0tRn82rQ-qXTVa*%I-87*~iqvUBk`ZHS1 z+Q~Kl$ky|JQ1_NWarIx9DDLhaoW|YV8+Vt`K;sbHk`SEk#-*{~+PFI;xI=Ic2`+)) zBoOjscxIk=s%CE0)O)M$y#N3G)P1VYhyHMW>+HSu+H37$lD%l0l9j|C%AZPTW??WU zonxVD0x~TCqmZnYCAG4O%uk!r#4(qT-)#op`nsOM6ivo7^>ftBr~L_62_mi0iP_xX zbr8?gx9~x(J*IxnlI9aml5g`qw(o=DGtKLFrJZmxvPiR*Gj@uXn@DbcuAt6I_-=s5 z@>G)bC^^mJ?!&O|=qWu##rebX#h-)iC_bDK@e4_mNH73jrN7=e5DmGh=JEHH+inHh z@YBkD79u}4%FZfm7Z@^4u1k?=`>&rY{=bBR|9SgAg@W~S_n@bPIIN?#2*UHCezsUS z2SN8NpFHSsVqj<3Sdb~3`h1MYz{dT-FyfqZy1e&gQp^rqu3r)TRgT$b60qfb@mxmN2M5mK*Pc zOSopEvY%v?j~CIM_Sn$o2rGaPmvEur&bnP=sT`-0Lt{plZW@J6m-NCKIwyPJp0`@* zwxRT!(H4kF>cm6!6b~^Yi#Bj_9or&sPlFqv5}3?kDPEA;6?Fm1*Rznb&xVF@=HGg@ zYdhD!WyE$wLdF_#FZr9zbndar-xV{#7|65Av?C7OpNF=WG9>O?B~n3ASS@*tu|44JaLZ(aC!s*Xbo za%C(G=l){Jm?6+zqHHavHkM#c#?Y=)lS$IV2WdvfV8^Tao}|w2%tMYrv|MkcXhe^> zcPID?;oGh^%c6l~>V$I8p=PpvXO~%BbFTa!O8o_=R&zRh6zt3KvCtQVXZx!v#h7Ot*I=dKc8d$n21rd3aU0VP>F+y zn!|OylTW448ir}0Msy%IynE68@pZZ0rsK;W4&Q$bUk&dp7^RBAe|T?IaEoGU6ftos zF*jhcOhqhl|NJ?-gIETx>+ ziQKGEIUHX^ri=eserRNo*(YQsYF015t+LG0JX|OP=UVhRxyu^VB1Mswu$|TTJ;w)n zRcYJQ)7&n$(D8!DD?Zo4QtHR%m%6u`+z`CFjoBy9)<(0c;|vf|wv4*tSI`iRf`22I z5UAy*C^Acn3C=2HLTF&n_Tz1_ysikt6dlnFJ~OBK~8f& zj5#cjVrxwR4khISC-Yq#J)P$ykji~#!tKywBU&Qavzji173b}ZxYP{s`Mk!mo$MLajET!MCFn+R zaWK_`Bd1-l+%^SBcCEA{35?eBzNUH)c~@dZUj-<>s5wVR4w3QSZbASR)$YNuU^??D z+;;o>hrS%8C(*(ElP($(3DW3REa8DnqI7y87`}kaRE1JAno<(Vy{Ou0fh*oPnOaqb z<3xdi9&KcUlQEw%)x5K8zycw_#1BHM{wC4WdD3jmz{-(HNWgKho5Qo!HU6zYx@FRd zaJ^iE!Uw=YvqD)8GDlDdqUL*=#$<1HSA~Mupbw^k6ch)`lS?3)NGg=ELefe9H(lC( zAMQcWKoWP-6PuNoF9R6KYo2fz@!FM7hkIh06*-!VxaB98rHsvNTTUsv2`s~+(Z}M~ zd(cR{I4+Y0L25CFAi{~lH=14ZgL?3B%RN4s znV)&pN=iWu-{iFgzUHGIAx&Mlyi_I(I#Qf2nv|2JTjkPN3n06b&ROQ$+>^2gnaTuK zdMuppvuzS<7ML_Bls>gfno5)ZKxYxkvNShU)9=*vZ&Li2c5m1%p?`cSZP=~?dmDo? zxw2Mm(|q1nw|B2bUwe@B?PSecoIXHuJYG+rowuv}P>;0l8R=0G7ni@-Gdy%$zf58$@6rD#-LQYJ8-Bt%(~ z1npdLGr;nX(dXK>(cY5UhaBZ|#fLD9C#4rrhmPHE%}YDCKBTb_zqThAVoEL}ZFbQK znuSFx0d=V6?CeFMyXnmajgMUHdklY1sTGhI zCE>B%z3ZXb?TpmpOI^lB^rZ`&NZRF71HUTqC`7_*@|QBno3A|HDav5s0-OGv?~{{*I!gb$!BjiWvvGPS1v~UQz@jlOn=J(T~6{$%7f3~ zR(H>pf^6!Z>~oN0ZDTKz$YT}SB3ri|VB+i2Aw5Ahkk0ve+Kq)mm+ehQ7T_nGmX55> zD6&omq{1$pARSI=cr|RQeWF4{L<{b81I!gNdYI1G4k}6{WXaV;u#u0(@ZHaI z@XRC@^H6c_>}8O{mA#)7ZGi;=rvV2_@cjtYY@MD(PXZYv0cQWoeKGYsW0Opv>^Cz5 z!waJODbqnK?bgeKLs0(5^+!apj#Z0cnOg&z?r?YRFqs+XV(C-4iat;7&|~cS<5AkH zJiaKyT^#440UTu7<|*agm5TiRRv;6qa?abaHseeN^l(CeDpLWq{-HJ~g#iai8ylpw z16Aa_-YA9jD#w?c*^9zmMERIF)V{*a=*wiwj&$<}L;18<#Gyn@)UH?I(UhDFy*ecp zyMiyqtkNuahHFbZo0V;Pz(z6&`TU9GZ|XQb0wt6jA!W$~ek|nQv`Tm|xpP*TtY}$- zUqndl*8ptOefOQ*oZZ5I=~a*b+>e&{$qgB-?}BX^zZbv2obB#PkM5`;lpI?7c@kS( zWB8IQOX4rjp!@@xp~;s9A^d#x{L z@WCpqdTOSwDtmoXdSn)gC!t~A0D6pqkF4+AFKXyo8wC^Iz=Zs@hSM4gG7xhK4}i(5 z-t4c`ROFLOA?d|i=8Y1b#4=AaEkDL0_P+r;xSBgNW6@`HF(8zA@&eELY^)F_qMZ<* zY|r}92)$RvlxE9FCz?_sW&qxxcf?}8)s6kea?({f$C2MW^lN{AuGQkDuN~zNE;7O* zYrawAC{u2!OG0z5Yz4=*ET2`MK;Qm2sQy=FyZq12;6L@{e}Dpo&fhWx&Eu7`iG){p z+SGl|s}F*btehfX(a*9HNI@~N0q&b%>9H3D59iwbgF@WH{OchQF1nu?yY|#*kR=>! zvS`RS^`zW~lqY21t#rb@m**d_02%aGqdQF)u~E4+wX{cw_|UZdrMg>vaOzth)hBt17j@1lFy*plVzH<)%Dt* zsCG0(BvGR{RRBdSPjHuFnmccUVpHmow+v-$?# zNY_lonUqi;O5(;h)hD}hYay;kcMW%B1`o_cHZqT2>QA`X0IM2e1 zxe8F?%CEbO;|zUC(nV6uGaH*fWWPC%?5b{n;1HJt<%DL(a^?ej4+|GL8cnMyOwz$r+#WL+O^i^H% zL|BKkJ1_$*vLjs)8jb?ePshd}z~?xOJ7mpaH=sCt6{m(3d59fdp@&|9iNTJ6>J*J! zTVibNh=D=HOAXlXMS}3ggL$KT?Xm0YCW*OytLTDs37ye6aF(Ue!b#2p*-F$)5RIzk zOR;lT0%V4gg@BORFeMPD#l$YjWS6*xWI(FIOAFk+b}9i~PhYmf^3ge}lh>Ls8dGS&X?-#H)O^Tez^RVBxZ|ty!TgVr30| zr);?>%o9K~=^I%%!PtFhVZNT3J~Lk)#fA87N<7{0b-GfcthPLQoq*1a=}psC+!sz%Wl0tM2NI)TC(x+Up3tPr&3V)@7kr{**fYOcOE^4fMUUVFm%XD#N};A z^F9g?3~_QU(~w@w+xy5CuH=15sN+E5zgi?vO`a$@Er#WjV!z6(n1GYSV5vKJ?ropl zHpV_(LKWvzHqTr}>CQp(Ep|)H1ld|z(AM83JOQZr&`T+0IB!>A9DqMn5Ts3VD_29X zy6z8H-}#L9;M*5ZZbfH0^c#m1vi;_C<|1d~xLZE@w_Byw43$bB{2N2bP({`iTy!=0 zn|Od=x>#oV=yr3YX^2d1)C!&%l?6UYwng!c0VPZNT3+BMQ+a6i#@NOAhRr34FK~SV z2|L1{-L{{cD&|V^HUvk6Lf>u!1(~`i&mI-VZbAl4<-0+SpuDjLwUS*bD|jq(o3`jU zpp|jc_;m5^AAzUnney3Xs)+IStLLv6GlRXZB=SxMN9WcgL5O_w!TTi(`!Sa;X`OX? zpboxTd~$wzf^Ev>d2I&k7<8LIY%`$QAfp40dN+aj$nXzxC^p7L2i6}Ml{Hw{QJKg-NuP|d&ISndf6nBYt!tcF` zAWHn`U%jtLz?Ys2YtRQ5os~0|$mGR`G zYv-2Q4etNhqoDz#%vu_bw%Ra})Dc>2THS*D4lR~s-s>q8zB&7i=u+w|`;t=RwG?On`_`ddp( zSOxts>}?strB|tlF&yAasaJ86G}ZfLY=J)_pcp()HpRmd2`M)A4pj<8$F(%{_Y>hXsQSaH3Q3y0ePf_a&~EXTg(2sZ8o~+zL$H|1P^TumiJ&1 zI=PL-kz?mLoutI(*tgm)JHzv1R@>gU7lb}PP8+7;?knb7R{G-14l?rbie=Cf>eiQ})&FCSg5_a=$Sw!linTh-uYIlLyB>B}^EziBXx6HOIFIBR#kA#0 z2y+|_-yU;iaYb2LMt@(v>D-N3!*Sv?BTO|;d*#;X9-kKmSQNV6UnE1(ignVZ%u2Iy zva9tSJow{TB5k^&8(Q7uURY>TD;6&|ckpQSP-8gxuX_9c$ASOPeEtIp@BU7G&_zt0 zKNF46<>!f{Y~4Zp-n(a&bA@~vvTMcO+ODb$`mH+}G98Rkyb^a7loC&aTPYZcXTZql zt5CiRiUdx{bVT%ZvH;@!ec8P;w`mh!i+bHMl9hH>q*0y(I^lZ`}~;Q z`m?w^}{A*+Tsl}m&SW!?YUwgf;brk`n)aMwD|I5MLm54uoyVZEr__uH2D;s)fJ72 zq?6H0xp~K?U#0q*ZQ6f!e^-k4?BUT3C**Lo=fJaj!^q&O@V(63@nK-$g z*sCyOox*Gr*t{pY5^XN4cD{sb`Kw{*0y}!yD?&N z9X_jQ_Ij)iVPd2`PKFS0wh^kcu1)b{`EL1?%ks!T7l4mzk1~;uo0S}Pu=gGYjT>dw zVq<9``$SL2ZQa^8l0B)~OZdJPeVJwA@?Hy^m7W`FG?XWcn8h^z8P}V2?X4$ z)QeN*%S3J*L~b!O_EFZk)Eqil&1(PuKX@Nsq~mu5~z#APk`o^PAH+^6o+)Y z(dRFYnD{`OiME`}Mi13lL6_|`3Q6__#d{5d9ksqz?W^A=oZ}|je5kQ3)){Osp?yFh zn)@KjpgG`kP0C(+(@0gmTvGf?D3ewO8kF$5d*#4}3*I-9iRaulq{(*yQi`1%K>qg| zRsI7COil~Wk<;eSb_(*(G6mYcLh18^gKzxLD(7dS5yc`XE>7b^n$~a_HIR(T3jw$+ zMn*{w#Muf~LR9$h?1$8+p(53pBz!&~Ts^_(Hqv2>&q#!-_SiHf;)(a6%dsR~*vDxVX>3i`DKoLZtXoYt_h=qALW`3;< zVV$N_bY)Mw%Q6i}mBRH1zh-@)D`duDRfD1h*+WT0QVPv4Ug1w_ms%P(aqGB=NOS4O!Lt&8~mabT-*xLzF@EC;Z5Tiy?sl7qy59CQNnPg%x zTc@mY6`6DX)n&tW0eG9|Y%uGLjtw`O8tqb?UhPa+xPjp%UYrz7q2@< zTJE@ZoxnHpx65r;je-6t>vgxaa?=7ViJzIB{ARDF=8$DK_3b*Htt38}78^caX3y(C%!uP<9wn0;KUUkTsPr8yz{KCEI5wHH{j(Dhf*X5XbJvE;Eg0 z=))5WI9y91}Ti58bt!FrgboLGqNG|ziDdnG5)1<21eIxzR{7tym zF$8JBsIO(e%zQJc8;V^*J0+l;oBs*Hzed+`=i;$>?qmF%hn4A+C3gOuu9kD9NBzUu zBh5pwNC97o=qo_A<~`3$t?yy&Inl+Qav8sP?0wKLM|^{7d-C?wjC@=r=0`_7co@BR zh5owW7##;wt6DY7rz8X>eIX=5Tja^sok?q1#6B^P10-C3Q~S8apV!#S$VG67@|9hY z9<6n_y0gnQe#l@L??G?O6lMmNVYXoM+%{Wb)mjo_q{vkjxEVPE`u+xIw*I_49=XzJ zEq=j1Xc9_c*7(PG{lvIfx~lWfLzev#n?%0n`|50o@Un`))LmE3A22Aa@@}N2j((N9 z);UIrtJWq?eUf^{HLJkhxx0?dkLxX_Wrow%?*AVuga5sH_z&%p^RsrzK6DbFM&1>= z$`JFncIjxSq1Cysx9JU%n7XU)yBZD2I9D1BR4yt6jsim1T*5z`b;o8O`r6cbVsLqLQ{^EHE`qN8K?v$mzB~ z&pI%(R<$0`oH3nm!1)l{-UN{u0NIqj=i+Vv{pPQ;^+BFbgTl%;R7c7h>O-5zQf4ig zsg>2)5b1qXBlzytj-PraC)_JtuJ%p!+{TnMnq;3|TDL=-)%~S3aOS!H`YsZ{zdDM0)SN$JZ>#wE?xNo{vDuZ{^33`T47j>=Tm1~y=<>X%3bT#8~ z8$C{G5f<{65QiovYrf!>Drg5&ncwh@{vuboywvBDcp*Vr!#PF_as-x_Y*BI=(K7OB zX1@|uD8(L6>}pM>8GRuuzJ@s0oEK}(SqC@FPAth4d6q)h$$19qz|^G6#WRwuCv}4s zt)*{G{(6Bj!aBP0p3hpaF)Z_tecuJ>l*E8BERt&I&^-E`S%cOi%@~leX5Jpkh)q0L z!id#L>R*q|iQ>Lc>k{xz=;z|KfQucEkpF4kfo=hw56!2&{wbgJW&vA%Ngg$Oxg#F1 z6t8c*O-uE>8`>k``%0mFr9^2WqLk>G_ICeG>KpVIvRmNVAQY6^02!Q|8%~4sGxy0E zdi(~&*Wn_m@4InaR!bVJ(Gqo2xUaTzoLTbA^@dAGdMKFB$;q+}+WSmd2r3&W@c>U< zHXX(}vg8=sJqB9Hk4%Yy0bO(7A#EnwE!!K510+^vvvOwLt~!q=_HFj^6%sU#B3 zXnaf_5p*t5QibDiqSSKCY{M&LE*j*RX+Q=jf))!?I09kL_`y|X1y-bPC+;6^pF8Km z2#zs+rx=Ru;YS+exFqCk_#&k>OH*j&DzVi>x@I9F1@{H1KreoND$apwY1d{o3^3dh zfeeVee!);0bSWZ7gL+*h_-Zk05V8N76>}aN7aLs}9*fzg+|+eybiJoV3H{pN=+br@ zF~H=Q$d%-2G!nzIgdSzy8A29u6A-5=GNfK-Y`s<>7QW+%sb8hW@^A|@G&iWLl+-^O zZVZ-CF_rW9iz2l_x$n^Q>htvf7va(W`*HtIUH?-k(Eq(Stphwvq=tH))mvJWKBvpZ z?Rh=x8GB`U(42#E13dj*s?^P>>|<-8E1Bq)fKD}U{q;PFWJLof?S3dSQHClzxuy!+ zwM`xVLr6)75uliMcPsnACt`sJIn}5a@l@bhSlCMpb;y1_!D#MY?yvKj0O5giYq zFR<(}7t*B553#ras4w%4kK5x+Otp|;uq7Mmxn)+bA1vEBp_p^vOL*)keMrk-?sD8r z)~R4mh(%L?A@dl-Uv;HdH&?E%kMZ4F_^gnmZ@>$*s0(^1BZJ*zBI8tkUYvjYP8_ zVVvsSKnzBv|5c_Fg2=duZbuFFN$quWn{tilV|88kLWoXo%BV~A%&=2s^d^+~luqnS zn9Fg0!qt9K9ek8jK2&Kc^kE#~TU?@o`grUa{%wS1&8+>Mm@G`>`42wqxqEz+*-_8}!c1Mmn-TW@OFHNS@tE$XS!;FLL#WpTzoXoysy&XoHGdJ1&ee zY5Hdz?V6mVz(CFMN4GP`27d#}%yd-SP z9gKOo*}Ls$UB1k6zf!kqZ-OM7sS5GM*gCpb7_DPJ9;{s)VEomv==CIUs+5;>gx{bx zZ;M~wSuEj$Nu=`IP};jJ{>Rt!oxNqm*FS*2T7bxJ2O) zho^Daaz_U@ZIPHh^yk~6-f3db2M~2xhcfLA<%eGcJim6pxvGv9v(Gy!1s$(SmPs3p zv~?RuW(+_w`Lq-b?=MqW8YCaI#mDOHwAeT4YDZ{*(-scKRg|Lc$)+6Yq^4GjO{IdS zEC|_8@Jo72)Q-uqx}2KtTiZv@@U4tt%2!lOGv7XD|KD0%_)i`D|II@B(Z9 z=8;gZl96Hk+D#-o^&8uO3m_R9I+EiXje2dO-YDC zE+K|ihChTNiEJgsw0`#}%vkK6zWiM3d4MO2j;`&YODF?U=3&$rL{}W|bX;!PVJ2a- zND*;W(YAKS>MHkf%4CsJbf>R25$d&66BD4$s$MM5o546M zJGkB-NKY6am|5cE&zg1`;D%= zq)J8%Rr^fL*8OT6yg|%rnZI-#$r-__bVM*?J#ALWE_<4k3#G-X#R(ieIlhLMN@YhR zWfM|XAW=nmD!N&Z8qe6N-h|Tdt;W)@@#+2UP5t}O>X-R#sS#OJkt4A|neB`mNAYjD zx4Re?D}D1TlC+^|i&X(vU;~@)Y`i+B6$ad4ru7EnYwT)2Tl1P#87bp;*Rec~Ov=hO zFlZ;l^eA|R%Myf}E-I){Ma|s#_w5fz0A!OEH_{8@Ts05BM@x2A-5Xx_m@c6JH zYNj*<6QHG3m5e)YcpDxWauyt3)ncZF$+_Tza%+k)MQ!T~SayndJR6ZVIy9a>c2K!B zEt`y%6?r7d@!~qs-(RP0OH^z>9HG@R%v@*GVjcM_r}eqxO>;#guB(?ZF=?hRy{!6L z>_%Q1(2j@k6PweDyy@k~)EydE`8DU(LkB+@p83S{Rgbo@;OG|5;^+<7gVMbdJD_ep z@4dx-;HFc^r=uF-nV@d~8|t7hyx-5_b@g}_JwL*wCd_c%u3nju{d)&M`~wP$E>ly% z_LsAX|9$g;5#GaEe{eWe`|QwIEAxa*omE6Uor`wBIPF7qwv=#OJEDS@5W%5s{nn;N zGM*?&RYU_tB@lRtkRe$yNyC2@50Jb2b+E@eYD;!-<)mw#s~+2i&}sa7$Ij-jzd1$> zJe(V|YU4BF|kX&Wp~WKGGK1rWBbXp!^a%sWXkmxk^c; zMED}1+4p*MK3D3AuMZDS_10SYtYfOBnPTydvGl$t-u!)=Gw}do^TGU0(&dF?7R+7C zM-rV$S>Q_s+&a2dq%S6&9Btenm;7_H}v_-|} zs>M(JY09M0Ac5aE&Mc;yB*cv#zW&B+-Ba&O35GkfZP)GciQG|MBED;ISM7_o*BOz| zA|B^6Wt3i)SvS{fns)iTIV>7ARIDxu`h@6X>aA^cUvD+^544{``6U!K(ppo7(?;_n zY0>quq>kcqmI+hMSo)L`!?5}^pFE%5qQ~Ro%Vr3|9~FsIz=3qC1eGdBSzJ|E4s8e@ zNXm|iij2bYHJq_R-DX&EVdZeC!3h=ep-HM*9-;F5Pojt37h^tF)O9ck8N!H-_f zkrRuAcV`R1fZ^t8$fwR~luMJH$dFK#acU`2#e&D340p5sW5gIISdmMGkrusR5a&mC zeCNuLnviJ$3Meyh$+M=d@8=|z7LS)TSt-NG%~{?UdZwZsX(OO zR8m?j%{*3!YFOJ%HQb%RF7z-k78FuNsB7P0+I)5zuZWG} zu@p7-o2D;Ea{}gGJ`>fKxC)5^WqCv-s6j*lXO7%Wd!}t`yDf39bu!#fILv$G2T(sPyh_hibFlwXN7PMNNHnc|PnbaGLA&)Z{P#dRghM4tv1!E1C z4MwnmL&{(O=%vF-d zsxlW(l%FN*9P?@M9^aV?jo%G2PlS=$bZc-HR>P<9rziblZ|WNYhL3)+{NSnCE?dbF zTDrGpI<8*&zXdJ-fWikCt-WN&#^prn1V20(`qWb4de@!3z`uFMUKu1LTBuZb7mV$2 z#XW{PR!%D0SPIn7nLgm4XoMS;fPw@t%-L;o{`;(}Z^7&EMOczztoZ zs!i9{7ukf-#+VGRxnalGy7f4t=0{HnJWvz!r?e@wLE;TVl%EW4R|8ZrB>Nb%-|VKp zo^74I(Fx^~2#-s#FUe!SY}gSwfUz)g_cjDP?!C!-6lBx(AR}%$WVjJ2p>PZ0Uw4tU zN&1yN{Ka}Wm3h+UR2^lv`T$Fv=D~GI`qclbPc}38bu+*{`AaeMH-|ExC9?6C&t*tx zsuN4hhg{Hn2%Q58fZCd8OOTVur5}%!!59o8nARbp^T9)76lCwNGODP-_K4qcSB1MT ze599}(wkGLF8A)2j#P7)>yZF9bjr!#%FlJlV|MJ8seqxrK!p!PlZ13y0&3- zJAYO8115Z-%|HyQ54sNM3bstUzITvP+PGL?NVF#0iHdp*Nk{Z3+dkxYV^^g3`1)DHdzKRm>5i7F0`eNm6dbUYHuajx|G!z@9m$RrQHnQad|c+R2C#|@D$XakB8I8hCAS=v$x zqx4L9OIdXxWNO%GA9ftW%UgC%zGM&>AXBM5l7+=X@n9wI4e8mWB>3WU4xKAA^;kt^ zDwX2XRAsS!L%GvGE#t!7nKur`E8&3^&JyJ5D)!*;yclHo`rt23Qx(mpEc+mCwB+nG zfpwGQFEjXK?L3v)>!9uQBV7E3no82TZW0{g%vBPYmReul^2LkZ89MvHg?dY6XERgJ zmx#gdVcYaUg#CXfJL}brDosH{f#NzaE?WC;F&E@<6pKg`41?( zc@BNha|oV2r~d7FR!KeZce-rMp7ArMP$BPu#Ku|)cI9>Hh}_n7m{Uk|X73d+CN{xR zW+FNoc|%N%iAlCAjQK4h{K6(LaSjs4{^p=(Ob0 zrn2b#eOn&6YhmPC0{<1aEI;w@)$s=UI*Ut0$xj{X!0HcWKX)Xu??JC};A|hub>+y# z_sl|C)?iEBstXoj} zF0}-sEXv7oj_=qLVl5w9t70EE>-L=a{7+7!N0vu+R!CGrF>-@{Ya9>~X|2X=zpMr^ zjG_E7kegli&Cr5R&U36&>fp06t-SaxSPI*3UG%&@;kg2>u+ONtZ~wyH8nb`gSu4O_ z8k`WR?{drZh&H)a8iMW$kvA{Av*fXV$n0SRxLpZMIo4H5hzCo1+x*;#0z@}1@iGPF z*>}aDpaw(Knvfw$JPJ(6cES~a9-3*XVe`q_^igm}vbh2-3}?|o(2~Th_yq9Ri?W+l z{URCRR8gRDtdrT$F~(lcOA^S>9sPR_5lz<;JI3hOAnIt?VqUWu^aeGmG!7iv`1Z9k zaejRd7zml0Uw?CT82og{<;LKFSF8QtWOE*L(b+`Hm9#q6`WBsGu(cotGL>qH%sD6o zZ&b!^Z37xmf1E7@Eq)2h?ZO1}ZL8cMu_s(#;NQ)1NZ5u%$w`D8SY+X#S@S|hP=u?s z1rA6Um7>$dkUD|QBQ7Qphb{uX+2a`_Uv;sA1+B=aQ>Wjv)$EJ`J5fb`m{Jz zZ&Cdz#O-0dAE7D_pv};Gsjq0$QR8f=(tZW>PV+t(n_P+4gC$@d0#meW{lZ!%&c0%q zH>)z7Jfa2fMLg7^P-TOmPB`%{K`w-kLEOCVS0(HRQy5S z$YJ=nQhMCQmHZ)=S&(B;XcmXAC#aaBeob#CygQ{(S8bBX4>knvn^rk zO34A%+lTiTTTD77P#f0f;kY_{*b<-OK)V)mZNrQ#k)1p6BmP6YWhJR6O+nKhpNN+n zS(>|GkvRJonivTiGiAIcxRlxQK!7(fh^{%<#yIvh%Hw(q7K~8qbJh>N!$K3!1-3IY z!g2eBF{ai&wyg=}Ks#4u!~44q#-E{q99{ER`I-`0tRO+&+t6^d`CKN3m3dWtypT0` zXAF*-HoH|R8=iU;HI*IH>+p?F3MT+dQnZp8T-IcF#h&fz&)JKD0Tr~;Q$E`x5ri?F z26m5)oIknD{O5eQb5n>Gvf;BULVbg--f0@fe(ekuPQ(B)6y&du5xaF@iL|9 z=j8g@48=u%V!LVnyrZaPZ||GG*7w$^4msT`!Jey%rkmXxfDk*S>Fb4t`=<7vv7A|^ z_M`7rBUTn$`=eM5J;qQ`%2HvLk5t5E%sBlYc@)9u{a>u_d}68fU90E$Qz06|u_;AR zRcUw=&$s41uV5}&~$)d~4 zq6z*bvl$yT@86X|++Kl*lW0ftF%s?sBNDnY`#bI2 zMgiZo6@ah?QTTuZAMS8cI5G^0#Q2m*aJ~_J;6!lA$qXydqVDs_Xksa$PHI0NZ>Bp< zrWs%=MIN)PpNR@+9+0U=oP0@Q%BLjzwRL=_WZHf81$<;raiY9X)o+irG0AD95g|gH zM4H5^V4CsL@m5yanI)u}DZjsSa8A)7gQvtrr%(wP+6aR?5Io`6X74$U+T3+$0GHbn zX2$eeWNWjZYTGeqwHe9;8swmaT=rp!hwoNf_qlR3VnW=;X31BU-=54FKv}F2#!48J z&%sybb7+PkaVCE)rI~ZSIm;lb#L*W0mVj&ogoF}>yJu*7-~btlmx!=js@v#nmnRtW z!yN@w(BAVWIE@ya1{2$j!xrg}J}`h%E3O6Ea*{qaxsZy-j&y$#@CWwGh_jSB7Moz{ z78_!46W%4K10#$k%CJd!-sI_VoVGG}_$xGKe-)9@9@-&4Z}l8rpbuvZcP^%r8aC3+ zg|{l?u#a$93ZkR2erN+!U+j#>aOp^DRiT4G^g+lKL6WInAk<_{0xp*l`6xB-ODpa+^{KTPQ&?qmiH=kI=VIL) zq5NEzGpAl9X`u`WtPM=$<0*%e@q0BoI<~s-Iwj|27NDE%N>v?!N{L3@qZDWQuy>U5 z7_N8c=W!*V90Nl=XoOd-l9F(5p4%*6Q(LH6*%Vp;hT^7%i{mpQ_QEMH-dp z5Dr&n>kgg+End;1(VJ=CG2K=ARDPrMWAG2%o<4`{!h(_17L5L+)T#on?{>(PteT@x zjXCX;k-(+HxB|Tdv&AJY7=9YLyi#iaI(0D_HK~ zkJIL68YIWI%UG;JO$rU6b$o^CYsE9C{(7R0$Bn^zT=C_C%~YX9rgnCX7pH{`w`cX& zqo(vpQU;$_=kq8@zFUj52K+m2Nc{r}G~Sw8$=a8r_|HTmwjM41^GFgDU)tO1{5*Yd zM8b$tK$(tlkgtPG@ebL_XkX*u;^OV25D=tAD->mTvf^b8qY$DaPhD4_D7J~a=x^Ev zRC1*DQhtI@pH<5iM1*4)<(;bXL9}u|nAo@7s1f8?rQiWL*D}kJGXqG`%<+MWpPT|K zXS9iDm8+G))*XoZ|55_WZkc??`I%DMA!jVcxn*6^OA;ker~?f`?`j&jNpi`5$w6AW zVsBL4Jx%P%L8{Y7_JahGR>L}O;&KmIZ|MZCE~{&0p2TX>S8RXtkxOfWr23i9XR~oO z>B#y!=YJF);{MX3Wv=}`m%BU#B2q70sMgSY)og zuf8XnY*lqlME4`Dm#+&y(0GAVFyB@wI0TcGg?iF70iJkUhocoGvlPI^ut-IPN5fyd zYmpz`vAf!}HKS_?=u;pIDNHiK6HNSSZ{(+BtG}*NJMg4E$9M7gv)2eJ5fR&xp$e5U z^T3lWl@;l*md*b1-ct8Mjdh*CG_zMM-cyab6DxZ$=AyaBnjSs45ogU-7%&}Qt`b|0 zs&Wd{`g(QXh_mj*yz|mt<|W)^{ils&M8~J^RrW8|-R@OnSlAaqWyjr+Vc$3*x+b)CtRzY3Oi%P>Fg&kT|MCKMpDJU{S zgF=fYNR8WQosJ4wAb{Ww>NvRBLU&ox6|X&f9;%X?hqci@=d&(ZuNlRm0itO*<;`{2 z4*77SJ(?>`bBppg?_xZ#=E!;U_u9+LqB{*Xoed$`9P!Oqr~Cx4c7IxFEujK3DxJ6R zMUspbORvc!;iJc-*|`y+;ijpQg-16OqID{e3`s82K_#%rIZ+^JE=H?nHcQO^IUvo^ln$c2EDGzcA9P`h;kV^em zOC0}c9}J$&*n%~WXFX|NxI(*_Y>EZz4o>!zo;ig)!8b@by!Y1gOj7;Hecpp})8lJ& zhX5K!RLvp>=J*5&6|ywS)M%|4z(Q*_q9E%=)B3Jmf;h1pZv>xkB#&~-6t?t-yVcx! zCMlB>zpQI#usSA3f}BgdnV9`I+N*XLjGEn375@|JpeeLX;RC*<0yK@sWuGE~DndWx zxax{J)F65_{k=iiFZOi63kfIGB&8}NtjY;<4*ez`8qcg96Z2HYy4C|So$4kem9+0V z;*d#BiV=)u9ljWcLs4s3orh`K?PodN8&6#Ka4z9#Y5rBQy)zea3F9Jz^>Mi(cE^DT z3TGf5sxqoE&s3QpN_b@IIXiB1@=2W@;Rl|+--#vDX+UPqYZm8vJS4K0i3)wP)QcJEmP@(T_Z?i+k7+F@ zRX{kr3&zo;Ma+l=8EKcq%~GUpy^=M{I~TG;OY(HAD|=sIk?_iyIopYQ+T|cBl6|+? zG296y4Xnr?v8!J*h-;v~Br^?A0y>Qc+oLI=2=O`#3gT=izV^JWdMT=!#Mm#@@%ts` zt%BuA?N>l^W?5Qn+E>f>>P@LgKI(2hZ=Q5etrdvJYU1rZ-lx7Y*V-GA+SGsYB~Vdj zytXr{jJ^EBHVip5C|$%oxXSU^W15UASKEyRj2ZIm+t~p*iBy|_Z*R#0?T=->X^E@v z3{O<5_@H}jiEpJ|a~BC0%pAFg_GxiGt~;OHDGQIPMwQfaDK}ZJ48oKHsLoVca&Syr z9&+AkKJm)u{c@3Q?y=!6;G&>fHQ4kdj_Nm^UZ-EAr|9bkp571}{8^chFc^9pKA1S8 z0sBDNR52->7-1Y>(I_UWBz^o0}?n)7sWpa}UPgf2DiE|D#>`N6={hY{sUo z)49S+UFVrRL-jY&C@WU_yR%$$`gwC&$vG>l@V-uKm^(56D=CM3j0na-l;T{9ncy7_ z6+-S0Pf*w=trbctZZ3`>QoEO5sPHY0)Us-o`(b2gr28D+^@5rgTOpjBT|pZgS(+k^ z7Z^y!fH8(I)i}pRvLp~_33T)g3=HeyBA%tA3BR66mMP8Ph#(FqXdF6XQ@g7lxFTD+ z)Fg&UyNrdEp%L@EMNQ2KQJHiX3U>W()V)Pm8+_OGi@UqKdvI@X2mwNHEy2A&fdYjV z36S9K?(Qxv?oiy@;!cZJC~ZHU=iJ}m%--vq>$OoPndX=MUwf~$w9N>#bw(;74Fe*1 zi+Rtrd)ql@+aFBXgidV7EwXWuy9ZNanNX6=ghg&O4;R@NKny{ShBh3`tPs+>_E4&s zb&(Iln=CjNW8+B7(s*Blp>x|v=xF4+5({33pqcq`oV+)-8uwEH`fcVj!SsRk6u9`$ zRnJcXY^ToTM5Tl%2W2w}75rggp}6j4UIETcDr_Z|A*f`vyWS0!?aJi9_8NJ44j9K{ zhyosf?)yxsLl?!ssWOWnKZ2|qy7k`AMS=dhSh?*6J;OHc(E63ibn%Oq^>y+Ck2e0n zCW?qkvW_43zp^+ik&(#&AGbcw>Ab31Y|*aizKz;RJq0O`MdA8_F99ehiMm&<{q>zP zF?B2?G`@2QVgtza!mD$DK*8tLYU^vz|1{XsM|#{E{#69aZ4pa>&IRO&Vo$z zXsR}py8#*Q%kKD*2l6IYsOPN2wW#Jh#J(3I*-=d^8?O_4;A$j;hdF(=zA5%Kf#v${ zgNwjXr9d>k+Y1hLcx1(|l23vdIubNsP_U?m%^|K#!RZn*ykVh;Fby~JXK=R{C}V12elI;J2852$m*nA9i(Bxk ztNbsle#$zdfu<-j9oLuv8*t!RRZ^_M*LNyP>1v?ESD|8)VljS^qTrK3SFW3HZKh7% zRt(u`lm$}`%dv)jb0+wbvtI+2{EiP)zG+wVS)Qtnwohwr8GyG;goSuKw%5xcK5kj= zOa^I05^`Ecc8j*D=cmu{jg@qH7)}gynYW%)u$Q`0<_i&X+D(?drS$NC)-9WG9X*bF z$NCvC^~$B^tfaUFG=BR_w^k=C$|xSFWb#huzk5LVzi{|xP~iA?nnJ+nzXKX|81zd4 z_5D(I1>#QqPfakW6i!HAkBj8#8KV6X%Mm^auGvt(Z}!vJvVaJsFy(lu33}3rXrQ!1 z8dyfb!SlHZH{UyS734AYlCFwb5{l{44fk_?VgYPAr=p+D%eI`FC^I;M22jaTW9D#; z@ZAz4ni$M*_->$P5*%noD83#r?A4akrLW72X8#V)B21lh&yft75-<+wQ`|q)r+byN z^R_A$3VIX>4l}}sX%aO{TM!Puvc>Hc+gNs|HAolA%%9RuHm7_@QeHdNp0*g-sLF2= zH+Dw&e%fHjBM%UYo2HiLK(W-PnJknXQ_?3urBFlDlCtQM2u+5Q#H?DiUkw&LDFE+g ztQ*dk-*cqT)l#u$Rn;&FsvDDzI;I=S^26LT;xj)g$MbGG0)VGC&YPy6Q!+=dvUA2@ z2S>@-+E~;sWH+}>D}1YDt9FAMD;euz*_W?mPV&LcCGCG9v4-VrCXt^Cv@OIOPdlcv=yZYI8T@Cwd$i1)Mz05#-0arRNb?p*NovyO^sKDAY!XeU{Cs9;sb*7JG`9SArT~>~T$N2Rp!FGi7Vx^X7hco*7_5rJTlo&9aFav~9<}z7u5i*oy zeK>S#3|Ld`Ngujf5x-E88Rr^cPFSyHl zfox0)HY!=NWMgqEP-NDJHC}b!Tvty%hF(v@+Qcd~*+`+t)5wSNWV=gZ5!xce8$xqS zsNDBJjC*16@vy^a^DA)=i(|Fh+O`XAGg-$v*19;Cc}E{6vXLkPEN5JKFaDe=?;~CN zkIwxV))w{B*DaH?vOFebWjOwJ_m0oV^jtt&=2j*DqYV-NKtbf+gTln@EN%Y_0zI1c zf9s5;98dL76FH8i&t`3&$Yvp{s>{Z~=Q4ODD0M53}pZ=HAEhVritSuJxvS4>zsn+nW>uoYkbuvEa|Y;vr9Q9TD6m2S~?2k zq=USUq%oJqfw!62L8~pNRbO6oyQlz#0dh7~H zlG0RdCoYe?3I)XT5K7|6Ti(4B1%`)@Jyk6ZYhd=YSQ<7sU9Eb(R(Q$ibniQmR5enA z20DX=H9Kq5B%IISop37)mZJt!I~xkvzfRDISQ^s&rfylzenwT8R}0-0$oXX1)3U#t z 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 S|B-LI|KfuG|MK5*0{;W>vfD%e literal 0 HcmV?d00001 diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/files/teams-logo.png b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/files/teams-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..78b0a0c308939206aee5f15e2c052def7a18a74e GIT binary patch literal 6412 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 F{{vnI6G{L8 literal 0 HcmV?d00001 diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/delete/deleteDialog.js b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/delete/deleteDialog.js new file mode 100644 index 0000000000..b814ff70f4 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/delete/deleteDialog.js @@ -0,0 +1,60 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { MessageFactory } = require('botbuilder'); +const { ComponentDialog, WaterfallDialog, DialogTurnStatus } = require('botbuilder-dialogs'); +const { Channels } = require('botbuilder-core'); + +const SLEEP_TIMER = 5000; +const WATERFALL_DIALOG = 'WaterfallDialog'; +const DELETE_SUPPORTED = new Set([Channels.Msteams, Channels.Slack, Channels.Telegram]); + +class DeleteDialog extends ComponentDialog { + /** + * @param {string} dialogId + */ + constructor (dialogId) { + super(dialogId); + + this.addDialog(new WaterfallDialog(WATERFALL_DIALOG, [ + this.handleDeleteDialog.bind(this) + ])); + + this.initialDialogId = WATERFALL_DIALOG; + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async handleDeleteDialog (stepContext) { + const channel = stepContext.context.activity.channelId; + + if (DeleteDialog.isDeleteSupported(channel)) { + const id = await stepContext.context.sendActivity(MessageFactory.text('I will delete this message in 5 seconds')); + await DeleteDialog.sleep(SLEEP_TIMER); + await stepContext.context.deleteActivity(id.id); + } else { + await stepContext.context.sendActivity(MessageFactory.text(`Delete is not supported in the ${channel} channel.`)); + } + + return { status: DialogTurnStatus.complete }; + } + + /** + * @param {number} milliseconds + */ + static sleep (milliseconds) { + return new Promise(resolve => { + setTimeout(resolve, milliseconds); + }); + } + + /** + * @param {string} channel + */ + static isDeleteSupported (channel) { + return DELETE_SUPPORTED.has(channel); + } +} + +module.exports.DeleteDialog = DeleteDialog; diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/fileUpload/fileUploadDialog.js b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/fileUpload/fileUploadDialog.js new file mode 100644 index 0000000000..5cc8d38c48 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/fileUpload/fileUploadDialog.js @@ -0,0 +1,91 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { MessageFactory, InputHints } = require('botbuilder'); +const { ComponentDialog, AttachmentPrompt, WaterfallDialog, DialogTurnStatus, ConfirmPrompt } = require('botbuilder-dialogs'); +const fs = require('fs'); +const fetch = require('node-fetch'); +const os = require('os'); +const path = require('path'); +const stream = require('stream'); +const util = require('util'); + +const streamPipeline = util.promisify(stream.pipeline); + +const ATTACHMENT_PROMPT = 'AttachmentPrompt'; +const CONFIRM_PROMPT = 'ConfirmPrompt'; +const WATERFALL_DIALOG = 'WaterfallDialog'; + +class FileUploadDialog extends ComponentDialog { + /** + * @param {string} dialogId + */ + constructor (dialogId) { + super(dialogId); + + this.addDialog(new AttachmentPrompt(ATTACHMENT_PROMPT)) + .addDialog(new ConfirmPrompt(CONFIRM_PROMPT)) + .addDialog(new WaterfallDialog(WATERFALL_DIALOG, [ + this.promptUploadStep.bind(this), + this.handleAttachmentStep.bind(this), + this.finalStep.bind(this) + ])); + + this.initialDialogId = WATERFALL_DIALOG; + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async promptUploadStep (stepContext) { + return stepContext.prompt(ATTACHMENT_PROMPT, { + prompt: MessageFactory.text('Please upload a file to continue.'), + retryPrompt: MessageFactory.text('You must upload a file.') + }); + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async handleAttachmentStep (stepContext) { + let fileText = ''; + let fileContent = ''; + + for (const file of stepContext.context.activity.attachments) { + const localFileName = path.resolve(os.tmpdir(), file.name); + const tempFile = fs.createWriteStream(localFileName); + const response = await fetch(file.contentUrl); + await streamPipeline(response.body, tempFile); + + fileContent = fs.readFileSync(localFileName, 'utf8'); + fileText += `Attachment "${file.name}" has been received.\r\n`; + fileText += `File content: ${fileContent}\r\n`; + } + + await stepContext.context.sendActivity(MessageFactory.text(fileText)); + + // Ask to upload another file or end. + const messageText = 'Do you want to upload another file?'; + const repromptMessageText = "That's an invalid choice."; + + return stepContext.prompt(CONFIRM_PROMPT, { + prompt: MessageFactory.text(messageText, messageText, InputHints.ExpectingInput), + retryPrompt: MessageFactory.text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput) + }); + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async finalStep (stepContext) { + const tryAnother = stepContext.result; + + if (tryAnother) { + return stepContext.replaceDialog(this.initialDialogId); + } + + return { status: DialogTurnStatus.complete }; + } +} + +module.exports.FileUploadDialog = FileUploadDialog; diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/messageWithAttachment/messageWithAttachmentDialog.js b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/messageWithAttachment/messageWithAttachmentDialog.js new file mode 100644 index 0000000000..5d242b7d92 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/messageWithAttachment/messageWithAttachmentDialog.js @@ -0,0 +1,124 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { MessageFactory, InputHints } = require('botbuilder'); +const { ComponentDialog, ChoicePrompt, WaterfallDialog, ChoiceFactory, DialogTurnStatus, ConfirmPrompt } = require('botbuilder-dialogs'); +const fs = require('fs'); +const path = require('path'); + +const ATTACHMENT_TYPE_PROMPT = 'AttachmentTypePrompt'; +const CONFIRM_PROMPT = 'ConfirmPrompt'; +const WATERFALL_DIALOG = 'WaterfallDialog'; + +class MessageWithAttachmentDialog extends ComponentDialog { + /** + * @param {string} dialogId + * @param {string} serverUrl + */ + constructor (dialogId, serverUrl) { + super(dialogId); + + this.picture = 'architecture-resize.png'; + this.serverUrl = serverUrl; + + this.addDialog(new ChoicePrompt(ATTACHMENT_TYPE_PROMPT)) + .addDialog(new ConfirmPrompt(CONFIRM_PROMPT)) + .addDialog(new WaterfallDialog(WATERFALL_DIALOG, [ + this.selectAttachmentType.bind(this), + this.sendActivityWithAttachment.bind(this), + this.finalStep.bind(this) + ])); + + this.initialDialogId = WATERFALL_DIALOG; + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async selectAttachmentType (stepContext) { + const messageText = 'What attachment type do you want?'; + const repromptMessageText = 'That was not a valid choice, please select a valid card type.'; + const options = { + prompt: MessageFactory.text(messageText, messageText, InputHints.ExpectingInput), + retryPrompt: MessageFactory.text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput), + choices: ChoiceFactory.toChoices(['Inline', 'Internet']) + }; + + return stepContext.prompt(ATTACHMENT_TYPE_PROMPT, options); + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async sendActivityWithAttachment (stepContext) { + const attachmentType = stepContext.result.value.toLowerCase(); + const reply = MessageFactory.text('', '', InputHints.IgnoringInput); + + switch (attachmentType) { + case 'inline': + reply.text = 'This is an inline attachment.'; + reply.attachments = [this.getInlineAttachment()]; + break; + + case 'internet': + reply.text = 'This is an attachment from a HTTP URL.'; + reply.attachments = [this.getInternetAttachment()]; + break; + + default: + throw new Error(`Invalid card type ${attachmentType}`); + } + + await stepContext.context.sendActivity(reply); + + // Ask to submit another or end. + const messageText = 'Do you want another type of attachment?'; + const repromptMessageText = "That's an invalid choice."; + + return stepContext.prompt(CONFIRM_PROMPT, { + prompt: MessageFactory.text(messageText, messageText, InputHints.ExpectingInput), + retryPrompt: MessageFactory.text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput) + }); + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async finalStep (stepContext) { + const tryAnother = stepContext.result; + + if (tryAnother) { + return stepContext.replaceDialog(this.initialDialogId); + } + + return { status: DialogTurnStatus.complete }; + } + + /** + * Returns an inline attachment. + * @returns {import('botbuilder').Attachment} + */ + getInlineAttachment () { + const filepath = path.resolve(process.cwd(), 'images', this.picture); + const file = fs.readFileSync(filepath, 'base64'); + return { + name: `Files/${this.picture}`, + contentType: 'image/png', + contentUrl: `data:image/png;base64,${file}` + }; + } + + /** + * Returns an attachment to be sent to the user from a HTTPS URL. + * @returns {import('botbuilder').Attachment} + */ + getInternetAttachment () { + return { + name: `Files/${this.picture}`, + contentType: 'image/png', + contentUrl: `${this.serverUrl}/images/architecture-resize.png` + }; + } +} + +module.exports.MessageWithAttachmentDialog = MessageWithAttachmentDialog; diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/continuationParameters.js b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/continuationParameters.js new file mode 100644 index 0000000000..12b131ef36 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/continuationParameters.js @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +/** + * Stores the information needed to resume a conversation when a proactive message arrives. + */ +class ContinuationParameters { + /** + * @param {string} claimsIdentity + * @param {string} oAuthScope + * @param {import('botbuilder').ConversationReference} conversationReference + */ + constructor (claimsIdentity, oAuthScope, conversationReference) { + this.claimsIdentity = claimsIdentity; + this.oAuthScope = oAuthScope; + this.conversationReference = conversationReference; + } +} + +module.exports.ContinuationParameters = ContinuationParameters; diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/waitForProactiveDialog.js b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/waitForProactiveDialog.js new file mode 100644 index 0000000000..623bcd0db6 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/waitForProactiveDialog.js @@ -0,0 +1,79 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { TurnContext, MessageFactory, ActivityTypes, ActivityEventNames, EndOfConversationCodes } = require('botbuilder'); +const { Dialog, DialogTurnStatus } = require('botbuilder-dialogs'); + +class WaitForProactiveDialog extends Dialog { + /** + * @param {string} dialogId + * @param {string} serverUrl + * @param {Object} continuationParametersStore + */ + constructor (dialogId, serverUrl, continuationParametersStore) { + super(dialogId); + this.serverUrl = serverUrl; + this.continuationParametersStore = continuationParametersStore; + } + + /** + * Message to send to users when the bot receives a Conversation Update event + * @param {string} url + * @param {string} id + */ + notifyMessage (url, id) { + return `Navigate to ${url}/api/notify?user=${id} to proactively message the user.`; + } + + /** + * @param {import('botbuilder-dialogs').DialogContext} dc + */ + async beginDialog (dc) { + // Store a reference to the conversation. + this.addOrUpdateContinuationParameters(dc.context); + + // Render message with continuation link. + await dc.context.sendActivity(MessageFactory.text(this.notifyMessage(this.serverUrl, dc.context.activity.from.id))); + return Dialog.EndOfTurn; + } + + /** + * @param {import('botbuilder-dialogs').DialogContext} dc + */ + async continueDialog (dc) { + const { activity } = dc.context; + if (activity.type === ActivityTypes.Event && activity.name === ActivityEventNames.ContinueConversation) { + // We continued the conversation, forget the proactive reference. + this.continuationParametersStore[activity.from.id] = undefined; + + // The continue conversation activity comes from the ProactiveController when the notification is received + await dc.context.sendActivity('We received a proactive message, ending the dialog'); + + // End the dialog so the host gets an EoC + await dc.context.sendActivity({ + type: ActivityTypes.EndOfConversation, + code: EndOfConversationCodes.CompletedSuccessfully + }); + return { status: DialogTurnStatus.complete }; + } + + // Keep waiting for a call to the ProactiveController. + await dc.context.sendActivity(`We are waiting for a proactive message. ${this.notifyMessage(this.serverUrl, activity.from.id)}`); + + return Dialog.EndOfTurn; + } + + /** + * Helper to extract and store parameters we need to continue a conversation from a proactive message. + * @param {import('botbuilder').TurnContext} turnContext + */ + addOrUpdateContinuationParameters (turnContext) { + this.continuationParametersStore[turnContext.activity.from.id] = { + claimsIdentity: turnContext.turnState.get(turnContext.adapter.BotIdentityKey), + conversationReference: TurnContext.getConversationReference(turnContext.activity), + oAuthScope: turnContext.turnState.get(turnContext.adapter.OAuthScopeKey) + }; + } +} + +module.exports.WaitForProactiveDialog = WaitForProactiveDialog; diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/ssoSkillDialog.js b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/ssoSkillDialog.js new file mode 100644 index 0000000000..86a357e20a --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/ssoSkillDialog.js @@ -0,0 +1,111 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { MessageFactory, InputHints } = require('botbuilder'); +const { ComponentDialog, ChoicePrompt, ChoiceFactory, DialogTurnStatus, WaterfallDialog } = require('botbuilder-dialogs'); +const { SsoSkillSignInDialog } = require('./SsoSkillSignInDialog'); + +const ACTION_PROMPT = 'ActionStepPrompt'; +const WATERFALL_DIALOG = 'WaterfallDialog'; +const SSO_SKILL_DIALOG = 'SsoSkillDialog'; + +class SsoSkillDialog extends ComponentDialog { + /** + * @param {string} dialogId + * @param {Object} configuration + */ + constructor (dialogId, configuration) { + super(dialogId); + + this.connectionName = configuration.SsoConnectionName; + + this.addDialog(new SsoSkillSignInDialog(SSO_SKILL_DIALOG, this.connectionName)) + .addDialog(new ChoicePrompt(ACTION_PROMPT)) + .addDialog(new WaterfallDialog(WATERFALL_DIALOG, [ + this.promptActionStep.bind(this), + this.handleActionStep.bind(this), + this.promptFinalStep.bind(this) + ])); + + this.initialDialogId = WATERFALL_DIALOG; + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async promptActionStep (stepContext) { + const messageText = 'What SSO action would you like to perform on the skill?'; + const repromptMessageText = 'That was not a valid choice, please select a valid choice.'; + + return stepContext.prompt(ACTION_PROMPT, { + prompt: MessageFactory.text(messageText, messageText, InputHints.ExpectingInput), + retryPrompt: MessageFactory.text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput), + choices: ChoiceFactory.toChoices(await this.getPromptChoices(stepContext)) + }); + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async getPromptChoices (stepContext) { + const choices = []; + const token = await stepContext.context.adapter.getUserToken(stepContext.context, this.connectionName); + + if (!token) { + choices.push('Login'); + } else { + choices.push('Logout'); + choices.push('Show token'); + } + + choices.push('End'); + + return choices; + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async handleActionStep (stepContext) { + const action = stepContext.result.value.toLowerCase(); + + switch (action) { + case 'login': + return stepContext.beginDialog(SSO_SKILL_DIALOG); + + case 'logout': + await stepContext.context.adapter.signOutUser(stepContext.context, this.connectionName); + await stepContext.context.sendActivity('You have been signed out.'); + return stepContext.next(); + + case 'show token': { + const token = await stepContext.context.adapter.getUserToken(stepContext.context, this.connectionName); + + if (!token) { + await stepContext.context.sendActivity('User has no cached token.'); + } else { + await stepContext.context.sendActivity(`Here is your current SSO token: ${token.token}`); + } + + return stepContext.next(); + } + + case 'end': + return { status: DialogTurnStatus.complete }; + + default: + // This should never be hit since the previous prompt validates the choice. + throw new Error(`Unrecognized action: ${action}`); + } + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async promptFinalStep (stepContext) { + // Restart the dialog (we will exit when the user says end). + return stepContext.replaceDialog(this.initialDialogId); + } +} + +module.exports.SsoSkillDialog = SsoSkillDialog; diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/ssoSkillSignInDialog.js b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/ssoSkillSignInDialog.js new file mode 100644 index 0000000000..f6312ec17f --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/ssoSkillSignInDialog.js @@ -0,0 +1,53 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { ComponentDialog, OAuthPrompt, WaterfallDialog } = require('botbuilder-dialogs'); + +const OAUTH_PROMPT = 'OAuthPrompt'; +const WATERFALL_DIALOG = 'WaterfallDialog'; + +class SsoSkillSignInDialog extends ComponentDialog { + /** + * @param {string} dialogId + * @param {string} connectionName + */ + constructor (dialogId, connectionName) { + super(dialogId); + + this.addDialog(new OAuthPrompt(OAUTH_PROMPT, { + connectionName: connectionName, + text: 'Sign in to the Skill using AAD', + title: 'Sign In' + })); + + this.addDialog(new WaterfallDialog(WATERFALL_DIALOG, [ + this.signInStep.bind(this), + this.displayToken.bind(this) + ])); + + this.initialDialogId = WATERFALL_DIALOG; + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async signInStep (stepContext) { + return stepContext.beginDialog(OAUTH_PROMPT); + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async displayToken (stepContext) { + const { result } = stepContext; + if (!result || !result.token) { + await stepContext.context.sendActivity('No token was provided for the skill.'); + } else { + await stepContext.context.sendActivity(`Here is your token for the skill: ${result.token}`); + } + + return stepContext.endDialog(); + } +} + +module.exports.SsoSkillSignInDialog = SsoSkillSignInDialog; diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/update/updateDialog.js b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/update/updateDialog.js new file mode 100644 index 0000000000..fc999bf644 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/update/updateDialog.js @@ -0,0 +1,89 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { MessageFactory } = require('botbuilder'); +const { ConfirmPrompt, ComponentDialog, WaterfallDialog, DialogTurnStatus } = require('botbuilder-dialogs'); +const { Channels } = require('botbuilder-core'); + +const WATERFALL_DIALOG = 'WaterfallDialog'; +const CONFIRM_PROMPT = 'ConfirmPrompt'; +const UPDATE_SUPPORTED = new Set([Channels.Msteams, Channels.Slack, Channels.Telegram]); + +class UpdateDialog extends ComponentDialog { + /** + * @param {string} dialogId + */ + constructor (dialogId) { + super(dialogId); + + this.updateTracker = {}; + + this.addDialog(new ConfirmPrompt(CONFIRM_PROMPT)); + this.addDialog(new WaterfallDialog(WATERFALL_DIALOG, [ + this.handleUpdateDialog.bind(this), + this.finalStepAsync.bind(this) + ])); + + this.initialDialogId = WATERFALL_DIALOG; + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async handleUpdateDialog (stepContext) { + const channel = stepContext.context.activity.channelId; + + if (UpdateDialog.isUpdateSupported(channel)) { + const conversationId = stepContext.context.activity.conversation.id; + + if (conversationId in this.updateTracker) { + const tuple = this.updateTracker[conversationId]; + const activity = MessageFactory.text(`This message has been updated ${tuple[1]} time(s).`); + activity.id = tuple[0]; + tuple[1]++; + this.updateTracker[conversationId] = tuple; + await stepContext.context.updateActivity(activity); + } else { + const id = await stepContext.context.sendActivity(MessageFactory.text('Here is the original activity')); + this.updateTracker[conversationId] = [id.id, 1]; + } + } else { + await stepContext.context.sendActivity(MessageFactory.text(`Update is not supported in the ${channel} channel.`)); + return { status: DialogTurnStatus.complete }; + } + + // Ask if we want to update the activity again. + const messageText = 'Do you want to update the activity again?'; + const repromptMessageText = 'Please select a valid answer'; + const options = { + prompt: MessageFactory.text(messageText, messageText), + retryPrompt: MessageFactory.text(repromptMessageText, repromptMessageText) + }; + + // Ask the user to enter a card choice. + return stepContext.prompt(CONFIRM_PROMPT, options); + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async finalStepAsync (stepContext) { + const tryAnother = stepContext.result; + + if (tryAnother) { + return stepContext.replaceDialog(this.initialDialogId); + } + + this.updateTracker = {}; + return { status: DialogTurnStatus.complete }; + } + + /** + * @param {string} channel + */ + static isUpdateSupported (channel) { + return UPDATE_SUPPORTED.has(channel); + } +} + +module.exports.UpdateDialog = UpdateDialog; diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/images/architecture-resize.png b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/images/architecture-resize.png new file mode 100644 index 0000000000000000000000000000000000000000..e65f0f7332b79a3f65cd5a4ea6c33c7b5f979f25 GIT binary patch literal 137666 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%0DQgMmd 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

  • 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%0D`!{J7<*jP93$p#* zH?-r&bMEr!BWTEQQ8Rb`y2qK3OxXPX_rsVxJz}S-9vSXeu6ZABBZ*@b1$$?g7$!sO zGT0>ynZtX%Ez=urQXm9eS(4qW*`sibQ;lkw1_(Y59>#-uftOj@en7Dzp3|8k>IqlU zrAiIIvAILN3|6j0^aAPxm_TmGoap9$0o)(;!nTs>mZ% zw2FX3!y1Tqtli42!u(H8^%SEjhH=-SY!=8kSEhU+<_CM!s-Y?}a;nBpvb0YIl=y;x zZiGd~j^slf+I*|l#Lj$?%qR3Zk(^jKxX8%sN64f!PEbOOjx^fJoU)@ys88KPPg}2Q zH*n8`Cwm{C2OdxE=RWP!t^SGn4lk8##yypE6$ksapGy?4X9w3eo6$p1h3=&?=i(b= zL;^{S#!k|hEhXmiT4Ni{CHCd}$Rz6@C}L_4^M&u}#;(mKsyaj~j63?V+Qn~1WgiX8 zePq?UZhKIGncV$gIR2xqW>SaD_*$SLv;Mi=;e_>F{XX}~BNsYh_14aP*s1x@BX`~n z$Ae)e5Ln(KrbPTGwO%CJp;??YFTPFd{9`^q#efG<|5>i?VBuOn=0;}I_j|fz(CZs` zBC7Xo(S}B4azDuzneHW=hy}NbL%wr*t83dK0w`>5Y!SmX3c>D>K;!d2n0u?BxW9G% z6L)ua?Z({$jk`M`H16&e92#%jT^rZn!QI`G;7)==eAqL;|G7JLYN}@MId@&PF8jNl zdR|%2$2mMzq{zmP!apZ5t^gfnR#$Fpzk`oQIzS{=e%e_8+14`+&)RX0Q3MefE+#^T zW@MSALg&Fp^5Dh1==c;2zWS{g(<714ifmaQI#edH*bEqm)$&f2f&CWa1;`6xvFijP`q`CVq%NJDECL{%1JhbLua`7|PqnX$TGohny0xb7`$%s`%vLA))$ zTKtqhnJRn_{Q5(%skuu}_^Y*`#Ol1d$>vifmg6IVWzp|M{vQJ^oyeCT*T>UGp^*d>3LsG8F3J_rGBVO+EUX6wpZJ#C zAmT+;tAqei0A4zx0`rj{*VeStnAmr1JP0!#6QEQGtfa(v!FDNS--J7ffuF0191!U#V zxEk1A{QVoy5-rVOqp!h|sy9`G*dgei=p>74&BF#yPU4|cx?}>5HeZe^!{%2aTG8aQ z=3BwSCXZEN;BPz|L_srKUAgz-w!zu1Nvc#kR-hij*9$FDCzqI^IQe6vV%$h5pzoFO zL6GFG%(qLQt4LziZwD>NshX@AdL74paICYrY1r)%5V$m)i=R1qT5eI{8iZDL)i?Ic zR<`D#4>st}`n=Omi$0&tOFs?j3SHWXUxBU;D@*7POwap$4c1c#iaF1sa!k+v^@_@y z5Pn10AW;PvS$@uxwMPbVmgBqTVQL?v^O72ueJy5rA1{hq=x7Lb zt&F_2fIrT=T-F`R1Y}bUcn-)n!#lP%fa3w?E~!JwaUSPs*;bXGtM>(@^c$R00ju)| zt@{Q2nK)^D4WQeX1jGrXVcnF1;?xBtygG`R&*w`L1^ag=^Hf^(l!+-TqzRajV~J~? zRIkx(F}_T4I@#-}FM%!hk$2z0#1`O*jn2gJ;?L^v|H-Q0zb^g%@Z%q&@WXyt z*Ud)jpuUI1$OC0kcRTY4_q4B;yS;uB^)W_snOK0>ul#z+X$F-qRzuYN_(kS+L>#~+1( zoAH`&;eAR5ePUg&WiM38h%r>xXp>Y}z%?B2{y;pv_PEaW-RS&;9OZnH`A!g1u2Wm6 zVy2Su*W70#OlFD8tfcuYpt*;BJ<~|X%8SJz&v=XM?uYz=E#ALdKf+|-5Xtm?{SY9D zsox@nO+Qbzhm47k{e` zOe4dU2kxpX{vZhbXzHr(yV~LnenY&Vt9XJlK8Zoq)+TQJ8sM%{mwryNJD%8r4!hyW zrZ`bC7Rk0So6qvHF&NZXg&Trg+Vl`-^BH)*GRtvU;P*wN>%dyI=uY(wd|dOZE2~X9 z+2rZ+iLAO<%Hx3rdCVfW+W`hc%RY&A`WGDtEHzOEoI3Ykhc0OP1dGq>XWHaDythiy zYpN@S{zU)8qoPOCt(E4-4#(+JII!b47A7I1meY`d7s0I0A)C=!hd^>loL$LL(b#<0 zYOuV?qm*&&)Zj2FHB)xTzs>s9O&a^BG5jFfJf0D%x$sQz%=h zUC+L`1bH~Y%ekJtm}na)ysvN(W@mOXXy-SfK8q{xbT$MIpSIFA2VguLUb-e<;1mEW z^?$x&Eul(J)>>Z7GKhS~x>_@a8>kfBB8@KV$?$Si?+Oid0v3*&Mbm7Gin3 z4$zJF-QFX))`qv5Z6(1b->LS_Bemg=z@(lwR}YA+rm;j119Qfj3?n4M!eygIKV;wt z*cv&MgCyi@-YQxsNy2F?3LvYhz49xeX8r&jP5nk;s^iwiO=RN*;_rXTg>!F_8^V(@ zNa4-0BhLS1*l%UZZs8_ALg5htc6n|m)D&A^ej_k4c)K@BN*diC;Ujqp@&IYpVhwR` zi<>N}T=0!^1GKqpt$dRjjziAucL#pnh?Hk&VBtW*1NN(l4QTT>3`B`@Y%Yf*yqkwy zX*=H|>kOD#_gp(Ek-gEq1$}hm5PE$}6Ok8hYv$=`=J-F{-hb2aKcbLiyMCz_I=y!N zY7|noDCo=IUhkiltF}7{R<{O=EyikgQz`>U4^ZHcH|-PPx|qn2hw2f!QJUy#)3C84 zPzJoN*!pVoBhErrJ*p;~q{n&0zIl=n{mj%jnr!y561*CteVNx){zjkjHuGI!RWI5_ zRL&#apTKV8+bNEyk{4%OF=>Fywz>C7938m494U9B2VrcMfpfeo>JU;kT`vUsekUFJ zAw|31Oy|XYnsF^btEgSM`NLy;p03??+9FX0(O4j5mse-W#qR7xjY;RdUwoWavG94z zA^%$^L~bK9AIG6AmIHO%zy!suAgz4%w(XsI4G$v+JQav*-WcQwtb;JnAagsDvqz=H zkJWKv8Ej}dKw2 z7^PW+rU{i(Ly*!L0^a7ND7&m_J%(vfe&p!$H5Ai;2^=)m)j##Gl449WY4%DDnKM01f#45a849D|sfA%c5%!h97oY$y*&&|4ZLvMA~ z6t@mmtvdb8?*;g%d5eQ&TDjM6=^nZc3qAQel4aOv5=4O5L!_QsU1wG08#{xYGczTa zcl_SRqo3q8_U2ls76HogqoI~_f9$accir+t`-#Pdxl<^87+_;F8%0Q$ahVQ;v-(z0 zQH~O>n1+Pa|BFgsbyJocFA@ipLe0T}4Gm>HQ$ZGxRrxEQ3p35AOu`IjjbDcsnOSvz z)hpexcorkKoPR{E*-1ij8OoiRhs>3ct16};RTD@~4=r@ksYTT?9uCv zW2p_6l-Ou48OeK6rb4l##5wK8ISceE&mGn)yI0jcb#X;rv)nSQ~29CG@W4fD)1Ng3Ttr9wNv4Hd`h!T3h0vt@_ zeC05KX~e^UrNA;DF_l_QD8@0JM}VGXSOATJRZK+g7&yL8iVagSQB<2^E{@84*wcG* zM6IKjFRmK6M2?D?dQWPWB~V3{agQ{wj{zApJC6RsHwx#BAN+)FisOMu^nNdc%36O_ z=uEs*j%0%rSbE~#l) zuEMG@+L+gcMdK0thNBC~BC3)+Uofdzux8_Fa-_$|zQ*&~I5N#DXKCdl>j|+PzLFmR zS`sMP`odQVT8y)j$ z{_tq*jIb1W8z7Uaz1qb2c8qy(yVuy~vc-$}rJq0-Kx<6o4SJ(l1=Va{@zl@uy;p3d zXaQ3o+%tFzs8orN-x6Teu<3nC)R#pn2wbe$e~9l=F@eF;e9+!k+51?g;DCyxQdBYP z$c?zt(f{4WR<|BUp>mLO)@2eBBtAS!+{T|Sr_wN32-sFf0?%ed`DY&@PhF;YZ?O(% z0%%ra>MHetgIY8!t? zmU7U@N+)F-_V0wz&Z3agSpAc+?SOH?& zCplP|B)0qBYbIYs;~Z(qwOKj*Z!8l2d!6`46f9n$4@Q=YqxIV#9j;tVkIRi4z?W90 z0*=3{q#m#bM*&1>4q_HvG%Ydp%>qL)>+@>&bYygn>7z(%Xs9j0^J?6Si+bv;I+|ej z2>=oCTxCj**~JH2Xo0X=!WU+=30zKGwwC)LxS|+&_iNskPa12f1>t7>_)v+LQiipP zLyHR|7TUo>*=B4;V(cUz@+sq)hSDP^W9xekxf!E^kC;Sef--<``h}aK|AsM|f59J;NSACzFF|D>1v7C)!e0tT)6pC%JKYy*o)jevTtIT5s zo$HVkkfI5Vc9cmY=HX3}$YhbE=Qu0)HxU&XMXXlf;6faD4<)+cMwe1CN}38p9zN4h zfsd>uKrO&=(62lIl$DGaMTKx1vN6At5vK2;9hS5OCj;W3y$t7mLrejk8{k6}L zduCcnsJoepN!ZCO&sbSNyyM1#{8$34pPO&x5iI_ZRNN(tJ9wIPgQ~elA~@TaQTdkW zkb(~1%%45(1{q1lsC8J}mPx72DuNNug$ZFoTl<34Nl6GFM4ozHcjd3`{5aTsS*Wsd67#Sh|Q7g1K_)HR4<#gOn zu$XD04x`LgUD~W^beidE%CUq21*{$SFSo3^VdnC6m=g14GB*|>5}8eIhXb*7gK_mU z7%{fOLQiFI?sSEXZ+UVju<30&6%D>gr1-|<$GIA>9|Z)m1yg59b{2WDelbY3bBnrf zo}>A&e1(mbOtn#pj(fyFCE{GXQA(it`LJ_3y2o5AUuY-1*BEbIUV92H<%ZXi*@yD&P9fE;0?6_t z>_QGy>X`~O+=y{#M8Sh~Iw&~OEfEOd?a{UZD}H+I3!X?UZ6bmgh|}8|3BID(NqF_8 zQLYcIf`a)Wd-QWx&1GekQMrXi&mICFKR1XQED&1vqx%oSPJ0DrbsSU$d_z_d?R50{l@FWh$g3gvMtz#!c1}!Gu8bR8~QbHN{ zewDq#k;cp7!hug1Tc8SpfU&(^C96t)^Cw77LvYmAO^QxXkX0Y&rY#bL{B^C$UXyia zvfe&pu(dC~L6*v>TKwJjyf69`>amL|_+T>*3 zE-Q}7wkH>p=&a}bY_e#P*nZeEy*lWC(h?x-c~Wa4jQ4_SEw4{KIqd1=j!Q!Hy$WVc z9lL|oko4VfAOT};)k8I9driqVPi@A>siRnAy1+%h&((R=wOC}Q(#cjJt93`=yX}Ym zy%CE%KU;OGzd0B@XhtX^aaQ~^`cc`g%!qOp)!SghX_SU6DVpow`Ly64BB zFN=&=S=~4gUG$I9v%gPNRj5|o^d$?yK}n6_TI06_mDSaA zcx;vR1Wsr2e){~J)8QFZA`AOpvCjP8=)ylvq2d(@x8M5B;23u2}_bldZ3wViF1P>XUcGyg01vJm&<(G9z*{+>g(ycj}u`hZ>2P zr1<0ImYF(Z1mx13e?5tds*_kRm75-MUK`L%l=wMnrZ6gJ(kdh)+&q-D4N3%!D@Tmg zv34zEyIiWX>A)Rm?B%KxV1((!4njI2z~uQN3`2^Z3GjGYgo|P6p1klV_Vs!_@>i&E z1XZc)HsWiLPT^Cvlyr#SgOq&})9jVEvM_7Gt~ui(pG@dtmysc#h|q*(qE{<0waUoq zI36ayvu1ldpzmS%(U1nypaR)joU@*HJen26tj))*u}|&%gNyz59RAOYUZ=jd=BySL zE|p(b2vD{uIcb(k_s4&3~3k28a+|44>qJ+gDW53p-DCsyq9tKG>S$jC*9VX4?S#0(WIo0NC6vJ_dYAZiSrKC( zS!Uvejg^zBr~QqWfYy@&bBtHLS(1Jb{P1A3c&o+52x0pAo=&T61No<5pw?HnQ>=HB zD*1^oH)gqObo;{!jT}xBgl_IF54UH8`B7Sjd!XHynREqHec4 zp6e4KRHR8aWOC>O&C*Mk%P>_P>&kFjtkHFqdehYsbns3QJn;zlc&{S=R99s0s>Zh0 zk64{NFHxQ((V=HzfFr@}KHoP9jgVM`S${VwXs-C4hoR3rBD@CFpra>3sI-(ZB2lP) ztd1Td#X(KO#D|=qf2}_rbFT)0K`Wn=b6dGpR$yRjx5kDwNu%E@H7VaS6)6e<#*NF0 zQ_1O4$pB^(cV0)pS0JG9mS+ny3K#Iu9-V=g9m14R9)gfB2URLNYyG}gop|}q)Tys# z@nIoO;WEJ0KHi1H?zjWmZ?j+j1wrR8&eaX!;>OBbu8y;s3=r8f>=ZL6_$pR%m#?>Pwu3-r{(O6>3z`dfM8rrk)Ml;B$ z@7YR9^F`~lBHU-jBMvNJT15MCOc;^5aGT`LeTWFx(qb^rIhnWvJkD&7CA=l{#-bD} zMmIU@5hsTlZqcev9*k_@vx&lj!JiBN75UB za5B{RHCbxnNvl|4%w?PJ+ZiOM7LQ=J0dtAd@!_mH?jckuA} z+|RWYQzVCMP7eRX`Na1&)=M&&Wl2m<5qiaVqj962 zQSF4lkBe|?Vb5kd!Q?K1;+ghnr8~&7A>`~G1emgFdpQJUrtE5VO+Tta_j28x6y!~O z;-H3FWpz;bsc5vshyH#$ScukA&fM~lu{d6a^xtUYtswTN57g6K`6ofnhiV27-99*g z;wvs{P~t5id%$|R4MpT8YgQdAW!rlItD!a&yi?McG(whd@|LxiIHkLX~Bm^o`7#;kRo%SCE7+bqZ;!>M0I^p78=}A zN2M{5q^1XHFQUwFsh*BzDAh$f|1(5R3HaK=u+FcQ4Vlbf5i;{i&8oFj5B<{_Y|`rE;uE9)#}Hrs`Kk`=X7w@P@uGB%ko(% za4Iz7RwuMoTB}=xiD}ejdiYcYG@8tI*;0B1>(044`^<$#npm}L|CzZ0m968s_7i(X zLZ;Q4NlPO`xPYL+2A3kV99|wMVF2VWp62bj9GQurj7yZfe@V%>$y{WQ2K^_>j(r>ropSM(O*v;rrkDiE<c`Wqr<@sS zFlJ=V&@9c8PlGx>D?KIo>ge>U(d?=AL&v1CnuEjBzpItPk2-aStgz2$M>XfJVRyP3 zHI7VbQ^8J`N~vjU*R!PElnCXGQkt{zbMdEaJg(I^1FQMl*EY#K3Np_O4O06|W4~kn zczUZd7cIxs4qrSuZ zkucfY#93xCd@i^2NPFFIn^Gx7PMeUfuNRN3uGAV6jR>#75*Z3;w(vmvBd-_8Sdg8- z1I;2%8U_W~_)TX&Iv3GcJ&XIHBD`cEDO(MDvtV8m;HEkP8`Ea0RX%=4x2R>`$pit` z)<7W?h7`|NNA94pZ|~n|G=G&GRh&|t_nIq3^9-Pw04}6+Yn8@s3>2t{(9F%umDC5X z75X0eXcth+&2TPZV1!-_m*)}{^<$BwdkgEJSCm3Q%-uO;ctm+rB0L2!e@V;tL%*ozsH}&j#A`Ba+K?^J z0@39Yy+*v5c2w03lvMkTJWoH^UoGJvlS;cqJ{=d+iy>exljDcajMzL$2G2&)!$Y!$ zX>jO=<`G*7Bm1Li1&Z8))G-|8)<+i$Gaz4@TWF~+hm>PL=0oej48V%SXPL~W zc9zg31$$P93q0r?PWeT>#Z=9{-6X&F$Eb=Tmb$!2I@txb-hl!C*=%qppH)|EF+4iF zFAv>FXZEi4c1n+PMVPe6VQal;+*B-@HN?>izJHv7Bb($wgbCtb#^I8S zKGl~7GuS8_bCqO`U$QR$;1Z*qL0_5J)l9mjX|JBT!4|B*V80J{cfeCyK$JiNRC?it zHb7R&bbJoM51KH~VMRl#0&+HX;={+P8S*c}p|G{Z1WUmM6{|#h*&l!GQ|YuWZnd)T zP;f;&t76f!m_>tkXFH>Oz29(ITSEg>p!!myn~wEO+|0eGHiw^lFmR(5(*J`*n12!) zsa>=%HEr~kIJU(cuHvY`<*E%fr;!grrid?#S3^q9%M~su4Osew@1blQEdo`XNYIU<)TqiwpLYT5aUue@Jk_L zw%J$Cy{@i|NJ&5iPYVq$1K{fHzRpE@OW5z3cZ>;U>wkrPN$sjVbv7cER~E*&Wk$PX z1RwzN7Zf(*1V<|jDt5S%aUSm7NMyK3pcq^o`VOX`FzGpb zLWTi)z_tvo<^-7IQ2s4714pg67L30L2knC@>`^9saGAPd!U|O@t&&hn#BB5WLN~V;CR(`4oH_v#gif86_Rr zbHh@Jk%pR(PBXI8ncLiIyTPiYuah>%KDAO6IHuBA{FQ<|DM#%=Elw*s5+GZB`&M{M z(GHq4@+g~KiO!|VXLEnG%>Ss1vJbSd3RLA+s{=b501GUJS_^;35_~ip?!ASsXD5XXED8bt@n;tKphh{WzW+BJ3x-Dq+YtI>y?%dh)`@euwE3~z*?Tk0yW zpO}tY6s<$?BUOEJnpZdY9q49s7XxdO}V_ieU>MY zGB8+CX(Zjb?L42@cmYyE!g4@D7%R{;u3>zsU28*omWCwan9OJ}Zh>zK&#ttT4STMRW^Ru+9}EI*ivUu5pBzxzj2F0zf;_8M7Ab;7Y4K zGXwDgYU0n>=F@m@-%yR&FOZPge zA*gR6JgaxW``0&jJzMdY_{qfTT{GHqY;MX`w@*Jemp+Yq!rr+!uAQ*m?9cwyP&*BE zsX84~uD9a*PHMM3+y7WNP@Z*lXTUQS(;AG`szH;szEAC?A$@kLL<+Xh>Tr_ zEl+7|ow>W?V?AHZsY2uI&O=CyRFfX9G<~c(9=Khdp!x;BRLvg4bU7gft4_kRJ+moe z8K{k9QxUJCvI`Z9b*WN@WR5t|)UrOBD1{{+%SKK!K-NA5UWOX^F__Gc*B1Tk>PcTv zz)2pvhF}m8|BNpSDiAiG$Rd$yJic8$ora|>Ahx8Zp3fVVkgWL zwXA0An#PL!v1U?5$B%PrYr?N!ht-7-;>#{uX6p$Iv9ciMKlI4YGwQTQHH#3^_tBy9 zfeZZl^^4;pUiwP)8H~_C9^S&_OVYnJD2^%)Vftyj2X{;jDM0*A0S5m(OHV`ei z-eQ>F#AurF9ERZskgd4yemk$xZKYS1;Yq+Vuue`?`m4lhJ**ObTLkU+(fDRM({K(0 zqg)+rm)#f#k-mpW`^S5>xh%oVt;YHQeZ&hB(`F&DR`Xzm#4cU?d3jJGU|X%`HKk6P zhhlX)pQOqKky23gW;PN&94~_;EDsKeOUqNc#09>Y)T~1)+Y>5ngOl+oQkGd}Hjmtf z$g>6Azn^DC?s^{golOQKN=5P_sp-v!l-j z>g$lr3|ejxYm5m^w#muS-@k~^*Nt~mdGhr~5!2K@6lfLXXU*wgto{6zNJtTVYj>}9 zS%a5mIEDDIdO_!VxmguD$-zNYrK;Q!*=6$dTrC4Tn2!C9A;O}jKhMI~)jNhMd*1Sa zubivO@ohIymE+;cC5Z4pWETD(Q9#AFUvhE|xmmcT2yr<7Na<0k+8~)dGRto-*w^9@ z4Z}pwkb%o_QmTuq4{9)ZqV&D8*O?39o< z5l+ZE!RT3yD(={COU;qT-NXdB-V#We9m@NqoqjeT%In81=l6)SFiqSr5i@b@yqLnv zl?q!M$b66&jt4wq01Bc2W;V+}|4V%*Q&;5o=vf5H+c+1KXbOfqWgoq{YHj9&Rc(^e z46pR-7t73{`CF@1%thA?kDu@v^C?{Lu!J<{UicN-&kFf7mkYR^?VU2@O6Qn4p%!{P zu=D9WYuV~7j&15iF)T0Ev;kRyuBij9AYg#S(7~ESt-$Ic-Wo8k1+KbWMZROo?7QCY zNY+C}A|rRS?JSeF?qw?Fp0S$W-DV3Un2saNtFEMpwNcNVT_WR7VViqRMoHqqHc!)? zEn}bFDURj@p{hTCTU%PDcP8eHJ1ZSJLea~DkL#BzWps z@2^ox7bmr5>JH-Y!VA7un2sD5}Ye%&!>UEnEK04YN%zyuJy>{JeCtNu7z``un z*mo7WMcxz;ZI5+pSS;{RSx|5vI8dm!=ac@v%3C#_B5K4;!FM*_T#sr6C}<$DqzX5L z^%Z19rl12PTFNNqCW-zV48|~b(^XtI82+5_ry~_!`aqqIAckeudJm;)&`~|wB&wW; zohOPON??bNrZnw;z}mETt#b}dZbpdk2I!SKz>FP>sgbZ8vxn~VxlJHX)8NMn^R7Pd zmTaA1NJFbU*dw9qVt}J|-K(%7)Rbx}He7r2EQ`lGOBcm}D=yYnLuDiSijBb1fR^Ob zqum1Ahcb}=nYB6FR^$ha2`PPn2X$_0YKvBENG$<-a79TcE(r1><`%FSLb87gohzUSVk;t9o8ErC6SW~k;`NbTsBBHs51V`rbWWlrBE#}Y1bIi5IXG$JYwX`X0&s2p~s3Z{ld^hi0wmuMWNNB4E6 zT1m1*Vd5X{h7{N;g`O>b=Ur#L;xXqXYz_ghX?qN{2qRqd`c|RmIXAVLIRr@F?#1XD z=&>eIS=PQ-IUJoy@a%&^GT`>QiPA@`C4>Ys8mvS`*-@uMJ>JZHFNX@s7^-Mekjzjp z2Sz+K?WZyc#6Lar;VOvUWr!FFlN4`KEVA{uL8;Sp@+Hj=ikSrkX^L`WS7m(ET1VEI z&3)8s;5qG8zVeGo4u=Y___a!Qj{3i;UMg6d0E9@P18hCZTQVfsh2;{5TcdJ>%qYC9 z!yzVk%6HF;+S6nlna(mzvV+T9p9IBskhfghQXSm6_!tr&tfrU^V1^0XT(C;M(mA37 zNQJ`;m_emB)lC!G;pCHC!_(w>x628^_0$-lftj4cOsQkif$2bOC#LGr%5#f;vKAf9 zU2oJA(p_;%pR-K6f79GKew;cQcKaV;icS9rTfsjtlLDJAZ6ZNHVQHke9|XTk4BCql}YZ5~3QSPz zqjOOW!m;@Q&pTrCUM8CkSxJG-d}F~tSjfMz3ixj?{r`0Ef652jH7AbH>3L2H7bh%D zD&tDctNp7ZypHOYddZr*_~&e8O8FkwoM5(Dv@TI&#fb6+d@KcJbql;@8zch*%SS*= zwLz_FM*t48eP8>6QhMqq<0?}?aq7%5EP|LM(e)uhTUGx$mR!cb^K4Nzto1y9H&}2&!1N~g;r{N%Uw-Soc?1U zlhhm$r%Z-mC8v3DC#7lXp=*;>kPH^1XxlGKYp+SCg9tsoiV@PH_Do6}tJNghsUjc~ z)sjH9ZAUgK`w_dWSp3V^b2%9S5nf{}YecLCnP`&9M+sL2IEzim!I=m>$||b&L!}Pj z=6(9yaFshgx}Xon${~nSqNN4=0SI_xm}TLcp{S8VK5J2XeUeIP`!6cNCk_WS&YrWoJ8u*x6vkC~;VcyY&yosrE;5FD(rg*QD%B+y%gd^T{WA^zY z*h}+sny4@-@ien^P3YpReRdmx#H_RcOe zVGN_n2Oz~So=z!FSbd$8s8KB8o`m}wga|><$R|4+=Oujj50Ih$Z@u_O6i)25FS%{B z){`*aI$Sx@x%5h6_Y2Pyw%flt1%C%PBBUCKT$TH_H4m7?NhvsWTCHE!Lyn$L>t)kk zk5D9hA4(ijkfVfE!pz%qg@DQ4-&>7EeL`K*w_@$MnYa!pRiNij=Q)SsO zVu3ijU{GHhs7phIzKu*XJW}ACD6N|5r#w*DBcRqk@3ii3G}*| zT{|w<;Zkwx`A72(vAS!6v+sV6rgg&(q~-vDhF9nB%Jjl~h^bs^c}sOjcn}yIqA2dv zj)rehLzwB9wEf5#Az29S0!pU32e#P0bcpG4)HvLmDZ3w?S&ry_bA3%mTnGpq@UAg2 zOu%FVqlFQPu}XV=V;(=M!HP_G5aVN|%4HH<^UyKtSx$9#?ts_vw|f1|r;^#+rRd4& z-@FTXP;ja3`B4&t0LOH9@M98pF@e3t`Xw9fM}`az$=^bJc*od@tD$I6U>2E;)1m*m z(p}oc9)yqC_Grxx{mMjgUowkvJj+sL8`po|^qEOtph>{POwmrv==IN4+l2FG8;nVW zub533la>!riqO7NC7KLZdz8mvAqkGg#QBsKRbnn>X>l>Q8I?f)0-i!4(oddVJ?=7z zlD*G?nXEwuGR#EoGO&T= z1GS3kB)ugK`tVgF&q_6TtEV=bNU_GYKXW$A-IPt+82l!)tjK2E|E*=7dP0|IOtE(L zJH7!+`C7^;0H?_!w>yU~1$N&;e!b@G&h{tOw3p#9Hfp?o(w zqYm`&70Xyqz6<+kn}>wCQ&k)+>)Y>ufR9Tnl@ko4CuCbBzrTE0PK2XpCzxiI0V2|c zMT9kJvMv+QEu0sLNxKZM3A=q-LFg{w`XJIwUo2y-upL2zk5!q)EHgPeUr6kD)Czx4 zV$e{`n)=8DTq6gI>F7xm@{VSZT!%ir6giiTpRUuvPU~bmUPUi*)D}>%-gji z5tqfDTeB{IC8I(P7R?Lt$O9cteFl&j`J6%;(~ z)05cKrfg5o{n6!({|1K4KRpF02d&peW%bvdLZpC$V0EiSVi=-y z7#w~j8CN16(bqvfejj z2zLgY{Sn_5%JY|PRymjB#~poL_16>_HQI%wu^bQA(iQjGsf4c5bD*Yy8ToQu74jED zk-pin;fX7spc62k=7>Stn*<~GHLYT4&w6o9{ZXX_qTtKImekMjTR29%JC^LT(M%1m zY$cWk0psGg@y7UbD#=A*^SSlZrDeK&wp99(f`({2+Uks|wJZQBy@Hxb`%?p5W0+Xu z_q0n|XdX;mWi@(JXz{GhAmL-}urwYKAk4z*z^?f~_Kh^p6AFt>Oi45ElDqyS57HW* z#EA0pIHD>_ssz0CV8pvJxG``CsR!wb{e=|3TW3q6^iNa)S6M#Vvm2{^`CCal?o~~o z1t$zQHdEr58mZumfBjylMn!6nu-==D6e?$OPPu#D0kKr1BKOuFEW*{-nDqRD9rFcgm2UorcmAIhAQ!#?B3faJLQ+7xN||@^D@N_`9&>{=ynJBwc^U@kdv5=b0-2`Kq`p)cJ7;L( zHyzjtI^yKaSsym38zy6X(tIeB;zd|Do_OvaH4tND@sGW@Y;QrP6&<^4PA7*BfAiymJz z@2XW7mKT#jjICzA_Z7+ePBMy!YB2_tV!3&(oOE;SB)D`g&`iG(S!VhOEtRjK=rSlk zmBedZboL z(uH<}a!*Pf=D%3=NO>AH56=v^Lnb#t#^@4C9CB477tyN3*~waZo+s$16S_~X^I1@d zUqX@;DjJMxA59ata1FI@SbxIZS$ELu{i(4J^Up>PelN=}rKAyV|J6bPenaa$B;!ue zKgZPjBYBIu%Gi9_&fh;7|G}Ncf1HAy?OM?5%jtzVfaL2$lBT6x@m~|kIRS@|`o3RT z(gKQ1h71mbvRo){WVQTx2^9R5jJM_R;?7?jW4J6pwgsQQJXl&joW1v{0RFx$504gU zerP3xA8cy4NHz=9`>D3$2X<{QtsSSc$1# zWCb?)5(B@8%Xst#v$_hI#-G;f`eYFjHeit5O;?e*S3g*Vng_BxUlMP%<9hP~!W!F? zuH$V0VnLRaXcwQ3+LbhfD*NAYE42^+oeD@lb^n@oBfP8|gBa9octwYp|4BBGt%ajf zR%TN6-oOw#7-1;jfkVNfQ#2ZeBjdskc}oe#QerEO1Q?zT!pWT0W4JPiqE$~H|nuZMJs}3^04VJotV#RN1lsjHQw$!e-Cg;4_DoQ<2&LFG8T91_|7m`ny za5Z|J---!lljtRE z!j$HqMOLDlb+bw&z`aEu9wm?(h9H$VhrQZEMC80)vr50}OlfylRjx#qcUcxP9R`}4^unt!i3qa)2-(5^1krnajTM|+iIQKi#ER6dH{v8^VV=|5!RLd;w>BAx zb!kcPQ4D`pc~Oo%h4cnOU>WI_E$0=~=n+DeK9-*S@Z6Uwa#? zB@SM>uyHH&-9iK+8)-WID%EPj-#Nn%w9pb8>y`RHxnv;f`wjMDzV=*ARH&+GUQ%7S zMwTp5N3ixRA<4?AqJLHLoKORK}Pw8{U>fmqx_g$t zT)b7~7qJboM;UX8%VDmQuUc8pPGTAdSqZK#`@8)!>vD9vzaFRWgDcM!GgD+?58Ct5 z0d)^FVM|rnzaDzqz8P#WWGMLjsm6;f6Q^!5TSdtEx}FiUT3&MST|ZVes!KPDG-KqA zSx;Dff!pV#f>{?m)+At=S%%xdI9iA1>%;G-);z&HFJ!7JU>P$ZztR7~o$G%< zA;iPv6zOoe-o%{dlh(pn_Flf}jm+ZbPSBg)H;8UpO&{q=15hwWeuZdMo@*e3S~V@k z#bjs{0S73>g9WFjeh`tP%J|;NyK*0WmyR!>aUG z(o{*)P0JHEx0-01%mge<{R);E9<^%ht)@GuB}~pQ;|D$OwvYa8mfs-fySkn$4_gKp zS3*ZA9x9?USldtMbIL~qKB<{sWVgr{d;2QsLStY4I$u1c83Y@!9H?jKAnz~dnMz~% z{$x9@x|dNJeb-|)!LOQ2`RfOd80`P*yw&k*@^J#oNV@T8)1`oxMq*W~U8VTEM~J@K z3vfEk4{-Y3$_l@npV0cr`Jk#p_j{>$HmNaG;;Tst_(w{Zj_QC!!8_#?xt*wKBeSqB z{3zfPuA&#ma^1jB+vKp0L&vm(JRU(Z; zOe#l&qn1@dQgz~WwdnK8u%m@0Bu!J(>sMV__#f0?YngsnSp2RV#Hv}_#%O4uYSOMW z=2JZ2A1ge0g=n^C@8OY9^|Mt|m2LK`o*A-ovVt|deD|q01^=e--jaiy46h$|{&vKS zplM2w_!G#F%>vTDU1gtIxdm1$+vO`J%*Me@t*EAT+*}OD47kbx7*&g|b6!o1-l$H! znXVE$MG=AvnA$f>l}smx;{4+!${Edl(__kLzmE@*1>`7t^QXj!$a-hShL-MlypUtS z1MSIb3-|&L(buzR2k>%Z&6GaV(Rzm0l9>ySwxMC%I-O)j-)?iHHNOdP1zCK4&AgQV z&{)YCR#wNvC1j^zAw;9`J@m9vLRo5z)$A~ASkI0(>x3aa@G8f7vy%!eEN!0*=Mmqp zkW8X1%#6CcA=2Sx;y$g&^HGSLOKTAd{96?9Or&nVF~dF!BU*y12F<_`r{bs4(FI)C z_UMlIC+NeMHv?Pb0($jFc{f zGaGU_|N1CmPImXoBT28)q~{mO8x@`FP}!|i7;U1N0G8g;@oN3>-nGEH@xuEEi^&Zm zh!jb|_Ll+-yR7&tuTm<0;EmTvrL@9KemI_%ewh2&_n$;3{?RVsy25u6PU0KhllM#^ znWO2RDMDMDyLYy9$KdLJD`Ls6*5U5|jqqRBOvlO8iBixPt6kD|ZU9`gH3Hi2KR802+ z_J?n0GK8Z%b{{ExjSJP@&$$FD%G%|xBIUsfi$S!akvrhQ`$?XQU1ZRxv2jc9ZZb^0 z;p$CLp>X6?bU8&cI~EZVnlW*tr!fzkQ<@W7zr?xplyj#huaw z74gK;XcSILU4CAmp54vO%U>oXA6(8yX_Q)1QZT~1_)19ST%_L-D1!Cbo5Pj%OsFb2GBB2xz3vbx|N z<>i*C>*4sHw9;w0xyY>eALshzGmKjTTjI;;ewc0Fso2*pDpDLB^>i~fU6=hrxS;m_ ziW+w2xD*LDlS>E3<^=X@cMyh{D6%2t4KBMX7olx>+|W=lSDCXj^u6v-lHZi0L1j59 z@(tr}n9;7dM==nDGOe18iL!afC8}dOpo_9BFPb`fUZSbt`<5-Wt6X3vLU48|J3lP(fnDJBihS+>-2GNZ=X5P`u7bXIc(G$=--~>|2VVwhbYY7Z$9Whh0isvhkKxh*^lor z;Z4TS-%j`6y=^bsM?WTaN9o8r8ME*@Zw}%yCJAnuuR3Z{WJIogFJZ1e;7ojPQ?(#c zFq)Bu?Y!{yExvBe*6MjUn>SyI#A8E>#T zNNOh(xSiGRBwmc9@_xz`wcvgf&n3!FOG@A(`@yA>gxXQb>b29s+`%PRNl_Omg#>X> zK;M}mUtw+ZITM$i1yg%u)ic2!#fsz}j(J}|=eL?>6 zQb&P-?*@;hqw(YOrRYDT8+O8Om+YF$;8(Q(o8fXPt&zHFRqT^Vz!Cu#K^sx#uY9hm zUGag{pH$lXbkfCxF=VzL%?NB~(@DFY@X)-MZNY`qwsp2lPmdq;D3tjm7;0s;>qH#p zv35Y$j>R((67Z`DDtD9CBIkraYpN*mSL>B{ciQzpu*Z1LII#s#G;b6iU9nyVu+W_xJbqnrOFZ;nmj3tU$zy=J89x?*{pZ$&0B4ToBmgu z98!ph?RD|;6W`_l1UEdA<0)JR$HzF-Cop*uB$oL;*Ff?Ld6ic|o8{M*YpydgnB(3m zv0aAimUEk!WE77ryekNg55FdXcvYG1MG>=%g#~_he^s09Zzj{@5)cy&E^r&JShca& z)$DDLZG93P7qY-BE3aWXa+Zn}DiMWtP1*<=eD!5FgJ|pQBY!Mlzp6R6Fojz(ZtBkp zq7&#??2_tkCLzbet%H?C0U%pwql^G$Y!2Q;W0C!SxrIdt7=RteIv-HpVGU|J2yc?n znl7`Ygs?*a7LIlu+9n6i`hHcem!0Ddz)QA~{E=T>_tc6^6aqXOk8yFnU5Qs8 z{!)&SDlbcGfy;ONtj)Ckx#|pHas)N!n6;RjRY0lHaHD<{O?Ocwg?qFf&%@}6@Wjmk zy&#?Ie&NW|tnVFyIlKHG#v10I(V(ZoN^bRhAN}Nq5fXfgd)Ga;63`R z*Hf6YRz<1;J3R^u4pCM+R`l>_?7(fgzFlDHaBG-n8+_M@T3?Gm*LeuEqwV<1f-=n@ zDMc|XUYBNx$~a5i1d5ZXlMP`_Xw6Q&(Vpa8-L!hkla;y#=BmArhKZ^^@Mj=ZJ=oHZ zKM|%Tcz$q3-M5sHJC5P+gk}&WX^()C$T->-sQ6HrM6c#w#w(QtixQ&I-ja1DSXgRv zq)V!NE~>7T<2bma%T>qN0Ah@+@3>h>1x_5|Vv?hdgaI@fUy`kYPclTk+WAm1x*l{4 zu1bKd76fpd;=fNHs3z&j&_~k#mO|RZnq{&P6gV|flB_<@rtNMO~Gw0$_D~; z&7cFxCM{w)ItS&0$pL)rAW$JkJrnoyllS;AHLzJ16e0B~6^3S?c5Y@~OffQARwpif zIe3|}$!fx_F~F&yab=gcA$LgQ<~9ZlQ-iTxbJRM z{{B=TSESbO&h%9rpc;}RyTFyTAWc;xf8kKMQrO>s+CnO5SolS{On0afk=G2rk@oC( z&Ir>L5@Ya_Qkr!*7S(n%fYex2FQH5#e0}*$^&4srNx7B8i*j}#0<)%fdm(a$K?^-( z7BrnAaEz9;1be@hRYu15!GVG+;SllIzIX#wB_e%8JMbR7`E^<$TJ)RjEdW0s)nFj!bg zN`b#C*$(HkBmeB@4euF`0|on<-#Y(sI`F^ID*Sg)AY8g<3bJ9fKV}4*+$fotmYLH1bmV&Ze`ATeoDBEJO;4 z9>qsPO^Af7oAaW-{D=N=*VKL(;@~cOakAxs+*(t9CivaO#?m2mu0-!vy&?x!-Ml>i zj&6(!{$+CgVoFOApIP}Ur)FbGUTyahb=#tJI{d`yXlltBlg*GA#^_egafjb{(<1Op z3V+b@`QC{KO}v%)`Zno;0gFOl{R+XIo_m~pVh~BDU=L-Yo7nu#ZK2$hxhZ!Xt<5~? zjku6uH-W6Br67J}iz;TK0<#vIqQaWTyP)CS^f_&B@+K)Gy#nUMZBuwz=}wMuDQwLYHLwQGC#Gge`~LK<$)Nl~76PlR-=LS|&mO0i>Nd+D5(TpFTTDbpiK zLxM=O`$N72BB+GF$Y~k(H^Am@GsXvJeN*{y0v{|+XLi#bs{Q$m(7{jMijR^=a=&ep zS6L+dNnbn`pedM)+;cFAlvJM$D6$-mf#@-xx^SP%PXQi;mVKmX@^7>-8qn z^)qQ?5BXwJ;9|q&0y{e2ecj4)@_nBQPQ&IX(z?7666>p($(Qs@nM6;~#%09mXl@dX z)j-XA)wz=9fEA)F7mm|tug`4n^{d|h9WXOJEMp)a)t*gP7u9E%AqZ(Lrtw#esIi70 z)EwTrLjT-l7wCcBwI#z1v!O!ifDC53lnxR&N_CbVdq{vfncja-|6-hp7A)$G@u+r& zuVb}_3tvm(B9>^mELH$$Z&(#o)z)%iokAjA6IoDCd*wbjJ+U4~w|bkiDDH?D-kGuI zPnA(tm@yFO6&aTe!A6U}UOsL|VJdKL6SA0&wj!Ku6|>4qpZ#6h%g_U8XX;2LMmfh) z$_=XSImYV_bOE4Pp0B;J0%jdD)M%(4aw@UZj;?9Oekr<`+=DNn*E3)(1rbw@J}B-u zrq(cpQcl8guW?upfK&v3Y`w1RmX-m`}BET>1lJi3elduzQAFEhJJw3W#+Jql~>);MMJ%|sY z&YqXR%82E)+l-B&FnR2n2u^tf0S;@kzn+#P;e%0!T*Kn%{RW}1SXz4T{CGF@+l4tu zePZ`6c(47pbXv7jJY)_ zTm^XI=_oFNUFLVr*jbvaz=0YGRY3k)uIvdQ)_o}ZnW#aG4uuI_2aHds25>%At)-WfpF;1S>7AIohN$)fL#V+OjWY1mU@Qe^)4#Y^(u^s0`*MfaSv z=F0zpo2QP>KxJa{=4C6ymOyGIyOz`q*rXM8h=KZHjiD%GcQRNPsHC zEpEZB`ghsk*{!Go1;|wt;~E+rTbEa6!k-77;9cr#zCr_P6R5WpliHS<79pl%SCSUH zZ=P8o$CdS1I5WrbFb-|@o>|U5hsw^RORPnS@q9E<1pGLzxCBvH4l(^(?^^A}@mMKP zP%f-#ay7vi&hgLINfS7H{$ITWNp?(SXBA)}PWn>AE)*StC?zr$865?l=F2FL&S)2J z$EyT-wyMNoj|+KbAEA!-*}81;F8$8FL%{7{=8V5yGRIb$ykjTOso0_ZwknNCjAg_t z6Ol95D-Q*f|4h;);N6r!<;&2_Gtn?qu%_noLv+Mm@^a+j4fx6V%SHNQk4@&5YYZ&{ zxa!@{x>&<3pts|{j#85?O1pb?*~wG60XmNui#X{>K66k`N>p36hlt;p%%;fiGY;Cd?^7jVsjS{vL26$-cL<4yzkI^b+ zE?pUa9xxd*Ttb3|h)ywEVoLTC%buvW4ndo#3p=YB*~60!=#4CxUl+8mLaC z&fy0X9)n4%V@X;ua6j&Mwsm*IMYBtQxS@Qvkcb1>kEYGfX(tOq7#7T$Qt5Y=#>!;O zj*Em|n~x;&3&vn3~6d zqB|@|V8M&O<-4 z5da_)V8tRye?3aV$eMYB6FYTD!K`r?YHrPm2MFPkSxm{Uz3nBEp0dOVQo1|~ny)N% zo%&O00sJy3<0syluHKfBMVvyGq{-=nRg41_#QDa|yGBP{ruu^D73XlcMD? zCp6g=+Y?k~q00CGsNc960&9W z%(V7!zZOwvVg}cyTA7??^oasksXBWS`sAlXEOq`hH~4>32K-0A`UezD?sMo74k06C zlYc$Xh4vpRbk2|Wch?{uZ{8>>;-OwzC3uJ!IR(keVnpSb`=FVBSPi&I zl%||P&1R&0{;^u#_V)RP(OM_y2-x{vZ?_F~_U2h7-q3<^V)?}QOFb{v*`ponivQBDGzw-leTdm!qpDy+8?zf1&&cM5U2#YcQvM-V&D9$5@9ZJ!iyocb7E-`)S;mq<6AsrW)}Ok9Ua^e>ql@@4z(`&yRu zUqyTCQ}FFGH>;lbTe{m{UWb)xAw>D8M_?Ii5MFW0d9S3>9y%dO>Xvvq0}3!M|? z5N$wArfRL4dclSCE1WBsAb?v_Dq*L5Jd+7LC9vBNRGG*BP~4hH=3-BisTpz`_VcguN8TI(#HJA0a){WRwm^p-gFt* zR|MoGBfzt<2!<3ykvl#6R7T-zbVk;}B4`VHLY;ao5t}s3fDP5+Vi;t0}D2GQs zaAG2HT?r5!_beU&z9B9~lRy2UIN9PYmqe0&@N|GKLqB$MO5%67R5-yHQ0_}nF5`#g z<*l$8?6Pvj0+vKR(@NR|$%me4SdN(E1LGsGni|;Rz*{$(sg6f8Il631C;1|lJy$2X zlBGj7AfG1+8Y7RAPrd}IH%))z*DwKP)vy}H=>R=^pFWuDJa#WOsb-@eL5@F_9B_t_ z7IM+X39eGsrKvLu#7;cRlPq?(UT&KERHH*$U~Fh>BEZPv+Lp&26yV=8VppJKHc5wH z(?L*Zu?H7g5al~_L~CHv_ea*fY>AP~Lq>jJvl~@|kGGf;m17l(3K<+;FD#@GYgFVI zFN+B52iVA$5EC0`oAz0ZM{5tm?D%tI8l<&?EX5cz4q5thGPMs~Z^yFIS7Sh5l!Ep_6uI(UU)K1N@a%gSVd~<#dT` zGtQ+Rds>Wt4B8zzUG0%#NgDq(+5IWGZPlkAqxWGqZUD-VaB$S~w#| zEngscdj-X<`z1N0h&TxW?!PFwkP~ksqnib>>W8)KA0y=+SZ14rI_>Oz^*;%Dn=iYy zTYOalt&z=P9#(ufpp7&m-YBYQoRpNTZzN}3pIK0Qa9KUx5eI`cqP3ko$+cP zA4v|lp^t?zZy;nGa}(VscDdB;&?dB<3-)Mqbr{1<;4vd?TQuK;{m|b=Cxs99@>Pxw z4%$ePIr2)`Xf@`YbIKM=a;9&^%TNpCm#+3&~7vK?1>-<;@2!5pe z9`VucB)L(_a^S@h3v5N8*IIfpT*NWGA@Nt(VNjm#xC?!Gbcb?+^~_&O`?K*Z-I=a- ze%bK=V!YEC8TDzDZ&^RcxVo`4(d0sq?MX7TIijp~cEMJcLIZHe?&*SiwG`jOPkHm3 z!o|P#O%rFcnNNbTYG%lLGtAWJJvO>N0BqdY4HN;RMwCjpry_|v6P17ED5%$3J zRvG%~u>P$@RRX)k$$NS=ExR;IioE@g=q$;V_mlf6LKw#n6^4zzBQEqUE`rMnWL~Hm zebp7gkl%VOttRpw#s&_77s*wjhSg@eBfSeR{o7s+87r=Xa4`S5&4T~o^8c?s{=*bV z+*h86>4T=v)>}NzypUi1TV`B##q;}~!i#nYE;24O*c#|lw;1`j;vt;2d@BJ@DQc-U zaj)4=o7uS3yb61Sc7XK53pI8|fFtV}eldQ~jWC{^-O+3W(?R345IhW9^{DBTMsycd zh(C`(@=Sx!0@>+KIRu&+^z~UW#}I92XI>Guc zp1|+UaJqF7hL6{{1!{m@i@#kO(H&hw%K#GOG5bM9Rbl86r|V~nm@M$|m4`-!E3JUd zo7S)cQcF&Qe@ z0#T`;Zs{E^ZjH^g;J4V``t0GDS4>dm2gJ=`nfwEDlNX$x_JyjE7Dgdsg|s`&xkEbT zOV3@VQnClXNZcv6atIwqHg2ySv|A=;=b2S*fTz9%5V-}vkaA8~V@dGL(tQ~5l;aJR zuJWDZD95j&WN>0}<$?=VEdkc?Tm9C}vCI@aRT5@i{U5{^jQnm2?RxTAkL46rCEwLqESNVzGk^6LJn3V=P-i?69_ssKESCnkA zS>5vVtOi;Aj{&n$-EKh^b718*p!G6ao)J~?J2soU9oE%~F9Aj>+S2$oFw%5JHaV)N zS0Ey`xw1&*LHZ9IhF#$=cYQTrjs=W`s5Grb6sP-ns2Fsc%ui0+(2j$``9+!)&Gcf{ z5<`Xnzu8mVXu&p9{EGUaKyWBp`l zJ~Gyyd4oel8G-M}_WrN6i)Y0X6S{rhmSkz zHxWRL8#^kt^op1oTUC02M_00uq%{5ui0wMP@nxNRC%QNZl}{|LF6LG%jcGK0s&cQX2sE?s{gWrnl=iZVUbkEXM8USU z)ErID=YI2+{F1BI(L~fvd!x1>l=jfm%`v2Ah)ro1)Vi|r6zWo-b-lkS(xZL20qhG3 z#Ztv`ymLE9#b$$K%=~93Nx(jt_%6?uitR=9FumI<-K;`t7`D9M(K8 z5s~Y#J-+^Xx;RC(LF_G)A70qwRC!nj5N0}urDoJ!EQh-TmkRvaWVYW9wf#$t%H=kt zGN;?m2?nY(QsE`pMJmSlg?muiQWI|dfEIHnOLG3UV~+iy0R>d)vwF+ zlK54z>5hT?l(pJ2dy^r!7SfOx^3D*!w7sq|v^pQ|^E!ci#z5PTrT#-O=4^5B+xO}( z`r-@PpGGzs`#!dbTqwng4wOgJQ(J%ex%01ZWBm7k;-7TcEO+yt`Vk=uGt4bsWO}U2 z6&lSB$1nr%$?ux>AUs5n$9*(jv)nX{XBKW|AL>Lu-Jh+!3zu!p9zZ{gcVF&zaOo>Q zM-my2I>@gLt{b5b3zS(?5>+8vs~to|j`Y&h-SVRtM`KB@AJK~iK2$emsBNKmZcy#= zw1mDKss?M^q;~pt{4#l7e48flb=w230rTslDz{;xmTx}M%={Q`X&doC}Blm?q-S^`_Rd{0VVi#~GV!S`=>H6~k zLrJIJP!{mVo;1YI-&0uHjh1?pKHc5l6GNUFa9w7XHuwr)331X4SaIUEsMQi>hhed3 zVz=Q1*teI%wTKYIY%ZHSXlBr_xrBX|OjLpzR_48{M+9?1cS24I!DHH?sn6I~W*q@# zCS7yK4yq>Jc$2lsNQVwW+=}-4ecl9}LkCdicy5Lx)cz_V6jxu120-NI$Tj543*N8M z+jhTCjLKTA{{@%6mZd;?Y|!k$UXyD9Tf2-;U*3}Mkm|4~vNL1>*o)xjv?X6W=c? z;27ZmmDi$l0*m%xdGlf>h9a{>D;K544Qn>$sBgV7TrCeIg)@kc>JyPWA6P6t&bhH_ z4Uwb>Cz*i<;`eUqt|$~Je3;219-M*)roKHp6+R<6ypY-$be6WtOmpbB;h{4~9IlIl z5NCt$w`KGNFxyBN_I_c`og6FW%8166ymf@z*;U^G`iUMcxo0O8lES0-V*Qw3!X@gQ z9KA~q8R5joVX`7gM2L#mu43~$#ne3Cmq}`pdSD2aRurdZ3Oc|<<3uBkxm;m|q=u}l zhWcuJ&ANmH-=wC#%IXA7sat-vb?Hv55OHyJmF{9*Xc2w>`Qal>snEmqr*wx3Nmfk` zc5_?(HagT=KT~s<*q?7P!jiV4<(G8zn2sa7ntaMdxLOAD(d%Ds!_Z@2YNmGnW?}Vy zUpa8!dbfuuvmFO~DJ1?ZZzm_l_FPPTsj;Zenjv|6j|m*xHFBcIyF+>q!8eU<-dGk851B`enY?kx60j@8ks3=> zi!h!{qS8Z`PG&R`MnF}l>LsJ)g6A(={vIcq!P_bxAxL%j8G)qL88fCDS<`k0S_}Vl z`!OZVYfw@7*gfUxdUBtfh0QVcsyF~IV;*{1qd9xOF4C-5A6RYmxLUemA6W4&6b0ar zelvt3sV($zIC_@K?`CwSL$Y!_4R$f5%Tw-PgQYBSqj$TuM9+W zlF;ocIh0$j&*#|dZ01uTUDG3ft=?4Z3ca1;q!QTV$`fyqFO&Ah>Y}VUSGS6!hR@#@^z0j}#rx(9k!1xDk3;65P;~poW0s8tNz&b4!z<_x<3Bc7QkkPIhRSkg?2ki!>vYudB@$Z6Q4bHX znW0O9F%)p7lTQhf8Yz5NKcPB4lQ1Vr&yj94pc{zsn7#wO=d*1tH;swOl~ESNU! z&;{}ypw}JLM&u+dA`ic_hv&O4j-B9`1adEpcbh~8)-Jfb{B%;=7=+px6HB6Cjp&aP zd7(QKRm96VK;Bquwid9`NVQy0j0{>yqEpZ%3#i}*u24(pLdPe0v02%C2O>v4MWVUB zRQC7}`)Dw^t3I5(=bhwZe2>FKz&)(BMV@lf3SgzdSY-iNQ0bcLi5bbduvl;dkJSD# zj=BL-_Ljd+xAM2gd?5j?`-sW%A^#XFZJw596Rvag1iTI>Z~y7l&t2TwsRUA|3vNh? zM`+(;d*f5eBsU_16s=^KxQL=iqwufR);{8RvnX#p@#?kX>;0LxadiEOysf##kt2T3 z?gNt_pO#tL>P9e_H^=qnR{I10pQ$hYsUE!Cm!23o9Ze*kJi7-4+u{nXW{>UNtWJ;L z-6{}l4KPAF6llO3@5g3y0K!_H=d-Vg2krm>ne+k_DWHc=s478E%*ditD+B4l)+ij^ z$;nF2OPgnG*o3qxr}bO2uQEiL^x3LDrjqR*&GvsVVy}8YlqRn^@69r{>K;5Tr;%jl zo{mu1J-~u#gyqt-AX%E{bEU6VM)#)X2R+E~yLG+WSRS<|N|X5nr|BKOYV(-Y!^=eo ze6B+;tZMSUxRMXsZK-+6U@r1Ofq}7+DmSB5O}HbDXD|fSo+`7D5S|iY_trM9XQk6# zP*a8=gSCma^)t`h-WUPdy5DGF6yCkIFSC^l>leCmj^-fB$_rIwMICkfqD?v!)Ilz% zjsPe@r^)Fk0WN23+QKim(jP0O0~-vpz@v^d{H)_55U`J=SEX3>z< z4zR=(zSeN`VQ^eG{e*1;0Os@KIAl+jZlMg`2HvavKr8H3zNeWfy)=`ozKD90e0ySoDKj;%1II=j#o`egn|-e z(d><@(rpdIP^s!Zpo3!Kqqj25_w=!GWRSW#N}mI^b!(J@%U|beAhU6)vxi!vu#|4p z*1~pbF;DF*>;v13x2_fAamyhRRJ*=MDp(agF_qWID57)&JdmV~Z}3e6kq7HW&&aTLFLdws(z z5euk1pCb)k^BR#7u5}0R2As#9=j@aXVUv@2sRIncj~htGNcz*j|F^1ze`5&$_WTDF zMD9UB-vF`YBk#l4_0t77HeVr51#1V4{v@ zn<8Jnn`|p{7Hb_?E+0sTo=bbya!s~xExT8Y9yjUC3qSK5Pm5VlP4rh4BpPv;-~m=? z_)RDc=g#W0Dj7Dte>9ZJ~m6V@aYbEF};iXAboQ} z7)xeq#xx7h*((G7-HarX8J-;Zj*L*Ak0k3Z2t;k3tpF zvDT&IZBjM(A>h0BQZRx1fykIT;CngoU;Vn!(;4{nGE2_n9?>)>Ge~w9wj^qXN48Bz zL`)oS^;8>LTow#X2~d0Uhs>YZaOwxlgPPUb4n?Svo|}a$L++%1K=dMvWvnJc+B@FbAXsMS3Eg;11V#gDyVV>M%`FN^uyB`#vK&<2k_ z0gGRbZ-sZ&THXuSb8}es2kk!i6%AH#`3Qa#Nd?=-C3BB{Q8W0;~N57>D_*pYN~W&O3L7V%iW$J*&w9FHb97Vc)vnd_YHg31!qMk~~mT?~u%-w^5Mm7g`rv(QcM^Nf7m zEByndIx+L-yf784OcFL?dTyKsH7wF>2fr~Yo5z@Eb;3>-&8iM-UC$m4Y9m@d%36nJ zLkV`EU*BghWV}(iP5k5$dPiYFNg;z1t$IsKWb{LZB1wb$$;7@*O^_|s(G|2zKH(M` zkrmDCSauvT6n5eA`K{)mhe&TE-a@hP)7X_Yf#)$Id!HZ|0B{IQaY2bC>4R1v<)8Wvv|w(`v?dGw)^fSd=o`=!iQZ zzhiRz%gT9*OV!pY9XaxyOeKZ+s5FtvYDYVhDLGoyIxE(*$%@|Ba=={`|G{c=b<67= z0(-R?5yF9L%bGaln|HoQ@Ek{tUFuC#WBNw1*dLF7g(Bg9Muhv5e?Z~seNRD5e|46e zxy1#Y&)oIg{9Gx=3v$2u&@286$I2x{D=9doX9mY;Vsz&v|Xzkd!5NHs*fl zjIVIRYlDMcXx5aF9<&!p_9pOH-V$7r;lxobl=lcl8F}(G=I86P`-cccJSKtFI5#Ih z$^+Lab7wKq5UYB}@=$Z=-*ocfNq|J713R1;|!lo`4_nnSIs^zFDwcIB7`0(-K%y0?B;>7~ZoZss@MHm~ z8|0azaJX#lG^kH-pmMV6rF3|rK~Y15snOb6O?u|)e97%Z<*IE*v`D5>c$i*^ZaK;b5!KDBThRs8L-HTlreTWnwMV4B8=y z-WCLz(T--AxE(*c8F6W(c0lga2d~H;vZe=)v%2aE2CNm&<0cF{k808Y*-2b2#CfpX z#Ubcg9@CV)So`IJbVgm8?4e9sfz);OhZ`7U=g109y$OeJa;TNtKQ4w~_X!ol`l*2 zH$~QhzE5X6ZCSm8C8t(DIC>pMd!A#~KmR>w9Wr!vh3(Brb8NY6FG#FP37J z^*V-zMqjKt_;EIK{a#%cevqx_RxVCDVY{5+5W~rsJ4Ri4N_1%!=qeu@dlSZ9gf@xq z{8p8@om3zsmorFoWN&XiIFY%$uSTY(4^@nyGP4Qam9ven*3@&dZ(dH+*1@jLTxXZ@ z1X;YEDtlx;av{|s_4xIM!;77){fwcNcm!Yaq?s#z3MZcq$@`Uc1tumcC%cZ1asK;+ z(x1&wX*8^$%V9#wyR`8(C&>RKkAr{r{{EL7{{Nt`bRRjb{Xzc+TL76I>s5u;dE2+$ zxA*14bn6{HTEiXk#0xDjjiI>(3?d*=gS713)vL#G?sbW?48VRK6qW{WqTob2GSz|< zFHLzL$HQ$c1nV{GQt?C}1C47w@$$E!xMHe*9C1&^jTG*i;_%-5h zP_Q@BkUd}6o7$9Je|*=AJ#UWu*Q?5P;J2rzlzNIe(SF`}Epn;G6B16w z7&&dmuebb6;(VJryaEMdZmHaijF&(U@pSn3b~{y6a!fzG738mo%|vt7pg9g%_@Q4$ z-jDU%J)ha7{w+?|-Mx6%d&U<`KSJ%{tv0$NKs#k@ z7N81nWM&Mavfzm_}{hWb<BlbSI zN&LFHRs7u0lU>TeOd?jBo0BolQS;&k+!ws8S2_ZXeU{R;$7{TUTPNlCp4#eHYhA+6 zTVik09|lKA$0ZmEF?^N~7GE64u`rY6md*fX;rwtri1z0nPfe z&Pya!O3n|4yrfmtCPT0}4RPU}LK#)p0vC0}c$zG5lj>xe<&Q?AGMUn^)s^@O8)F<* zLzzkWA5l(T4sSI>UIn^o?A!ms@cw_qeN|XoZMS6O?(WdIHyYfX#@(%PcTXC3cMa|k zJP;tk-Ccsa1`7m9GW>JCxtZr&%rnRK-QIWa#anyTTD7Y3$dlj+suTcs`)BRZ2|={>#~^qyRii`)t)_VS|?V=# zi0+AWT^rWy?5niq?_`h7O&q0B6HEA6y4}R~+Yr!1qM;IEMKHl;GAQda_xZJUumiI%d7BK^BgcoH-F5Pnvrr2`FW;GrO&4(D-z$q>QOH5oO$nz@VlR zJ>P1Mfl?W1mzae|`eBPQ!6E|5OU8Hgo5G79Qi5 zq^|a-&Sc)DYH!-5{lBe@e3RYRfWdNZV5|e!89V|wk$JF@u>q*E;T!Mo4BOa~lAx*_ zAVEK$(>x*r=ks9rj#Okbe|6yX9``wZC1rp^u-3NbtEXhsEo)Ym5Y>I}=8CIDVr zh(xNgVZAb=BN#(ghaV?2x#Nj)(cz57Y|TCi;PUge`_n+tq$is3`w1;!0CoGwDgZ|$ zwQ*B;iIJ%lr(BRL6#szsP&qksSdA64B2kCjjgs>O(wsR{C6qAXz*58I!XKmSE~S-8 z4yo!=3h@sKPStj+k=BwL{0!HguVY9L>=QUi&8F7Dp<5PG4Oe}0QBFftUMrzR2T!Ingurqq(aAB^ z$R*LHvhfVoQkgS3OpJ2Io53%nP%;c`|z$z+4 zrpNzeB~N%cIH+Us;^yk36v|st4{T55&l^^Q`TWIBE)P*2qc{rW+@Et0H)!Zb3J@!T8nGg%kst%5_7y6pR7xH(kjI@+rAaZDpEZx6 zgr0EOiL=IZ-Ky?irt-NG$@Z#B%s2=2p!84%h*~1I_pi~`^r0Dp2XM^!v<-W^6kE#c z<7+o3nGI!jz&wah0+3o<_XkPzF8f~9rhhki1Q7*= zm?;s~0uGzu`!>_9qA!UyeJ+0HHBBSIr#`G17?f&y!hmc)p^W$(B~vLScV*6D@40e| zt*DPjni984JViO_pycq-`5v_FS8?;s#u4^xV=i6}A#M?A4a3t;HT{u&6kmv1K^5_t zC!x>+DPiIJKO<+cLgbUZqgtij#VxGcxG>*F zlAixN^}z{1Pp1IKyP+tkqPn=xiUC*zpqh`m;3VNgiz0{vsgY?^J0d$m$I)=y&{Z;) zNCNwn+S7Lj)JB=+BjriwkQJR`@kvKh159xxmZ)$>1~eoPS#C_ia2=6w(&cFT>~MK? z=WXK`Dj;8*xs?&Igm}|Y+z1F)M?R;f@KNC2Ov$lGZA21mP_?u97|KYCGk@=;&# zf3PlSS*cU8#Fr2j|7rkfW){qdbfPAI<90SI0ky<%aI@j0C=%JoQ|K_-g=qdkwL&K2 zGTuIlQa!Xy_GrQ3K8X~`Mq!3%3P7yV7{epRtKsO20B$m7UUenNU@kc=Yx?4_FWMmO z?hW9J07XU`pK=imt_wXdy3YEl(FXeTJL40#H}a95c+iWSsm~{pCD$0*FMNHa%H8+D z@x4PA(Hjk$D@4f#3sRGuoL^T%M+c5}2b-j@ z;!!fWTUZO|AuC|f&J#jL#rk1Ut*X)82)RA{%fTerWiiiQaSnn``=qd2iBem%n7pD3 zo+wrcpbqjxD+mZGB&7{gq*cV_RfvTxc!3ux3jomPdad z#cg^rond~W)!LkkPJ3P5^!&lDPdN{z&zkOIm!|B><+OHm@20b@Q2ZKhbD$Z~^Ol&E z8RcIs*rupe3{tlM_BqPdu**+lMwzYK{5s(6yZA+IlQkUrS%vDHN72b~86WIL@ds7J(*I;6XV5p1 z7ImqqQWRuE3OJPwl9y*-J=fN#<5PXmzx22}G(*oE8C6$JOeA8V=#&|PtUANW>>032 zCsTcFUdn9NOeC@}&v-%M=1|-md4+Sr~+C9c828$kn!NhYWXa4 zB*UZkvg+X_ES35o`dZf?GP>f6sn9D+H5xcmM(C070ggenx~p}eO}_B7Aq zM9ch^?9l_@j`m79>_dDfmC{Na9rVBo1tYpNw1qLQoi^mk6y{O09c?ewKQaBXq{u}*2y-=)W@eqsI=asybh#`ur1j8 zs@KbcUhX5wL<0cGL?QNN8mM_XBJUlZ@Gs`=TIgXBVi6Gp2(PQK5a^^;SV+Tc&m_zV zF{G#QWF?_f4%*cPU7Q}K-4bgCfpBhPP$&_eqSG!0lFCR9vPg;zc}-0=nHJMJM1?}$ zfq1JNqtE_69qjNA)O>+8qF)VnI?i|5t-75Ooxd(SePKSp&q?lG+_du zG`pR+W*)%|Otv9fQ?H#oa|Cp7t{aJlLb;SRV3cSPEi<+jcK{Pb)?XjwBm$lwty9sH z`ar59lzr;TKD|&1-C#fgt}hSh*WRgC&*OSAl8~*ZtIkF{JiwmSnd(;BXe;kc)b}>; zbCm1iwt?-KG_ia`Kl_{U)G=6zOwQ2dovM~7bceA1(%0o7FCQcAF4d#Qejq{!^2ZyE zfY7>&Qe2wt;+J|X@9+FY+dpM{)@O6HxwCAiRkq%5UMEfN5exkpAe@>A$9s8drx3)z zFGs>(rr6P~C1cuU~cwm>)Aq#(o9v`OABpOoq zlMJXo5M#-Ji_LGFhJM;comPJ^L1i4hARIWw>8Lc9#keV{0W`t&H!oXJxYO)wMd$o+ zk&X-V5eBBez9QCbO8<32=&^RQAo@WVzjmbNdtP}>G z=cYkZ3ZosYAF>%hS;TL@{T+nZNmK)8Jz%yprP?eZ~W*LEoCIWBy)&*rLP_CERF08;V^vSn=+4x{kW->lav3 zvLT>KuCCnxa7ikU4NP$xQrkL&W=StVCokXx3-6j%cES-u3xWNkN?U=US5=YfQKqK` zoKIy}KVkN~)GWt!pRW(n%C8u|nLo(?(&_P=!@GQ2!{SbtV9hB>IA&4N6OHY>oR&hp z6q40ov~c|7NKuZ#H-(_IvFw>W8(4MM>uFN{odiSJH^CW=$>FYNQ*Jz{gi7+-vZ>`u z7tMTm2*IB%IZubg-fGKketBXrdTkqoL4b=pWg)68;r-8{A9=q;`TVK?{CtRQv1~wv za&%YA|0%lgf5FQ??7_@>@dfF!nQ;ag{>q&9jJgpN$nPqK+3m8dI9%K{mcEu*_Pf4 zEB-tBw|k!p6iq1_2RSY2XFet}?KmB@4-CA}BfP7FHKHpSTi0$L3;Ii;Yl4h9%MzeO zD^dUIREH;A`{O*Wi^oG#n@LAZ>79!f$fWAVW@o0mVM8LqSKY(CW4`?t|9Yo=s~?Sq z`DBOXa@{^zPq5;{#eTw}N1@Cg=NQOhmtJ@KIoNU|EclAfZ(0g2zV+k7aE$uU4}_Wc zK%F*`O`%Mif+4va=Fly@JFR#Jt-iFbUSvN74@w)ouCi%6rCCE>;qH6!HH{Nwnt z#N1kI#Uk&kEdmlyG3Itfu^q%^9DzX1El7y~_kmFi!=(*+FjiTpI9?bVe*4s7J4sys zBRjSv$AogQM<=btVwNH1k*HDJ^h7B`T~>dd!6;E!V_i0Wvmk5BSQ*;(XqRt;h*a?m z=J5P15l55Y`Yob$W@~s36x#q^bEZ;@cd47$JZx)SFf8ZT!5tCeQkbV3u#XUzD&pzO z#U-|=hQ@@1gAZDX;~~4@@`$)nbrpzmdo(NxY(nMVk>CW_*t>f;9j$=#6I@l!dWMd? z8tvd`Qy;SK_Ju!@B2TvgNkg94KIbPYK6|oK(u>q$tJsFdA`J0xN#4w+me?boB}2(1 zK|3x5%(uGBVQ`wJ2BSbx4`6ZtQv5mtt8>&!YZ;ZU5tYIIB5kci+cIip1;l#FFgWnn z#7aRa=UB}^+LWXQL(@{)0CY%%H9hFMBOk_>loV2qICylMFfp&}KsCQY!(-os-+S3K-^&UYEd&E=&50 zgSNYIfEv69=$9J0M44=oZqmQH7cn;JB;i?;o!*csL7+xFo zA>Rg5kK2GbsChsZR|kB-wV5|s&AZ#_io$kWQ(d}_O3|@uvDe%s*FzCs4_ z2$FUWBP6R3-DW7_frh$=5s7B(*Qtn%cUckvy;~4U0!A^iNmbENGE=?VOJdsWTpkc#4D?( zS~RxU{xk?hVIXIWP#E(u$7#Ga=OAbDONT{=&^cO$3dhjxMF3>_^dRZ1%SX%msOA$P z)XU2T3eF!Jq}McE>$ckyZ1Xig&5l!>A&;HMNBNvmNn-=kCVWul}Fi_p^0 z0GgBEGIn}VhO(GozIM>StHYZY-)7~rxPZ-NELTb5KLAa>&Sh$J=4s4BKU zidry|q+w)?47+*VKwz>o^ z>ZCP@td%3#%%|0i`XlL~p-Au2ir;R6#8IKW%xTie-qWC+rZ;^!fuB1q&lh08+_swV zrPWpT@4?|))ZV8z0#Vx z`gpcm$om8Gj?bsZ;o+xi#*biA9;G4$t@7t{yU&xS_}l}2V+SpCh|wrVTyQyH4_I89 zoJ;_7fR(xeGPQXTh?qaK-WVIf#Al*vr3ORwSLu4wM;M|@zD3OLg75n05s`RshI)pE zcgGB_R;jfu_fxINQ{|5>88a$AgC@<={^M>Def|r>KjD=wwbqtgY}ueyHx~^m(#nPY zThMctZ=T;G;xe4U!$5z%-^Wj4w@3`&y>H&-9=QQV86KCSRCB}Dd@m8AB41=xYM1SR z{N=wt2`1TBUMy(1RDxy%nD5=_=honrIL@c_D;6DpEP2sH1APj=f93Q^JkZT7v!tx= zocLUY_df<5{{{+3+tykxjsV!_iyEq_9e|m4hO)sV6z#g1*-j0N;-kyD?c0|h7+R+ofHN{ww!+acIpK4EdhEI|?~j*Ogq-FRB=%srtQp`on| zA96H8E0x%97IST$t0k6|0nKO2S#&ed5_hd63N((a6{%+joDF9leyXg@vjyFYD$=`A zpYl>+&C4<6nEznl%+DiB*bDibzl6Q*u|?C zD+BT=dUz-kgI(bXaS)L|qoyy5k*;c0&sC>icyWgD-fOr)ucoZl2i<9#dyL}>P;7yIRcOSPp|u^~d&Rf4){*`$ET4of0L?7Bc5M@|5j zEe~~&@Xr{uA)|z6N07B}V+u!Q?c{=gL^Ou&6a+^iH91g2qPmN@$=I&2{g_wUyh@&b zWC^NRV{~H6w0-%LRp5e-M6wIux_2u44#!yRvU9e7tt4gFNa9dtz`t%$YN=RysBu!x zb>fqGH@jt$V{@PHgxl5h(6qrG!*3%0KJ*fQ@QX*w{SN^T)rF<1fGm!Gjrj4E94uq3>hQ>-sy$q4)UFmE%oWOnxW8jn|cUTs#d%x8YD zutCijcHF0dTF;TS{(Q9jdCu8A^|wE<>-9nG;m7e*+*QAGKsf?8Jn-pcW1`S9^S=5C9vVy20#09Nw9I@`x26A&61N7^J5cp5D?3u zq81^Uz()e%i!5Y7h@eFR1h}h7+>cS{V9`n$%FK^+t}9GaGhuC5yj9GVH6@qW%V@pr z9QU~<2!d+dqU5fCHDvlofteBV_96HNg}_U*zYiDXa%a@8hL`zmdR}vLQp)LLm7VVm zcNP}MXh(}9?LQs*OxI7u$k++2j+;)IV;5Tz>q<`wy z5Np)#A0^qwbvh%o7P$#7)Xl6KEhTc2XfXJ<_E&B|-jP*q_k;y^d}f^+EBDM*|7*OM zx!K<3Y%=_9M5DK$`sw@h!Rq-ya1MP=hzSu<92wrwk8=lQ75HA9Gx+pwKpydfJ#hy- z3V{te^avAHQo_7a!D)FyQ8k427)JgvwFlw$|MN{NJ@ldRI7p8WJ)46PCH3S zN+m6-7azzOz9J(5i=~P$KRHuTQ7UpNYgi1~ef+$)?J8?inXTQv{d)tylh>_Gr}>vj zrqZGN<30^`vd+YueKy%ee~n66)oh+35tSnO|-)hmz_cNHX0;NX8R|X<&WsL+8?6`M-t?MkXQgepP8-uYv;~jq z(5(l)*WY}f?Sb(Be=Ao1R0@=kxpRNW?G1VWh9_r&aq&mR`opw|`Ickmi)I1D#!Du1 zWlC*IB|_Hsn31{*>m#?YFF5+*H86e+h4lr2L0zp z38^YnwZ^HLN=~hYe}_zDhCn;7f8vE~Nh8UHnZIw=GL&y?w|$`50?Qgr|iuwb!Xdovx&x&oxa(mDIPlV@@oWR60I!QA4>+6uoIOU9+Tms^jJ5 z&(9@2{S}EWIEu2Ya|H2Qjf>+?rf5mFe$xD;Bw4;aMOR1Xv8vNO zvxx}9&fin7xm$Sgi~z543XC^mW8I^FX_xXkcVr$t1LxfWPjsv2H^KA!L1Askjs$MW z9-jaFDOEOKkft!1h0mRM{X-tSyZdu&GG|95A91B5?coVz^d7Qv z19n1k(^y~SCa{kS^KY}y(eTvNs?-XV==6xK!w`me`o8F1bfkFL-cHJJ33PK}*dtuH z61!WpBTQ;)OxV)5maK##Q~+_DB^wsN1&!vRbNHZM+-u-370ilqP77ZvS1mR0wcfrk8Pv0?fkRWW8`YU z{P#EWe_R~>PfuaQYBA6s60na!%I?YefxP^qZ2e)%L|4nn@9v)8aN6*`0zNLyW0Op? zb_Y}a@x*ih-6?uGd>}lwpqqLBH4YOmvXsK2-kvaO2tkT;YE>vdp3@egmCb7m4QlXR z{L#GrDb}8u-jSfAQ5c3W!5~)c{bmffXQ!sd!SeeO?x<~2am}3J6j1Ly!@OOk6|SsP z=2jMXSNC1S@OYueAFc15Nn87ShX@|`@?R1MOCPXiKpqHN|QQ)|9`qj7Aby<>V zz+sL!bDREbNl~Ng4c);4s!u)t#o^Z&mrXBaQr6Dvtg8$UJjTpl(;A*xV47C#Q3Q!) zU?{P&-*EKKVRd{TA~IaIU!uABY&5?TCzn+6Eu+NlYBGIXm<$Su>X$H>V@bC`7xmWY z+%ig>kHpIp7kUlbGZk^`MBzcqr&~S^e|BJ_0|gxS@e+AWpHq)M)O);3=r0+~PShYx zQNZ|>C5(Q7ndY9=Ib(i#;Ky#q)a9NKXOJkEtFl|;UPiOoX2`GUbgE;3r$(M_@ss?g zO1Z_6%}Vz7BqDyVB~l*pPnO>ttex=LD2CfhP4#UpTknG3)!@f-lzYP*Fgc;0XYkfL zh|2oIaZ|hVzml9xus10}pl}w8B)IkD-=_}~$S-<(LuL>;%*{jS!|&j+K&k^~s-W2x zW^6h%ax^WyL_{flruXk~5(H6xk}BBsAvfmJ3Z)zhtS1|~H1@dKlBdeq1I-iVo7@Z5 zoKXLCX=Yoa+g}7vk5}(=p0X4lR0r`t3AzoePZfvaMU;n_KeD{qJZO$1;7Q~I)z~Ib zTd}63Mr{KI&yHFM>!nRPUIWeyR`kUj#OlS_>#X-Y`H>m`fe%BV`&lnI*>*BL zq3pz#Y*R5TqiU(dVCaGVhesApOpu3*76}7%ElrJAX|ivOj4x%tm{iBmWZ#V>9Zj;yKHEK>@eL8LDeX6ww# zl5vWpyWU2_wrKh*(sV^ZvTtsDk?2;;*2xry2Z<#7}-rdy5ApGfGVzwaIT=%?|h z5$bsUjXW0{NEK=;vvpl)SsI?Es}_qf5B^f!xXn9Fn8|L&-mqm!J9zQpxBP^E9mPMF ziI(@6pfWumCA%9r!K(cwqwEBlm*t(If& z@6G;*l42eR`6?n-ybQDGHod1_0xrl1Ab2eVWRPIk2{kYD8iaiE3tFJGd8pKcNUZIw z3Fnf0$ja^=u8r9S3#MkMJe>4}bN9DbT5;LX}R|RV`3ha%Ev>NL46Rc(ybWA$9 z3{6xjlf-^(e-mQz??r(HKu>^16+%4~m8fz`h*rJV*fgq=P?5e_g~1iBmHz-IWXdydGI{`d2}vkYb-b0k*SA{+qRY-k8)+?nKy zL1dZnMTLstxR%TBS|YAY3woSpFszP18=G;w@~I+#a=w+%?aVSdQqTmX_a?rN8J>EJ zpB`z|;V~loSzw74Tum~fZ&E{U$xQGv;^{NxvLvfrJ1xdbRf#6IM0q*^pQHUis};m& zES{YfDDBdcdM90l=!L{yOS&cH8J9J0XflS-3~qF}la6q5Nr90-?zI3&P^Ed?(V|YN zYH_*$ByYpi713=B%d}g9hoe{2AIzhM~We z=f5l+&><*P%o%V*pifZOA>+-SAR`KNW2a5(amcZ2)D|T57j0Lk&1rksN7sT-L zma@HTi@{R5fN&86^;+wd@JMkt3^e6;p$3C{IQbs!%Y36NxABktWHI(WwzacYCY6tkzNei>9$bk?0Z<3IHE z-${J*ISpB_5bZev%rb#Q(?y+12gAf6rTUayT6_g-IInaQEOqMSAs>RHJ_3)gGUYo} z^zH`(mPtcjQag*%vV7?t zYnhHcu-ObyesrtIJIGvN>#H2pt~g*){A))14#~qd;cDZV0(|w!u$2sMRxAud6*?3=Sh}jae}}viq;GXZeRdFx$<) zxY}m#viVrb`&en*Wp%jIbe%q9Q#*hPQTf>T$Cpc#{@Q#PbzF+R-^kWqwgogu;H*aYFn%|eW zCI;eK$TGIEhtEinj;cGi^v#H_8Mkdk(S-CJlz0ci4yaF<<$r*;u#ixox-4E5L}%rr zQ`o=BfJ5@{`bdKKuuBy?P}KR=R!g9&EOIYPV|>z_?aL9Gmw&Y9-XcT7@5-dW+CUO) z+HM?9z=VOAiM|7l_v6r_2G7-#>QYWtqN!2+Y{Wbo4#(T(ax zLNN??gvNM4fPH6|rcFAXDp`{*j}Kgnavo|V{bRW{@ti|yemK%z6MJ-XTXd3jmsYI6 zL#ek#a3KHU^n9j!pt|S8*2_UrhK?sjbHMWwx~q_igUN$)`c$yeR)R(BF~@f|vm0Ce zt4y!o6rRSIm*&V&1>|u2VMrQjyp&CuK~|rQFmCoJH6Z|?5GvbSHh6#XwuzbtAntzi zJ@FALpqAi@1kBR1M8aN!ydKogD{fhqXzpJ)CdZ|Pimeo@OPUfK32K@ED}!Zm9Vv{% z){zq>04Y-Z#Y6ZDLyCeMg!uX6t3$iZi;WnmcIV&`8~yg|dfh7#N8LEZ3&jIH$UC_G zM`Gi$lg=Ou6iWsH$8u_Ji4TV2iK}f+Z^6=jwjHf7h4ojJtI$D)MkYj2@k`EQT{z8_jOQ2A?~33e4ef_*4YxwU65x+#v7N$@g8V#%yq^y86sd zOPkimNkR4XEC8|a*vX2mbTZl6ZoClEo@IQ2HATQ2HaK9_g@SlAC!r@Bw-Y_HW9QEw zf`0mqj~Tpa!Xn;YT<~+ie?R=U|0q7wGUuNrN%M`HWDWQw#G*}A}d;ZASf)*~g5N~c_4LbhSn zELUWMQ^5@73Np8M!6W~+5s@3kD&4~KliTtdrUpeOU31hjvEU_sP_Nf2UGvYVwYn~M z4sb&@ib{Asp3mbgV+Z{Bon=}X4J}d-#JP>RHmpI$kscdw?$l^XIke?rEx)LT9%BZV z5%3A7InZOyNkSygaE#dXHg=hsJ`_PS39EisziDY;iQP9zY*xp3W_%`S2Lx@dIu7<` z6@VeM)X+#AKrrV4#(?>)Na!-)jtF7NTiGzFvS$%3Z?Na^Q4wRxva5J||JaW;D0!Cc z7hR0<#rRyOeMwh)Mb!=`R5pD7@r>ULVYs4~pwq|fV?}>m%a;9jHrs@m{6qvW?!3fr zg(4&eTG&+z47bkaGq~EU>795^D$5??^FZa9B&~*D=Z-Aaq+~9NzFa9xq?z#pZKI`p zq#XM0k~ixJB&@{JU$b{bsyy3*hi~pCbbtmNa(R5h209~7QXL&l!Wx91EVtP_^A+Dg zV}e~sgXg-o1?41B!ZQmsz19=0Fa^M%c<#~B>|683Xzd#Fxz3DEq(caaeyqg}eKIwm zh__rpgbjf^8%M7>TGJUM|MS5_jtW$&oB*h!cFV40O&5Zh4v?Z759JK4a%wtOwoWm*FR9z*I_31`*PUkYSbzxfNY~b zJWA;fi^vcM6Xj=6$acp;fAi5m)6pqY=_iIpay`nPW>kEi^Zzxt@>wRe#zd zF+K$LV)s$^r3Mvq?HfY?+}SX5i4i0?k`bv;V({zzfEecCXfJlJ@-RTG0;;(RQ-O~P zlU2WdvM<%khHJ&Ut9*d(k+oL)z@wkaqwYN)!Aepxs&fxtBY_dq@}WjFdGapv*P0=h zy~>ZGvY3e?^;(O<&$Hig6k+-_1f?rPC!0mh*w~d02=peS#H_#dZ^A#tL=0^5AAD*^IE z`ro(}n{fhN+*BRb5cE0?37nEEe7+d_s6RK>M{ptV;ZJrP9CR$c4Nd-|&p(331)I5l zfx_7o$&@c!Jo!|f?3Fdw`Ekn;#YHm+w)Z=q&v%(_>xW1~0qenGI-vE@bQ6>{r$Z1k zWQ~S+u1gXf2Qi91PE;3w3`K!y4cSd@f*);zC&>&M)gVDa#pcLs=qiZr#DAb(oos%` za!~+W0)3_%8O;VOd|AY&|zf;!Wgk0p3} zy$8K3jhh*UmHKI}Ob6dN#K7G?Ik*;J=>}BGk6DSA%Ls*5@hK7>?cE8UVZbw(wQVqF zCmE*9&6b)sXRzsbyYIT=!#aGX?mxBisxnIBpT2-V&K~nkON5{2CtGM# zMk$*QST#s;B26;C8!81Bns&M+2g1A-(vX#(q^WU!GVxLu`lknyV++%gXzJAk^bKfS4Y6>@M zf#FN@Ze21!U;8sO9oGimc5??~gs*&1uaOXppQI4;jc5Orv!tCOaq-S$7 zSUIQQWsGI1E|+`4h|hpk1Cwl+ivRctKl|$-l0PhMHScc*N9in~n4`HKxGh5e^`su|dewRIm)tOq`>{G|*?=&pN4~1M28v_#^_4sV`hU?r#ul;}n zYkcdD0HUgM?9FVX!(Yz>wo#VhEtj}h98ZeKRgKBL7x_m?1eW6lUSF$1A4OB7WU0xo#hlnYCK@qhr6=`OU;Mx+9Lg&koS{!G=6r^YtYaXMT2>-Xw_-25nu5Z@ zqEyaeT?p*%6qC(#AYu>fABI9r;597x7`b!!_(h~Zyqus>LC_=-d>C{tdBD75&MVFfb?FUk}CU|OCVciL&l1+kWb<~g5mZnv=YlSi9-y1doWMR&2Om; zv_t9HFMZUt^-zorDWdmD)7Ldn{+2GW*IkchFr_WX`us+G1fAoEGiDyuoXcpW_NoVQ zKkU0s_gfu|XfTSF9>4FLyGsz9T71>?_aFWey<~{1z|r%}`|L1wug=K)5ol%_m$>cm zZd`Vu=`i9|yv)FJ(vsir^>t67`&Au9G25^mR^z*F%U1RoFWsdRXU77&oEl6&GC2BD0xxlS@BJQW;p}ei#d~E@^-e7Wlkd|`j{1KMC39h z&gD*kIPYx^WVZN%1<98Uy!fGT+`*2|rP1E=G*bJq+PM{-BLAj5Hzh(VoOgi8;*sag z)`l>8?6_h>(>KoR@lP=gw}}SLpn1hp}43-fYeY-`yrhpNlG;I=;UE;^lUmj zrA;s@E)O=0@z=#_VlZ${^LxUIl}LxNyEVRse2)F#nm|h`hvSD;N%;Mlfd-d?Y&czO zxjfW>#NT}MbaJc;Dmd6UXKd$6fit#yLxx!olMOH_;Mv~ExuLwY5e}ozq$zmgmzX%r zrsbqJY=zAnT^|&ZB4RNBJ^9*xU}1hK?-{kjzcu_sWQ;P#Du19##`>zQt&Md7^hUAP zPK#HQKx5T{ep7sMiW-yi?RK7MH_w^j+f>TG)`k(5zO17> zb$yEO{6vn1VlA$sOqCsVxFm@=aGR%{$;P?rqNFVcoUUX7)w4g_@YBiWesbeiS^vYFxLwZpJVnV;so{Y9r=RkHoaNOs&6IB%Eo6FG7BRbQ zWAj~IYk_%lVq^0YV|bK4S`uHdsfg+&#-tX>FS09#v zAv3>~5N^|SK^1bn&;5Q_7oi2yA<6UhiA;Hn_FCdF#jJtd ztKr@Bt^NW}XCpK;t~AmiRitsp(+GDX6IhakEjGqcwA8HhS%EL1bVH<4^w;$f4E5I? z4+F^4Ey~@iyvtdo_5K4B}1edcykD0;H-ZP|C{UW#0+g%Oj;uTT~sS4!Z|Y z@QK2$#CXVVFWdfXsWoPGep-6-s0QjK5qF#4K;A{|TRfsq7dCw>q%&g^o3n|jcE|;p z`n8Z;7aHnJptVz=7x`;1NANkHrhKxy8{GhsfBmIU1+k*(VYfBblD_ z5Hd?k(?ql0H=ep%8fmS5XvejTla6F^YAzb(o~}rUjCZRb_iSKsSpMkd+-^6m;pLGONySVZAX=(#pk{~XJ+7;T=Gs|bvAGf@< zE^4vKwAFLWh>pAcep(;dy)!rT)+3+h{}bTiA5dVln|+fh_#Ls6a=J1nk@u7eUs)#& zRQ(GSdS2n0=!B(d?NwcdOF2m$a6? zp%D-+Qg0^0ny6D`qF~(OVw_je2T44{JwEqlZ*@4Eau2a+BW6TcBdPlt}3iv{dEu7gH_3mWwaHU5F7925b?g1nWFG(18 zv=()UNhWbi;z5u--a>l7%FZA;AK%CGW!3g6zuhYt8@$%&##OsxsnIp`KEpJH zwB;=k@J7=iHILV%pv|S**Q6(Zh2Y9rmu8CGgK`HiB-Y~y*J?kef`~O8gSI`*^>6s_=;#b`VBP{oH7Dbv%h3AQ(h=B`RcVFRjMsH{K{+)S|yBL zHVOEwd7~m*>;c!05}5m)p%7(?J^a{+2iIl85i_@D4-S5ipL34c^Z+QeG(gjr$$w4J z-_}|l9dyWwqvE~kFC7=~B?wN^=WJg8d-t$&v1TvR39lN6Izcc5-tvZ6<^+qHm>6i8 z+$#_(g$)~SZwRWQ+iu&^T+O%3CR3v=L7qpf4P`6gg^lDw&*5)c%X8zM)`6cIk`JolHGYbfQxUwdUuO64Jzbp=#VK6R2wKa1<*MF^WD+sODBP z{VFe}-q=2@l;&lZVB3$F|fl)wgwj)I}$mSJ3)k2xGF66m(m`&5;Rfu1yOtn9!C0T8iKS_8N+}i>#%>1R8g4zXpVV> zB_cy9eQ|<)hR-3Oo)Jfp3`UBQC}SH}^^j%2oQ|2Cl#w~afR;r<3I+fy+m%<)9FX_` z-&+!4DR>f$%;*$mt4HxCDp)g9oUYD6StWvv8P#4lvYsiH;P`QRe&dX>OQN%)!CPm1 z%GkTfWH*zHv<=-dpWc(Qvq=W+X^EqU$41ts_LbK+9satq>Q+j1USH{s+f02Tlgl=D zzF+%?1dG46kT&%Wi8fX+lS{n2;&MNqC|=w>vLq*xG_VdOxtASES)t(lLK4uX%!N& zkoelHS?PI2h$5K?k||i*lp~@r(uV;A#1y#5NEN}yMAVWrYgw`4nO0M|Yw_#JTnp24 z6=`UT7YuRs8}2i>!|y!pnuzaUu!&<0FVFV}(^s|I#N^C-C+8&jG69EPsOaIy?Ocal z(QG(NE2D0$n+{GvoK2h6>=jzp+#JY{jfCt*;~g3zs|K%URDKHkgouMc@y-k_=>VQXa-{p*7W}1me`-SuUpZ z{1MLwG1iy7o?m%fVf+aSO(K50LbJ8*S z2e3FFa+{Q)7~Hw>Zd3nK_-yz_Ou*Racc<;w?R%$R`8+#nZ(IY*T)q_=$tg~a$L=ef zcXf2_=u5~&-Mx(Oa;?#~R!N6Pwv-i33{d1`kG;|UH&BBAX(IeD-+w%XRl9{>&z`~# z=OfN5&Nn7zUnlRRjNvy& z7T&KYxCELW(qNZ3^$4!I5-k!Kjba%xZ`k40f!JC4JaOd?Sc4PRzG)Q?wZX`#usa7E$pthJ zBP;T`peHfnKo!7qdWBkateRVonCG+G~7;QvM^0-yHNcuQMdc%c1)^jemj`-XME%0rV8z$$|Um;vdbM9&D5qDF%{aQT5YsQPdn2!t;p6hAu<-a`1+ zC>MeD3wKd-ibl;K1VdcAfd6Cg37bmso5SLWEBklRvd!^ods00y@o3dd*ng?ARa;sE z)~w1|sTfYzl6+)8HQ3$+%f_@L>6_U>kS!q7%8)c4AtlO0I~L=pCUGz;#mnfnYMc8PQ-0_3-#-sM{X}| z_YoST>>dXw*_l&E>jgoQwki>cjwl8`sauYb43W|sxjcePUiHqH*6c^01OkC7mFR3g z8WGX9HAaHml>Cy~OwOcuF;PO8dp`n`XFqZK(DWE$%dkQfB zeVAi_A6qhwQ8~N%8Q*Y#po7r!L=w5=7vDE)c?z3c@M6al68~C!;tY)tuY1Qhy$(JN zZXJa86f`cIfr<%2eMw5+qQBspLyH%GTdiS8syndhIOA#bk{6gAO8e1{zPDC1N)?;0d207kGn5?^nbl~203(e4{#wSyhW=ZoNUix4TE(|Zb!}{Nc zqrT(RI{DKM+un}fnf+NyBXrpDX(V;DTl?^9Iz4}~!sx7^fTQg!#6x(2!?vuIU2f~} zvlk7bAti0-qN({oD-33PfubC5kZsB6#qY^{QFWQ;{OPJw@|_`o5o3=-;Ijp3o*Fu} z99l^@<3J15Fo1VFb!NC0zU_4@lt@E4Lyrb{W<$KgCVBGYsK9PofZm$Eo@Jh%PoA$R z%oG#4Y<%~7SdCp4#nWxGRa{+FtkMDQgj#2Z(`P8wEX(vI_CB?LMo#nF<_?^KSC0$V zS0@PMy5K5-T^{3u0k!>DsC2l*SRBK$*L>LPbQ;C7->I#ziEhxpL2W}MElNieQlq53 zOerYDqy2F7n5C)uRmx&y$7|b^lCn}8Lptn zaMCN_FrwfXzH*V@8>Cz&`rh2d?gT5B&r3YHzy9jaD z{%b-@|1gGsn8JeP^Yp>`@kovQ>N%!B9rv%^r7s8Lf_7{({k+%%e{x@4wYgaeK;#D6 zfW*M%iIEgcl1N%e7DF34UsyU|Wr~%PDm*V~P%NPbnYQqrM1hODsESct$MaAj`rw|O z&QLlxJKFeXzXq}VXTfp$sxGN`{&R3e$CPj}<%UJBeUd6%O9d1)W%mosy!c$Brs~VF zoslFyz9Rmmjkk#f(s@RX2YK)5N2U<=#PpikzBzpe_noE( zJuGo7-;Jd@&;~=5g0TkgV14ABc~RpzuaBg*bm~2OI>MP3tM$-+nZkB`>~9V006DtR zHn+0Hd}e^biQQ7cp*>_I;{ovNU8{k?=&7L#6cQkm{+2c_HY#H9G!n~r7^IxJ6q}xP z>?Q{D zqd_iIw_0=0kf}0Wmc7vgXU9*8MvE})NI&z%!f)tXOL3;e!e4586Zy09O`*POx@=pe zx1-~5?5A*1<%@Dr&x@Ws!cSZ#nyb2C>+Lj{hF;W(Sr3i-35exf`P7M$!#QTw)Pojr zz_wJvA1^SbWmX{}o)oyM63R;=gO&!3P?OFOCh(r!YlnmlOh({<60rpN2H+D1M1Qdc zM&!s75~-N5B2>^EKVnj#VRMLAu#78f0B54vt-v3u9Y`8|RF};abd|QbB-2cDpgR`z zSRd%&6Kkf}oCsk|Qjb7*-EyYLw|Dqkedvkw@Al#ZcpA0Ii;7JvR0gux9O9FuH&XVl zoj>A!`xtn^5%cNR{bRORrb@>lW~tl`;>K!tY0PQU9@A{v*isKYk>@q6P0l))@=G5x z11ai8uKDECZiiLiYI2(5`A(ygjFBn5RqqYi4m-)s+aG8L*yd%wjnQ29KLG%cGzJRo z0(DZK(Vn(R=5fLt-bncFuBf;DAX2V9%Xh^TLq~{0ODa1B#ZQ~$3E915`nn^{*zwN8(DPe6^#|$}afJZO-+Aq7JX9oXzr%O5HAP+oAtT#^T$9g{H?pi!i<_cmw8L4yAn;$>svR=XzbCBKROmj8UK!Go zZbpn&JiaGNb8qA_#x8D76uw*S>QzookeBei+U)v-9%OCs>qWBM3j&9hyT1X=Uszw) z(@^`^t)`D|8dnkKw!hJv)=t4HYpY4OG!yrHypJMcDac72=R3ru9jEZ3eLr4k?3vCS zy!*auWpxql2kt%a32nXBv}b!^@7u?@SMAewSWdaNZwrkm_Y^~a)F;hZvc?G{j$6rS zk^>O}AY>Ur`c$@=Dly)lN(1!5$D%LFJK2?PfF8^^Nb;mi9vg!o-O~*kRcGXF7)^DO>=RvD9m<{IzLni z7HKrKsgb7w0g!}Zj~S4lp~;m9ppe7NF?rKr2fJwtGI7Yr_*w}_(L`8n;ohlWM<+2CpDxF9 z5GTnk7`E2pr>R+C6kJUO2pzkVyOb3}zwrl@*Gvx`H+~#7OpcE(e~+@qrd|i9KuPaK zWgx()8EGPzFE=15_xw4{zioy&EcGgWWPjtk>OC<6_wM?IL=Y1Wy1j8zciB zjyue}$f>zl&}p`Q+m+Jb8E2&n~>v?KdG4B=^vVPeq zr9-EWp-qN7uoye4__cihL+#}e(G%zXX%SR0aeB$1l#MH{xxnKdHNit@I18cnO0H}} zrzv$5u(w*MJDpznT0GwT&V(n=>-s7)e2zFVG{V=~016)H95vqBS|gsBmBd z5S1W3jCTBQEIra0R1XUd=eOBq+z5c4(o@_u*1r@?`|01ZHxOT8r8>nz!t+hdidnsM zuG#JbleyZjA2QJ9OX~*dzSqprnm~`Rw`|$9*KeruD#8F6h$ZE0Q{@*osjo%odHU?m zO}c+4?QfI%c#8UWWRakc=&+>jau;QjD#{P;vuId#sFkUi@Klx=N)6ft45!fSoNIB^ zG`}4Co;-biq@U&W(W!8(&q^p}f#oOjXX{L1i#n0-%Wa8)p5gWvFodQoIc17aSc2e8T5x1m>RYSV*?*X;tksgqj z24I-LRlWa)X|DwFNn)9Q-6KO?QX^sN(N?wB)iAfJvD`Ibl`-Z>7$fGRsH3#1g3D5{ zS*zXKhGW%wSCU#^N_AaP9U(p_UPrrn!2WE#)x*8RvVL$>rD?RvX!V2#n|6<7hdtA# zNX)C|(0e&d9YSCXtaO@PM_vwp{CMRQNDHV^X3{Z#Z1)8XLlYQ;QOg-3hH*pXfS58? ztiv(g3+XK*_{4)H)NB*7yrDud(pAXO%=q|@ns9&Z^LTPn(;-d9S+$}O%Q-D%w%MF~ zS?oIDJp*c@t}>6cq>bpANRI>OD0@}GvHWzHVNpQQp)F*|TwTIOSqQ0bjBff8x;H3b z)8%)qm@Zp;gPthKNTTCoCc^Q^k1Y`sGk#2?3*pzf7pZ=={lV`%ShI~mr#berZky;O zQAC`dbe?Q`&@B0xaAYQQho;Sy$hRMbIK_}3SJ}US!$?ZK%xHlpO zOX=b1JzJNa#21?G(xc9&)85>q*=4dOzC#DZJ0G{u?@J?y(aX+NrjYORCOi%j5k%rX z)EDMI7-#bHXaR${GUeG+56m9(HM-H(GMcT4n#8j1G|Wg=F@#uXvT#T%EhmVC6i>)L zG8X8N>M4|jLh&7rv2NPBe@F8Ge@Fq;+X{>Co8uMNT*x#6(YLG~->+hDKF z7D|anFn??{R_#-Arj&lm!~Mr9Pu|z^gFWXDs~c9-P!$)!<6{5>9gPxQIn7QL8(uOq z915r40YswUs55wmMF3HFL)W3m5i)23mTQ=h1A*~O3Py2RDojTn3p!!+=qiMO&%;Kx zX5EC+{4uW&6Np@^0Njm1@M7rF$+uFN&6(pJVurUq(E*})uf36jWumVU?Yl)Tw&YSRks%jX)0WT%_VAR3CrL*XWJ_g!F-7A@Gsni$AWWAd%!3`YEELFyD%Gu( zc_=IJ1w!%T*z`l7v9(~F8axbL{>@zvp)W+N45X>~S^D&x5CsDqQ-wNoC-0C*r?-|^ zMV=C_u9rrbAwh1*KDUDsv3Q<^4aV z{65;5=B>viHI4qS89)AS+TlOcgQvrcbB`@#7l(Z36=w>yQMpu;?QMC(e-AWDBI7He z;zsbBqPNU~WndpUp0|S%d67Y~xG(`cm@G!30reaeiDn);Dj{GX)f*Ly*%=FnH4}}u z83!j%mAfRRApww2MwHRJ%jG$^_G_TnaZ*4kBy*gvkYETbFFjVVXywH?ygTank0@+WE=yg4*x=RFRbsHaKk@%8Xl)EIG*3C$IzK8K_QK$xjM888%M{Axox65E@z|3TsyBk zG)l)ad#N}F@nlQ(9vV&Cg(a=^rvg0ZX1kRc(axe!|Qc+N5^eP4b zNX&NcX)IBhX(NY0FdQ^Cn$T{{DAL2kcj2G?7u6m3kKUOStTUM}x6f??svO z%B_0TXRCcp6gjgtR4{QIXPd0Jc7o)c*CpQ7WSn5XGN0N%ctNC)=f|4jRy-s9U25s( zp5n@{Jxh4$WQGN%;j~9U4XQOtL7Ggx^55ymR4#k({|A(U`y(w~34i;*?e&(=>XnHx zM%+6|la<>6U?j8H6+8 zOpasd;4DDLmj?)R4sKgelvWqEFiRqXAUEuIlY+A~*7gFQMb@)`FvSR)}ciRE{{c$HzScrlAAZ({^jVi!s9DA~JB1tjHl@C<_5 zDdTdfPNQV^f8APIAAA1p8s$8g{p}U-=3PkEqjvYwjID;%>8`DhMu8_~%1t}$JKtCSMg{-@>|^@ZE}Uth8pmVc+!+ch8GKPY zfMA7KSV7faoN%b@NcbL@SCSsU%%F^lnP>`ABq)(k@M|o^m*a4ZwdqYImE|3y;{wArRGc(l`sL#_8;kd@^ycVjCZfU6krWj$@Ethst7Y7< zkcq4CyzTAcYl6u6Z_|ShMw^~8@oXe@cyjnC#1a!NY}ESWn|&V{jA$EL^7*~4Ie$%Q zbKVHn1m$EUH`0-$f9Byo9CqZD>5LU@EpJpSrkVJzV2(hfGR_{X_7K6VGnMD9CB1Z#*8QMI*XfffmRF-7{_*6h;TuZPiuhs5X8ZbZ*&WoxdDNZY} zJMn?d0{3Ob)^6lDD%XgR`Es0EiJ?bRvO1jD8nn-)w+~1EtXKxXMi3iqy`@Uu%>1MT zeo6VGhq2_c0?}@$o28o)#B6}4t6=*QZP8*mUH)qdOa{3}NKO&>K}z0?H$V-y^HpkC zjQDK6xm&w_cVM^JDGf`Zxk%z(9U1RrpZL#?ClUTeY0)~j1aNR=LW_s6>#y&!7cmRs zYgYQDqG8LzdYyXXnmNsu722hT)6`)pQOE+EQWEco`6o4VlsHNG z@HJ;?+lfK5*C5Wlqyg4IYhHX*=F%Hvq?v9ZKO(fxzDmhWM zi6RieewHL;40_j683g@UG&lsUsnk^FSbeI?bklX3(3B@~<-?Jl^Tu)S(#_OwNl|e; zvmZf8(jVK&*GSgFBtEDrF)m8fRP19cUXU3YU*PS8J5?osX~ z5LwTB?v+#P?CK6E$CuS zNs@pPMB~A)glhO2z=;hGjYN@+r7)C%!*NORs_Bp8!T?s9LX2h8R}C%pNB+tnHh3=T z@YJlEgqmSZ4JcMX%ieN3ut8`EkD$cx{Y(8mYRPKhlt#;X<6%U6G}xAI$GIc>9+`OM z;B58LpxpMv_8Wr&NU`jlNkV}MM~4DuL56fqT8A&u=0WKZ_S}vOuaV>8m!Yw#TnM{t z52Ctr>a7wqZ2O_6-XM8up2=1rWn759{15{kj!`UG{^!Olzd((qscCci?)5pgykFg0 z{CeLNO{`QKKG)#M)@rM&ZbE##M0OFro*Y_k+UKK(3HsIp6fi(cT$ebt%E?(&-7r@e z&5wB34WE+3!!|}3o^?k;vUbnf>0p_IO6kc}ndDam;C<9DU0$`xZmy@C%4$W^hiqHH z)dzNbFtw+_y#FCH5q<#K?8Ta z67NJGJ zAg%CfCOEk)^us_N36n&Er# z9pkTmY_uZ>iV-0~eq6Pzf66=}v;-!u^Kg9s~qscNyW1eZ>ZLyAV+vigAb znna5jQ=lK9^d5mj$4`PU*gLXv0~U$bc}R6~aaCTFfaQYw!;I2)T|42bDmX0kdTbKV z2fB){j_h4OYw|u%!-glf0#|(u`ri@1lCT; znM#^CZ@P!rWv7+i=Sjj(E7n8gx{~`6L{jN>)g`B+jiRPQ=Mmlr(Ql3|ePl(w+{A+} z`R>Xl13Y`jubRe526j)OiWq*|a|Mw^TAC$p= z>eoM@@bJtOoA<+duJb*!AW|v-T@Tgw+McI0gB1Oh5cv(W zWoa%xc$ii|6gm7zjuOeh!6P#g6^;*w6W}a6#G>1l204_aXx8ZP=~AgPL}^v(hz-yr zZKs71x{o4(POwEv>V-WG2WF$w(?3-OQ~Yr@6ucn43Ra#L(@rkK)$`NbYI>M#T7Zz- zei#vs%m%6K(P&38ofmX9YY;>@r)2ZK?z5uLVDeXcB#XDcnrmNOIm_0fe*HUE(|W~W z(kf-`gKxb<|6}d4r@>gtlhu1?^S;xMjcuQFNa%w0x5my6rJ6Y9#HaPKf^I|Z0PDo@ z_D%BK{6f297{jcHL>D6d7GU4N!bTxd7=%1;kO`Td0W(}~43iT@E@^fEJ5o&pUKK3J zpsCtLL4b;CSY<+A5~8yz2qBVXCk9fDVpdvZYdQm1tn~eIa#o4?1k>cc|NjTFa<19N>bEd#~IpX(-$V78O$V-jks{il4y>p?S@Z@(Syetw0OEQG8kR*cn$Mn_QOK)Xvvl*+0Q z?AXAx+fBgs%G*sT4Ao@uuUS-K*RiAn)nW5MPf``&n+nIKOf+ZMP=a%gbrb9LxOU5YO~ z1Vks~%e3@J1P^GW3MXE=M*oew z9Krs6MycMgF0AJ1au`8_iQ zwnC}Kqm+yJj>^KBHeQs@I`)T8T~F`=I6*lh34bYrIuyu+%#th0Mz@!Zij1ii+KD3< zZ?vp{&5nYM!e%j9UCLRrrId%(>M-Lw6)a#F1wI%)R&+SJTUz~@Qbkpxy-?nPYpP&+ zv`7N^BJ}IgTpyd5tAl@ZSN{W9Of`qX-g!{Yf<;P?z|DnaUyy`BEpKjLm=^N93~nC{ z`;q5d(ws|SN$H6RiQ^&7WRLPi?8av-PE8}K=fVvwrXaVrL*qJlGrC;@R2_vHJEqovXT3eO+)6y+IT|%Fo!Tt@ zY>$+$XF?cBE^}TR=FbBbb)r}y(I6K+WM#(fBGbBxox+plhVpvx`6c7 zpTuU?nZ*YVs0BWX?MM+zJzyLjsx6APGh45$d2K1BXqcUqU?TAn*#}Ir)yjb5dP-Pg z)n|}Q9T-QE2TWxN0F#jf~cZ_-EV!Ao6}Xqz~~j!Re8&R?fi9VJwjtABi=^^ zu@8jhOqiE<`=d9I5g=Fbe3$=|6sC)`w+~?{mIzU7tl~^t0K%}Rdd}9?z2C+^`Rn~2 z6Jp^``;VcCuMk5ud+}Oo7GlnNjacSSqqbwA+>@L~RHk41#!-Hup>cV_IxW}WQd@x+ z#8&_8J^iteW=^IZE^ZnC_6f)fO1(oH(H4lEXsNb3a)Pc-r5R$|6gH4e%jV^djGy5miue)Hh|!3D-cS&SI? zH*EZxvbQ7FL(UU!ZSe3rd{%v5i>Et={474((-6F-fT+>ow~;?LC8W4Lhu&#_W|l|3 zllN(cdSNiyW)m_^_4WzG6iv^m`V3W!&SBY!-2LA?7WI#(0CJdJdR~&;zxwa;fl9ty z;u#bU3_9$6-nJ9tlF~lrD{HH!WiBaTD3&Ej%aG6P*0n&oGSn3H@T3_Oy$ zIK@RYAhy{{7BAD+BO9*iAFhip#oOckvamU-&rpqZX@(`t0;`p8gKiXtF4j1`r+b0| zXJjJ}F1#6Xq;by2v87aHL>exDw*e72Yer8cj70O9Pn+ALhNUU$5FH?Z)et?0mX=+G z7(|Q~FJ5X%hrrl{uq8tsSV;k(P=&B)8B`4(6W1XbZhi1%aHEs0y8ssTu?j7xKK+f3 zo`L%b(ij1N(aYpb$06Hv>hIAg)VKI??_19UuY&Jo%j^uco~|Sl_Z~g_nJBZjs$9}7 zm^=^5w3PM9vRK5F0`0Y(I<<1C*o}SriE8jhV$Gn&rW?w~MGYQZhh-m@vi1YcMJnj) zPPhCUyu@quG##kacP#IzeQC;;6%*fe{;&)<>f@tni)p+4wjTXgTl&4}CskTmEF|V{ zSIWu76<-r!hb~j{Q|L1Cq055@1HH9H&qfN^&`JsoUGoK5Q{(_-{(LdoAl+`wWHCZi z-<2y})ohFR!i9g=|K|5je%Ez?L*i;gqLN>)WE%w)mnz*LyhLqzsPJ$4B2*?mJm0)- zs4#YhfsisRf0YlkmY`~F5<1b9Sf?a%k_fM#k*?Gwucz}U4i;NVpyq>(&L#&}AT_aK znooX4DC5s&)HA9af2@cljG684xI5hT)E-tGOSX`%7CPu=o_yhSsc352{=#^A-gb?< zexxvq2w?ss)1Tl2p)mtCA!znh|jxFjz-L9 zqctxETR%lAL=vyL7auC!x>PyvD)@x3HtXc9hwMkz!I>O7h9^{1YO0mKbIujjeNKs1lTS%whV_`jrz0tH z+8MF%K6lfZspwnm2&3$ zjXY2Q{816N?W}FDB5rMo@_b?sR6+Gx2rQm#52vLQpdq5e!pCJ1aOls=0aN8Q6N~*R zuooIrZ`E**WwL&w2r-9%flJZ-9Lnq;%rR)WG<(xGoCW+&tqf#GC#ouhUJa2())`M> zjfR-}AGRSyTGwKC>N_1s(Nxq4`LGIpH6dH?p86C@L^tNok&@Xr)$~+sfQ*z`b$W zkXyUztfPK`Zh{f}Y3xtk+t5jF#ss@{gXMtGR4Ob_`~CF%Rk7=gT+vX^hcxEa3~E9& zQQVpQp1`o2)L6kB{2Xh`%z&z b7On43EM4=dB^(`JDI-si{pp%v_$nOfp(Kaus+ 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 z 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

    paC55m_>ryRNvbU22jABe5< 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.13.0 +botbuilder-dialogs>=4.13.0 +python-dotenv diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/skill_adapter_with_error_handler.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/skill_adapter_with_error_handler.py new file mode 100644 index 0000000000..ab2e30a88e --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/skill_adapter_with_error_handler.py @@ -0,0 +1,103 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import sys +import traceback +from botbuilder.core import ( + BotFrameworkAdapter, + BotFrameworkAdapterSettings, + ConversationState, + MessageFactory, + TurnContext, +) +from botbuilder.schema import Activity, ActivityTypes, InputHints + + +class AdapterWithErrorHandler(BotFrameworkAdapter): + def __init__( + self, + settings: BotFrameworkAdapterSettings, + conversation_state: ConversationState, + ): + super().__init__(settings) + self.conversation_state = conversation_state + self.on_turn_error = self._handle_turn_error + + async def _handle_turn_error(self, context: TurnContext, error: Exception): + # This check writes out errors to console log + # NOTE: In production environment, you should consider logging this to Azure + # application insights. + print(f"\n [on_turn_error] unhandled error: {error}", file=sys.stderr) + traceback.print_exc() + await self._send_error_message(context, error) + await self._send_eoc_to_parent(context, error) + await self._clear_conversation_state(context) + + async def _send_error_message(self, context: TurnContext, error: Exception): + try: + exc_info = sys.exc_info() + stack = traceback.format_exception(*exc_info) + + # Send a message to the user. + error_message_text = "The skill encountered an error or bug." + error_message = MessageFactory.text( + f"{error_message_text}\r\n{error}\r\n{stack}", + error_message_text, + InputHints.ignoring_input, + ) + error_message.value = { "message": error, "stack": stack } + await context.send_activity(error_message) + + error_message_text = ( + "To continue to run this bot, please fix the bot source code." + ) + error_message = MessageFactory.text( + error_message_text, error_message_text, InputHints.ignoring_input + ) + await context.send_activity(error_message) + + # Send a trace activity, which will be displayed in the BotFramework Emulator. + # Note: we return the entire exception in the value property to help the developer; + # this should not be done in production. + await context.send_trace_activity( + label="TurnError", + name="on_turn_error Trace", + value=f"{error}", + value_type="https://www.botframework.com/schemas/error", + ) + except Exception as exception: + print( + f"\n Exception caught on _send_error_message : {exception}", + file=sys.stderr, + ) + traceback.print_exc() + + async def _send_eoc_to_parent(self, context: TurnContext, error: Exception): + try: + # Send an EndOfConversation activity to the skill caller with the error to end the conversation, + # and let the caller decide what to do. + end_of_conversation = Activity(type=ActivityTypes.end_of_conversation) + end_of_conversation.code = "SkillError" + end_of_conversation.text = str(error) + + await context.send_activity(end_of_conversation) + except Exception as exception: + print( + f"\n Exception caught on _send_eoc_to_parent : {exception}", + file=sys.stderr, + ) + traceback.print_exc() + + async def _clear_conversation_state(self, context: TurnContext): + if self.conversation_state: + try: + # Delete the conversationState for the current conversation to prevent the + # bot from getting stuck in a error-loop caused by being in a bad state. + # ConversationState should be thought of as similar to "cookie-state" for a Web page. + await self.conversation_state.delete(context) + except Exception as exception: + print( + f"\n Exception caught on _clear_conversation_state : {exception}", + file=sys.stderr, + ) + traceback.print_exc() diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/skill_conversation_id_factory.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/skill_conversation_id_factory.py new file mode 100644 index 0000000000..e10942db14 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/skill_conversation_id_factory.py @@ -0,0 +1,75 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from typing import Union +from botbuilder.core import Storage, TurnContext +from botbuilder.core.skills import ( + ConversationIdFactoryBase, + SkillConversationIdFactoryOptions, + SkillConversationReference, +) +from botbuilder.schema import ConversationReference + + +class SkillConversationIdFactory(ConversationIdFactoryBase): + def __init__(self, storage: Storage): + if not storage: + raise TypeError("storage can't be None") + + self._storage = storage + + async def create_skill_conversation_id( + self, + options_or_conversation_reference: Union[ + SkillConversationIdFactoryOptions, ConversationReference + ], + ) -> str: + if not options_or_conversation_reference: + raise TypeError("Need options or conversation reference") + + if not isinstance( + options_or_conversation_reference, SkillConversationIdFactoryOptions + ): + raise TypeError( + "This SkillConversationIdFactory can only handle SkillConversationIdFactoryOptions" + ) + + options = options_or_conversation_reference + + # Create the storage key based on the SkillConversationIdFactoryOptions. + conversation_reference = TurnContext.get_conversation_reference( + options.activity + ) + skill_conversation_id = ( + f"{conversation_reference.conversation.id}" + f"-{options.bot_framework_skill.id}" + f"-{conversation_reference.channel_id}" + f"-skillconvo" + ) + + # Create the SkillConversationReference instance. + skill_conversation_reference = SkillConversationReference( + conversation_reference=conversation_reference, + oauth_scope=options.from_bot_oauth_scope, + ) + + # Store the SkillConversationReference using the skill_conversation_id as a key. + skill_conversation_info = {skill_conversation_id: skill_conversation_reference} + await self._storage.write(skill_conversation_info) + + # Return the generated skill_conversation_id (that will be also used as the conversation ID to call the skill). + return skill_conversation_id + + async def get_conversation_reference( + self, skill_conversation_id: str + ) -> Union[SkillConversationReference, ConversationReference]: + if not skill_conversation_id: + raise TypeError("skill_conversation_id can't be None") + + # Get the SkillConversationReference from storage for the given skill_conversation_id. + skill_conversation_info = await self._storage.read([skill_conversation_id]) + + return skill_conversation_info.get(skill_conversation_id) + + async def delete_conversation_reference(self, skill_conversation_id: str): + await self._storage.delete([skill_conversation_id]) diff --git a/tests/functional/CODE_OF_CONDUCT.md b/tests/functional/CODE_OF_CONDUCT.md new file mode 100644 index 0000000000..f9ba8cf65f --- /dev/null +++ b/tests/functional/CODE_OF_CONDUCT.md @@ -0,0 +1,9 @@ +# Microsoft Open Source Code of Conduct + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). + +Resources: + +- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) +- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) +- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns diff --git a/tests/functional/Directory.Build.props b/tests/functional/Directory.Build.props new file mode 100644 index 0000000000..3e44d6df83 --- /dev/null +++ b/tests/functional/Directory.Build.props @@ -0,0 +1,34 @@ + + + + latest + + + + $(MSBuildThisFileDirectory)BotFramework-FunctionalTests.ruleset + + + + + + + Microsoft + + + + + + Microsoft + Microsoft Bot Framework SDK Functional Tests + © Microsoft Corporation. All rights reserved. + + + + https://github.com/microsoft/BotFramework-FunctionalTests + https://github.com/microsoft/BotFramework-FunctionalTests/blob/main/LICENSE + + en-US + true + + + diff --git a/tests/functional/Docs/README.md b/tests/functional/Docs/README.md new file mode 100644 index 0000000000..89cbf102ae --- /dev/null +++ b/tests/functional/Docs/README.md @@ -0,0 +1,12 @@ +# Index + +## Main documents + +- [Pipelines](./pipelines.md) + +## Guides + +- [Add a Service Connection to an Azure Resource Manager](./addARMServiceConnection.md) +- [Create WebApp Deployment credentials](./createWebAppDeploymentCredentials.md) +- [Get the Service Principal's Object ID](./getServicePrincipalObjectID.md) +- [Setup Pipelines](./setupPipelines.md) diff --git a/tests/functional/Docs/addARMServiceConnection.md b/tests/functional/Docs/addARMServiceConnection.md new file mode 100644 index 0000000000..5218a7937b --- /dev/null +++ b/tests/functional/Docs/addARMServiceConnection.md @@ -0,0 +1,24 @@ +# How to add a Service Connection to an Azure Resource Manager + +The following steps will guide you on how to add a Service Connection to an Azure Resource Manager in your DevOps organization. This is a required step to connect your Azure Subscription to the pipelines and deploy resources to Azure. + +**Note: The name you use for the resource will be used as `AzureSubscription` in the pipeline's variables.** + +Go to [Service connections](https://docs.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops&tabs=yaml) for more information. + +## Requirements + +- An [Azure DevOps Organization](https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/create-organization?view=azure-devops). +- Access to an active [Azure Resource Manager](https://docs.microsoft.com/en-us/azure/azure-resource-manager/management/overview). + +## Steps + +- From your Azure DevOps project, go to `Project settings -> Service Connections -> New Service connection`. + + ![addARMServiceConnection1](./media/addARMServiceConnection1.png) + +- Select `Azure Resource Manager -> Service principal (manual)` and fill out the form. Check the `Grant access permission to all pipelines` option. The name you use for the Subscription Name field will be your `AzureSubscription` variable in the pipelines. + + ![addARMServiceConnection2](./media/addARMServiceConnection2.png) + +- Click on `Verify and save` when done. diff --git a/tests/functional/Docs/createWebAppDeploymentCredentials.md b/tests/functional/Docs/createWebAppDeploymentCredentials.md new file mode 100644 index 0000000000..11075f1c2d --- /dev/null +++ b/tests/functional/Docs/createWebAppDeploymentCredentials.md @@ -0,0 +1,18 @@ +# How to create WebApp Deployment credentials + +The following steps will guide you on how to create WebApp Deployment credentials, required for Linux-based deployments. + +Go to [Configure deployment credentials for Azure App Service](https://docs.microsoft.com/en-us/azure/app-service/deploy-configure-credentials#in-the-cloud-shell) for more information. + +## Requirements + +- An active [Azure Subscription](https://azure.microsoft.com/en-us/free/). +- [az cli](https://docs.microsoft.com/en-us/cli/azure/) installed. + +## Steps + +- From a terminal where [az cli](https://docs.microsoft.com/en-us/cli/azure/) is accessible, run `az login` (in case you're not logged in), then execute the following command: + + `az webapp deployment user set --user-name [name] --password [password]` + + **Note: Special characters at the beginning of the user name will work when creating the credentials, but break later on. We advise to avoid special characters for these credentials altogether.** diff --git a/tests/functional/Docs/getServicePrincipalObjectID.md b/tests/functional/Docs/getServicePrincipalObjectID.md new file mode 100644 index 0000000000..d7173e142d --- /dev/null +++ b/tests/functional/Docs/getServicePrincipalObjectID.md @@ -0,0 +1,14 @@ +# Hot to get the Service Principal's Object ID + +The following steps will guide you on how to get the Service Principal's Object ID. + +## Requirements + +- Access to a [Service Principal](https://docs.microsoft.com/en-us/azure/active-directory/develop/app-objects-and-service-principals). + +## Steps + +- Go to `Azure subscription -> Access control -> Role assignments` and select the service principal used to configure the service connection. +- Copy the value of the `Object ID`. + + ![getServicePrincipalObjectID](./media/getServicePrincipalObjectID.png) diff --git a/tests/functional/Docs/media/CreateAppRegistrations.ps1 b/tests/functional/Docs/media/CreateAppRegistrations.ps1 new file mode 100644 index 0000000000..93ce20e028 --- /dev/null +++ b/tests/functional/Docs/media/CreateAppRegistrations.ps1 @@ -0,0 +1,39 @@ +Write-Host "You will be prompted to login into your Azure account to create App Registrations" +az login + +$defaultPrefix = "generic-app-registration" +$defaultAmount = 14 +$appRegistrations = @() +do { + $prefix = Read-Host -Prompt "App Registrations prefix ('$defaultPrefix' by default)" + if($prefix -eq ""){ + $prefix = $defaultPrefix + } + $amount = Read-Host -Prompt "Amount to create ($defaultAmount by default)" + if($amount -eq ""){ + $amount = $defaultAmount + } + + For ($index = 1; $index -le $amount; $index++) { + $name = "$prefix-$index" + Write-Host "Creating $name..." + $id = (az ad app create --display-name $name --available-to-other-tenants | ConvertFrom-Json).appId + $password = (az ad app credential reset --id $id | ConvertFrom-Json).password + $appRegistration = @{ + name = $name + id = $id + password = $password + } + Write-Host ($appRegistration | ConvertTo-Json) "`n" + $appRegistrations += $appRegistration + } +} while ((Read-Host -Prompt 'Batch completed. Create another batch? y/n').ToUpper() -eq "Y") + +if((Read-Host -Prompt "Output App Registrations to a file? y/n").ToUpper() -eq "Y"){ + $defaultPath = ".\appRegistrations.json" + $path = Read-Host -Prompt "Where? ('$defaultPath' by default)" + if($path -eq ""){ + $path = $defaultPath + } + $appRegistrations | ConvertTo-Json | Out-File $path +} diff --git a/tests/functional/Docs/media/addARMServiceConnection1.png b/tests/functional/Docs/media/addARMServiceConnection1.png new file mode 100644 index 0000000000000000000000000000000000000000..926531290299aeeb064c46d20c967f7f22fb72c5 GIT binary patch literal 82762 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%0A9kJ<3J!mUS8hc z`cWzmVCe1;b~-S{VTM?XN`*$A5?}zcHP0aa<;xF&?8r$YBMK#j6@b&PS?7L*Xf$fl z*l)uNiY8mR+)5m;Wd0g!UFzd=+5t{If;w|5|9#x>rxcv*?BPnCOY$)MYk70$W>OrS z1UdKED4;v09z78JOdDl`8HP8->@{>Q-s=p^P z-||9}6R(M69_@~N`XQQ~b1K}|PVEvca#i*a-6`;nSEqnAjlWy^ZjNNc(lR{v++FkH zq9fR++LN&JQ>#q@3ye>jIQ$n9n6GUO{0&Q5gzwZ8G=up;VZ(x_+mrc)7W`k4u2VRs z*-|N2R3xV95m!;X2J87}M@~n#(fz2#=H8@DSVX_Vo)}+FPKpN@(+$1M9=6*)cnx~I z+=cen0ZW}_zBmZgq?pOM-KqWI;?8}ROoBEMeG3OEOBJxaADHK%MX3>VZ3!vtca>O+5D=V)%M4jmje8!V^S~L=P6k`6CEIolQg0QlP*ZpJt+tRsezjDF1xv zD-NVdEMjrpSH#E6eYf(zS8SgBQdX!^xRQ(7HW7YTR_VQ;0rrz%Uj7IOtE#6V| zdB4t+l`*CSo$cSHjmL~vx@U0D?V!JuQA%i%0i{mRhIb$E#(2h06%WqhAlR~#c7T`& z{#Gd6Aq#&EbSBDGsG}Ef^tiKXa>y&0HR5tayQqk;t0d^kcPcF3J-DuBERm8FAy!u> z)Q}Q9m7+%Bb?v_K-zMN`4cWhI-}ol1mNr&6>H45I`H_^JbF0{AT6s9G%K@&+vwH7} zca+8fW^fJ}+$XpPPbZ=)zZw&NCIfElZ;p-r-thN|@Nf`>%7ovo$F};t#~s=JiG;D? zvxS`ldT-ZQzHF*x?PpC)^b9Wd6Uedw~q^f$;CtnwZo(@%~oF zYb7J&Tln-7EONK91#mc&(sCsw@f^Wgp0kSr_ACs0O;?1}Vh$k!24RVBl4CpSK4&~N z6YPA@Z&Q-g@37xq?K9!dN=*gy6ApvqJ^p&wvi)}^6~ECSae`jDH@BoWVtaiv4x7pv zTfC|1_pVNm%%h{v-Y-CbP4hF*eA;&pkgvVMdd`LK`O zr<`s&+W$3jM@r)6E`5#)lIerJJe&jL6GtMn%0;jtV2HBik2vIrg1a>oek5RhX>x2o z4d!995A#ywCM8>XDoxPdVaxJR+03xP(YN7otBW=F{1##P2TGRCTMzuR?w9MyU^#wt zD!Ppx=D!}h==pOndH(8rp26>a zUo%&mqk za2U_=t35e*<=BGdVP`v-ENr4qv7o^6bBLa&+WjFdvXN6tZCcW#w{H@GqQHo~g_Q-< zLvh?sR8L+v#V<)5oX55al4{`vXFe-_)=#NP zmt%!L6DntE3C4+jNV2gP>KBp`fTaJ#6^v6X7DmtfD|GUKo`|nWArwGYD&P%x=583) zFgup-*gaZ2Jx=ElnIkuwYjkehLUwNZf+dsp4qhXHe{g*f-oiq9QJOzDO;Un|={tsG zSS}o~&U&$o6j;}^&XlDWoiNbPZA-R+-h@m@dO#ce$B4G_HfAWES4IhBelE~qQMxic zJ7+z2?I-m1-9|1M(NvsS@aJjQc`DMreO|OEWrFpx{6rDvh~awI%Y5-i&G|}|`ar=G zhS(fGQUM>TA2_mcucpP!7w%d^pI_oT+}K3=aEY2Km(%SdVwLUX8wZsIqE2K(;jdnr zuDb+b`a(?ye(_AK(u9m8<1?PJuf^{m)MfsFb3`_yT<{1PrPyfJy-?lnvB(za)8ab{ z+?k2IN{wf+?|Eg5Oi7VENetPaX}(+ks-)d2A5c!%REUFNo;7z+ z&yFAOXs#c$Qi8}Wi8+^&5+Ob~G0Jg@!>5iozf^Qcusg4)(upBB2()*DjRr-y?5Z48e$U@`!~< zOH&)Yj`1$hW`dPwO$rcI0EVCcQw|-L0!A?tzCty+P_gcvM><-IBT-9#z?^2GE{;9m z#+f-1gGSWSMz8vQXYaQOhP3eQQeu0DKU9|q2C)iHuyFJbxTel%!XE~*3(A(J3u3(T z-BXYs;^3y5B}a)d;GY$@HT_hc>}Q_u)>Wg&iB^^OpAaZL|NP*7J#B=sAvKes-(sJs z+u{l&p+oxBK;DT)uP2IEit=EB-wAXXYaF>y(Viylh9Bq&MQqOy)6UC~$u{ouOa%$x zOUAn4h*#058Q)@3B$z06uo+2>DiZ%fr{E?z6ZsmZ;_QOA#($TP-^eMU$?J<(`ka87 zoy`d0%<(km%vm?}OgC!x%6Yz3yRN*2?e&>#^!F?8g%tX3mlC9dQqKEnUvkIqAEz}t z`|j7CLPM^U&p8s8vJ>IS`o$)SO2?+$RN|odn+6h!Ar751I$dFhrIjf;?*`OU+B)Kh ziDA6K!z~|}7bCHr%k;oa>OtC?J85)ON6K#8K|9UKK|r_6#?U9ShT}g3^UVWb*#Ieu zqC7RTpQW1K))TyntliA<<@6#K%M)E3=eq_J-tY*f>)xlrSB{`D20_}!WERZwJ$P+I zUpr!$1S2?$Me6QQ=i3WfD~1VeXonYMs) zzl1&I8JiXDY3I+Zn8C)**O@p7MSrtR3QS12>OTwHDT@w_Fc1fYn)3V`{XVCtN+*>` zkE`YZv+wM&V|QGc?qW6}Z(Z#PXlB}hVVBAobas5CqfuN}btc;?eBbM!s@!G9S@xmE zj7Z)aEj-9;mtVx&UX+NN`Qz3xZ$^>ajXKKw{wKC7h||va#l6K0AHPMq^zdXw+0v`r zhven5h+)ZwywOlg*jCcr6)Y3;@fw@y3f#cmAqd@ct-^QDmVAe+z_f}HI#W5eiV0In zYW$h-h48i$9#SnbVqYu1lz=O|FFbmeP)_9Ybf`5=dQD zkIc;E9(Z?qIeOa9@5AW_?PAF`>;(K<>)+H;_61FL=RPy0&eIk0o~bX37pD2OhKOB! zAJY1X$dAjZE>IDz04B(H9yz{dKb5$NPN56zYRH$1idI(&oOb_Gt`(YC2DXcA1$`Rum?oeQ$a*`#y)-0_Q$ zmH!bWWl!3Cd!0t=nUcKH;z+{ztE>a-vnQ}!z2u^r8GM$9mJg6UxI)(c5xU=dTaPs} zh*KcAIbk#c6+Y^*baVIfz0R4rBk(*C8V_^`|AwwMxiFD~T<(cb4O5wk!LZ!pWA|mB zEY82Vcifwll)`M(SU8>?%F7O&fb>_C)tweW>dMN59B+NZ9k&`OYEKT@9Gaw@-4d3) zEy9V6yl~pMhVSw%jc$e%?-AP*>);PJNl4>(5lSW)L}qsPDQzFd%UgX42i;SCQP8ol z9bZp*@MnEv)K(ZcSRiiDT-mf^p?_oM6GY;Rblg6SSDwlms?W-DS*Bc-Bir7MN`Oy) zG3l^krJRmKPF~Pa3RM#{JIvF!cgMAFm@4qwj0u*?ki}f@houQs@?~!|)5`%vRmwrn z;j*|dxeE=|9r`7L6DAfX8bJSyW=_OjBZmc$zmmhad%6UR+>$A~~NbMK-z4yV!5 zIFPk4S{@B&#scg|DYpNlZ~DhV87M26{5~u^yG>pt^vsK}N4DtmcK12FTufoeaz0}4 zb9O6Fs;lqDotfBy($oHqOD(*=bnz3Tv(aR~7c*#tZqtt>fm+JUd5c(fMtFiqjJ$GK z^6RlYT<)1YkS8aRtgc3E8V81yzZdOH%?XOw3v`U!^kYtZpIN{}YnC?WT>b1|Zep@T zh*jcnG_Na|JNu%8QAUJ_wH%%{^<6;5@ld4sW}D1^#Fm}4E|Q6B40~Ga%cI+mktFm^ zE4gEB{15tztvlcWu<2apLWd(|m1m)vFBfk#&XhK4{e?U)m8mIs$u=oOO{aoi+Fbu! zKfjDoAFMkuc{aBcR+ntSV%5<)?(pE{F?9sp%_kL=XK;>lOi{kgDBh#fMS0;Y#iUa8 z2RhV$XQkFK9CUA}#L@U=cEru9Eky8kAG8uXHA;!#@I52sUi)Y(=WSoj;COz-ep9}6 z5F-%(-DN?12Kr+{w&KlK5CoA1OCx>z=Cx;AdODTLw}x{IskcLMNcE?Hy<2i{Zd3?| z4A!U3$saF$D04P#RpN?%kVJMASQN0a8D=u{#HlKNbrH}?TH>4P{`7$AXS7PJ(66Xy zIr~P`c`~0f<_;7o;--jueg?yU{ca z^xZADQW26@KA+g5C75qQZ|B7(XvV$73x{4|V#VJy*O|788;;-7ei4~)DFn885q6K$ zOhw|BhOQ7t6%F&CRPG+yszz0jxO{vMz_Ef6s7Ow*oigg|(?WlkO2ZgV#s2$qVoMjQ zBsn;K{uU;-Lj^nsW;NgGY?S^yZ|RuVf~L|>XmQ* ztPd^;Qw*L!zih3?Y+YV08VB^}zGN`Am!*sDU2z2gg~4RB>kd)|=v;xUQUCq92{?=i^M z57+&D3>2Xsl&xImC@RJ#IrfrW(lAEOsD%UPMVK@QQc5-t0%}Dt9NoJj zdc^}wa3jSeV4g@Z>HIT1lg$SgbP&kLu}=#`gehk5Z|kz3zyOVeRTRvk!&wPZ)*>KOQp?iHxz1VtMX1#QLe71PmWSVbR04>mnF@L^XI_3j(5(eH zn2?c`U?`iS<&e0aJ%WGowa~k-?R$Qtoaeh%p25>K4hq1Z!3GbzYP)g5mfM@}m-dri zAENvE!E@Kw{v|#*p-mdVD^3U;@Pd@s_XFHC{(I+($9(ALkvlVyq=9Ux5HhTFq!V?V zDejNXxi-!jK3wg2F}t}B>&a(f57n4iDEjtC7i4d45SvGGqxKwV`1)Xaflp&e2Ykjq zzm%#FsHsNu9iY`_#$+l#FelKIUuieaYd_lniI0y@6LX>;`|>L0&()dv$?wtqqa!W= z0mqJ`o9uchZGt(C%m(V{>Ocba_ZP$Z_(5cgi;L)}r4hI- zk{7z(-tcuda~{|%eR%;?dw&VyLcrJ?9|T%}wzCC5GwYn@88+gbNUsVj=S>W+An@+D zZ%G%j{_OefqaEKh9SLX0KiB8>zr)ZrQKC@^SW%2V7^+;%kU8I6Ue>nC4c)Ax9O#H9 z8~pC&)C-91?@WE>+?VR(EDxM`oMDBFfrZQSzTe3)aL&^A*4g0XDX1votd|US>DaO! z(&x76YN@$r24jQQ-T}Nbg-1D(UcA8K`*9Z|;QHes*=OKbiU0c}ssObLG&Q*<(~Mid z4WRTw^r%{RET9fNf4DhZl<+I^s(QKbR&>w1?`-S#;?r;%@U>eu4zjgJm&Y4}3T3rO zHKU?$iVXQj1Jh5ZoQ&et%=L(lmg}5=lY}V695WlRCqz>&HvPkYKMn^8{JkoF^P`I& z#r&u2I;F-fM!1ktt|I@68+T9WiTUW~7asxUk)e|i1a@2Nl~Yl{>58W-2`Bcfn^9lS z%Gv>hql3+&oTZPcMp~NKh7{)Q5d^=zsU^4M!tO72QW$r1GX#~=2GaLjx=ItQwU{99 zHXij$o-c$EjZ9H*4}^t<9ROwuOK9!N4J923sLUmoZl>xyjQe{$1~n#~2*~d^HvjgY zfJhYsh{EK?%!Q^|^=UT1*J!o`2KWPd>E|+7P~ig%3=Esm&k&=4lNav_b<2%j)ARui zPGOOodb>b-J{)MB*K2ywIX@4~vQGHlcR2b*B)T#w4@XCbmi;PbixrHmW}sJJ zGw_w0%qI)F~qNXqYC zpA&FORj8KrIa3ludz~>XR+pnm*BfRA>PZ)|OCh~a&Sz8_9$`CNn5$Q11qj!{u0v_N zXbG#ER@zr5nh$)>oBPOG+R)H&|6)DIe18EsQR|dL`XqvYrZ9d{A(W6o351~N@9+Oi z-;=`A&Jc8+`^(hG9_@5t4#@lyjXqURg)Dv$L!r>(NP?bR4Wyf8V0Qw8?(ie_H+A*( z9D`xPzOhd9HB)vfQ!HhOwi{7nIKr?DsD53_i5i$jo@246j;QL1f zX?a=F^eDK1H4w$VaLq@_=Z38p_YDtgzw0X|dQZ*?V?%JxHh5?+g^Nn0G&sti09x!n zLG6Fu3gxTT{yjj0{3T$GiM6Gc7&3?lzRQkJE8`DSqO5kBH+qh-=#wV-XU$oXjzwAC zc?zq@&i`UH)%*6(nP$0>^h0_6_vlCsM5}J##d}BA*+5L+{R1=>V}@JgChRyv2^dbm z5&jEcqOqi5&aqOxu%Ah6C2E;I{AQtdLz9w{Tu0bHA8(DTKd&;uF3;xx$YILSRzaX= zdQ_N*x|~jl+Q=YV5{q2<`G&;d1EeUmgnO~RO|m8%mD>!6$K3r;$U&H}x)BH&qr@M)nM(KMNJa^AGe zAm7vNPxLQi^%vZu(e6Qw6ZG3}sNl#Sgq}Z2DaKPi*gP5x)x-rqpxk_f9jh$>yH6*W z(sR0cOoX`i5yA<(k4hYWyCY|AfqAs}%~B7n)1NI}5^pW-!(ChTDlH`uQc5xX)(m@C z^G%veKm(#wY>>&&N8s#MYq+AEAb2;7GXX%(kfPOQb}` z_`7cB-`L|B1GYA?@e3~gX{2AIk-i&|GC`jfL=j}A*h&$=M?4?ZrP;$MG&LAH9w9=o z*{jZB3y+1!P71319RuNIB9_=wK=cnZzCAa?>slx4?uljj2t$heu-7a#$%2W+N2+SeB5QtCpD&8w%aHhMjtfO&IsNm2aj!QNobJHiL}vZ>14GnS>T@&-D;ab`PClt^ECoGO*!kBymmB(0)!60p(`4i>GjyU}h-gjeAWRdFJBi3K`#aEW@zl8~YOy_%3mJN{G4wH} zAwoaa^cZ`*5@1h!T%=)y3~Ew*M%F1uvtIL%B2#+9m{20hl%H@}z583gKG6fT!HWxx zQqyTI@X(2%lXmX!#Q<|&iDc|62x!WG^=dA+8tFvX?cbYf8DvfYL@d zNE^tg2qeuUw$PfqofiMoR_d9@roqm+DxS$Hgp{agHIiw?NV?yEafLbM^Hxza1LyB0 zB_#-{4;pQe+(l^>+@3##0hyVrE(Zt}+UjW(%sl4<=GgsTIgIvmk$+|inU&e&H5yI2 zQSSQ03-_Wlsle7SB9K5SUU`mMw-gR4-3)uH)%|k(PB!z|u)xYO`Ii%UQLmPbd<({dP)NRuut9hIDSf-%I$UDQD1$IC_&%(dfZDd`N;nXvwOe`A|) zAgenjWviY2N$Vf`^r>eTGm3`0HVEmWTiu^Il?D3d^s7pSUXK*k3UJD2_++@rCahCK zz<3)2=^6EIw%O&PN46{-Qx_T?14Lkl>**=+^!0~2KuI~d|7$X=lAfm4kNH#!Pi-Z` z*>Rk;)VQ9=I$!81-IGKbH(E)G+Rk9xo(i*7&QjQJxX2ersI_3fxBw=7MtqwrE13`b zqp43HH|iZ_)jC$FZ$C0$FK}ea(u5s9m2_avA9%GP8zgy(`H*Huue!c5B`fOAna{@8 zL7VTf)bs{#GeRrcj|M&3Il@1#=^A#BkdbkH8%!S^-a0>9-Pq!bJcy(*h%f!%QmR(j zCiu0@uz;Vz{AJ32(iPyK8;K9gU23U29b(pi$EE?Y7QxRM(hte<0dOO7puveLEAwrx z!ddA@$QN$KV)iCW?NaAL*kYKCT_T1Lm}92mODq!>58EaCj95ab-GHok3zo`}5&VH; z(I<^Ip&;ucQQ)6 z68}%FFS8)<$OI}s3(6S3&Qr;aV+uB^Y8&eW(dp$Xftqo5U8BIl|HK|(@EIf=x4p&e zCq6K-*AYKloT9)tEqFIVqDx+SuNTiw+hhJl2`t5`ty|#u*0>^);6K;bFn(EQKjPU4uk-#Oi0DU&YS8UU(5dXGcXWvG=xDSXGRsaccfP-p9K4@lnIbeaWQo zman}^uVFa-d%&5L&Wxv6tdP;%JM|m_(4YY#0SWa2reA;X<=ftBLRFbDiW0U%V|ref z3QcvcRxpGLdCNqsvM{koQFs5jc0T<9vY!kfHr<3@9WM2oEnj|vHTjZ>e$VRKTvns3 z7{=CAdcf^7h+W~d_4-|TkC785+bZ}SA1mui&HS)uk&}S^B{m^#aUv63RN@bvgu8~e z)kRlb&+4^q2h?i4ZNs`hQ!^)(>#cmoKS?7ACuh8fP!6vqWFr!dN-2jUz8W~T`OrGg z1(#igC1z$MgkFQg>z%sqBfzZfNZzNqOoe`m)vuDnAmddQXK!4FQvGAC@(8#*;QtZhd}w?Nu=_ zuq{O-W+340y|FJDcOIucuY2*H+DqOXdjId!{EHgoNu?x|;_%hQ&&9P0HwQM1Qb%EM3UIt$XvIdO7ifFkp$sP7w4|sJ`5E;iM?aI zFV3zmp#~M?(pn3C7D8)fxblUS4?3NQGJRu_+$c=SNdqwu#Ju~%8FfO7V(1T#G!YcZ zmRb>$WCvtRw6t~XO&iXenW(Ud1{ZSj^TJzc)HX{vty|j%X$oRbQ?8fX>31T-8FsGnM9eJ8r2li?-KI$xRP<%s6JM z3?x!*{^Po$;fNX)RMklNUZw`%|HPTv-cF4k15jc^}nNHd*m>Ha<+M*wBFv#o(#6add~k zpw<|o+q{`U&3mon&=Z63QPqAXAz6$oF~_dVchxZ<;CrC)i_RX6ea2>It=E-3xlr3GL=s^f&H>ij|6#EJ&Z-|xy{gy4l3sa2v+ zMkD6@Ur(pkXPd@>RVQ{f#%=M_DmmxK2vKb!Z2k7^6T{@shl)Bd2&W*)N&~)I!&#>a zh<>@7CKhnY6{@g^!_EU8CVKDUh!VL*P%x8#@GAM486N7;b|mf#3w29k&9R z@dKq$kbx)KHy;~ZO?gf`jgcxn7$knYmXd*R22uKYO z4_4Ze{DNt9*G<;4n#8cklTv;Pj`OEJ28J1V1#lt0TC|fou%rDK!D3H%MVKqkSD3B`oXHfP zznp4%)rB|U^oKudBEB!fbFtdz_)+C5(_C$`eCIPZdzp-L-2hU;_EA#;(Y$9*%v#Vk!*Z zN+J7({r!wPxN0kq)@3?;wzEwx#f3K;CS>yPl-{}Xbp?r=mSrW38c5WY~Y63z4oE2A`~ABETB zasv9Or$SSFB7?>78p>^IQSAOLf0M7DCxDXki;><=#K_1aMi}Se1+D@u0~>pwjo3Tw_mwfFM`hw94U^wzAZZyLZad zG)O!suf~X44~0^k{;>03`y1QuRNlevC+96p5A4DXcs097(o<`|vN*G}3Tyh|ybz#3 zoRoscl8G!NP+h3-WK+vJjW|mmhI+{0JoxQESs!&I9!1cUwP5;-3#ce^+Y{Xj z#9~8bwQ=zA+3Shms@CjA7=I;y^wxRKjiBo^JL042^^JZva_B1=iMP!IU;6_E|CfZ% zvI!}r-DE@?aujs5L=W3e&5?(eu*xk)wJeU$P8wh{A&)=~9H}Py<*Vmm%WYLEf?RBD z0{FXlMJCscko~6x&f3A(3t4HhKKKpaeVL{5RivIsL_&lpOs5XBper8KMe06_!CTzW z?+#s?ip$a)I>y*a=&P;SH5@L(PfnncYy33=CYRWj!pw1Ay5g3xQ(WYiY;lYM z-HFI~=R-frsdFBIwQSSsLyNmFv|w$y5UGs}i9$rb1iksoGaCLCNfg5ohcKBTbN@=W zef_$e1LUMzWQF5^XC|&H&#l?}1DSmZej>@cxAdBcNmj8RtsDirWZ-rt7FhP(nfI(0 zQZ}(%pExw4EFFhs+O$b-3<%87iqQ;+`J*}@gTFmkgY}!$biodm)c$JA+%eSF7>XP;_B%YdnhY)vtkb zQ1|D;sUiumjruNBy5VKR0=DN;_Gi($<@9~fmb)=UXG$#?N++*YA_5YFn&ck#c}df* z$G2t*Nk!(xRc`~ScWGohxp4Wap#GjZ8H=e-pAH3oLeD#1X?qqNZb-%jv1_tgDmQ z*3=jh0{_HGVIOz@R=Apy{;aWNKJX&+R8?x>&%dlsy% z4tB)Az(7!JvdPugK8|LcHKq@vOgbIu&k)Uiq6=jZq5U;iY+?4LGA3%u>H0l_? z!sR}uk$I)7V}Z49!Ey#s38a`X<`eSxL`Ixcbk`3W-pun)N%F_o)n+waDo&&n_m%2W zpSU-FUK*2m{<)?lr*<)%W*WgUrT>!a;+z(f!6@QeNh*@9KHQceRgf7K(^vY1Vy8!G zBKievs}aYV@{dOKx5m@6>)T1h){EoYPOGwh^vz9I!{i>crp$dn9`KD%S6U{vy)4y- zBXUG}x~o)Kb8kMU7w<`JnZ4|7-2$_`L?Nf`)*-_teTI#dLn(JCTTB|pN9}r^keZ}Gxf=tB!$`apU+$V!iHiDeT|-Z9s>f^AZX~zu63g3tAoW9OYc6* zG2_jj7|Z8PTnC3BWkYBy7Zi=36f^zj^#N6W&A^?bSvT+4OR8{Ixbt>If-be4)Y-9w zS-FNL!N>0U&Hi|a{9pNHyY=&nVw-vws%+29U|lcn_L9i4g%@5Fjq8IqK~(&)Hb#Pdx{dd4&u41ZY(9@BWc< z0g>U|>|tWYyO8SSXBMemn(8el;#>vaysEwl|692J1N(*pIRNO1BLdZfjyxA{ zml$TFneU{0yGB3`bB1SUy<8^Zw*RjCW%aRaEcyCu97^H5-;ap8fu}2`gm!-@8xmwn zdo=WA)w|yo^jq?I=M!Mw<^K8?Z2hmsguczS2FwIr${30iwHq1~UzUZx8d8;ucK_FB zDsP|F*gSRY#tq@o38w-*83L4Kx)9`qmTl>srM8Qp3VL`s{~g|crK5`15YA@3y(o#Q z$o!vUmgmS>$o!r`$@${I{l;2P`fNjfLKIZ;!`zgfw^d(h8){VOVEgcsx7C57)H0L= zMUHIAamfrWB9H5iQ7vk%nvsWV*4AN)e9&UqAI3}?txly#;xPJ_^erINMD-u+0|x@k zb@VlA3ItQ(SKo=x)M=vB)`?90J;BO_5$vohip$e~wluu@Riv7HNV4auXw~;TIj?7$ zG1Vnet-~>0B_}-GKK_ePsTK=TsjzD)z8SkwlnEowLv(xB1i&-@M+AQn z`JzPQVD&v#otLYuJML+#JBzt|U}+l$hmEK6J^J_3wCeUA9b|sG3(?X&2Q0E)yq#qI zLi;OimENv{P^roa;+yBcc_~ZgSn|R_%LS$Hj7blkq(>ckcFxT4EskC~EyRf#b@uQD z#PYRxwG9F!*n!InQaw|Is-nFjBcViKWGF`&}LZ zqbGO|^7FsqYPbdMkT*nU z{%y4X|3>{1jJnqvzIctp-m6>Xu|#c&`a5)?rlR6pE)vIsGs+GAXC zdi>Fw)+-V2-v>9uEw3PFs@UXgw*hEYX zYC7MulDy)_gU4LYULZczmYlZEt+N{Xf?fEx=}uIPTMWD$yc<0w_tHd=@kG_TZnv!# z{cHFR+Z&VXVJ@V!&M9|uo-@>}QOGxGI)om$SXkvOzGa&dC^}1;Jv78rSmpJaUW_bv zXd<}Y{tvczt@DHCfSY()6XWb0f{;BGIaI$MEq?D{}UM^(09tIvB42(nRDZU1# z*6S0a=4)RD?~y_((mjz-magQd+&%O>eCT@?*I9p3aSqhF+z!r$1GzmwVa3XlZgbA~ zvCvTEz)f<}^qB>}Js(n&jAlF~B!-Xk_RwSbeDq*B|01W2fi%X4Af5DWfEARNmzT@b zAlB7-dclt0{hX$nw(h~+{ijNnUxE{y2!g(L&jSgi(4n8dinJ;nmlaOke0?Q>NeLBZ^o_r;0LZAw>{???oI%nRA%^P6B7RC z^bme2vd0;`_hmzV_L&zrZk)WZxPc#AQ%49vijJU$S(JoB;(toYBa+JwVulsov^%EZ@^xtc`d+!+WI6?bnT1$!zPlAP zRoRCe?%fj#vb=YR(hzny|Nc?})($k?=mb9^6&ij?hxsqINkl^O-}V-bFjA-AARANh zPh#sjtdHM1STQP5% zkkPt;%|wF@)C+P#aZK{C8V7zsuhba2xI}#Ldj!Ja1b{jon)8ny}+O))PD$D(fl?H#(fg zw0}v_$CRhIyu+y&)!M55$8PlAX67HO-Qbjv2D8D%IMDaY)1ncn zl214aJ{9}pYB{>o4agSW28z`V^%==$*4ZV8y2aF+ zzm{R~j*q0LFE}XaL-qFXWL8rMdD!Dz8K_ODTqrC|G#=6#3Qz5f!zYXF9&``#+zql= zK64QD#4V^Bmiwr_ZuYr+)LOq#X|Q|R5{KJ#$aV+!yWB!+c#>4B1S&3Vl(cMbmeqFM zXvuiF9|p;?=(3ig`jKwLOGXQhKwdUyd?+|ZW)RvE1hcANl7nKt zi+0p$o+KQkfnlXLx%QUl(o{|`kcU4#)H&+cmaZoT=6j*Np!w!n(jTfuna-%7iA^I) ztQbqHgZm3eq5^mqTJ_sMlpvaEjdSbKO5HgDP5dC|x5mE%zio9Mp<$E1&-8;+_*|W6 z$RLk9nE=0mfqb4$i;7X9TflJrifc8Tp)>moK7E2NHjKF1L0Ut?RES z0;P^<$ukf)(U{KNS<;0wj^o3L#nTPQO1QoHZg=!sCx`Jh5%<}tT1H8^aAGG5q=Pep z=i={dIWo>cWqeUuDUv-9n*ESXvNO!*buh;#viq^Wkw#Vmd8T~nA1uzNaxeW+A9;6Z z7PJ8&w!qCnod4wh?kM(vuWRwB%Zgmko8&>HYiRjK)Sgsz`>*9hzzHP$I8NaE1}ERm z^PXyf2c7&=27RJM`@VR?LT~s(POzN4TA@}Lff1bXXX3iKO{#9v#&oy z*8${{iR>4Vg;O;)pWhv9o{T0_0RUPG?pTYLn>SD+SGLXSf>2YJAP1ZHUdoHydM~3V zSe7wK`v>$vOR_!=n?y|enV@$~CyEAD@XGj;KHTeLQHZupv$Bkb_ANvDm z@gR~>z_+F7cw@30(&)My!D-aE06=?e62Z|x_(9rk`LardcK8en2S>-FzOnJ^ZOOo$ zB!YqN1y(aUNi7l@QuCu`#f#hgr0(lF{sUlElIC$BWgO z`8`Y9AH@##MsXaX@H$>}HDr?b&~oj$_4)}7_aKEDK_|ONt~-(9jrFr13Xqv8zA~3f z6+1YZOdn~n!gIbXmGHHlq3|n_@L#x)V@!JB;GiSqJ$prUGf_$8>AW9O#?hEHz0c_& zLE*oW#!XEtd2hGvihu*Y6G7WjkTp!UpW_i}&vR&vd(@K7W35NkEOCxJMu=75(Jg;r z2K%~qaX6_y+Drc3ZTAnEQD1cTdFEVfd9Qu@j}hygv^i8G(VH;bKaIJ4>MaKY4psp6 zAHWDKGHve>u$9OzH)ugk(feCsU7#iY%RgMyOS=gA{# zzSJGwv;O0X=N)hquvJjwx1TpmXNR!ymnC;JYQ`;iU{eXIlul<4NB8lRdQf5h27ZC$ zx1GVd4f7ZbR?0{{n3x8&548_6mRkm{|IMGuplkH7qXM0iw|<@s3L2I-RiEZ?*G8)a zO{1+zy~y?T(y9I}l4j$4X{*gj(_ zXx3G1DdTqFaAZ`VaJ};W-W>~%P?KPHKPK8qG|OjJFa+dZzVHV2E8IVU??1^|#F2#7 zgDGTE>~eYyake?<^L_K1vQ%HpJl2F?^V-$jZgD`>Y zfLl%!B1}k>F}b97y=aC#!;5D3%CF49q0cZ##4`Xe%749EJp;{5RP@{6F_3Rz`|$Et zp@y*UP5oECac(KKQ@sjP|98~WwNcdzOPQ%c_PVPxGc68zcQ6}YW}pKu9S38d-=;n} z$RPfA>#5>cu1Y0{qjq|C112%}kpw+K!;hlxd`uwWuyJ<+ABS+lN{4wc#KY1Sez7CmH$2Wcg9gWRyKK zC?B&QMcsE#J*McP1u(e7q!T5*qcxp&s zlCYpNCGW>2e66%h$0)!xDC&JLH7WdvnM$PSsgm*!8GX$MODa5J&v-fIYAc6XVmX#q}sVOy9YJ1aN>fW+Ar-$$B`mC)GW{+#)R2M$2jdS^HbK7e_vg`-1! zPU7Dk6wzrFk^>biLWuQ_*2YUf)nLtD0M=1DN-o_M#}Uej(jWrlpf8*fkf8+LY&2Mh&QFJ(!8oPEJl*;|58P*%XaO zI*WstdAW};NxBWe%W<8ux;ziOdORH|Nf7IFVVUBJ|0r>^x8iFTpDi>M7Bx$Np|yo< zjQrzZOq*dpO+XrWy|67mEH9tcHH}n%8pcN}UQ2pT>)3J3EM(?9C^8s^r~R{4q$B~1;rj2B`3zMA9<86Gf@QuS7^kKU0q#u z`(9A$Y>%nknzoR~cf4j3$Fnme{-h;!5x4jYPr=i{2*>ETf<6ET+SnfWE|kyCxMxDe zvypzB)!9DF_ALAX=n{I;*#R0PKovL`CgCf@`jv+_tb9BV|0#jyU!LVx|6$`!NXJDW z*`)CDMS_JKjcUhwU7nH|kqpYDiK$$7W1N%wUJ(0Ru_Z%Bx%!1suokz9I4)rEzu!jmb(Hmk)a?2<2 z3w1DGEgPWf?9(cmG&4gS$>d+0${VFxQ0vA7;{el}6j0O?nV7Xh0)EMrUAqGqI4a$cmR=y%AAm9DY^X$!M*nP7o}ua9F$X?!y> zfuxsyv47vz@+mBhvg13F=&513|F$`h`X70+9!G$o($$P!=ae1=JkRa{h`DwQ{F~*# zFRsp=_TtG}yXYcXja=yf{VOq6J7kP`C)U$sIxvKD+68pVldEh9>SH(%ti zCqDP3)MZ0krUIeT!tKE0Rrq4j?Wy0eFw4VcG?croR7iPp{Mn(TeVx|_ndWK7x?mB+lys3h|TfOC*mK-S6 zQi6z5hz)SiMR-i<3^Y#9#tCqO`clO9=U%;DyOZFY>>D2(sMVd9O6a+Q+M0bqOBc@| zI(KYpNQMB1yCkZ*?dE4Q%u~43_;=PyNs%Pf3wjYG)W{kYrY%#D*NXv3=Q{tG*r0A; zC>eP9c#SVvFM`-IJfBX7Q#B%k$m3&aUYje%Pf zGhF;NdmmPSg9m>0(%8*Mr{3Gdq7^s~;%hQqtIwdSp{p!Em)9g2+!)Bf9yqUw^x}O;} z|FWh)t{wD1E{*W9igKJ1e-DX9ee|{57yO{F@%Ari2L~t~cDQH# zH?Yl7cp$&PQwIeElXCoH7}A~`>q%uk^^n8V1pc!MSfp!VPw3Hq2cnal#mY$-CjW8< zgN652kBmdldbHE9{@?G}8XdN{^`3Zu!s8cX;5B5RxqH{quDyE~76XgB595cW{vae| zT)H>kpwfeABAyGfgJ^R9hL>w?*xDR^Q+wuJcW2~FM+~svpgc{@c(;fK(Znc^JL2vb z@#w!JYpet+&kVUR?l5*N|Jvok))m11*23-{<6o}nuGy{#{I7V649{N*pn0rJFw+F8 z!oTn0xFgm7wT+6n)AjlvT@1_;iQED3bN~D60b4|miW=kYZKhs&UNH!wzucUEFbKdY zGPAqa-T3dnsr0;biEM^XKm1jFGymH|2ns|6j05oN*N`6Clq(SZjS8N?1Ci)>y{=}x zN#O2P+2ns4Xp3}rE+2sGDRHo9%EG~+nojlf=~IHgZ%G*$w&+~1@-+tUtFKvaX8K>h z!r^_pv@B2vA4C%>2_%PZRID3;!7s&5wW; zDIHD9>dtwy8seiSEq(t#Jrvu4qvPY>RjI=^@CvBzKjg=M2I`JKq14f#_U_%cnSVu; zN3WWCH!yFP18Tm5gU|=)g8uj53Fs68h(j1D>xT~?esKx>r?ypV2TVyA84Zbbq~T9X z{tea+P=%AtlkIZ3t#*W`S$axWC<@aRZi3WRNIbN=TTTZp`RHHK=GAqtRsD~bY>t>= zfQNQBdqL)R2ZjuAJx0?lH;yhWWYOsZXlXORB-k>%C@xub3^297qkkQVEc_1#Pc;@o zP5`X60i(MUaIhkXO8|HooFRJtK#|ZKT)FQQ7lBY-@SXS;;0N6)NuHMVi<|?2)n6~c zNe%J})66c<|0*WEx>j&}C@QM2I=ce<$C3NbZ<8-Hm9Tbx0~8GNsjJ?} z-&7?k;P*efBexaufIrdOfFe0KtDpW&IEgp#^rO5)&);RBEGXHvY4UfyG!%iEpz(3_ z+}qnD=P^fK`T60xavHH-Dwo?`N0e9{VB%Nl$ z2k<`nJ*v*0u^pQ=IjBYgm%J>?fy6u6$q`_nhpb%;@=Na(#|@rIE|ahL2*DkooP5U=FV48 zzZ@idqUvx}#h@hx;P(3oKPQ@g!gaW%0giMYugVxLzSM@N?$3?{#Sk_qMs<7UdE zlVm_UOtxg;{7sHd5$IQZi5cMV;%;umME}r(A`j8seb(iRwId+eE!{@FT_DDtNVdOE z!S^akKR4jj^ouc!Mdoq7fPnPJ(X#^1GaFMC$E(hSYC>k7uKmR950H@VY|Ti5JL+O9 z9*-42=kmVZty5+caobCK*UeHk!um49b{mw{=@}X2((l9=bzY(mm>Jmc1Wbl%=~WBM zy3+vr!A;wD9Jp3iRu>l+hR(j72|(JKJx3|Byp%vJi-v>4=64Sti z^I;4`EFaZGJZ4wsBHgNmBl9dCtMGfR1>TTH)>F z-n{CvaJtfP+&l;n{Q%S7Qt4N7Kl>qSe)r3R^WO1~o@RaHH5Io%^rtk+iN$r2&P*de z<6H33;wLx!X48ef|9)|4werVL3JSb2zk8i%d^z6 zw*%sFRfhQoQ)NOjC_DWR0N+R3V5~lKlsL+Dq*uJ2r66X^RDw0AqO61}7vg)lN)|;U zrt7j(f>cm(vJW#c!cuz;JPe;XQj{>u<6x4Nuy425E;LkT*kY+kEFyK@+#p|v2Hpp? zAp;d>{xfn|Hj+Y9978CcMPM;IoWFHF9e#n7F6P3v78^qoxjB`MG*f3&Fp)6rxA2~j z5#yS`SBfLrPC@a7SjUa;yM^9X|0RalW#%451+zoyX(57q3j;mMwt*cXmJ)np2_E}AK< z*Yl|PVrS&Q&u1ve@|*fA%g#0zD%>Y zK2ACCw62`hd`Vb&7vxG#UV->=xDYMrMp;>ayR3JOx2Ri3S}SSdDJZ3bB?fCHS!|kk z*n5p^p8Jr%CZfuC!jf*(oyF1@A%Xd}b-EGX5pnz71q;%79|rqZUEOx_Vf%7 zcV_b*@OGv^Lc`TYGQ$m+4k0F}r$t4p6%Tp%0Bw^$g5~i?0{p?i-ur^Ntbh+LAi&}a zjWhL3RQ0zU$&!Av_5IFl%+r|9&e+&kIV~&jhZDH}0PV^moA2A*-br;e$3#11cN?RAda* z?mtkd3mj&zaaiin7e0B%LCuMz;Y0ijYX*<1Sa_e_+q|(*;f-7JdazHkaAUfvAmvRb;)N9M6&fCGiEm9B zuVn-w`_!S<`z*(6(7#G>db%w8UV|JI`@W_S0vo^ClJs2DHekRGHTzS7LGm_LFkA6_ z4@|vjcD6%ywq6Gd7G?}^1-kAB5|7R?o5aV$zTes`P1t4RR{`5Tj+K-MZu9}#;g!By zj)L`%%+B`q_haoOd?N4rJpR3bxm{=n-fNW9r3m}_HdhJUR!<}P@>?pjZ7PIKy}BRe z^&gXliHjQ{TndC&>pL7Zfo7C=G(iSI;e~IdFU%Spq{Gos5OBB3!uGI;{-j1}e}?Op z^N8a-_m0=}-!g(t2f$wGq{e;pLP+g+;Ysr8nkc^WjtA`yH-%lh&*z97x*etI%5Pe~ zd({#=!~iK;`Z`BGQX9Sgav}Y4OeEVeUR6PRWHGn0l;s_CXQa=;)K0Z9>!KZzOxBge zsy#xnz)yh5C=RhR^a_lpcIF0dp|+H06NUx39~bp_B#x_G%L05J%EVB1oJkfPKxDcsSS&ywgH2D9b}V zL{$2&3@Br3fFeHE_yZKPmlW6Z#)`H63Ru{b9NHW50Y57r8CRH0?#k;u$7~^vm@W(Q zt5Tg(D?wU>iDz^omqRlBiP_x|k$+phx;({_K#Q1fi3ne^iA!dt8NIE1yJP*>YT+0~ zYP+Lu^Z4L)O+M{*Z0hWCT=*L0oZ`SQVeRz=_s=>mirEYfwPl+fEcm5I(Ag~^&$=4D zAZw53FPg?5vy~`>i3t5UFHg;wjLkNHEq8fa=s@*p8ur%-4reL zC#Qn}AO2d%WNsE;r=W$w;ZHiB>oc99Ah=7y_EYFRvxcwwh@N-qa?bi^Dp zR6~Thf_k)Qh&11^9C@r&mXT>Qiks6oBriCLp-#-D@$|tCzISG^cA#I$_0nS}lYfWL16Tj0DddNzLE>=h4^5EKYHU=< zwMqP-P6Q^h_d0H-thTJ~Ey9`+E>fx&La|l|6?$1k;|kbXmj2(aa^;c1DJBU}L=Bi|7?|PL_cz{0>;peq~{}m8c zxE6CloVyMWrf)V7dFFfNFIU^8I_b)FzYh>W8^lC~z8jK8mX?mE6Jh=#vYu9?vYHmj z7_o2-Ycnd@`guqUMgLW_K1DxZj_N|*C7c5_u0l@vboa0&B6b@t1GhsY|(b95r4j2_=wDj6KP*MJ-atbvUCtbRLET}e#D z%}^|EKgz6IUMcv5Vwq`@e4Xrw#;mI*bogVuB*q7xWS0QF@8qMDM>NBtd#{HE0=%ew zL`~c8Nl_D|x`dJ!7a^U$U#R&pWy4L59WpMPheh&wH&dhkW1Gee(Py^CJ*JuKIUKgF z%lxx*ujj!=CKLW}2uty1ZiMfKd5`!~&!OaUM%&X%A1UaMFwXw#6{KCrAK4c)CK@NX zpV`+IpMAR7$xJv}%4>zjx3vYx1V1nD%ppX)(o?S8VEeUL2je_`Ybp_bEJ6}k^yqQ> zW+aK!buzAduUx&mf`w&eBL)e%7Wpc@A(#I>a)S&j)li@6hZokh*E#JBhE1s9< z&imnK=g1$gy@8dbt51B(^6SDNY2I~{krzIqQ=|qE5;g_*Ao9U5q?@+nP80%VkzQ?{ z{0!+<20i@P1G+AXvu?`)^C%BR-=-UCo}Iu>ltX;c0AoUL#Ty)EZEjRYIQcLgjDQWD zq4ilH%YXnWn>N&Ma_u9JcAB(zmbzXn`uzt->4Nmt3ljGazhn*TorgNeVFpl1;9qH9GasZ%Lsk43`O z9YYfUe>3rDnC@3m*EFA2<<~&lme72pNxd;6pwj519z;O8S+e6v9=)hXBf&=3D~^{k zRG*Vk@vxWF0~rUe)oJIYqk9rgqBIS<+pQdV-}~a&VgqjRB*g=AB=JDWZuHgYSK#pQ z$$k(R<8271tCsA=3ccHLMq+MXRf~1E<|=cCYfBBb2e?`fTA1+Jaotx#mZi(32zc?? z4suK>(QW5Tl417Qr|jy54&$tJ%Ph-}&F?KC8YPMD2E@W8A)9>yu9h>X+BMjakn7m%9x;Bx3w!ch<=t=b>=9=9OOrFvF2Z!Y!1 zEI2wrwjHKrA%5UuI4^hKX{=pq8r=v0(SR04-KaC&pkhpri2uTnA2Xhe8{*6{E*qACnAQ=h8xT!g&le3 zQ(R)C#h*2r>2mp7Xd{HGY}^WQX<$Mwd{vcM>orQC$yHYI3m&oUbh;km%k_?GGaP0g$v>@W) zC@$&z%6*syyn{z_18UsnE?s0$&dIh+l4(iQR$TbAJ59OC)gTF6+SR^>KU@&17_m3f zl`eh-U&zWd4i)VSSC)kmCeK)R5jzsA)$VdUcyL`uJcRV9i*IhwdYR6sm8v%Hm(q7l zZACs^V(bM2HW3~xOJm}+*QFma;koZzONx`Al?boA(pwoHeZ%5O)W;gO<@1&~PYP`2 z$G-idUL_;BV)t1myKzC;>kRNlBxT}Z8GAf7y66ukyHQ&BZWR&!%tYxTyy@f0dK32; z+R^#<7=~Zr0_>QRWfJu1qk0tl**RNrp_c2CKO^8JMjf(}7P^IGA*0qZ@|T5SiYR^5 zmp@PNjtjYCF$2M-{S*t-^EC}5zILM_LCS0?*za@I@ttKR zMtp}5KcB=ZJ{Rlp%pAqL(f2ZG*0@%5o`}Ef(jKX+T%tupnnP|%Klkl_y4dhz-TVP# zxAKw?j$lwWx(-HlZh0PvS{mmIcQV0e@jkmR&`=WJ`&RXN?W6`e-lg;+eVg+@=@{&? z|2#N+4A#&P#9-*|7}Li^!V}ZSJSRo^{o{d_``daBm00+i5S)^9afv*7J@S#ZHi!A+ zkN~s|2ghhK!Mmk0H!$hmdwS)v?fuOHrT2`Q^yNvEhvfQD^0FU9(l#jsmm;S;1ou=b z6q~l>61cX{rj{LDVSaN$&yi(GqU^oGuD(A;d-c(XXDT`19X-~$`3aglcJFi7@hs!F zhfkxtY9I8(Dbl@<>Uo?ra7ahML(xW{9MFvvARj`2Lrs9?x-;eY;3?z_`{(2CnuYHk z58Fogt3zFp2iCF$>bua+X=%+HVv(O_e37CN9c5IyVsP%mj~RU)QypB})avrGjyYz$ z?u3Mq1Hp7RJ886RCWY3A6@-urD<<(9s-DSP`yPo4b|&#NMG`lkr!XA*fE$>2LO?zMa?= z`jbVqC0@GTYkz$GrQSO8sOn>ltF^@MVpX`?My(r~jhS{x#Cd|J6ZCmEhAVA$jJsY? zZI88hCfJVFB^h8rd&hD07Vw?%xbt-PEg5mY`P3UlYjk#-n;~&)r`+VWty^ofNoemK zbw0K`-7?Fp^|Zb(G~h7asU3;(i_wW?A=-mBis!GJA_v^ILgG4Hd+?bIU#8)a+>;46Q=fs-ebQv^zK4vZxb$%-9PQ@SXNI8y z1JjRadRL6Z?tIAmA~9t@r9W7)H0TBdgb~RH*yRu7tLp^`e?sSw9!2d4^Q8J4eA|6W zG=n2Pt+^z)gYz$Yubc!C*N5hp*AjbcjA92F?@)(nT&33CO{CVKPn$MS$1ZB&GA@{V zTfVt)5$j?*O-^IPtNda&Lu)4xkykH@*j$g-JOAAJTz=@R#)?sU&|`0FtcV10m?>KC zlkw=RK~W%8{a4wE49UygUum(B@oS^&H!EL~Q$&2e%(OVQU8(7p1a(5R>q}B;3tbxC zdX@%;s2LP`I2C-g4<-9mp~J5F$43c9rtn%9hWqu_l);5|H!oAbC>PaDGZ!`X>v@hG z$=a*e`~BtG`?tDVVsFy+KM0#&OzJ~Ee@R=)AxS~@%Po0Xpu>&X5A>f%h?6-Hk4FpsL(brf21{Lu#l0j;KU zA>@nhoFlmF^ouic8Pd75OEm;1@7|}`tiOiR{)pv~I-wp>=;S^Kq{T)j>L^uV4fH%7 z=|4r@#G*Bp^=HO(l%-&kd@_kAtvS4)O{KVA`ruOaHXtB~VNxNEdRclF92D3Eq5WiR zDH4S(H3(x2yxW2$$cf&%RP}j0jAcF0OXt_-3nodQkmnh)k^^hXe?f5seJ33-V~B=SD` z`iM2kSNtHtG>;M>; zS!~p<2I*BS64fnh`_fFC{lGSDnRF92xWC_XnLj41t9dpFzjp{$U43+zkPNn(l1(m_ zy7AZ_6~2VB=lNa4ok{v7m_x2=%=d1|dL|FY;^&v=MG-mOo`~!;I~%sg+QfbrQT7*P zh%PREvnN(He#NbOUUtDBnqx%tK4f1^OE@p@?~RnY!OBBv%Zfv3y_I6;oO0p&xkmiX zvLR>XTiIw$er4*DR-P>eU*>LnL~HFrS{u&cy!&YNUW>*wEanoC=KFk4XItT#>c4Ib z2Q>K-n%t`LPd2i=XulTB;MGoams0ef)2c-rDgWUMe0=bBMe1h9$~U7HE3ERHwM_7+ zp2TZ#!kW(9*OEx1k8m8W#?1GQqU6c3y+VU|Iq#Qori)#VOJ3~!s?2RuK*4(V)>6YD zmP*JL8uPpj$}M^HUO|iw?~O`dRxE`RU@q+Wy?bj7ar{$_-fD5fU{0s|1Q}Nj9oxCr z?Z1Rfs#Z8ZIM!@;{7M-mh>n0 zH?hh_p>*2FJ?M%vl*)gXG?WK*Og-i%-}kXHwQ}81C_`U8E)Hs7hl6LKVRlZv+z-fn zc~A<%0K)~YgMoLGy0niV>ybENUv>6Ug*_%OwP0s{MwP$)Jx#iQ|1?pPYA!E`nN#;f z0#TCGgeYIyySCz@d5!3AIY-ENL9XgFvzOX8u}FG6u3b({;6H?}nB7trT!zp44f%|5 zG8z$5!-(XDDrO_{6eIkD| z^j2P!cc|F!NtVN$AiDxuBmrAQb(^q`7ip|UE_3J`qc>&BxPHa^yh5*cD*Ug$Scv%? z$f!pf5ayobn3IIOcsaiN;N8mEtl!;&#`~WI%^mdPb0{-2;{o?-o839K-uXoOKKUk3 z27L@OQYN?t-ds1ISlV#7-^#YgO8ZbS(EL#&B;V-ZNq~J}#&rqwE_fSNchbgpAhLG# zJ-+pwo#PkPGO0jDPP{1Tcj>}Bt1lVtSgaXVM>C~A6b#J9A2q~KZ(_|*U{184mkMFm zUcUU2Q6RguK4cb`ZMUdb?@0+x4|;KO6ZYqY*52iWZ*I7l<`4*CJR3x=`8HgE$wDeo z(``F-6Di^M8Y@$aXD*ki-0zD9bDP`1rTuHG9w}(bqs5DY<#{i}==s<0(~bI7j4brdKqzgv5rypuM28c(m$eT|eqx_WJMU`O$T+HyeWltUwS~ zhnVlu9&Lj|H+VF7jNsv^Cf~9oG=#zRqmz#xTv>|8i)TE#U@TiPh}Ivj{%^W-hO8O@6gVm|aK1!k~D_iEH!6y2;1@msE~!blcbmRoiI&!T|2m5O=M( zeK`EKD}*X~{lnj5@Z;Z*37)kOTe}r{2$zUx+kFW8_;4=+QJkcY_)-$XwKbAPAlm#g zCnCgce15%5doUfLh+&)tiKmg3@teGAAl$p|!^9%#^Sw3zPdQzXN4nFmd;e|1WiT7- zpw3L0<<{*Xa%t4C#$qdR>F%VKk$yEaa-#J2SIcM7FPddpgJEAyHJ-2j_L>@Ahqk1o zT)#p(r4%zUsKWakPF&$Iv;Jl`&wje3NYwk6N!8h>jfGb81mYDIpUH=(TQkxeDMHV; z1!?##6u-WEhFd6%=(EulrnQ|M8a{8*uj%}MKIvQ49@xA1rM*ipdDvlF!dO;FgyI=g zx9@ZHd2p&We@P^!qp8zP_skRV-&emiBZ#qEq&IYM@DO8mq}#@wTqU zX$-Y3Fqy$)B{h(Z^}CpKp)fVc^Te}j2H54c&dTblr{yYZThce>^=w*+s}|fuVm7Hk znG|VKU?r%J$h=j#%vdDji~(!*zXJYU*#lIq`k#QRRrvld=#DBG>)u`_`_@|Ir|VIJ z{_E<7v$@;hnUmtkPZKvhyHqg6N<4Uh`TmuZadVs4Q08aEi)DnCVQE`&9Mmz(%^o&l z)ims|Sn#S9GvbWh>aES6(Qm1uT&iQENb=0x7@!AGYbQp(V|y^g<+r(RB<|xm<&b-5 zI2weRTj@C#^!G|fj-B8S(h|zKqA4m)%{e24;%MDXv?k?zUQWD3!ZaL(N!+h0BE(g< zW1WN8WgW&|){8h>PXFL`Q@Zp9ULqsYlfCxShar=OzcV;9B~Q$KJq+7pqn>$+Vp6TS6#1MTvm8sDNiDR_|Mkh0foNmo`D^xf8VL_1f)$&O`2?@!>eT!>-vT5 zRNcc(9>*1n3d;@VF8FMPvhofq-{UJTK?WQCzqW1$v?GQxSY8Ur^wX~s zdM3fr;ucj}ZJFHbgades@LJtPxb}JHIlQCGD)SnTl`B)=p<1g!$nq%cCchtit~8X0Eowbg=S5+=LymWM zXx+T$v!5vfS^yaH3z!H)DnZY~H!W83N(sQ?T04k1)pIKwD?~9#NbVyXb3uLszKM*N z&8X0nKpEDwWXNsnvG}4Ef3;An4RV`qvd@5>h!Ha6u{LAxz{FXqpBHwe|H=eg~|vzYcV+!&ft{=U$$spJZG=_a>i+SD{7a{3XD4u^&nqr?7na z&>{|m3d8SV?~5Su9mkdUs|}=Va{*aQM9d+7w@~p%sK1S{0*;Few$ig_<3Me?2;kSQ z`zW|y6YZib9tDxhcJGd42fl4sCH>>jh10n5;hFOvm&wf`v3+fTsq^8&=`RX9?9JN2 zE^}Dyt&%N!UWW2Eg6x}~nT)(U!x*Tv{Vi@8Zg6KW37_N8?oeGSmbFRRUQ91E5VIXg zSnP+I+;k2%edifr&Kx;PNpQH>iEu{&F5GgJM#l`Q!9%abqd)_L>c;o+@9@<8Pu zk=pT1d^z$yF+;30@Wd^B^ZRRp{YFDaqHq{Jt~cHq31!HlTm~S#=_25_x4z3sk^4%t z-FT84gu^s$3ueMekF48KS}?*CuS|VA9LSi_`yI`=lO}4I^v*{b4<+VUYAC?^DpI z$+1jTG25nPDu0#|pOrx|CSDoXV_NKt?sfXHwWM)}r}7hut+eRd0@C1GK$iOUH7&rY zNlIO=5VZh@YfoV8d)m)lesP#~E??hFZ+6cy7bs270F7+Ky)A6ZBl#24pIF$eWA&n= z>Ot`n9#FarfbQxdlh}}2n+c`#!(KVz3KTv3(e?WyuTp3M`k~P^Fq((vUP>SF&RuB({pPm123GtSH(zoP*l!3z&9$XoF_TYPjnpT)8Dm6cDcs+Zlt z=<@D4aWM{C%U69g4AJZ#MG4frjD%hCe1n|Q&PH5kmbd)Le|@uj#$nPrS8h{LN=CR@ zg$1CZ|KhU8g2&IGh-GInzqDc$f#E#pVYHQaeEIH$Sqb*tE(3Dmt&8eLhdD{&9^Xu! zV^d*I0epL*I=Gb2)|CT%)b_U`s>LH5LXCi%>3L^>N`&)_E#{3@S*icoiPz-I*Fs;GyjNTj%*DV=EtKLy=0ls1EQ47|%r9Shc0Q2YFv@7PPWFxosfO5W4a& z;zj47&MnuQ3}oe3>Bx=(=BFlrBz`hb4xkb6lLD#DXrcKLfL$9HA`#*vl_)i+E8}cA z(UbsyGx!W$(75ha=*Y=hs{PgN@ybW_E1NJV?Go|&3ZCCZAPmwKigzA;+TX0k4oZ`M z2OVU1py07^f0(6x%1Wc(VNoh!U9(X5Y{2B|l2kpDR&dT*{4?l0_5ecRZKK)7L%n*T z&F*D#$0ST%+bM1iy^3}+O73s6$Jmz8!l??gK$vkbqcs=?WQZ`DwPtD88;A6Ot?D$qQ@p=Gq2sXiQ#!*3TurVoZMh4?$X&+5Pl=AHLB zHn|L@f1J`vl4$8(Lph0gpgriXpUPGSS+Wslu5Dhc|tpog~$9n3*K zV)n*U&1#`ZW2a@SZHr;(fCR7C5GIW5!$e(|8mm(^7$pbZ4x(FFJM@@d*;0`j9|~ z2%moTyqo`lwU+0q03(wVBixkZ=YVyy)P7#L7K$99V>ak z*9N<9{-e0Ob;}D(S^Mk*`oKmfANn;qUnuic=5Zvx428F1P!?X=s4`V5|Ldhla%zKb zFT?#f@j2gbFJndjAB#~&=ytha2Y%=SYh?~2EEwQB{pQf*GgXZT+MS~4B){T|AmmNt z^)ci-D%n%juRkJE<#~9#3)C}>YklRRkJ0-aWKeuuKyY0t(@M83yphyLcz}WIq&hk! z2+}1CAteYR-JsH;Al=&)R#hwb#17b!j|^z)K8ddQ97a2BlR| zz5w1AYtVSUsT(y2ot{0Qselg7&Dh~|*qZ&~A=dgDUV$G!9a=f@WRUZZQOX8smG8&$ z(-0x{w409_;?hP|qoHmJyiI2o{<+t(Cg?A4iHO?7Mg4Dl zn*Bw8$cOuo&hGL*c{?}oPZ z4zwF(qPw!>6tHG;zpbOm=Ac&X$mQdb$Kv~p;FW|hOa2q2T_Rw)n zwhl@sABu~qSD+p52V%;b^wF9j1pHh4rTovSQa-!~P2UQh5@X2|<)zmMQXvGcj30o@ z=A~VosZFIk764vm!5maRjA-8iXGX2LgqB2#ji6+#WlhX;79IXEG|QO`E(KIJ9dQBF z#Y}OkY6hRZKt7#0IyvJtA**anh6b9R5l@}D{lFC2j1O{cY(Z!vX2fpTt77Y4-H9P< z-XXXV#K0UvB_^Uk(NDgeH`_z%h%-4La3JrK>w84Atf|4)&r=r1Ck&840oabi z?rrVJCBxQ1nUM00zO2J>*`rfa;lCfjJxlNn44WMH*b9X*sWLpIpCJryt6$mPxL`^--2r(|z;sSc^+ z*ldGIIa6j@$k3uKF=v2z`yA7my(g{+3me+<38z({uazAf*ih=BIYC7vfH5A;L(K_t zqef6-Lh11$i0%ZxosA&M_psFqA>|Yg$0l%Kg2_znp;7~bx&P}{Z4 zb2&xD7Wq*x#~+5@UdD`j-r{wSnapB*ZM(c3V)zH+XloCNSjUmN> zu2D;lLMl;*n2l)j_I*g?$tqEU@8+N;1aXkhFDRwLAhA@sR8?>h=*ch3i*Wxltm_{% zG&eiDH~nnQ`?O}niqRl4?p`zp#@6#dO^v4bCa={D57z<7Qv{Ho)Nhu3yK>{Fig=0^ zobe##ackQ^V?UCzP4bI(rxc6tU!E_U9F`}p1I>P8q z5B%{EXDg-Efq`49R~WbLXT^xGQK>fOFxbh zG+1I^U~h05{X4#9j_}uOll_hxG2NKkW?p!iI8>n_O!tVT ztomuCX*C1Zx$F)fd$kp@prZQ9&>k?y2)S@%rGcuQRdM=(x^MQkmAW^Oa8c(UNxi~k zeVuCsbW7bLYm@TQgY*+hDm3C^K3YVSr*h2OqB#pk=6_`xRQOg{K+qr$CHvEss?679 zaE^mxzNm`{Q748W(s;6MqJ=H4%;RO6!lTeiB4H>3J{n;o0!>ErtzX{ql2K`fgx=Mr zI?VAz!FTcalOQNl!F_<&b-&px{UBPbt!;UASUcHi`%W2DD!9cKr5tbk+R3@?xNL=s0N~`K2kZTVpu%uW{HC?9DZHRJghZX zepvCE;Wv^$oU;j;3-BOS2*{3ORZBl(QBUWeM~?-((-R856Uq?d&t5eH%irH~@Q574 zclhR>NsC)UsOK6Ho>*bmYY8kO=2!46Y+_5LxN%AlA;Lmg+3>mtOAdj!4@Omob)qx+Cdy+cNIAXnxl#d4PR%^%UZeFS7vWpEjGuc=Y;+ zZ-2Ug{5v+a;eeZKjozCq-xWOa4v$TPJ&8W=0`ZKC`Gk&NZw%xlvkg6hIB2mcoPZ|i z#`z+XgCV}j>>CG1gu4! zMjhHR5;$x1x)Hm;jWG!QyZC5>=dU_&Zy*1AZ?aPcjzKl7bMdXgBCnQIc%Ie4q9At~ zG?c&Gb$6XF)d;knAOCcgufgCS9zS?7L^1w8dnewVQMJ^tb|>VR{Vdia#I(y9C5R^+ z!VTKLUE8}e%|iHr@NgwdL*-!uHz4Z3PAs3F{TP?Lao5rCWyh_~%GF3Y=RFdUhEUkEV_r{g71impm-w6{Dh(m70t|JbL zC6h0t%JJBQa9LUaG{>PqSbiyn>~ar26316(!zob4$I&ksGN40ZvsCBEMX#W!SoCDI zAIT_7eRJF1D3?xHt9kIjjm1EEL3|xcdHgNFyFe2r!tJTcb+febPe4o{zo|S8VFN0T zdC~!_kSGrA0&C_Gr4%VGLY(fBpu zfg3?+M{~CC}L85A@ElOg`W__$)rO@xy&IUrV(?gtd9f47{ZyU;FA)Q zpn?2mP5H%A3FNAhnN7rkj$}5cWyUu)fOIj#H3JPzNk|BK7W_HmTSoN?LJV7783jCwK?T?BUAo@|WE%MBgvxzPM9OUt z&HqeX#)VKos3wxF+RTR;Ne=V&ArbG?LGV}L07<-Nm!_wulXeM5`%;uD@VC5f^;PbW zNd#)^Iwg447D8J*@eb1Ms=14yIdr}5-Nhc>apWPJegnTVqSxWx=XCUf8O7BQE_3z?oX6;i^09XPT z^*;j$V6v6#jFY{IHdVJ~+>OK~AAJ+fpYs0w%YV1}Zp|V&MI(#%U$%M&SEi{aNy5Ha z3JE(q7i4Z`7Crm<7q}<=XL3UE&3aN{`o3>>1-s{ zHI({3O8(u;6>vcxSoWT7m0s;bly7d=C7Z6>T$`@fwrmIW$rEc``s15rO3ua8oKI>D zUn1N;zvj_d;^b?FDc;9&ZE5yAEC{55=inM$K0N2jC}`tUU~^GRRa z>;W|8CD93 z0>I_Dq2Iw*ziY4C%OBK2N5|DRsW-+P zsS(ZGUE`Y|kF5_$_4CIW^(8j-I}VvS&**m_OxWryQL^(%829c=RQpcp+5fJ3nkKe8 zScY(2P9iJfm)3Yd-5WU#$;&^oTlONtouBlm|1oe%pDH+EP0LrF&i!#`I)~1C zgPjm#qSWE=v6==rjJR z>M|XdT=BA5dpvgkBEQvtT_f4FaI?JmnZAjh{OO+w)6W)FiOqb5MVs9v+i0JJUwyDL zBd54rP^=TpObz8cXO;i98a>+WQ8N~O=G&(>T}FM)0L$Q8;d;npdWnnImM?U-1d9c< zVCBUR5_#u}4D-_u_!)8Tm*RF@A$SAWAXZBA-%BItb zopJnq#q@q4dDqLrALl=r9MYPg6dvsJgnO0)8oUq=f>`EZ8kP0X}0OPAK=|BC7! zjg?EH?H}x4mmfV(B@(gG$aKMTN&0ZNJfvE6`HY?%gOl^hb|#-^#Y1H#w6&peugZqS zlM45&d&A z=0r>4)Pat_it@WW<21gwx*J#Gw*I>0IGHVZ^J2oixGQ|U{_~@-og=B;Ge))ArexQC z$`NjIPRwHe3w|Ic8C}0n`1HYqkMF`>t$*coBr1bV$btF zH{YappN_b9;qGBt*A4Fy(?2X~Jm4@E%9BwvnfXm!)P1O~>7^8#ET*k>kd&32mmYoZ zKIDC3X=3zN^NKz4F#xJ*Myw4zI2-MC-{tA9sd-KiG?;hpO3FAm1`dec2Yi?&x@^8W z2~8rIsQ?(+H$OjEZZdFw_`LStT^WccaX57m@VZWl>xsM)*WTB*J|HI-87l-Usw^Vdp z+O!CK5iwmnQTkyMHob@S8fBA!Nkji;(=#wW>7+#a>ZiFnzDHBIa1U*-BfOmEOL zt@c(-HuC#W)=*uL>A-)|-@sYtNXZ>51+ZlXj_8#|$vRdXy7T-4={hNbJ3%dd1CX%FY|2KW`R{$KduMqAy->u)O@@WqeYP`7=hd{&eo0@W+I* z=6#pxS(o?%z9~cu4TUXiDtru7b3fl)>nXq1LkwKf9d{VE3xiH&+v(CuK%GCXo%Kog zrjmR6gGi|kB7#RxQz`L1zNc}rudv2Y(T6_M@hAEw-WeP2R5`!78XG9_2WdncHS_4- z)s)Po#1`m8}UgA)EJ#Y1_&M)RY&$HYI zLdoo5Nxl9H%-{+CHq#~HOiwV@1eSq_q$|Lw78^P?>el{oiE?PZc5l2snTm{zeE88I z5DW7K0kxn4NGLlw#G@QAn4Cy2m-4-^2CZ1f^{w7O@%Nkpat3ZGESs5^=23HktN#Pr ziW}>ILi__orMqE0z5Q3kW>24wey3|%#{0vB(^n?-4mOE7X){m8+z3eA^hbmx4>c1u z{Hsjeo+)O%&S8GN$$sp0J$n>h;xM*d`zN1fw?X4ngr@YV<~pZ%eBsgB?~T{S@&p+S zC9dToB!wblpLRV4t)48n?WH*$PoFBg!sY!XPi5I^GBe7yYV5~y*Go1;*-X2aBx$c< z`8*@x#ji)=s;k7ybr5yEIOIdmL`!qZHb2V-2&9 zmVw#_!OrGh^Z}1L;hj25Yw=kDC>FupB@MngrBFmWMVyhgkzohUPw5n8>j$mkt$TPG z>WBbrLUN|n)LW7zX~+MplMzKw-&NG{o0fdZ-^?jUJIW&B9Wu?F&E33vZ}Y-K%WZq= zP4Un@HH~BTaXjCX5|ePF=^^XY2b7${qWGH4?lkZVPxe_A1@Sns0mQ;;^xP)04GU2`k*1~-bxW;F%t$S-Rq^_>&U zTd4`bW_$H4`CG$o(MKA-^G15F;=qD#|Gc1#@4^+wQ}tUH&%CxiYSak(X7M0wqN()A z<8U#R8ko=i0G1^b%6Z5BIf}XhQ8*xwH#0nDK#E*iU-a|Z8pe*b74g|OheOH?=VeC$ zK1D3fMpxO+YAF(g!M-&3EWXwcV*>{(U?dav;cFYX?KQ0sjqpG;tP3%!wjMTNg4qX3 zRLi7%23C~)0{9y4W*;896*J6^b&h4FC4XnAgQ{#!%GPlOYqXt1pHA@!V}?cwffw=b zmKh23A$!H_ynPc3$3^w!Lzp#d&4vsyPxNDm-nl->(~+espT7MYV<} zn%_7CA~Ppcrk{=K7MdR(A1}R06*tdiRZT~HeKNsWDQ@^pBjp03gn(PcvpTA2_1=)| z-rJrSpFiF79a#H7bK7XqEnR-{DNFklf~Vf&eG^#|`CSUpjun+i*KDHQ6*rhnH&wEa zm-WieF7^P5CU6^)As^j!I8eN#8OVly3?+@jo%{u2LXiBSSb)IWy?l_C@nO8&beAC* z&~PJ`agqgqR5@!yU%49;oir{6i@^uxG3#4P?|Y>AGfR4w zp+}(Q0|~NY_O$0}hF^UQjo5qYgQatj3UR5egQNwK+7xMeJ0joqpBD3Np?5*F;A|OS z#s+sO+q$Ev^OWg56+p!FQ73i3kQn*JRu_%q=!<0ImE_8oKkrIAUYv|*NRQEZ{K*Mt z@H3DPCp_NlQ;TS#7I~G(>Sg&1WLF=xpb=RkX*xf+y6f7YEJz8dDQi4=)=UV3Y?@AS zuT`ektqv?E@qHg>SbqausGk@arDFmoJ0PFV4F>_8cl~O*zNUHP2~7BF{C~GIAl||S z-YiZ7qu0md!kt?`wO%Qe)yMX0P7{WDeVIU!{Keayh3ayg_NM;&dV19au{VK0eEjly z_(>yCAO1xE%z4`xlxzl%OvT1NiI`|7ms{#yNgAhqa^uMwPjhq~OJOfZvux6us!dxD z<|EO4MM&G7u5>?p2@s5=o3iF_(ByP0NuJ+_wg<(0JPBD|p6c`M=|Pt@l7 z@cCqY9GY@cb-Zb-xSjEh?2Wc0XOI8c-uwp0 z>5x7XoU<_U2RVC9Inw5B=rwk~hxxKl;DGvUg0;$p-ATv>5KI#+05Y4WOeD>7+(Eo3 ze*TVaU+QcQt@#FppA*+MTA>pLkRK2^(v{@!gb%=GHxi-W#7U5Mhl2qI!8Ud5UZy)xK?1gAhb-f0||T@avR ztrA%#HTkZ5u<{wezesEHUW^gD;S>sYMN(0j&!-+mN-o& z1JXqw`#;**Gw)6}Yy2*Czv;%7d9i5fdo_HKEq0KYkn0TGO{%)kKDK%NIrS$tSnfL? z%IN+56wy{Y*nbM)zbz0O*)A8;T~y**pQhX>?hp1r>?{(9xU3K^Zv%r|=hJ6mE3X?5 zdV=foX4<`uS}%1jf1i%N+R`JZ{XSk+j#YI1ao0vpb=@L03ac?!`ZT3vZOL_+cN}zM6H0uD+MxxCcKRFzcalU-@&0*_2C9o^Lmfo}InyRvf?_EVz%sp!rIEu;{XI4n%7KDHl?dwSR_Z=9Rq`xdvgwsC;9(Q27frbWSK z!UpaS}XaGp<8KxBCzd`Z*+{2zpOo%NX!I&suKPlXJGHL7Ah+F9~&paw=; zUaee6Qujt}{;)2^cexJz#v7xQw=c&yfbhxm$U$9X;GNYgT`zf(82`3Bw@s_n!pbMG zDdnq1J7pqb;!JgVhW%-B^M~RRpkW_B?f(QzFg3{C>fo7dSh4*S*?Y1<^@pxqXs7Yv z%R)ul_Ky3L6lq09%ok9&?K$u1&7~w4psrq|75Y z4D%)$^c~%O7dN(fsF_+JsONckm`KrRyvh1$a3>mdc{QKQZ;C|i4{^y+sonB@yWyq# zhBXrRpI|guYatT1g{ocKF%=6b5QwGhrrzm~Se%CJjEbW4UJmx8!D_4{%x!M#qM5 z7yQnDL^_MDEZ%|^)Jl<;(JA<$pmj8CHOt=w(1hvIV}Tm@4gjUrA&#qUjkzmw;6e0P z;&ImTq8Q5!9WFMP5LkFe`w_kWm9y!RS$vj|Rjla^sRnf3o9Rx0CL{JApTnOoJOy8b z_&_k=X6{}0XCHXb-fonXU(sN6@12-E#5rcX235#rVfP}+{+&U0bkt}inP!r#hr@a* z3=QWiX*X_xVwkA7$4dO!&Ft^0sMC52wF}j6Jelx;xuFTL&qCL-Uj1Choq6qVxUtEP zbnWa)8Pp{phS=TST~N;ALKyJ&N>D#ihKh-Nw}#FxJ#!~oQpy{GGYw4#fA!E$g$cac zmpV>?4^p!2l`=*bF?yd+uygR3u7B`+wf`dW=FB3O*W0(e%-gs90T7cmgr{7|?Y6$U zHK$|8{TymlroW3?p4TLaAlYTAW#?1g*G}7b&&wjr(v@YYSscXhr!e=*X!&Bj!JVAU z_BLnNb<~@9#r$jyvWxP{H0Qvj;e;Z|`nDEJXX`k8w?@+iHe1Dt$^1q?*^%fyqORp~ zCrQl&<9@iC)2tskd7{Jhdwp1L@GSbl%}xbj5*hpjB?5lSbo=Xc);p}LHoT^M4=xei zg>44p22e)9I~H4lp{TnkA(#a|dl@#Q_^E}K9jG%uES*>=?u6it>$F$~iX} z`pmpgQE@Ou76Z~Q0`<{zQBAN*nOYOE7X+t+IPl=abG|L3gl%Wfy>RGh%j`Cyu~4;T z_y_l2wZs?t@@n+4YBVtP2w59E%n9;ql}D8ge;uBE0ABRP2(J+hJA($shARCPA?PRM ze_gZtQ)ZS}=>r-j{$8PLJmvuAWS@BWpv=R*{7*&_Y^0nBqH{)_xuN+G+>KT*vLiMz zXb5hD@m{=hSZh6Sa)S4cWY97%TF;5@#sb3jp5=Q`iyHOJotFXj*ZKS7QSV8VZCq^f zieEwqA_nfksu+&q!&cU7!wiv&^6-g`NJ{;5!yINtZ&7)~gwP9cCO~gkh-5^HyT*L@kn``@}MNWiKpu-sd{N>AwZj=|y>`wTg zt6z0Stw!IshtD3EeG#x2(!qhVbEFFxZ&h)AXaS^cPL3SPzVU>B5;eo>FFZ5M6sQFc{^DT)l zbUDC+1n+1&kanA^f6On=;b&x$;jqqX@bQIb%=v|X4dwblGP4T8j8ny=Z1_w6a7*ZB zwTOV>C2l+1oGPZPB3dB_l_gR(&Z}~eh5inly5VT}Nz;C$Ou+niL(k|k?J*kuPXS`L zR5MF)2^|67r~C?n`D=o&49H0KbDbBvnhH_08G0BNX&mt=63|uEtVarB7{YBB;Z_wA zn7)xIvh*Pd4D{rxhh|I~P$B*;92UauR`x=5)fY@VQ;yBs8U*w2zAO&4qJ6d{3ZvG_t?}&nyoLj7H5w75f!9DRNYqlCxwHbl?7iE#+O7Ot_PGpk8%WJ$ zCU!}O%{K^Ia~&(4nXwUd;Dq2nIoE7Ms5e3*WN#9mP{$ubBc6!wuM>@#2v|)Iv z*r_Mdfz;s$MT@Tp&aBj{bGQHH!%L=z0fav9YtK}z<|LE^vs6Eb)8({LpHTHX+{IX8 zB6GwFA?jNY3xm?%!6vs$dV_`OIVhb!`^}>~i$RG3Q&bMkS)drg`Da1C^g6&y#sp4S z!K?V}S?cU6oP~IHc|aykfRI>${~!YUZBFPnntAaUt*$1NC+`qUi7tjJc7&m2&buvLY_^-27A^o8dlw~NWT6I8n!nr2e2r^y za`o;xi#wf+m{3>D_CNCMFB0^{iQ}43I$oo>h>N!}(yGw#MhmljAHgA(#oT;0v(Jc~ zhd)6mGbJDQz)az77xlZP%|0imV?wE(cly?*p(Ui|ywXi*!x>w@LVw^r{jXpakTDj^ zC(LTbPqSC+9XLqunD|&0r%FlA<)=F>Mw!Pn37OAJUp@IHC}+bQDxeY)x?5hipgchu z)G5Z-Y_uXG3+)zkj8cm6*^OlIJNZmHOnwEmBdpF=K`CF*4r zF9u$E~PY9DhO^_I~zRnck-=TeQk~;K!_P_V@SSP_7eZ zTWr$I^D#$DXj^`hjM3fRS+4#MMf86z501t0y*9tS8ugdnkh5x0nfu8F@v+x!q5_5q zJ2pJZpS5F=ncZM6L$liM>94x6!2eKvf2lBj9ZY5=L_h+oUW$r&NT^|LCjZaHz0U)g z2|y3WKPxo(f&QSK&u>1t)5`6*jQ=k|_P-w|)|A7DCaY{yz-8gilx|iPHhYZO+}P`hR^d z5oDZZFaF*g(>GV~1k}I)4(j=Z45A$xXk95UHYJe$D1uQ5D@g&;>o4O5qmD4hLCtjh zJGSR)xMI^RS|NdN-;jPU)25ilrz|W+nro0Gy37&w}Im;^fm5MR1?=k__d3(LByXn!9gN^;M8R>ubb)^$L(B=)NgUHf$XKgDT~&K$69qS?ET5UW=#(q^<|Uu{ z(dQ7>M;!ZdtTKhVF}+~jUe>$eD1w&wlc4^&rDX0Ht_k! zj~{}=g!F&p)-R@zUCAG-sp-19R$EwFe(%|x{^pVF48l1dKYAqKNQ!j(Dc~1}z)%K~ z49uBBhZ5{%zOwEaup507wM*|~wS7VR_1e8TQ};z9ZV2v;X^sVkoT9_C-1`1spOU-o z+u9q&o{+C_NzZ~OihG`gsTeL~?nc2$LYU;G+!E~=XQS4uDcO8UBiXn~Bf04-)x1h0 zx$LW)e^$7Rb#$voJIDvU@%fFS*29VHr_BK^$WlPa*vXVSDU@Q9bNmT5LckLK!5Gg# z%e7`?2bnIgD|2vg^!}^*z%Pylga3jYyg(0F{cX*>gd(rVM4?&+U={rq`Elyx%=|_j zflbcE9}p=-I%f7m{o20W*vs1`H+Jj$t)^Grkbx&st-#2+C3!TlP8&gB`y}>)o-Bf# z&nxRVuW9J@%<1eWsce5^XPIWBryFYfao>rowcLwffozyR#NWUY-oIawE`9Lw#fxi| zd?zB8965|k5=~9b$Tx2|z?ioub-MrrcNrA+4+s`Pro#ayJP&fhTgG$4dflA2lAEDi z5ckV;vSF>aNg6lJMbuxLU_&4l ze%sjVMG#VElRpF`M3uK|M3K^PRqtkw7Zf%bO{Fxz3I)7C(Ab z>Oh0@UhGtK-6PJ`DI_Hmvk&#(#9B}Nl%TIk- z55L^K9Xi$ns~S65L$T*B`BEop_Iw*lC}{O?YXd9oQF;9L%V>r)&sz}Ek9Bj*u8&k} z`F+^Wc(!w`ciWKbDjDg&a43FzI(&U$igL5PaDBmeQ^C4IKeYEli|~hdE*)0v1=xE7 zt323HXWB3NCdB??4H`yK!j*6+JO%*v{szV>bxgb$B_z~~yU<5yYV zlle|N|EFB3lEWxP{GGkD)9MW1P(noG_wdSLvbt&$AF_~ky!pLtubL66(_`kP!XFno z{7JW!kkQJrzVE9A3~@G}+x$Sb6uy`j<7GP<%gLuxv1V4c2$W4oxfPmbj$&KwM!Z4a zPVel-&y@Cyw9ZSnA?7%rhrBpBls8^S<^(^0>_7i~mEnQMB#guaArk`D-javY1YtLT z3ayv>lAhJPO49ISQOBo;8khnJf<}|Z;m)HF7FbJX6y;^qtADl_q^yjBb8bBnxv#ZD z&=};iY?lhTRp0PCmx6ltGqaKSJ#M%fiL_BeWW2pjFW1{b{}3RS5M$Sajyh!AG-FDX zM8hEUT&Nu>i$X>|d6k?<#aZQMi)PLA<)`|4NmcrNwXdkW4g8~sA?oSaE<=8ePXah=i~xoh@C0!0>B02twcc z`n;FKA2;H^>(LXe$H%2$dpDpL*!!x)f7TwFWzVdRUjEa`nG-43PfIo>q@l;bXVYoP zHgG<~+SK*815Q`+2ndxSeu_``nR!|Zhz-BMMCnGF;7T}=y9+kC{fS>m|0Cq^3`GzD zu)tFcxzMzS!~Zc;^uc&Sa1An%Z-4(ex6n}|aGqMFwQ?}?8>L59{PO;FFYEArbvn*> zQcg2iDPqJSFY?f(eFcJ}kYbjdE@JyWRm8TSw$Zjgw?yw1z?d#hcXu66t>i*0>;En` z%Uey6sN3<=;sE1!O=BfP;m2ZlC+oTA^yl1hhbQaHi1rKSMTui|ju*-KyVXso+R{N$ zpv%vG;5tM6Ea*)*h;+e$c6Vn>5(^mn?|F?kUbhBeOjcTk|NG>qbZBx=!y?J)7Wk%exbEfLnLj3Q)-83iM)2qYsoRMm}y}3*kundz{p?~1gAstI2B8Q$GP z9F2-;fG^U+7zKgw?r1Q%IbmAVIa%5;nAcgfWNxKXt05xL2Qkrc(J^~Ob0dgm{cjs% z=_NP(AO2N=z>HzrA-GgzT&nr}nbF;T=TBx~Hyn62dLgYD(oGCdal7=$VIIU&sK4K@ zJs2~+`23vDXJ`(pQnA5&^s@qY{!X+7_n!f8o`}wnw}%lNVrfO!gGL=GpH)hTfW)YmDabsb!Nx_`AFXPjT8Q-W;= zd{&a;fFym9z@A`RBds23feqUTdc~n56P@m9`>rjFIwrPXg%@f3JNtcaDgl$=@ZC1C z7K9!gBcz*sGoA19LKD>y@QNWp5nrzs&leTf^9G!HKjN?}Q5TZ}Ar62b92y!TbTJ>l zb4Q-{k%Fua*hYtdc`6448J|b}HeVv7;%~_!34&1c&n=4wp)+?XGx+8M+f^|z(QW{@ zTXO(i*vM}ZQg$vNH${r;D9>DXrso$-*q=WpoD!{~TLiMqtJ!q1FP7<&-e34uQovrI zhCulID|p0%jOhWjrG{b$4oJJflb*u&(&opwXOu29UmGX6vg%pCX(yhu&?#2%evIuc z6^=zHDMt!rzufBx{L<_J#t-rFb5Z2e^={e|WyaS<3~&QtX<>$F=z&}he7k1CCkIVF z$cBYVHGQ9ESUk7!E$E9^GZrrAfvvUWqhN)<@v z6MXskvAh_ZhYnh6I_lad$>N=HWZ#MoXO%Squ^;lhs6**=8>Nzyo6WD$iFKgsQjzUL z&ki$xbate)SOk}%%zd63&V|=%(R`Xs%{%jP>`j_(Dtm_ zItMUm`XE;OsFQrMEp1Xm`g*jSVY%vw4D24xm(WE!4`la*i}OKgq%`1rHc#o;5P)g@ z1BYfBy)RAJkEm^?)zN{;_pq?B;x(=tbMz5hl33~HXcMq>*|Ncy=hq7tks1Y)b%H7b zUzww!Yfe4IE>HiX{7xc{C~!aR`ZpRtiNUxPv=lW zoY}}wy}q?nz8HJ+%ID#~JMl&ksKE~K4iZV;71~D$Rhz3SC77#fB;T0-$N=MP-&`2f2A#+4}A4BtTPmqmvhzD2>ihJ!w?rd5osnZ|F;(~OuD zv!E^KF3p-xcOF`T*-);cpUG&N4Som&(~6;Xr>9w4Hc>UR+&QH4&U{U$v&1@wckpk0%c^RmQIm)rv+gyVb}tI z(06L%iumj{FM3$w&YbsMviVXXWyQ@qa-zHGy?;;=5gV=9_RaYW680%^=QNHc9fn27 zUb0`V7iOIt&Ktd51>-1Y%Y?T%@@4WYeIKvd3X-}0{UyQc-OMpo8?j?WFT;GOCH&_d`}u1B1QZWlo#dsUxG9kl}?u<=qKM0Cs1RDT*a)qo~G^*^Uad-z0!zw#AjFt|IVgz&@wpv#XgOXVy`Ph?22lQmx!Wi ziAPdN$m~wn;4*>aJe(??5Cz2yYAMd*U>3sUI)@TK6@Z1RBsKzws=c!o3G0VB7r*Wh)sem z0?xw6hsp-I##DtzzU3y3K8}zX8PI^-Jp_N4*&QaPKgt&>5%9%l;8-ZI9UCahKKARaIdr+-q))Wo2@%N1yq>Wl7It$ z8Go5)a9m5k{w98TWPAe^toJsQ(qymk?%rU_FXcNeX#uszR1Fcpj&gyxrL&|QLPeWV zTW*1O2%*W-2n5w$jK*l-JA%YemS+_a_hx9}5E#}*(7c-W2c;maJ9yq&tjNX~*IrJR z*|coc{A1{G#OM)o&Ij_*W|I+I!TeBKV%fdN*)ecI7@GoxgD6$Bs%(zkf&3krIR8T|j8#%7xm)6e)_+MCic(n4?q0=-`Ms|>IK?;zV`$0$i3Yb>b^ zaR#eu%G^ZoYxOh)k@McO)~MiJY}wJ|oBKqQAyf)qtI1`9FSH3~?p6;RYv{82%6j|b z{uiRrRLF;+oHCry8+CUUU$WR9_u_5(cVudmj_pxQHG~ftEmP`TV|hbe*i0F5b(9Fu#K(=31) zAH9)4J)Fv#m%#Bt!0v-y(0-IMYLv@go0@p*5qbf1kB;RxbqCdIqM8Yn3DuEZQePq( z6opuVzk@#?B<35j>VS?iy<%+;17HJmhH%n*tuX<=+?_s!cxp+nYJW>7U%6?44hVt4 z6J~auc%s}#75K?vCz_NU6jJN@wKZJlEZl?cY#O#_bH%XlG=NIb1IDlI23~gMi`m4^q*(M zaNIpshVnZKC~cg~T4wncROWvy&@J;TX)u=K8Aj-_<>Tk=?4Dogd&}tA(EIG(T^k8;T3(?Zm|w#5btjyGKu^I$&mu zUWif6d>b+j-`+3$yDkTz0UK;U`>9q`-s><^bef>fFnzESh@70 ztY4X3gE%oUg3W{{f?zbM$_7i0WV^txW4@vC7wfh1Gzi&5H9tZ*HkZVW9n#x)@{L#n zfwh`0>O#0z(DFUVudPQ>Cs)k~Ym~t`=!8*^@l`ygbA%v71l!UcpOmw>3>G-o6-xs$ zw~1Rv!9K?OT%i<(f`@yktD_}_7iHfUzF#;3>J33>i(h+@dp?n5*j&gED8HxJyz>ho zmb#$+|4PEe-@|_ZAxd9G@8%brK6P4GR~oiR-+!NVO!jKLv`Av7u06}4^?f0)uctmHKB-BE%#;t+z1z%L8t^W!bqs^f=F+7dlz3Bf+QO_vV--!uyX2ID$D()QC> zbgPL?=U+D7GM@{Ohg=nCWbJf!KM8`XqM1+QUqoHN_&Op1GIH+8@@!D~2<=!tAiD`$ zx}&hMI(#ugErL}w<11j&efJ}z^851%PAqjK|A}4H2Bpkq&RgQeWl=FY{PxQR2_oH7l(}Y87cFgbVR#)E~oR$J(EM= z2P5Xo`1yrQ-bVwBH20JY`Az${`OJKbE*!@?5u_o(*I=y-R{zEaJ#R>10gB36g% z>T+Jl9Jt%aZ<2Za_(=4g&WqbXzuU}*a%Y2*dm!}dmE0z2s)x1l8C^7k7k9OtAJ(Ft z?r6aIuJ@moO3c+zRTgwy5;Vh^SXOxuAd*zMHeV3_f@j{!D@6e7eYWBh3z zNCk;sz~~coSTlS1O6U z&9?f#pc-Ad^X=Ew5nR8gBrPR{4y(VqT3RHLbN1J$m%c2c%2#fU{dCosb}`PpNKm*jo55A6ZrK)KgNL4SEVeG1K>mgVtkl|XP8@=uv!aITYSNCDk@iaG%((yT9%{6+^Ce=%J{nt-OT z>JeSs&1LhY8~6HXuNbpjp?*fBu6+y=&F$*T``?ky3M4MpC{v33&a=H#N`sk~zU8(a z{~;C&;T9}VM_wm|iu|J^U*l-`teDtrDgG{1n>@nYnN#nhu{84jxsv~*-bNv?9 z|4la~R$HgUgo3a$Jw3nenbR#C&?LxVvVd^=zdYFApc-@G_woh4j9O;U#oqV_4o1J= ztC4UQ@d3i|A3Zk*->WJljWTuulNLN4(CUPuwF@*y}b zv+9=j&ADLkT@fR2q!8EgRGwZkz9{(k(WYZ>{sPo|!alz$1pP!@t*OI7o;aw$ zIYdRrH5M=4JRFwRB|ox_p9AfZUaT%YUuwwsbZGGxr2?+A=q_BrW_v^bhhak15OQMb zy(%+EzmrW{f(YB*DE11*1NUN|V$e(p`CNY^IUyM4wgqii;%D0l-p0#*39rjfwWAfX z!GcZ4T{JIz7Lfr}-}!6--0;E|t%&CMQ!#cVSy>$9we=#d`&)*@>Y9l$i71-~A36%rmoV)k%r|vn;G|cZiU4+bW?{Eby%5f*h_bzT&pNz!1Lt zNz%E#v=4b5>#Oyb_dn*ZgJ>rri9sDvf#Nm+BO_pj15%-b);eS!d0n{;Q zL0DGNag5W>^re46ci^LBXL$PbX{xk;69wNhoxaYf8mCs&|5w*pheh%BZC^!c1Vp4k zT0lxtx}>|MLt469KtWm*kaFoI7FfYWazRo$7f_JST|jb)CH5J9zx%n5=l$d54>%5X zc4wHG>te3&_dGx6aGv0*N*-V+bjTA7Zys&(-EfYg%9mOi$`-mhkcLGhrNVBH-c^Z^ z)Jb~$a!81s{RM!Xb68_eZFY2Y%+%;qYY08{*agD5l7PZw1Sn}z{()HE+S)6u___GT z+S(IALA|*K&l$jsuJhO}So|>8$GHqBlTj1jPvbRYPhnSEsB}q%;Gv5>ta5~T!uxqv$Y7dl=*L?sZend0Csd5?05|mL%WvnKk;5ZAe zv4YQ9UrweqYGgj;Vr3y&f4$K9dz1+1iA~AMc>EF9$`h|m`oy7i0}LGKtNs1W>0&1K z-?Id)-PzdKxJ7u(vn%w>#O$NnKux;2pXxF)=u3Gao36*d?wK)VRPN*nAI%C_eUK_s zcv0h|OD|sjXRChpYe>d-@Iy%X64dq{`-Nc^Idq<9)7k&&&)`piQc}b*3P5r8**D*- z=ksY#40Wk+JCT!R5TL&1y4VIE1wchBhQ8SC#P=URn!)&2@yl31E@8QL00EhY1o#Jp#8GlpL4T{#o2 z-1UzO;(lxjP~(-FR$AM(P8v7<_C=4Yt$h2e`izX_xKOFA7tdw77r6~xDCCD zz`)#u>Yc|Gt@*T!9T5u2yA!5+-~Sf3UBx+XH9E|0l&T5Wb_PWq)Z#70C(Eebe4 z_n8iZHTnV>zXvDw<#qz)7+}UdfxRV+D>!|zA0>t0>52-ui??KxbC@Iz28-{{mD)C| zJO9zu2PK*>{D|cK_^9!SU|^edzze-DWRZ8&F^QZZ%Dw>_P;md-*zIakd__PRucof8 zZDbq)a|{SGC&>?1Q8cca+!?p7><`^TU2QOxyPYzdwRzXbc+Sa@N(<@ooB$(?*Qnnr z*!D=67Q#H5p{v)3ElBt@?d;kfIQ4Z6DvJr z>y}sWbBRJ=hWk+o=pVng0#1nGY@wf6c-XlQR*ZB3arH{!-krNK$Q!I%R7~)?)O+8& zsEnp1YI5Q>dS6@mpW(E{BWNO9;*m8RngYdp_ai3D5TrN>_AnfrcfqLim!LFNvm|j; z2*+mEx<201c3YMlh)!*m-}jifnbjRj!$+&HqP!~vFj&2U(Kb^pcgU7u@3UobOl_UX-ie25hTKw`pyoI|T3_g|9M$ zM4oDM0CgUh?EI^pZ=;yrX!G|Jip9VPL`{~ZdLk&OaA*{3fJrXorrQt~259x@ZC(Kd zTS&+a0a4;EoK2M|doz5yx&ie`N9F*}bHHVlMuA>7n_T;gfR{vQ??mT2qQL=aOFJ7~ z#$F<~U^buu*-7mFYD98Taa8b!`8%XAwQAWa+WWg&yU&rYXPTfRE7C0K?#=YPVrP$z zKV@PZYi}Qo2)}Se^rfkv)L;!CWov4m^zTvc$wVS z5`_o3u6W>I3+p@^&7X6`KKVsbhxolcp>{x3-eFD5{?_WJ|4hfMz(1`r9`9k{WZIKb z+@$QvG&mi^cTY#y#Q^+Fs4m@PO?qdCN8ckL^I6f1^FldaNa?CvGJ}{!G4AQ)*m=vt z{3V)Er`N)qA^xiRJ0t#P7&Lw|{YeHcDQ!_QyvCk$9t|GMY={ASrO+SIMYhVwdAOd=gv4xU{rNLC{A!c=f zNf9X~i0}SpO@5`Kf3?3N#Wu5nRfAl~FKB0XJq9xwhz^*M&uJ5yp(9R6XCmX8*529* z)fZ1&c{M2=tyBOgjBJd^0qbaTR1c@8o{mcSo459+UvD{$04C=^QrAD->?M^{Hqo%8YB+MG^8v4T<_NqtQxntyQU0ly3y0@fB zF$O?(84n^&6mJ>qp!?_`+I_=RAO**rn~%@fWORRpq;}HS>k=moy2MvKoqWqGNar63A7M)ur|)m>{>6TE7$O zWm*ZM%Fq4Fl!52MrO?$%JGP3ardb&voI+d?;qpMeb#;A@2B}6##q+>GD5EyGE(Cs5 z#2C4$!Mm7Sm@Xu`!zHUMDOxjjSf2}%4uO6g0jqw;}%?@lAs{*t+G3`-^$f9*SS-@l~Frlpb= zNinjnW9tuiIn#f{*j+Yy%lr)Py-4r>R6o(e$Y8=u95i!>1=p_om!SQ?dtLdEpB*u{ zE}xxt;-*t&hya9NxCAMFE9Y5?YQOk6)LJ(GvK>Fr%|!g55C8^ZKT-%kZf^oB_G4)~ z(!T%>Dcdf;G_A51 zpt~29`0#UnSrzPIX;9K)v;HJr076nny0ZCH2C6(Ci`r&yq0IkSwTAF>a4d5@O^8Qf z!VE~P;TnPqT^re2)lVq7zYlMLP4?iXGh%0&-!l29I%yOU>phZwJ=j0cOo|3B4nZRq zW@#o>l`9hl$!;^H-<4fkT~EtEu4g2jzHoF|V0KqO zMx}3{Urrx1@O1O+G$i5HE*K@-{xtp`aFC0$OKkYVi} z4ltLb1DxYzyYxPT^lAjusS*4aaX5Z8Rj=kboTPq`w5rtOVF^CCl0?GA%u$dRB^nZn zq&S?0ep5WB))kVonlp?_ajk5-W@i<&mj@4|#~fk0Q+4=}O(*GF|@;Apti$=+SEUhYvf_L!3N<0cE1qFDup|4cy$!wXk7CgnVxLv87bihAA2-`^!hi5t$n$G>yh!(sw{ z`i4PIUYmgh89b&lu;DGBbFU8^?z2_s+y>|CO`Y;-YrgR>spyHmDM-De6U?LmZC3v} zLsVtgNM9i-z{8@nbWqea5OE*+CphQ1TU2J%=?H<-P%km^Cux74&D^MKQnE5o}%tT)1nW&j+08Rs)$_eQ*n1ZM@H5g%UQ+F01*+t}R3 z5Ol@V396GlqXxLi1ed*M;s%A$CpJN>k8N6Uh>4Ym?$RBySQ9_+AjT)c=LU)`$0Sr9 z^wjk4830}eHwCxphg8vzR7J7oI5@R$V5f_b?Vhc70dvZ?82Q9UykYkJJ!PbV5(hYMsNFe3rymn zz?uN@bJ_d|Oa-I+h;+K|`@a_UGA(d`I z@SDe)0`sg-G>K2IHA>u-H6%M9d`fhtnPhOM&Xe;v6onSiSgt ziDk$p>@;0|?-kYeAHZQWFx)zw>=K?$7Q+fgAt4YKmGF8#^PX*$^1U~yh+t!wkC1-) zM-ZeNZ6MNy4MjcU)Zz*?-rkmhLKfn>V6RN-^j{h(f{VOz4e_A zI-U=0mk*SgRSo}Ht?TF5_Dn3r@JMBEIvFi9(b`DwP{QsyQwc@CTy;ABVcD>q+wK12Hk$07;!YWh)j(P zkt31RnP^@cs(Zmp0gpRho97X}`qmp#cT(NF?#h34rGre4;(^T!O4@GvB%{tUL9Okv zH7y&W^Lm^2>Y3{G=P2w&+DE@t`tG))tgq2xm@cO4Dvib68qxV2)YUAuFcN!ejTFP8 z@vaWyPZ1s`KD>WlTAx~4YE(P1bMZL7>xET8WUbGOBuIClqUgOzkD!&R%BWsVM?{^FK3?zmN&QRsWdG5!E2f^ zw9?ZB#l4<=`_eL+RcAbrz(^z0`;cE%pWj}L7mXycj ze*M5#EVq##1b}fKaQxXFIk-gxHR`=6H9H_w?-5X2eM>k?4&?t*CDC@@Lan{|N(P|M zFhu0hqAd46@XrvVmEIRHTa{@sr<|6Yo?lhNo|X)9=n18r^XG`u49s z3ANVR0iJIer_h;>FwZ>GZOhS=?N+yRUX?OdwxF3!;kWlv-xJca!dKbA=?se};`rAM zh($DK5rg|OHub|&_dS_|`<>fyg0~MN*TrYbC~&DKsqGaSMAvg1!&v{MVKXVjqPsP^ zs#9;1>-NVqA27W;mc$AUY(&zsVaZjL^#9)bZ?%h@TZ&a!Mp@6?*jaxx)^(y3%JF(Y ze|h5ov-6D+C2pH2E6p+(`Xkv|M7}FDvS1-`BK<+Vl`o!%(Uq~aE9&F$ETy?bICB_H z*@}0eoue2$V9(mmzAGxH-LXD%n6ZMr}IGej?+Pu)=A&wVYo3%sjQ&xqZ$k zATJXRN%5%uZ5l)6J~@)HI<<{%@$-jk=d`jK*P54AxWjq;&%>dRtFhl^^*$iwa1k}4 znb&$lCl#*N7u-`}Tj3-YUlk9$1rs#UBD_eZAxO_sf+99L|vDM^iU$M z?^aH$W?&YNpE>`#*s8r%{zScS@F8H`m5$M)9u$Y=;nrTr<^vQ(hcH6 zlo!CR3H_92_Kj11+`tTV?N(zlJk#Pfqz_GXBr!~s_>7Xh{+?;I*EFz=Eyb)g<@!yL zq*iR^&CfQ4M02Fj77##EbPCVMpSO4g2fR%%bZ4A5^%UL)FAuJ!Z%X4+QGK*-OE{tA z@%EOj_r#>kCRsrdoj}+X<>iz7{7zs9mgA8AZalRA5V7BZcikn{{iFA+=hlyT+Etis zS8Us|_LYv~2RlE3K0AE-s!y^Dq?);p8IAXw6d_yeB8ZH0G7 zx<4K-@5=PvEh1Ew3|D6uH7u8V;>}2WjOQYtko8xd?hoPtCqOMsIsz2ynremCNX3O_ zpJH!Z0%h{p$a3A=gWM(L737OMhZnEI{ky|Im>ivnZCUsvGs5sG*Kg+aV2C_|@;V z3>-sZ>x2SaPYT*l6Bq-nmraUu)BFe+bNEzo7g@EYs*!65c!DC(<-8FTa*-xB6}Z6n zf)kv#oP+!GUBYuX`tO(av3Bf+on^@RI%bd^fZmzs>kdLQU3BzgKdydv*3Z@OM`EQQ z9+M4R3!z*6nwAy(jBu-&DYr`b!QzZB8DLn_>s?H9G9!G0Z|cJ4d%#~%xp682f%cc3 zo*440W|~qSwf4?nL<;LcrroEf{fR_MRl?_e4%|@!E?+Y5yOg-`S3pQ(p%Z*ii-4tH zxl7V#LA!(6S!Il*R%Ievn~t7$RwryH6Wc`(|iHCKfE0y5a;*)!%@EVe7{g*EC#wyvn5^C*hp3+EcM z(i&G*jY^-T<}3}ws;1W*#gP1`B8H3iB-3+t>$#+jAh@zcw2_Sl=$0x&^%L&!1I&E$ z!A2ayv0LALwpk<8Znaf3zv9d={M_IjVSdEyD|h-yLlX0V$*&Hz13X-O6g-3)hZ$cR z+a>CQOx#tV2I}%@Q~@X53BU*v5Egjl<v&%I#0M$$1}AKZ~!T9PslL&ccf^0K1RtpD*V z5Ls>y_~<{#F-g8X5mUZnbw?ZF^;p_p&ZeXIP1_r4**DuC-pR)p$aV%Bda)M5@tOa4 z(FgGi3KL;+rDFV9;1op8R0?;Fb`M|$+Q(es3Q`zyyC;IuZ-esa4*hy5{EMu~BFLT! zG~$=#lXGu5&8nJnCAQuUSF~msc>G3}FZ@QfJ}*4ac_64jZcLW!92$H_&*-r`DJ3Jf zIwlbt28b{^qfVLxCH(%}|5%&a{6eBJpo@U=k~0P?jS&~`{io}`Z_x402*^#12YG*K zHO&{>D;&ignaG5X&o*@l>93l;^3Bam+N}sg%|lu|Bh8XSQzs`F)YNC`%C^4D!GuD} zM4x^s0YL*Nx|2g6UKmhK=KZ$x{BxmVd8H5<{@k&uchsV)J~xnugITYi%SAoucS*cE z-=qWf2qa@&rxO1gsXiyIwd(;lthdH0eG72l=9hlaPZO+eJ#US6`%{|ZnKX{!{WOIc z&uPA1)`77+H`c(kLt3!si^qUxWePoGS>^_X8=F{#)Ydc|X#3~G^gl@=CLAI|bZ|12 zx!B_>NK4%`zREc|?$G-~e5+k$7SxNy9G-AWpDTIBlo*zFdmvWG-H%sr#J1`np1Sja zAuflp(zDMXpF!ut(Bqaw=vci~(@gNXRp=CD^YMx-5`Oy##@nQt8#@m*C+C*2tZppQ zba?g1b!I3Ky;hG;DFiDP*Ex4FSA3g5Nju+K!`B2ZjIBYBzytNzm3b%LnDEb7gSIRC zw>QhNtR~1*{*$q8-uQu0O(R#wsP9@qW~Wv@Wmc%Krh*rBlmNa|#{Kxi-&T~qB~aaS zm3FTAezqNOch*TtQsLdt%T7DW4R)8Sat_zAR!A&gve9*$9VO)&50kB(HE88gI5=gP zu5vgFt&UEiJXcUYyX5XveZVciSB`_ru|UwsZBKS2cmGSvGqxlK*`Tfz@5EZISzVkY zys-CWiU1bys)F?|HRIi<(|v#3i8=4yA$G>KS|aB9QzLlNA0yLs%gOA{5Ah$=ZM)y+ z!e(CoK)*S~L9_6`#eIuI>^-el02N%L*^lurm748GJY1O+CH8IQBx7;r7sETWh2IB* z014_nB6}9p2hs(Gs!2JkKdNM}_Ad*D8xy|;aWFnw)540n&mye9egrOUc>xokglEBH zBtzr|tY*kZj$2JP6kwf&ehNfCCq*#aj)Q5J%L%aL)gc4BIVQ+Qa&5Yqx`|dEOD)eU zSPX!7gR*skK8< zmTYMC_0;a`s3S^X$%R$Cntu+CY#O-jYn})A=fQTR3=-sqSU3Q9jYGjI*jvfeC8XkqjZD$p5EuZx}>xWKIn24 zwW|+ccM5V~2#7#P4*ku{`1=6+W z;j18Jg|>j?WAQ-fZ-OPl`b&pB|gBEf1?>`W0D}Y7&a-^$7~*fi%e+;vPD8}7+<8sxI?=34`Xmh3A^tu zbPN5M&~_4DWr)J>2%)6jfB!(fBj$38b7GY}>h=hRfO>3=%QsK%A&^AnEI~hCrCxEZ^4Oa=qXMWEn_Qxwm zwmt?ev8A(Fsvud>B{K6h`BIj0Mwo(K;?@NcM)d{u{0E! zm>Hp#Hn4IA+;6lBck|cD^|j1R)<=!PHss&(Twx; zm@(>iOG|In=n1j+LV2iI#3;3n=CFRiG50Xtq!wBhR9Twn>tl}9sD+a4zY#CsR2&svKb=L6-X)~M1nPCw+(P;KWl#JR1fP}0ur+_tnla`2}X zw03K7p8{uCZ$qL!)rSo-vO77tOzu1R&E$LP!h2(c!w?WgoHYeV84wcql$uL) z|2a_6mK*kz=^venUo0uhpN|f1-QA>K2GUx%@?me8@gIwh$#~!*=6ia6v63E^(5tqS zD>IgCDtCIKw8AU!HnT7jo@>b}_twd^Lq4}dNY|fHc1`8VtcbJm&kjdMHOryY&(nMA z*D+jKoMKI5Z5%S*E^!df{Nt#>+yF8v+nAtBtayqO0Smc5yAJAyASPBqX~6%=Ky@xp zFa+ERSp3A4@qX^;`XqY|zp-HiL^EDmtglw|He{OGD%vG~{<|(;e$DFhmM}Fw)H_a7 zSKqOD`u=XsZMe*IRpSGP*Iz2ENZe3466h(nfV{(xVy@TSqlki4`WK-NY#iNO%Slw@ zetwLU^T#M0lkE}FQbx+xl&F>TU_%&O!NlSccra?!2o*Ab2XMG~=9!cgG9Z=?%$l!r zc>H&@0xK8X7>;{}&RkppBff0Hqp6GNeDAT<+4Vha@)bSG2C{-Nnq9#+5_7mo&jF7Jxa+8Sbrf4HD}_*E z8hu&$PTESsdnWY}+7Ic!=j{BWxCjd|*_v=_aUB2$K_kqCtDO|5TCRL7edb~+7hTe2 z_N-JIEX@s|XtP2@l1R?4Ro?mVRdn-lZ?50ZRT2a`@%iiuI!^0KJk80x{LQ@=?A!xd zW3zh0Xpf^5S{PfQpN2mF)Ap}Q>^;8|US7Uy7L7FLRq-^GP)6xIk$nKLT7$=WgGfG8 ztuZsLvRcrmkSos#YUh0*e0*(UIO@5z@h=*5;=F#c$W>Z2!FH#_}Dr$)ER*0v3Cmp^-6Xg}L9(&$U=4DgN1 zKcU0Yx~yv{l1qR2+T_@6|I>CZ1}~WJV(Mn)O2x>cUj8e0i>5@aVqj>lI9PhYD8`9y zYm(-h2qy8i>r`!i+gVj^$ahpF0TCxe=bPB^7LQ_m62p@)d1lQB%2#&!MJuPTr!Z54 zFrOpFo;bdhzP-0V^}bbeF!MDcW$SFhzGR)`b*G2>%WsB9j-!aGCL*|00MCe8Qr_{8dG8?T`Cjx(pso-HQIx_#f^e_2f;Srk6bF39y;XlE5RNMtSH z`Q33i8_Mq1;G$y@&6G*qVnAo|6tVN$>UnMe*T^>BruR|ff}b z@T$eM^b)o`p@^Tj)fPMJl5XIQr>0;L^8lVlsgxt~cF`xVEsNQYHk?NeNoF5?GpXp0 zPnfS)UN}cZGg@UW>6T=%Ck|$hd9f4`e7ed)b0G+Lz+@ueAZD(t4XP#oA`~q*xtLk2g*}xrVSWy;LJr`<*)&LX5^Zl)O=H64wa@EQT)d@* z9}c#&SD-Ozy9_!y4uZoJ^P1s>U2ZClqAo(M;y))b%Rt{%>%y%mn?{|Ll)}HvrW0Ns-zFb=EsToa~w4|srvMza+=5x_8@#xw8&oT;Gc_0XbFQ$B*!UQz{aYOcJ z;t1Qj743Z?*|9 zZvfF{dOmIOuX5>x(I-;!@B8?E7jktm)1Zbk6$Fmb}tYfv*KS!$k?~&R7KtH@#Acv>& zCY^9KMbfY(z35$|471)vv20v7ve98#$zB1-9yrQkxqQbxkY9;NDoakXn zJ>$oFK}Zc;40jz@;7z!SYh5>cB%JtnkES5q+up<7(%};&Y7W>{-LyOZg`gGvt0e!= zhl4cBy#Q}2Hd?Nqd{eML3#IXZ6g8%O}(1h2+gU|K72=bAJ|Iy|GWxp zl+jB%!`BS4KOE(M_D}Wd=B(Y^(eH^Z{Km1Qnqu=buQkrYO*h-q!6-GCrJpfu%25vwZYqAiO9Z$4z{fJ&4Kl|@6q{BY z(vBe)7W~}5{QZHL%TiKw^wUz~Yw6dgM>}B1BE^F0uYaBub3sHc9@s(QYhZr^KkEV$ zrjYP~GWeN;Ao?bL_WVB`h`IF6bt5W9+f9u(3T~8SvWq0Vu&g{_px8p_#Urh z`umCPAP>;E;T)taZdMKW^*N6jSjP(vNVt|p3-*gz{FG0+HgOwN?9qI-rOQ|U=i^+X zl}GnlVP*zf_tgHb{n>a`RXh2!k(K(B6r9A!cz}ReO2Gb)K#FDokIe}I2TXNxdpRXe-d-*B z)XSIf)trl-``xB5TPhrx@UZ(m;Ig)GP^>Z|JWoAE$acAeC5TcE7_OcwQG#gRpLZEt zw~mV)7b`IKZq3I=*qKn_S;`3EVe=CUn)h)J4}8!6r|m@K;dA&Oy^{o(qf;O3F4y#B zpMGiyIj*s`%l5bxC=W{NG{t2wnN~pt#H=BcEOmv|vwE$8n?=fH3l0Rxw54Xg2F06Y z?6Xya-EP{+fE)aCkCQ|CX@#-p?5O2D&pZf7rTur}2RjcR5BJoGG+x);rm_2xiJPLGy=Zoha_ACkMN)4WPqH91^m?l zgdA%YAc2JI?{lkc|G9PN*S(C^d;d18AVZ3~r^G^~O{Dgph7SMjF&Nhe&;QcLJv__u zf1hCb&#f0KgmM4BYYZa2zZ9#LpvKpbH|;j8al~*>N!X$b@tD@c?M1^u|Fa(MvZYtl zZBCT`nWTSa;=oYG9O6(tsASoIP2eVGaMMnPn78!`mSM4prhL}v?ysA-Kg*Lpj^)(K zfLkr`TcYD!rk%S-tFISmQCxM?E^3H2bA_{=rkxh-+|AWoPhHDViOZBjUH+vq1dQC3 zn|y!J*W)vLka6BCar!6lYZ+z82NJGaL}7;aw=|p%VKH`Pyx^A8g4S@Jmkr%CRx(1Rg0a6E(Obj4-j z&Auu6<6S-=o?Va(*I6ITPp4mW5wZW1ExPwxtZFPr{L^vcs>|7(E9e zLo-eEK%ImI3ID6?aNaDZDUpNeju4pt#S}I>l<~Y|52v^rC3U6vXn`Ic9pWUmc(!PX zO5}#g&bMx+t3jqwDFLPV-TfZ~6mhxHQjNw=t+&}QMr&IgN8_fZEx6$(fc?*UuzINT zQM;g*P&ws?&I%1UL-~yXXF$*v(UPy5A8U!u2Q}P#AqsftcRD}nvzKh00rJKFr1`!u z-QycW^P*1Xxo*SRa;kNPFE54krPEojwUkcTqDxBu!4bc{)SmzX^v%i5l|Pm`^HibX zXw1kugEUYs-KpwWpnkh?V||Xy;eCwagU9}-q5k^Tle1w9baFsH;8)KX_i_3ZkcgPs zk7p07)^Q8D2l+so54qdcII`e>Rd)00dUN3V`{l{a^;{46vrTR5{H9(o{+)rO`>*x0 zKgpre2F+*w>T`iB`C~=a>`f<9UIpQuz9hX zDQrzD{>onC-IH~y!1mViyIeT4sE2z+2mY_kmpuJXJbTVJ%H}+mX9`qIuh#X7=~>t% zz!74Ld)-WBYI3Cw%PBZ(iKqXvX4ZQn-v4UczhvRHr$>PEaKf(BF91s~6Q#BXZe_3} zssn=k`X066G(>_&F!27WnCBxEvrOqgT;1X5h{YQ;R;uFvh~$nczny9zN<6}IdT zXI{Hq-SE~<I!eeDQt5OP7aX`2-W-<2ELMRC&fd&aF5Tol-=87*xJbv1{~NY z6PeZ?P%R|W^_;X!bXm(!9BXa(MR8Ux)cB0_jf+A9Wr^2KqoZc<3+IDJ+Kxk|_Hddb zzOt8|$Z!)*M(R%--Hm7ECz0SoN zB%dkYlHRHweg}V^xKd!65yZQNiL5OmdlxN_HLYJaWi&418)?UR4c}PS8m^db7X5Xj zv7@hzO6;4qYO64XF0=0ACU)tERfS8Vy-25gBVWn$)!Z`Gh{Gp>^ZIl}nUei^IY{EH(Z z#^!jQdJdp2dr%`tLF1#flHNGd+}9JOoK}ySx^_2rFS)01EAyrZyL|n3{AF@Lwpwg# zQntF(mV3@+QHFXiv6`yE$hzPeBZqI)aF+6?MUzM9Gf)g!KgcyBUv@HO=&oaf^8pa!pT zUblh!viAu*BV0W5YSY>}zryEx%lW$dufVIwyca&3ci4uqQB<%Kzk$eFjdI(8N{{9) zI=d04mi_p$5iF(j^hFH3cWs> z(`s{FL8a!-`aR!S=fz&&HfMcP7Za$K%phpPxS4qz>a&IU#r1v2Zc`ub@w^x9B8#hXg z?n7;N+eVyE$JGPLKYyDwQi9Ou<+?P}rna_mq}so28HAtfY}f^qrpi?LC4AsuZCc~iQgHv z_- zh%ZyldIR3CC@9REFV9#&reH)~P@KbE4oD1WBNiUSN zuGD(us&DR6I%FKi95`p)4j&Q7%D?knD5g6Sa-Z z>$S|+Fcw?k5J9E$H7$R`Qk=r2NT1w2f#J+WF^gj_Mu*Hiu% zFn0ndJ~3MoUhh;SXV4reLs$Kb0L1apbCu|d+TD?c3X%B&xIR$XPN$SQ+6Op-{sei$ zlPd`tw;@K)$7Wu>?MrmSMQcMf!{R@W%bRN)|uwYrn%>rcvwu zB$KH`Py9mbQP;*k;i-|vBObcqds1;g3;_M%c|F5W`ni$23sG+*mzMy50t6XaF8Sm=JXB11BNr`V=LiR*%;PTsGnnSOic6Ud#J z7^@ir6rkznt?0N{BS;z5uC~G{efI17hv36|_((6eM?)*(PfBSadfHyLkMFM7Q(DUW z!D3+y1yB2jmSBN9eCXJsKetPB7r*@y^(>K%@6VSFFnhc4C=C`m$-rRR9?;oiROnE? zL}&TkzTssJC}c8w8+aGmKT{77ttW5$^MfGU!hWy1{d+LEa^X1h%T+|0i1wg4P`BF0 zOJFT8^@2OF^P07PZ5m+HINnp&FXywG!5JJyTrt}1Lb5)hl-5YfY7tu3OYQztzWiE-pJ=F15GXk{)1p(4fL+z|+l!b27HhSF zRSW&#!seFt-1f6%&1?K2ZkfOCxvK%zOz5yCazFK5ezDtO)K@{{-%L^TJ8s?Yx}Fe{ zoIUcYc7EbT$$uP4W|R`imKyLzy~r4$7|9-&`zzVegiG+q@%@sdP49F2)e^A7=X&ej zXCqCY8Gb8>LD{=*W&~b7*ta`Q7G=>|pE_-hkMSoB+_!8?_`?q1yDojD$#gN%ZAHot z;aJ(qfsz=bwL}SN7C!K|c(9Z?Wu7$hUv=ZQ3UPARW{+vYuu>6{k-AGCs}UpWmg=XA z{uZa(M;OC{*DMKM{a(p#iE?ly;VJtn1N`UI5r`Ui9~VKbd>vp^@Pmff?lJ3UG(~Gj zcewSWK)qG$S8n&Q1)BjclJ*bQsV412!yJ;&&e>`y@#-bp+xuh)X&4?peQn+98cvcHO?xls-n?qGk6VzgTLyL8 z!NPvd0c`w8YvqwW1Ibg2*apuON9F#VbWU0M?yTt!jpVV@5qTp+Ia%5a@|P=x_6eee<{ zE`^_v*etP1LP8_%F#F(l>l3>*n{O?6LGHQx1xQk(b)@8bs~<%N`)K)3da;e{MO@V1 zeC@!5%tw!-t-dX_%4mr-L6v`9^`eLj*V9Bk?LSfg{jgaSH-NjC((eL`s=?epUG0p- zO|}f)@0UW&L*$4{dB~m{>QZh`4w0xkUu_Ro9 zmi2@*IRw#w#YbJA{fy@d!S9Gn^<-?jiYwwJ@AFXoVXzBWH`Aq`0w(hRJSuJzDG+#U zIc8|=$5y^-6xn?!??C#=IZ^d4wVFKKM;JKUbqnxn_U??eigDMSAfVE=c1WsFN*;fP zP>an~qfmcI0IM|md4n(uQUAdoNR&X-Ca>V4(H{5kvgPl)xhcD?Ho{|ZEl}9~Sgv!J zg|G!xk5uCxBq=`L8Q&sh&|W>Se>AW{5hk{0WvQMD5R~$my^w9-reBazQ`VE=*F1Vg zpp=q7qyN=Z5?BUmqN4?s0XM4M=r>X?1vK?ayWFnYAZP3pT?<`yGvT9r3bz)GZAG@X z#<&p`VUFnENh24DiQWe?F*}Y8)b}GpBgstWx-z=pZ4mhA2E$f!Ss&FC#FU{JXvbD> z#yi&EmyrK=lD44)s_UxF>gLc6Otz&u_0q#6TQSW9FWBS{TtK$S1dK~<_y#Kvv{)N~ z-UXru>W5B;>Z?3a%pMyhhvb1;pAfy57@rjaC@PY}q zGx|2N^khDKd=ua;b|ACX+4DxV>q)tf&FvB=kD-7~~gN?p(~@Vc#+YJAiG;^5CpOMJxOEPC0@wNE)a& zh`=!bt-LZz7+0GY&N^$X2CuJp1m}8I3au1lfXbQ_L&Q27V4?F$6 zMG1IKVkZ9fV_?62;Y>Q&VD^F3;ID6Nf)WrrdE*p*juN;ds@+Uxl1o14uG=mVP3g*D z4uEdI=Ri?8yQ=VyT480ZhoDgNPm~M0$5*CLMNtY(quUtf`{+vEh@7}@uru4O`quiF z#t)hIa8u8K><38djaPsIzZExNI<+QEDv{lt+4^t8?GQyKSM&ut{O z_@&>cuPkxS>U)oB?wajf>|;>NNY-m3kp^=Bvy^X&A6lVffj)s)&BkdeLO@m!E}@+}%AHq=uP*<^v+O zjF=sff0Uf6#Tmgb*lt<0R}s!lt&7%dS}&M1SO2c@wRpBKjGiMy-CH#_f8+{H*(FUV zrHo>i?ONb?5T6+?VbN9^z#5IQl~3ho6ykf8;Gk{|00Z8bjUNznW&7!Ab=+Gt@(8We zp>00mxLMZ#!J+xBFb)gTf#O{5ESupi3=~f>RT%VSpo5N87j@2h?Im4K7MJPq>j8CC zg=-l}VPCm#T-}OmkvFM1)coGWf!#v#)w5M$QEj}=K=Pbhucq&I_dL(`qB^<51$Cl% zlOCE#AfhOENuFMvm_e>O?>&Dp)6+wz0wxC2f&Hs^`>9?6ygoP^ix; z->`Fsg=`_vfY)7XMjp37cqo02grU~=^fehTOg)sLXffnQk3->hdOA|= z*$y@8S20!-^9@;yO7M43q%$E!WW}b0>H9q{>6)B zq={8^NV_vmZviZRB6!6Mj(ZI)xeR;lu=ClE%b!SO#{kN*z^cw46ltcaEN8% zxMhk|ZG3goK`xhkoR{X! zc}6$AreXD1YfGK3$pL*sPfV3OYJ}P!EYNsM)oisA&$1)oTkUU=Kf4i!xA(&db()1aoN;or$haOt4e6q`BMhB8WW;SZ4$k)@=@gfOoGe zqdA^Mrmryw*!Wmw;Xgl+*lp5OAuc3XW-K76$QV;ICMM5}dgQmN()=@cQE`f#fvP?B z;#(rgt9Zk8MleAr=yp1r{Hs%_G4%U1-q$U0vpqm?e;f&$;~Hdf0Y+fWaIZei`>Rhl zT1O;u`=D(|j8eyqRd-HUbd^(c)t-zJ*avk&_w>vT(P7&sLKD*yt29T{5(07_rr^zR zOSlcf*LzKrAMX@Q&MOx4#Fvn_Fo_ce-f?GRxDqEot*N-Fh#Nlf1h*wFFUKrmwd`&1 z@5ts}>^l+=thgDj%L2tUKBllkW@L3X^xbI)0hXoxWUR(>`*RMam;~9R54i>;N7)v~ zFw|s5SK1veaWTuq+c@`P5_ot#H2uK}aRgke~1E#d1*Xxw>zt-*0#O)om^)gx2i!{P47c~>JDEaqL2M^A*#S;6NBz=BC4j7)TM{r6; zJK%qtl73!y4d=qk=Y0x;2!M)*-tAjzqU}9^&wf(m{?LzM(L_S7Egx0;wM6oUwuwHM z%ImrJB^z*e@vde5br{~hy|KmR;DUC62?dP>+hP*O@7)B@yN8cwN*8$*er!Z}F4I`p z9)0hh$_TkK>nPU4*OrE5a_|7{o~Rv79LXfp;(w}mL@y6Sf6a6nq!gk5A*$!gwK6Hm zxiz`?L9&TmVyLgQ+)cBQwN%iG)=8IWTim+FygKcb3j zib}*&=WP8BSI|$#ZmZvBKQ_IOo@i(ebs zUGD?=Z5~=(T87LXVH{5WB-?E&twN|q&R<+rkP5_-cO}fUl$k%YnSPYn+!KyS-%Pbm z6XV4HLgCKp#>4D%YobTPU< z$x2#UP?ZDn$5^)gp7;iH%Et2;_k$+rr^3(+a#b@gmnK`|lLpNRf|cK9yX za>`Lek8=<}yxUtkc7zlZsQ$@_B2umq2ckk+R*S<_K8%tLZcf<<2as)8YEd>kM_sVn&{ zKOe=ivmlhOVtx4$(Ln^h3^1yX5mL&T(?=wOoNMFxzx4a}Hzq-b=X)F~kg?En!)PfJ z=~Dj$s0CRFYsH6FJKGXc;;VG|^D8@~MVf6|9!j`C=z4giX?CJVKZpgVHFx5Yo#K-D z1M?||7Nn@<&}t1&W4_V83H8L!9hE$P8{&~F#41ytnAJ(08!1Slv99D7Mw}3mG!nBc zc3(S=4e!%n|Kh}Ho#*sd%|=|rjTff49v6mX^luvQ>dVWnDBG`vmseC@XzT++pI24W z7gIWhV3>$z@#KJ~RK*gJsj1yWEUhok z>I`L^XX{^Q#06g(k(V;47GKuk0-d8BL(9U*$2zs)k$#b&NK>rrRijoK#|JoeqUU#u z;r5Y)0HcPGFkYwr*wK2sPpfES4b%KP?jhz#WF-%U4h*g1e;K~oL$RVnitvSIzS z@|Kbn9d=J!qQi;=N!iQ=`~q#WQq9u&^Yjg+jM#YV$pZTX5iz4vdR2dhXJ{gb0L44V zf4VDBuKbC%ATe6@=ccx5Gnkwqn>Id5->^B0hhqO_-s-VnxjTorAUuN_ud}A@r3cYH z=pi)Ef!g?xT05_%fiwlX=I2h*-xDiTTggsx#BDSVR5=n}2yqG%YJ-#yIlIM3xfcx& z8gPLbYUY}>X-1{TUlNFWc`fG$ux=3&r59cbhIkK_VzN{ks1@sJ=>dmBrGi;s$lZsU zq*ZZIvriU~YgcNJMX<}83@nIQSek#UgirL*iX8_tK!Asj6})z;tn72bxq=2|!?^xE zt~(?Ku)OKgUI>&@l+L9{ipgv2$T}i8zjMVqD4*G$Rrx-yF4UQtAhmw(s8Wc^^5t{= zb1fzFh(vQ02`XBPrVHCiKgjXnB)~9(Up~^GIi2G(CXbe2A}HETA8P;p&u0&O;tv7! z7T;xlLo$A^2%@olL$?>T7g?`b-Zv)9PZQFv_}r!$hj4_`m-H^Zn(m72;_GVYV!49w zS!7|5vCiOT4)r{>IoOa!^3xA8UJEgvvyu`%hc`%H4Zd&k7MkvZU1_*w4uMu|Dl&Xk zrdFEa54;2wb8%ZfY93m=vi$hMKrNa-Qs5~g6?wL73f9QrIXIfmHeM@~U$Rx!#A6Zn z7zBavGy>V_0lXNM`vN$PsnR9@n2+p_O9h1!q!>36cx(1@_#f{)cDGyeDGPW5_|97n zP6-&2D2Vqg;|x9Vp>7xn_Cl<|kw5FI?aGj;HL7ya0;7J0*YMbhGKF&nw8}*_=Vy=A zWXeMRuN8UXuS*pmdtM=bn;0>=i1FM5-Egzbf1|a~o2M_U+a0AhQV?C>m)cs6ug_(y zX6QMw((`9Q8ce+Hp#BJx*5W&L_?*GT_FM)pa2V4(HtAzf9jPO0D`2+!<-jGo@`*9J z-1V4k&9Oz5{bb?zH~k~8$=cR{3jmKB3DkZ}RRC!nI!VMDp2(P+VNHVDTB~aJ3KIn= z0AOCQ3s@wcM+)rp{HbE!98}JgH7lUCSDQm>HE5~lPk#3M)PNke*Bmz6Wed9>kMk9D0+asCeEwV}`CxXc}7iyu(sS!Mg7UX9^eRio5Pu#6Df$CRO1ivSK%-U-F2^E%mZ!RGahTEhWEr_;K z=EunNOiQ9Y()ndYc!)UW+r)fVHzErWcMnavQ~_t%3dEEj)zuruPCG&g5fu*sa&S9k zK_J%1pUZer#Ujk=Jze525!rCB>^b)msbMcUrtg_sDl3 z2}lijui?V4(rF=K{kX0L`Rp~nCPYdw#B8_L3t@yf!t6g-w8EO(_x(vq50JBG`9q@S z?IW3pDDh(Fl71tv#~drXC}#m%bXu&g6@iL8+@lwyBX}Nr&I~-8(*LR#w;t*uvdkY9 z>$ynJ$j_0mRM&|Ww{UUD?X+x2*^etIRe8hH6R4VO2b*!7o#}9NP=(id>-A&O_}!^v z=?LXe#oc3L%r~p}I8G;o)*_ze%9eDK$3+YexcqB*m}ir##mU4J>T$zc9GccYrk zA;1g^%S1Xda@lOfiI8Wj`KpGVuXN5jOkq;;W!m`Xzo)w$e3P1df%z8Rw=F6dRCg~{ zyNokKC~cUtM)E}?wf;d0?f?*ZiBtzR_TAbHZd84m&VOAL>dRt?w@wmH4S*4qmm_~L zKtGMZ!8Jrr$G#BHuj)4=>7b0_KORJrA083aPZNK|K$GIE(?3RqpnJ7p;70_+Z7Nd+ zP-5Q5(vur2qr5(~pFMp~#S^W1PugX=ygL)1;0s6PukRa<#a7tIk8TZ;rZ#I6^>0Wt z2Zc+OsK=EU5HjRe9#tL<#XFv?#X$$;iNz%YSx+K*?k01_B!5_b%CfUx(rz*R3@mv) zH^fQsDE)chD)Uv_@Sxjm8UoQkxs|x+_mnw2s{8bd`OmmsSc%_RaVrqFs2}K!kmy0- zGUk|+YLLC#R6dGrh~5XcRxT~35*QD9;mm|=eMBR-t>l&^^@mwT=t2- z>^6;3v|mTPxyKe-jPFJwzp=}Rc1utH++=($^f0{HMrXlQ*Wyzx}2QjOf6uiG{=#4M>|fT0eXZy#d%BCd5nXMLzDL7GTO z1XBk)MVo)~ijmh4I|c8|x|PS7NU5%7>HTQ8nmznWRHbu&O%=E2UY$f!A-$%2OIl)S z>CfLzvtpKIeKyZ#_(2`HWGb<4YN$Qs9rvo-;Ov$><*Apj<}>O70V-uXrYp1#G>!VT z-l=>DNMdZ<^P1GuCBA9qx$-)zNJs`e0wuXT~$yC$qOwWSDa(&l^4VkZ*CE z10#jiCg?`PepPWfRi!Nn`vBuRafLd{7EZ^W+l+Mp03wV8quX~o?nb}(Md?8njGDjQ zdS4efjSqi_WE?rImA=d0(QF0Dt2oJD2!2jwvHLtX@SFYX!mTS7G6nXtNA&>qC$gv0 zud%^NX2)M6-cy4~7-+1}Cba(an+I>0Km80uHI3VT*LAd13$n#3^_}>j`m32FI7psb z8FW~##Z`+`;EQvtS^jb5b=yt&(>gdM>?Vawh@);TH0ov)J#&gm4AxW@yVu>(_o~XL z+2xT?_<;H+&BA%{b#d7cuI&D}#N&4y4Rty(OgVQ47`H|dWX?+0^x|TI;+Uje9?&oq z2pMMD*cal~K9-Cz?N$#+mbZOX2<0KVV^YmtC1l0wV`92JAzn_npy3}{l9zIKVi?)EtRS)W=Hr};Evv1bV3Ho7H~{~48_5n` z_0?zixLC-Ojt36{CsFeE_3svspDNyMZxG{kI;qcy;octai8v^AJ&fpv+j=!S?Ru~I zHXr!8Iu=z6dEC}{zd`+ z3-gHsZ}tBNIsMNquD@GW_3ExpXsl#t}1m{n1D)7XMO)1A~`%&pxF! zw%lA_*wKY9;4ms~6b{%!-vuKf2Z?9ISob;KlTi<+o#vA<5B`xR=3f8*VqSZ2Xb@nB z9)_&gMBQ9taoh&|i;((b&p}1n_>x-8w};LhRM_2i3h>2Nov9d(i9(<5Em}jLiks6g zx{tiD95?ag#gU_Dyn(}WfGOU(>B=O(bVq@2GXz^!BHfKl{ijaw=Au$Dd66$-?U2) zZ`X)A!==RGZ+YzZs{U^~68=6+URnndcMqihTNs@A4|JI&Lr@By zB%r5pyj)cfDU{MG6O5yrp1d)3?R)yF9wO-I;W=IJd^AU-=Q?jI(#G6X--S5u6PYu% z&SEikJhBSCdKULVp61Ve*S${Kf#<^`Uv=!fdBomrZ!XllZ{Jy1D+u3{4Qg2WqPEWC zcruNnTVEY0W>H4l(GS_w)-_24*kq?+VB3i(91LGvP>9v?GxYA5xt|~Oi{u_Bfh`wR zSO9CEgkuWTsG?Y=QyVE3hqV^%3E?TuRM%s-aEM~2rSbDJCr01HLBquTX~`YaGh0hm zt!6bQo>ZsI##kc%gIhLdltdH+dl9+t0nw4z-M;U4<-HB3$-2rRqptF&+jh=e^7Guv z=6fka%OjD8cXT9sQZM&)KSQ_5n+WB+5cb&b42@7@dERuY(o@4L_e9;Wo8u{1*&bJ& z<7_oCl&~}rHv15rzp;h&TggYo>x^qZQ1Y>Ite+1tfYNRs^wtVbm#NdYIYFNtJ-i!1 ztHW&vAAB93i}X6q@08><9!Ez&j9o`x>5Z0qM|wNgxSW(Z<-hVh^|vf5xuciPt+Und zQtfyyNxWauf~~0G?A4TsaXj&QU?`>*>k=#N{>XoS5$PG|ktOLi6=rP$3ODjO?yapK zi5Jdo_U<=Iwb|0ejOO~&4>4aKBgI$J-8=8=#o3iL*Cv$gGBo3VIss5ACN-at9sCa@ z9)<_|*FWeAY<Ab+hMma?bE()59YzPPN34nct zlxzt81CLlYP;C|{+Cl5QSv{Dx|01hTUt=ms#~U(aM;5G% z8wwf*1<9i&k0-nt%7ACFo*@&h#7xHR@q8f}`(~GWbU0wycfA3}2Yahns9->^5+J{r z{uy$&;x|U1Pd3XjZCqGK76^MMvp_y8SEOU!5xpAOXK}kqQsVy3`G(? zQ9be=X1`kB!5P!`lIWsxHxA#+}#GT{&)-ht!BMF4S8`^D2Y=XJVzc)q>tloBfuK)JU1j!NVq{j2d|d zb&yI`zGa*CgZ*zjdCK%bhwrL*n={;5Bg9|wt?M(`wlBPl%6PG+M=>Mm8zxk0yJgUr zVkUq?fu6m{*fMaZR38bfl-w+DerEw`6)21jKm@z z-?bfyx|~r+IF340uRc_*68`Gz1Fe?bA)ohImUxE#b)+G)H+?p>gCuOeF!VCN{&zdO z!(S8?ARxM26Yz#o%M1d6`Pbq3fHC;;q1ht{f-W^ZGczxUAy6AZKqQs>Wp&UAb&;Yn ztUw;3Q1;>nvxTU@1W*j|_@pT#=I2jVW(XQ6WTQl9{&BD?z&0mr7nr_nc?ju99pses zi?xEkBI@_FMuOx@S>jG3nOPhh#`N_Gxs){TCcb#WqeM%PPBPra<^ka_GH`pr*XBvq zu9w8ighp$4#sW2vp|4uEDWW?_Cg(7Dm+49LU$DW1Y9hUmq2P~A|g ziX)>OIv8)Rk1h9Aa-%X7IMP?N6>3*qRa!68@uCnNWX`8m(h{FuTQHliHJcVI?EE;@ zqonq+FJU5wm3!wsRy;P3qFR-Sn41TT9~7q1di8xeKVTT%)}M0<YlQ6xePWO~piB6m(`o^Gu}TV#NPEWkqm6;KX8OY2h4%=JO31 zt9gBA{#(;WCNY!G)X&taMB@#pk#P+!x}58B>A2Wv<*LM_#v0O#`kyVI=mRb*)s3Xl z2K)puOW*@}iMFnv5=;RQL>3=n-f}d8_5k!_1x-=VV{l<@aH;Mle@wi5xU*uH~5DuuiS z%?{;Vo|7v5g_^fxY3IX>Qxi%9+Uj*-7&?M_llEPE^9W^3oVh$B>HR*n{0ITp==1xY z)P2kkE!i#;V5|W`Y7ySC2^;}7;I_{X+_UVLzG9W1jTFQ;y?5_S2-$zVjihaKFg>4{ z!pPH(QxZ4ke7sZ(J@k?aQr&&G)p~|Id6&#+aGb;;4=425+TIuO+3$t%6yf__pJ$K# z0%}Wnng-Hu#y#T7jzYk`cj!Nm!KKCzv}5rtqoLLcq1Vood02P z%xW3?%N>nAK%XYul+?{Oj^*c5^c{SdFXS=u9wiPOgrR5W5SCTzLu-CH(JpT~zD<=n z-8$nWY{*`94wXLT7)jMf#;YvwjQ93o`ta*zl8^s!S$xT-PoFuf?++X>Hk!b5dvJC}D^A;L=KaB2+c)v=)zrp+zg|I@TNd}n znRCYMhSpg10QtZ`Cpjh*37nAQtTg#l{oCD&Nq)gWf&=YOC()3xJrmT?VE&A9tRHG+rm>c;$Ya7??6I5f*4J%mqbgXbisxU{OXsgoIh7$~ zBl${ej_dVj=#6y}KckVso#-SEQ%uAa6EJ`m2GCxK|KO8G-BP)&=u2ILn@N^7$UP%Q zU?f_0c4pi`1e0;~cqC?HbSI633!xWMS-Dp5YU&{beP)KYl*RI&5zXGi<+xfN_frp)JZOm2x-jkb~ku5SK`zetuB} zQ3b_mP=|N!7&u4P?t0^Ys$G$&s7mJ~+J6&6gzC{cPu|QDZ3!IgG+XQRMTjWL3j)3RNpz+WpRH(8I$`tt2;jqhDvCU#^BK;$ z{Q)m_5=aIK;kNa6h(~AVtvAeqAwY|LmHLXeIUpG z15PjDxnS|L!r`A93?pheP5IGLf6ycmrgMs(n5Ea?dV_ot$U!I+IJwiO%>m^C zpK!CKIy_;5>-GcWluD7LQE)q%Q)Bf>0+YH5CR67#zx!ZXokHQ!mP_r?j=zvHx*{jsK$D18`_#} zJ|T8i3Eeen>0}xB46|Lk!!=a21-Am856%5{Bqi=U<$P}&v2d7rsOnGMI}#|$&}O@L zydZUvTI4!@M@?c~{USygJ8v_P+Qw7CU=)(i3~~ab-qu6S?x5evkt`JP~9-H(i$20eB}u3OdC=(<%r-(4NHe_-QULf= z-56igO}vRnQR?DYR6O6@W4%fcRxuUi3+~f*i53zCo0_nMwz8p89UE<*x?zKzANhsp zVH(fu=I;#qCUBA}w}3_g5Y{j^abWCKN3K;p+FvjMn7y6{3TU?My=CP@YTD9~&y&K; z+&pux?Xh5e_}Ek_!#j?zM-J%U0qEi)v1l84u%toH`jDh5o;z@oBe%pjo{7MK5i|sN z-F2?5!pYL+i_1MYYY==;7VF8peD`d9L{E1~0~1fm5z zz{x9IaUG_p`gxUI$CjzT(E=-Uz|IcVtde`qdPjd5+ra)=7*FPG|MO}K?MVFLS#x|9 zq|uqn!m`Y__VAq!Z}ai1mk%;jQFSZozBZZb`l+L(aj|YP7l(BM)ruEB#@yJO{2;EX=cA_@6U`5b)?dtwH!JGb2OSv8w}sbPw)DgXwWr^&NVAFRPT1OUwUZm)U<6}FT>8<${;~lKa_}Zu{t(l{%4ku#cXpy@ce3R z;_NX$O^L6K-q3F}!?lC^46l*-ou;d;x$U`CTGS<}atf%ZBY632Fv7=Z@=4(K(*;|H zlKhhR3+=OG&mPl64_}e3nfDQeGi(S)Wa%1N8H+!_Bcx%&@Ju*}J>&J*Dy}{T{XMnT z&vGUex?-r$>reQ5S#??5a^r+=;hkk^RO41dFx#|Wk#dH#hVDl5Eb3}#MkDYBW*bZ4 zUsq{!w%xUpmP;RcvGn5HXTY=Fb9Ro`f5v4rL&A=*fgkm9ANfuG7;WD{G7y9 zO;85pbUmkzw1o5xzwwjv#^!>)BY|F-`f@|}?<-MDK)e#34kXCtOo!v4)3^k{+GWU0 zuZG?MDE)pbedNh&X;>=6|KG~S@5pa|4p6z|0d1(|7p(j z|6OAiS@`H4Fv>Vu5Bh6jq2v)(OoD4A&Yi?O@4qYa38=KY5Fnkum4N$yE18Z?4-2JD zG{vxS-rFCD8M%xcYF;&5Y&UJpnQwa?4l4KjEmz~iRagK07Xrzskh+w|It6i8$5Um0 zGbffqd8&f`xQu&@{C}1D1DXO{X5lOGnU_nPqq`C()2@Uttgy;W3-CG7k)wTVj64Eh%2ndoQARQ9YA>fS&h!WBu z-90o&wp4<05=i~YCKcAJEJ$tXc)^+{rYSoMI zfB>3A$bx&;?HV=e*(Vpto+ z3cTc*hb#Gz%iMgt+!|H!!+{fWYu(n7r{=f_YM^R7Xe%c0iOGb@>{ak11p`3X0T8PE zi+hKu%J4t`0idf+MOynumc!w*0Egq1K0oY5LV&gZ(O@P*%^&^JJoff5J3wJyd)>{O zMRsx)>Gz672p|gG4u^{TA73@{-SR#oG&+zQ3phUoru-qFpIw5zT$#Y*y?h94cnh~@ z7(6GOQ7T494<##s2|PJB)8BhOWkhbXBqsaa9Pp$#SFaS-T4bEs7go(il`g)G9=1ir z?#l&R_J{yH+uNbw^YE>B3AFO*q)YBgHL2?NMt71jQ4iSCotn8wDbCO4MH)E(E^d60 z=rI${V7NUk!2-|bD(e!sy{hK7thsx~Ivft6?IW)F0NQp;GNV#?4E)gH*TPnk!9nW+ z;pDEJiERD%*j_&po^Wa@JzCBu<#_f@B;h`_(ee0*&Dphe#~F}S(2Qy(kc~C`;sH;nNVIrS&_@H1f}7s z*G2)SySC}e^NwI2?L3~^Zz!FM6CW1#ZMsaAm>qY=W|%x9PcygSy`=B)k7*u}2`72U z+_=OJlkn?W+w9Y5X#HyU<{OqfqYfa)ISR5G>Y9X7+USp4RK`jIApCO!>KGth9}NW* z=+_huRJcDs@_S!HG&BriH=_R{I;e#)Lf=$^<*rR;?xDlnwE1+DUw?npEdFTUp>|D+ z*g#RB>FFUVxv2f4S<+*zyt18m=`%QS%Nc{hD^-z6w_z#DW|liJN-k$z0CDG2|2%)@9Y9E=_VGF>W zq)EI5l4=?V_(8yd;TZ6&+t!8L!traYi;_1?+Lbz9)ogj8{WeatWUHMvnH8b)7V%o* z^UaF9o_|GkFw8ha71|5o&E zNo*$6*5rnNr7y7c7MS0N*$6m4{!H>&8kzP>SI;T_&dY$US|cxO*EGA*d)>jupT~eF zI@b;WuBd#YQya)6`w=$pZ9fLOdHa`erc-}UUNZS7Lrgt)Rz9H%J?ry_cQ4S%{li}H zo0L`iY(8L(1gz*yfAo63o?p~ZGnH*G1O*Y?D%AJgYJ1Fnh)!r zf0}%G&c*|~PF>#`Rrp*Mn=I^|9MRy0--b^S8G%0XxcPRnq4!dkkqV_Abs7i{Sm-i3 zqj=lw+AArtUG$I##8#BfMse;@l5iObtn_B*n6NwylVnMU_c1C*Xif~Y{$#Tg`Zei@ zND5?^RrlU(!nK8?{rAQ!wVS@UaNul1bVku-vy@`FO~x7_>LYC8tvwfjpt&hx5za@_4o|cdi1B zc?G6tp{j0a`@|+eU$SB+z#4h1{7{X!k?ekZEUmVr*+jrM*5ob;y^nly6EKnf+?7+= zz~@x%G%k_h-}kmTdl@PLC^oX`ufYDvL`i|w&-!G<$u=T>_)8bzFS<)Y> zjmhGH>>t*;zMvS?uz~B$Vt;iCXBy$8CFM*2S425*>#fa4{^$xz!yK= z+X-|+y<3qT`1vNA$9t~APU$EyuMYiise)LguvNv1nf(Ll?$A#!xho|ncXcF$5+hG4 zB(`BCxFm1#ys~!yrx0q~N}*7tkRNtb5l)B^zIZoeFs{}o4lh_{K&>1AS?mGyH<$H& z9t*4b&amE<*#d3l%-i&GXAo{NGK{DG|J*k)XD?&L1%9#3As&C|l}|I=Y$+U^l?I$&xBNLF~g$y;Ar&Ksgx0;ZUOp zmq0!>Xxd=hl!jdX)l8RQ_`bX}b(=yEFdxxJC}Oi7+JuR#CEv{ATU~4GuNC_wiZ2)A zI@^){MP9yo8_ycA<&1ebB;qbz%4-0*qW@uE8YY$va+1qR$i?Z8J&@rW6vo4W99ra7 zw6h5d>*N_cww2s6r$SHI&GiuFrzg_w(eZwOLmp3vDoB;Z4)fn=vlPTHdpb+<=*J4()~@Rd$?Pk$ozUCu3e`>D*7w4 z8t(_D3)$c>nuzPOCae42d2UMuw59~{SDeRvLcUlSQ7)V`^8Fy^G!z~fx2GLwC6t%) zYGUW4rzCDB?Z0a{RCM|T&mx4uc@rC*hGrRn1%8(oFEU)Km%l<$;gRbQaTC!iR7AH_ znW!knsk#58=k6osaSnzpyvo}9k(U&|FD>jclT7jN^;p|q!M=Vxq2n+A$VLd`tC;&> zr~2zE+>9W9`)*enN^;>e&V4$mw{Tkv^G+Vx1E zpWHeT?HIlJl#KjH_Ni0Dy9D@vgjXx;YwYN$n#E99-?C!$=TqY^U)Ur>mA)=V5i1a_ zW&IF_XS1td2Dz!oYa2Tkl-e`LNWh*yp^vzYU~^wd&XW1*oIyRf{1R`@Q>FixhG8VL zLDM&XA#OXb)%8eIF~p9iWCEALfN(hZ>vAtuuIV`hqo>A_dx>%cx|@N%(M!IX+QLIq5H`9l-;Y_d|L3QnXZjs! z$@Bt8ZJMvb>;wA!|3f|fdtFcE*-I93{BHY=C9^daRi(ZXj$8guirZg(oN$AJ&AD=O zBx%S2b>unQhXYX+>Az63KUZJ6#rlw*O;y6V{Cq#@`#P@pwZDLpKfU(Y?`x1_{kQY6 z`~698{{Ft-f2jU%+sl%60piMi_;)!bs9vPRF+BpXz@J>XuQx9gL$F(a{lecpIbPDg zce(U;ryBwZ1^;ijEOSF(uW$otZ9Kga+xNYe^Kvb&Yvw+9?bSxBL``w?KKo#hd{jDf~xnX&ih#(bJ159o#`x;Upq>(qd} zDM0|piBcM4NbuMo&4SoW2*tfKWU z@qOD5Wtg1oJ`ZW3K)-R_-H>^kK;Z0 zl>X0$%>j)CZYQ`F&6}#JLS-Gkw$SSU%mM-yU9WCsr31lI;!gf3ZpHJ^-z`cR|n$fE;u{fLWpLKKauVkG0Pu!zJT!;_Eu0lJwl*{y2((6geaS z2ed)9=If){W00j;UJ4S3l0nLsA8L-_94-cQ0T$fxUZCr-@m>G%^rdPiE(lNYUW1~8 zHa=rpXZr1NK$%#&APfx|F17OpuqJ7Ut+|d73GVVfIaD^osg>B?sF_jOuXeA)t5ZPo zqa*25?)uVgpaCR?4ZD5aIG#Q~D+Nv92nJu!z>D0*vz11kfNhZg%?5B8NucvMs_f(e z5Aa7cxM7P<#4zaIZ9Z|R-yOcwzp3?yc!U5BF7Thdy`X@lws6vbgBEkBX>5-2p0>)4 z?HmCexJ#cbE)*hK_6bzSk1ti99j)Y#4DwnEMS#ZlBLOK+xI*;pVV&%$ja2hwg9=F6 zaXSP2)aohQrD#{2L?D6FKYfko0@kcnzuXD;eaud%)o!ER%5>@EFbCZNH;6WTN@*K% zT$XwIiGZg04!~28(6yjr9euM`E2sS-A=fQhyJFeyIiOm5I4J5cQB{K-4rA_Ni4%Pr z#S_BJOjvT!RF8os*v4O91%Uj&Uao}ILan&2X(VeW6nX`z`9_35KqcHqaQ1Q{^f>2@ z0PiDb1-1-7h>4Xk5hDni0TQ~R406vlqoW5|W!KPSdchgpAL5`x&u5dzFiCG5% zsN0I7uCFx!BtH+}QPO!>nx=S;h)F=|4krhDj9cg4%F+i*!~KiRgt7t?A|iZ|sn?)4 zg|o2gt#^(xMLhMhn0n)JFS!I!cwu1G+fOx1ARBaZ@6Q&?03PlRf6>0o7yz}9m#OqO z^@7ExuC`Lpv)Hrf1j|faL+rswq1LbFeh0Y#Jw1pFQKb|OG4C72zS11sZPPXw0?Xh4 z@mpF@XrLiQCGVxkmJuI2ms$`usl5?@Q%k40o1*<8EoQV+q!c$%#*L8c`$yfkxfz;8 z=UW7%db8Fzxcpcx|sa2GqVE^5>gndoKk42@6lHjNIIt4me*80{a5k(jg7( zD^jqJAH5p!$+821m5;NmniaG0*(JC^SfWlqSu*|x2&)v!i6T?LId{w?Z^kOg_IkEM zz+NZAmDiskgE!L+W!W`Y7%y#i)G4nn$zzwCE9(tl`Q&fjnK1z!S)ru*IF)mc_(omo z&4mz^8_W^uZUgsj6M3PUnxhpYNDO%;G&8)H^R8VDQcRtpSBY7To|U-R{1*SdKxz`w zL?G4Nti1;YiEc+%BHzWeehl^rujcNy>mYOYfU{|n} z5Dxf^Z%3hS>~xQ)gd@KS(oWV)NBR&8$L`mtggJq@!lWdvCwV-lOfT?8&Te*>g=WdG z!a=;QEp>bBtd$SqYjmtBcmcMq<+d1dAz1FENvhjDRY?!>fe*tx#tr$D82sFH?Mm8g zss;ufjp^j@X4YDM0AZfVYjMwqCTZ@A9-9!MdLo0J*bgaK;9ljt3our?RxG3qJQPN` zYCq7f(5|va%dcz~Ec*ss++ZB^su`nVHZFZ`}8I9Z0vn#nf z+1ll>bxL4oXgVjf;(01Q&R@*tar;-wg8C2107IE{vIVCRTaYzM|M$gxpi-y)A}qUY zT|Y+CgxH2XS;aZ`rY@!rIN5T~7JM7?tdze%wI}QcAqqf)pJ;11^7~_IG^K^ZZ9fR2 z)~3BKYs6SS{80?f7e#{q^|^4;%_}J{oqRKTA7+dMtGjgZcbp&=u;d%`jAMLitMrx! zZ3Ag@?kp^NKd#DLobyg%iMjfII&^4#t5(4DC&fekjfwOKQEo0J5t4Ezx`DB~HFRtK z$nY93O`J1_L)V7PFEjgZdX8(~H8mD+MX*UcIGLJFTnF-{07AW^oU)m8prR{GG0+vW zWb^k~fPntnYRxOEMVlv6&5q|4Zf=8@7HSVyh}9-5b_m%*U`HSk?mrR2W5v^o^|+mP zsSI{%=-GR^^Khe1AK$loh3&4ZpZIFAd^Lc~EF#GW_8`<8;&aD9EHBdk zcuiZREcBS`8`Cd3fK(6F=FkivsMmm$bGHFHDyQVToa=jG^gyJ&TNVgu!R%vePCzR`_G4Fvyk8(bjW{g?oa{;Ym2!CPkY<@+AL$Vz|Ig z5~$^L1a3O6OM@F~8ToYJ0Lq>XCY7q1S2OgzS|Xb$ezMtOJN6A%qe$Brp9vc}PXBZg z!r6v0L0x=S=2q-*YQE==py*0zBq9!ma7^BCIu~V1POj;ttBJ*UH=14JJn=M|jH!q` z6op%iLDT6XB-! z(E>0Mrl$H?;~c@WQ|YVn=Zq%otnLpXNZ%_TMg*h@UBfene7X7tT{iYp|d zKLb-8B7)hoxmwjEm|Uu^HdC?%DTt9#{km6u@LD7So)ozaLXB-swI}wcd>kniLYO3c za@cV(aWR75lt72RiOLPzSVA0DDg&zE0-hhAdg3R# z;mFSR_Lc9q0A$fgWbbL`cQLt_EQVlr0e#oMcg&FxBh=aZXen2Fu5#K=suy38Q{Kaa zS%vCy3zpogItpJ@F3nIYmZHZ9VTiGuy2)4CERQzg5sLdc!Ik0X8{VvLq0hp6`94Kr zvt|0CZG{^tsWbu)2Hr&y6>gB!gtAD6P|#oRHp2?R^J2jc%<9`+-sH{Blwmx@rm(ip z5bIGPOi-L^ll@{1F#bj6Msy*G&{v-3P~Uq-+3#Yr-mZos#ou#^!anF{^Mt6?B_P7i zrB^d~6|AUr5%;$ZskjMsqNz%xzd8g2rdZKx_ibnHRSFE^OblXY zD%PpV;mQB~0@iV3UpcI6yz!FlA|}$G#bimHK{D=bK=Jhz zV-{&OL@g#9xN5N#iNVG#nl0qXK!sb_K8<|^h~7ulF=A|09F8Kz3(eBEpIdFd-O}@1 zA`Vg8oWbZin_ASlA$wh`cw56<5Qv3VkW~~8OBjikl8lW zn#=1mdnk((MH{v%S*eq7`>D#z6v*D#K383|X2&u|5-J-|1e^o}=Mu`wQ`eW5vb`$z zwq<@U;RA=@-656BzcDX`QWGh($iF$xkJP1|;SCl9|FkS><;Y&_2Lp za)U~sKLoFxVtrt1-J=ypwtV5s`%8OLLB19tEQCPhUMbsZ3Pz(HaiuA1c619b38* z^tR*; z9i~JjLhq?=QE)W>( zNreydo-152{U^Bi#;0|ctbcomyVCEAzK_iRp4*U(vhrAP;A@2b)rbtiH5w_o(n8OH4O3B~?hk=Y@%D^G>>bR-X96`Kk)8|lbirn* zk~&!~Z|x}FE{L@Lh>4$|IAIV^NqHx+BTAHdet_k)0dww&c@Dph|1VEx*3&!#7eCiLWQ3LoeNqtiqqh|o;F&ScD~WHMX{^h;1y^h$EX6J0A(h>{gs z%nG*g$7k#O$ZbSUr52CyFd>YV`E^zy5vHUZ%tqAoewv&f*5X^z(Ozv&LxIORpd4uZ zm4TG@Frg3_A#&$mMvS19b{=Z=Sc`yO`JZuo*7cVj`y4)pJEow{HH2!M`J}+Nq$9mc z9Xm!~G6uL+9abQTb@5!ZES#Q?{`@3lGj732wTLu++KJDlg9@ zA{$KBP0=JKM~Ly|l*oym5J!w?*$^J4)6Oh`YA)6aT3_SY{`u|8rX#bGbcEOdH)&@z z{*C7E)NM11yX8!BqNy^oQd3tISR22YQE-iW1yJ~mJ1&P*DsSs+Jeb@eRAIRx#0Pt# zt4zDqBBqGN|Bvo%QW!hwLTGoH(i7UXBZo9~s?JWo)8}j``JLtAl4;-9xwH+oktzx| znxjhHjf#R;9<0euea66gvb*l@zUpbcQJKgQ0s~N&A_GXz=-=3^88Y0-`|mH`ag;bv zy(4n$W+=FfeI-=1NJ35SQc3U#fpZS$!`m2bEffGLOuc9eShHSD@Hq?Wm$^dasgsEw z?y-uZOiI%P0sA9%q&#y5$TV$vW@U<>V1B3G=Ox^Vdt}CIK=?HfM0f#q@pmaMt_Y1$ z;2SS)X2k5g4-zv=66I&ylY>JxwM_8IsH`$2*Lfzb;W}JRB{x2BM-u$`+drV+dPLyB zOf1(7G>Kt~#9|Hg|>|J}*Du9K6mH?waTtGRMd@+L{$x#yL``RI0p{y^sz~6`?H4K1>NM%ZOq6Z@5R@qQCdwG~;7$Uc1@eo`j! zK&G`gK4TlQ*g*)u$~0JV{8>@}l=^6O0d$_d#HYBK2ug!eFl51Ro>zX(;0SCs$w0u+ zbAsCa10M!KDQ7VXAY)E+HiG5C5P9MAQ`kHR-1Oz%dSw>J0X2aTP=y4O5DX!|mw@#^ z4tVF|zh~p~ta&#c24JZ&5EV~PvL@?4gvPz-Vy!|mS)y(?3-MjIG4^ezvHZ>|UdV7O zKpRAAJL0oLqXr;3P5weBc-A`G-+O2lYdvOLBX=ERXawI&fI#>n-DWr72TX1um9Co# z0Bye(M%%>@kTZ%6J-=2k-$F`{tWA6$?31^kK^K$;^ND{R6W+yRx}uIp4^T*_`g5qg z$zb1;BSSRZ+DI(&-_74WfFicfmNL)sq9_$2Abk)$qB5|!7&7>5PN?LJ+Ld*8rrH+j z4g*QZ@{DQU>ONQ`bx;WKEu%AZGV)`7;gfn5Z`_XY6{t>m0Ol;*$+`}r4ZlY7tpnF) zjds)~6kRv|L;!c`P0tEIw~0?dc^HL$Qb)uNk#tb6 zxci+E0lQAO=K8~*1->~BqnEYV9n$6n<^CjB5pf1Rcs{nVxoy^@FYEWl^J5sK8_p*A z)F~M@UX6MA31PHxvGZF(9=3f|ppVL^tX>VHbu(CLHn62F;BSQ}%}zAPgZv|CBn%_iO1N0S ziKRomN=~)P0*R*{F_{85I3MX$1C#Oqil3S*9gJG~0Lr47#Z3r?o7{VD3wPdJt^xui zi+A0tH{!3Tc(yJ$Hiu1n@AL7SRfCxSp_J~5`yUuUK!(_>%WDo{oZOJljnb2-wWto= zd30`o(dNR;OhQUyJq|$aP9VOzvm#+~x1khh2$^=mH+yWIU#f!X18-ra;Ph6!3*Z^B z@ySvDUP~0}6JW}buCVcl}W+dmlmrB3q8nh60XnREbgWx06sWJI#wq14c?w&He9aW1qo}Jv7 zJhA}P^2N-Y|E>K>gFTJk){!k_9LKDYuItq)N+w*uZnL#_Lm%YYhkBR@6Ij08ab(;WpB2fuL*X#Nq=O4metFWQ`(2lG}iy@IY^$ z4CZSPt`sKu5RxY)UV!XCH^v2JKX+cU{iG2}I*UVk)#&5le!%&D4Ss&Nb|f)QO)I`B z!JF*18KcZAH|unGc0iPQ@l>zvJ8shDHkpZty&46uw#t0wSNbB-{#JbbeGcWEL7uJky3#+WcIao()JX&$Ws)0Wkbl1+fWU z(aqnZl<=^i$viaoFbOoC_4TO{!AR7Ij)O*zTYe@{g|Q0kUEa!@_Q+g`AePW1;ySh8 z#2?w@T4IaA(}RF{kie$HGn$xucN@)CP?*#(-hiee?tP) z5>h7pmYG7=lpV}(*8b;p0yC%`FoZ-EI0aBzFbOk2q0>$%Z^?YJSxcB6HK<1`Sg*bc!-I!rwe+ ziQ@+kK=E&;Sa2Gj9h$ub)emA|=gAipa9{qOVtMuwh>#!gqhbVm*u&|)t-MaQI)Jiv z`~GYG_g-!TJ1*TXH9Pa-?{g_hik8rw_qDq8SA9dBQN2&%7&OZ8LgiCqs;2L`fPkAP zUdFTK=>QJ5oMNOf56UA5l7s*=pI9p_|y?b1vH-0*Q!l=<$Z!Y%r zj&^+Kuh`+-V~N`B8vP`V$_Kax@k}vpf6?Ay_WaX$>>GPd^tx25Er>hy!n9GAnFn#+!Z({JA-NH~BK913tKLZ&Jb z5Dh^JOJDTM%-`FelJrr3X`dY75UcheV4b~&zRCoTD1udziAM1TRKMSc#!E>8ij*`7 z+V7yqi!`s@&Fq5h4@VOVQrgHZh;fC8h)z&r3T#Ksgy&K*ZG+)suMd$cgMKMc41{@E zw=m}jNOb5jn(|IeyK@Q#=omrgbfTl*ir$bJ_y1mqAcE@!G`kFt%;(}Z@ z7sI#C?!bwf)c}l$hNw|}Fbn0g23e#3K?{Qxi$@L|bMv1*DeCcfsUs^t>YR;aL9TFU ziV6YS-gt@FRu;9izb^z$uNX>0-2k_WyZzuVS!WOqk_>9T3VqP}fVStFxi2J*r%;n9 zsUU=JLDSr}Kj}vnKqaHSYv&3Wj>QYrs0FAafY-$u(KsJfj#t6}!u%K!8b{HC}Rpi3@~ zX+=3O#a#L8U9xB(Q@=6bf79`)<|x!hT?393NLo8jm%%(Db!a-an}KhhQftI+RQs#H z^w)T9lDl-H%Ge%fZ8DbDol^a(X%y=D=LcLW{-{8-NZN$@lW$m z;gIQq3(OHU2Q#WZ8Y&yCMwSgfu}$Ljogut14~zkwME=jdDxl?F@yk5h$wjIK91Sk3 z4zvldERh+RLGe2f*PeF8vl@s}k#D1Up3FTli@m)pkQjy==Gkp2wVhJ)T~VwuTuF)! zo5#HbFeO7CzCb&UU;qN}3zfFmujle%`s3fRueeVDyZJY)do)o2pm*Sc;Ce|VF7+_% zn45+l;(_M5ayVYdTk5+cf5=Fz(5*p-Gk6pvYH-Kzhl=p=b@0P0byZB$r=i~85)|W4 zh9Pr>ZIwMuEUVClSFg{7B4U}CSuNvUue*FIWTi+AznI(yxF8Uw^BCi?H}^Nqs|bE> zK(Nb84GJUXPg}R`*b}jO>Fp0`rw-AC(zQTq0Q!A9`OLtsw5%vK4frjh{GF zqm~6LfiM{Xas6i`y}i(IxC;f0IYRgSupb^v!e1Jt6i4hU?VR#8M$ZgM!^GzbY3{g2 zNvak4o4Sl`j;JMV7;Qf~JhA6Z_jj2eJUYWX-Usz+ay9eXtZxMhQ3az<*C)wh2p!vFYV}^J( z`k&?L1{!;5azj`vo%M4nlk!dK9rU-kP>hXqq1s$jiq%^KyxJdy-j}beDIK#gvOAha zxOU1>D-fHAd!oOwjl5$iv~REXW+H;w;9XK6FpcJmULC4ms>Rz-z6jFJ_Rl0>^iG?s8#Cr90CF-=WQuT> z=C9KHR-lnCIy8?VD+%Ggzx&jS*f~^rE?T!!yAGn@>@{aSi{4q!V!nwHHIcsd3|1na zQUJPbzq^l-VR!-xV%9?qwN>Glaz1?r!_h`Zu$h*=pAD5*{*yL@z>g>1W$j+BUR#>= zUedgF__*8KDFPWjzv?X<= zJdX)cu2fR`h@-M3*Lv`w;;f;JSM#qim9ncChA)Yx|bv0Hc5>?Fe6)iP~skICG+u9p`Ge z^D{}t&G?JpdhG`@!<*R8p?IBZ?|_JXGMk4RsF5@Wjc)plP+Erejn!SrhOc*ZSzd>Ywk=Lg1^829~PQAbSY z3gj6~kUQvOWk_QrCJ5%a?basi6Ag=l+Xarw&_Rjpiq)0gKEU?#@#hFjIB8Zfk6p>&nyx>IM5Aak zIT-@1{yE$<=uPHbbH1xTTc z;FJ(WA@YEIqt-(1Fl{@7Hy~hH5aq`v`B=)OQxl~}C8bwU>n>M)vPFg5c68!R1hr5t zPk8Z3ps2~WFOamYM!yXmiZd7Yoax+tP^0V|2wV8<3iDQ7>YxB1o6 zx(XP2=~X?LfLL^c;U=B%6)#qpHg#p8>%l|PmK_j1mcM_SEUU>ZIB>RZg}Tll;(Cnp zlI16~TyYMncKUSPac!i@ETpRMws${v;>}V1Qf)9+EOj68z{pKwZve}g?27Mor9-J=^Ajty2Kmwj8C6LpE{9O0phxKWQy2&h8Sq;n-bg7+Ea=9t84Nj%GO zBe)wB);B)5&6N>_J^zk)O&sb=k&DMXo>Q@~aZ@o*tv4QZ50THo;5GAlfKnpoB~_d^ ziy@hDE4SLX=l&RM3KtBL8`pZRP1ULA7s4lwS2xu^p0e+#T})5%*OPA_^>2WwckKwm zYjIA~n@7!Ho}r;)CS9$`oi&Z#AARR)EITdNGxVhdJf3)Myd3Prb%fXXI(I}P_o=`M zy`6U*>0&fl%TS3dgdK@y3F6}m15L*i_obLGu_SKsO5t#4s|Q=Rd$mkUaMjRbVe|Ps*c5fjU}t$S{LxvOCO6o}G;u14}=H+tJxzBsjN!B}h)j zWL1UNc%WE$)B}e2GB1O#TN`;HE{1LdSNt-^Wa?T=X0J znqk*L1Dos#c&ca}qolmQX8W0u|Bten=SFV}w(IQ~L;T^2k*?zv@1jV0v-VvZd*Fr; z&i=c@R}|ik4Q!5hT1E8PdTG^a-`%orA!H%U{vG3uYYHyO-g!DV#Uo**_#~rG? z=X(d`=(8Ug9GPN=h3I#FMZAOzK&G${1cB7xjM-65KE_D>cb`p!d(0 z;-}v~_VEyzgc)l48uO*zt{lNV0^&T;i4g+!c#+iQk6n24E)0N^Qggv6=O7Se~&HUpoz|knMrc1m|gt4n3U$VY?S^J%E}N??jTH zGAiW7?-jEfVLm&_9)Tkin`J1l79N4@64@HKdXlCd4>nG+i=+EJ8K$dN6pV47fcNw< zylEBt3NkH%AViEeDr{%lqts2=z?xGc^;%s!Bab5l zfmwTH#%pHx?tQ!0CFlEe6&1oofam(-V7lmqFtFlfhis|4NiZ*Ac|5SptF4n@+4hu> z{=B;Rv$gaespOcdb9OpR zg>0OXdguGIf(n`I2!F%ni*iK?f}L2(|IF3=4Phq7bj?m4dM-bMOK<8#|FB!o)lq#b zRR?IUZCQ7lgF|MJRu$jop)K>4fKKWcpVqJxq9=-V(|#$6I(7V9^~QbA_OY=_Yd1o5 z)eQ;vD4mOfWyc*!3BrnX{poLFN8<1j?DLD#tP79p1DonHPBzIdvdSZ#l@TJZRMP^k z1G3ui3(VrH-ZcePu!G=kNt5_GBgl_taT-2-8BRta{?-LF`8X*Sij z+-bJ*MeP5%lg@Gr<~rdhmgLRkbP(Wvc?;H%Xk`0xV5}iE=emvU-h?$=tJ20g6OHmu8r?BX0ODJ zUKz#(csv=KOR+Xj&V8RW*`dne6YEv7D(TVQ7_a);`98<7ltlGvz5RqcsC;}F@&HIa? zTfH(1312i@h$QFI-dN91(8DYQh}*lf1j%VyEPjPrdtoK=^1ok88?c%pC(;ks-7myd zmZys`409dH|MD{()`uX-W5E%_nr<2l=C_&86m50_8U`IO3zgB{DyIjT>02RrFN-UJ zuudmrvH`My8nbu!EAs|V1^0ypvXK}H#kgW>{18oIRNx{fC8agwD2OEp&s9v5)oQ0N z)(U8LYS6~BvZ@^~F11l9^k#a+zZxka!R<}#uK3CoF$wz_L2a+bh*IEVQNE2w*NJR& ziuKke4WTlBbCQa8qX-+z8776tBJ5=E?wA){(?^egXH9oqs$-lHSdzvSMvm`^@35vj z=)E+wUiGHA9iql%XP+6ay8YGKN_;%+;5%(XHh#f);X;ti&|L#~!>@voEPJD7a)f9t z{e#X%=S6%y!5X(Lv-y4W~0LN_NGs0&# zj^KYlBNg*%FK-wJD>R|I*oC-dv%BZ$K^ob~_Mj1mTGv5lhf(U*#`k38OWq#Q_ik~Z zLeI6JFY9sl_wkCxLbM`NG1-W(2GC(El7n3iOzRv^2|iq$@pqhw1hwJRMI;+ zBjk{9ipiows1<J|4+0yg>$x;SKX$xx>jM6U5A@7r{QDajEE7#ue(N`s@hrqVKf5E~>5#xmKX&xVq zG#WxvZNIw;ziB*}jkXp4%$rpI&iAlq$~g0&m96t)%C%(Pc!N4lW?^M@H6H{-4iS%r zA9YTHQ%A*rO?nqh;;pGWKiw!&c>zx)cUygJu~ATwnH1nxp#Eg_v&AJlGx&b}g5*YC zTA)bNZ;AeYOjehmo9)1C%drv!{B+6*>awVxLm7RZqBaN-Vp8v96Cya{Fm@5GjRN$dFhlyHgrl;j>;nO)_y#S)kU zfm4DwK6>O!aW4mnv)_8nniT<)pRmk!I&Og7g};G$*Z6?h4wF=S@bOK>3-a&{m{txz z?`Awk%zvmKU|en`2$q_nRpG67GZ@G&xDE_HyZKi2Mks!(9rrqj`L0L`JNA7O$0%2| zxm!D>wsHJ~E}n`xx+sy1*O#(Kd!yWW>u|!iQBo(2TpjO@6oc9U-z!SQ>87tqv7bSY z_N4FY2Znxc`jQ87f~rgzs7IowXSVmSug)By4KAp``aiYN#mypQC(c|&eKXcKmLCqa_LD2E$*@Qmc9cUcs};;>HQv-Z)?5-AORh7u zTj-hO*?2sOg61hN`vL7n>VD-A` z*aKR;qhwFK4Kk!@O$M{VODK2QflKAXPYhFCH4zeI5P*G?y)#6j&MWP{y3mAga&0V$ zY~INFRI~hX$Ti2uP^V6d>j%?%c`?_5b#IJi1hoPm6HK?Ag~-VD7Y9pxMm++DwvSxr zg0Y5_q>wU4@#22ru`3YI1{STrRN(QW+fPA~#>b3ndz?%Wql2yOg$e|Q9D9N@lBOv= zQJjT3aX{#CbUa#OhJ*q+Bo$89{L^|1OFM75vpktO7U)4Ed5uD8wrJsKVKLx@$xl|H zkghT0HYfxEwA18kjodUDZwMs%nXX=8# z&T@+NoL>xTSM@bfqMfNP0U-)Q=Dg=8z32M%@?1qsfmQ7TR7Nw0fGkxn(sgROyfTnd z(VxF(7a9Lf*nX*tIhso#rxJJO7c?H;;N#$c-L@VkaepvXRMBF&tAw$H8u1h#s3#+y z9E6bfYN=!&pV)o_(+Zx#$MwNu@*BJYIUT_8Nkk{uHIAzvlf+m2i+P z5?^X9y=2*bryqf+k`H6wKbs}!+RJei?@6lFH?G+P4h~$jH!3edQUAcn*l4Ed0G+X_- zo@b1&U;=b4D6b1fKr#4tHoL`Nj=?{dBK-g2)C8_HCo}q<&(qLeQ};Ay-}Y}N@a^R* znf8ehz!A6bTSmEk`bLemP>sBi?60oaLV=K-S){K#+b8Zq3C7>Za8&MpeMK4KumAic zyWcOx|2=L`SpxRn`x%Do0TwpZYg-&BgflNfJTv_vJOP818lcXmWE6{AT(;8>qX|>2{dr!~9$I z%f6;&ryt-4E2a70>F@UCpzE{S6Q!RVBhZ$5Q;+v*=2HaRk7!j=F&3aL91`=NzZS9{ z=n^dJkZ}V-yxlYZ;DO2))`RbpfZndKeP7WFq}d=t@F_Z5BPkZVya91c^e4#u!u$(1 z-4s3)s&t$tK56>L<{mn-o`F4iLb^oXce=H-`CB|9VCpbqITGDpzrp*%0R3o^!n`*> zlP3U;6z@F$F<@%|Kt6JeE7$ zNSo3)vzq&X3>7>(|FV+FeO@KqzkV#QFtKw z1aP}*YBYLhjYd-%9yKRR%U=h6GXr@yk1pDtCXzyCEFr57%x zf7W}|6EQd6OxX6~HN;8kgX!u;G>^zR=@vys?Hb9{fo80#blU%T=-hFCcWTbD(YEEn z!@Lq8Q0wZyvhPE+Fgd+@f9o95@LeSF?02pryBu{-d`ku zWD*sKMe<>a8xnkVl8CRWuLA++t?y6}*lq60DQ{bYC|5u!J|32(}cS=I*845AgM%!P&|0`Sz!q{9Jv6bNZJW`hNZS5)e=GGQ~5g9 zV6nnIn#}=SAc3&eL2%tw1~o!Lhc9>5LCzEf?|sgFNy*O>Tdj%S6X#vuYw}Nar0_Gf zBfhooytK%%Y~IoCJg_dJ@9h=6*?r)%j4Uz)ie#pkr_g3R15>Ae#sAgiHG z!XtxRy4ApcjRcGRNsBmGA@ENxe?G;T1-m#-hc9QA#L-E)OJ7k2w~^$| z8?XmX94>c#tEo(CoLDX_9VH`8W^wQ>j7j5Luyvbe7tRhidZ*p#K9`#;Pw$gwxAilz zw5MLPGgUAyb|dZKo}Zgd_2SqPs)VEHyDg-kNx0Ay(P2j2%LRMiV+_+=6oI9$T2PH-E%py9k6a1ZP7q2Q3~mW&AVRl?|K?CDB%Ae>drE% z%C+zIB1lMs3P_`rv?#e~1QY}WX=xXTNOyy@lx|vDKva;H4ryGAP&ya6=v;K4>t^rg zdH4JEjB!33#&GBuBEp^5^`CS8rV)$HZ!43Uwp#|zx0`(L)=3W;*wwFm=qqIYSk->U zp60A^c2TGkS}}3cvPRi1jJNq19jV~EkZjo_X30otMu_#9fTM4$-na&=cuY?fwnl)b zbtRMLTms4jE0oqfbI(78Vmk!0$Y>kxPZ&#kI9m(>qe1;yF)5(BWK-;d$ zYYdxis?k2^t*FXBU9WIUY#iT6_dM;6ytt4`nbI2G@Lm5Mx?*{_aFefRslQ#tBR6$# zw;U63@;NTpHtEIr3W5sZSN~G>s6K)%?!sj>sC0TS7SX$zt`Y5Zn(H`~ql1Xs4FqRM zfdg^`gH{z%sS}N(i0>QUl-+GV3Z(1rz7Iu+57q7sN~j%&vkSKC`&G@@p#6;{boOgE zMlrQgjb97g5hKDdPI-GkBB3h|=Vmqs_9R+>FmTl+F@GGfKRRt%+OH}e4`$Q3m%S!0 z^#B443FXl5rQ#zsK0+&E&y-z~S8cWE1cM`@2(CQqZ(+{bGN zHH{OyBN00<3A)c>jd??*_BD=jb49(N`GD}V%V&*mp#g+X*?Ue z$p;G$F4|byIBoLr8%CC=+i9E;%mMC8@%7*R0t5mbI%fAwT|eJG)Q} zK6958bVp6>@Lxrqa zggraA4>Umb=)fd8yfSwK7q4y4f@+>`NYI>@Fj6j)mn#nTfa}&cHyG$~zefQ#))(K& z#dcb|f`d^~G(bdhd99Tw?!6)xDhcUy1YU;IA^!w_*_>+doUjPL0Z?zIKP1#L?bsJa z%3gvJV~@5UE@UHflh=4E8F?<)iXPoSSLUGv92qId~+1O#{ z8b|x!FlQK_%idJJMZHq>O7e~oY%8+uC%64%X_%VO}BMCUFS z#Yq%-)SPaFR3`Rr9GFz2fwEW19?jD@x6_t@d7yUVqR>_OsH}T~yJPCuThyw3`v6)o z`V5~Sh+}$=T5s^h8es+Mn*BlmACY!qzV20XwfAhdM)>z3g9C^`JddJ(v-{1@W`^tu zx0AqQ^Ri(!$)u#|NmIWY>71>^EKdjx++iA^7b)Q0EZO6+YJlSQcL%jB1wO8|?V`iF zA#=CW1!rHyvVp9fmf4GTr2JT|5jV`78~Zi7`Q$FNtmN|e;{b&F3y zSXwwAR!U0d7I+?;qy0`XJv!n?KP;V3B`byJE-r=_+=l39!#Nm7&dzJhPZ@NiG=PQOL7q}iop#6;ZWj*j>Vttz*A0#<+8yjuQ>YevcAs_Xs z<|F-3*Quw6wpQx2#*~__w5z-~T>b7Pr1|n^IdC@*`YG=C|7>@3UA_RTgBOs8G`aDd z-6Dsm)0^|>&wJpp17g#cj~(}|}cw9^l=2R{uBw_{X4q_+Z1I zk)MZc(*5o~8SX&1OC*Id_cI}s`&>gkC;OfCPj5pR>MRnM*o; zyV;EKz%l>*It30zpe_TO(96A>si5Ggrl6$#_MrG9W61ua%@;4k#$2UjV4!a<{f6|$ z+whiio<13MD`Yqr#%9M$HHQ_E&_ns>oz@`oXYCirl)Bm;g&(sv3=dnGSYj|&>~0%z zLhg%(R5G%o8o^p4mgr4dHB`zZb%Yb3)~O5Rui7Ig_OQX zyF^>hw9Ud?+j6JAVOsXFql6+~_y7hKHMO~ZoYhRi97zH@0hdY#*gRZq+-jgg)LKM- z_4R8R2e&IsztG*@v3mYI9Njqu(;+$9b3z{)bR-(bq`io)KRPN^Khx;_j>ZG)EmD|x zHmS$MBvDyE^r~#x43z z+P`_cCJ^(&EO@o{EXAvB9p(_+*@O(NY7WdbRNmSWg~v+zI-xM1z{07}vu$ZSS5s>A zJ*hEn>F{N`p@r!inU%hAH|3+_v7p4&+GW8}7OC%>gK7ps1KsA(;w3=R1nAm54c6dI z4Yr*T3>f=rEAV>C_L?-lHElZ<6uTiKpX^|ph0VZG8JVIXS-pvkZhYhHRlOEaJO9+fMKj~xr4v7~VK=v?B$?(`VU}dfFfPA^QkU~9qTg4D%z~;< zG05S`1yepsK^};$iPQn>{1ujQ(ljaX;QGolD!|WgU-HKw1wM1tT02ZQ#18;?R*uEH zlpJP!rcO{gK>Y;E4nVA(%GHy+^}@c%vy&?8(~Q`%Q08l0yQe0lL$~`(d`k5=1+|4z z1NFF@LwA#itr_m_I|?jmMrWK%EUvuKl_JNUt@I8hED4|^O~uuL7uF9+av9H3brm}t zKz1afL~)<9RpX4Cl~_5e;XD=-19=Zb|02qSEkwZf zR&WIOW^~2fpi2LT4Hj}x>g?WUdqa2^r8*Hl_2yIQl7gU=dx;ukIt?e2o7%m%tRo2U zBkdjdcZu(&pCJWD2RtaCb zS%PPwnZNr?wSPrM+jox@fD>K>AozeweeZQr{M)@DNGRpOc5q0%$vY!M(;2&!t0#&8 zxMIC@U>4mIn~gd2e5Tr5sru2NQ0%o?#8iP(0wYQ;K~x6izMva1DcQ}TN}6@757gIh z<0Vdo0?O=C7Ck1em*rUKSD)X2?P}WKEztR!=G>XcU!~}`={1#arS%!np>L1O4^rc| zGFBqP`|!?v?nQ)P5I;zkUrvIWSV>j5r9`*?VBE%0TBwqC9(VxSmYa~{EvH#;JLu2E#u37Fr*iF147 zZg6%l=BWjh?(%2H<8>$Y%n6BQG$tyAJ+ZOz^=tv(>h4X2h212FMph{<)RCFTn-!v# zlc&z@@|3ed-N@Up+f`vgRKG*4Nr9X5-Yfsg$2+fp6)Pa<844y%bh|)qVX|-9rrA2+ z+2nLdQ+|$)5?P@WOiS|Ums$d!-w{%)b!L#shh+9`)XZ4@Z39Xw{Hyibl+0@%)rgin zQ>)a*!er}syKd+iuT6#Ur`a)xwGzO8PuREJc_AxHmCjt}6-S&ng_{+Cr`#Cj6;9EL zkIkFT027WYs>0U@qDW^HYP1GK5SPS<9{A{h;=!Sppb?lsA3Y~?4eLvUd-*lEg6_=y z3F3@O0s&byRZKh5%!Mw!p=1i|(EFYV=Y~p>09*Amit5|&uh)4oTwG}w z-AQHJsnzuFC%@_qbFtG4*d*PjF7tf;&~0;6v535yKc#U?eD(t-UlANl)Iwp_wHu8^ zUIre+(Qd<0e^pZzgW25gBt>B-s*9@}Wl zEbRngaAGj)1DxwfUb@Snxv*i`SN%YTuCl;kCBaOZdC+hTv;u_()aZ<}HA^H_!&dOh zhv_XiJ&MS1jt+MQCg-k7MleQl%wtn%Y*)XBfE>D*Hb7f`IHSiPM>f4|+9E_-wC#O` zl+cLlDZZ76oz49wQ&rH0wD_zKCYLklad05JbvW#IHVll)5d#l+0igQ_o%>7Ywj2dY zb@zM`wJ`oGbHDD8kkZ9u75ZP5jVg}skR{}Kp2+i+YA-iZB8fP#W`FO>*5S+t*#Zrz z1e$G@XFWn?cZ^(~2{qq{4w!-9Y&&;jNS4WPvmPa{1Aq9BH97ojKnDzjtN%TbTYy#_ z)yFfB(RLNp`QFZ(c;7fmk7?#sEJ}PH-9T}IS)35;VEg!Mz2DS&17?GM^Xox3u?|eQ z{uI?##5=mo6;>C}LXqiLV_~Luv_XY*Py;g*H3m-!_(J)4@@6FN@FXmiqd6weq<(6?Rd1>dQIeD1_V^i+%T=ce%1-Qa zDRH7vr?N*|6D2y=V?HLR&Qg-+Pfq0$aM)N;Zc?M}A>QhQg+{-Uk)9c3CP^9MBy{-# zdx2aH%*<}6nY}gNeV>u^Uddyx>H0gocn+cd&2k~`pSo(uPy8DbcnF&qHBMx@NX6;7er4Rl9y*=$3`~Z2Lob0&Ooq|rP3X& z;LaTH0X)7mTxKhXVh73?b@!xco=BHu5HWXL2*=Q(S?Zg07+PD}$U8bu$uRN*%fTylw9jhPuCwR2!HlF_nHNl`duK##JTZ+<&BVDYY(Z1TNDy z5a|Er4ezwzM7*)jpKSWIwk)P6XKNt8`(80oM_-%~K4l%XXCtn;G1<0QM{V=xl0J(T zeY}=*DuPYoPc2XvKxx-~CPxwJ}!&PlfJH{xAv#93vXgHTmWyeO%rJd%s^+*MDTIop}HIAYP6{4NDrF+h>m> zjcr^lN0;i@5m6w=LxmD9Np(C4@_gZa(TZ7BH0HKWdsuk7%(uyL;nT0vmcZHY7?uc= z+>0;m4%9?gf(gmBnEkyp-?yEs^qWZze4DZRXa?iCqZTk#k*fCD0F}EE%%9w*$Pc4T zdkvZt@)~kvy_w!`iJ0ODE{&IxU&YY$`^}BjtIg4{>QLQ*TDNe1Zc#^+ z2J37D|3`nBU1nz`ODgm|<5ptjczv3kzV||(#Iep~XTjnX$DP_++MIF# zOIpj*24Ni@h4-wEB*Szgq(l6(fpLS#%jEYMmVGkq8s((8GR%8E<2gY5e^g^6+5FpR zUagktQ~0<-&Fo60lnOY^0Q&Rq!~FIaU%iHFBgpFc`FbcqyIzD2sYlg2))eF2m!oUV z?5i4Sk4QYfa2I2qqKhi3%INIR%FwyORnJxjXe!Svns-aj1ml^~Q9sW{ zfh^)Gazgi(u4{YAN;jIX63oQ6sszwowF?_%ZD&dM&54|L2>BARI~tyASM9WwcG|He z#$3GadqJO(cH)=8UY_x{G33`)-~C{&D_NUGsb62xU1J-ZuLG_ zYf?=RYX?R_L`_wz$b6&zd)$Gx-c0UPfmsqMPYd2*KDXF;lZXWNu{2 z@snz&StPohpnr8SYH`E8`t)_XPwQW<6UWU+cvoB^lF;tAI9rft+d^f+0w8FLxq$Ht zdje@NnJnlh`VZj#rJyk(2c$W=uR=>iT+YldUMIez9Y|9?0VHf3WeEMhM;@*z5e7tg5J4pRAr?6co>dNX9@R7rfj?7)U>x0>lH;Np>XF zgtw2~+DHi+z#YD1j2}Fzgktf&^gUEp0Mwld{L{M0fBvh>!FK9Zpa_E894I%bSAisw zhCs>nfP-HUNwr>+i0p)zsHIa*Vw<-V2T8uo1%M>C|D`_zuN0KdbOiO-TH8S#zgDvh zw-g{c>k8Yv6W1q5H-Q7LN0I4nt&XQFkXw%9tH7YO`}ASmvoIsX$sNWcC7?b?YC=0U z=s6~Tg%E%m{VyFde`AJ$)o21_%iv&)Sb%h17|0wFg0y%?KvEp;wpa{-WF&6T{tO4q z*X7!bce!#zXHW(T4J;PXAExkJ79u>0bR=~QU9=z?>?(uM{txi!$}9JI_Izf;+1n|> zfkfT?mx3MwUixr)24<)Y;`?Sb#H;;c#3elCz4IcR4q~nD@#?t@YUS(p)w_W%94(Wh z6`e+X;)`l>7nCXlXZ_)g&nXulQ*RBmsa(Qcp&{}@QPHQ=G__HHnMnCt;J?(&q1iYf zrZ`Xb&PTnuZvDHHF!=DkaL6HW>KhQBTw-6jQrm$RsZV?k#d)9#9<3a5A@ivz0Z<~gym+g;PC-V6$E2BfDPEDcYuTkt2 zl&U**RJh|-v>NoNbNkV!TOn{&=sj=*@i{7h?E?eCzC%u6^|vCjS+}#I6Vb4fwmGmn z;xrGESOr!K4lT4f2C5J&=IJ7EeQ0Rw!Q+R+9>X4~g8J~9#crvYM&r z?N42xVdW6QRdhYs0m(7#)g5Ts+{o!?wSNEzEIJLK;eF_Sv^}LP_0#{YSO#yaB{AjH zk%wJx=n@p3MM80}O=glcz=1(SGi_`YQ;0jL^&28Kf1_@~4knxV2+=tp<#+Ilu|wNU z>xmw64firK=CCWx3p1raNk{-G^#Ru|WP52mHi<|k#D0bY4fgA&5AJO;zqj|84=5Nw z6H8fXD~0laOo=rwNbucTA-juz>yoe=+U-Wb*|!69$D-@_82ML6qrJY`{c>cpJZ6l4 zRpdp~o40cEHM}kd;`adS)2EqRDTg3ww|UPN66dtuFza^4){)%}nyDJC6a}GjAxD74`F*#oIFq&B@1QHC;xtGJ3NjCzYy!!9MaB`h zs^Xy>-RB6rcSY?ZT*111(=#%i#TVDj(=%mEW*%a_CB(h}EaLA6F2t?}VBh18pOV$P zn#08cN!D<5yiOs5K=Y!58R-WhGG8bWRQxky9(1l3Z7UaTNk{4eHPw=*oS;Qy&19s@y50(2!IGiqsHB)SV z^Xi5WG!S1-4-P;{JHVU{J$C>0L&!;+p6<`M2qcsK zJ)I_9%#^vMT?J~)Er=yO+zQJ3o($Fo;!o?#2CRaHp#GY*&xXkU77yjf({| z9)iqzzQB)}Zk`LmAGrAn|8AWmK7Q-FP2YoB7tZKIkIGZ1kO%o1pP`WT4H-)-E1g+{ zBWr@cfgH}-dHZJWn(Y0hVlKfAM| z@qP>}-QsPHb#nO13D-pVxMlGKLWT)iAGy!i^i4A9CIvC0?$+75r+^~(XF_%UH77-1 z@MgZ{5AQ^RF~!l}&ewk)&&-+pwggQ3`AG&bSFq)-hM|SdaKq$e0AyzCI=NKfm_<1b zb~7+p2U^~CLK$BAtpW+VUM*%R(sN?m3PpJmFh>uqW_nl3N$P~gJ z&aQtd7^uF_npu9PF)i#e0s}x&%xILc2Qm=@S)8be|Mvq0zB2IDB{`y=@AP6q`lSd6 zzZ=i7-e-RRKrVP@d^b`O^&R_!Y*@W@S3M};oQUEvo=OY?75U$m0-w!#&^ zgA(1oeTWbzeZN7$a5M`CDBEBel_k$AXV61i3$hx`6nAE_xiZPL;$#eJ21vJiRi&BB zM>OGISYh_j9r)zAZoT9Ty!#EHyF`TOoIrud|5ii2ntR*}pS{6{5{T5TL5#GDgPK9e zJScc9>~F3Dy!F?jU;4FmfCW(MUod{S2+j>MPIr>>?iY(VfwHu5J-^s;>&fu&NoIq6 zMDXluk-;Qpg~S! zIKf8AoAzO=)79d*F9h@m+1vBPK{wC}haVK-EIb>DB^2HkmT3O@XA-&$1N+~g zOE(RIwZEsM_?rsi*tMy+I(&(rfZRhwj)79j8Z{Yx^w-<#(0p~I?yOxrk)B?uTXX@g z7MY`l(TpD{{+X3)|EyS`fK^UD zbidlLD)Eb%71@V?ZM!0}j6<7YGP*D(`Kw-E$S89RU%)Irj<68-O-(Ka^2^%4G9C>$ z^hvV>+oD1gFHYjZvu0!`p@Y~)<1ahi;6ZzET{Y_8r3FDveu-vtHE`c_k=!Kzv0L)Xk ze@9>XPm^*GmG{3KejnD_8Nl`dEbjVDwhV5|C7CP<&oyS%Q{2VJO7P$Mwj|6?N4%xV zJWvkjG2LJWK3LQed#N0FkC*_%Aph?-g0BB?<4(OJUqaj-AjJ`K6i>7{5?#HDeF&bc zUr)4O0B6Xcb#|KdNn#`};JAVHYq!pLSAu0ITx2`JeQt}X6o-T5Ilk!wh$Iizy39nR z{|xzb_06lp)TSvY*Fm&J?8&2b@|s~^zXm@f7N+GQ|@o}dsqT`&ur=c>w6=5 zA`SIXARzk-WFZD^618!Vx8V}o0y(B2KT|Ty1JlI?Syui7I=_5b;WB4JPX#zAbKnJF zeebgipxu9;02l`s@a%j<6%X0zAe!>!f>{SL30F$|>nMb1N?+Ooj}|kG+sLsSAvpgf z)oxU0#sdS)dht-~pU$z984aouV=m2%Hvh}aNTCk6Bie;P{dWXq6bWEYu;}uLTowVs z6}pLs5OB_k=aVi&IS{#q(9&lctP}VriGsJ&(DHV;>GvTr@LtX`RpJBP&(7e7=y8!W zBAuB8%WO0-2y%n6j;=0aJiKjXdO%=D+j$r{fU$i%M1zJLWkm!TrVdaY1z7Gn4sD`% zASV*E{72+Gj$N^HYB}7Vv!->H+U5ghB7kp%F0;!jlNkzisB5F9BRp5k>9sE9Gki*@ zwlEo#Z*&-$5W9det>fr4~iAPLA`W7Ef7$# z8bBUU>kc+BD;i}W$FNli%LOYrk>sLlH?Sq>v-EHTiC-w6 zH6|8}#zQ|;7l>J23gSdByi)jI4jxR{L(ejSm$pHm)C)r2H(w=<+Nkeyf?7MF1qB=| zmc06}BA_~mdc(EF`+V|&qs)>hA*i1hs@@2ZIG+g#4KI}hoDhrf+c5uuIcOUIb%^O* zednpgI}E&Fv=}C4T=Hr6dyjx=p6IV5ZD|kCFq)6BV+&%b2W1K^%5i7;%OILO&w0Nn8CwX$B{D0{iM8LgkOreLS` z@rV2pVA^~~szFL1u+-;2Z>b)3YU+!F${?WD%fZ#Ak@wPNzz`W9t19-@a}-)m-2<@f zaqbvO^A_;E6kVso^cFA5$QtQ@9PhkUgV zI|;b!PIKOXKS4Ipk1mrC6bah*m4b7f0L-G5ydLDjO+Rt6Sh?Hl`+oI@Bt~rWs*#yi z_x^Po+kNZU{v4d}LWiVR4_sZ(Al{$0vCkgx!RFN|yeG>j)n0&_6K}%ebQ)RJRvZAc zjt`i|Tpn`RL*#nn(^;w?U6tUD*0*ea-d-5%H*+{V1$t+^^#JJtLBO8MpWl^hEP~Lh zr?AQ~^m=vmU6mT3v3LS%^?R1$Q-J9yn&ITyeiup=eKMG}|C91_?OLax>90S~7P=Ia zQw*`{PQn%XSZ&vJMjBKH$5=Kwj}9Tz#m;zbDkl)Vk~VQ}@I6iYPL)QLMYRT=1vL{Kdtv?IpBp;WDNnZhU1Y`;6_tZKSTTPCpKl}I9>K)?anRnNTdV-M)Y{ITOC zF;C6vm97VH6HA(tR>~0mlDA>A#whl7pU78Nugs+jw;nWJoRtEnv$ovGLumg+FNMH% zFqsLaDs1PII|L9CJww}pgbe;JpRBNhE`96oT61G&5j@|De~UNl9)J`QiiYhhs01`p z4tTGFyL3-Ky}z#%5LbqGi1r}P-gOv8C1^HRPUXF}EIIQ$1rNy;JA=mHAih z!dwa>KeBg%GME<$z^AK!fzTHvH_Xw~Cm>%5OL_!zNVA7F%QYYD8^wkhf>`Z(D4*cd zK+P&VYU?&&#i@1p8<(0Y;k_t(eJj(E*2b8>v%v!T0Gc5`B!<1ff4U+3_{oGiJ0dj9 zY|RgV&4(SCh`w^cnT+<%00N@8J$Ef_=VDB5TqK!Ue%h&MU-rFbMGq(C_E?7EOU*rHFv4tKzk=`~NT3&fmWwGz|LAY+$*|+e=zLV>44{_}0MvV>6 z^IXUM>{z7C0nB*6%G`VOpl}gMK&r|uEGhm&B{R-BNhtd?Jz1=NLVPCIarN*kyer2F zjxbpB_=258W$iI_J`cdsRu1qX)cI74pu8YsQG(Rn3}QMsH4C9-V-tP7gXIl zXqSi_Dr6^$xk(#!zdW2Y@;E^O#X)4Qz&8_c<&&{n`juiZ;?Qbo3~tk1_`~fxM>Xsw z@hB%TY(RX$-j@UGQTlvSRk?v{D^@z2P2HajW(p2kkGuECKH|$D3JlGEs`5J&20u3W z;P&ZlAbZ%UxZ2BU(|#Pvw-i|ZO3aexbS(aU26T1O?%}%ogHPQ8r&)<+W46glW>TGc zzOJiG1l`-qwMAE6W*V% zh%g99tRiWD(^N;nj=~osu{N*%<9q4*IQ|`q$dfu-9^3vwvi4mb&*o=#pcfZ;dccU^ zX@_52jQ9KmPGTt9CNuqAlRh(XQ=PhZ*2e0U(w(MI zCh4`A+$QP7TeCrMCKx$BwqdJqoWHCHzb})?mMd98pqnD47XIx>PuZ(>_$TdTijgT} zjtOk{2vQP5cRO_=l#?m^;)tJp)sc4a*?GTJN2qiD1CJ%_zN>M|g|eCfML*$8@T*MU zb;VaSw|a@pZZ*jnJR8Ck*tUH?4IU1{D@Q9QP?O8!E3ag=anc8Ugm&~lB>0W=(`f|d zc|2l=3M+{M6}(;{lQL6-pW*}IW!h!@qZf<|JZ!vpgdLneFfhm~bCz7xW(nah10XKP$%J?oLnsUco>zWB zG%(*n_}!oO%rjrT7gzS|_F787aCpG`y)sPZ zPGyg7hd5slV760($trlFuLqdDXzff(*}l=$N9&gA&`#qtI7OjO-HH=#5jW-)h-F=2 zEY`J4sUC(Ei2;2Y6}&seI$?13sl#^RZ~i~4TzS+Yd}GaFB-GoJY6lb#gW9~Z!P%gn zOP~Hz90>&2W3RX2aHhUl-Pd1pzbVPwU1Dj-!nqOndJgYxI9jQ>B<~$7Yn^zQKznsU zStnoCPYo9IeD&Sy{Cx(g%@8>_cb$j#YGm%cIz0ehKxBFJQBVxzVJM{d$XxnyZhhfH zF$5*}t_Q12&y$B(tEB$Qw|;6y@peAokXfQ3Ck?kQJMPDaJ3rV^ ziiR>dS&?hW=4Kx%BPz`3@`&QJYK`iZV;7}gwD-36tvnj_100nCt7mLush-R9JCBRb z>~9%5|5=&o8@rap12!&^w!jk-d=O4DLg-|>-B)g*VR^r@v++!IBWX)RbpFpTcw2r3 zhw_>;TyKWUD^Y8z@sZwU_IR94W4+zzR?10&U4f&*QJ&8xPel5I!UC6bb9gRS1}~SP zRKuF{$qu?Tls!SPLzQukDlM2erhS3uN@)NJ6->Wx}$nnZAk8hmyQl%%j{Y z73SF1(Al2s`Dxd){G90xJy%KgNksxvGy0+-atMw@`!3rJiNKPQ%1O=~wATizrUf zURKwh6}+-!L<_u&;r~4TeHiBc;{Ux)wTNSsTz5T;44N^So?1kj!LB+O+-gp;Q#My| zCRYz*NwD6*S!y?DBvlXz98M}GAYHF(7!jHMenUNyo|}d}p)0&2`mps8(^4AueaUC8 zL6E z!rRuvVg-p#6`(}6S4Qzo)$atCEELzW9 zza@#ju(3Bh8otw!09T{c1aP%KrRM-KcIJELT$oiamPVOIxUqYcKk58P;Q1amBx@9^ZUA`<%=NjJGE-^)n!G@BduZd z<3a@&cVKWx6PB=vat+Z6k-z>q@%7wwC@p#!2s7kPsm)VWPr5iRy3m&d;hhEr_myCi z4%YrFPb6FIOmcV#kW6wN*3v`2v$(wAaC-}W(>Y;CiHr&EaE>>MMoc*~$sUxlKkuL304 z54*WGy^pVz)RyoOJ)1HfwbMwZ@WUxq&H<%UQURJrudYkHs zDiw`i%5IuQa8~c-J6AXbw>d0l?uD}9aw@)!aESD#NOHG((A0uMPp)W4`~&ZL&Q#UP z=EeD@rH?57tguj-Tf{b8`OcrWc_DBu#DL8Fdsi#R41r7sKeyB;)GV^q3hCYgp+8OQ z;IKEo9v(b+ly zbfRSpXQRmKpVG5Oa|q^PDLvjAH*XqY(-i}j%<|q!f%9?hz$W77sZ&ILb72I8ejGPkHi*}M4Skfmjl z80v*}T#;vISHb2)f7V>blL@hA!&(VsJT=jKl@_9{ z%{5hb{0mbp&YsX~BvirOaQq8Ed?(A+8k@<{aW*}?jgoT{@$g%y{L@Lc;Y2@? z?QqPb69b>M5k^;Up`ZiNtQgH{EC#H9EwPN8)~VtZbl&|===5zqt$>B71|wqGE^0D5 zd`c1{Qn9f8X1k@s_%u~K96Z76VtH(tThsy(Sx&(iHhc9A+8}_~p}gYEfGhs|;+863 z^F#Z-$18DT_wQj7ZKU5ekYj&|8*Ty&J39jw`O;eg(x28=mAc79r8|FzQ>b@+S*EK+ z-Md}-V1=yP{ejxe##Q{b@l{(wZ2q*Ylc06e55|E!=r_}xM#B$@TyxS)%zs)be68Jm z^94%@?3zJyNg%um=f)CcIF7~q-ZP582!n2BVJ-_jrtj*)tv!L+m=R>KX`jX7Y za&z6~lVr^XP2j$^*PQp^AJB*xWxj(GRQN&sZ`|D;guAPr4KMBN?oEt|PS%$^{F#F} zlJnC_IB!S6e;n9q3!N?r!523-jfGyknJWD)wwNF#H5ZPtZ2YK!I!pP5mZ((W-8|i! z$K)ld-n%#`*hWw0!8Fg;<1CSjJzj;U7i*K(Qt3OA_iZeXeB2s+%DUcnha~(({KiDM z*fhH3W#}&~_JyS67htQtR4OvHOR^Pto_44&sZv z;XVcf3pd>aOqiaNKe@ev653Wau9*}&*bnueU4M6u;29miYa^&ccm~=?fNSI!IeSCh zB`H+sV?RbI8hUsh6n?~u9-L#gUn!e23 zeB+%$rOO;tV$zJyVY>ul`ndS>6+gZ`FV(L<_M5w-@I5XD&Wx(H5=^v#MVzo&vf=q$ zmMGd~SV|jJeE>&mPDvJXpOvH``;1Yw-mljCk;s_ZqPktGGNiJdd&TLWC?^Et~Cxbr7r+jOLI z?y~TNiopwpAshlydn4v8@Jidd3+a@UKkPL`7`RPqueG*vtW${}g zQTm5;t@NhPuI?n!^I0@(j7Ih}Dar55&R~391(XM}e7|sM%mvIB!dGN~zW~M-=|B5a z(tNzdyFAI(6qVB)9kSdDGa#wo`Gv{NXXLYMw6X9&ruD`RPl@N9o?w@OEEDW|-C1NU z@`R)|t8OvL0AbMU_oWU)rIy%OwUCVITeVC~M2X~`ZmS=rprh&cLdU!v=n0`mz zW3(hDQ8?rD)zL^YX#$+rvnthlb4lX0`;(+8s~!u!A@&(`)^=C#9@Cnq;!jUDhOj#I zkGG4W-5~*C3SUOU$}db)*4DnYWn87GpMR980 zvy?9SkqSDAlERiU1(1;DasnA_sv|lb$8V7KW`y8<{qeZqvuzWf%Dfjh7x`eQ?_wtB7V@3`p!CYWivT}lK6Iu?4O)84E=53^8nic=zQlJ@|H65}l z8LO343_FGlI(gUi;&hDf@`BhQ69raoGu>TMeFGt7B$hGS$>R82fL1#dbN0K#uP1!E{6Kj z-oQXCslODXZ0Z#732uLIP}`kOo-Jy(eFDR3PqmCF)9($`?OUkAkTGA`^?esb%U49M z`35JQs-6XJ03ZN9sw#Wk?Y(L9lKDkPr?r7on`|je7@xtg6plO=0~VFoRllQzBOHoc@3-PG^Q_wnPw4wZQ~0-xjTA41WHiU?M&>FaBDSFGW> znr|~%bgy)e`=;X&mQBBbL_IU`d47L$Q;38pwWR}=Z^}~`O9%uvQ(38G@!!l{jlUE@ zsM!AfdHR2!*%5MZn*Ww5ae>nw@(g|fZC>Dw0ltf%Ch$+dZ;++z_@9=J;=li=AmH;m z|C`}O{pP=_;{ShN$|Cbx+-RBQaMMItuVl)5=!1VI(DI|@cqViM{O8C7+)`iYO4bw< z0KUYa%MSuZSU+qW7c_qS_dF4u-e9m>1LuGO`e5_iQlSN?h24M1Tqdy(FOMnEPyc(Z z{Ewpf-_QCV8^wRW?tiT!|8tuEE2aM5e<>O}EHoHxa#@o;Tm$jnc1(zHT^9F`0S)v@ zei4I1@h}n?=?sDT+UN+hRo>s*gh+6R3?K(oDKLH{Ks*ii)g`D@7Xid3N!ufr?{uJw z81htd3tINjp^m+YN=X4S7;<;TE%)b<+JQPd{ty4UfbOSXy+oe?`uz7&(DjiBG{<64 zz>Wn6S!ph)ZVPtJpLhLKj#Q%j9o^h7Q1+w63kn{t-J-YXO*ce>E^zii$w<)ZQ4H~1 zphCDgmdvh?5A)YR3ji97h^>-=t8Qy(aR<24;vqUU1pR>AHZ2A~)K&rK2Qs_@Xi9El zWTL+re}};=wAZKy~ zFr6jm`F~2U0QR<003wNl1aWuJ-W(MEKmLH-#O)jEDiL~~%ekx1Q$JJz5e)H6kzNbR zQqS<@Ld_m7#{>b>;7IZU1htkZkeT!Cw?4#p=Ul%J(;YMUpi~URp+tx{_b@Ex_Z60I z$dV@sJdndql|XdxJcZ1)G2`I0AY=Sa=Ny5En*hx`Jv(8?OWA|s3b!p&9TbR-51Xl0 zjz0H<8K5eF*97x%xbE}mN#ljrW$yr_r{B9l50dtSgt_QVh{mz(2Wl${x1o|fr-N;> znKsAsqeY!8rQ4taB<7p_gFX{?qpR7Is#CxQU(z0`(81%|HpTiW%sIR2i}>5y&^xKo0cl!dQROB z|MtOZ$t5wx)g9DtexL1xy5XRPATji-sE0!wigXV0JozGxySaSvz`|L$-~)-?M|M{u zj+wtHC2q}7%Z4=$nJv?kxm~+49OX^%s+G%6o_eui`KjHv?XRH99G@}+pJQicR$TdL zXYk3?TpvaEFm2`d|714>|EwRNTZ@O9vHN{N?F!Yl4 zo49{0x4CQ}lPv&{{C0?vhk*#~8=efHoF)Ggu0zmIS%0Wddf}bm5Pyl}uVl+~y-R|N z%TxV{*#|yh_KYU!YCE@n>@K$J5UVdoZ>IrIt{<{ zXF%S`cYHQdF-eeT#8z+`T_Ot`1uc6Eg#=EZ2quy7bQ*8ZPPy_ASdTv<(g)t=j6^)y z9!Rzki&DG|eke9ca`lB4t%C&2XPzfVi+jo*Xk2qzBgq?i?!zLcA|=p`*$cgl=6Et6 zK(!t#KHHbD#oMj^`{)!80uHEi=q8oBUin!Nb~=5~J5bJ@qk1$0H@h9hDe_c_sZ-4*WGK&M4-5BZ`jy4ueWm(1n2eZ zpM~Ay**rg%jjBi;_oYsaO1 zqYjLs71e=K89bmX<9q(L8nu1FL&-5;zckAyBr;gOI~)L7O;HjZ{#9-Wi{=+$i-0`7 z*`o-zyI8@MN^alDKjA$K5}B<#0)S^7I%@-EY)KcDtq&wvk3L4*nGpzt>xAF0fA8NM z7;?o4)Nu4X1x?124tfw7jt!4eU;2XwZ|p*m{%*wars)!M9aF}<7c&E$XHSv4Gbf*M zQJhX>2^C`MyCLGl^&Yw)CG=lcrP0;vYUG;F8NfqhhNst5jPyf*zZo6eQ`O)>{C2Ng z+ee1;?m2VdATL_|@IWA7>9=GQH%Ui%z@6TNBEPd$7nxzUZx8Iq$!_3S$91VmGk@F) zni=dndrKB`tC_e-(HH+Ncr$EH)VbtsiS*uJKs^A-221>aFw4l&Ehd`p{(Yafz6kgG z)MR*62z8wRSg5|`3O`6Nw^}w|=RgIy6Pgur9w_aYUn4DpTuC(s6gszp*)0=F(KNlF z6-pv%(QfD-dahPN_$g>Sl%>Xj-r3s}>g8Mk^Uxb)FKlb@c0{#)S?lp#BQZVsLFWXh z)q_E<+8{L0G(SxCmWuU`sW)2Z{J@ow(;yCnkTCdm(UhA>a7yb=0_| zrsLWjkOUKV6otBwui>8N4inwjS^K6+x95~Mo=JNnUSV-S<;My|J7@4X#i zTp;`Il-xJ$j*a0>k7ttR%5U+xzbHR<*igFq?o>Cltub5%hvrkPXYodO-T9*5xh2o0 z5=t1lyBH`{rDxcdW8I!|Z2PYjzTxeM+Jw@)Rw>;igMl9)yKM{Ing8S{?+BmcqF9yF zuXf1kZCE4E;n{(;l;dF{&sobO#2#yFu3@xEn=-L$8#A*S>ZPzHvbb zM}F^BH#|=WuXK}bO}M^eF&Hv~i1o~7$-Ec=A&dNJ=5#ynIa((P?J)k&r`}tEj0KC7 z)-?=w>R@3!JU%GCcIVI2bO8ATnZ+0+OP?3rWFejjcE4lvmXwqtgXvain`P}>E!5Oi zB6l8zjXnS#t%ATYZH3jk@>8GloeV#eBuW&AEW^pxjKH)rLTs)Fg;i3QFLhNtrQs!Q zZxTfI+OvLyFmXTuM-HDcRD%1s87$O4y3ek^wF07I<@IRRQtpB<$K|wMk4)X&A6%*B z51*k*3^^H5xp6UT#}iYxB*k`5&cx#}o3sFP3Mp+gx0n&wMV1PQ-WP46tK@ngXm8PT^6%eTg5g^4Jn`dx)}u{|%AqM< zu3C|kC=cj%|M_FYpsZ>kgp3XQa$sYG4QDZd$&Bz5w~K%aT6T$@5>&$4gf9Mi8^%t| z5?F~fAx#ys%E*BxPPwS@mwoQB7m~Z?Zp0}}MDK)@%bnPrE^4-kiF4e7mmz6~eKSuN zG%6FOF2=gi7vAW0Os#Q4;ps+VA(yiE$`}Ss@B3r+^wsu48*LmUlib^M?+{-ZC&7-i z==4&4S^Nie?!F_Z!Y>jc%v|SOhqc0s5Yk?fM?FYRf$7h88!*z_`;OS9mkX;xN;DGG z8}4I3l~H5ER}In^{?*srboLpoyX^KAdTH|kymIO9U4}3H9F?ZKN`yz2gA7DcF{sy)tvG$ul+qV>gJDL2?C15ne*=;X$oBt1c zZypZi`~MA>WCtIA*c4XU}TX~rY)TgWF&yS-b z$^$=^iHxrdDE%s6keqU|RVoAGu-qqa?+rt8tS9T+PJnGN-=V}1{7!j&qFud&0&~#zrYzUgYK_d z2@L%+>YX&j+GhGkU$H)owjSoUd7d~l1@F=pj|V>-1Cw8>Yf#cf#d~23aJyD@rF&!O zGdBx_>-L)+F=tY%GxqT1F1%M$3s(wq7|e%&59&h0oq%Il@xWkXqOe*Mc*-%Q2Oq`< z6@U{+9Owfc=7+tOiS)BA^_m?x%#x~kS8zl3$F~*3MaJOHZHd$J+vD?ia06Vzu4H=TWklY6%co>i-W@MNqQ=Q#|Gai6?oN(0ZBhj%aV6IpGvKZLJ{(q8H-} zu-cqQQ)q^S)UdU{m)5*cE(HAOf+V9dS72?VrZq2@WL$%x&X!ZX|l_(n`C6w zw?fDu#`OL=Tj$H5-YxP|)p|*G@2Ork*O3du#6!4YdRly3wZ`b??2}ksOGF}#QKa1F zkIT1cRLNKk+v0`!adaM9Rg)*Xhsd$|qq9=Ux%_F;DcgmhUhKme4;%Vy5Q6Rs7*DLy zzO5uWRsZ=4$13f3Ub%9Ko4k#>7a&BgD~E!Nbdh`i1wvqm9{$SjL?*4D;@#N#wz;Nm zJTny+>|-Kd*=~pRtaa5z{`6cH^4-oKYGe1>kE@Jc1k0$h+SmVTn|GA(UcU=MokmED zm6L||yj`vK1gHE;8OL2eriMg+MiMf*ELB?4%I^DQ?BHNzY4IU`yuLBxs&Wn-1c>nc7jpEvp_o7^ z^e7PtVIHPfxHzr}V+hB(;$X+&h#Q@jjPbbXuea{D9~ekayq3YXpVtwrI~>`?unUX7 z-K$$3HaMtr8L{*^bS#IqzcPWEeN;MzRmYmsdNHxAJL~(W$Mg$9VC>G1Ptp_hfDBtv z&#r+P3menho)Ix+ai=D7j8VQ95kH+!&M9VSOYM$8Fnbh}2a`V@RF_*@sBz6YD?C zlgOwc;~jZa8DfQm$hJ=`g)zb@1*E4Yn&{aaJUOFz=?Vil-oRw#O+{eGp9%lPS9jPBEOYl~lHnVT zz7kG%ZLAm9l2+81*k~a#s72>g2zO-8Za&hM3ROUg0oFN&Q9L5|5TiVrf~B|5zHL(a z^pLXfi%&))WYHm~PWj%O{3k@O!%tBA8V~tzD>aR$+ti&_c`$*^I599=zG0g8%oY<_ zqRl;7ny#(>+^@k*HRWmDr|xlDTiU@W??tIj|a&{@$A_ldW zD!)|M^G}l$SBNjR)cxcK)vazW&FU}Dx+)FA-R`OAjk-wW4hfPZ)!<48EWUP z7F1aG;VYZ$Mp|2{8R=V3&VkXD7aP7NmbIJWSoVHI<=(z-Y91HHDu2ZoAC?NceXyvp z6+gB+BZqBYfEnx59VATrU_5R0j8l2L=L5RIc&}8@=hWdPmd7>DdBV1)r_uBoLBc7aBWY z>NX!x3@e`t5Od-|uPN{0`seFqER>p1Z=EfBLuJQD8XQ$?E3X+@Y6;&Ga?Qz%vq!q7 ztoPK(-bQB~11%0!AW;2x{oGJIJ~fP@b2&hoi`=bZJ4IziIPjqkhch4@!nH@Ofn_$_EQg5oE>P&vF;*8o9Ou_5;V5SECWrOamTA!$;PC1 zH?x-3-MaldLoW!MZQ&cfgxKugIzW!dVBwA(0*4<4_1)#@^^pf|cnyq;&(r~K- zDG2Jm297^psc4^nh3keg^wV(X)Z^pgr0QpcTKviR(>^I@sh*kFZ@aRL`qlHYaB{R& z6FC<7w)#QxY}RUtwKnRd56GZwExj9GXXbqupO`9daB#nw2V*60XpE0=QMhd=eW$BW z0aQ^mEg;HpA6`vN->qNs*38_$4WKqQt~Q}0!sIQseP5o7q@P4Je~Br+F|d<&YqZ*c z4?R|ml5!HIFIx;q8FOLT*$-+5tEp}v30E0mAA9)2S{>Og+ue3v%ByJc(Zr7zSD`T( z)BK*si7i5t;u3dXCQB~-Dg(%$rwF-UaTt25<6|jG+(ihRXT|_aLaqt7B}mDc=~PV& zxOFXc#s#N-JqFpDjsM&4PzO0N;9@z~1OLVFWq;$r!v7vWx_)PSd;j}_3jdv6J_m#a zfBGVif1~tP|Gv;Oe+%+=fGzx=UJ2_Fa{rC--^Re)Z|8(sXpBdn^8fDASaE68;0QIq zG;MG8U*9bIHASupLdOrZuR%Yr=F;W5|88M`;Xi&QZm*Ld@BJh}*8Tp`+6kaeaY%9U z|EuEzM)4&2*-<0p%Nde{|Bp=|SaHgPd)tN}=Y>+52@56WAIN1IbOET2?%@Xn0k#G< z_F%R?{>)0m0HX`DEUkopj@n2L4UoSA=$)iAZ~k)>ltE~uK_5!;C~I}tYpuPvU4|3- zu@NIq;c1FV5Vt?Au-XC;VdxSFjku|cgbszxgMa-s{;Z|{hrSy?O$q7hac0i%>h0O> zJ5%JUXZu$rPK0%Kyq0i8v}J%UO%h~?-*bFs@8Ph%uAIRxH>Dx_lezSdb&Mxn`TMWI zjqW1PJEX4lB%GvZ@;*=bEN)Uz9fG4E7NGv z+dVcH zR_1|8meb21S6P@E6niUiR;!;*P@^FKcNQ=fiOAJy&?~tdZ{>r`=k9;AQ+cqn(3;0; zN!If0$%@0b(JLDiR*$)oXlNl9K-wtoyEO9!z^p;Et-P`VyyzWwCNJF0iSN_cm<9Rs zkF<6l2=7b-vk-kqH3{tT<9j@cfZoeF*NTW4{aA&}U*$iFKLU=3pa8y%G$cOZW1#EPL_5S`dqDh+qu2b?_x{R z)lk<(9OGEA$sBU<5FjU9}rA! z^%K*(rht>Jd+OR7ZZzfQC1t+swPtar!IDa<{5>2$S}$vK=RwFWaC5($o#b{yPUB-K ztJ3w4)ACO*~7$=wBnsp8qKCNBKkL*b=87d^Ew<^=KbS_g(Og zQ5O}R1djPRB=AO#sFz-#2l7?o4fDLb=T}8QBowQ59Rp8i8zhLLvTHp<-^Vt80mK#9 zd9QVZ+SN_3=dXkM-1$xIe z-m#fpy=;HAoG)n2||!}X%}OPC$_lQ3`>(QfybG|Yz7pb?$;owzANYZj8FAxbl!m;ZHHs`L3g||K zFg+WJH+^y0+9eT{_qg=QY$pF|cEe%WDiFkvJH^Jd=-_8c zY20wke;sO85)t`VG5>7u9)}R(RdH$N z1XXgP$O^ZFZ26O23KT4H9T#qr~FRAqbtPE$AGEld2_y+LLRyPT`J~hToLjm^I!vWtAx~TG!L)=+$_u zyXaP1g0&hMC{U=-Su_&P*98bOX~EjjO9mWQ>|37Fn)u7Bk8%dH+@iXs&Sh7)@T_6m zQC*Zf(dGwJ4i`#|gF+28m{o+R5l(k5Drm-!%E$6s4L*ZcXlc9iuG zv0Kce*2i|2Sb|EVU)zUzoe>BToYZG<9nc}Oo%W=S_Y$9Dp0z+zA?@$ASuw6M3rH0z z?TZY@wtmD7TVw_pbFn$d6kx9--;AiTV(;x%=Fq_lEviDyMz#gDm5 ztidv6OXU-nE20^IyhL~PP4{5DG>1I?W|nhRIy2dPmXTst)H=Tm(-=U+@!$$v`pw%y09`@~qij zJGGmP!9E#2Wcp=4`v>*S1;?oBdR1~6;WyF1k=7z{?TRUI)0~+}CXJ|^j}Q(3{t3{A zW%GTt>8pL41YkkMkBDcQOTzyNOc&dqtj%s~?9R6lH6IrR88g0sg7LOqZ+fYI+wQiQ zPh$E2Ophrp+{&eE$U2&~bNfz(m%m_o9-v+gKE}a(~bgF+Xk*5$A4JXuB&*{W0XaEebs0WM59*oIf@T6PiZqn z8<9vAruD{LY33I6zmH`k<*s4g<_LJK_9AGLqxy%=kLUuseZy?bMIG$LfDjcV@zQrS zxtuCPVWKXjUCnHA{>igebb2M{>s#e{>qP$X%djX3uEW_4zJSR@Zf7n&9~&$I1qO2G zq)pT@ZruPu_xD=gUBip6qeBgFc@Hq09l$icFyBhkj5WlJ-I>d9VHS5W>N`yN8d7=KAN;zHUzJ4++nwQDh+8$X8$ja7(j%jM9O^>x?}UmeOvwsa`SGilWR^KVY>jB)0C-H5xspp*1?ariA#y zd@`u^tjy3YLub-8cI9cFFXcB-n?1@+}`M%oywt(L7l~( zhtJS21UAN=q!{NJF%wi_hTmVBA;s~XhI4j&I&jACyIY1?F;~HzMS5a2lX+F>ggA5# zok>2fg|f{zSgm^AWSflPaM9*?R)I*Np$|EZ;f?wp@3PxdyyGzYgU5TLf8H4RW=h&s zrqgw^bZxxakdbN#6=M_%E7_l%p0KGx^a?MQ*St+Jq-CSp8GUVZa(XHwWxgJT*sdd_Xfl$wBog?G*tsD(g zR5Y2Gce_uFy52l#dICDEraZ zUgk;@fI#pUE16NTIPxWg+Une0>B`;|JM3PmEo(~s){Cve}M*T z!f~tNjqS^m^pgQ1Xm4&Ot6>nj_l6M65g_t|06vJkGro8H?Ta%ivjU#(CbszW54UFb ze$^_iJOHkce1CYRzps(uhN8*O*Eq)W!^Uw62M2CF?%kMzc$nd6Ww(>Tn-9xx7l!rX z;YolLOsDtD*GpYyzNiW#u?3T?hKx41&xUcOv3T{; z!CMxs;;PtuvtXiY18y_I7%XsBe|OBHOm_KYQ7c@(ZIcmZ8YlZ> zJ!Jtyx>a5Lz;_}Oj*VfGf1FtSz4n#D-`tvy4KN;k_4Xw0ftR8T2A6 zJxpabgB-94;PrbxWkV02t?hF8>1hhy^C@^e{8BHP-wL*!;?~ApjLG9P+o~kBk26te z)j{qh-~!W^#^i9LxF7nR40k_F)grf1xSnqxrQ~4654pa{AA@Am>Rl2W)GTRX@!(SEFIMKht+PO~fMf68qpn0q#@D05&N2 zZX7(a620j0(+)o0{Rq>dvTIqll#iXPx{GSP`<0JB3E_($if|TKNIK9SgY ziSLF!dmh^*`%%dnb6L1La{ZkQR-<*)$g*<26x$X&ERO1w!Om#hjYYFO(ZzSW2jQ;X zs+~Fe_x*iCr^n`Ht8TLO*$Q=b^JB#W#Cj~YAUKs}R3EdRP~6tpQBj!pp~L8 z*uqUCLDW%a#B<6!D!#a&3Z1kP_H-UOJBslA=sB;C&0AO&?jIE|ec(P>3UA&Q7QCA3 zV~4bD5#LC%Oi2*GqF1|FiwnETE=X$i_^F92FLk^A%=;>K{#>@bwW1aqBNT-T@`JM@ zY-jrGxx-Vt7Ps0wKAkLY&)?2YP0;UPda*WX#(sGy+0A|+R8qQFTR4w~}l^|?3cI&`4d7&-cNa1FX z4m#tj5Tk-&|1Fcrr**vSgS#EL&wA$N^0K*J4^pqTY33!1{V%f&T%TY&w@r3e_%S?X zuo^F$Tyacmxpd6~kHuc>goAGX{_NF~2UPyCjX*A1Cf%+vW=6`|T1 zuRF#1ZJt{dX?yol!{$9Q0;S^y)*6b2ed1BNPVP^TQ|DUaj-d z#<*f&x!Me)A*GN%{P=KcLn?&F>f8&JbKNN^20qXugx?q9)0N*hA7y{)cK7V<(^b<( z3!kLzW9-mETe{x&5t_h`SelvQcr!g)M$2-(hXuZmb_;X>ymYQeso7_yd%Fz%EOT2r zAr6YMSum}L9Irde>Gq#}Jmb&mdZl^YKdi!}qJ33Nu+yY~yz&ThcB_N8TuwH3cx`*J zsE2b46~DKQ!4-NhzqgwB_-I}n%hNhyWm$z4bWb0oU6Z^8{FwjqqKr{jL{5Ln&PCv2 zlRE{6k`PV<2dIU%G9D|V(c=2+2F9Fe1cp+*ya!zG9sXmMe30ZPRgFZqf_s&=-tr{Z&wi( z_Jpk`jk~p-&_$I7eTU683@xBC1a&LQ9(WA*x?4^4k*4OP2+UGr4L3T#p6C1fpm3c#&3JeEyu#JGYNw^CwyJ)G!fHopuZNj2x!a#q0#~eMJF5DwrtdB5 zA+V=3Q0_r;dStv=KZg&-OJ=!P8t7A&mt2+b_$6v;7o?8g#J+2{H#Y@u*5M*@vmL&f zWWOM3$u*SZW%2QFbrzh z6_%_hd=ky#K2lQDQxDcvp2*``^kkl!6TTBn$5RXWQWlR5I=F-71(n%7?6*~UeXnf^ zT~v&VPf^n2?vkQzwW!#wMGt#?eb-iOBicJ7&wIxo`*vYe&$1XRsIto@r~wXAwIj;{ zz7-uC*ddJ(qsR*IEodwMwI>HS$t8gY30m!wKv_`szzHr@Gn&qETUI)LQ)fi@w*}tw13^TdYU)LPX$(K>gaAE%Sw#AEP7o zW>;$ivB3>DREAim%J(PT^SsOOp4yJvuYS3XT$u$8v;R6x6{L!lo;sb&f-teznwo3- zm1osa_~EkB#3QhM%E?B4Tr8MJx=plG_m--V@hS}NW>i`)h{lhaM4lV8ryYO?m+?(1 zF^+%(Pir8yk2D1#l+Gzsfv>+@Y5tw|vVf{%ec$p2%60d*rs7U|Txlm}Q^zI4UlWJRQpQ%!5M<)Xu=hri2I^}shl6;oDv7abh z5_d0hP&EE>Yl*;4=cbscGV~Ac8=JW0ir+W!!nWFe$YQY>3^$R`NfmR}M<~+cOzyzF zmM|J|hvrMKc0#e2hCxF%ELM#{?-DSo|98s-yk)4fJOlc(fq%E?|4-LN&;4+%3$hB8(i$Bf%7pKpqmOq3Hhc2I5hlfVd+RqK56rtj zXjCl$rUT-%5P&Xj-F80o@Z`*VdSTOze$++7lsifZK@H3Kt`;)0o7rGBaJA?wg685= z3}D{h>|?wC!^LMUQ3B#`Vu5da{?dUm1lPkMnF<6~BSC8;xI9vhBqiS5?K-3eVK7z% z4M!ar$cNo8?pi>iOYKLN$KRB&7=APh<8ifQD1!$JvOnBS0Lc0N-ggnd1ISdoTsK+P zogi?6xFg`W5c9(1k&g*fpx`{uj~M$*W%tL88M_lOPhUqXD<8z-KK8(&lR3-|xM3cM z0liTD@O7T#+qHXG;drQ9f>?Ou{|Qo*JtL;KWH|3!VIu?LXIs>wjcaoyWWnSy;V`I|^vk--6%u$205iY&1IQGyK!Yra=k%@)Xts(0@6F3|D`!MmgXYG^ zfEA|IhBBw>TnwZ+`Uor|7uM4uwM>f3lkmq&3P93=Aq8H#xP(rxEXX^)Q~=WJbbA82 zWWh%~HxcMU8N!R(C38o)A=k@cZ(X^K+sU#Q@ zE<^*+rfrnyZA6FenB4;OrI@*)41Ay|>z$%dz_2sOCNJ z2HMknhZ|V1ivwsso5+ER+qFXR8^O_@NN= z?F^_HW=&|~?{#hR=kjS}2{C^&-3`3g&ERfuN%2T+<5wG-b`Zo zwKg+I-4q@lAz>UMWn}KE7SU;2Gat!AiTEm=U2hji8n*X-4bmWDua4n$A~Z)KFQqt; zMC6;e5b8GQklpLSy&aM|8@ipy7zUcf{@bI~z<`43>fbuca=-5!WP8AN$b~>4%+3>O zAg2N_u2%ZQ@$YAq)*1DmF#T#elW|;^($SyEyle__mjeUH56vBy?(WpKW)W& zRgG;_WJGvyWrt(*O1&ZrZYYxT^cTiX>J+x7xPl7BifEn0Cn}0BFA2Z)2(Nre0*ti3 zUIF3(V7Ym_tC5}qe*qH`mUCxbyPvyhd6$TUA%vAzmjTXA&fwTvtbL#?Ld& z>p$g--@|2b8i$6(N1S{_Zk}~)V+Pu-fqI${m;$MQ;jZMo99lH2fKNOJi6u9r(%(=W zAg&pU0}`q6)SIQPc(THJlJj5B3WYGaAluB|XNS3Kg&c1>KKcC0(+R9n#ZMm{B#?74 z-bkz^0&Eb96Na<2LLQ(+E&JhQx>6+u&iWE+rs~+;clhLIB>UY5JgoC|$R}5hKYyjF zNZYzcjEcLYd%hbrUEa$|P48|O5f4Q^VIf81M%IMI_p^FEa)qrft#nx-yn+@BU%>fI z`<8IE2SnuU+qT@Q?C+JrMVkORu}b}G))7>e=NN8akv7`V zP)7FY1EvYkWIaynCq)t!BDq9dmUybE`}ybZS-F0kx?0vNbk~!HCWC6#c@dn))oQ&h zTJhiSt(+>n+Xh@t%{r%SAQ#n+cC-Ey&C2D~5(tNq{b&t+Ur0`NIc*Q*W2W%iS}UDI zU0PgGbv?+I-*{*0v0*Ece>#Lc;2*+?0ldRIXXGcnNAP20DA2C6s@>( z^X*39Wx9GKr2h~3Cfs|J1IA5>W17keqtVhT=e$KDMacS)P@*IvKMrY?7Hsp0i5y*w zxm6$5ei~}3WG5!lM}YK-@=AsfKJl!7Xw=Dsn`mbxqG*w#XFpf6MshnpuA5Q0CZZM? zPcHf_dId0JD+*$4BWT0MF}XkaH|c1#B>qY9V*YgI+#CB5`sXJLC)ZLzLOm-Bw|Ch5 zj^?(AV9;FG*^63qMVA0b9C*qdqY_}R*)Og>h*<;F*OFgTN-7+j9W-h^?ck+vCa`m# z))-kFB5*t;jhhuN3r-pHJ=rtb86$`fG~wpiI6jvS+HC2bcyDl$YKi)rPz2;#w9Ddk zXhbtVM&WQxp`Y(UpMXtXqhFNN=ON%$Q<*w@^5%0R(#|tPF9J1@H@vX?R_|5`RyC=Y zJcQCe(We^K%o}X%LD>?g__YxtC+DCy!tgp0#T0Nx)2pn!isZ#fqfmBLs>#S^8{~s+ z<@UORg}S(Skdd~*a-uirr#OSH_g2-I#mRFSRLe}t(TG_61GAml02Oo26hG1zfpCNNC zg}5%!j-N9F2MpP1K2^K__bX$V3`EPVkJoQ9uVEp>>Po#kb^kn5>OXepTh^s zYTWh&OZ%JdUmL5cBHmr=x~RctRN_mLx8Q#^OdcWo|C4{ii$H$vwDqHf(O@lpm*|G4 z#41FG)Pi}5NfO;SJmQ;CO4?mYlm4=W1J?<<+dv-fh}ks)qygbS$o4C8UU1~plsVX* zT9BF}{8}Lbn4`DVld_wSmNy_lZ$tGrs>CdQ9A3A-$q)6kWp)>f+km`Vb}|%Psxp&+ z0LxV%;3w$TLH-Rm2ebcaHh@c@(GBq49LR?FTv$jWPpz=`5ICu8q%b}>&j$l}85C!$ zMH2;}SS13r(YQ(E`@VZd(94vk!u0A-TFSodYQ?oc1dwWC2VrF}mH!#KA&4X267U?A zB|rM1yGkk7?Gokpo&C=cxhQy5sCSZsNlY&i*m|5cZUNwb9DD(XXb)mkGelqmCpUg@ z+&20M4Ce{{4`(i^t~*7Gf|VR5Z$DVI81T3TSdU`ngnBT!7;Dh(mdu))}ns z9WQVc-enj%mq(~{fOotfkfA~w;ZEp$vqS~p&CxJ0ZjJf+eguRZ$c^D@HQeiHk^)4I zg=hP@ZS)#xKwl;DbKLvLor7#bP5o&0AOAj#AZUO4cKqg|(pUx@{mUQLX#gYV(FOdW zzD}qC14IZG{GUG}EMiO0_n?2Yco?}5uE8Wm>?4+>1(wUnqgqCUP_{ChU$!{dD-Kd- z&VJZ>MiUiJ$paE_CQcqLvm-`rbIa496k>kbLdu zhN<(Z02&vjn1|T0eS7F%jmeH~7lCzaQ%HC-lLQksz6Jut*7yNonDv0i3$5kfR|SpK z=HY)`1!2CJSpNTy^_qbP`D<7 zme8dn2?k5wT2bTL^&_UTmW?YiM0?0;Hp0O2&DeP(shZ}%^%QXI zGc8-qGOP88b+>fz*m6k3mu^&-37;BS?^;Tw7_?$M>99ara6SEPeP%GZxSR1VL3ewi2hNkpy0CI{U-Zdz30C z^jcwiD~%gl5P=vtOq4+JcRNpSuBdS#D?n_~?98+J_er(4FGPh=gzZ3idZiXE`l^K$ zlkHMt<_k9y1bH8^>WNzfR_p)p=>s)|?e{6g3! zDb9tkO!1~^vGTPe0|`%lP#CQ;neYv8M&zUsX@P>;+@P2WP%dXeaT&eV$&4h=;w_&z z$hqWEO5+j0QrmLHk(?5Kq6>(+drANe*@O+`rQv5hm25;(LGgwCVHcIJO!OvQhp7!J zdPgLIarX&lu3qC)MBGYOxQMpDW*6;D69AP3cUKN=cW=Npjr_4mOl;LAbZFwIKHR%s>j|qkWzHVpmw&OB>5=x0RO3wcQ6MojFh7@D6hzY! z1QwDO*C>9f*i!b&_CfOpzrs&8NyMnGfUBchjgKrP&BHtX+1jz zk}?!GwC+s?l#fxG260o9j~;^{mjN)9Z2;a;=#Rc230a~*wl;~5ug*(939AKgKs@AY zb1tCY!qbBFHV$FaM0bbjO?VR&rSc2-?(AbAZt0E@LXehV^4we^M9l5L+=h_i%e<2k(?I+cg^7NNU zo5nqd6j@xsFl1daf=)qrH6g?L~MQ%CO#TM@7s_BxO zU-sUq8wW&jAj^gA>8InQJqKN8!GjU~EqvKYx4?s6GpI1Fd45h)dt5J`n5%9hFig0% zVv`d;PY%qeu`{QJQU!PEO7qQx`M>06?L_wDn!zTUZ^+|_0f zr1rYZLtn~11$o!x=~Ag9a(@?4zy%i2bv|;sCevyoIgGQpyU+>Z0k{Pcx`IyLx~cR% z<&LfL{V!`LUVn>U#|CXa_I9fLnN^xxS}1lkxZ+||{=vRMC+3ZJOSc^erSJv2kI0v~ zvp4$=wp-w-yS9&7A4aAl7kC6mX-X$q~6e3CzO^HxX|HM1X`4GIpja2klBI%fZ zQ97ve*hRYvI^%74#V)Y6(p)6_(W>WhdTI}Zh~%hWeCGFT9`QWbcMVmz5Au5Qlu|-Y zG@%OWPpMZ-g^Ez#T@@Qd~eaiT~&=F8WN@Xlizk2Y+|ET&ZeDfBE}O#_#h_;;x19X2~;; zVsr)mkrZuMg(4`OJdsA8&#U=^i^S%tMCe0=I?AmoC;N18KZq%o&U2}Jxkt?un@*7)+)Beq2TtU=5vkk7X=Z`Bx#y(;$3Av*!_YE007cz;@Eaf?~ zESDc#4{;0kNfUZtls#C{TUfN4KlZbeSlnIl&csiwX;Ox{xsmjyjx>0>*jlnz|{O%^viYxbTKQLjdm|(|Vi3q({-(WZo=T0|rh@Y%Pzd z=ugO!oU==cwq0qpc4~1HUu1e1Zm%xhm^9G`7_cTS9NZ}rzbeY2>f6SbPcgKIWjHR1 zUSMtyHzmm)b4sn}Y3z{?;%%g*w8wv_p}L*O6JEhoM`@#uY@?fs&H2`M(;-BYRpc`> zn$n{6v7DYF(|F(~ia=Mb5SrAz((PF75xk&~`(=fWA)8><_nx73!7Ogqw9#Q+yj454 z0{kj%ReLK94zB(o-vIH1OfXgZ@qMKA_SUIWk?!I9k@|+KsWWRIbnOaab-X9(xEouIx?A^hW!_KXKkW=S4Hfg)ndHLNr+dPGrzN zdsA8}t3TVmp!$)_q=qX&8tJ$_gv;+hJmZa*9018qj_h7>IH!Ew}Znol{y=D#Dw;`^|}~QqNw@>>nmmDv*E2IwEpS$R_0)bcc)(j zAOFhhk|JPzflh)cAR0u@Gu14O-D}C5V#bhUw~qtq!!y1Uub&NOiHP`7nKLKihN{^S z1JVVdB2=!T(femfrxFTtzY0>3@TZ5kc3iEug5QO;Wo~1KR<)T{hkSn0arUT%sf;{c zI7w;8MWv+ldh)*VN!ogRyFS^xp7|ziQP117+BZuuSH4GRKV^Cvg^4!T!7!$7RdM(9 z5pvc5kO3g;kP%trNz159=BktsYakOC$L`eFs6KiU@0<}(T$x zCu1@E67~Vn3%m8}c$&HrR4mhlQK5Om^Ea##HqZrr8QMu`T?cApOp2Z96V8BUh&pyj z)c-<;DzwV+#nQwm5|wbor*X+S$LGYt$JP0s`Pa`f`743djiMbO38uV5^8Ok3iRf1i zAub^?U9F#0jTCLJVN}*qMCMRzw9mU79^SZf>_jRppWH5MKc(yFDO~e4kJC09Uf~Z~ zmcf~@%pz$LP*DYV*Ott*B`zh7eeQ9wBY6MMX5|Ks%wyTiRXfI=a~JFqYHRC`tu z)AL4q#S6m{Bo}#VbIkTp zdR_doISYNKC)bUVF%*^1jCQ(ed&PJ*M9cR~mL-$*o^9`WSE|?4+ule4AkgbWE2#VZ z_sG&AMV`$+;$&Pmnqt6<-v-($ltbTLWcaime{DQMzTVHqzRD>pQAC=#GF->e;?;BO z{Zq<;kC>kJef#j4w=vTGgn#FF*AC01y`tDbQnxCV`nw9|5Mpw!XB80B^vUVQ-ticb zPrMSnpUr$oipMB#S&}xLrf5FZVLyF_oT;L{?YYh3@TG@Wrc*^nM+#sVE`@MsY&5%T zE;U#5aq)D&LP4LF>f^QPswGPby~@jaJhT_T8I>rx zAcyG1@$tGFTvXnMKH5{9+jE-p0HIa?@GWY3=0q{*PU#)8)hchRHlpQ0@lraTyV2Bq}8@w_1&e{fiw(9b;37Y+KZFd z$v6d=Kq-JY(Sd+_iJng6Bs;u&4CiL;CC0`4kn)=Cv6lg&Z4XbX^sSSv(n>PntfR$# zInAbXu(epP(Qr_PG`dn=SHGHh%V+Q6lPhl~+N-OX^Uj-sz)tiBiS2JEHep218Xn+4M(@g?QwkDIzwS&`8`3)J5)!f1$? zR%=#Q|KYeJG9O!rOj0z*6#N3*ZunU;sc_1rCA8%8ol9pzR8m)~$ZZ3tY@>?a@oapX zH?N(pG8%t*=~)2i3uMN2OK@0~Etus~-;>%mJa`?Fd3a{1C%dG#yaY>yyCLo1Z8oOI zL$n(G1LV}I%bkJ0R_s%If*T4KaxGhbGd5_rU!hKRWyy3gf*HBHjrAwSYw(8* zJR8=GX^vLnABd4)n>x||D)s0U*YX>MAn3kAiiE24UklfUV}B16%q1mA z*!<6wLWTbS!C$!h@+1n>j=xC9s`l{qM-uo8S_L9^zAjfc4LTmSeDG#(0V-nXGOUX~ z6Ww6FBj|b1UE^PHgpUP~v;JZ_1?&st)}?}%c11e=+{r>(y&w`3D1MQ)L*a1m94K0= z-Jog-n6KnRT|6vGUk7O^4bsU|7@-a=uJG(AXA{GxU&P?C z7i%pHEheinPv`co)XWClk_|I7%e?)yi-p5_sRZM%UrIEAj{9xcIss4u}UX2mK7WzU% zlf!P)ty_Xadjpl&SM5=}jOLG(WDbFI_Wp0Q?nih62(faQ1XE*v3#gfI-TnGX)QeyP zO!7}U>3&ZlJ72u>6K5G5DQRqXq;zSLuPZUi=g;Z_|*anr#~RenW7 zDYxtb!@YK!naGYW?vUXJ@a~_*3*cR--`2Z34Uk>7)i>aY=A@K-boZ-Jf6^nk%)+!d zK&p@8p$SO!i<3OsBS_$H8bl3wV>YNxJv-0F%b1eD2m5;vlbW)ScB0Al)NpUYidPV%=+CBuL8o_}dC6 z;Zq=4Hudjk=k8Zx6l7uupH22;lLyCHuyaA->|4!Nljt{nIl3i$jr zDoC*^GZ8=+L=6sqV3wdJ^j}jBT**^;0p$b#zZn+P5;g}(>5akAx7%d6fsV7f;!j{r z2VH1AG;;1JSP=xI{P`8&qO0)d$rPp2I}Nxm2*Pe2;|B_R>A&XW=tEXu0Ehp3a|B=1 z33lGUFO$VnYwREq_IF`Y`q;#n1U_hmM7rh!yg zae_0k?}m}DfjsVI6bhQ;o`yz%pjbKs#P71{6$nBjcq#7zi`nzyH?tU#b)YA3KgH}^ z?J+#Gr$AH>$XVEZs3F4~df1WM6Tu5Et4u(!Gv%o=ZMrbq3WMB(nfMOxr0KY@tGYtX48sj~yr&u8>60;OF{fTa< zb({wxeIK2qf8Giij_Sx@QEECyb%&6%P6xnwOoi&VJ%9`togzUPIJ7cBi#cwsQ^6NZ zFG(syjv<8l0{r1~+PzO8xAun2d`>0?Oq$V{B0$d=9bc<~=?BEANfQm0ZIA?Nr32uO zqJ~raw^t`#YOpcOXWU+<&^LtOKHz&i3~X6@r|tl2fZl~B8OYqm1WHJ&8qs_s6%!%de% z!#-oX2w572Ey#zs#&Q}xF_uNe=kNBSID)&0$7z;am3iY^ekWKMbn)bzX`h=Q4imxi znBZwNG0av`1Ka#z2jAc57l!W2`J zCl8#46qePVuMR_=rw})yW2CHIatH;{Gu+MH0cdyofe;%nG3AiL1|Y;5RZpHJP!5s}FHki^u8$oa zY{kddEW)vn6CT7ndoS`v$a3SoQS9Na@1YCpc>=43>kE{Ty4E`%qGwkby*dY6xCc#7 zk4gue`FZ|!Ztk-0;VzU@oR54I{!Y>2B@fuqn(io*@v>cmSXuaXkhmarr8b9Jh5G%= zmAGdd6BPiSbQm7K#uz&jbUC%b3>Z1?kX#gC3o)1MQM?c7)lfzVMJ;M=@O(w5s)qkX{8xD1p#RVsX?Tq89LVQ!u!9T`+4@-$FYxn ztT*=y9p|37=K6i(JU?gNhuDt+pTAjv!%Yt<4=K-Bb0x_=D6&r%qE2!#%jRnzQ|B0Pyt8jS_WbhRIVZo0e|vcBO*>6xZoYd`7L?o1e5 z%4gvpEx8i{0 z2d9lSw3huy-+f~~No@BBx+}|XA%P8Z6GTg;MK+k6Kos``AKZ+InEJ`0j*p4_Zgt-~ z02lbwuA_O+&A-Q?a>7vcvNdUR5PdhePnd6Q#a3cIjHJs*O>*#U954QzE&OjC58f&ah%MQh zc5SYUGu>2YmAeine^du7hs$uIiLzQ~J>Yuo>A7*@eNIjBs`VG$bs&cPYqDes2bB&( zNw_-Y@4ugU3jVA4B>Q}fAdH9*w(?cKC4nzHu`z*Ng|egKF}IKcoDL)RbT$ZUYd~u~ zjlNqo?WIKZ(uqRR-%inz^J_e>a_6%?`eM|dICdo>zZ@-h&ZnK-0F3fr5Uh}EAa$2G(b?q0ac5^$R~ zjP9sf0V|Y`Hky-{12cnVUi7_~)DPkY8Id>PMGi?Gfd3K;{j7>dH!!lfpfJ}YhfZ#g zZryI6P--n3*VS-X+rST97VrtRI@^-sZWSus`yZRgM(+_2g{4!!#ON)`zg9+xG?gdZ zEX$K2#&K#&{yb!~GTYa>3ObJ(vuT$@e=)QI?BPg0c(BK*7ZuUVsBN^dvuY z*jQPMSrJ|oJZhz-yi6(PY*~H#dEcK+C45ppEVK#|d~c>f@lY;}d6EWF)eh5@Eze*J zcL9{uIM&?l$I{pj*QOn}*NvZn<977rF4;`_X(7@p|L9BV(H*bv9xc`)lFkon(SDmx z!Jd6C5o9rK`D27YemAaIik(;u`>7|OL9Q(Q0{PQF+%oU$Gpybjpvk|EXE*}t$|E}W z8l?;F_bHFhB32!%vIG}o;Yg3`Lyvk(MVT2wr#N!MWWR8`o7>)t>zS)apTt;gW`DH= zChgeA1hpm5dJjVin~)5w|6s9M|7HXL>v5Po!EYm*g=S-#a-C5&<>iXG zJAX0+FcZ#^WEP1V=Qe_Mswq6@FaNn?;qBGaRC+L}o?`V4UL@zGnEXU)G=_+z?t{z3 zW~*qGl<=rUStUZti(%an?54Q2E1wSzL=CgYJu4cno4YSHpznU*E4kb5{8mdcZ$4KD zsjAF?ye_;riLDm7Mcw9A7kZ^`_v;3fDgsuYA3~{9IO|iCe?IHm@#L@*UxSTbC+;@w z@*3RI_mLRRA>m6Q!`vAQyFQ-ai$#y9_!s$Ff3 zgdgY$&MkPPh3FrpSoIL7F)b;2F|0A%he&$39|K)89$X`3G8aHm<@6r74_>llzUpsR z-MTD1+extv3F?`*%jt`#>U zL5b0q+{N>>Y9@HNM2c@cQRI6e?cDQlucctcYZT4l4oFlB^T(OB;;G3D20Lk;y3S=N zn=x)`KY1!|-}2YT4oBATK)(x$txCv|;%IlLT>gOYV7ySewbKpu)6%2WwG&5y)Y-bc zHyw{&Gyh>2`of*wdSmPxlK6AeD<4E3+^R<*Z0}Knd}eQ`owsxC3ez01EAeCEn4QXL zE%VAKW-7*Tnr82{UGL)G4^Ak6fqcS^g@k}VKmu3TSMD-YN_1jUJ@<~fZKWoWy~$L0 zRE@clI>|)tOpME_>-~$H{p#t|>F#NdT*n$fxt6g}DiLh-%4ZNqcUP~VR;+y|j^E%b z25sEld+R$ZD z$o*fL%*BoGeqw!BOoXL(3JuwP<5oRiT zc2onU`FyoV^gJv*^U!mkAv_NPN)ElK6p3(Elogw(MZaV?j}k;xFf!0&7H-X;tr{2L zf2tiZN+^3SzsD?;v^M-53^%L#4t|w9W_J47K(gCr~~+O*$z z;4fQzeZDrQ7A{L5CnU>U_r2tVq_p+(xWq0HU)GVb4jA+nd*kw5y#$0PhC&;%qnT=} zh=2VsZuPOcXrx!YCT#mQywtjHJ=;ZkTnbO9C$nbTlI2kmr@#s41?ue ziyEyMeI#-3>&Qw6D3Sy*zGQkpT&mW*6VNgd+O z&Bw3UIA8KDCk$DbcON9}xC;1(WLnU$;b_^eVc)SMVI)q(1)IEmV?FdWLlJJyE9w?r zX#OwB$*_mxM;Lr12L5eZHN)Z%tat19SBZrm!<1*$KaFm*ie3EaeGRP+n>U?0-Dia^pxp+IH={R;b#pyjgO&uFwD@C6xmH_W(RT#%?HTH+4*)+-t zRfJX(pK01^3M1Wh?FeZx_V=~w%CT45d}xM!PE+s0y!zPeo+vP~Ulpx`F&pRUq70$i_qPK(Q?f74cgv=*;IJ(k8 z$GPYue9~DbjGQjR54Iw54a&=E0(~$_oTOCJ6*VITd*M9>t?+3$!|v(Y>2bpo6{k}k za$!xzvH@c176pI2j(7))Jv~M8TkY3uw1avn11{{pg-iLc6%iA#wP)vir3{D}#r&4Q z8SmrU3?wF|Z;axT@wLAC-7~-+9BS1S=$!O4_FgT~0y!ts-Gz zu_~+ATb&E$o%h)oB(az4?VQ!Lg$NnABAb3rh^h>(DkFp8cQuN&k1q>e+8wM!e<>@LmjJM6*sTfs>y8&>JS3u+3N{WoLIrU@mjCVO<%jxKf&IZ3+#Yf20*_8pp7)jMvY0AFO&6$1OMH*cT zHR3{s;Za#z(J=|KaO~NzrfYltm;B2U&{H_@yV{*k%`ZBR15SecL1Q`77$}m ztxSx{j@JUn_k2VB_tg%#f7K{(nx>8jkqE6WQuHbJoy!QB#aZlbtQt2vcS-s%ulDtB z$*v#Scf9z0r)4jlLcR^*IiD2lu-V0}!j{$ToLvX=D~)%dcofRfqcP|fnPq?N zx6XsM6={1$qmQ+#d%bS>e3XoRb&g{|Fl#@@F-c`y(-8!QgYjU}(9Gb&+2UihQ38YS0Db&XffJ7!=SwZV%@Qw_S~Ez0lOaI5#Q#!qn>7Ob-!3_xO2A14`G8 zhFR9N++gYSv!IdSvb)yj5|ySY+R4%*F|HfLS%@r=>8~1(exk*SuX8uG4KuSL`{(lH zzELQs@uvxMXjupgWQFY@rxM9QTWvQZx|juzAHnt2e(C!Rj>sx{OffZ^VvQ(p zR~)`$GGKfMVj|7ws>0mnoK$?Bqm@%d1+-E~)F+zCo5Z6ox?(93CB<${maAh*3UL%Z zb^Y8S)Mhc!46}v2rJK&B_LjVWI zjoYUS=J{&XFay~l@)TubvxTrgPyd4Dxb+{klLOdbU3M_07K5LuCV@T*4E8h?XAW+# z0T{c3;x@Jz4jXy`@{4)!i`TTx~NWZS?NgF z$o#nC>SGnE6nes2{+9GyWPbkf-$#}gK?7F0s#+Wo61B6jz@fI7Kc+EdXY1$y1`z#$ zu;!M|xbq>AKr5_ftw?n7I0w!Ag}_h89EUATtN0cbdZX*Z6xFm@Lmm88u2+ zNFaJiNXt-qm~b8&NEn%JF1~+b*tQ% z;%Nj!$jnZOkh!LoC5(-dQbzu;+4vb%agn(uQ$;RfBcI@;O&Ohf%@4X(TLFz+lj$M@ zo&?H6GCbxeO)3e7u5e8*9eVt`iIW-fHNmx&xXCADQg6VJWAW83Ci4gAc&dx23&It( zxHhWY;5Q{Aw_JGPB-nmlmGcgrwy_=Oh1mB$$w%PTO4lw5Hx@=US&j&Tu8$&{2vENG zDl6=`!ghE_g)`85;zm})?zFn7a_K0)zHe7x@kVk&+pG?~0fELM_k6e}sd%%d$fB}i zcLp?sjxiF*8oMiq5-O4qdf*)@dv{}UtO$g2M8k{eTs7md5wl^i1ya5uMz75D`VhCB z@&oRZ5Q{__R*!K_CNM&8g~+O>9M&kp6dHw0ejhwW`p3F%sMu&vSnPtQ%#iO zEVe3=FMS<> z{hTmStAFl7V?%6IOffcgPbD(|SUqhw zB1csZy&P{cc&Pd=NbyM45%s9^CC;`i^SNldfXjhWd`)^J!>=x}H@^6j+$wx*H(K$? zdY*8HeV3@gzq_TtxkN=1LQU9&w(>Z?;p?k(ok4)GP*URM<017)HC=fn>S%>i)-NAY z`K;=wGYF{9w|)Y??;```fsDw2gp|-mP7{pVI-Yb#Y4;@vuV&*)lK7S5P8xOMaPS&o zo3&`hA$l#p0_o39Spws;di{*zfqt0q7lL~YLpl=y3De`07>*F%PkU!tU9k0etE6D{ z+Qa7YEvuF>*6^%~5}q{*jy@N*%;kX0-^+#&cX_s=eztZqVQBg5y;TnQOe zEtRqdea9bFTOgUJm`sZL_5R%4L*uP$mfxGtCFbDcsk3kw<}2!2>57WZRh!=K*$Ucy zDJvA>+w9BZMx|GP9F+K&u04l|ub)Ha&w88p2zpud|Z7m$%T${wW#PHm+@CM;-hx`_+n-pUi)hsmG?UeF(vUiLH7&G`z@5THp;jrv4 zWiFn}4Tz-O=5LSrXt*^W+XXMHGu)>|wI0q1`BZz12&0ZA-vwOpmkwdV$9u`yYivuk zDXfswpaMB~DRAD4^#?TNwzXex zvDXR$$Fd(s*?!$7bz{t&vSr?10Co3kbYzvlz>=AMP6BAMqIJH?JOUoYx^E+XrQP;usuIxrd z1ArX0q$P*6XegTyUgL_`OIQ%58PL6rjisEY(MHv|G_Va>UZll`U5%UzRhSkILE6p^ zXPo@KffWL@N;ZVN z7Bk9c$^pF%0}wzH_Lm*s{Fn9jKi27ITiw9_wsjYqA&g;0VoF)ue>(k*#U%~^cmoWy zcDD@^sNjQ;&_4jF9^sWc{RP@wc0s&~?xL3P*6qc?ZfKDz2nMX8h>?PsLhvD+#R>dJ z+n~vZ7o_e4z}N4fU|%yY+;EHO`2YZQFa85eEOUFaQ9_VJqk6rWYkKg$vRpE3-vS#|wM6azM0bxg~m?oj4% zPKw79l+I~2WMG0;1^Rz?%u>Rj=w3*Kag<=3MN6%{9rad69zF2l z7x+#eHX7mnhp+Pk!B81G%huhbWy8X8`}s zo#b(NAw+o5`i_(iwD3-@X}(F+D+gd5U66NwD@QiMelXhrFZi3~6bKrS!OT}5u>$$E zDr>jKXufI^#tBLkJz&PxfSm{;c^cR;lg6vSD?(NSzQmH-MwfHG*t{&*O1e&g<;?w^ zDWB5>BLe%uXKG642Y4YkI9++t=r=T!U~sLV^K+kdg`}2_dVKo*d)-S;v}r;c0*|hA+1r&?VtV_YJU{roy5j0p*$%x2iJZ+ z#V|VY4bR%adq~m**ZkLQBDnD8I{quobp|Ua=;=`|03NDMLjjqOXCn`~6bZ}SYn`%e=GT9||MbQbKXt}$#v?pa8< zky2R{mM7ABjzZCFK`^1)ROtu00(5*wD&fIhZ}{S5xcE9v zm4Co45(dLvIJgM#<|kjQ72>`JURc~Oyf74mSH1JbyOQn5FvZY&Md91M3*u`mu0&2Q z;gFUu@60=RS#^e-6AyUj+z+$WrLSz2`VGs5DU33e_Z%6L}IGeCsJxw~E7v zsC8kCT6@uKO&RRdC@>tL5PMQWl-6NBTSxZe=pb=CqCiqM zo+V}7Vh5(EtsuikTv1hJ50shhXmL5c0@n-79J+Mf$0EGbB13pi3We;*=F2M96Q5;8 z+3_y|re7EYjriX;O7LzU6Il8A&J;IRJw|P5+UaXB%(v3Edl)_A5ETAJLP^n(*l~xJ zrDpk=u~g6%67ISW?yc0f@9TsWQ4QLG6>gq_S+6~uJ-dL)_$gw8TJyelHv*WL6m|R0 z$zJvVnjd_tptOF%ixDFnJXFk(0DkNu?;**(30Hk4Ef`kS2a`i2$7VR*Yl$EEv z^-yG`!>Q17b8N}Xhch=~XkQsN(+1^B{pWZC=hg;ss@_euP7bRqDKX%1lDG0L?O9(b zA{v-RPapAm?sZQ)`uC~hlXAA6d&5z}(WwEFa5FA!DA!zj|GJrv{f;Lml?#P;u&k9Y zhXTrS+Vpc)lXIXQmzF<%Q^vALlUPvI5Md}BFDOkx;ZwycAE{qGB4hpZQI`V2pH*ch z$=;1gMR7%qHM(KHfJ5fq@<$S$rH`R^;^Ta|q^C|CZ+0W{g;K88O^Pn1C=6m;hN7fv zY?0zf;JoJyq!;`5*^j~tdZxg!P^2?pDZJHc*_fF98Duvb%qYk+tW|8ta0agnPdji3 zw%1?1)=N}OrgU3ux(Rhffy(5Ma{=CE8?UUpGnbXWE|O9XNF?8$B%#f&4AC*e=Z24U zb-qxQ+0^XF|wN-F)AHnq>`8EuYTLK?vF&qot2J&+T} zYr8QPo}1CKl+-oYJ7;dq6t(%K!A3xqe=5=`<=|Usd9u7BhrKQRP@>ywUP`*TNC3A- zmHxYr@uSxbp%QIfSPh!TZ}NBQMfmnVJs`1pU}-GXcLC0<0t>@jV~K8TF0#};+|(|v z4Bczv7xV`vuyu7M{B&hiH~QN_E(!C5rHZT@y;Q$mc93S8%cu}e(h~Yg3Xm}Q@6EF8 z+ab{6zh2({0+|nkNc=-TmG?2wYQRJX)|$71*SX;OCN-&+vB8^NZ!6~N`g`=1C($u{ zk6W%pkqE8~c5Gg8+?>u!NVY++$D(CXJ;UVqT*=#L=N6{!i~($@o5u8>6LWA}$50gkoAC&x2HNA70XH z0ie`qH-s$u1P&-z|a^h$m4%Urlg1&;>MZGiLh$w(If8T%Cq`@SVt9Afu zv|CqtX;dPjx~7pA)I`RKYjt+dI!g5aL!|qnX)w$Ier~g!?hI&>)AOApL42l_%xm|# zHZ3>M5R+fW7@}x4s_awl5I@6s)P%u6wtT!4xLjL+9t3j_ZCeCbOt$ZBWAm&)6nE-; zf@K&!Ufca2JFc~*ty@QD+v}h6@u}n?^-?KrX7YW(OQpZOa-N`=RRKAZsVyg=^fVD*2K4 z=n0k1R~36PJ`XVJA&#vG4%HC>RIw2WVZwInG_W!fy7bSci(!QP6xz4-B^GH?O-~35 z%~*ZYy)c*o(yMVb!Dcq#M1YK)CtNS$uREd!&lK9K;EwSM_rnm5o}1TFTy2YaWV?&& zgnqImd+Yv<&K;r`3E%Bc1aSYAqXM`1u@#60&{x!SFFpBz;m9>U4OgrmHZ&csL^vqe zd5I!_px*rf__OjTW0ri8R^SW_jgSC@;_KePmF?Fy$2d#A6J0O< zI3Yji2jIVbIa7`jBeKM!Tf#o|`J8Oc0TP+w{u$IN%)s!$2SLIqELYXh`pa7d8%6GQ`J`7b zrR|E~FVco#TzP(b&X8H;a<$(Ef?FVBE0_%7y0mElT)y46fnttn6o?Q{W1#*brH|Q8 zk?^AbYtK76G6Phj?hS_%Cdlmdko?Me@QIKU|LuS7Xo3StI0c^+MmR!Iy0-*mU^hmE z&r^nh!QBozgC@NAFb2Lq03^!L~@T+Se7%^3GFii zKOJx9+$vGCzlb&mN8p*b8UWMW=u|WfegG9@{><8xWdZZ9$U5U@ z>p3=l%$*Q26+E!bbB-bmkG`Zlw`fIejJ>N7H~$JFT}hAMwG60H*L*QRh?sBv>Z+&! z+&=!UP3eycEgwe!5PmP#O?{h1uX`X6rW9d+hmce$blb~5$EXocCka?X1vFhDaM5p4 zjuR7wI7<~vKk4C@o1rg&bTOYzF)$I-WFcY$*e_6Yk{mKxX;LNdKl#?Wx!FL>)QP<$4}sR5Xqr< z-+sAref2xY#r^2pEY>=d1&r@*DtejxX?(ZvKJ4<#j2LqAQtP79q<<%`c|H~xN5Hod zYA#Xeq=Gl{>qFt^jGyMEFpO)A6aw6any3F_SmIluS|2QBg?qI!IoVt|8Op9oVfav~ zUzgvWX4kFzf-Qy$Ase-?u@f>u3Q3wS(gX|2^ znnCND>#uyR9RRUjXpcG)H6s4Y;D@H^6Z}`Q{5RK#F!WC_a7_i(pz+L>blT(;gI&U=78HvLVZ7h zA?v9Asj>ps$K3o1-6A21eWlm-H#W1pL)Zu};=?wY$As%yvdl*GN=x`TJ2qM``G=!C zwQf&>YkqAQLluX5XBQ9+_D;N)8gK^e=(4>690HXb(&uuOY{EoS^8fgaG>+PP+W$5v z_Ao$$ckuwkjh|#P{hDx<58RRL}i;y}9Q+wOWMbE2xD z#+eul9F~<1cp0XKU5!rUvLL zF)peETxwFtR{!W{+KIg4G&>qO%3o7e)L2RiWDu5zDQU^K65Hk9&)=iLBr zu^IF4=ZB6-kS6qxyYKAg@z3-BgM&J|%K!Nn^8f9BeFhEs8;ryG_r?BSeKN2K^4{;Z zh=r&+KLO-o4ond={<3c_&OnSDi2DRwQjddEQ33zNHvIkC;(RxO4dNX{Zzbh}NTYvK zJF`e2{A@JmM?y<9-{qhebPDD=7kKT-}rq(suH7c#=Sg6QGK zDPUGLQ)try0X)x8E}-5bN4}3|SU(1K4x!JFdYC3fC81f~8~|@#b^iU85ekb)hYTuE z&~4JM_fnmIV_>bO{UFk9WVM`JEP0@>D0u896kK;UDd+04Lxb0|WQjeiF7I^#SBxpJ zF0j7?BPKgk_xDY3&oyc}2Bwj`h8*o=6Ua_<=12MQ`SGX&S(vsnuvzrc5mt$s>d$NK41VPz+X_J^W#foCKy zAinewr~~=WTvWxOUm(2L@;ordFaYj7{Kbj^*r@(9 zL{6HeggBwSPjAIhp08@$*ULuJx_UlA1WWrRpWsv zr$JEG8O+w+fwHv_nw8E0hUInW!=p2)kp^eutl^_YzBMR~aga(| z4mb21P~k>*7L$3EIZAcpW9XI~mJ2J3aLQD*&;-?}7g!sOe30)w6~6xjc%CufTd!{4?RBsJi~-`( z0{n=)tKmD4AxNSJ0;A^JQ|asgAoC~S(J&0K$V7PR8%}O#OAU(yr-x7s7I)k79SBM z>ZY<7y*1e*OTLTmJWc`I%P!zy*becp{6=sfT8`A-i=$Jsm8s zstvB{Zv{oVT?BHb}P?Zw9sNMC6{49h$6YOtd+*Gi=536 zrB#p=Wm%@{6PSb`jq3sA^-BWYAJ<#I;?y%)1`KqdT+yF-4|+LysO=Lv!CiC4=)VTN zfVMYBWN9b%Q>(#>FA<2(*CKh%;%izuSLt*^u0Kw4QakQ3eyot{I`RNyVo*fdhhaqP zL$8H<6^ut(9w4*#y$@8ip9dvC~L#13ARK#)^1Gu6T3tf|#NB5WQ)r1H8F zGbbR?16kCDO#_7qm-E$A?E-kyIuo6>oS*F5<#rohQK7=!er=aZUXkiMAgk%YnHHZh zM0gQVM&(q%Nr2|`rMfeA@hW$zCMyKcK~H=fz$Al@(>Fe$nIPTjfUG$1cW7hD zs>Dd*dD0dZ!i(deE?%a>htX6>k*g6B%Vv6mb1b#Cq@V#P{k9po+MxFJz;qHk9IyS# z%fi0?>^TLDtU8QCe*7sFkDR_?h=4%Rj=}p8Cy?LpB1@qC<5P2|b{Vc#l4jK{1t-tM zk!IT8K!d@?w;9NrCSJ@iw?)T_=1$9Xp5%#KzJN7heWHvTO#V0obU5nVrz3E^$0rWy zrf?ziV%8NMmd}^M-9Goenq}I|_gT08auF14d#?ZOCLqcVqsIut@alqv2oiGegf0Nl zGP$3$0$<5mCi}6S#78R!YJ5_gpY+e~SC#8rpB@W$T6};A#On)d@!f>FR*7xK-~NiB z&Lpha2UHq0_@sKx9;_T3dk%7xT!2y$O&P$nQ3zIR1}xJLnwLLlDRW|tugC7Cy#@3C zR&gYyeP>SFa}s*cKlmL5=sujeuSDvnc14UreQZ-HkgJm_++<>tlv6vtU7V(s9rv-G zvu|@!UimsZ;bo=BJrZWwfRJmOIhacW4*oHVcb0CmWfj7QqdX;|gYB@M`xR40Zwdyj z6JieTN$zv~foeK~_~-Qs@ujI(zSd6SiV_T=P4xfcGhyhIB^%=^HfLzQgs?THRbg1D zPqX>h4NX5}h65V=Wwl{!;m-O#P-A0I8W4vc70n9^d0XlrVmN5RFiVIxs0}~aj2l&; z;=pedXTn!?C#8%cCzea<`?iZ?w0^mzNzE0!PGisY>Z$;6d7a)5z}<}LXzVb0`1A$T zoz&UKWN7_$4#-nq&>sA z5br-&Z^k2+`pnVk2`%;xGoOr61F-7C^>_Jc(_elc#_^JZNDM&!_*bR$o{|s-XWrUm zDw*&OmL_L_(bSLFu+P?p5?IRWfV#xPGWS^rm7K{Ov)%WR&jDaA4yy67Bz!;s;B{mF*V~u>!X7}628&WY zkfPvqocNbL`o0+~sSO}fY3P+ShzdBD^;Y}efCi{b2)K(}C<5-<=YRq67h9tF>e<{o zqgdekFV{?!_u31UivK!D@Ru+yya9c)VBl&`b?+YruzoyjQ2+KtUGJUGsqa9u<@Fy< z!CAL^2{<325%pj7g_rc;p;-Q$-LWR%HpC4p%G%HD$EQACi z`d3>D9(;ZhKY9|XUWqB}HD$hj4a?|YwmIN%(`SB^ceckkt61A2SE$kj4(ouF9ILLM zIp#x58@xbQdFdmI0FumEFezW_(64Ox?ZG`HnQ5?Kp&WhC2=5A;bnza`O8tQga1uJO?3jrel=;2U!Okv^Xetevg67YnP?I9ifCcSBLD;bz@CCP+dbhPu-ZCo!&DcTp9Q@Bs zC`v`|Hfy;qnn{Jh_|h#5Xm0a2(pQBr>&?{5kF0d#fW)FBmz;SebLFTFjD&S((Mx$b zOKWXCz!ZHC*mP^C4_o~+WT9k(mC-Gwcv`*z(on0|H-UFCG-Iuji8QnPuIkg@Y}|Fhm{ zjerQ7P-o++u=F_!;8%25?WAnpZG4TlEODK}^yU}uI$n7e;=_|US|27@lY8N$RyvjQ z8R!^J6MQ+4D;i`w<+45ew}e{N=j(LMw#K9yR=8J|9j`nTDe=6~EJ-XMP&gXGewFPj z;zdC8;^*PIj-EA4o_@|q1$VaM)HmME@{)aD8#Nh6__$SVvD%%6QCRZSjk?2a8?PFK z!Va4=s7>NP5s$3Lf9VW0o6k4e=tmJ9<eYwfOwJ4e0AQ*J9i_<18P zj;fC{ZMvN7&l{y1Pkt{dYAbSDHN*N!x==2O7NctIWgaUQ&#$7_k-ImK8)_%&bQ+we zVvRNsvw{<|xW{u(xK_wS8f<=->#$ajR`DLafOiO}A8aX`QaitB_{2S_8u7yEY;Mbo z$0p0x$W})Do~@IFj4h$mURVr{L>)i@H^RVnh?wBm1?(Y4y`LpL90oqT_k~dj##X{- zF&#i{kN7_@9u3q&1066fc`((xL#hxy1ud8U0HD!u zZh4Psk3+?eY^bp>qp~+gahJ8`-du=Qs1sH?!eu9K@E4sCV~t?Z%JP6Hviuw<5r#Z}jHtf2I`|~N z&~Q+Xats$ptDOtK4aKa;WzSJyEX^_h%a^ki9e(JaKZlVaXHBm5TQN zyi(}3bwLC`Lx@-(NHpbTTn}Kpji10IXY^=ccf!N|d-nBS`@=q&<$^IcZ+>PWvQhsE zeYRr$!R=zF<8`iUrN$V{QV`xBW>8L7bC%T(-6&244`L1m zrjlk40&0xTFX`3Z)lYq!8e8F^Hx*dN`>=Y%ET9N)^74{teF#;dHq$`_CSu!cNb(@O z>_zya6>t*S`SfWBU?#T~1y6$RhrIqo@=D zfl0_;4vcAd-@7=HAu>rtP|efP&lU0jMveHnvd<|rrohUVDl-}hv``;}k`3Js=MaVE zBOlSv%tKDWm6gA-^m6P`R=uR%S!qHNc^*ltC0jsqNj_IOfQBGovT5uLI|LK>W;h?GbPOIofnJ*8-(qblYyT7DFsx<)-CN2IN%OWh^%f)7o6`rgEEmkqrg5Kixx z8ZGJRxqT50GPGGOmY<@&P0Ma{O0{&>-9KSL)NaST(|c4adnmvf9Qr(DYCoJDEn=Wt zx7Tg_P6$_+5_4y4^GYgK?^3Yc8uO!#FPY*WCdjY43drLgT8LRT#t*r*GA=&hpQCGV z#!<}gb^98s1y?=4_8IkIkScYHH8ZNS0rgAERP@ctpxfr~=8pr#Wm=#mGI8L?`eA06-R8pa8u>-e3{qS zJ-Ltk=-0P>a6TRRWT%gGuGPxCe(4s;VNP7;iO_NSo*gmlRNHO}^o3GLY>Cd#*V(h% zL=Ii*Mn;?I1=wNjF~wx{(T#(sWw=S;4fK%wz~Jt?eDl78xY@a3TtU=FvJDw+8Nv&$ zAD$MifuQ$;n|ivKgM3N1hHojG*@ZX~^q^#fjAN92@FjL7|->1XoF)d)=~5D2)A{DxGR zAfzR5-2Yr0h9_^+;kGE9D)OzX5hXEQk&4&yY(apXpi?B=x1vwFe}fq7z+Bp52~TNl z;jpv0WBcf$*xjTSyXR~+cQEAa!TwSuOP!{A$N)yA$hi4Qr#y!xP1&w~azP(Pww^}k z@FVG9>i(thjaH6DiL%BLyLNdz#pj$PTn_*(8dcnW06*SN^XE=n)nPk%Q%P~R%>NqliVR0o0RlYy)kFu zV`KbL4A;bbCplMtW65Ho!mcxM`CcO5XHl1^;fk?bqrGS$*PMEmeDk>vhfkkJ{rO^xyL@uK;W^QOli z^_>8>Xq#f+ND??k43XwfM?138JvV>S`Of_~#*7mObT-2HnDn@-?r2P@a#!8ZGcc%V zXGM}bXZM`gR@)zZo{PCXA9K9wll@0#?)|4(-S5YfkGn)DDdci<7N}kgB^1`)3*EhISPUwMZN=*V`3M=bI9Ei&$YyJa4?96 zh0R!Be`HyFDm7ak2LK$tt5XiodVOtp_QzGd$s;M&SrOAug(r%HMiVfM_ir|g8sl@v zaORjfq;6#)g{La=GI`r``E8%H`)^)L7459`xmnD(sP%N(i39G($t#F<3^*mW84~H@ zVrwS}2$na*v*Uzi<_&9C|wI!Tj#w$kej#8G0Y?My>z@JoAQT?r^a$g_*N+de3qKZ zIj5E~#(BZQ|Kv%_h(VLL=hTFmNrZ* zf96DPep9*78Gulgb0wn1Wg*=U^Ws4aJdCz-5W)t zj!e%YoriNg%a?0E#tHPOpSjxqi|wNCod<7Oor);qf6aywtY zMYxV7eVUc)ixGlvxu93tblx@GIQ_EucwYVi+^y;DT!4|R!AQ;jqV28YqWZf2Z>gaM z7^H?SC8P#Hx8b6@xU{Qi4h z&-}&fb(q8EoW0lH>$BE+FW+{M4yym zcx%+uE2W;AJU>D0OhSv`L+i$xms6Ol>PsV-3Tt`GWD{!)vd=-7aleC`d zZ6bC3Z8v!F)Vp*vY79zWf0ay7PkUnMGCYQBmzXZaB7N2JxL@}>q0^&nWw-gK3@34m z76~s+Y^S1^i~vl*B>f5PO~1qCXz0SlWPZ~(zV%UEecH__+ZWb_gTF=+TGIsdF}i)L z@gM9J4k!BCee=J+uh<~Gg|&A$4meSd^8FqfpT|*_`q_G)H;hho?Y~~93ag^u)_0N= zc6zFRm25pE4{30Xe=074d z3FFp*9Kvgd0Zh&VtS$p2_C5_ww;wmxM@D=ruFt3^2JYt*h3JHJY)%aP75CQnJPnx` zv?@*4c5goa;=B>nZodqK|2q-g&Er`9e(jxww2ETCyBR2Rjp+o&1K`<^e+98IvD6Xn ze4n|4-UYtEdbP^h-j--)YS@j0ISPG1VeY|oV9=LWLI~v8C};t+3>vt#i?xjigEwHg zPlW{XB9_{gWQ>|9iK^2hq^87Q#b*e~P$hapJ7-co+r7As2L6~TK%+b+Z2M9Ko1!-) z+mIg_vEYY&xSblJ2?oiaKf5%qgroE}I6MYP(qi3uK3&M>jLC-i@39DQ#MYKnBs1wSP<`a>oaT}c7c>Q5rOF6pN8e5C`$_Mha%3me&d_#f|12%$V$S{{rH{n=S;P3ug0 zQCe&?8F*zrU;p7G>o>-T25BigVMug<$ziLL{C;R{Q!QM{%ecUMDz!yLX8VlaZ2;ns ztsy@Pc2TtTXx#2RRl0tBswlOVxchtBU9zGy`8@X8+T})Oi9BPwVL`qttEI|_s<%MX z*VtP{N1B2$PM&e{6?(tb-!A^MlzhYbOzS5D|FPj3GQng>L9{Q6KJ^L3VS$AwnMdu1 z#sVAP{3-X7xiiYvr7NUQfsWmLFr8D4jl9V?-&am))KpAY&hUwwubkeR3Zr8b{HN;n zNYD}I_m-brQCspQ0_OzhDmNO<-*I=hBnqrH22&c24VwE}8yqYHoU$yc!@P60H4Kl~ zjP2%7KmX2G>i-Rs+HP+epylY!*a>;OiPrg|s^kP5h z?AqG%Ot;=}b>WIe;p$Ol9rI>^{Q%8H$f&mKGm2KG-k8uY@~bHV3~4$o{;Lz~8NBd{ z>tCBA_-w2pOHcxT=i&JERox*DB?*y6iK8EUgQ@)Q-U)}@(P`I>_PuoPBEH+*b7JV% z*%R9ZVs@=gI*tg}RlA724s%$cA@5PSjI;pWj&G9dVJysla>(g1N_Mrqg!gwo$h+;e z?>v!c6d%JQhPAznV?qWs2ICU0_EsYYR(f&0ps;$_cuQQ6*iqTJNA3*|{0t@tx(Sp5 zTEqe1N^-5`^c~URHuDFhU|W~wMh{v@7l=wrjMf%n(%ie?uh z24YU|=@#m83)Ob7KIxw0TbjbEulpRn3&T*8#iLOg94W5rU*d9y*M3e%l+WzR)--x> zs18PYS<=affyqyM>dcZ(BQ&&n&jg+)$V#pEx_l{T9%0Rr(x2nZsi@(%Y}}BQs`_$K zg@g4z*PDK|@$^YghELU*Z7-L>w)oLQ|Jkl-8L7$oRs}|L`R{YDHkerY!mdnT*EHz# zj(;qvsB%47`DK69K5eI%bX_<>sgzTziBzrc-j^_sxH1ix&0B1+mNWQHc%v>p5N6SE zc*a6>lS_@#iZFLqY%#7#`JK%SMQHX`5o z7_ds%SO5GPp`BHgINDqslb~brzseJXgthRN-ny^GrB{4s+#om_$G+z|k-sL}GUv2a zXEbr;zb^^IH2|BzA~k1Va8W$Grb4$T&f|Yp7*B~Cryz>smVeVdF_7s%Dll1p_1;(2 zTO`bARKW+@&lNQ0EfO8Wewt)3?w47=oZwf1}-57OeXkjl1qcB=aoIgxr|p*psN z?FsCA7(Oo0UUe*IA46QQpoHAWr%oR6P<&zc-gn>kkg)XPm3$ex^Sh}hYgTJ2ie$na( zgo!FHs2wmKsu?D?Ph;aN<~ZpI#IgzWX!IPgQtL8L1kpD>- zVC~v^oEIGhNzX7uDY%jNTTlFXGerU>QvmI-A5<3Fn(@h$nM!7BqbNFhpt*KMBGV1e_y z(DFb()}Y{*JB0K<++ID;^-tf~iJ)If;x+xRCY}@l{kW=!Goxl-f0@kKGyzn>SH)bH z=zdMV=Yu?Z_9>jK7WxZ3fY4u^p1Di+w_&Qer01dk@al&@Lw>b<)F*{}mM=-h1(~Xz zHMLxrQ{$as?Mi)g0&t<2Cq%xZoeYK+;jSe*=+mEfN$ZwCoyhmSJk-w*!z&c>vdsPi4IG!oa>uQ&Ck*j=>8*bD=9s{jUU$QwZln5j}CJ~C-Q!}w0hl) zW?pYv4ORl=>H|3#?2d)~9@}wsrvp}fF!|_v(Q~2~p%HNNq~Gu#7J|YhA-jn3N79s@&xHpj6&_hXK7!hHk;uh)LHw>JGJYL*aLv1+de74f^e+tIF*T{=A7g>Hd7F4Kb#x z1`|@_6TO>cSOLj>K|GNX>!}oPDF3Gd6*V_ax0^cRRI3O&enrNYiie~L^Ddvps)6dP zsE7Y5J?U3k!X|eRB6?3niSTpiQR-|K$lzIOT-iKwpaLo;qT}tMDombPFxN$gRQ_Ua z--QXw0j>G3+_TVd?M^1k$;VnL%p+Q6xn6{G2cX2Uk=V1di!kZymE$HZXloY%2m<{B z2K9P*b4i8bTSOscz<)I6OatH+gLO{!2n;}#dBum#V~np52x1+cGiCrQfI`Vxo6S;$ zdyZK7j`FWxRXT7aRuteWf>%G_jlOfp{-k=t-+&|p`#2PZlM;nyTtl9w=1UM+zMUtP zg8@Ykr%S)PS@##==sBh%fHhr*bypoovGDPX&oF-r$OT-+k|&Sm7K;;hH|#1mqG!Co1O85K08? z?SKH|slF-Dlv`EZQtVKt5zZE@hRXF@U6gHOej(Vdo8ghx&+hQZchI-vM$_c8a5gB0 zYN}y(k9N1gm5(%0iqF`$G29!Q?3{T0!AFi98zk~iOSbKR8Z6M807KdT1MV{@K$W;l zP>+uRjx3sdb*@&=o~nwqp8^9o zF(aHYQpbajPnK9Z4FbNo9RJ>Bo@x-9LGXhKdN4W>q$5n5G{sTwJzy+FdheV; z5vzM}F10e)&(N_EysflZOhu6J`CWhaC+dnswSM;3*vZCt`T$qgv_1AHZ!X31?<+Qt z9%2kgLc4sB34=q;h(ejhqv^qRd@HgHjZ>W~t4PAD4?NnX`2dx9u zX%H2VwPw8^RG6o7fcZ~GD3NaZ^8rcVh2!f+$(~M>;G4$?qlX*kUB_9Z!x7z5$c1#P< zV1$H)x&P|9N~vK_-O9;ZsB?e_;@{uHC}BJ&^9|upEciJRUW@v*ca?Ozq3_D*&gWRv z0(kEcH%H6K>@~>F=HAu?{}Vl9mSLyTSYGX3^4h!Z?JqBw#_Kh{ZhJjAs^JtFKlM2R zkJWl+A$7l;YEEVP6-1TTIFZsDVSR9G=0co=i>G_+g&)!VuVvc9oAX1)y$YsJ?KaeC zE_>NsCAv;B>}TIFj11~~*I5<-tXWOI?+ZeesV9GS%rq08hG7iET0VeXc_zVCe?Sj} zzKnI^{r)QFYRYk1g1;L5SpKQe@$^dCJ&-2QRqeG~vjNSKOrIH2StpiQ_DwEdah2xP zfF>etAHMwn_8Mxj7%Z%KUn`;9fb#Msl>$W%St)b^;zg|@V+MC4|(Zj z(HqQZZ7K_7;f;3IJzqM?v#X-u@2T$kv&NZC1T`l@5tQ2s0x(WJgK*Uaelh%KU};!v z3e`P03YmD=cVY3v%c7K6Ed*w#LR)LCe#cT{#L}Z3QI#=!AW)+8J_9Cna5l=`*yAfK z$egLZvcmIQY~zWXjN?Medy5EFs&ncaby{J(s6FPA@4%u{+}zkB!6rYaxRGsjO#_g) z4A*mR9fR_8dn8vyQhCy()+b6qVczxCTJsjkbu*4b4U|Sp!-)*CGM8{wQfAN0KN%$+ zz6-t+ZlihAPmoG`e1E0A_c5$~x-HtUiq|-x9=O{($J1`GmD8hL=6QNQf9KX4s%WrN zd9~jxJjn&51L0#}V&oAh>@y`pn$Lyg_rcAYrA{wFoub$ZWJ*Pes z^2zsTDunsYLxIqt{u% zo%L1H>72+2Luq)Z;|;Sd(_<99qO=mE%R9K`Y14^Q4f9(^BF8k8TTnotvRvz`M_{{{ zF$*5w2{kr2Z*@hxXCLaDXcOxp66(oetPHU#{s?WwIo8&bLu-%FR}3B`}p+7R-5D} zoAg6Hd4gypX#Vdd&$4hN|2-0c_gp?&xYvG{FSe4~_HmqI`TT6)2kpL+FBgG!2AT)n z@x=3qr18`iKNYZL4}RCy)|>*_cKP?I$+Yg}#OME<7x_kLjtMe#i@xIcPWWgi$`j|z zf9pMg=7a0gTtjreLX)r+BL(v}LWD~&j^QulC?-m^H$$W# z54=Xy$MICOk-?YG$o>=nYci8ymKh6DxA@bkd>&D2GLV1AYvx7?DW*k zG~lqi9QhzuHvKTyl&QTfz()Y-SZ8hF>covGd11-iihLx+6B2lTNi^&V054?FnkIbm zTCu*O&^08D@^2D+ZTr#LneMVTvojV&2NJ;sjCp{Zo;4K}d-f9n!kA5g zhQt^64|MBu!F^1j&ttm00p3dRl_Lg@1Np!QCsm(ZRYp_VOZJS^5m7KSoC=ZXe3=<( z6TWY(3od}x@qfZECt&?3;SAmlfOpJ7z#D zf`Oi_E1z>F7f7AhZB0d^*JNl(A<%aYw-!)Rh~~7Sze2(?&$AQ0E7BV*vzXgn{Rbyx zezcIAKa6Tv<`G1`_!i+U?e4+qA6CxkNJzlMeiIizPSuu{g|Ya^j@qh+68MMB7_DO& z{T%9qNL5Lx76b?|K!IU_QXBCMPE6x*xL1r51obtSJXuT6rMuMi>hd;M@t#bQpjcYn z?qEQFN+8%K7tyWuhht!dMN>2@qj3#DfC+WA0y$5r>9w=6lD*Ql;nI5M}3^%#- z@VPn6X-!Ej#@r##wJ$O^P7E6ppA+U7XB`=QgKkl+wK6mkbsqy*f+0WIb1(^nIYG-3 zg{ycvSQj%!fZEbrr%6&6+Pw+q`bFT88!>MhAKRi zZ?=FlYrw^|d1qtXo8InYV=wAE-_V?b?^;h^}7*`l&3fOZVKLd&hqDtU?&4*9qJ^t{KoGk9ILW zp~<{4dS}|Wfv~9W@ny`I>GjZz7ZmxhPuD5+fz>Fc6HR>~_2JwZLelHR+kQOgd15lG z!b=#dtBI(oJC2mJ*x1O;bNnuSW zm44qieu{IMV0}N~03QhB>Z85RYkNmxO#aJ!Zi(0C;vK|`Zu9$v4g=e*JTkP}#$CiU z$7xmdODsJHnFKKs3U*t;4Q$3#Up!w2!qnyyaNb$Wl947I!Y;q2L)6~M52!9P3}F$E zFB{H&e0;2hYxYHugX&O4hExuD(pM0G2{x?Pd+ZjNk2lX9Z+5RuJuC&J$R%8utd$Dw zR1?=?P)J}L8LH)LWFJs^f*;X3H)iPvz{M{8)`SO!F7i|mRs8v`p_hZ>Xtuc_OJdI!Cb zd^7q(M)dsw*Q8NfSzDj@m$*B7tt!)A@O!bdS?JMDJ+#fQ4c60%y-(6adhk}pRW_i_ z@pn6g4UrRA?w&CedJX+`;)#tXp?l!mF8*-@iQPYi)p2i=1PWMxONHU!_ewiSddq#SU5wK6IbA5<^^df*9fPX=YRzTA44w z{k-veu12p4I|WzP48&oI2?H zWCo3;iKjrVK&e2`MVuE7VfSS93wEP=T9 zHzJ9LT$s4Vtdkh6F{vXC4>#k5y9i=%4?%H(c1Q|3K*oC^lVzN}=}fo!vM0~DR{Icp z9xKFaO*q7&=|^tA`(IxbO05FcQk!71VB)h3Wtl8q(x8AkQolZF7JTE5wZzo}MHF32 zV?a<+{QMn@L`ps9?orC+k|2zu2*Ehu&jpZ7t!9}t(gJC4S^?K>|A#vxYl2A-%CGo@ z1P^vV%6~!B*4Km8E~#}foNNh2Luc)aR>K24_(E%FC!klUVRZpcntyvut)3C-r~o69%>{^H!i-y-MPCu;9$F111V4^+?gjc2`ogBzcrYRRIfsr(Pi47a*?(4T-sCp!CSVe8uKTW?94)5c$ zDOx_2OIarB`&QoJvkF?TDep~EFL0}9rKo>OOnxrA0ie$DucjaJ5L#LdhS;@6X7)bv1^O+N66EkHx zrbbFl@>yT7R3yYTbm-8O(&m9#!B3BS>gmWRYy!O8NfKV@z#;Y!$tI0LENt3g3-75C zqfXbNKP(m4vuW;Mf55TF_zvE#2uC}w#K{}M+#)Mj(jmxrH0UxbHJ24wuG7lEzJteX z9`*0-cbT3vttBuk3WMQE0RQNrLYodY9|-KfY&hH*&~wl;jeG0T6bXa=g6`+8>Ud`Z zySjobw<)cs9F&QEn4JM-DUFFUclg?gg!JgytvGm+oj(=Uf0P^_$>*k1mUG@8q2gvlVtBn7@-bx8Uz_Gr*&J2tLf{LG< zl6($$k+F9>m|Ry3h(c>%V1Qd%dWo1`EI0F?4+P)S({n{iZ|Xn(kFiY5ftAj%;;O1i z0zyIx@_#-oS-H6n=GnJt@HxK7{_9amSAqWXkpVMB;ricy3;G|w^&s)n$SDP+>rwBQ(^$p11$+%7xEdM>7l%8R%15DKl?Ht9I40o>!8BYN`LuN8e0tc-o z04==>H1j1`0T{NGH|TTSy<$o4^S$aoEZo_FPh7hPD-C?FtgQ=AcV;FOqo8IXAt9d( zbab9SH$VP8R0*&*VLp_=5NU!EFrRJzDz-cMGxjM=kUQing?m}S{23)3KJNXDnO~!^ z=6dF~TFH11!}%UwYhu@I>V3Q$2@WulEM}a9>}(d`+bNPjvOdsrG)8YCPyKsGM+jkY zcD8+w_V!e1El>(4*;H80i=B`r?lD_t)@ciTfw`rkqT=A5!$1P(D?>v=&lm5Hj*p9h z@%KcM9334!ss(H? zgwT$bCF_(^t+5@j4bvGjgLGZ9PWME;u;PcmoOQyVXa?5`C%(?0|0;BBTEELJ%FPU{ zNrfCGVDi1=!1$V(*>-il?{HVIbkKt&prsYI2cr~>$}M_<(1BVKEK38M{7A7yw^;v^ zyH7%+!%_<{#tQ)IE+>c$ynFz&JJl0StLv$JQ+aAyxFGiKyYJ@LPiNg!uckLL25VZq zgyy7D@O<9RB^n!A3!g2$Pa#ftmHzU4`A}p zSihQJkvC1ujllR}04{z<-+a9bV!7jTDEUd{SJlK&7h&6JQxeIO*fgN#&mAau2`!Wj zBc`wDj-(0;&?PD|YWxK>FD4uI->sgK^GW5qGieHJeRTm9ZymyKO3-ZR?|Fl}{=x>< zMjP~H^#+7?KTGZ#R5y10ekgTr=-769`Sa!34EyJ~dL!YPh=pE{?IKRmZVDkEk1q?U zMsJqVeHBD5=erDT9%nuFNwx787oBPmV;$kuH+)xIn=m^Y)NmYOCewCp0-^_-4h#-* zolo+Bk&f}F?V5R6sczb@_;iixAL&T5e`7t1Kks>-xVgN3{1}fJ6%H)oQ3xi%xp**H zlbo}&^P^fnnh)MUIT}JMuot)E>8n?-ATRe?|K64v4=~;y;5Gt8kq&bEJ;M6>`d|5) z8Q*RIa2(?g691Zf-GDv!1A7W`Ed|PjJ9S{djr$2S) zfJ7)80M;@Ww4vheUUPFf;$L$YD{u#37on&6XS;J&4o!!l%|OYM`*K?#j6v=-^HP^T z&`Um~f@Qo+^Ula3L)id()#B?-EA8jA&V1VY8S&NK=x_0_wLV<^M_XidYI?8oVXUu8Or*?zPLe|6VcG4d=x;>4%K}P`` z=3XW2_!lcx3KvHS5{-^dfu{@FG4DSU$tc0CU)5&}Fo4QlbE5`;wLsM*E5aakv5eJ-is0%nug+b_eoDAK znkE195+2Fq2LtNfl|)2={@I5G|2#+kGO)32uaUEP;uhmuyiSAO z5zza!R&L4c^LvvUy+!-IxO+{q#?c_ow{=J#{XOinK6(cIo?AcRp`00N-uG*moo>I` zAg7e=;L*Tt$mzo~2f#xVPzh2QfH6!Ym&ejPVGeMH#aQ?2PMxm{7+A>^*|P0YS=vu_GPjy<|uAttg_P z=@lJUsKYYR(N5)v{>E_HE`Y^UJ$Np=yex}-j@y;+$H2$%pbaYo-3^dz?<-LEz*0wi zvH2+XIOnNItspP1Z-;NF1A}iQ1ZB0_J1uXoFJH3YI|M1nwA13iX-QZ}tsR%lN$1)T zxM9x!oQ=jt->Av7BZ3RXO{{Ciuehb&bym3S4)T>&vBmIKvT5?xvT0h;5MexCg%ML)!K5X)_X|8|3En%Po8_n>)y@Z{M5Fij&2Qs8Tu{==5&0b&0lc81P z#$asClW*NUcnDKagM1h<(Gn>FTE#Mp&x{KBwBmqw!dt4c$a>pv&mNJb9n?CT`Bwp6sFUIbm}M^W-1=;SiwT(_;i%u zsBXje5{gOB1>cQkK5`%j0S!MissTJ%2XD&-3Zirr{{-X!K7uOqC#F;^7t7OYNugMH z24vFr}aNeNb+5&iEcnIm= zU*da!pP;BnukWL5ljlGiYYTwdZS|Ut1S(QNOj_#krfo1Y;im2dmN9G9!`_Q{$>H|q zWcPEsDgl=t;Taf0k>?n06ck!epU2S=HcKNEa$Q*ewNuY6b9T5=H>u{Z5HK*#S6&)f zt-Ri2=M`dVV*2K2qC#nWA?3a^y_|*8@e3$tw#iyP?Pw+~$Kq$b^kFjUVF3byukYPe z$`YMB#vnxWqA0V%yv1~4L`V)^Su*Q;-kqlV$f*q!+`A$SZJhr;Z!GA2Yf#bL*K#o) zq3Mvb8?%**$}mQ=H?YJ-)nUsA0y zG7@b3pYTrs$CgbbJF{9J5d#-+eWoWn0>)FAXF6TcAyHBaaMTLty|6*}If~H)+1Lo2 zU%yQQ+9#MnPmzpBd~hZ#i5kq@bATNdNU^inEWQJX0@B;=u$OpH1%3(~Dq~dd`ezJM z1nU(BfhgMT0sy|S9{Nbs=edi{eRMd8bg%8oK+ zz~f_u2et?gwf%eVYbnP_TzGMA^^NE1b;NxeL zNnJ7Sb&{|(rCkN@<)@CwWA`ZL%3mdf;n;Y>+o$^&`{*2s9|MQRY+hjNdi;QEDtW$n zn%CREl4sG_RpEhXU_gf-cEWeGeL0&4Plc4~IGI)rrEakB&h`1uHS2_HHuEPL=j>RK zeE~9;-5!P1F1uHa{Pz)bV0Q^3Sj&P7mUf_Q4DD^(JzOkk4t1?jlm$qY7>g7{agBS% z+;HF;firU<;jq{Q>ob$-Kz#=*(sdDxKaFjZ?=r&>1_>Ab)_0-%j#i3xRv-e|Lpv$0T5(>gc;V-R|@N`QmAU6?_+ku+$`^p+7LOl(C5w zxTOS;4;hK=x+i411W`GuYd>+*!EZOI@L+4{nmMS zhs~<1y@cN*A#Hll3S^-LhcN;#&9LpFT~e{`{N|4T@GRcDu2nY7o7V!|8dIK5u;d9r zo%0@@07;YFO^RRKUP3G&%0P63F-L7JrfEf`AC7dwaJo-&z7_BEsQAt$i%-BL&>X1e z1VUT7>w57@pF`ZVC>{8!N}F1?kjl+>R`~&CAj{CO5nylppg#?t72amH$snR_HB`@+-5 z6W)ASLEpVX(fjvk_EAbbXR~N&r1Rje0~;ghztS+8_MkDJdw)^Rl}TFG6c*V3ifJo* zOF&>_ejp|@@62yc%5gv`%V9c;s~H1BdO9OSAUFtUdC+cEAt4sLp)Me3Og&YN^jWAY ze+wzMa(r6@qZ+3Z1`7cu!6l0{vD`hbV~c`g>aoClQ;kO$59_(tsK&6garVJSWJays zfR4-|uGy0fp<;mHDdF8mlEZytrR;m~pp%5DfUYbBQ3)5_aOGqo|g(7#@=!AQA4u(W*(?QHkw@yuQ5m#it_Uh)h}&uh2Utqpr{Z zrSdSd?%waqfA5umv~i~%F>fUTQ(4j8RZQ8ptTuDrp7EoF|M8l$x7Ut_K~-^|-{{-4 zC!TK#pIFn7YF}LUJx1GaR|`q!j~b_z4c^vRe_jwV{k}UaeU*?S#@)|DvdCWK`SBUJ zP{ovahEHR-dVhGhmMf7$e8g{K=)aD=ZbPiyXa17}t z#0d|a>MI7$iMuVrBYipwSR2$7Pem}c0r#0PU;I~hamY;XriJW4!Htm zlS_67p835X4M46pOh}ocM=64@^Cf;<_C!Mu16=9zg!w53rZVr&BDW$_RB7rDGh

    P9OIE)p0aUcY^?Sriy?N64FAOZW{irV%_9N0A~f61X$9 zOz2e8l@0Jn8ULr^bTHY_fU$M+koQUO1>HJ*u= zXNb{hJ7r3flyuWp(*EBAwa?M|m)1FF3Pn5xWdc;>(|^-mDe1sjRtN#(Kd5uGb5*3t zSK`G2(SqzL}IJqw~yjBsk}Bp_|kRi(;&&9EqJ&^r*RU+AYEMv#n+C} z*0Ot_BSjD^LvzjnoUHI#2<{=PX;}}RqR1jKk^p<$vRtGo9wPp+y^Nh0)dOd5g}a(2 zt(p&}zWeo1w#zZ;eHUhas(fnUfSg}HnX#yh-i1cG2xZLujDcX&z;YR{gtS7g>)!a# zLNPr4A|81oCXuo<_`w0dt8-h&B*4U)l5?de#T{WBSkVcF&_e{3mvG3Nbl$O>=wLI0 zw810{Ta;Odr(mCL!j}3Lz{g*1riEM=Q~*8>|7$pN$;bab5y9$a|fT zvAb zU%c(KHR6a~yZ6lw&06ig-K)G+C7JE$syPea|GPwM19(|)3?ezbceIEoX=ilw&4z@? zaY;jJH&PXqnL~5Qu6^=we9fMx-#F-)y6Vo`Nu5W)1(VqCDnjv9lSStbYBiP8*fnpj|NWw$+U)>g&h~P z$^RizIDrTQr#*1y*qDlWW)TF7v?uFVm~psc7$j8V;(BIr2Elw1?@tIUm;vekzZGF> zDy>Y^f!Vg0e{0&5WzNk)Bv(;CLba%$KJr5_?&oPLlhUc&fK6B7$O%(q=BL!x)E#Y6X5%Opn}O$q#p2LCJYr%7?4ZWh^#uI|WrM9ppOh ze^Lv|Y}aSU!#c%hU{PC8sV>;-$JEJ4;swA35EdZN@c)D%#yGIatp?klqfHMnyuIc% z8to2*8lRA+(=>K^@kp4a5a+gvY?t@()E?BNUWN_W9o;(9w$^g*!puzS)uV!`aR=<& zWJ7j)ht|nMo@#u-oPaK(I!@^F8eykOfZ}b5V#&NN*=%yS*;|=0DZZZl6Zh}Th{@W=pX;|Xi4hdmtId_Imn{x9v{PyVmCNtcR@==m7X@KZ+vMEdmK0fm2u3fMw1 zBhtVu5&tuYqNawEpvaf~zwe_iQ;)iJa_^)^&^9Ak{%4SdOc(>_@C`cgcF4ZL*EEMx z`+r3nP#l>rQqQR8F3 zzRzw+cAt$UOKi8UW%`y~WD@m@y_pcEnEudIF_051;wI{IQMNl>-uaow;H`kwFyIa3 z%>ZyT+x3A@HGtw=W&&XM0SYE?l4t2jB>-+quKk!fvuMe{yx3}|x>DSsY(z5AQhm?J zTzyafjXHz=`@4fhWBuP(v>(%KJi94AS>ZXoFSiUHwR3{ZV50Jn0a z%-8FD&rUuRTz+}HVc_TIw+^t(4^{sC=<`~z69^g7jysPTQqIQfV>JBhnL9jVhIeGC zKRnD76e9hag_B@87r8T@p0ZmNmN?xiY+||LG55y*$~4kw!Q;EpqD|#Z!vqMuqoa2= zHS$L9SjF4c!_Ra5i(D#=?NZAEh=}HmQG+YKF*}lT&+hrFS8ok!?W=(p#i*Fa9-W`? z`Ti2)89uYZzu!hwAwbf*?#*BFS-z&C`H)7 z({ne3yXhfv`}Jk^EubYA)z#HG4;JE@_uq+}fQMYs)YLRkT$m+&zV&lZ@dKS_hlQpB zpfJ~IT+shco&i+RG$XE)wA1aWFvzY_ErvUC53$wz)zoSk3r#zWV?@q3} zch7G5>}_IUYrVR2D-#;3oayj)V3ud{_#BN#gS(o|!gJPuPG)muSKU1qS+s;gxXVsO zpS2qI)vy6hK<(wTMvp$Blti6(os}drQwAk9t=>X|Vm}tG)~$d1E-WZ0<1wfSWfY~o*CH@ZoP~)@;U7ORcug8W5R_LMZ%vxeYzt4xBkrQY)9{5IFh@rCp;?Ld}eMW?~@%CkqfWzPi37)7y1?_eG$7nv4{zL2;tJ1VH7*bU?Lxh4!s0p!q>7gm|@}$dnw(>ByEjTnlpG^M!AD4 zK)B9!zK%bYD#U_6sh{uAkvJQ)LCSs@%Q&EN1qE(oq;x!DRZ|{w6vtP3{807t^!L&h zFEtFDoU1gC#lpw)Dv5R3I(|r!tU!t9ikVXJ`I=*)Ro2caPhN4X9;|eBCVX~n_WhHR zs_LK5@SSjC_5d$g(%XIDxG8#i!|qx01TNjt&=VP>31Q!x&+HjKkJWgxN1UYW6uif! zMSkzrE)n;RGTzXj{Hsh37D~zT{5%alN=^9ok=%?nzxq=N2%^3-gU zsp;4I*D$dZVF&v=g`$(35t}MX@JdK=4j?sJ0jSGzK)US%`Zh(whVGHz1I}Js((g7h zpFA1YKcnq$eaDgpjqBTx=1UEwk;+AHS113d~X?`@#4N^|>s*9V{)z>q${ zBP>)P55~j}*;{Cw1FVJV((PI8T}uQ)LL|#aNYdHS$^RkltHYXJ|G%Zi2-%PtAqEkQxXcP>~b`X#^Z8Fk(o93P>XoiULZBNJ}b6h;(;IcRlw!=X=ig{I1{i{P$eX z{yYZ<+dli;@AoTvFhd_Y(RKtR7CUlrlms>Ms5qE!BO=MnYk}tw9N{1C0#M9e=_Hm-`dHtHC zNq&?Mu+my`HNEHSsd~(#c$#>WeJ_0rug2@S2+z0o@|X(dru%s%y5h>I0C$w=xCMGN zgO^r7nkOZ@nl{k^2!5v>;^(XlQnzuiG>i6q+OikTseBV1678;r` zIMlNJIT(94LGDxP4z>4K5E`#bA*IdE~Or~q|Cg?@z?1?Pzcxh!JH zX`;AQpkk}R`rQWRx^dvojUNH|f^~;M6>yg|7KMzuGb;1afO~s0+84;#ijLxp#$Uh- zA}Uul1C|i6jUa;V>A1vLx5zU>9vZCz?gO0*=?A z_AV`lCxPPz9+`t)!`cRX4w7ju-l~%7#gVu$pThDs|W=b zqqV}G0(GW*7i>@06OOTgk*bt+d2H!7ULvJ=CmN)=6E78|?xU!el}^hPh)iz{7ajci zLVP;9y2;Zgx2A_I?;vJ|$u60eS8Y+Ov!$8g;6Z1Ovwdor8>sAyU>Vq?5*^nNwjTkzv{t{JpFW&ne3cR-yOs zuq~cNmM+qXsHO07GS0lBkjx|tPxsF|Z)2lD`wEnBUnJLD zdE@ks26UHNucse6QWRc7&(f#mv^Nlc_{_vn^638gr25V8Eh|6L>f@=KIC>a{aio|h z?V>d(?X$n>JYoY+LiO}(_j6+7*tQi2V+gw%Qi-UExk*rsS&em+7Eg+Jh|+J?n--8d z%z{f<(wMSovvRE^Ns+G4rrfon>7;BVrS7&t!wtpE#i8OTfdtkZwglmfan5=dM-y%_ z^Que7fl{ML)S8S;4W3?~h%A=;<^WL`Y8#KZh{*CVqr^CM z5=)&e#3DO}bu#-iKA}_FtUe|;N^EQW`kL3vl>Bbn2tCLF{ixK!Y?4=VI202Oz71R4 z2Lf~7%kpcz!^*5=qs;hvWehCf7vVZ^JwQBt7OW#)W1R3B2mUPJ-P#Dxh1OFAG6kHp z$}~3Y<6XP9A7(ipyPkJBb{zrrhtDin*Sn(^R)5_IgyNW3ekSd*qA!2LyTu(=!CjR8 z-0Xm=&gasVr@v>C(ZCJliz2-J>8nsc=i+vr%{Jdu*_p83X$EoyuJ?~%BkYW^$674m zEjgAG^}%&}_g|1JoxvO?dHBc95lyjL(ZJ|Y7qcKpF$W^2vuPfiV^_uZqSr&oDT#?k z`LJOZSnoqw5RVY4DauFLs+A)CDvD5~X_XaNn~;xX-nrO`EZZn087ptkP&fn3F|jo;8aPZV6Tf7U#b zp}STgx=-G~6(9QE)0h4qjE$s%24?b(<}ecVXXfXM8tGbZu}CDK`=n5A$m( zRcG1aUW_;iET>&R2itd#Mr^b_Qc-WD-{_Q3e|*jT8wD-jUyGX>aa*pk^6xWZT&DX` zE79T6!+{;Mw|)KfDO}zsU;`=_RWY?%o+zH#N$s<9sIT-{x^h3=cfZ(rr#*_*emiZk zrYVu{r*==6h~N|bZ*B;a1JAa|;%_~>h7djoW7=87ZGDoc&9z~32L@`d$BR*j!1Xyy zi8u|1*L>#d%~tXz_MXdd!MNOZHmZ%f$yD?YBE;^c&rlpA2@{5?F(c1EP%4D#JmRDF zL|ttZB|oA9Q8SJ68vn+V-Mo+9rr@S0BEvn)he1_@N83D2ol>+85ZQ>YP!22!9Oh}s zvHc6c*|N|516?9=;c4;($${!&;f7H2-s0v|YU^Za7t6dy9ae2OUY9u(=Qr_MAm47!OOrqTZ0jxx7JnhuD_SugxYh^H@k0T@T^+w$0~Kx^v{q3a!pV#a zo^7*>)x*)ocO^W}LeQ7NRfFAoN~G}Be1t4QI;t*F#n}7-QO|j757d+!k%IVGP*Zzb zNh9GD@f^?C8iQ^^Vx~MleCq^3@oPJ*IRbDd>j?@}ngqD%yksJwrzIi^-h#&fvnLGk z2Fs)e*$Dp$bsyiiP8Y2W(~q7AC#T#uclik>aM|9GtGmN=i_frY*DY8mokT1vNuB0B zr(@LvbBUUS+;yw7nkpOiu@uh2raak^Ee%^#8%hU9YHN~=Is0(O>it>s0&lsZS%~Es zmlW+$J{kuN`Al|r!D|vr#2ga+vE@09aG7>`j@dedwH^eYvj)*_C?szrd5o`UqrW_{ zBb~sVgw`@K_znw&oz!iyPu7tHPnjrWnsqtdQ2^F`IaAECx{4Lc`JSN)UHBecAD(19 zo@5uW6n+w1o(RDHkSgCWG`{6py819E53!4qUdZio#|7cJ|2aeYGry>c4(vzk!noQ1 zDpDg-yj{{Z`Qt^%IX$GeQSotBgO}V&zVM;y;kKl((9h?~{O<|!w~psZgvGnvgYo8v zYoAt<3*S)}%KBL@>kb*kjK*703q)Lu&`bkXIUeu$Gnkh3apd>YBZl{gNT1oqmk_&+ z=SM;(!ebd36#GM5FoO{{UXBv6wR>@7x6?hW5;o}%3lwWO;A#wbM8yRil zLtUk`$)hdqL5kv#&XmvuistXSq=V>>9G8Qe3+YfX^PMT}_Yas1*5HQHotw(z2icF+ za?f;yw!mEU%cq58I+YsF{v#cht@5qAd}FeeEc#p3#p2SAMmie}A~Iu@o%&zN%O#=D z`;BfFlxdBQ+5d#~KahfbEtcOMc`)ZTV3Y1E*p5zzit6+`$hl&o%JX{3q5RclPgnz! zh`AGdib5z%VM!erL9t)!DA^>&XdN;ol2JNr2r@-AxA{8_lncGvP;Do^pBt% zeSYyaDj;RbZI{f+ph{V#q^i6lD_D$FESg>?%`<4&-TZaml&rff0 z4n769t28IBi;6V)y>cabR!V-}`m zNd@Y{_0JL0^<8h0;;!azTY$>(KZ5tDpb&bD!oN{mAoy+w=lhRz`me7NVUnpmBJzE}GmuD#nKqhjm_Dr>>$ck*p? z4JiZ}UtK2Up}BfeX}_^$=R2XYoUpaY1Iwip153Kygxk976V3&I*6d2mcOoJS$l`1` z`-mEy*{qfG-@msFY|+*LD142|J{hR?{p1UJ>iUYU)RWP^l{3@R#(sX)Kz1M0S@oD* zKi8WCzSWrGB8Z3+frq8T+kSEN90~r~GpkT9*c@8Y*Jbi_f{ubeQV~V;7w`=P z>~6n?2Y9s;^?<_py>&a|(qQSENDlc?Ak!`Y57$op#A;k(eF;|%lf!UDv8l?_Z>kJ^ zkMAelDXscmEqS@~#7{Hr_y3n*@CCXPCc<*b#db#vqrtGZfV`! z-Fki}9O09blVYi1`MP}EB@X)f`fZXqSE;C|l+UxhaS)Jd&X%naLEc$RxU#5~O$W5F z1aLY8q?Pw{$P%anfCICHV~PK~vi4%TRPTaa#`gGNn`-hJc+B)!;VS%#ddi)~#!Igo znG1dBYsHUPdpP`I0oOopy1bK+(cSyh>Ir0U#7o7WdtHI*`sT%E^>|*L_h1PA354{q z-Pl~eTcr=I0gjOmFqC}PrPeQTJX-Zz1wfwphocN7F>_BjVPr;TWe1+rm%IZ_kw%XB z=b@K+-%wpAXossjH^+Tvj$_eAW`U6e8F}s#|L(-bzc0cF3V!S}?W9XQ*!1z6`gg?a z0YvCX$ERCRY|+kDBn6P%G+(3anx^A)`6|yB z_1Qr+Gjizmz2H)lDGz|PdVmz8egKlPSGmTuwza(nB_FkZ+i%PUfJ8>9Jk8{5vQ+1- z5*ykRJ{&&4zxeU#iIrDBz-=4SycPwLfkI>E`Czfv_5-_t_tuGwknB(QJJSS35!F-c zS6rtxJhK4}bW4|v=v8sp-`{T#C?FO>PL0sxb|R*B?wGlFbs_M4)raXKovV6|PEI1l zd_doDRVaM9setP+-E)6OCjEW9=9RFJMsb1!jX=U(lzP^$XgXv-)f9E!4sw9)q?8dF^k9A2!abYjCl(x9nP7r=Wx0#NJ$!XRx0ewp!uS z*`ZT^y>+c;Dqa3@b#XNf6|qr*&A!bllPPw>V0+41;|3Z(TgO>AJvR}`QFi0aAFoge z3u=X*cW%L#6Z;y(o8MS*2H8Y3-chiPAb0}_MvzJMCa^CEuAv9Yoy=yQFM=8@wTlKy z-2vsZ_WT7!esWqkn~gX7WIJOYHdo~DPY2t|nZ0nG%$IAO;K-RBAbAt+pzgBLq|V{D zmr0O(6ABt{cBWlzxE+?Vyu7SuR6=E73^e+5Wt>0E9e{bU)3u29!iEgG1r$&>2z6 zoCdM;Gp`a%-+$h8n{o)cIZ0!4 zfu%z6h?q1C2-N$5rm< zBbas7Mw<}Mh8SqQq3$~X==&__cyI&wX#zv3w(*ZBJx>X}lW-|p&bz9GXH^)>id%}o z*FtR)kZOOdlm2qa&WD zb{A*rM>;Zj7h(1#b3rmzQJTK2_!#@|sF4#Mer5di3 zQZS)(xW^)ZznRi7C;^TiMA#c}oB8L=0k;{T;Vkx88NA`A#X)_OddhA5qTFLs)4O9S z&mP}>5fy4Uso}0PY0}69fRZl^>a*lO;6dbVL2Ld@5T!Hb8BXMIjf3NCaC!cT0f;H2F`*w; zQNbdWv5%V*(*X__rD|GkIQ^Qmixb265n#UtC%=RXm9vp4S`JsZC`QyCLWt%-g%;FB zrZHM0$iF`81DjUT`6{)w-nw>30BPMTon*;p-WQ>|poPU4PoAf)!o!$Lw&6dIvzaEQ z$ofivSnp?yT^HHSQcO{r&u>?a3_{T_`eRkDgs626QKn5ul=?+GRpwme>lZ3lR}nCk0BBjZsV0&3ToPNwEWLO=3E; zu*ZAK#wkn|uK*8Pr_4=BOlm5S66!o@5UPy+CdwCpJo}2GRkD zd>qc9gy3h^uGeWvMEm7F1dlDM*4#GGyv)sV=t+GRyXb;BWn8Dkssz?FIhdc zfPTVM2xxB@!xx*;YO+HZv5i5#i_JJCt5x~3Z-{0 zz}?`)tDBZ~ChH4X-@W$Oe2#@l;wPA!7B7I&#Dq?T_VG879(6bpeh!|N28;$sN@?JT zqX9oMAp_KV2*YC4EaV=IG_2o2F{b?EsoM$)i%~Ubu zr15$FN=f-|_TV zSSJjCf*&?U>=(Hp0Wl~)X&;;!7%iXq2hLGuQ95X)PAS%JC4g~BDy8$088riEXbHA~ zW}W-pcxqkNYbbwXSUCkdr*LDN8w(>=mEKC0YF~YPe3+1@saSzMSjb)Z^=TEILryst zCr?UWWxf_QfgPn+xd{(-1c9AJ{1^3LRreB0D5_?eJK>~fH(IXnS6yct{f=u63%>;A z!|P467J|!zl(%C&-&&j8QeG)sv?#ntX`nytmn;grJ>MI36l9qHYdQls)i>-7B;HV6 zMG?j6q|KAxYH$j+fVVR_=j85N1o&EX$L6DKYdrY`_Vz)v`eU7r5Aqk^B>4xL*BQb` zktB!(Z1DKCiK2JpJ!(F8;2pr%-*2u-XW+B;s}>hj`zVNXl6X?Bsvn2~_By=ys(yr) zw-x;XJ=Ey2ctGVsx5jU=NKLHnR%ci?5gD+D+lAUzn&XfGq0lrw?P80;&cz>Z-k6rM zk#zynnB$%s^U2iNKqF`%*-Gb$%>mT5>Rr;702LSYTrmx``$W&fGx{Or@~UQ~+Np=h zL5YryvKLd7{rqK>^(2Vj0`cDJQ=2oY~o#Jtya+pLsmCu&>^y{FmAaDj=-w z-Bbnk0M69+urI4*(lR59eo2$!LQF}ZWxz4yz=WG?wnt;x6@MmIIuI>@I2MbViWd^yo-B8Ov+`nO2atrwng$2 z!DYCki1- zUjk@Mf~%fjlm6}cUNlf3?A$tuVs-3Z^PGoZnsg*grpF7I$M1pc;3jy?=({UlyB4;+ zIyMHBK_;TaI+e?VrR|kqKl<#w`_BC)Z7{*;mMrt|UMimDysTT%PgC!2z*@7OzXx2gseMKWXiz8 z)OMAzqaovdWh+<#>r3LmAb!)<)^>(gJ?B@^N^JlM=lDMD_FgS(@WZgjt#LecLQNL0 z+qM>Z8t7kI=|o$w&MlAC$Oi!cBB-Jzo{Ab<6Jt~*1(Y~!q}(~QE=PcSZxGjB;7qrl zLUgNYXzpxe9Hp7%oSB)O4cQZ5N^gyx3wCJ4-PhFB?cm$Mq+Mm-@kaZvZzelcduso- zTK9n+_VtGN%zdyjb8^I_r#o%Vbr!xhXww{gn(m{Ti7L5W@{J&Lm;W0F{hb9w3`C>+ z+HbFw=0MaWh-(22`8)V|8Ib)e ztJ}Q>7AR@++B0_G+JXz7u{s%fG@ev4yYLHf ziV@70?&1l{N*};w;N){Ak4D@Tp^9e|-LSyKOE?zF08cmU2>iClD7U4)i%9*Y8#STzwJtKmg zLHPt+xwm+-V%Xg$){lm2j&Dn!f{BtdbrHOFc`h^P1#oE<5;iHt3reVkp>n4i!$2hQ z2fWSZa@4|Lsok@+dN09Vc~7}CJTLI%{Q3u|OUgt8_g%<@e@gc30S|p2g=ha=4wK#;Vn~m5c zEm41{My(-372mL(B~Y&^q7>KWdvY<-G@JqAJb~)()u9VW1TY?tL0vdq;Y?g4E=cML zW+ikXNYow=4siC*_?~aT=MC)MN^IFWSDk5GVwwRn)JK?G1Phrboxqc>MR1-)X}~eS z$*=UWDT0}9BNV@7cDijQ={#N=Be@+|q2eh6i-s?fafVIhYA2oR%gj8njR*J=R8{yO zoct^3Rb}hbZf$R;a*5?#D7;-R;*$=vHyW&>T#NCSDx^9=jzPmMAspoFf#GMM-pVuk z8+FvYmxm!D6U!Fgpq295Yv6zslhA%4J4Z?yL?1*>?L_TNdX6-nV8FH-QDvHB0mfH? zT|xn`kbyv9o%hi8{Y4;Wg&6r1M5aJ!(#7Z3`7JoONb1iv$v5+16zgsW@0kIi39=h& z0?r{C;+E`d@k(g8T8romaoe&|Fcm-66?p~A_Lm!x3xAPUbPLRUEy9T^NM#l&zF4$g_<`!!TqYs`A^v4&+L^k;wQLJGA^PXhr|~+@hI9( zH$;^H>Zs;)_w+UCxhf=qg?*jRS3Ag^68ea=o|yP6kcx1HrIisMdCnA}Gr|yDB5U<0Z4uOV`WNPquO;9fvENJJw0* zNiV3x6@r}i%(w7sD0#NW1dQTm&B^xb%BfSB-x|r`I1Z*%iJcWIg%+}?(a)Z|x(vs>yV1#l1*s#yhGN$nh_=TTBNm zhwFjnF2>hQ?4BS6ol$nru)|PFtbX=}LR~l+j0SZ%Yk`aX!mb08o;167 zU0nm26H5@Rkv``&l8X(aU~!dcV`e`|+)5386@CMLtwl6T^GZ!havMqTYFE`{Kz${@ zwviG_5yjC)df1H#p-Q2@#CjCfj7oP1fifUnt==*h8)n{rnT)i7gNV2xEnf~wEv)y% zNbP;ggjk0aCG1#)vc4HeC21SUC+AEKE+~Z-2Gnmcl9G`kB7C~?VVSw(L>tLawrgdz2036!Oo!`b*<~Of6pd>2a)*#vay&j-2SfjvIxp_& z^nC5g&)dF&}0T8l>PYWOu4arNHnJyKq82YbAwc!26RpH9&bF;RLG2k zzk*ldcL7vIVat6kR9YPV++4!4)o#j zcv75j9$Yl-A~u>prE(T(%T)peT0Pi{T4e>Hm%tM$k#U9p{BpcIc1i)GC#7%mm!cYi z^B7|qH@!ic1NkbO3VmC!ztU(}LjINMFsU`M;E?0&Ybb2!u;1az4eO~Dc|zIunmMOv zM0%@{AQ2eJ7Zj_4L#@{RIN#d6`^Y;Td<9h3UOZfne#|z>TcqG%sJHO5(9BrxQ6ru< z{WS(a^=EN?ztP4&zxE)EYy3t46XjA69DZ?44<8sxoE5@>`#x@<23J4Qxug%5NOYYl z6oN!N>QF{0Cb~#NG6O4GsYbaK*swTkrM84ibR>Ucuz&qf0NexhZa(lmo+X>r_lBtF zJqP;9Y3c5nlst9Fs0m)N%i(Ezk9pnAsz)flMk>Z!>j!k~7qB^E!T5aHuI-x|ur9Jy zwn@c|^>VU+xo}yHkPWVa3NbQa;&3VI1rmoAL+(PkAO2AN;E6Odx!cVyOUmL@+l0m8JAo(vl1s%8xY^ zd&a-G9wz{vdHR`vTs}(U5*fRs_OZ_&?r*|Ng0epM$R|D*6f0A>KR7`g(*1UZ({} zsR2RL_UX=)%HMLE-@#>?nws`NkN7+_)d39De@ah_p@bP8DBH<7XVxZ~mZ}8)^i2F` zFh1N}g^_$~LRHX%Kj=X{_+2>sb->Mhe6`+{NBZ>r`%6Qmb_s9IYDWKfXTnUJKJdq_ zTemz7j~f!RrMvEhf=Is6?uN2A(;EG$dp^kGw;96)CR2=rH;CwW>J}w``}2$Ogr$ee z1DR29t5lO%)4l)W!(5$o^avrGhmgtvRH$-6V8H4GgvEWrxeNZIA^V-jPkEZSKWWhn z6_CvI3FP*snHt&ez7u>e_Xp#E@|*DGw>msK6Qh@g4Be#J2o}vN_x>@F>J>S&;5M3iDhFeeZ9uK=LSc`MNzIZ24 z_JNULk$dixp8V8K2i;LxlbT{DpAzp>Ucg`CIHY+|sHUEB`U!YdS+xJ8gmo(uw^5AG zMuTwphxdUQLo>1dp)lNVO>d(A;004DfLXj8MN7jI=m(8*<_4Jf<_64seN<4KDbJy1 ziBIiLuSj(INfy?onVDI(ZwMARhN=-Rk`Y2C=bz)j?_bc;+FA^vD}onfe&k<(P=SPy z4+Qv8(rMJ>W9g0(KQ=E{5eEsDaNUDJC045s9pU}p0%QAUYtII@uqppt3aTa%lZqn1Rotw?x=1tO zWbYWiziYQ{!CF%|Y&xQ6zgr;up7lNDN;LR14j*o;Jfw@pa|@`(+i0*g4Dyd9r8<3+ zdLC51*&9O3twtd693RegoDH9O|EnF8j??7`-?$$WgxqMP!?2a3Z^k6J--FA*FT?Mz zsmQQ5{sd;Cah>bu33mulP;&!+%umilh;UN6S%G*!$rLNfubqOO8`r@hNP(b#XExbs zurZ9T;Su3;A|yfod9(TbIXQ2x0!v3Cdz=XLjIdyMOdO33+Z#&3f}yfFfe;~#_ER*b(Z+ggcvo2pJ7tHtcsq-SHVn={`xD55_4*arNj(>*L5 z;o8P*&to)^GLDHcc8{Oor$Uywh721m-%D_O1p+V*{X&*1`^0+<<_lo6DbY=py+OeW zr6$;_fLtI%k$#RdBZ5_`12B$casX0WA)x$;-IF+Bkav3#Pen82t$!?7k z(;YW`JX2!5a+UV8kLyjWD@-+e!GxT(GC;=_$pe>ROJRdj-BVmuj7SguR=MMO)ICts z{t?*3v!JFzgut2Q$0u`-f75g`$^fhMTrO^2zCCvE+;>iHjAG%Tg$pW>vZ%<}P=OPz z!kPo8<>P{{gM7PuLh-<#A`K0IJ2hJX^rDne4;TXU_uqQi3%@REPhcGUd4HB8DaRl+ zU$&VlY?Ic)L?Qp1IpjBrplGjf#k`H$!0TXVg|&Kjp{Lo@d!_WXfE1nviY#FmpK$@K z;t)X~7W8VSJ%OASC!svsna&Y4Va%jw9Pvy*6bi={Ak~l$#Q3ca;Az57LrH+9F@f_0N;&}~K;pziU)FWo>C@CXd`mQghz=lBU$_P@;EHg~lvFK~WXhh> z92U?u6UF)Q6)l<`9NakWkZnepe=}bL9A~GE^r?Wy%J>SR;h@47ZTkG^0IZ?)1o|~ z9voY@B7KMT>ih~ z$;ydA?nccasK(_~8UCMVO-3~HWnL)B0T7)o_B~P|`y6QO zKmtd!Sm_f9Ex-XEP_0)QtKP!X7Xt1(mlS4B2{VX{+V;BJZ8KKw3wLMRh`{2Y=YmUU zRTFoVAIrr0*FREWnw&CTv_INg=PZ(>Ui!5*%MOAnpZ)t5Oe*#kR}vR_GF6umupnn> zUrA6JgflV?KJIA22n6-=79|QB;7+QliY}FInG5O=9Ao!&FHy%qs1b0+JJ##QwRSkw zJG822#Btjga9b2}AX~Qr*MBD6btmxg)PDom7sr!1GfIz`ueuX*$`?pP z()@nsnhqn$h?z(Kprb(XnCMRVTK4JSJ6OmC!cMB}Eh!7YSui_PE3;CR((?X0DMD(<-SOf?I*& znL4T&!iwry1LETX)oIp=M#ZX{5Ee~9@V*>KYf!iM>-f2V-tNdFGh?G!g15;szUBwP z0L}A1W=cFilnZ-ZEH#MIs?H#^6Y&#K!-ktv)fvmKKX@m!DOAwVckYwDZ6?UvI|9<| z>6a`)6rq96lf+-;wZDA;iQq-$QXJpBWs5q%T^bUgkHfzdxhLrsOq?+;Znp5rtBhD#Pqn|&a*y(o2@y9HLV~k*UHii zslF1=#WWihD&`1-06uEZxwok7mG86Jt*SG~7ubE;fIW8K8{$jlaHcdV0I1V!_aus{ z0pJbxuh(}Cu%H$VA!JkOw#?cRoNK&{WfKAc7N)n`&N&3&yC2<8x>}jje^OHLy~E5f z#-jpzE%S~(vj`^W_WSUHY_&0$vFR;Q!Yr15k+Tcr8(TM@Jb@$cfb& z{<-040d_F??adFoK8^+d4GRK%puTnXTQZKR4T#eIgjOtR0YzX>z%gNzEFThH{r3*e zlc8|)W)jE;zUk=rE|Bn0vR4AD-OKc>7uOXQx?hF=`O}cUHum4|;$@)5lyzUcOBk9_ zD!(^fp?}_MKk$DEpa!eN1H=DiL!L@x=cld!?>r!2eq&v^0E?g?2yXxzF4<%ca#znj zY_=m=dR=h4yn|8L7|!_mt$^@}6tHCzvK(8+o(dRTZ)!&E0+@aPh(rp21k}}TyT8~f z^joUjPcY{ieSCGG_ee%YrVJolZ5P!uP6)IU7nVXv%D!BQfe)VqUw(hMhqXXZ{nk7EE zTO@zyP7{bJY8&Ph%YO55Od3jt`e~1Zq(ML?PW+GL0MU?PJT15V*FxQH_~U+4R{pUF=F5R~PiR@0;Kh0B zPDT+I7hj7+#% zR~j#aP`|ZgMZ~4M8u0w6pQa|<1OkqbI(wka)cxw}11_#u(Qeh{B*5prRT*&;5D_U; z4QC{?cyY+Lu=!x*McGTB*x(?%N4~83VPnSj?t`IY{lG2mC-}J6TSo={PVPWWXEaFp zQ!FnRM!D>!a{P6LuG?V5Q^I2jahC+3v97JhugNwaQjRDCO5ajIq8VL{Y<6z;&k}`W zb+TDEsa?g5#o^eEdCW4i3MN(d2M7tEqZS$K_((!dQvzbKbLpAHDqGU$A_K0@S)tZQ z8DAz>#iN@pE`X6B2TWc=0J31}j%0~MWTA$qC}d}**e1DGkN9*V*g90VoEwt2#8~pF zHdIDpMI*l5#es=lY9oM&#@13prk7)V_t%IVxa#0Ftj~X~!x^rLDTuixvS7~Z=`JRA zqJGS_R#Ry-hIR#ZMR&Ej=-Y6&VGe-R>H2g!-&Zh}K^+3gp+o%gqp+v(D=6SS_OFV^ zkiG+y8KjWAkUWa{s+U{8?wvi44W;Db)PoteH2-qj9$x(2-nx_HL*--_VPA?u*6yZ? z%}bUhv1Wrfw5FecQOWr{`8JJV)BFC4l7O}Y*ohrp&Wq-|C_rmCI$oZ_MY9+dVx5$F zV{!`sCu)I*74yoVot*?bw$XQtjS+2_TSQww;rOJq~=_OR}??m&{2=tuo5d# zSg!!hEL;+WKA`u^7;TaBjoHfbn{HqerExrQv8Ik+;@ zWIEld1?H|hq{nB{(@XY~*&Q++dD7xU?YSj6&K8x69%%?J`5a~7`5DevgXvldc^@Nb zos*WUlg!wr#ld%VFc9T@R^Kc;tUNUx^XYx$&g_fKs21{VrG1U?hpkLMOVYK5P3%lM zk2+!@`!lyL{231qb-Df*GG2dXkbD$T*i|RrM2&NV^deLcNW?4v^Xl;TV%jA;tTMhL z6YDNR1e(q(kv2ha_sU#oaQB8kG7DQ7T2zSJ@U9I6Gw|J1sH@@_KvLXieVeR>tIC8BB%&H8`K*i2D>==vAELKx>AEw7kM480>-t)l=r?C8-|1pUXiYz> zoRw}1rp0qM%1kG9os+qI=8WCwH5Em}Y6WvS&l!_tvYl8XQZj1kK}bVf)%P?!HToiT zL%7EU`7N@^m!>aQ6ioY9)5sga2sRo8woqf#hE~b6m)L8P436nMj z*5A}-8%5nMT z>wj#FfsAoIaud1fFNfqVUGg@pOd?^h0E)d-E_wW=5@z3YX?*%lhKO`@g+Um)gySdO zaX@8`W2@Xx9^0N~{>#>UcMe4MGtcg0lJ}gbwl&$FCM~f|rJ=8#B7NI9zL9L}q-Ugm zTq9vq{tS;k&G{ZO9ec8{((tiS$Bd*qOEgyf9nm0OHiv!xe1@<|`*h@()9S+%^_x}S zkT(@39tV}0+yhM${KAyC4>{5@ZefoZH>zbdD0F!4HhE6(4S~_8C z;pGv{W@@br@Z~=LQ@j$-2sVMtYEpW0P*#&1AfyBcx^cR%#XwdmYx#4V9C&OW_s(rjcQT@mdbBQtHD6pcAr3vALN6U}ovSV4aj=)|M zLh4yN-k`AQ+o*NC_Vk&Xbkk>V>8Q#_g~-WB7CD6hjf6e1v^-_%E67uX<*z#m!*~gO zX&8?3WrQ1BgfcbXLBJeCS2*gU;vDA5HJDXz`OwZ@X7{gjHU~7GD$WWenLa+d z)l+b$IjmxnImg(T~whqS(+p0Vw*>V0uy5GXSitxCc zFWyhv*UPudskk&x`M{qFCQ_-N&`aWJ&EcSR@;SYyW10Knfo1P^OvsAK98?s~mEFES zo$9K`glKw7#To;uuLr*uI<+a*(;A|z0|PT z)Z@l>i8_xB1;5WxY-I+REuD?UEaHV&k@f42ZK`+PM^D)r`6cu7&1gJ(JQ!~m^}ZW3 zfbn(l9rsmD&+f>>bY~Q<-&Q{K8snCqPV$(#+^o;Lb68S6ze-j^cjV`Ne)F*HW0zm+ z`j*sSw<@8N&g6C%TIsmLT=^DT^ZwDVhr*UIr|1KjTEC5YCt7P>`4aiLZc!WML7=zh zGu=>1je{*3|7JLV{{U<$AqVt&Y>-OoUR$dO^$1$XE}jhmp{^G-MP?ejkLM)zXNW_X2@Eg33#m7#LqPr@> z63TLE*fs(zRFcg#_R-z5K4skKwJYfr&=RQyD>x@RC;j)wV)O&*Y2p{+BcWx_Xdy-Zgi-xX(8SV@owvbjW;dF;X=HAo^m%5eQ-{V`#5|v zOO117`6q?L6I#uato;moD8!Tl8nPw9l!3MX=ICIqtJQq_wlich1|C8*sEc`i!r?Gdy+Np2Gr5;bSRs8&E$)n zgNzP-k`*OC1LpQ4Kb4`B>eU6}pKP9wCK@uwx=&kR>_p=E(uq#2KVNjG zXLfWfU;TjSIMTP|av<%@1!Q0h-+{W|o&%@omO;l1R-U7i<(-3{_qB#i^?m6yR2SdA zHpkl1aA9ZOxaKF`pW?nE2SX4x%qi#xWc6*ymFl{0i;0@}M8*F!aw+lXL+VN6{l$JoMo5XUkphPRGc!a!bEM)@HH(COx;<3m`RiEGLt}|OnUsHGYUTI9tz0u1C@exFRR=1-Hqm47k(k$HmhRVRLsD1pu;X5;=6TQC26|)A!gHM|Oiz-@*}pTT!F_4yT5|3B*4f1?x6*x@4O$EH4U3{rl2gbtFkLWwyl*e4 zfa(R=Rfjfq2MjAptUVA=Bs&FqB4^erc~+0u-=}Z!r#H8HPyk?outCJL|8>Mcim83X zClPy>GIArCODwT#^l)XGsfapplG_nT$f-Uzc>{TZT?EJE-80|D*}2b7#qZG~P1wxG zBWR=6>kzSS%oq4rxe&z&VMlXW$F)O`?gsN(jYb8#TR&ZR9xad8`Bev96-yqz< zxR|)1;4>Y4F{^7TZGa8@u;5eEoT$LScD zlv=+UhvP`4yR*Z6=O`lo@mh3SyWj9pD^rMWi3s*d}ujTuSo@MywV8(5Ip>S zEX2%hVvMNallK*kyB}ua-dm#dei@p(?Z=yC__ap=6j~s*&Y_80`c{X{xg+PkNIzJ+ z1W|rkc8_CW&x87IC%4*Vcb(*TGbsc`S7nB7zWQiYJqwjcpfk$zo}zw)*(8rHwMchv z2R;<7>^W~>8okAOz~SBkq*vQ5^ib+AdH2H_Tzao=FOO0nlAfkMj8|m}^$Xzl?^@jc zwVyH4ny_nxjwe45KOSyp3HC8?1RPYG#=y(t#7bU~2*d6SbRJ)X{f4&utTFZV2n28Qd6ytf#4B_GzEv0Bmf)#HH8MNhqi%3X`K`+jS}RI|!eHj_Mea_y$bJjX*{nt4U&r{ZdVLo}^*ZaC&SG?;h^rl*qBF`O`hT(LXojDwBoG1Phdv!`Ty=qn!rm>8763DaPgO z#}+KB?tGQ+^g%gN!ei?!{>(UE=WH=8f7a#GtXo}a2kpOo+vY*s1n=enj!}b^WRcP` zCD?bk%LXF);uZ_Hs9YwJl|}lQtw@~|?ADZMoJ5oqnyy9^)MpVALj4&N@B1JA`#Jh= zXHRk9X}2IMoyEsFVLri&(o|_vj3b^38|vIbcL=E1(i+-;p1h+7@WxeTVkOyJh> z63@}kG!Jr@Q7`77@1&NOjb|p3ibwqh&Ct{QlZdE|oBfeoWEBdu&!@`oM9?@1t$&vDxLyD5b}F`b@TpOy zlWRsHqk|WQ&W~kfr#?4o#L1*O&~?hRe*pI|(uR$WZ|Be9#O1h?d;ekT{9OU#C!waf zy-lyBe}Eiu`(J}b0JAAu?+!HMHzm~6bmc2xCH7qRpeY@^N@W_EZVN-AuZWZ$=`i+) z`Rv&k)wet37Pl7I*PAWfOTiM2C>eJ z10I_YJ=54N&?Z&*Z59YlAW?0L0mB74u=ChE16pq6Y!+ZbhWp4q$gJ=Ou493rG9+e5hY%T*Nc zic_qq4@EAvW4Ff}wUmjnX|2KM&_O*CLb1gQcX)k_-OKt{Y)p?bSQ)d=jFp8!3*UR) zOy=06d)_;Xugv9FwkehX#VtfaYV*9?KgXm8iP=lF7V^!# zgadz)<_(ES)g!^2VB4s9Uu_yE`}o;H0aY~R-Pi1YbQ(Ez+Zc{ZM~i{Vfc560hN4Ru zLsFf96NnR)^{LfsftOn0Rm})Yf9%)Myt3*g|A<-kzFdD;SCqW$R+H2L+XpJetuPz8 z0raVS@T@#e^Jp#A*eqG%O90y-Uv^eQ=i)xrqeE&U+UKC5FL2Nq_!ninCuI_RxXn!Y zDjAR5@~k`+%({=_TBJUqh?y1^CKh7s`1 zz@e35FVV-{$S-)(1IP_TG+!sWOZo%tD5}@NLehHU=$1sNA#@CQIi~?FkqY0V6qSU9 zh{6ThV!SS)#{GjfpNw$~&JApX*YBgwc(xCNe1LI&*;vMTpna%0Cb-U3;fT8wIzzA+ zub_CgH8!xl1@9u~pVXh*=D9#%vK zWjZim+^XBvMX%p6jY<%62XAXNW_#_3idWV+HCFf&)<^G$w}!+%#)RivDu~M0N#+y3HUNJTC#Cs~$@*@2}Ek1()AvkOR8D z6p8~_`8&w*;!!Y|A*JELvBiy+wytCcDpiU#3hmLZCtHdZ98u+Du1TPqV2!?oF3@ET z{{TL`O1ZB1McJ7RA5z#8u)jM&SSrxBe_ZIdM;<^|WPMEHAMS$%6PlZ?^=d)2g@_`f z_~;k3O;x(HOKHED4{AY+8+Jzzl^oe{dp0*fKxkk45sZE{2KX@`4ou%gj`HenX77z@ z&LY6fY^*O}A{~pD?p=mR_XGytp$sDTN`y^n!+dfTZ5RU>0sEGzj|t=$Z0Ocs&MF== zjVi6sCQ$01t{f)J_S>9s>F5V6q=Em|cs_C*6;+~6X*r{$>a&e@OIF8NWa{gy3e z>}3b7KJ#=lyM}tP{}5}$)c`^mTFK-t4to|9OAs{hJtw&zS~H%&dAq5pH7b^w2I?sr zsiHtC*Lf%HhCofM8!PDzm(L0AYX;C4`87pBkRX+CPJrop3ayN0S&RslofKQ(@BFi~ z*cyn79%%Q96(C(?-3qns>G`r0s_-(a^S8HV5a-NNuu=#0a`Tf8Sj*V$Y2GPyT=waT)JLg>_m>w$RJ@FDk{JM)&v6%fvEZcHh>%T)+R)0*5fv47V9Vwq_s|zv9=U zVglpyzZ5#%o6x-3k;- zV@=T48J9^=K=d}b5rj9WJT5?){E&_gt?VKT#&HPiQ}-a1=fMBdSTKDn+l^n^f;@|Q zDG`^X9KRz~7|$QLSIbMY#7G;Vr0PpYHY%{ZWW1r+qj6-TwjPhJ(d=gNe&@it9ru0U z>nZMIT4zHE^&&|k$M7RA)Ih}m`d_b|<mC(LtcxE{{(%2?fC@BXDoJcV6^(Ui%gJcwi)d8ddG<0su{-FE ziXCn)Sw)Hzq4{R3)!Cw{w<+5nPTY`yP9pnK(C-3W9q;po&M_%SAgx8Qof0oQk*%;N z&ZsQW=kRZIQR#K)N38LDy3i}JB!k*loQAtpW6ie{%9-LQ)k2z;iO`tc?80IN|6jKJ zsFzGj2A!Wv#u#CA+EIe&38rmPX|^6}CjaiI?Xnd9J(W#!0-( z@3#yPrD_wj1l^M(xpjLiIGuXel2@HiZTN8Ct5i%^C5*Y-`n};71=@1PjK{?;NcTgdZBf z^n-|$yaRz^W_6P=*q zbI*_<)`xVIH8eP+IW%{URIt-`Cclh*F$CK-k9v~7V`2D`k&K9(oAWt8k*z@_{HlE? z^2r3Hck@`2UVB&0Da62@TXc?37)lFeS7x`&;42Sc?a-`1Hyc>Rs}wc8Y;9U{8=lMa zOC}E`7v**SZq4p+d#V8S)$(HvZ8&ErM~hT^^OHrmbkM6@Q+^4DZ?dr`0--DHJ1kZlli4}yoYGoj^TEVY>H1DLT$Xr7b>(KbYr?^nRUIbSM{ja zZ18=CFo<3qr&wLTr zt*Zez_*rJILp@a3S$}Id@*>{l+T^KMEcTSz1+kXIj-g|;)z?BQzLK8co$zeaK-{F6 z51w1O1lH#J>TJ$z15Pp#vyA;B{_&NzZs3ufw*w=al+CI**@8J_T(coM@=AmtunDLR~vvBcvypWGv^N z(9bi4imj5$cVJj(_4!$j3O=@l)6&MJy86^nAMH2G?Jqy!ejLhs(;`>rp>&9qgj zztiLrnsllPJf%xHrOwo|Vsk)6Av^1ddo-tPtEZJr6w08MfZa2jNU6y)y__6}dDlqC zxTa5yLq;74^lT7Pc+XXjmXhHX5ds?t7`D+%5mKbQ9vag=f!vM5d`CHsijBjH2L5>w z{(>;cx@*JiYqedsW{M|^f-Yad6!8VnjUn!|Qk?*T#;nvQ3o+ z3zfYm<$hk#t6`|Sb2HMdi>A}%j(1>ABS(&Ud&pCn1Xu5LSCfi3H>>AP7H1jw!@nAtjgkD5`N3M>?Sjt6Xpl0$PdN9H)q-hf?5c zU@Z2wVraye{q)docK$F7^M0nA(E}BjmkA@0Nodga5zhHhXd}|Md;Bh=O?yUw=!n<< zm~`~gDEurwpl3g>NZmBptyp3q9>Zoe=ktqoJ=1+P+ZY9G1cApy4jmvqnk2Y{deSUIz)F|U zD5dwJ*JPmd8cTqwrRIMJ*y#1(Xz@$WM0>4C`=Rbkth;P}&I$Uh0ZK$2>>YeWxTo-M zxHcxs_H3!kqGf)1yqC|nD+ih%YQM$ z!JJsQwyEa9fXJWvC(0hT{J@rB@ugQEc)ej}MzRxZ8hRW7ZDhwz^joFy z-foAk@}<_^1yw4KPNjbK+3`*Pqzee$o_y@xiO@wcTvP%siE(12oi4|CnB=IlY3cDi z>%yX+lQxc}#0)b;Ru`xz0?*we$06l1RvbDdiQ2wA~F_c`u~{P&Rz=d~7|2BpIf1yv&K;_Hs8 zHi0|kSK5M~lCN(f>6+VgBE$agwL~wR`lFz;D4t5jQ9|!`sLPBym%Nu)7Y;D__8Hn= z>ZrRIUGzFn9e<>r9>&-uod5Q|>aTF~58FI^A^Je^nDmTp>*~dKE}DWhY>RBcTVu1f zJC7kxS+#Rax<6-YE4oqXd9DL1nZsIR>8a!01XD9Sb_K}B|0jTiR&|&<_966pk+Xj4 zlN^h%U3WGo(!*mprdT!3=Y$sU8J<{KnAvHq>b<4MZsr2i|5J62>Y!95%_826(;uyo zh7F0lS!f#a3S1XapF&=1Hlh%DwN$KcY>8%Tzon4;*Cg{llAr(eZ2mXv=6{>{f`>@V za4eLPIoRAxe|Qf^F}C_U>;n;{ou=7%x1E@GeOcq+tA|0j+q$MKy&ta2O0l6Gc%1_0 z?q}@pJi7vvvHu|>U)F<>!cgKnk8cvktqm2jEVkiwsneA^+z`f}1kF!@n0eocdmO|V zVHVT~1^B|;ZV&;H{mw$WlyzUm_Tz8vAW75J*GHWf``1GZEZYAnu=;ByUJDK(i}ZEi zpkG>A8Uq?vi`}E7`n%i5Nasfle%`QaWBtFcy1BW9rgj1fMCb|`fX|R65{b}ZxSycq zq9lP{R`tbg<-H%9&LjT z4C99ZT!dNd5NH%1-uMZ0C^7;<^JW#8%G1?>{K$GhIW)KLJO?E-#A0E)k1_U4>QrrH z?;CY8dWW)qhIM#E(>ii z=}vd-#7}@XG+_adtuAG6e}M4#i07GrLMe`Qy@yLNuCEdR;ZR#0%uDnEga1E*D1g%@ zP$@_PNA)v2C51~au zT2$y&hMV$vm@sav7E~<|@0LX(npC{bR!)S1EtqG=0QeXBHHZ64hGpd3B?W!hgYA%9 z=!VuG=bg|CR_&=Js>E>gpMEJ^bSJr$6^p41aF;`@-hIR0pLhO!N8mHixtzrG>a@fW zpkyih0)#tNilRc`;`sbgRfMes+KHoR?r7eEID}}(G%D5Orr&Lv5Mlty7!17`T$Fel z5FHrm?&CqHb;@$?t1w)o7j)-KjhX_hwi1V64oAvM22;@>{#H=rnPHyQu?QDTHtA$BPzMqLgA3HLgM zSLVt?h7r_k%ym-RUC0_|eL|P;U0N~2x+^Y(u%~Y}LpvdzpD)?FQ_!p|7Pkx|%!X68 zAoNRAH1rE@2{ePh3>U)j;5PIJ8ZJtZLLz}A(5k-yKT&9l>7>jfU!dip+~Jx6+n6bI z2L~ikqz!C9x(q7D09i^kBMOwM?xI{$@!{>Z?zn$pGbn~0!K92KNRDPBqVh|$Z7S|h zlo9MvP;@@WbB>!FZ^|;;AH0140F{gzYGap($nCJ}W_9~45E`1Meo zJSs|A6TL>-d(3OER-mG8Ui%H-P6X&y0Wd8XKTJ>oRS--@v8Y4LHaM?*RG_noB?NgI zo+x#lMb7Nf#&e(5{wPj#8jNOAfICZ&RXgpPVa%%P`Oc@@jiqYv6jIsSDb|2o`|AiP zP`gdA3~HyycdfuT`A@zfL@x*)ypvGVyvInmaFhOh5r;E}`rQ4HAHi>e`9lnwrNXEg zWn{AYm8!!3Bo)?jn7(9CB|&fsBb^aD<(anXO0Ofa`iUV5K4}B4+p=j4+0m`abkb|D zc%8FWvK3sQ&Pt}&0$68hpLeB>0u;jq{+5xmp-A{YNCJ3M+;bvAQbLL>c71cTzlT*b zrVC$)_IDOy^AY6om~`IWI(UGeqP9iP{)r++;a|M%yq{~wNK|NlSL z@t-WypZ@}p{Xg&~{@d>E14+k*B32VD3D;S}?p2tT97 z(zYH!K}zGufB$PT`*T?)pe7Nt_LWm5C%9%s8RQDn-;Hc(QI&UJ)%%nEJWwqh#G0PR zi4FZN{Je1&#)#Y9#e%-Ca;m8(OiwbS9Cr`?HuCW%T>s1q+V^--ZT$CAR!$w$?FTS< zJ(ow>{vAEiRTQ15sb-UL=D-Bw^!w;s1c$>_*ULa=pcl{(z&o#SYE~~;jF;;+VC;Z+ z46^`)Qus!jq;sg+RXN(mvtCj=+^V=8?rDmow_rrDt0LyxOy-yV^<(qse`U*}3=%-p z$k|NWqcKK1$1izTJ%hp{_oW<11}L#qT*RV|f6|@|{`-3X3mf_+3Z&m;M zw>`1X0Sf(}|MA;eAS!KRPuLSee)lC^ShIkeEpt?YZV_$$n2L|u1g8hN@2S%)HC#{ zui`3wPE;lXa(;AN|6V>2Q$3M2wNU1ybd*-z{k~+%_DguSpHa(*dTl8{dlT2^&{S5#72!03QmSdr7!9KdMkDQ3A54zio-n*Tlu zf4|2yLWI4YZOk98jCD+ZQ866Le#qK)HovI0L6$&+*;0}n zo`~zGwkzI{yJzF&m2R7`mt~pSxL-a!>V_$qart4&Ry&5kDvl!j0x@T&?fM5>hcsnm zbSD@r>P)kwTL=@mmriB!e5FpQuOaE?;u-;^{kK;oo~Xk|2d#yXe1mMy)K;ASdE9EX zo2B4evE_HtEYXUML_y29lqJ8V9i&@N9x{fVeIDJcV3|#SPIH)M$yk4sSg+()j1}U? z*naRD`-$b9Ovqw-HhTy7?`Zu%gUV;t99J z#yIxhdl__Dh&cwJNWB{--QW1{<^~_cX^~AzBUtRs8VgIOC%n_JN`~}(SXqy_%=2%M zla5v*tTF=rq|w_WwxmneMxL5sLT#(RJdslBp|^MPeG2|4b~4I@g4bro%$R!F=i_1k z_J7jrZuI%AYeFcJLc29NT`Z>hv8`1dgdcT~&Zuyg!G6r{&Pg9l*7bo^&Fd2u2?3)0 zn2qjgSv#-svuW$emN>0XOe1z{e|7{<63EELr0JF+R{riU&mQJY9lEF6rt{=Pk>*I{ z5v*8jxNPy!GcY^`9mbhcPE2GlcH4r9Y~7+w|F7>o<`+}k4>S4o5;9myP_vq*cFayD zk@t=i##;mgaw?zy>;Zg|N8V9j4XUHZLJ+Q!O49KStRL!k^Vca$RWFl362MI`YpfXWf>A^re1MYHy~qni?$e#C|nUnhzHDJ1-(RWk^!nxV3*f+LRf6u_J4s-SO5aWD=TVCFKQBz5J%*edU@5VtN#ar|_&ds}@eJet zXFl?EBv?~+5lhnQ!JmpD(HCcj*#5xt&v*b2=M=uN!J;k7+2EO8()tt~$pWu3h?;%| zWvYYkQQ4-ygV}a|#^8_Y*_pP`MqlnEzKDz^%cJYl=I3@@Usvz3!=sf7Y)Z4Nl!eBp z`t1SX6I`#5()F?eI+!lZ5~0mGd{6o&GWrS?xCh0bme-59zAc&b=GXboS;nTau<7`@ z<@hSPaQi(AhMS+`X&HiouqXJ`LjKL4_#D??LY6J=h?z9Ez=Uy?nkWkXekx-dhmL1~ zsz`6C@{;zbcLIgmI^Sj-r9CqqNQOtco3Yhit*Zyf^qF6~=P^b4d2<5tjvJpwS%v-XMI3Gu>J6$mU@%_rcl4o$=@toTkuQp5#!9oYUqgs#fN{EX=_EL-k-i{`syY}-# z>h}y;iGoA{6uroAfFcRuZUszVrSh|<6yWp?3Rrt2@SKs-=>edO11K~5^sje)5x_FV zWe3CU9-W=8C|6H9HBM*wA3XZ{E6r}>m9}s>h?7Rh|D($HX zbZn^jmBk;ud%nMa|DdPyYsv3ABF|g>-#wWphxRoS@z1QgNC9CX8U(*t;M14>XSoCi zacvh)3O9b3GSyzy`TX|Fvs9BG7Ipr+4FLyn;Fqf*FR%IAPSRN_v|8-68M3ZaQx=wUZ4rTmS=I~}(-QBm<TKXy*2W3BJ&STc-5DSRRmZc*M~D$lMi=rPZmrK$50y~j zq7U0aZG1>ha8T2cJs;>))La4hr+?HrL`vD|;(9~3IzNz^TO8q*=izOy@FbY>Z=hm9 zjpdIl0(IllD#qpsyDeI-`y_83-HG;Qxc->FXYEKwX{P$!?WF#Oer2ud6PM1(6hFs1 zs;O1g{!tEpc_aX~oHjf*ewrp+oUqjE|Fh^irk??$=k%_rM! zPe5hRHFG~!>fm&py@+ma9v+?tiK1^He!R+{2%OyFTakW#%T9)tLL1|EZ4bho`_>!} z=m?hC(@QE-3=SUOl3kYQ6)7$o<-?LMbgX3c0-yL6Cba#El=HaCiE=4;{h$*SDu&Y( zjF}L3{7Uy8lh2NKTDQ^G-T4#X)Z*;#7FRN1Vi9f?i9Ju8#8#%E^Zq_L1ae+BHPl() zm)X~+>$Yx=Rf_0@=PHARXdmSyLpK>Cs1`Vsscq*HRcGFuw^p(i z78NKg(e3b4xRlPmHo8xf+#QbKTu*n`AR;`pjJ>l_if3D@Am;*VLH7Uad<4r!0L{U3 z3jXoE#)a=Ie(!g9B6ab_DM<-nvcAw52OKRQq&A-NM9~yPCu+~VaaZ-&nv?{o^8Op| zfr&I?htg_W9N2ZQ+V}VL{3DlwO`bPgE1M>AIl9NTPE5o2%-C;lK+F7Vr`JdHT?f9h zEkh3`#nRd%^>28m*?rl1|D@2ux2)FxU=dz>GP9f6w<5PXd#yc)T<$$Y=FZSUcA&1b zLO)%yli? z@e^zZic@`LY3p#?%bYO|J01S7jnqvBzL2x2}rImwH9HUSV&Ck0uj-AFEia zu6_H$_%k0v*aL8$?4%}5L9xN(c+>sDQVrf+$%xVAmZYYt&fmqE1fbXLz+8VxY zHB3f8nJ)jbS!@ppYH13s(u+C)IxN*8m19~)wxClnp?5K`lB#f(7PLsQ^H)tDSz%ng zqBCdx4c@fu;=(|DXhsmi#dt9G6#ERTZ7=`SKZUiDuXCePq_J)=Anj)3U+7hhuE}Xl0~u(CUk@-3t?iY zLli?W25If~H}8zFS)0)v#-Bd`l;1r0?Tbe& zEp{iK2*Hn2kEP2513u@*lpJlpW1`i2LpLq0kD>ZH$e7ZmkG^}@9P0sg@%o(Wi_4P^ z8-uJu{IbW%CBn_ULEgXEulE-F@L2g*xbL2CKkj`-#4u)1zcR)?^A`SVG-h4jfFL{_ zwfpNk_F?1kYZE|q_MCL64lh=y*>v6IG$lpov^Q(~0l@WYZISvLtn$FuyPX`vBDBzh z$ByAEvlMsQ=**ovzo(`PbuJcnQ8A!WjU2!5O#Qiap)Or%lj8?o%|GuUz3tXbh4@R# zqJQH`CQr{E7<-P9iYPyw_4AFZKizSZ*E4oJOGQ+Q)K|3hVQae?mgygPFL-%$A8<_? z=s9XcyJaJ)hlIDP##68|T)5BAdaRhXN`sC>2`AUwAC`%Tn{132R zBk%hr%R|7r8E98PSxJi`jbem1O<6YXmpF~10*?*kPc}Y(K=?S%{(^5}b+FB=oiJ-3 z;ok*+LKDL&86(K}J_c$UXUch0fJhQaaM(!``}uYx2ZN}_Qf?%IVv#U5u&*TH#PiO2 zh@UgHDLjfOR%0w)FZdxTsg$PTEK})|QZ8N5b7a_)37Qs?Y=Pf+potdcelMD2AQ-os zL#`h#LrV!WgDJs~GNZpU9123wi&;WhD4fbU%r+{$((eWBj+?M5geJ2~`sk|Tdno56 zJ>^raZDbdR8H6oLtkTWX)ARo0^K7M{rVujGwYw-Vj;xe$;m9k)cLsy;5#s`vNE^x+ zB9oyt&NQlTx}d&2Z+uL0bh}T@LrsqG1sM)C{z`-X0)?<;pAej2=%g%|eL_g_{3$T$ zqP-LjnvK7HI-~z8MeE7RUo>Tjv2tpdp0Z85W7tq)8b-Ka{Yiu}@tuY0h?MWg{<=BB zG+_uoM3rVw$30}K)YO5a<+VYI;->(0nDs zRSv8CnCa7+n#acLD-WLw<%oJQ=MvE*r90LN=*-SnXD<4QHkUWi#o}9M(14p0{tI2( zekqnkLfXi2FQYRlu2=Z$HK?PZ-Es$u6BK3r9QO>-^Kh2%_M?UK0jF-2lSh&J7|}ve z2wQ*rtW_y$hED18R;0t|c+)$wlA6=9dP#@UGrQf_o~=!+lZi&p><+I?jt7q0JUp1T z_=@YXACKosugz_8jS>2|oUC}znB9w!kaw!wFyX-nHBM#0KewJQSKU8&d+$ij6u;R8 z6EBy)Hx=J@6k@8HR=S39(YB>N{iMv-cc_Qju0!kTbG$rzA7hwx+Mg-82e5VS)H*AqZ37g0rdhOJ47@}xZsYQK4q+?>Sp*6dxystIw0*uQ}Vf0FTsb}h(CIsOX z05GB&4{D5_HEqkC0)kM1E|D71S@en$3U zH{*v|gf@SDR22W?1(VNOmFV9LaC&T*V?Uak|GMK#;Mv z$+Izk#b=X2<18)4i)tD?Qdjk*>LTCtpW?N{tNL4LgQ;1|2SrBjMKs1=%B1|++7y*s z%Dlg;B{I(ZpbJHEloQa!xSZASe8q(^XwoIf(~x0eK2g1~DW)|yVJaOY-*qzv4xX9b z*jN3kpFM09lc=rchn&3AH{&>Td96`icz_yP$b0iK4F7TucrADi|Pz9!p1R4m zGHbGH5GTz`6PHB<-@CfR>7j-%5{pf;KMDOx^UAL62sqtvJ~{f#-NHi6KRWzco(}7> zC%1ql`#id#yH~QG8y79IH`#5cdZzHo#%w}@VpMRbwkYtEH3NkX>3qVCoeYalUuDFq zGFw7d$WeD{$Xz~b-uwcn%&m9cO5Ul-b*1Z&AaMzoyqhLz$3RK}o!S+UqwDYgkJy2S*>t|x9$E>ruD^4`+tNlrqo6`$=>&{fRn~0V> z2xKwtzWOjd&C+jGqkLl5S6(isJ_vJ2ZD<@nuU&KXwZvu3wG(nzxM3R~mtc4gMW}~- z9&G4B7cRR*O6nO(FL%@bk6WK^Ajr26HQ%gFOvFq?pHC~IKalFulzN*NKp{-U7l~?_$pEg zhYomLUrV|5zkh(EOKW4hBn`p~@krgbQA$7^+QI-!5)Ni8fkza8bvx>0w9qMY~3 z23QPH@DukSk4)5eitkBYK|u=GjR=;D11L9I+l}Zn53}YLlznzm%4l-I99(pnfcr4b zi*GV>>&~6i?8|MJ8Ptd#yw$o{qi7C*#G=C&!_Qt--GaaWDBl13)DX4YCoF;O3(NI& zYI#$C-DPULG`{@p2Lnoeg9jUBF*B$9E`3m6+b*uJ^Cbz`QLq;$gouWRpU!DGulNpa z^hnXE1sw3jI*uU0zS=Cng};}?DV7o;(ogdk4juR~p-bJNR0`K=KOiDGaBP7$a_XnZ z(?tj%9+A+2ty(qOMiwo7PSNe0FAxiSXZR=*3a%GlH zK7#{!hvbJxMb?&dPk9CG6JT6qZoOEbaKO*UCiWl#FRV?3%SFf*PuDS+Mxh8ek zscu}UZEpKkF&Vfzv)84Shky5*9sk(ekZT=z@acN%WAUZkl)j;jK6NIUc+A&=pJ93; z-DR4ZhhgOb23-A1G1WwR2a@u4M~A=wVg6@aZq{Y&_KIgx$@HHqoQR3-e=tcK%`O+8KgOSMI*2fYMB1Yap>$LISP{zs3Xupf4Bieb7 z#Hg#WFK#Vj8g;7WFFW`efsf1I`nGS*-bqaR&*VpS=IDS|kh;sRgDf1=>sV9QR~qzMp&@T`^a#!JZRW%XhrsmBq>&7JcIL ztwQ_q+5SiM?5yg|u1SqNj+`G}sK946XB*@5fI90yB0_EYw4VpJkVm;dYr%1{!uP3L zn-1%4kY_3&vG3-+Acu^~bG#(B{5m%V8=-zw9C%EKrM>dj#ySi&xKqo>_a5xZOuVMA zOv&0B5e`Xsr?oc)u}BD=EE1lM7&(R8%Hc~-Lslq4p$sL9-O;YlHz^Uy&Uz7ixG<|NpI)qvz+g>Weq)> zA+BGo|47MWchpVkyl=j(wj?3vFUR|(3K5dDRC$CHhxgiGb%M9GwM#(m$NV;R$R$$I z!)Ke5=n!#@@alsppWh|(rv3LOe}DQa41r8lcjIlVIoG)GttSzdpk=rC$xBxqIZ}at z@3?|boe@Wt6WxHE7y6LQs!g;rG~|TY0Bni-rZJ0@;cWENL^hvEHm_-Y_0PFa=!i?e(=uf%7}#dFt=e@&b88hHRMsvT_jUI+DdGd3>&9+K8wu@_zCjz#r8_1 z$5A8bs4Zv~$Vy2zUU&Tt-Rl3utYi7Z0=-+SJd)b<88}8`yL*iSS$jGbYJ#-B?PCic zcP2a}aY_KSfla|M+AGwe>a-6;8)zA}g9skHRW3b}VQIX^hmJ0D=F7Wez|RUbtW$f# zTjhG9^7UX^pxLP9QIZX19bD;6xl)_Tqs^O3qs>Od33Q-M#0y3ZgJkK#Cn0o|JY}mQ zvpY9)b!SeU9~JQtlRvrQ-(WWW%=LAl7X5<}v$FFdGD_P)PvLX*+kxC9S2zf8${PPHz*rihX8RnoUP1a3<*1XP9 zOg8KL?8J*gI{$_GgohFSL40~cw`s%n@4zs;&)7|@BaeGUgsDv7Xnl>tDzRpGgo~B{jBp8e^`3Heh5|NUG6*~ce?g|dCvcp=s@c^ zPF->S%f9(L*bC<&tHFQtM(DhaqfvK_2uPgh9Oc?tn?h9>Cec34NhInpQgi5F&8>3M z9?;0eN=gDeZ>H$`VyLTdLua=Y1;RyVj&mzv&ssy+1AvxCIViR7x zn0fM+kgxD@{Is22Sk9tJ?%HZ}C#5ObnY9ySVQ}P3s}6E$fVeg7U``_DHU0YRZq0z|#!n%^ z{2vjOWJ8&!4l)o$5h^fs&KyG-Es(TUwcO*L5D--0qV`Oy5rhPyb2<3AoF!Q*WQLo6 zM{lP;%g1J_&yt2+UoZQ;gsM)IQL3WVbKbHNmUQZ$FQyOWA-+5%@kPuf$x5`nDQ5N* zRAvZVlj{w75qwGd+WUQusW%atR;*0)+K?q^yjT$3Pw~A@dexKwB8ac! z+rH`z>Ibl(Z;j^Ab@MyCudP{)3gaS-cn`xwZOdRKh8Z!SwQADG3!(UG{Qo zU1_=$43T*~=7U{`LkNdn?qu;?2uHj`9iBI>cDjY^%gLn3Ihzyb@(bq7y$*&f8$6C8 z3MQHlcIy)9)E`B!;|{n7pBN_@OSj#scMasx9aQ_qp&VOkLqmM2jfxl~Ibax=2~789 zcYlRhaZhYN~+c94!c4BQ_ZG*@8_Sl= zxoO-?7>bf#N0y5Xy8hHKnZfCD8zZ}oWr28jD9J5ao^94!rWwf!dZXy#I%R){Hz~=d z5jiyPOF#2n-d~y_)^V!6s^9q#^Y*FY`;X*VDn%3?|q>p&A)jb zA(>>XL#Ic)HE$DGp&ZNiGipa1S4G=}Z&&VzU+)-S>yL$m+{5wTur>>LGpKsPyX%s7 zR&;SiHha(K2^D>tl!AAQoP2aeSzol8nd%Lsq1qD_chx!TjKunZR55?Z;Y(|tiI;;Dc1GWfF?1B^`02= zk1Fyh1>NtjSCeidn=K;)y7rhyvTUW5CL?&(nPIw{cZ}62x$P#L6;!zh5e6Nbx*HeY zKUi)IN+%>=EU2f8Y4nmP^n|3QzTYfB-65uT6o<;y*mC>L9cv@i=gH}%B^`OE#@=du zzrof<=h%XNw>=zcSu?Qf{tis`&2{&=6BI7T@1#qkYS0$VN&l;`>x^n@>$ZZlAk`>E ziu58Pf(p_j(mPy5DT)-OcaTs*k$@mgK{^C3%2nwdLJ9_uDqy3A5I~wh2t7b3-@)tq z#(TeBek5a@bM_v4pR=;}I%};trwro$RkJ)v+m1fuhmFij=GY~cj&EG%xmTK6VScd> z@IGbRc7Y#PFV+xDZ$m)BeMcl91H05g7?!CaW2f=$HR$o({Uh6oP4wZkiTdrc)0i>p zO51AQirGcan#xV~QIGVe_{jSE0%%*ru`8g57yhx5gc`zT-#nf{{4q=9yv=ygV?Vozrn~%;c2#kmG@GUH zGbEZP`cYID!<-`v+=bOCeQ^s6U@q4`3)`<+8xgcqMTr1(QB*{?G}M95uQ`hyaW*N3 z$r$5Mu6@A71#px>5S&$`x*<0Uq21gM^*V4huX6&&5cv{8kPG}q$dFMTo7tS>4inAd zd}y7yq{ZKK7BK*NKV*Z1P}<>?^Ydld?m2SRCYLr_boYk%M3(A56vCWO21cs zbhF&z+23r?SM|m`5#^{?EOF{)$A5*0d@O?F2F~Tamp2S=4GpO`vCTn5ZA?VPg4)-Q zeaI8f%320gO*a>R-L_YNE#3A=Tdz+hF$TM)n=bJ-6(o5md4Es(2~{u|-{s;DC`0n# zd1CzdKMFJC<E1fwy9x2swX)9+^-h~ti;H?<49A}yUa8v{eM=*oS&l){{H z*fnwOa66eMxgzs|51%COeF97K$ARPKpzmM90YOz32V#A)Bnz!QgrluJr0nKi3FXwx z1cPtV9eb^{qU31cwHYJZy#h1k;6zrf@8qOgjKfHMW{tZClF$;m>krUN)P_#kpK9L= z;kE|^8ic`JR(oBO%Q9F5&@@{9(Mu`C?#ORrW51k=dE;HvacMi&&p8AmMCWrK-{NEG zKIl}LCUKgmsHn8Wo;{iiZp09xQ?OeLw^kbI&#_E9rs1F1YX!R2n`*-pn(mHMBd)ue|Dl0M4Rm=NIhND~vxc z9dD=$@htF0#socEzbVA?-Fl$z6n?EBf&ssg^Z2mgCps7l4?KB+2cfsC ze*ZbZ9fbCAJ-f_^bl4Rv=dSM$9>(#VmgAUj3qNYv1aHZWYU<`qN5H9qTgvDp#YJwf zHRaub7MzNM6aG<688%sxz6-c*|XCoA8o@U z-h{G&Z%fRG2bo0JN~9)u+p2M8+iBi>{3cJ0vcn7-wXq^&RN68kxE|jdqiYg4ud_3v zi0tu*#^l({P;?5JP>(Eo-o7fm0T;69iA9S-OVy735EMiGK;2?fx(gdw+M-00shs!z z=yEeCs|c-uDrX{x>N7^b;nz+s`eu5oUpXvv`buGSrk7^VUfUUZDBDzj`)poUT6_Tcx8FZEli9py0G z8wRqV|J0WwMttc(h!9I$_!X$mf#0%lB!RPlqvE~V=?NDxz5%ub9>$3vaf+$wkhEMg zW-3Melfdm$f|hcUD-D=c?9@Skx-#M}3cE%Tn6{|Db>(GTrqM&=3wh>KpVZaDIry6& z#tVWqWVZyb-%-%IF1+&i1&RThB~)xtutX%l>Mk!=x9Tz_&N>N)$1lgncftDA8JMK( z^ynI0h1FOPcMfoM9u;^+eY!*?X1to3YPy7ZseW2S&X6gis5Ku3K4 zs>d6u>J)ikY=@bm*&iPj!xQt4o3`)?XA>j4MzF#z-D&8fCL77|jcOQSC)oWE#=-Y8 zN@3!^7SH(8x?D0j7{9OT&HgR`ca2R@6prJ-YDpQ@i&fSh<zL~a!5?BfjmH+j(BXWyO`rYE2_Go) z6z8`^iEpj`=^ONTwlVN#E$o<6xNYxlakLU0$iyuVeIcIH*qGCDO@m3W9u(%_m^2E8 zx}Ce|u`%Ryfb{1=@SFw*YG=!*EA8%pK7cm7IR3d6k=(k_Jkbb$M>mwhk@}uN8_EcN z3gS%BF&9ejlV;`3kO#T zJBQDvi0gl2W^yqiz&IzA;`Q^xR`rrPI^xCh`KFFU&HA#HCXj&(V0KRb_EUQ>4rucr z=QV}CrNba*bjnRT|72fSGg~|_H1<@8;~K4&>x|&(N@;{JJoQz%(uLXTkO5L^Yjia< z{{8M-loFDBdUPaFW`h8;`$Z4gKdxi&i{fnRDqxms z$L&*vBxoK_0YyHn0Q!L^L?80Yp&29vFXOnPJqmVE*gCX&C{$ae1d?(zpYl?llvgFd zL*B+LbmVU-kgdV+U-6^Q9>q25d1pZ;Xz0|^I=EuB4dnxYZh*4-k3b0qUmSobGuD}1 zIG!f^RIU}P%K6NrfNbm3+*iWlsgRG*SH7~ZZ2>r)hMWx)6eLM~cUHJ9VruSE2L>n_ z6^z3pA=<*8;{5ZXeAxyN&KNDy9uU0V46!zQ->n}#acS0c?6074zDXwdA{?Ww?Ky=+ z%vL5&v@0Ur*Tk3uzNpuW91uz^Gn!HVcT6~H`j^p*n5@T|;U0A`YV3`jf`kt{i+Eeo z!o~UBO93%3v#2D%C}BI?qVvf^*v?06bv|V>`9^E;4sh7(!`I4{Y1>J66Q#L%>CV1_9+}+;!*c`Mon*X`V z_=k?C(AIOb(j8@yA0OnfcERomgGiA$fHYTKA8^+JfJ3`ENXmg}x*)Aq)BW2v4xULg zm223uWgjci=RL#H)dB|F{Qe4g-sH>^qSApmJtAs1smjt+*6M@8z7W<0#(mbDA%*VsD90I^5|TU0 z#BgFEz~({noy%$=M`;DFEzZ6iO zwBewFk`+fv%spw*&Xp}osuZ>QuA*J_%7$*Al-la%6Z&O6u=&mNdwPR5p?(E&v|mPN z#wo3Vp#9lxL%GuJgdsDXQk-l6K7A{KSQC(GJw9c$2Uht(A;Vvaq{KA#kc0MY$Q%x( z!W&uuZQ$ul_ZQc16|xQA7(3G!Kq)r3# z^o$1tiP_2$5~$%bPkRsARr&hDfCEE5O#y#8i^VgQK2h0c9k|4%ImAqpAwL zPpUC-HbrUZD0D-&un7D2UYgmislr|>RHFxb*jhOLrmoS(#=@&&1=*OOVS?$T2&QC}n7oBsc;j%{m8X%c7f+WyTUPNu6lKjKmBN|EN zDsyDnB;tpq%)4KwT7L?(1X4K*uf_Jd&E5!cBGA|(Q7yI*+$KD2JN}G-lJ_VTFxU3K zzI*lTv_JG*^nI=@gZbQ9IlhdCD`&cfQh5Xr5$SvqIme1ds@Sm(f?n{Rfw!RrjzbU%fB3-DWa1@T$Y4TX>UQ ztoGGxo$hgsUL-6qQ+R2_qc{+5J)f{YG%-4lgxywm%@SAIN}l%J^!IorT=y$z|GMl8jv~)}gw}Z?0_@UKBx8U`icE!ggH56A)$09py_*kmPx;OuV zlDy?W>`K}2#Dr&Za`Hp{gdM8+g~4wz$tS4vWCw$i?V<%U{#zZ*0~ChrTcQ#36>xi z#Lsn3Dp*Z+FUm{SZB6jPHA^GU1`kH^Iafb?YqO(|98Ij^s0$w+dXP}yVf-TKgJS4JD2fO}5Uz53=T?P@Ph=Ifmi?m#q zU%1~S924zpjTy&#U3J^fmkX3gcWj>v_;{0RGjA#ct2L|=Gi3@e6401fV3qZi14(T* zZb4tzVTT>aZ?i%yMDl-NYXAOp?~JzjNBnI6kC?{r5$<7Lq%^2!k1QT``G!c5c^eOB z$uGy$u&v=*hKrfE`Jx#OU+O)6;7~E>^o&ER?fy#fwTLtO(G*6l{!ut)$I2#wl6fmC zXSJ~`nEFmqz?*O$l`;}DvgR~yKd)`=!_hqGmG>vV;IbfxLL z4&|>mA617tSd~y9!ufjfs?mO`lNGJncq<9MODNkv09OESUL$Np+uLmR!gCw36AQ-|*a_Q1*exAZeq;u-w5U}b;Q3YzIxf6q_3awDL&qPaysuoxc z8~%7sX4%W~n}+>9kE!B=Ku=1*j-Z5x+SB5pxK0uE`&G+-vF*}rmL-*?Tbd_Z{|FYR!!QcTzp(2B7` zr5Gn7tq1mz}r?u?Cu;NBBxR3PJ#q^Qf1LxcHrwE;;vmg_R|KRvkh+Ez06>vm~g0 z(lw@Wou9_Pw0cGRyLcg8X3#*xcKmhtT(ysy4efnheb!|sAP!)IZ&=oFF(4olv8?+6 z<0PdhQl1^E{PaQA<5^8mB0sc>jwGmxpC38Xu9&ecR^?TDdzIK&h6yO}%`ru^E~XD4 z*b_`n#tB&E$qzrkY^~U#^_%#*gYX-6%Ea0A$I}H?{M|onbpQL1XlYa}blnk96HF=p zt$sM&3!n(ZiaJjH+vfogEI9Ef0Ah#^hChcm??S9=ofCrh&Yxhz*G_zlKXeTLDpSSZ z{C^Hv(7y(%e+_>RbS4T=h%*HC+<&piyC(zk98>r+BOv|uhjC*j^*wFx#$2DQj7*=3 zs;X!i2zWA%082+F>#>$LZSR*qoTYN!lW5)t5Nk|mLrF=Abx=@{^IhOdEfytrclQJ6 z5fEXF1HiE-_bc3Q>4$XKQp2+oaamPWQ%Xuo_uaE6H_`WRBytSEIUimd0;f~L z??Ma=4CJ-X38J9^pB8$14OLr4%clYj|U*3A2U;ZF4TLc7Rec1C(36yMVY+V2Cn`NYW`-qGutSZbt z@##gKI#&wm(FMnsCtW!coxgUz#MQexO;ubTZ@zG!xPDX36wH>aM+O*K4g&68rP zl9o7N(<#&9Y22`CPzD%IyYD8cXoSDatpECX>4`Q5&Og z(ZK}n->rk`+%&eItbIy65v!A{92~$!4p&=6?!@lr?TXU!}Jt~&|!8Ogju zg?;(IZ-zg#`QI<86FWHa@G}#J7!myM_OMwEi~GNyHcGBS{C~N@>i^RlQr1Wa2?<+S zj+DGKI8d+50|sDZ#9Lb<1F8Rch~zb@<7!hsO)Y0Bouxe)?-2IiTR;DE1wqII3k-ck zm~$>2r^|jIn9F?oY>Cjs=IQKdejA{B^RKS)@=CQU_LOfYEp0Cb#L&Pry$z+NCacYXOoe@@WP7v*5twY`-)tC!lU^8P&4H zsy||X)38TaY_b`sngSSBtS|T03i^8|bGv-s)A3DJ##0B@`D6u6FhzW2Qu@{*C*C#2 zk`{TR#Wr<`0Sq0Vqy3+LZt2z3HY&*izKo9MOnq=ptxZfIh*68W_#jMZ?aRUI{$+|O zVi=EaFplB&h^hnt6tlq*v9+-|49C=45ToVPGtRuKgnj)ys>n$+qRO5vjp zE<@207n%o$_<&D*ay8ntlKuggihnAzn^<@f*#G;#eQ5nunV7qF^-9xcW<#SS04q&M zE5IhunIFvI;a0pOf}9R}cgziaTk*- z4Wr3|<1>>dsoP$y(PoJUrX6b?@8V^N(wGF;82R$+3Py)~nxLZXVoHQcvCi+EwXR6IunvmO{ z+u0vWjR0>Y)MKSUqvE6WkcR>uuIDX_MOPIBN9IBr<;F3=gii7Q9h$p5X#C7KgC#3} z6)SU;6Db{7Vm}J=dgN&j_=UWO$W*tYwWc#w$vtnGV+gNDs45t?z6R@6YAXq;gtEBUp1YRwAXfGKgkLKSWW>PdUYmXUEk9bY|4? zMnh%3zmTJp?-oVdbs_Up1eZ+E`brG!qMaN1zt~4!X8oKw_P%ye03GO2f7~xWP@Tw^ zBu;O0lQnO|BNKnmzW(>rVy+RMb;b7^$hCMyqSIY*vgt|DVmTj)b}T(c!psJ2bCjLH zX`{oAQIW3fKWWcz$!8bTGxeb?-Q`6-SK$+}uTYyax~t#yk1E-BI4%q! zKo)QE#|U2LukO^_AqcleU*_YsoEY**QqYX2D88kH0WiWop|^(@a`^`}L704GpF>~F z*_bfS65}rpM5aKf`xBr1NbTtNb@5<@EK>!(mZnjIM%s(xC?vp}u^uDKim}4MJ0}&} z_!_4oi6w^Amc5zA~;<`=Dx*u(eja6Ue<3h}vtNxYWt zP5M#Ui)s4DLrGWMv0DP#&;Bw0GIVpY_t)aTvxtUkcQq=uRZ~%^`_P%(h3q&m?1!HE zLMSN>_BA=FsjeT;X3DjYAC@E5e?M4*%V*?WCuUW{@-Y^ZnD8;|w8J+m*QgBrKndlm z0Cz)3xCd7i3%x((_o#jNyY^QU5S{xyv^-kY9X@Kf;ith5p+Q8J%8$q5!IZ2HE`u@8 z27NVq*9d*=CBp*V4urGAxS$6xm&4wWEM^g`n5CdzS^t0LpiU0M9TMnpZwavLF-Fc*7e(&Z!QoK+~m# zt?K;8C17-6P5xIxBuuu625nayN7o-Q_R1cKtjn<=?H&3%`BUD!AuO;W-lHLDFN_PqxR|DDwuXy)1=(4Fn zTp6KUBJpiqqm9ZH3X=DbFA@@xM<&kL4W~1r<*rz|Bzsq!gqB=Y6n(y#Q^!*F0WMz% z_?dmflluPEX)*(#!^pDkJUG`(F*zwf=3wLa!$}1@fSJ0Yn}$|tGC28ES$@jl;$9=+ z%2h0HadxuS6J^`|Qle{8^;dSHLQMI{XAY|@DkHA_8c^Un-Iu>A_P1Zg?Bu&X%fsSziBP0gkN@Mnn1T%mKrw>4))TKd!!={Ur zNYvO9KY^hl5u-5=zT71mqD0FSZVm+|f^)?Va*LJQ@C3pW`+t5-idsy&ETE(jLVam_ z`M|?NW+UtZmTB@7GW}0F+f`K5aPBk=&~w*PNwgSFAnkM)21mH!8-5$kJUU-#~ zE}zNzx)QyOTn5{+4{!Pz(RZ7=t>=Y?N1idO>iMTDl5C#CA-6fm?L}>)0D$J2ad5Ua z=3WIO-c_cH3{mO8(UtekWFDy5{ftya)zWUlPsr!~hinon1qFpD{*~*HI)p~vZ_33n2rt=r z8wq?T9B!X#JJ6-3ALd`uj^kg^hEAGsm-~_)(R|OXkOFKvQG4Xj0-`e0Jv-a0@HorQ zsq9bzP8z~!v!jYSEtjDA8`A{hktgki7C|@*7RX#>lGBVz`L-QU)qSU0VP{A|tW5Op z-{?`wgDbevemlnwS~`sfMR|t}E?T8Z{&mOBz;Y?sk8=AXX~l*W0_`0rMz0%NpD=u* zbP|WNf7J14*z)Jk%nGzIgBpgC{~T5B)<&Ns{25a4j%Vgm+jgJx9JQ_0FjxH(^X|l~ z>U(1Wi^}zIU1fxA1r($ejeEq${FHoPL2zU3&b#N@`%Gh9-WXgz?ejsqX)QLb@y|#D zKI6!gk>x*hS>1_J32h8Vjfr04v1SSf2Z#P^N$YIPi;&a_JU-^CrH$%*0`0x|(4_t4 z)?c;8&I^Y((h8AcW&I5sN)sfi_~pZ!`e|z41@NMY(Z>Zm**ybNo6I-BzJEygodahAp%Gm=ke2@>HI6>Iv9lHN z^6pYFDJ0L_isHYeM3>?B(bQl{$?*008WT5u787IRiAsI`nJPoFD#NZuj-uzCAyk<2(P74$SC`=-lCX>tdk|#$nWsAO4&R(XYiFNCl6_1E+0dQRxbX__g{e z6Y`3^C&YV>oA(p|K~Ew@!_J|LnaT|~Vyom-0OWTOhQmdVcDjHkauNJ{hrLzt-Xa3e zhHIsNYWdWljp2f?yq=o`3Yl+kd0i=m`C6#e|KosS`tQ*;jM(xVB+Fs(of6e+LJz|G zPxxaQcsm)t3(EdtV$yZ&SeAq}`|Y4Aknu<64Jd97UGX5we&q~}K!rW14mce4G64Af zbP|YZ52-6uD9j6J1ragM4DfDA@SNxz_PVL^KS@Fd5{*qy?~@&to82&r6f=|-*H>R4 z(%_~)IY0tt5~wB%016M}6s7Q@F0U$psgRA}mB7vACHa;z{Q!&o`%Ukn8-W43&iqb_&D#CXsC0 zZY51i=gQr%wC$bZrZQ`S@Tv@jV13RrRSKc4S$%l}GO6skO*LM0vOgM? zZ*wHz;awtXR_RSFxaiDZ!%c==8h?w$qJKbRubCus*c)^Gwf8|Gv>m@nPgF@dnROOQ zLL}ki5%^;os~!%|BM2o^H|-`U=iZ9P9si`~h5_>^`QekE4>*dzDz03r5rciD)6Vu7>W z-y1{TT3u?0L*0StJj3``&P@qm*2wY^T{ceHHka+eLW8K?vf1%F8M1dk?VH};mss-%;O&+4a~*z41M4_yVVSyPHCAP!@Dv3QaM}@VPFu?T zPbLOYv9h9@^hb(@VbN5(pBYfo5$}dpVB+8e;j!ps+pV-VJ8mIPO_e_sbqciXR_B-K z>#(r~eS%=t*LI$=)EfBZcKJ(i}K+1iAxA{!54yM6rr2~B| z8EYjgy>1Q`(ETW|1Ejz-g=o4OS}ihDs)hB?`HCK0NjhKi`WXvri`{#eSB;To^9q>j zHy!OkmXvG#^-zyUpv4~^8-y;_L6o?$wSx#62%uNX=UsF;4$q@gprYIq)Zr{f-fLgm z%<@cM7xpfYNfYjLBsCLAUsw5!yS97L)5-!#@R+`p7T4M2N8Mk=Lg;#hOvK}_JfTV2 zv|d<|iklHt(#4sKU=4-_WaTXlN%=p0^w&= zFAdLXyX$Tp<^P<;NRo7WCmxsYln<*_qhPB)d&?MeF0t`Ft$97koEECW-;`qJ9GqNw zvXSa2Rz?YVy}wa~x8h6GkTGp7uZR@5^}BLQ3KAVOJM7YjpzTNLs55n|Ux&4?z5aOr zfRcS3voq;DA-(K*+p|AUxX2=KjfOX#5q(>cniHB;wC}z~b%r7Qdt~GznofORYQ|G6 z{bAm=dMQmqF9`B&XOqujwU|_3MNh)hGnUO?D4|RZ0Ui|DH~JKV%g0dBNYT)NH%S&) z?Xw|QZ#(&^bM^FoMd9OKbhJ{`idb@=0 zH7v7FZm@5x;r4@QeQ;VE|KXf{q@(Kh&B+m- z@N%xPjClmZ@#k}f?T9DE_n2h(!7X23lzT|3 zbK%^w28+K-s^Dcd^X_c*$HbMz!+hza$^4Mk#r9wJCs`QltNB<^U?BWlg)XGGS3 zp~|2`tN@&-RQFw8!21?er{V!{_?JqP1j;7y!h{YCc-8eLNtNpe7(fb9H^i|3C#K8s zpMrkx?1|ss=^TCezT}&)C3o(}!V#N!P1?cF`J<=|9^fl$(jP8AjN`7Mgv(qe+Mock zdiK6PTSZ5>^n=)UJ)w_PR=xpXoM9;IJ2rPZk7mB^zFF){Nv3ZnV^m;Im8A6jXk_om z@2-ptW504~z{Y$3#FM$~D<_gZqI>%NzFWhUm<6(60uqbI-CuezImjO<)&x+v78VCx}Jwpgc-ULaWh>P2hVuOE zjQ^`Cc=P)8jpF87azD~ZpAd^Dg(P0l<%Jeu>-9NS=ogU!-47z8NtW`I16yz61C30BZI@fYU!(z3Z?~uzjY$wfaKi!Za6x}m4dbGD@ z^ehtBy3yqDy5;=hQY7%PVY1p$wf=A!1;eoHOmUWRuZ8d*)%wv+h|dFZcKF0ftGuqu z*(6DYE*Hqv$o*gY8f>KKOTS_oq*-mUuywgM%6Y#UM|zL+W>$+iog3LMnl-t}rX%tB z(kCtjHWeG#IE8s}`!4k_J=<80fmYoS?-Wi35w(;cC@WfioqUYqZHAYO3*|XgMUwyith9~MvhS3w)#bP9E`*&@i^ zjltEYw^|fI9g-pTjamNCpO7P~dKL^Z8+bf-Vfhi@Cv5x}&JsS-jio9W(n=&gJ#Hx- z=?Up~E$bPt`izJ{9F?!1_Yvb$$A=Ytu}r%s^Z&g#+y$c9HRB0-pz&WDGJwkHMPwQR~jeUOHK@ zM9QjP-{eWszho|NbUfDN7?~|lj@1JP{q9K!*epC(D@V-XoIZ>pqLDy8+4|yH1I{Y( zT!Os{%fXGw9%hshRNtFKuvEnr-n@tJWU&9WhwPUaW(&sl($>`H7opD`i?fiX>Y)`F zwz?Hp@3R?`efi>j>cgzx`k}5+zE^SdD6cx{ zEAqo*Pj|-`Kf>LZWa@|H@$$V#nIFToJ`gjgwkyFSrmqUxbhTHvX)}LYw%=8>2MI+? zO7>x&2j(oEcLupH9lpp$+s!f_{|*}{X(u-q z;vwf*K=^_2BY-~POu&JM+w1#7%@@pQbcD%l8EXL054q&vaZXajhqKXcDVh)kN-lL4 zG)2yRNP>865fk9q1zM4+a5!A1fw5x>__}M`M(BC4xl4(`4l+i(%Sk2yDO?#&ZHq_DEK{+#vSS5kWhP3VV&l zGdq&IT(~x;T`)Mffc`@))`M=mo$l~pyjvx}qHu(t^UIumN;$a=G72ockEzD*iBuo3 zBMVC#_&d?AfNNG@J`J^X-0rmu-Mq1w-g4aCephdygo1F%pKa9vZN3w8{ZMM*c=Lx_ zjbSH}tS`A@G8>7g(I)E0)gGFgdH#CuKbB&dvKo{)cu(>k>^PSLQ+6x>qp-8@=W208E*;(w0#n%9@QGTPVu?}fPI)?SpHYJH(m8=mF zDKFGrdBS(@MbGCl()+EwH$9 zjeZH_j4s`t(LVeqg~>b>v(k5rbVz50tMw1)vJdiEPR}F@HQ;o3L8Tlk-(^q2-2CBs zY8xFOngTk4Qj3D~vNuV2{(i*Fl7bl#02rRRV1 z6Z|Zeq)Q$JJ83-jN*!LVoE8&sKY#x0;xniD#m~g-8lQa?EzsjXs~@w7U9~A$3dFPp zih|>7IA_~V3^*h|OYS|XCn>Ir$q$)qZ3gV(oC;EN~|Yj#2pgR;Zk0?o#t=)F(JvU0taOtUAx z__Uk;#d&b|MgkNXJyWknE{HB$h$@M>N2WA0jv*vD^6m8UMw-JLv>QllKGE)mfOFv@ zF-h6CzHWf5inlvql=96%tCb#oBrFssigrm}+MN2^=&~dI?j^i{ps#X=D3ji_AmWS& z2XqvRW0f?wyvO3NNp&rUa;GZ`VfW9!6ZPLMSCD1BAUn8kiDA3ihI-BDK$8?!$i`i( zN)L|dPuS>C9;9LO@kPn8Sg_Kn@#Kk%EBLCiV=~VaNiu^*(~jIT&_ur+uGR|`e+N$O zB%AM@U~}56=1imzERl}%3C^@7+I;efCgAaIF%C?~V_{*R+8U}==qu9gT|SH|w4QGDXNkNbCw`h z${aHHzj_86N4$p596x(S~#v-qRVc9nwUmE#*Z;k;z`on_Vl|z$+LXLRZVb~ zSQImtEORxAL$ZB+NA<%9&q>WxW~;9);JX6BdkjtdgwiQE_v>iw1#_p<>io?3$e@^? z7CLQ=$VugqD0f*547F@!Ud4bTblI&rsCUUkp-*qM5J}>I-5nVh!UfR0!s}1wvH)ap zN496E4_j8EW9Y%U90Ub>4jSRUU5_lk~NN@dE{A39@{Hc?{>IR!dB ziFP6$awSr%njg;-bH8q`VD}kmOQ)w{==f5XgE_dX^y&M5eGO4a&tXgYkNT4=%*rX; z=C~zw|L|ZmnJdZbyo)*vWr<+bZ(Uz$b5HpL@z-}c`BmK;V4`^5)M`EH@+d!1-_B7` zR@UqYKXHBXYmW%Wriqv|!);SXx*V$tOkir+b1TcO_a-Bl$ttLs2dCHLHJay(=gCN= z_Rp|?562U4Z3;<(5F_JNh7OHz?}I5=`q5=EJnnHoVd1Whr?=vgJ@u~jp`ThIh3XMG zp-oKb9pTw`6Bp8RNRvr6x>K1yogqAVdK7dxY};jqMwZDobdVjwC3IOyLfcr_W$+v5 zGIZ1$23nj`?6d03G6we8jXB)0MD6I_GBF^Uwn?>j#Pq8V{~j2Hf2&A)3qVz_Kou9J zH&Iv%-HMF_8r`|W?vr|0O--eGe%OsL!=U>qSdzHyDWPYdP&V=qd?J>`LCbM3w8&LV zzc@jRupFLy6dM*Q{g>bdUN;tN>em%66j53cSeda{(oR?9P%_Nx_RttdN%AG3Qc`S& z$;DRrBf{nGK(=EYX3^x~q8ts{Vgg1oXEAa5CB8^o<;%_4jjGL543~NlvZYM-%{0Gq zW%Wm&@Pux^l~T8Autui1gK^T>`$~bU6QKzD6#I;*wwg7 zL!-Trxmhz1$o2w?HHwf(yPk^kQ+2b&Xw{L_zaEjB;nc^o3E|mMf-_hF#?P z?~JBlWO$>A%9WO=2OZbBL~`EW?~)SDm3{#62s7(}Zn8NUuT%k0HCjR7BT*@o?WdD# z>c&{wXDVHFY1X%1!K$Sr8Mn)j8olgW-_?Ile3zy2m?=<8U4d!B1Q2g)!ZKlE174Fx z--VTY_xfbHlv@MaNG&2qj7|yuP+&k9`pGZotty61F6aZw0>Qe2&(|`(l<%(SVuI=d zzamB^M|uGF145f(Ch}Df9HSX6w@9EL`U*CBf3i3@yNV|nLa3z54$c3o^2Lm;c6e_b z9E5efoY?QLcJNbD{=t`jZX8sH>}+C>pT|h0DcKDYF4M3@;ab!t0OTXaCAZRc`IQRS z*abrKLAZw#qlHtw)jn(sNxiMGDW!N9k@(QJhcRBgX3*kwN8cUKqJy=2CiC0BD;(4Q zL3~GcK-+-CcVVlb;=^np;2r5~9&Ivx*k_?%#pvVXqnz!45Sh-TIW^RN5sDs3YCVgAMJ}{-RMh9lsdM!3Y%5eo6@1Je-7F$|a#2+wG<+y3)z&x62^Wq5 zF-c@#4XeSS?2-R(h6=tDNmoED?)y!2%1o5XGDLZZ1+gn zm$@^+l9`3}Rj4aP7&UXI04l4nPmJ3NA|)rgd}9fvbt;4#txZRu!w(tvMNg^GMpD4T z?8PGZXvg$&c_-Cmrnx5u!bQxZ zIFHw=KiDAvl)Gd;wm*KZ$k)j>&5LnqZ}oqt9_|UNa$o=e{bl)(FRQH`cdpUZ7!Q8- zNXl+rM}bvv#vER{k*0UwWc(dk%UM3= zv{}i_XHo)w>)_l0oJB=Ri3yT=do{G^N+GR!qogVH!WY@#?O;23YTD>y6mvR^YXV+8 zq{qF+H`r7Xs&ppZJIzn0T&YGeW4S`8C@jIi#V%NBs=a$wouEsd6gete)GhexUc6S$ zvU*6SZ8Mz1BCGu8FLq~v_4@OQxs;chY07rB%aef+78C%jO~k4(zSU~x$CrqATe)C` zk}k+9=^*zQEK3Di?W`YYB7@kLC&;own=mGuRXlOVT!IVA2co`0lxLRkZGm^<9^sGk z+W!MxrM1TF;d$&=-}vW`|85LlasU1M7aElq@zK9*I~5j3D;gsh6{1_zaeo#<%)Zwv zYlfV%IVv8@4S(~@w*ES!6*1;qNuk$-1^&t1wP<6d!Nfe>`)cvL-2U$Jx$9Nr=UHbT z#+pB!c&5NTx1!MV0MA2>DU3TqK(ys+Y$_nC3}3B2#X27EgND zD;;thU#`+5)}UcMrPP!OQDXayP6#g4Ad}RAMGp}hzfyV161)V*r31XROOLqpdssg> z2(EQq+}zN;@l8gY;S!r9%giy4u%bUTfQvruWB0t^)^7=VnrTV`X{85#YSw~NxYNAhHk|Zojma)+G6F( z58?M7u!_MLt!mGhN+#-soocl;Bg@0;{BemtWKT@tEquRMim0ucjzg-0Tnb*8+lVaX z`wsN2mHPDo*k_dVIwkK|g?uXWzprvJBo05RL1;*VT_g|%aa>t3$drr1RL!ZVnNiOI z0x^w0%)WL{4|e2JmGj{KdfWc7;d1p zd6c%?k`a;h^pX3sgb%L|@KTEUx!0yJtuNm^DQC#Py&@*uGXIF{i^$VHLLa`cTWXBL zT5PbU>(t#UYGj$rv32GwR!68j4OZ@OTz?s{(Cz|WzMc#EL?nnbt-d(y z&&vb_feuZJZB{~z{eddI_Zb|u813noJwuZS@~I6yQ@CXp$FsWmI-L_=Q1YkgIqu&P z{VflDR`8p5T91^g4Y1@_5)SVkUf5D1ufp~_1gbfzFr3(}8W?N#TlBJbK{RGZeh-v= zo(ngTId$e6YiP!*#@>r-0|E<7NCYFAdztj`_5=r;}`TBCrJ%&aTm zwEw!HuRvRyeG&B9wbYMyXEA0Y(C(2Dlz3YCM|pl0=TRe>>9P$%ku*a5i!)cA?z|@> zo6f6u*PlgG!BAF$bywu`qkixEvwr?_->ZswHx}t$qUv1)?vTR9y3Y?EYMrzS!^8WH z7x%j@v^p45xr<}^qlmJVsV-KkDGqsT0!nXEjs7Yh%&XEx!o=a(%N6Nx?pz^l5nnrB zDcArRdKV@wP8O5pNQifb(IKsDH;RQtWcu|crPYBW9bV!1<&3cX4> zK{zf;WG>}|`-QO|z4D)rX5pTB7HzfxH^jljISTv;@rx6(7 zau*+h{PL)_{P}O!2NOi-Yq&wL<%!^QBW6=6qUd9-pBx4V%DsOvgtwi0-G!fjoL%`q z&bnSTLIiOBg|$=S{K>-iylly_xxw>zVORL8G2_np$;SiU1o9j{m0S5BVd!{wE_Snc zQ)4j;Z2!y0debnNEpQ+m?H$7<`#o2=g3)0(4RlRsj>DvlC@v-cdlV9q7-kh!F}w0j z9LqqsGqhEGgrdvZ@fb*}$*j9Ok)!x|;EN!@nGRj*pU;@Zns3mhg1mTyE)@yV#?Srf z#+=K_zv}!LX}rvAAO8=xok_3UNy#c0duCoQ5xBkIw7*wxPR%#7Ucv`2Y|bz>klf zt)lFXb9;lgRrMh}T&dhbnf>&Q9%bi4l*PFaKgboL*OMa8E-PFMV6Ri zdW}A^0EEy`NEut<6hQFDPBOd6XKd`e-V9-XQps=}(Km_g zGpSw6#7UD#B_Ffp`-DOj#jbFvNkfeFDtU~anh{JFT~7>W#gK2xzrE#z&JkT{_51vr zctc+;JBfWYRz-vQot)ANBZN&&*X<;LtnF|7xh@*1L?M+*f|zBNeJ$5pCPO47EV(Bj z3Tmn{*c?sc@p#g}@4Y>0vcGti|4g~L864$Q%S*FCMT>rbNH$>qhSsCrD9mpUi#NO^ z4u}|}0zD9n95Lp1CVnT#Y#12ZMQ;KmA9Et8XO4w!YGqwJS745eH>bJYf=G{YBo2MV zkskC`@v^B|E-$QC0T=2g)LE?6fnNA06A~;7HQDHq z)T(#LL5A(^9T!dIbE5qEGa~uxO+@wUI%c|nH_`=zB~bplK1)Tt`sE&>t})Jx6~K?m>WOT8p4>uPbRELbPXf^+G)VTnA^}wWjKsTLv`N6#Fn% z?6zL5eehma@9F<79Fkww1A|^I-Edy#?m7Q;eaBZ?cttwRA1pC)RY~bwiwH&26r1pI zg7ay!gXj+EJDfFROSajA(n^Y|ABI2rd`2j_Y?0M?t2rlE-#Uxa!|RHZ5#RY|RU7uO zW>v&nC2U%Ygha4V$KtcBU%}7p8WVKm;vVRJajDhy8Z=h%9d)SC`0pZN@p?S|s(}H$ zejcHnP&|{Cd>dd#4&*T*SYPr&74F^K-Q5xNM!?Q+kr=VrW!q+4(r<5|m^YEt7&Sd0 z%TA?6UiWGe%ofogx8Z+wnld6}3EH0VU`DssE$3zKSQb<+lhGCMCo9+D-vYwm_NY5?MlTCgz25PT73P5H&E_0N-`w= z!Z(a_f6I>w5EQQucR|rM&J-s3t9T|Q!}C$CSPP|la;A_^vJnDSyXUvjZ-Yx5!2@*$ zobGd50F0-%msHS-Pv~X9k^K$MbQ7JDzBmppQU`};)QfqH^;loMoyA z2*{7dvruuc*RGPmLd+anCNiWQ-D2t%Kd3LhZsNyIFgZ!LVpXnGiP-rC(@*g|dq%v$ zMYHv(l#D5(lmld0mblzCLI9MhN!yp2nU8tJ-=Y6cOG-txj|BwAL1Isu35vI(S*Nfm z6fPup4VmKsQGf6Kw%fb$W@D0!5jAmn3o`ObQkk5r?P^p%H(d1*T+jn>)bUBaICr)_ zqlAXTS!>EX_0n%`ZZrL8QweUX@Q>*F5xLoONB+g#W&y|T_O0`WF3;#TO~pL3ywpLa zN7J>*>DXL$yLXK78d_k;PBy#q9{|)+Is!xdwbJ%i4Cz*z1r6r`1HnukHXvj9i|deA z0m(KywWpKTVp|Uf+Q6-SNLd+*-zoq5n%3F0|1P?EzL;;Y#z)3uwy3S0N=LzGr7vS^ zb3H0Fw6x^YeEI){SseC>lQfpjSX*FM6JJCZC*RN4zaC_rmW?E9Tx&nOcow3%xcMkI z6}t=e5aa~Tv5Y9O<$I^LPXa@6T#}thUTtcTUX|^!|Fvy==XD3d?L|LbydG8#7#`X6 zy32EC4{VNjU?mo&{ch-OcC7n5@rE+0%ib^Rb*u}!Cpw{4ESUggPckEC>jrx2z8R=lPawtwxYDuhsEVm4 z-S9-qgU;)$i#0n5+I=HTu5#dL)GdW6tl14}MOud<#TgqblBpI4aLvlN`e8gqlw(BH z*1T5ZWO^c_rEd(ZHbF$=@l>AR; zzohZAG9W|H_pLFVep{aqRx3ySHWL1QO?txti1LluM1|z6$4GA_b7T(<)7G=#f|O}P zH;$)J&707o==oi+(;F@P%}lCvLFV}Qs82)VJjL!m^_drs{)g3#Zm1Apc?4atobKD0 zlG8olZFOdOUS3YTd(7nXeV;g-BpQZ1>u|L|ED63feOtG4-V{>~WM(;$>z=!b*x28U z#EduB_B1RJv>o|R<@v`x1C5wF+hL<8S;*H5dREfzw1e#Td;u~mFq4)JO@C_OaKA4Y z!iCVN2Nvp$cY;NNe}XQO4w*L2r&(R}z3_?cAsg%Qcf8lv@VA0~G1>#-O16IppEU!c z?sYqE?p49n#ne88x65HI&6#MSQHQiDxHY zcZUK;EHv5x;m!C;t0Nk}>!=HvS4-1y=ms$_-g>_wAWK&0{t-ts3eom_J@G=Kz1UI* z^?T$|Ozx?ta&0KS-m<`(8#KT8N4Yp67NudHds-{~rViX`Pa&dh+s4JwXPQ|e_cP(% zktQoXQ)SA4EJMlZ)G4C_bxQ0vTNi}a4mWbuNG6|>>k+NBsW@1S6+yBMM>6rTA^|j} z6ZENQYU_e6!^p&5@F>T=Ga5N-wRbyd7-C- zN|+&}vJ8%ju~hU;l9b`>B_|m&0C=6{X(R4Y<(Z*!B1*xXdcxxJP+0N*(51>51)K&67Yq}vcJkwo_w zYj7|5yp6_ESvZCeLu%w*WxFRc$`aVso3#jSgsGq4bL<;XU+_2|XI%+H|J?(Gn<_to zCT~}sFhHhawXBlCjoZ@EF&+_>C#h8aqWF=iKn$5&LDX276Wws)xmeg`V$@s4?GjD- z{WfXR9#V4sB5$xp4Y{+zX!1e$;?(0pt({IKqvNVIH)0%2b0FI{hg-M4wHXv=RvEHzz zC-dzg2_$>6DT!It7qat>3Q|z72qnJSAk>*H3yBMEpUm}iZuWS{Su2(aKUZ~oCd@{eo*Txbn%!4}8+gQ+FQ>LoKVr`5Mg6eed%4F@ z9;-%k7m>FY$au0WMjt_xLLZR_FW}7s-M|9AN~~z72Eg!3KLz^Jt#@o)#`}U6)U0|f z;Y;pzTZf6V$wHn2j7itH-59~)IO0NP!3Bo|xv7N0SaY}r+@wfM{Mb9--d!_Q<(Zq0 zZ(1peV%A$6*9k$Zma>^|1pQB$=c;srb!M41LCSVF$bHIkgShAPKN%wAHMLa8_4|S= zvHbGO2z2Vt!e2l!TaOLa%?_+^TOqfSGG_tBYOPV3TN67 zj#c#YtJ@%mqVkO86ynj_TKL2=O-E3DUxhADkS!g%Wv#GZxfV(hYpDXpup;^hlZ8%Q z{bu#`3?K85nCG#i%p<6$71mw#K19LLMh(A~8aGMdSYpSR^!&;}b+N$b=25HOhh@yL zJv5D{a^v_QFIm9t(=g7Bn326bZ}WZ5-_QOMbR&0+i@X>8OxTnIWwt$ zRA+8x@W{85)h%#%c~JtFkmI0j3LEeqQ)iYH1M(i7fYT9uv%VB25wV`+K3S_^#=AQL zdCWagOz+D5TY`oA@Gh~|k=lPi1f3I|rT&n>S9{|+cejOL5)KaL>ZFa8wvh?ROR zk!VY96x`~9j6}=4ZDeN1-oF?6(7Mn`BFwAS=%@NEI2m~TZ;0^9|1a|1Dk{z`>l!`@ z?!g^`yA&>=2<{NvgS)#!kl;|bySuvvcXxMpclhdbzc;75Z~p6l3~qqI!>;x0z4nqh z=h6zB6u*=2!i9BvL0sXe=&L>OZQ+7QnZ+4R=7NVpXvq>d$wbAYllx;v`o7tr&Es!^58_dGs%j&*jn_+h-?*IO~;E@ZdWWz8-I9 zTs=lhtsk*iPVZsRdaJ9;;WbJ#b4X<{5@viBm(5hVXBo6N`pk zvEUBnPqzSDd63`b^{vW!klW@dd;VHJkzj+1>!c7kp#`D`QK+Yd#wBqcuGXM_YXkGQ zey6JJ{-a$R_|)!jy(@9L(l}92JB{^lu`%#`cY=zG`;?l*J6heN0QkunjYkFyvT7;k zq8mZv@{_tyyhCpz&z5a0L9dJxtqAE#CEm1=dD#4@Zw>Bj>g^x_ZDA42I71-F-v> zv*)NDF-9TyiHVy$p1K>w0dcg7@aGvBe-k2Vnri`NE}US1A@xNS0lQ5;3j>2Dt$L>*z1W^rn_d|njAQKqA~ zFQr96=)<$7eghXuVi<5{b_d(?Y(+|VP<>YqbP8yl_ry8$C^~hvBn6Lh-@}Z@Hcypt zJY)wk1Eyti1r%02qzPuxfwIW9j*bF5`&P_$(}wg({KT~;6WyEdUR!6Xkc94cVrAAsx4 zjX%n@07^wah)S>ubE-Gh>9_6twyaS2rz`S>7?fvfn&%vSQI& zKBlo_spR^=T@--oBA5B$UrO|v@K5Qh0Mk{r-U4x|x_}19GxK0JKlc=9lFIXJhf-); zyFsewV9plDvk)4^0{yL=ryRn!sb&k+T?ZyVvoIBS?Klvy*KVp;?`+$QT76KvPUzEY z(aaYED(U_oKCd)d> z`CEcK5rt7+N6Y2Epbou)=^F9dKcc=aIcfo`@%f*5=s+db3&r@xW65FB-36HVjdXMn zX3E73;FgFRq}jsP%X6bTD=mCksOz4AN^18z!r)?7W9k9jUnW1M~n!cNs94A4JU$1% z1aiSRhP@?v>Pu)ml^6MDM#n>LjA)5#4f7(3BS|qxKC}jKulky?;v3rhZPFyiQfvUW z%S5)|P3{@2IyE#k3U%WoIK?5Eu-7Ti(~dP-akWgg!!~eeWz{+*%ER+ zf2;|k4pwZgIAP=vGk8=Npl_4?E~BW5epbMCeB9&jI$if4r^7H%PUYj?3d|dS1s)R? zgyRMugW+xqGf0t82;EadnBF3iS!SvCTpmX(X!`tF9wR)|=jXwG=Y3VWYeWkAd5K^a z#!$M{;d}*+B<78OX&5>@7RG(6Tb5&UNfNgQ<+i>cpvuK#_wBs%3gqJ*l=*@zAl-6R zLcWalaul-IXvLtxUh=ypKeTHtotk}1eOZ~OUa=WxA) z0*pC=;J0Do;^E5r-tqc3=qDt`=trfz1HE=Dl-40!V*^8Cb}4`4x=&W{%q&j)Ry zT}-QU%_f{<4x1ptAURUyk3%U2U?8OaCKI82P8H|%dz9Evtk~{Q>;cTEk2ROM5^ZJK_KQybn=r5E2jS{(?K=&Z?jt%*M-J4Qw?TF9=Ru-6n>h>- zgcq8#?`PoEb_%?EJ_&Cyh3Pyab)AVZ#c9QDtftjcHTJBW!8AQRZ~09bWJFAe#nF*a z;>eh*bosm;Yyh0z@%8{&H5I$}q|J_|3S`xe_riN=aTh@sR}Vg({x;X#2Fp2nJlc4| zp*ONUDe;$yo!&voVVpR_lZi&*-_S1nGxWNPx{65q6BN5XKY|m}+0Kr)b4^$GmmKTd z0<~H*UbLAaKAIqStNak-=U~RMlN}qMH)61UPVy0%^ql($k36K8X)jJoM4<9W_AW@- zcBlI4g&6LbipKR}o09fT4RQnX_Ro9m?qzJT-ImQ{iM8_X(+mIPX<7Q5NT%U+myDKgy3r=w+w#<67sC&$jIv=V!Z232dJsdAHB(_o;&$ zgP96{$+sd;h&ZV*lLOzJ*Uf-8F$fH9#lZ{=OKol#M%hT5Z+aYPy^jix(PiiE z!~dv#Al_(h#S$d2?MWcVi+sAclG%|dVtf5eL}j`sOiy8aSQx`VsbmH!P#QS*4)|Ev zC4ZOe5lZrWjL4ZFpr~ZzKPnI@7iw(p-8i-pTv6xzl44!L`%>g=o-G02S4oKfXQccu z0))5VqY*2xA7m6SwQf;I2aO!a>c6k5Cw+5cNhnwQ?IDKJ>jsUS#$_O$ zDEL_j*)Hqq@La}Hs}*ggP`0nGc&5ts3N4Mx32W*~y}foELujMGMt$NG9Jn-+EI*%x z!6b3d5u?8qZi4xul4T@JRw2&phRlAE&CqaD7uAkip5cW2P`vkq^YtVoEAlasR4CR4 zJ;#_y05AB0(C5mZwaAk-uI z^=S&^QfY@%{qjdtHn-zX#3g5>PKME6aA#E&ukPp2Pggr6ZXb?v$|RClT^R3)c|xN= zw^?Q(qYTyS87%9!i^I!P53LKniycm6#$#y(an*)PENRWQP}Rk^?{YLoza(P;#UX$u zN5;RTu*MYocW=#Rs(;q??C_Ak1Xhkm4u;P)mG zv$_+EYqeQVrV5~VP^24zg2%+WBj`-3ZPzXHku5l^yH*~Eo%RaDZe*$FD>Xt<4JbEH z_fkcjk2<7J74OhA+Tc9{%2O9Y-r1G8HyE_)V5wv?MU?!uvqw#_W@fY;# zs@{@t!thFsmcBigUP}dLL(z-0r^KwzpXaUDLk#mjPgl$Yq3Es_ z0Tx{@lWOdhDn&4-tiCll5F%jF3!1v-$%-=3WLYt6=k{`CGL2`(7VK=z98jW_FwoeM z9L{$@t@6E9y*#>^wTjE1Qh>uK%6~%Sk}8L(z+HHaID+s_dLYQBlo_8daaAC1vC)Mn z?)t(5BgjvCe3QwE!(dE#=3y>b8u5gK2BkT+fDpNdAJ0l~PLJx6g~WtW#NYclfdqI> z(b8A}XX66H^%UQg6VV#a!jGifiBy+xKLY1Wo2){rF2Si#Xv%3#_j`0W&y^u#4gPz* zJ`wfy9@GVzGMK>&MKRaZp-|4i2bn)Kr_dkeRp72fn0!>@M=E>A*+ig(7#1Kb5n4Np zQSZ6a5S`ke;KftmM7D<8WM|DJ`Qm15^E+PwMsekIxbS<7%Ch)FI$`)oo|T7H6@y78 z^b9a9JtktPrC%x1OdX9*9zM`@ngL`pk29Pl=V4zoXjwzQoZwz$V_5!MWitgN7Fs89)cr<31ie@I{id%i@oxef%_-D*NI4<+Xi^au(kOt1?!G%FV&A1)Az|9g3|?3CDZg z+Ll%ei&ysN^uoi;pjMb8+9W(ReE+n)oEd~r-W{BY$ZQ*w(_yV5k4y%Y-r6f17_|k9 zBF7(BIRnqB(-uoB-Y?iGovo`MS|h+S$Cg|%K)&{?tn$;%j&#y_vDz_9kb*K?p9)#~ z{4hYYU`cj@V3_J`WQa`9Xi4Qb(a3mMhy|0BVi|uXCM!GBk+rV?m{pV+lHC9-7)O>& zD2eJA8>`n&THQP*8RjD4+1e!mote`J;PuC2?uKclM5L$m2oMbuL>FmwA`*4Xe`=?B zkJQL0)l6F;j5sbAMn&!}>b_1Fv#);htUg%e7UAF(Oa4di8)siC7K}S@X;!f338XOE zRHpwz;mqPdSTa+5yvr~o8ge<4R{Cg>e)niJr)ac+!3|d_s0ko_W&5Cf&%MXH)xLw3 z=g|bFBbMo~A@!{iY@R8?=9{zioh6dA#7zX{Xl`(AlZAztulzX4BimiGfNXao%eAyU z8}*)jt_HW|J;1$b>J~&C|3|j99nUioO-f@St{|rgvoO?os`v6fO?_ISl^Pq9i|DEn zMaf|!N(;A)7N?r}@w9~GASY^a>OjZ%t~g6a#r zQodR}H6W>3ZwrDr*Yt4fg{Yn=_C%7t78V+6I*OSuudkHH%5)&&5#_$M?`}XgfWR8S za6y2#g*98EjquRXh!dY=l?V;_!yhas!B@=TS*j6D~&qwofaLDbjrlll68 z1|L1I&W~(C`SI$Lqm-gZ>UoMmS(qtw;~fK>5%XQOD;q!v2V`A+W~ zFAt%!zR2YIJqJHW!Bg4E;CS_`RuKn|kLI$-OG(c(`Wf%L{s)yG!TYOn9vb2TY;!_X1-%)Un=S8Zn)YO#l?kLz_|y_< z{%z9PaC+H`ukxsq`r$ZXS!sR}+iII90Y#{5u4MVM>+N+p@b`c0#Kuu7FoSLj-9(V) zW#kcK7RMV0EIfpTL@oo{kD>x7yhjWLhUKOjzR1FmCj^3KZ zZf;*fyteUeoo7l!=B}<^4d?M`KaX7F)7n9dugP*j!eVE~4V$q}k&x z8_He|=rdFaZARL^1K)A>Y6-*pWO|**hRNeR2xP@x9c6oz`9`g#!%?ha=zF6rO{=CT zWQ6;_OJ4fzxc{u5IuGqFVwDu)bwDdsaFym$>GmwMA9A`aOl$2L$**BI~WLFJ*`err{V7^W6l#aKc%BTP34_u!!_n=RXnM!kQ8Y=f$mmcF@r z_?JncpRJ3NFDMb^6&_oxXWz>1aMsO>Q08oWnu{-aPQA-pd8tR*WWP^MD*k2Ovay_s z&TxF>)63S`X>fuS4;kfHOM~0{;aA@a~?;^gsCt+N&%q{L+|<9UprHmODX^13MsJ%!BPx-Ne3i_25qn-6=Gf0 zFGjDLJF$-)Jv4E6wit5*X=q#IlE^%i+p?P*c!d5g8)1ug^w1KdpsU-m@(?2r%2d@# z^)P3Cr|$mp)-Pzd<-L1(*2x0T(w6e1y9J@;Jc}@UGhg`_P%k#xdzW^C03Q7qw};D6 zXFld(ncn6>KifSF&R_eQ9PcPe4R#DUN~0JR4?qkxb;&XI8u_ElGs$j%IDH*2Ad*>E z4{stE0B#ZfkQw@TOAu$#O8U7^Ij(u|B2KOpz20Fw5)f}8w{$y5|u))luWe}Ez(sWZ47^^Y>gD=8Tc-RBAw^s4$LPI9Flq- zL}CJ*=ep0S3ESms;b&h=C=4^IyPvk`^qvoBYN&b1vy=FiDQ^0!)R!Y;+wRxu!&gjxFR&T931PZkWToYj|KDgLoq> zvO_|F8tLL)zm5#ck23fS<(6?yWcgSTMxFWL9JDzcM@)qToe3Hm3~OhzF-knCTmK37 z`PYq@do4nkP%;uKSOROo)Gqe!{Bq@UeEv%nw4>$>gxn%s-v(5QPPVYSW1N&PAyU-D&}!Kk4h$n)XG{K@3)R1W0_kXDi0U3X&$xcGDa20 zP9es;mY0G4sZIGWv%GV8ss!a<14Y*wLXV}tz3_YjYCmjk9H0H#V4|uz(fh0r=jhOw z^8G?Bwt2`dfwH?RD4Kfx<;#2SJRV!BBbES7!3iB4d#Oa5$fuZ7u1nY$6~CAW;2?{? zrkuvJ+fc^L)NID-Uc8Nm(lK4`Kie?>y4&_+pURM>=Bh;^0dw4cV|&)2S9+xwx;zs-+%hB?-Th18fvF-Q`*f#4&o*XSn!tff_0!{ z@ce1PeGESKPnF#D`@SdQZcum|rlfv&E9Vw|rSh8tm>NLFWtiyNV4% z=)-cDST!C#qu9#e^`IVAPkE|pmFtw?Xa*ll?EzDF{z>EMY_W*_Doi*oJAoJ|6I=sr zzcthJw@b&M7K~8pDBoQeFxec=zfr3<$JF0JH>|@=I5X>zYpHj|zQvPDto*a{2V3P% zTzuZSgofNiXXKv}X#YB(KC-~to)`j^g7I>3q)D$M!dD-5jvUjC*e1;A6b9@hqFlrW zeFb^vKX9*dxe;o%EI;gcjYG^+a)N+tlX+Bn3y~2xEUsU$7_|b%QX6%TN0*WsUAam1 z^(7|rw4~U?Lq2|)#Zqk>{^3r&*j6G8zLiPcXDL7y)p#n7U4VjM+3#*hKD|ByTxUHB)B&?QKUIT-TdtsC@>t02sN?@kwRTk+KwObV>hhb-kLe*n|oDvVd-u z^ZNl|jQ2foi@uBTwdR-zO@x5^9=6Z75cAsDJkMa_n*#JRDWMPtUvH<1c8GKBIBCkX z(D7H71mfWW%!2iLjyT^|w7j^urQ(0sy)T9Q!f?dU1LOMliFd@0nXXIN&KSc z;R>hvmAapvKl~4G=A$l?I3cAM{Fk*zcyFCLX##{3@n zfj;#8=}K5LLV{pwwurkR*S_@4fUl5PmD>POI36qB+w)tf-44~}QYoh-qx~&kn+rO6 ze?(tZw85mwpD$%qYbHzYilX_%!cgIfAF_C*=`}!B_>1wTd z=o*a|;dBc&VExUJBpxI97{$Gn?JCoo zae3V5Ny60s*Z8=~6d;%7iW`#?|Ogzd|@mtHBf*^pflzXNSQh#1uRa84$j$B%lXcd-$c z6I12*j);iQff1%!p{QavO*?W^2*GUj3Q1l#c|5>I0Ib93^EvX5KWW^&+M$AlL+;KN z@|fC5)Umsp_adk4-Fbd87=|C=3j*ytr8bI7hYFbvYK9Z=5^)ks1?`0uJ^-q8h%J{} zWM+35{Dl1M9yfuvXEWG|6A2tjN&8J_`_Tmf*@@8o%uYAisN>UygrI6@ z@2>S9Jvs0uPT~jZ4Cb9(@sB=?ojxrxDysaQ0FDvt%{TjEI+aF@0(mx?Lw zaWNQlNz6_#AXfyYa4qOQWblCn*Knu7KsgM`aJ-y7}bV6&E& z-bW{?WuCOVr%HF-6Oo7q`l2T{ngH8BgltI9O|X$Cjv(P^v3+5)N?IGudfFJeuD4ay&rhEAwv##g%utaCdjwg)+fENR$DJdAKU$buRk{}YXd>I0(-#Wj+i$HvtRHG9JP(G%5?6zlV(pjSo z6{-ymkVlhRF^+I|tHS@pN$l9tfBkMZD?ybZdI;B3mF;hL{VGBc==!n`<$SgnsN-`M zWJISbR63`BkYJU>;nXmWX?`k*Nl`GM+qHT$oNHceIEU)`-U}yvml?c^k=|o}Av>y3 zg#qU-rxyyVVY$|V6k9lhvALpK9evNIw2o27x<+X3lCX|LsPSdyu90aK)v=g%mz> zzaa{X1?1{kJ^K=I}Ak*78mv;MY$ln(wU}4}xQ}WffbQh?vW*t>1skn_E`Jzi+dtpIZU_R81Re89 zKCT+sWCD8gevMbH!IGO&HraO(EW?veX|R;TjRW+=K_=!7Y<0QVdc2B-MMMnv5y{P3 zsJl{;PKi9iIuNP1odgh6ovQ~ZmsdoYu`wd{T^Ndqk1T6 z?!cDvk1A4!t8Ozyd~P&iee`%QQp#5bQDppJ{{aw9DPz3Kyv={q?*9HZ{L@dpVzIE^ zCh^n7nokCz5r4p>zql&v8I=IBSh6T_F%3zA`_sk1XfjdV;W!B{w`UCGOs~gpG&CsxzG<_FH z^d#}3V=(;rS{uWz2fBQ=4W%=I_`beO!lBUk3zdCvYq=`Q9~%*LiB+CQ3fY;b(p~Rf zt;{xC`f06>NUSE(1B-y%D#IiD0Ppb0z3d6c)ebxLMP?#&O1Xisg$XeFD-tR!Ve=|% zArzy2=p{-O9L8{go?|rZ!6*?_oequYG#A`bvJ%k2*utrb zrlChwA3{?nH!m(h(Wv0kgU_KnGOAkpKMpry7g%w1klA&eW$UDMH%3JK&pOyZ7F+hc z7SasQEcfy>`;jvL%$5J;6|2WHSM|(54r9|tiN!liGs0xydn{u@bbMz{e@zefV_2?q zK)tgbd=_c6lK{ z=9)IMRWtsWDv2AoT$gBNs8gJ@_WB=-F`zoFniUvtnmC9e8(VS$dc!A|jlQ;F8vXYr zkYw3~Ji^qUc#Bpe_CF?ZJ$d~>min(nfgjU>2cB^C-;cxDF9pAZ|KI+>lM;*L#(%sJ z=?1+Zioc@{Pul-7*%08re)R8}!T)zFMwcQ>MTq*}-a57lYG|aqYpyk5h8xwya8rg)H1Ic_5wr|f)U_dI0$Ngy+SWAc-Je7`Qrpn{Nnt;a8;hGVDui^di(hKcx`~Uql3f3(qNZ7Rv4h@|? z1LwPo6K5-p;ABX7jp&9uYlxHmb)LE5=z>bUi^I1hhvoc-uEx3QL(#Sx-A0h2Obm zp-Tl^dRS5!c=#YRIPe>I+x!6K!)&L*{MI@g-!~xT?5E#Tyuq_MfCiiDZ{vagXQBRu zTi}GuzgN&K1pW+1@>SK<)h&E4kL~Ndd%L2yjS8wYJ5nn#%E_Ja4SF3!59ez=`BI6F z9-{}}34^|^+rzS_s?SXA)`(iuzRss`lp2hCZ8ZuQ4+K}ESo7~cKx*?&?-kf1Nz6eV z_tjN89>|@}e4_-WH#Kp2BBF?y(-IN}Mw3%ekZ9c^M2LP+L62ts1uXox5A{^H@6&7c z`2d2|o=@&;f`;BQryAz)g+hnNUi!3V3TbQd>BIb3B!=VYXG@B#BsTh23W|nDca&MA zYI{rEEez!tZeVuL*IJuApK7c@Ls-rc#3bJ#V){E5rO*Y^zp^_wd7+7N;AENr5%QMR z+MhbuPoswr>7L9Ul$E~C6Ep|oR|>{Sm?{f@r29K(5fnU$RON`ymB&to;51m~kgt#= z3WcAPHBOZgjy}j_k!#mfD;2oef6CQAV?1$KF+}08Vy>7p={|p6sS%05cDFpLA(B!b zy*}h9Kd#Q-W!1M?S)?n}m$%tJi5=Ri5=TSDcpw2n(V=7x1P~Si?l+ynfv)JW4{1HI zm!_r?zancNNe7J8JZXX8v2bf0zsKbSXr!$7p_h(Q=gA|+vax>LE>*IqK3#6{5%GHm z?B*G2OP>oMR~{Z7$`Os+nnStg`-#R{xHw2-35yDEW<0LNq{QTe4Izv2t)5QeKR_+# zcu2O$6|Rd>sN=uX$z7Eo-uX@Jh~~$be#2|1{Y|KDSQ8x;|E)nOsV==9V1$;Rrfzx6 z(w|ZxM_3DK_UOp)@15jhX+Ncxi~t5d9-lKbUR>5pigD)OuO&@SKP|MZJ(} zd0+;1A#m)B?r;X8rms1GxR*vV&K%OeX9jhI*QQ=*_7Ejo3LcMlKL0ZJIxu(&X%%Ok z{-6;_PLb5yramGKUy)fWkYgWos1xX?m8>DO&-~OH$s2OmTPC4t0nyF4mi)b$U#2JV z_i?IOxK!*F%$n8bJrbzgB8bTWBzOmfzmr2Tl|eJ4MiPq6by9z2#rOE71(1Wubh zG2SQ_?0|RcmCs7$KqLQHe>PQRw(_zt{Pdhh*ZGVo(3l%5tu1JwSYr^}4=P+Gdmt2r8x!b6@Gr6x@{>V2S(XkydU|uv_E)VSKv1`aD2Qe$#M-5 zUr62l$ETSZ)0JB>U#Pe|DUR_}gH|g&rO5U{Vvg$pnTqA^*Dc*3qjNpreZ<32tmv+< zSauPYEjNdjPqB0;wIRDG%~DEmxvPNj4zRY4ekgBr!mopVIqHDTuVEZgBzOOCOwIkC zJ4U2Nf4Oj$L6bUvXlx>&onldQPs<8l!HA21o7_WEeEA1Ntpw9ducaV|n(??aVST=l zhXR3&i7|A%k;(!6X~N!*sx_4cC2`*Jg$c-7!}?x+mU&RNRSnsQr$CK^S^#~-5BHFM zp=!YCqR?XmFtVGKsV93v;}ivPo|`^j!(R5MCs8u-~mC zC%ip(nYP>f^GR4l)QUM;5JxugcJfAvd`Z4=#m1&OQ$L4_QE@?FF_h*py%qM0N{%J% zAllQ8$e8S2a)MdOVugMc|Gzk`V{CQ9A9+_4~+EXoY{C~7$-6SL$B zZRl!Rs7Em90P1y(TRkqo>Vc{hsb1qB2;xfWP(}l`=c87CZ-OkI^$sumkpza3dr7JC$8^uVVN81U z8pt3NVwLs!Ax~~#5SRu1E#gibwcxZhlvXG~|91R_iwGxhMDJ?x=8@37?3>-$L zv1_NttbKJGn#VPhWuZwFMF+?uh{<|i5=;nsI=bjtfA_ZV^mi<8`?+pit%!W=S!NT-jxJ4g)n=#F``IpAn#XuClp2&Y@1DpVFcnei3|5{{8sq zDiSG<`8Jgjj(2Dm6%umG(Y@N!6cOH7OrYUrWT`1E3>g!1dcxEUw*bGGx6 zpM4^lXBs5G^7)6}r2VPSJ!)|d(mkICQX!VV-R6}Pm;?+@C@}oOBIECiKaq32Y1H%u zqheQid6E=ik2#zZBH>|=Hn01AN1z2fu|rTRta76*BCG0QJ0;!8JD;H0tfpL$WAM9& zBcrUSk|FiacJJR9NZMx-;*bnOlO6T$-aMHzV6K>~lm>-a<&1)piUN_n%JfsfQ;jEM z5Cz|r;e|hE5wk5W$C?k>I6CeyZ0>iT-AmC^Ic|I6zL)afs-V5Y&Lh$c@;usyD{>*S z)c2~b(HCJmofg!c2QAS&E}bH>^~pxdbbKY;l_N-rqQ(8+f>F&hYHJ!*`W<_TGPoqp!G6w8&B|P`O8;GT0Y6J+m@N z%@_2ae~N6{n||ZaX#=ezxagktqr=Kf9eX32K&`C~XweJJ|q50M|LT}Zw#5I`fP@P@L z2-wkS1r4EfoRmBSCL-w%=SvZ59{1a)`E^;eW73aW=UPwT|mdzEYO>lkX zp+?8-U&tSgrbC}AWsQ#x)yoYu=*&bVV7cTclgdG}0oGjS zfWzmsp5?_4E|klpt-%;IqAAmCL>`DFWKBUFOR1`2UTt+jaXDX|g0Xk>e7qE}DXecG zZ%*fRIZnsBSZ`MxrqZ6@<%dy<)WG6)b~#kh;V>rFZ_bO)`&vFk@&!c1*IlAq8g~Y6d%YS)x#IsK;@|qv}k%is%~-gCoq#nuPI)n^X6o; zTE>w{ZS1>Z#g5LXcp-zrk7Czw!&17hIc{W02G)UlV}gaUR#i?HMEMs~{USMX53=Cu zdHgjDFxg`Gv$pXwX=?aN!0>vNJ1)<|VdU4TOr^rIE{+lqmO$m_YNH*zsdp*c`)-Q7 zypaYa_J8-DU!$M4!DoLcXQkW#w4O6F%g%+3QT$4f-=w7dyrP5zU9tGPctwtub6v$I zT;fNwfg-zkFQ_sVhu4|h`|O48`SvKHg3momb;Gym?lMF`E9ht}H}t6k6{}{x+B-Lm z(mEiQ*=t|v%HKOxVPh1qkS(Gwh+#aM63Ec{K%$-7AkHJ3&J(!R6BPRV?gwo5$W^@n z9?sUH%wMdADV4uA-@HBwhsG70rKs!SF(r?H2l z4*`*Y0qxycB>uL~-B4v(twa{{R$n;xcp|oglI;;qQ)`%gH0*oy%)C}5SfpNraw;p1 z4s#fI$kZyTMq9j0^MYhHoLT%Zc*7{HGNNl zyA=*g)oGdOSwe1KuPueYz*8rJU~K#tlz#-E6}R>uIt@WS6^BiG;ald~;Ngbg0Ie}Z zWm6(C=9=>ci@Ff$Dl-kmOluxoCRm&aFcu=snr~M|rQUy`zBTyOSL2 zx91}DQmm4NGEh11J&i2DVox#6tPQI;Wb1IPoIx}kFB03v{}RAMIm0iWXYdu|&!`q$ zV%Gn|%Ane7h1T(W86tZM4hwDGeh*ql|9Ac{n1OpMD`iia@~{vWhoSYQGym}0moHzk zxD6nvc^Y;pc!Xqc6RaA6>Cv}k|Y^6~k|`OOY-FUG~1CPZGX z#+GBb&ODM*1~2z#`*V?EAtS9yabU(<(5BO%hgqz4a82La7Ptv&_jm}%%P%a&I&m6g z;>_x7HZwNj6dq))cKeZa`Cx6;wh6J!MW{BRn6 zccMZj5)P=LZ4E822PcIcjy|)^Zg*&oM@tZuU;$A$uaVL}eYI4RxkBKXVQc7XtsmjE z?B)i~e)+*~pAX3XFK_;=Gpi@TY3ayIK;o^1qSk^fCA+3fd{>Mys1ANEXeUpYB6>se>I&V#h4yu&JfhYZvy*tLJjs{`y)dEufX-o?FtjzP2(| z?xA|hZ!eq-D=8x*Z(X&~{t>K+LQKXjGn@g(6`q~jPr5!&UxT_(nbx(r<$uLOFKt4l zZcISV#%=xvgU}~Gj!3}U2D9@<^;M))z*PydKb#Px`9MUgKwF@Z%ukkS@H^ja!}IOA zo<*We5WNYk_c%CDo4A3M9F7-Dz6LwfCvSxUd<#C#<%|{g4%J34I?b-188kS-vh^(Sh75bir>nsg zgezMHmUS$4xe4$2Ur(%f>G!a_QkIQc3Uz7nqHyl8+FRKM_Qx!u$t#Q`wpTOa;(|FV zb@W$@NQ%^oNyoK23Z(Z3=dZ1=$BF>~g;I0>yH^$thcyLIoJ7ROulaI~ z&B-HH(Sy5D$B(NlWo7VbQYC;pIy#cf8k#Gs(AmWyhY>dhMSOEPPrEi9l55A(=p<&N z0LyZ6-w!TsD_-yO7=~5_X*}+Zz|P{r` z#K_=UGg;=Nz_Yhl6b=*qjE6B)yO07-PZaeQTDSP zo=&B_e<>_6I;WF!^v@gbg6(s!9yp^mSXf^J$6H^}967h*KDypk)H?O}5<-YGQe933 z4}-qQw{wjqal_#^UI@EN6F7(9%hCQnp3Z`+t*(pKZ%cs!#odb+cbAl6#oeJua4YUo z+>;iHySuwP6!+ln?r!&d_l|Kh@(VIf&R%=Yx#shBfAC*#LHc(%-8q=u<&c_0 z&__cOC0)2V8ql%Ux0@oH31s)#Yv~{-z4PpW6J>7XBR`rY=WFl>EsMe;Q3qaq1Tl$j z(HeT8)3`@4DrznQH#-C1y&`u0?W|HQOPDzwUZn593I8wtgKp?H*LUft{vf0+hx=Yj zLgx8qQ*1mY?flYeuG!J&q=#i_P~I$+u-9!b@EHB|@r2G#WQoOfe0c*>2exR^RE713 z=~6kD`=s;ktRpNyC2YkF)~8r%$7AfOKNR;(wyGox9VoH+qmpN$;6E{T%dlGJl_+%b z6O#8n zq?9v;gom@jX`2FRJB}`Qzx zyBsWzN`zCzVPn}+E`uF)i&m~PL|zw@u%tZxU*`^rd8O-$Kranpxu!pq%y409Ck$hb zMjC-^r6W?FnD;XcGa&`V&q~iej-XJfjs6?rM4mx%PV>>O*n|+=$|)m$4Ap14FA&Zq zNvRq2UV~PQ&yXdYC~^=Qaf6M7d#TZxx@<;TK@H^OvNpUw;lS1%lwU5_Dp7v5pbgBSkUJ&Z#mx@nq7kAsalX zhUU}utxvqJByw3&(ki5ey@WzOORq^;not|}HYyW{cp${YU44j)0a6HB$Jlr1Tft>c z_)OxNjeEc88B{bND98uyZ>R7)<@(`BTm6Rpr3;OB_eC)*`UG5PT#YVUSZ3o`1GdlZ zHkfy)RYP9%d9XQFGVsOb1A(9&Q+&BzFvbp)mE)XtpC-OcJJ5}s3WvY$Sdh2E@NuRn zaT|mL6nFOYNTFBRO}p+WU;KTgP$QY%k;TNj1$?d5o?80XL>@5hDF}t@(3&V!pq{({ zN-i!gP5>*_4i4W;_T5c&CZVP7HF}CiCEzu~skdDVZZx?Oku1Z;U>MSFx54a>CXI|v zX`mGN;o}BI=UxsA`E?mc$80v{;-=JgkKz55gtpSW)GkIk6IQ@-2een4U4Q_^ z4>gnhWJYLSkjWrnjsTOomx%AP1*Mdq;r023SQ~R!S64(}@S*6M3FAu_CcpOg5R<`l z;6fa>M#(Ni7EpesMmHsO0YDzqw!bLoW0rh_Ubp$aG{^X=>luvLKB`%$O=z2rW$E5q z?y?BU%go77%Fe_Tj+74NsX4}#Hs2D}Nmlg4-PKkrOAlqgsan0KjUo*~Qhn)r7-RD% zrx?4k)vfQYihbAoL>V)?`51?i$kM;NO|SZQ?c1UF!8OsNh6=Kdz8e&@we8T1H!8aC<hNT>2euH0wG-Hc|C)Z_I7M^3(y>n^3jdDIX>W9(O-k{4OW=6L zi7Al>57kOTVk_R3&3&2rnBP^!<4%a8VqR@pO;5n>W5@M9l6tYaScYg1yVL2npkj!Z zEysHW^1i==*z97?4}h4dfH`*7dD>siVXQwE%)D;NZM6S%I*Zv-U#`9@u2KGjW=vwMuk9L7ytj|> zgxMAb;L*7h()fN^PSYB-HqI@&-GA8(Mq^MEP&Or9Yxne5FVSGQOPV$dd+P8)4>~!R zueJ*w1G@O(($k4TQHf#3J+PCZmkbqN_@cebSy_wK4fAE6*BH|H|7%k|)8GH^N*^qU zkK6Y-3WMWKJT*XhwzzZD^mVs zqW_oDk}ysVUY^G!02wjiF>8lWP=y#TZy&hdDYyHD%{RHg^@rU{MB*8rE;sGZK4~5= z`>A>SgsU=N68N)9UNTqqZI4Wt9enzpI*h!QNS=r%jCi8`ztzy+L z_xqptkhqd~8N0s&aKX3pKg5MZyY=3eoF;l3H2+bIFQ<1T>dQu}!p86+z9vQD3TE{O^Wzf;=`~u7BOPBO83gvpMr2!{)1< zJ|EaSI1U68LvL&w4PnmLuXzmwRF;iiM_5*B#lP6G^TEqO^ocx{lsY`tAp)o=n;Vh5 z9Ac8l&;MI9cW>)qq+!QWeICg4sL3awInI*K)hN@+(GO*De--%tCrg9R*N|7B!7dyr zM~Z>thM0GtQM%?&soNKm_49W9Le&;L&%4uTdR1EE`Ama}gFTkQwPGr=@aCj?nv==N zq0VIW$jNL=r;&7i@>wgG=-F%FpZv*9v46VP2d|uq4c0k-`5m{}W~?VL0wtp+`ERzB zNkr^ENy???85j|gk_BvtA!hr8-cqi)UqA2Q15ywk@7b~@q{1q6gNWr)JjCd^@|9qs zgg9S5E$T;`XO8kTPowWs7G=RKwb4-suEjzty(E;3<`f)~^TgV*`B0KTsUIo3r;sf_ zybJ8ggz@EXO>XR!e{B4G8Y#XiJ2#dk)Arc-a@|y|2(}u4-4tpT-~ozTU{NexIQuNh ziB7|}HrkW(+nm%?U)MKeE6uVXWiT!Hxwj~h$AfaQ-YT5Pg=l?O>;QvWe|iADUy+%} zc+uJ6jMC<8r3S@nuDF~py&%jhwJJx-uy>-XP_GG@c03ts;-CWK%cv-NK` zE>%e6d&j&~EBa=XgPG-&+2L!CifXOVXYZg09PrL^crV3qm01dH{f!Qq^?N$B)`{bu7$YQN{@HbFCHy?|V%RhKwyi>df>;w1Rw zPE9(ugJxs-koSX=4NcRc^$oTb)o;M?%R~2@KAi-4d;9YMZ5vf=`+?6Nue;M(LG;xQ zzlwhoGAz}BB-q=fxo%Em!k%glJd2K6F_5hRDEJ6g7NHtAlqqy5!{#WbC$5O?oOvz+$lc=4g)5Q!$kco5S&ExitRKZLciy%oE*Wbtb>;8$t+4v z!AS2F@3_O>F8oZ1HtN+btMZr=YTv_i9^aa(ZiP-eL0NB;?@S>kfq)GG5tmKC=;j?% z2u&xI-<9A*hYQ~{e9dC(d9qyJ zYq)%p_vk1ql_|gACW-$bERft!9Zh$51PlTisR#A_ehQyMY0`-Ig)+Z^Q-^XvluE2GpL>|Ha5xF@ld>%ObLnZasL6KvdPi+8aXQ|z%iDjOK85Q%NUh%L$T>RCT~pKJmYJW3p2ZEEv(Sw0uTJ8r zQ1VcI5*Bdj4Y^6d+0);B_`*#pb$5ny#}XZ6drE_+ zNFEweSCVBE$wROSLTQ1ftB|3}{%ckiq~2P52;5&Ofn!jw2w4r3G>qp9ZGFRl{N4UA zk}iUj=4%z`0G2YE==8Uk$>m2QL!Zd#5eaI=y9@4!So0!fH+tr~K7^6l`W{B5psVc_ z;jyNNtp$=UX6rxQ67Wuv1IrkFovZrF6~4kYAaC(1diqnikheulu+(i&;RTpoW1ooI zF{tsaG|&L?lc-jZ_W%<=wOgcDnO)kFad+e7W-1TS4H0)=fGOjj+~;?KaYbDlFD(-? z%dyksx^l@}xMID+6YX%JaknegzVOYjQz#Vdj@$>2+`~$$%i|}4o+N`shc6XE$bUA@ z*ew2GFlpDk3*UV0S{3Q~f0+ue-N=rf7(3>S-h!;FsOZM?-5keh)5P7_iIasEHD2L$dgct_jVO?m+%(GQdU5lN8}jvk3UaTA1AqEUh4r2FRtkg?H3oD;c%Q&)}<-#uo)7 z<2L*C9hGEomN;uSce$`o@Z`jRp~QY`LpABke3cK1=Plu{xw9S@cIpaPJkwMdxp51d zN55R};i~1Izc>&i-~`z^^=VE%Vtb&V_4{w4_aqz}kxgZWU8rkwfZbP! ztiz*V&f)5i{}Z8zxJM|BxME-qQqf3G&TUP`q{p`e< zA!`1>9ayXihZih)?BCNVc23-mjw@xWJQcNLq6JCrQ0Q6+9nUp> z^k-?fwk=DIc3ukE#RttyXR|lHRSwDyRsAtmz_@AVIqykk+NRFBX0>;AE=;G5cWwHtv55RXzq4ALURhGp_l*muVuhu zHXj}>O`xQ9xOqo*qR|K}CsoDoF?#luMpL#M?U*X1lc6Id~HLwV8&1Jd#krR() zw#|zU_caF~q&m=3j=ucU}C`%%D1M@ZEl-E}@#^IH=82jO6%pbw?z z&9Q$XU(fczw)E>h$ej<%1v^lZN&*SV0n?rIUde_?K&->y&F^;gJsX6281`fJWo@jT z_vhN>>DRk!IX6X4&gRjP|NpTW{KTPKZ&Jl%#^;y%FG5A5D2QdD+Na~x-i$_EQc_Yp zWOKW15=Bf(0Tx)6CF-W!rebNcSlj2}=MXOaT@E7Use>cXU>T)MB`JXTJ63hJg)6-q z%rTY<@|STr+L|Kub78SRnUem?c!i=-v9|7wHu>k>p$Cs>FoO#whUJaX=^9_;Wyf>S zm@oo`%q%$;HfC6Jowf15`EazzDU*?8w*S_AZYa>m3S`au6M{B?BDyvxsP8$>`nT^P zb><^RL$OBpj^6`*ug?YiIZU_H;Fad|ZTL-WBE|2$@AEsQvzPlnJpkO?g-O3ndrkKI zB=XC}sOJ8n+hluNMIFAzVwFH0RU zE8aB@)Gs)&FxOen6-GpAR`5?Zd)=YUsGTJE8UC_5!kWnTC6!BOTcH0&U3e$2 z_kP&!ef`fL0jwR5SO7`fK7w>^EJL(NC9lf$Na3aQDi#iY!viTk2yY4p_TWGYFGN-D zg`z`KBXX4^0#iglj>JJ-a6NCDJWRYvjvwBAP$Ajoff?CtJ-3!_;oyyi637XHz8F4% zcehMZTggB;>mEY!o3ux1mKh(nz$sSZs#L2g1l*?KC&<&CJP8loJilxcEfKYRza&=w zNU7eIPgkhi7H&jD**#xrq~=Pl#sn3M+?PL5d{??l-6AzfD;_sJ8(|e8j5fFFM;A5+ zudNs+K(m~>^}5c6Xl7J=imyb9A&0l&RlCkNa?Jn1idB$g6PVm|`YzMjoV(;^L8T## zymtIU@|2!M9Z3E1$@%GC5s=B;L76n z%Ef+QrN<5B^Y!$dRznXKQ|xBIWR4HqU)DEl1^sImSPP((l)So_mTEOfLz(l6Uaxze zc>iR+nz36hHk)!16}euE{=R{Tubm^t>snM`p>f2uj|3)*9^gbRza7 z&s#aa7r!_Ft`LOOz%&c5=F;2$dn+Vh^c>*Uvwr|DP*anl+dXEx-Z1dFbUm{9GbQuF zxe#$lCQkd%SDIbC=PFkboR5Nk3? z#)dGA6}rES{fp>%VmqB3s95jG&zUs76e$f7TY^mLmVP zLqZVKe6jxO`(I)rfxM$OD9nWUU1| zZb-BHMJk@#q$0hI&HGy1XSs}VkFE8mE|Z=RzCHq)sEQc^+5MVSAcDO8P6&zk;-=oB@E4c=Fiz zIN^gP`&#{B*kw3jeSlncYgLTXudKO4FhRLY2A71-fmV0XOp&-^Fc8PNH=d=kP(AN*p397`!fv|E zR(m*ur0n^d7am*c=34<8Ge+!)X9*+{xof9gxbn`eL+bJE71U|)Ea5M<{r12;QH#XsQb~vQ` z=Na4)!&w!||vJpia` zFUrs2KCO{=qfO<!%?S~Jv354%%8Oaqd?cEyi1v_;w=7W{m~HL9!eX*)`~L2C zc1F>WbEMuqMro$OB6cn8mW)`taVaHaX8 zI2$@4HGi%ZR9ZiIH)A>LRslVlI}=Dx5dcxWJDOvXOo7Qymiy>BA1&8Pp<3t2?CQCROm4V{wy&6{`m>eq=asY1;XfqJ{8JV-d~2@KAu^nB4# z`?*XadU%$I*zl}W;K-dS;-Qd0%-B}^hU-c`n!?pfw1vgPLXfsJ)6S9truH2ZHN+;7*A1Z z@0PjB?8sHEd<}=#^;p&Nd(Dn1tx7C5yV<$nCt@y=3m(mpfX^R+Z^ip@y-Je?XpcYv zC4bYichu5eq@c8=0=_2&gUubv*H{O}s@-kV6_0W3+f!%gobwfjI^rz_P^=pSI}z9j z5UUmPJ^nA5>n8-#_L!v$gzOed7(K6#BjQN~jXU=p!ZtPC=?Ar{Ox}6k9r|Bj_m_b7 zca1M|!!4Feh3yd7To`WYKdRq=x9uVM9B3xC%6(OiNw0aCUW=A4#Hjb5kyg8%YCWWb@fq&3 z#EU}{ybl7p*!R+d<9w>^NqOh9Ronq@mi;50i`=c}gTVbfW~MT)oqCDL-AvsA7+{qY z*Vao+!%o!5(8QnY+Son2am4!*E5KzN31zxGhV%PXVX}4TpK~dxUXW-@(4L2)Q*O9N z^^q%hBq+2LlDUw8T&pXL1}#;sR7+Vmw6%1*K;$Bk^!4K2VZyAm74J{QEq8&tK4Q|m z#s$hI7gGj^5O+APxBTVF{&K_;NIt)p#b@p01;urpZkeZD$dj-m=nGzpdrIcp(Ur26 zP21mYlg$+BlitBu8YTFr`*<3iCrT?MEYnH|@|21X)1qQx;+E->d08!Qv@hT8!Jo0n zNK_s^`*=?|kR^``{5qmfn#U#z1&05gnb=qN+*|0X7u;EWGGt?km5PnKXOeO^z$@FP z13Q~6Q@%z=tIanKv5Nz@;l*32&e8O~_z@ciFY2()8vGW;5;dSsvlt;B9D$GtS^?zvTd?B}^PlmmSxVF;7^~=&8R`Xf|07?~`0sZL zU6-$;PK8>B#DB|_$Z)N>zt$0PE7wTk{$(^EQn#9GXfoxt7bb<0uSo2nolI0JQ(Ye| z5nq|fNo@(Bs*~MG28jJ_aew7X=C%yDWYEW^l@sp-4+pbm7$|k>U!P9Gn-2d4aKk?K zJIxte0tb9vueo?k6|1T*h;a$PfbsQBH1PUs-p#dE54g&FP6v<}-b25Yx!t54?J3n6 zDB<_hhySjlhDP+O@`8%( z{^_TK!8y6eth$L#^tcx3w^D43r>MUJgBz# z6P6SklI3=m9=7qdU{iYCcBVuZ`^Xhg#yXRlS^xa%L)pt#=|i?q>UdZ0@H%NSET8QA z{xM?{^=hTAb^8;jHS0(mt=*|JAzobX(i?3|)js!^Au5NtsL@2Mq4bfQlTQR3&gbfM zQCFbLT{!@zm_8+kGQq4{?_MjDJDXSaWwgT3Qg8jR%MQM*)1CbGo}Oi@k9yi{Y{y3> zm#v%OESwUljcNWWbz1UT zW$M%e$1F8uSHQO}GM%q`j-LU`KSEco9@k6#TKiC7O-mWfNX4+AJslG5LC&lkef>T zhlpdK-P{Ksl8wWZHa>tFFX8L`74uJdOmrW`aK4wY2ho?q8igu(!#1O*E&(}*DZRiG zGznE0C$^SBQ#35n+f0tUVF}c2D4aLT|8$#A<}m0Qk^Nbuu+R9orS@Po; zI)-K0per;RciQ%Yif`rD602CASOwpa&b3s(XyXB&UKQKF4DbdiB}ssd*pVt#iZOG=ubE?W)h8rq?z?nBIU8gNZy_v2TY&o}AK zG2ep_aEjKkAGYlzv$&AHc)R0=^LaRe4!JEOhTUG&lLp1Vue)$rX`zA=SOOWER|-QG zxfyc4{c`tT-f(`<5g#t2{bc4`>hSgO0dLWy;t>ACdbPunPcojL&kD zX`gl6kaMrFN0y{>DgcE|cA3mgBy!kvk{C)VlMA@);rcP7F zMc-YA;S85co5|6Zyq80C_$Sqaa(`57UP|?yJXvD8|DD?b=P|0z0eNLTrt7q>uVgd@ z;Pu0v{pMo~0p^A9-Pk$9`DS5)CSTU(v6TP>Dtx1x1M5fVlef#5-YY>>MS|Aek{N>?`4A}w1?qoqI)2wwsd9II;d-4R-J+25wr zGV8+0Gal^b2O43j>i4Tc=vAt;Y_~}MTtMC_CQPSR#->HBc-3c~VIarvLQ6h<09}iX z|5&lV40!Ajx2+me3_UA?+n+2zJe|r5UrjH6Wor$O+*91R%&XC=wqZwzCW%x{DBnB| z9&YsB%Ac+yABRFwrmq6+*8C=z<%_<{dIW^W4uD^7^*v?lxpeVyez3RFXe}br@J+CL z-`g|m5%H}L^Plr|O1BD!DKl*dFP_G__$-aG{oU_)&*)8VrCm@te>HBEpi(QCS1*6K z9(cDlfWPJ)I^O>H-oW>PzWwdd8kpLp2!uQ%dV;^O+1-D1KA2HOx6-l2c$4od+G?pa z^kDsk=YCL}b_mJJq2ogYjp`aLCGS|QhT+AtH_MO8$h$VOHoQFemyw*D^5~)W?2+ze zPG+kn`mkcJMTtaZnQyXP|MPiny7}~J%@;oF&{$~IV>FfJw0-4PkYdQ7C8%!PNcwIQ zrureCH92w-P*FCO16U+ydV zvLymG$M<^B#-~O?Dsp(`8HhVZWW(7sFi8px}B|c1wQfCwahUKy73RI{%ia1`P!0@ zWZ6sOCvgS*FiY5&eVBa`$*yAWplYac5?;JrKprlXMvFzi{u63SLr<*xRj`+Ux5BAZ z6Njn81udeGhfu>+#wQ!SnvZ~xBMS6?awhEyI%ld@UU!^C62UR?N( zH*ucd2$!q^t^Y*jFSv1v2UP@|-k%riZA1Uj#XqTV_|5~%;%jgY^xAkBMS~afO+F|( zJVnsO8>01oA3xnBMb(?lkB=&iOqyh&5Z!O*3n&HpABO(~HXC)Wi+Wa0c{0|R^@8sp z+!hm+{AB!0OlNvIhT4P$-pm`{3)FWGYA+ZnT3jS@>vcvtYbkuHO4OuHUibV2B>FSS zJ9@5JJGy*8RJ6GpUEJg|g+Fkm)Y9#j4uh|hYrJt&`Fs(~XX~9r%+-FRO`rOblPOzf za1sxa`()}5aEy(h&pd{p9>!cGia4+Vo;`$sIoXWz@`9OJt9-3Zw}DgxqTO_R-bFf+ z!Y`q#3rXSvKtO0msIj(a%f7oPN2?KtIOlx7em2l@+Y`e}AqSpP5(kT*UGHsU#dm3G z?a~5tw#aOxvLc}!6wt@)FvASjX=g~kzMe|`S$`grQy&XA_kz?2NDd|WJz1uPqt zOsY@NjviHd643oJMeta3Z@Q7<5xfX<2nHUT4ZGgk*4Yf%*xOgKyqS4r4dAV4F{hL+qmyK^YklCgleNqh}V5Vtt=9{ z;FCcpb|Tu3$oMQ9;t>(>hIFKi7m?+=ao0$4SND``EGEa}n27 zR7vBIS#&kRem@tFJqKTBDnTEV_ER2|qYA{&Fp`9yrT3fJ0TVK_PY2WH2ONgNO{Iwe zaA%pWWzBr{GgwRmpGf`FR~`?ld*XYoa$WHqi!)I#B)TEC!XuRADp&-Os%lu9qYbZwwx_E@7l4}#3aQIw@w%P3nM&4kYcwO4$QUQ>{uCxqGW| zQGOp&YULYWD*+PpoPpQAfbTP#6|6LTtH3AqYz$=&twhAb_Wnm(E^xkHpDbZh^~;NA z50PuSpK#geaA2S4a*3b$_oy4x6MD0*O`KGWp{0R}PvoS#jcyd058Pzij;3p><^P|2 zjJuwM6t6Ld@=zwOHxHrN5i6Y_h#oc>H^R2~Mg2LDD4K*HHfQ>lwzTrJ{ zgCjuK><_~fyP#$lb*u6)C$t;{@~_mi@=5tE^{!J>vFeZMhRZ=!T9s3FKyx1xxmG}) zb^V1eN0r%)id-U(zHU~sV5`du)?%$)wE7XR=SYECTm@lLE7l&;LfETV2qgmzqhA2| zLzZR*3!leptH@e&xv9}YAYOb|KTWB1I+>sYPORDJ-S6q;7^JltsmTIA&e*UsEZ-WDmcP`|#D3x!I&pWNNov!2z_qGTucetUW?2d^xU8*}={fWCv z(O?$KyTm>Jw_&x!W@CH?e!s!QLWz;kdE&F5wrj*>ojI$nHPHcB9N__;p>?> zHMaTSG?8seoJ&o&exIe!aC+%px{4n%{e-qT-O$nH|FY+-M+{?@@=#Z>6D)g`rZp>c zRBpDC*YmobXZCs+#$rkU_IMFSzi1Jm4C9E02z`AK;I1;9bZlrH67TpS%w{rge=}wl zE;ET2|3VUA>L`anG*<%2D=BRf7T)kIDEh95EHVAa4HU&u3V%1VRrp%7=rWma>(-lR z+7R$P8Y-SQq|OeWoU-wd5^y^P98=E&A9L39$p9L}yTsf$l!78B#?KQQ3^SDQIU(0# zeGGMJPFkx?V@+{FALFqlO_1UfSST++ucP#8X0T$Uk(&k(!MNbe9T+ANWZrjo!J3NG8#xQs>mQlU0kGQ{k z%1XCCdOws*xOrFW_Q5Sx&~~XotRqY8nx7cPDpnJ3d%-v4O_2SXABI%_VR(nN+|V+! z1svg>S`wF?>gB`r)JCJD^4r`yYOc5MaoAICSm8&8EX?bP{dAjF%d@%?pvlUwG(;u` zjVIfZLOIDT><8C;uUhdty19x@<0L8Goar4mp1W03c^ zxd#0dSXTL?&tCe=7Q<}+N^6h~APTJ^$aM82IX~wX70ZuSGrDE_vCYOCN+(p} zlLnYd>U?^mcbu}ydz_@ zQcwB_2kCA6>};ot-{$Eu75_J+ci+C&Vi^a8^h%jUn*;x3(M`N{bmizWSXH^o*dtYS zC;hZilPM{*`R0(4t#@{amn!ff8B!N%W+^*^G5ba;VntG{UJ+>hJRz2Lq!KgRR0?;% z5Mi#`4G&n1q8Jf~tJq9A%O7OBUz2hI`%V|q5(Fx$Kl_Q6>3ba6wD*FM-t%Qt@WZzJF| z&3~-vMuVz7ajLR8?Q${c*GUc}%~qK)5r%!dkXrNgad=%s-P3qcgh>Qx{su-Gq>kr2 z3x3~ccVfUJm_W|nEAlf|a)?gEiLcRp-WvlG=VXS`gmm z(%!#dH_ZIV@ z;P-m|JQVjxh)t*1Uq{UA>|3s3>+levUis9CDJ77oI;kZD#%X`NwEmRDh0boNA?vfz zOYxWW0voUrAc#hPAUOH!+2fdhS#{qfl(!(q=OElk%!#~^Tsh|(S*(>4h}dL0tsgGa z$EC-Bi~t_A=YO}WFJ4+LuBb!mg;Atl=!e(Kt-FCLAU|jkr});hN=A6xa|9h8e+@?(RrIQ;s2UvpOaKCdhiWO z9M`bv4+z7eAf4r;&KYj+pk$9*6RX07T2&0U7L$DXJ3R`i!cHnDUSY%d-pUmUVnEJc z5#1`S-JS^7YOXI&5GLdcJv9&;W!Ra>aZ}W5_a+3YCR8kc{7P15%(gnA1ytPII;Tgl zf2>FX>A^0ieD{n)&t$%ndGB~C{PPyb3iG1t=Nn>CdvV6^!Rpwcm8XUrm9~&ZY@EZ! zCFkW1PdxQmZnX58bZr@xPYBohLH##J8@X0X3v-t@ZNCPm_trx)OaYq6BfnaS4m_gT z8qL&b__r1LGnbGzKNvgF3* zx&58XVi5sKH4>_V@H%uDj)Tx_vHgn=aW1+=)GIR%L!bVV?;HE?B`1M&*jEx~)_>~) z`kX{re_-;o6Dt&1T3_+QfcC@*N|HVy9bw0mm57J{nrTD5Zmf1M55FkrDd7rY5h{~n ztx&F)WdFGJ6jp>Cj6ZS6Yg3rh&MqfR+CRVptT&}nx$SeFRxvCs6Cu*Cx0aj2LU)1} zf4ro!UyD*L6z_4yqQ$`iCbjHUR1C-i4%=PErFXmNXOWg>y4D}Cjms~%*bwT)BNf*A zHT8Fmw{E1qn+V*jwr)HK-5OaT5XmnE5aqx&6au*MY0p^BxGoFbKatIo!iAzw2IRSf z5{5-6-ITh@-!$|S2;2J&pD{3KGC`}hXg4E<#u3q!kdj~I@v_r@HF!*7Li#fKw1#)} z@{1gYlR2S$XHIx^hp>U{xZzo+S|+BHT8jf(t&nW#w&ug1Ea)soZC{l?#;2!amVMGz zq}SM`ZB^#WEm4n%cU7)oGmX7Tav5TgtZtv^PIL*gMJOY9*!T~w45|&%a^u@$EEDla zr@P1qpg9Y@f#v>jxY~Lb0m+XBBv_t^9si4}Q{}?#8~JAhvL5h)@BAIRZ#}ehd<6Rx z+?HQ>Abo#>F#fHQT8{r{FOTk`klhv4_n_e;T_7buMonYh>iMfyo7#qA;FcDMs!6{8 z(0k?7aO*u9urzhu;&ps3`b9hYL;iSTIrE)jhDdOZ6dL$(M*9Bph}>a)Ui;+}IOp3$ zyE-=4&sCfO^&~^WjVeG-(LDM0WmbW@P)ofv35fvKA(+f%4VlJg-Fn^nEQ}k(*s7|- zaw?V<5^aBR3U_l{3Wks_M$4GW8l9%{H>0~~-n`?rUGk@4oU@9QuV*bu7?G%x*{O7Z zdopuV2W`>fG3ol3dEFk}GEs43VoRZF*y`{fFSjV(@SbhWg!k;v)d;sgy%LwM07E7? zaI(fn>@UMbomI+i$ZHYTBLxwcRhXoFayD@2%{!fcRGBWTi1E;qa}IK? z0(2*9=i@0t(iXRYZS5-z0xNA4YMOqdlj1y!*=l$JmxB;~C-WjuIxO4cNTKlvgQ>yx zN93Pp0shHk*}jN0zh8M9mwnUwph{MqhM$qH`pt&_5-&b}MAk?fSCdQSBLf%(lXrIK zEv}fPg05X<00Q6->F|pIG8y8k)Y`kiG^gJS6>d8*=>1WI;Xvg>mT1o-AmtKzq7np5 z@3EFpxu+if8jv#FjiP5z)G_?Ge-WnXXA=AYG~uM4-fsVc+|)?>`|aTz@oU$q(~I_8 zOCiLd!?cAAZLHgK=$-%FgjeTRJykyo48|YLyj7?7+ZR0qJl;5zGvw?V?MUAyk>i8D z?F1oVU(anKpjFzh5 z@H_r81Pj~{8{GoyOQabUiw8U(p%ETDC*jOccj4WYtO18Y5i{Z4^joRFk7*rKe>?s< zuIH+jc;2t4fi|yLJG%D_yz@>wxPbXFu!pYnfi%tH=&xETzwdv{x?G|Qjyp8)Za+Kz zF+Pf3LU;Z85cH2i!QAlvmk0s3VCb%k3hHI+SH^!r{ANaolS$<|(>$L{&7jTu&kz*(Fr6XOv#i--t&Z25)xa&E8znt9Wc^pm zKCCHF#!GspT$3CHSWA8rftzU3Wz99urQ+dv@8jhnnWO^BY4$XePv%m+t4FoGj>$X) z@75xH(QW=vtWgx;>2d^K9PtQ?sQ-{zv!|Hj`SRH4Ij2=`y8hV5X))Q#E))L@e{(q7 zUs{w?<+!6V^Akpf-cxpEx7PTpIIg7lD%vz94weKC?YSHGlg#hgyg0sFGyM0fT_>vY z(1YlfY(6*{m3X6FwQ{7ljd)MF#LR`{u8Qe^z(DICRTPN;M&9sWaoo7uMHeE&?L_I1 z=+GJSmAjTOojR+{e+y0;N#QEog`V8&6|XV|g6ehfhVACGMt8R^U)1xt7-ow@or=*n zoo+u^saHfr>@a3(L<<1Rn&{>C+Iac`@*3SFjn7|z@KdI&css}undCD!jJ)=Kg9jP? zbb#F+BQ5ZGVOVxdiF!NL6^Bdie@Wfp*0|^YLIWRgaOt;|b8{r9nc<@irHz6pgR3g3 zafIn7*cH$e_Dr(6-&yIfT&_qnG9g#gj&M1s=4SpDRrY_1Vv`l^{o3^>Ueh&FCL$L{ z{EG_5N-bVqp(w?4Zm`b>MZ9<%gB5t$)it1(#b^5|?Sf6;b)#D=m~f+KWL9c2@L=~Q z`ro1Le6^5*wAfM8(uF?MW8RhS0}=zOcG1r9nzbX%uM?P-LhfrKG!C zx?4)RQwizr?(R~$yJLW%Yp8+u_{8`3eAar`@{d`rVa_@C+4tW2zV_bN)v<#J4%hQE zhC_lH1Ms)P19ET1x;n1DIr&+kY<_Y71pQRUnCCTCT3i^G$I_^&)-TGY#LH;zS2Wl7jHUhfYY}4LplI|Hu;eAa$ zoK)YlACZiE^+u!B;%Aj3A_`we0j{uIqdC4(p$7g3<#f}t3-x`X*Zv$MN=s+W8T}@0 zjOyeLgsftcb+B-!rC;BJ#wyGdwKm`LX;f@o;T^2jB4H|f=e6u-+drJB9P${ft{WCH zZ#+C_t|&xK+onjs7LLJm!YSxB(v2kll4d@1axjpzpxL0zT z&2&tFDFuw-1pU}CAEv5A46*z6*h)e)R-bQv{=2|SPWip*6lqXYn$mHeV~Iu`PAN!Q zBIiStg{%0thqY>TsLToWT7&#sg%^h7*@`I7iP=Bb2K15D{ngCWRV)|-GzbgmVn%$* zwqqRk=+an{t$7d_DV*#*M1n>aX4gU|l>ntFN^0uog8NZF)}nEGdQ2MkD>jV!XEXwX zg4X2)p7;t0U*7BWxGfLiT?U!sJbQ-Vl%M3Sg%lJ(rS1~W5d-L1(aOh&tCBf8M1C;R zbCUZWyD>#!Oc3!0w*joJu54XQUiW!)!Vf>S*zJnQDOTgw`oMs(CMNvKrCPX zHoQ=+#uDFUk2$f>SVz7O@4Ep7)8v_yfbS2Uqde~!Vnk(FG*Akdm7M!rRuTUY?-y;>oHl{ zO#mN+vdu8Js_Qhpd1tKcSkH1Q4vK7;!Mp5+E*|67OFA`v{BU)+eky6yw;*gK{z<;9 z+8{Nn)DL>ZgoMQl%L0S1y4RmYT2Z1b9xr=mJPtqv#G}pIzo+;W&e)-yj^7UM-;o}u zwks;c;uJ+XjNB;noV@xRh2{aZ9T)-ABaxnMX2eb}XmsWj+8Te})(AAu7DiY*_C|TY zzQ3HE7wp{kN)?-1SFvaarC7Gbq79|1jC9G6Xs+AV=SfQn?|&KOCE)af(@c`O)fQjPVE3moI~WFV-JWO(@MrDvZL&t&3~?7ne5A_#Io(PiEsS zqWpZx7A2a#dYv+0`#L>#N~SyMN`zDv@fSjGG=+9N4DK!c-%&?O7hY##7mSO;}C^aZ?=Q_$PLUokm-FuNs+#wIiJ#py}Rd`f?u7mu)1D1{2$0`{Pgk|^kmji%%}d&-afE&}v=Qjp!}98E3upcO ztal?!7PvqZ$Tq zBwxt>aq1nc6edx#DU62Uba)}+AAnrQN!3{dV~8}G=J)rnu(E4mZO{$_VA%(_qi(IV zi;~BT)AO1m1uLlzVK~cLGYizM7=nK%qIs=OAxn1+Q`M+y@_Lsw?cUwgwvy@VlBO$< z5s!C6_iV>leGhAp9;tJ_+5{R!jIOAoE_Pt$M>a$3?rF%UzidP{TuA;3H};)O-=WUv zq0=}yO8t4-(jwj+n}2^JZ1eCW3Dj%2VINifj#sKP_MOQ**4RYV)%Ax0c72RjBRu{T zcT7Ejj4<5%vt$>|IUa}Mmpa1?FC`=@QJ;I{l&&Hut4r5xx9(x9SV_gk0O3@VrD@z%qPnxN(f1Ayz;c5Rh;AE`7iP-?$ zxBBQ~Uar*c=U~TBQvB{ypd%s@ashOC8vf$pu#1hz1UwL9?L}#Fxqh@3!jP`=0A!4B zfgDTy5z{c2or+%uo|=8c8sqr^+Q8+cm14f>n&$N5zb<|wLZ=SN>TOxiZ~@}7@e~>V zgW=_Ui@;Hg`s^kJ(}-?k^z6gZyVSX*UroNy+Ur5bi`v|8I`v+wjZXNUx0l_Q&DbTI z7b?(IQoExOctc5RS-&xO@N(tgE<4>{PvDUspn8hdWKko#;>edZSX5;w4?3HtU9^CFA00^M$sai|=?-ApS$5F)cz2t{^J<*Mgbqt6mYLOnG<{ z5y&~K4sV$4!*H_ZOho$~89b?oZfO%@BfDp}9Dg}DS&6meyqB*2_{9C{N&9UajfPBm zrZsap?~u@fN2XeKXueyzR=Bvx9a8hDdOpaM&xWE-2SeZ+L%T=$yD{gut3o^mT8ftN zSOk><7nl$e?_N;wv#_|plG}9+#k8^&H4{SiJ}s;ZymC>Q*$s_{#jvG6jbT=J%r7I< z_Kup~gRO{qg*7x3YH~=7VNp2#S(`u6<0G>=kosj=_(DWWD~nH+6V&Hy;ZF^e8!LM% z4~zpf?U^OsS|^dq$Sd zwC@Dfc48E04Swz?h#PevV6pSsQ+2F(o#wJp`uf@?unwou?VS5XtSP?X$Tqv8H$Lbu zIxnY%#yH3pq!E=BJlfTz@U9k@%l4ej97`)$8gjhPIZuMu_BL6mQ9c^gN`4C`S(VF$ z_K9$UrPy(A^O*Y{KiTb^?@C?xAm1*JHzQ|yOYjuwi*u#DA!mb!1*pgO^qy@ukduH8 zf_UWe6-+>9ys1so-tUg%^7QQ%3b~18WYxfGBk23%`MG3%?J91`BUz>9<4U6&8redP zKskSFh3P3ZFoTVIxj!Y6%xQ%~WZ75);~L_0ETB<&xShSgFUYFiU?jS7SW@hx!ytmp zly6SMM)a*JQe%z`_i+HA^fs;l+(6|&z2BmuBM^{E+hPiz+?~czFDR(pF z@?zGIQ4dQCgJn&oSebI`(-cLig-|pNi;Uun*|9JY(C?ETKQhOuhK8ZtNM^YlWfve0 z4h)DhtL)5Tmhj}2W`Cd(9aOLWvgeAv)Q2A6J9@kjSDcX$Wr8M!26k*9Adaf`Sr1km zU7Qbs?N`Ha2scMhUoBa$CQRC;(P=%#nN*bTOrY2@op*5uK^Yg4a>~mS$#uu z``-S3ag!Z-69(qtl}ay!?7Y$XDv5ARB~^j>>8pHb`D;8R zQ2%hL=xn^3FM_Zmiqw3N_3eSrxhgvmq1W?1X3Lpxv1Z(|cI{MxBho}Q-@zYffM`r648V`tE z&ij6@%^{nuc{&juLDyCxUB#I6a|cl0LR`9d3(8{|=5ts7A3Z4$X(n{^b8?(CGPKiE zR1dsw7w_GNJx=XbLhhIw4{U9Cu6f+ajaC)HPnyRZk4y*@fWd^gxr-S>_Z}>1qF>#r6Rn+`i zrvn$<_?Z!o{bMD)glAIS#ceWQHMGbw*#2=9Y$Q#+j+zXs+=F}7d`Cf$M7Fz#&A+YcLl#I>y z?KlyPYpoBN0w?~ymwxCTAzf=NgqKle{yQ#gc{pZ{rQNJu(&&H9)$qEv(5Za_d4XK> zJj=6o58OCLg!;C*dXwpY5sqFMq`B?Dn0OtAC@iVf+Dh=On7zLEIlF1Uon0K#Hz|YQ zrKMyU>EN@pxBL)~8n-p%-x!7H-}FOq&F!OVP0MbS5K$0-@clt7Cn`!(hicMgkGIYz#t(TbpX#QYNbUoUg2r` z=EA=cyOIYi9476U_Iq|C|9)n9G%Y;ZfzGYtFd zXA>J4%XOF=3L2bCi`C}K(~Z?Zdf#Y#7eoi4v#qZ+k}NpQmAHJA|FXQlzN|h0TtpdfiRGt~eQ6+rMlGM+}NUJ0Lpk!siQjxuvRI}cmwB4!h3HeQh!g8h$t9iZOBe{fm!A=P->8b; zB)1DgxU1!>7VSRkcoPx_n7PzjR%+GG6e$BO_&+UTyEa1c1wI8D1`)nHw^?Z$CX6!7 z{ww$VX8}&wDGB0%&%H#UogpD1;^N|CQh*hE8QE(WI93LKV~i-4OrmcA5Mn+i1SBIcEt9vME(Rjx;|i&tU%PXWI6e^cL2;C7hQZPSG4k>}39;5C!e1%$*Jn)aMbWMEUvA9?U6b$d z!8C?M(d7PKgHTWbomK14o8!mGoH@18{{O7czc=Oj)`uXzu&^*VDhj4S)O?nN3cR=$ zk1=*O8k*dJXC#J#I678bvqmDHLpN1B?b6Hb;j~U#S{*wCZ{zpFVzr~P7l(?)CFwgn zemKtGLUpTS94$|tC9qmhDdm@XxKXlCRCb45-)WjXZeSee{V}@#`$vaIN*fg!d8I)_ z^Jm|&zJ4ze6&iXrcjETCr>Dntc}p9|pD=7^lO^M>qpA4a{KgJW(msUGjZ@~z7(WTQtMR7KMET9hC6XX|%oGZ8jmP=x&#S}M1nd8|3INSRA?}|$>cnieHJwQh0L-GRSW3&_ zl_acUC)J3{nTA(aV>!<-O1`MsX=N*x?>wcPz1;TZBSn_dY&PBO`5S9+sBoHuTJubj zMU|r&W$TkNqh&inMo-T$nUXi{H<%~b4CP&2q$K}YdmMjA$e%ZjYVBI(hzDHWKWj@z zk5}@ND@3ET-t08SH`CkJ*U-k9OLu!0zy8uAZkwB;Zw9+)+r8~~OIKc$IdE}9(|28j z2mwGQKSEBMxL#P3FnE5)ou<_u9i~;dJgIjhpS&( zoXgf%TD!vH)4j~q9YzwVX5#+3?!S>CxC=EN5auMW=lBx|yQKblxp*`$XP2gZw|~yI z**Cf5>Zz5&t(l1?J{12fKkLw>Y30;4)>+@8Xq!GV1Lg1dts!pFy+lSqc-*MCx;XvS zo?+^OlDvvTw9D1_Z73Dv{!$l#!h_O5^?%+e2e5Ax3OI?VR*oM_g76$b0{+toOpa}-Ju>K?u^bd_9Gy%y<1(mxb=u@3?MsJ{sj2k z%S*!Jk?s!%Q-$%A*UhW=OCK!d9rj+F6zi(PobFx6N5B7*9Q^&{c)|DR@p$yvSy{Fh zyYkn!xBFIUeH&qF6*UPPuK$dt=$uefA_v(c0?gwxo&Eh{QRU5H@j8S|AkHrl zQSv`N%dJ0sA>=~2wy)HKWTnhQQDhauV0$9b7Eg$nX*v+4_Y0Ygo*oS{lG@$kcK%0g z7M?5SB_f5(1Y{C7RLNL0R}bGPUHPnaG$d84+_zZIe8c73AHq}_xENXlhhw*WrN`Th4My&foi5jM7ofE-v z^*9t<2oFI}%3DbuN(1zbGDo3~&adL=iP=}HDn0~>@oG0k=rL4N6l?JB}oP+~C@8a`^*3Q1^B{KG-lG zJzit4^`JQ`kn*HIEy@n{z88bu>Uuo&58`qDuR}oXjY&b2icFpSzMd%@RP(OU=+_Ho zg(STazyiE?hKTtHM%mn1oBg*1h*3^$sQ67^b;;iQo*3%BX14#fP=^~#6iO@REi|`2 zA@0SiXjL5&UtVENo0UuHnhyLfr$--VNoC1<1Dftoe8!6_?Plj~hJT(Sh&3=%3HCiv zs|w;d*Iul3BK^{@aUv^1>nTI&z@s#Pdmr-N@u6oTA zxQZoHBQJ0;`7)XoadQr_u$$nsy(>|#t}q@X@DB(8NlzU9Nu*t!<{b~%B%Q!M%IP14 z@^E2k@@pP(RwPVQ=gOQ!>zWlns2H59?9k=e*|}dn&Up3d7$X6XAqWfU;U>KldVf3H z5r`?u8vS4Ag{nhEiy;*`h=PLh`u+R&qk55>ZaTP3r9SLf@Aw4IzF(s9sG|MiFGnDJ zP!4z$N*X2Ehw+H>-O(DQ!7clT7U|gaSTz*r*w$)E{V%%8eby6CwJcGpT3wR zoRn|g^i+PtKo0VMR+n}+ew7@JSOJZ*4|{k6WPV- z>3DoR2x$gr03_#vTQ&F70J*@glv0>{)g2nCYw;EbKGWg3vU9Qk0sha>*< zKD9&~{E$B5Fro@_IQKN-Er#94yzUqUo1i5;r|@`kafC_AjfjW@!Ww#t{zJ3wiPhq> z^46VK*a5$rUD9Qq{P$#ulZFB8`v5c@JSNZ_USQ7{lB<0i9y?2W;FMy!(EUog;KWM1 z@B}~p)dSxPXE<{#*2C)wSvVH1n76=^A84Of1I*uw@lNA&9K9m4VPCkQt1H*UrwWXfKhjEhFlOPv zVC`LFp|4ZVmB~*qJ^63R0|uQBtHL6$PI?JDqQK8=TI0^yY}(9*72S^0Q2!^^v%c$9 zt9XMpFx2qvItY&AeTtEDeNP)JbC3Ru_5t@7?PCJEx!XqiRNbS<&>kzUcRrY1k+tC5 zK$&hXBd(c9jIn^zY5`y%(T`-FUvF^)+Kna&RGz1F9|6EdWGeyQMMhtzf_Ei-d7< z%~mQ^ok8+jKKqkCFk!V&S_(=y*Jf{(O*3j7H6{%|=3lM`p`xOWoqo0VVMHx|;oLdF zqV-j(=T91{qrH!HIUXOm=e?Z>sSNJQ_I_Ya`lwS@W<0Fwb|xt93=-*35|)sUbhzZ}0x*d;#eog5)EqW|c4-Kw-Ye$@$>} zKETt^1E4l!?#!mS>b2&|T8;LiK=r|a)_k@s;wb{M>EJN8)4pC$Fs{satle~xG6ukJ zEDDetkJnjg@`1^<#}ztig!QX|rO^=2e4?H!iJ!0cyX8+PYagztOiX;+ zw!1UK57`DpzfP_eZ43_=Y9pCDfYa-Eh9Cl=z9No}XiwLlq#e-sK*)7Z5dl)EXnB9% z?O$MzyMvwL3xdwhc$z$O@BjLA|Ab@%7PS|l@wfuFY&}TMpO$K)V!SrN(R(oO7`sg{ zuFK`i9`JtT(0gvi642r%=;|+7 zj-a7%b-b#Z5Ak_KcyBs~1JFr39UwhJKp2;^;^}cq#;fUJlFtGtKgmLY5=d)=+|@$=9{to_X{hxi7#EUL1Qbn(aV4W`=D*EGsWRk+(|;YJmU0q&y@C{8$8 zR#s>dv2W6uPgoUwI()_LirN=NlJ89p{`&lIp+@DK1epRG0Q4;M^qS_SyYJ76i;*2^s+SY+I$R4O<+ zPT_jLZp;sbHYbr^rUTiAzbj0~sY`TfHEhz^jYI2dmYR&i((c%qBM8a} zHeRT>Dpz8}uV4YE(XQgbs#bvZpe69v_AWHJ>iZ)h=x6{%irv)}~oZ3^7X3Av^Dn;TEfw2t`>h+wBR>kjA<@ zAAS1XCtbr8^YT;0dxCgppA*3Mnobsd;4INBFQtq)5f9gMJG@nfyRUZzn9kOf>WoIv zf6v#O3XTC3H;6{=(q2`KZ?HV+8;iA@nN_39SDOAgH1NKmv_CYW4z9 zKfP7T%!eUKy^bFLeN43h@256`Xo`bRb;Y@F2&h><2!5TAuN}Rck-$UTJF5jAUZa5{ zltsH}rchA~Bi?y@?43j3=N~M}uMkk4izrZQ&ufT?i9#KSXz>k3z<-WkpHsQv?r*|Oy;beef3&S(~p{cXkq)q1Qloz^VxNuxSI7h!j{8Qa6d!xl0^ zb}&~dtZ6n;HDPP}`1Jl{8MZrLO}k-G%DdHgIo;@}?S7f`fi{n_Wq-_@lR0x9xnkuj z<5=k3&Tz80xcVSE0zglxB?_97lT7D>(9a zeOSM`-*H0;8BWgU7-hC_9g2N=$G}jMrMI)|gLAir@*_>LE(my#I04flUPj8X6~Q93Ac0y?|GxrwZXwQ=F6C>mzPrUcKT1M95f^;i?RZi;vR898CX>0Y&go2vR$699`Ki}k{#CuIY zcVDFsl4`#}je59oAs7AC(v>6&H5-pTR}U1U?4=`cCWpiOSD|Gk(098_`(c+2%FtBY(a3bTk()19Hc91J z{6RP@Nvh4fOmw)q{ZSz-snYvVmRxi&6JIRLXm)d#^PC}8f!E#kKMxEPS|AdY1WeUA z9A$PagU@T@3%mkfzwXs#7M|j~OkQ-rTX5AmC0q{;lcNJN1=ml1P^vV1*t1Q$J?r;% z>CgKn_^{c$F3Ffp>(X3tY50N@k1_?rFg3Mac(A2q^~ z2Cw+1vUZ|Hy)>puK3r>YKAq${;3vu2Z+Xowh|?0-BCE@LFe;UnDyNon@b4PCxcVRt zF1fOm&>;!B+TmjS0ovXOQGc(^aN8A1BzRAFa3K~o9}k^BYn5GJfD;W|7yUQF$!WPt z{CRBuEKx)$Y`KF9G;(XOuBClbOu`N_MsU!bmxhIJ!uTsH;B7Hk^F30yx9*Pq&RNxj zt<$Fw@)MASL{ylZkpAg?&`$UUXrxh}IXRH(b-0ATPd^^Z9 zvY~;f)Mx%j~3zWELHCTRs0nI}c>wJ9E^$tmOO`{eS|b?M9CsDcI|CDTQBo zIrhee0ht(Hie|k{w*B_+-HBWbpdd=78TOIm%TNbxx<@#$AzC~9sy@5On0enIC&A%x zr@LWWz}ss(15)6Jr#IV>pMAZ3nO4blYAvQQ1gyGmg@lA0A4oy=;@i`LwY8yM<*us@aY{_5EfZiqXXmug)Z;;IWbUV z`rHl)&9ZhcV#Gsd)oBUN=;$99I?;LveYFAw3d7^Ysfc|Vx*pcfo?OoAZYJBb$saDbUq9U0u-R=OiinExME*vJ zED4SX5%p`jWV6@_KgjCC(0KzWA_aV0aYfMeI0d!AuPi*yeu-UQZ(_^Un&XEPb9@Tp zV>M|UC3_g3YIS#U+#OpFV7QaTSTqj(>f__XdhcN3Z2|NM(P=l;NKxc}8BWqr+l1fT zEX%bQLm$+AkfgrIlB;jgW77{Q7b&3)#n;elvp=|a=2>T&p zY9X#Kz3b<7J3|CcoP7oI*)^^|DY5`a`}V@jvkb10R+g-(u>=bU3fi11RAl`@i2Bc4 zagF(_azsVZg6_NB=6P2m_e(GfDE&j9)`&%s?+La5_Q!+N4g6{rkS?rLR%|sy6O&{q z3x097+gkcrU7%9?ibc2W;E#a=TH-$7hf{1Ken&dzj8rR-nVf+3hoBrK6Iwfaut?K6>K{r zKj9N-@r)`Z0#3_2I#X`j$B$2D%XPaaa-~jzd?6DUR%+OGnY_EKOoWgeC%~WVNcaRW z$)0%Weyi$oVFfF27q9f{G#*0`@3erFV47m?0AL)ie|oSv=H3lRg4q6nFTHCr00r;5 z2ULjqGOM=KWHr(w9ZX~XH=+9Mh7)jxjff=Uah0yfk^9BF^G#T1Zt-Pk9WQIU5bb=W zAEb$dlsdL~44tTnt#|A$B64gNhHz zDHoU4hRLY!_Bj>oqCM2_$CW!47FHMFUwpp|zas2-5e!M@I)IKw+8Op|8s1^ePb{^2 zdjtHL;-lX+al-XL{Qwgv@MUozSwBBG)`o; z2vyW^lNk(~A%EA3B+bFcs#K(g`>{;hd;MrupxD;SbiCR`)+!`{1aL0^>VDQc@DV*8 zAeM(E>D@5RHvvv8-1F?sL}l*D<)qgN02z;0i4Gb}fN}p$On{^MpG*eltaFe_&0Zk# zoM7Cyi$6MHvSTL@lcXl#8PJ*G@QJW0#rveg2O;vc*81A&T&3Y3;oU=-Xcf#ffa?Ew zASPMS@?iuKn~>%TE->HaD8Z%I@dUtCX=k6(YjiQGS0VB>!36TL$Swt1XzO)IgBO6K zBOnqI@&|6{^hKIS{@?}&04pdQ*m+$67=)zmOr{~+2G^*bsUa_E&7n_RxF~ijGP}nz zJyF6*K?)eXffrMbmWxf&*hJ1pOT>VZx${q+8m@N^c{FO)%T>KJtAwl?;o#O&v2Z1r z%_=$B%K%L1Y^K=k5pZ6?{4$alc?Y1mR~kzLq7@g-UI^KrB832s2Pa|!?Oz!25I_mf zj4;D$p+*o$|0{sglBM;wTKb1Xd^A99=cdbytq<%!DG<8(RFV*bH~$@H9XApOac#|sG&L8XuP zav8uC<{BOH!!kZG%EX^5Gpd@M2AjP%_Om`lE%gh0PV5WF{_Nct^9|$oIV3P^1_JFw zW(nSZa2?`c6VM;@hCiKpDz-OFsm-wmm~uTi(T}f1KhFSEKCdq(qiT7Sn?lKp_AS*C zFHeQUZ7Yg+9GtX|3(l{}D-fz88V}JZ;v*e$~*9SLDC%d{%7+~nL1AYU;_ zI~p)`7XqNT1to=c1Ff2uL4<+HAK|3OCC*LOY4XQ;;o**C@ywcK;Dt)CLl>;GLcjaM z$t?<-g1={J-r?f>V?R4{je@af&Ih$oK-{t7@d@0z5;B|f%#fzI8C2o+Ar@(b=9Vv;K4C?+C=WBSZU+!M_-)DK z2lJ^8K;Z5Ca{_H=EQNjLeN}mn%l)qW{NTrR5CSsR*bSS0mutcm$A=H1?lgLh#}m2V zH_2?aKR_Z<0my*`5uR?!Fw1o~9;5>$PIsSg*D9KlS0tT`>mY*0fXn<&W8~FNh0<|gZ`7FFO!Y{$BJ!%GOv8tNu${OS}3W=7zMve}>MS1wtgAXpy_*mc7_`H%~o zbA8lYK3<~Ep?&nzIWOk?2LL1rV7s1ZOP1r5q<^Npiv?J_#9-FTPAMcar7m@>2i}#V z8oBoP_ZQt!UyrW%_xa4ck5UF*Q};J74yF~;N8eYkES!Jq=fHN8Zi>$}l}XrdVXfmy z{%A9EnQVo!_%ZK0WO4H!ukWvl_OFYhQ%mZ^SyA2o9aro6J^kqmtg@*h^_P?RpGDJG zS}!wjA#}I#xjy$V^l19&+T*&Ea-<~ zM&)mf_LCfIPN50s4loto%2;ln@Kbas;+oY_w z%bv<*Y7(p1C`}r*rh9mAKm|RWhwQ*msuh$|BSZg|Yt9sz0FPHlB{>|Ly*p7Kv!XeVMMzAkK52!mOl~9- z;~1-NJg~N13sDGv^hxOsN0|0c%>r`o^IiW?z7QY7$IW9A7fN+xu+y!<>jHgc>8*nCJE=pgMIL*SJ z!f%UjRft!;V3=Nyce6^`#ra2vmHd%H79r{0Q|H89m(vhB^{O`uwKhQ~!E#F{&6&`> zgmmvRsKSlCv9eov21-Qf9h={Y))&kHFe9CS)6v{7l!-EIn;wczu{G9#gVhMM~~VSLo5P$#_K)pytX&<{z{2 zct;c25P(C(Y}OaR(3Lc~McOI6=ucnDq;nTW0eK(i?}FPpk3DviC4V<5D&J??G7by! zI2pEG*!VRSQ*8)d*AMP+YYr#yJAv)?-wrb&oqouf!p&E^GzGU}Ch4&)JH#dpdu z0NiDvU}7A~28vx4RDD~Mdy4tWH;lz+Chw4oU1kMl;0v`Ec6jwb`W!;O+>~vT-o{Y= zJ43(q_O@;42G7>j=7Vx`Ck#!LF)s>Y9Kxo5+nr6$r$kJ_sn*Wuez{+`60>SX^^ueF z)3QU-!&=bBvZ}6UNFOGNnH_X3)9;oT2;P$QQFxwi{Hwq4(hf#TxjI0od-%RtF>VBn z>%VB2mVK-4*;sEr7pWHK4c-ltcyX^1A5%}uuDJ*Fp9sI4dCGzPmYJYGoH%#T8$g{M zbvXE&w09l=nHy-GFU4#kXQ+3E;?l;|(Q=d7dXgu$d(%=T*G#6TdyVRL)bTd3P8(vE z{6^ltSFXt9;iEv7RtS5wnCWv%d`7BMER`_A-ReJkdjm;l^Vof-tfQ<>$|VrDZoZ$| zTh$;~8|A00evr5CK;cQc_&cLtaHMMBL7yiMd9pv(b-;e;A@T@ZbQO0QcueaRZJ36A zoa)&N0tQ{I!fo!ZN*Pv*v#N_WOH77zuU^i5kxk_lB`d#0TlLC?GA-(O8FhIieY7d# zuA}-QlkUS^3(c_0?z=UlM31#}*Q_x+B`XPb|3wZ4}>(9U=h9m=5-?jtY^!-)- zJwz$5uRi(vaN9X(sV{Mwr&Or$^$87l3_Xm6DhQi+zeZ(i%^1ii$6C}KAm8W$Isk$P z1E6j?(#a^q$lLVtJ*>qG{`D~OYOGWE_T&0s$TJ+?f2o4qpRQ-sKTh2}R)QAeb`ulqgCi^0; z?K2;w2)hHr*e1+iv$6nf1=O{Smrr_Ond;pYEn);J-)@u(SHyS?1Ab zfBn#WoI2B5lLJ3r^zIuWi?`53#!_(j#ts5WXeP>S@dEk;D)dUWIOA#`WRkg&C|Vv_ z>MU1w=h8D#K#wOuvzG!Fekd>}^<2^ED6mI)*(Gg>TIFYo!K&poY~+*6 z%jqsE=rjt2M+VY!#Vc0rh5{5hdJ&m4F0^rZ`31h$C?cy~=git)>TH(t2GL3#=&kK3 zN}W*a>#e8J!H*Z;>t1YLx_KiYUvvinw8G5W4Trnq-PdP>qo+3}>E^}nG@c+MBb%}v zmVSKnS7xmCFT8^tnOPL)Ns~bBr4zw$C3SDz?fH0VET|^_{k`=rZ|%G7kijh0L2gXW zx6&!WlK2b;K;=&jNJ;_iK;$}i?(?vUaK)asytDb9&TZh(eks7SXz{Rvf_p>|A4bS5 zLK3%{Ni}o+T9rk2+;8rascw^F2mxb+z^Ch!YpqZWpcb+{rg!Ey+A4a!(^OL7=}vmB zHj3Q@wBVTNMB{b`TExuN7~Y?3R*&*emSroF#dm}k>-*jA<}XNDXDe@yQTdJMDw-s~ zsKJ!$9sCJz$($P^F27S$&cQ~LK#Gv|O37?vM(^_|3gHy_E zN%P+BN^1~-{*c#-3KkQQM30~I!XgViQ4_YFB z^~x8yXp}=M&d|Zr9;m2zoZb*F6!Fsk`s%G9*qRwXAzg_c+6iXVE!e zsy7);72c~dzPOv+dJ4hX38Ki;9k_10JK{OK?BWM+1Dyj-&89svGuwTbuZlRGd?M3t z1}sK^d9`gnr0?xU$zOwJN);9BHLvb;0bVz++dY)eq+mf9bci4Q&XRTLobn#kZzF3t z)V|hyb`D(Gj0u5{;d?RGrg~~SFh%XH)FvNch;fzmM&U{(u#|%H*6zBsqP%4*wCufH zt0Sz^elh<4xjZJdGbvjy;!*eNZXW^;RKp-YFT9g79p_X<`(=O#Z@&XI#6qQ95WvoC zVIySBsPAkk%_ajQ3N#u+>jKw3Cu5__#(1^EE(Z7575 z(*x;XwOQ5%kOq0ipi+>r>$FKXI1X+Z1pD%0HLz-Mi;l;|O++ek#SEr1>g- zJ$2V`eMfF6Y8phn$O=yAxOIX$w8+>2O&&j80V6v-oYgJ9cqsYZIjZsPU?G=-oWBZD zyvt_=+H0zh0lE*BTlBNX4CB+K9jyOWjy0)8(jvXrvuQz#knT4u>K|q7k7%5 z1VA&(ZMHy17+Z2;J0o>(GH+wq1-O~+7oJR$QvmnXz54cMSt?H|th4G9^yhIK94moU zXJV0FYwY)TgmqbJ=E@&(CvKbA-W}0`eyIql^b)^JCkiU-5Hp<^M@{%WZ-3?AzJ7}J zq?*aT5s-##x!Iv$licPQ&9{I=fp1U&ei*yZzWkDs-3;Tn+PJP$3;J%RxI}!*EP?}4p2TZ4O@c$*Ke5_Y=|O;0Acw8E zi^9LmWfa#+;Ir`I$cLd4uptJ@f_UmxtsyPxH{zYMd_&n*vt(lhR%IclZ*g?B5;26G zUC0GM<@=@0tdt*<lDMl{1{FM)F4}gj_a1zAyNo={ITE!aJuqa>&v~ zvwcX1uH~|~u(w(7ak4GIq*46v!Gm%grIBN+OJ19*t+#q1$3IsiZR>YdRs6(93llj) zgrjKL#75IqK90yjqNZ@UQX|$okKX^%Aw~GG^Q8qjyi+hHU*1TpMeHDhRzrzKb~$RC z+G7nYLL}+nA+GX*AMV%hX^%j~{9jfN<#55o`4eGTUw zQ#k6?GKIACwzT8WaiI?OwmX}z^3)n!qfn5I#MoIfIy{pT8#iB1&v$AzMb&4WZMs)s z)P7kQ&HXyiN`qB#4_z1PE29O>hM*z8wMxj z=ah}NyIxwTJWIzDdL7iaXD}TE$LgX0VmqVYRei+eK?rr#>XO^$xqaz(M6zmf3cx`v zA1}0kW-L|~_`SA@-Sux&Z}3W*q5v1naA$fS7#@n+DimpP_;3=8 zc7a7j)+!ctmS4D~CLV8@jD{7L6M1rzW*)NrB)A|VRh1rthMxc3VQhFS#G#>o<5t;dESL3OLTJF+H zG-w7;ftBiW_^Vp9(YNCX&J@v~q6~b7N6u5zm2aMQN@)@yxGcqrkdb4wU9Yr=%SFoK zm6uc8`jxdh$|-H8^S%&i_vP0Qp4)q{Ev!_2x>$lyzi{l7V{e~YS%lFM`ZhINm&F10zT>a-3?A2)5Xg9(-!9 zOx{EYrr!5WC6Y-qf7EBK-6HmT+^9qtyl)LHGl)Pw6vf-)7`nPV6q!p!R|JAiXGG z*}>D-keoDM_;jZLO@8GGbWif+XR&V6+Pl*=&V-WSopnY{Cm-a>vw89v6t%UDo5b<& zYkJXC0{IJde8qG2U!wQO^bmdYR=CP*d@~waML%nCsb-_WncE^gX^;2xTy9FaK)pbw z+T$fLr(PjK&vedhNESQm$a}a-o_KEUJ)6FSpK!OpnBoPLUH3E5z>kLScD}U}X}&0P zAuiE8&zT^5#-0hTYJO)aRqO#A#0t;YvaLx!kwxfR5Yf%~msPRmZB!*Ell@77hm@j5ze|Kr@ z2x@s}KI?70G)a@D!zeZHZT0V5fkkaN30M7bj(w{Ur7P$>60myXU0=NV3?G5LIZ_o) zQ=IQv^$0qNyh6upLwk}lp?gn z&9BIcJy<2>U;JS}OKGAK-FHkG|H}hTjBY0<5higxyNL$@h#znt{@mkZY)w8crcdO-$7iwLS+c$q0D>Hi7()6{-U zTosmSaDI-cbv+K_5uxb$Yrx6=d?#R)59C5@bp;C=d!I-m29iVY)KlyrsU|V-EysC| z!B=LWBk3ETqb1q(xrX?-XcoN0_^t6@X}&*KCX0PergF7H%kXH`7JW|V#Ecj3{WJj5 zXd-EV_mgx832a$~$HA;hnsRiNrqNOny|rb=#}qaMR9Jht$_w*?kvTUN13;i2;F%&i zHPVk{dP&yC%^O7ojZ6YHq!~!Mq<}haj``_0sH0a-Kd2h4ZrwHdYC}Cki!F22>hEEi zs&NYXseYr*{(D4&F=MCo_QxTQ=@ALL!C~e@uS++TIiZ=CD{o^0=!0PpJ{)G-8XRcQ zcmk!6%gAa9beKSIR#&&a!}W(Goiu%Yu88|$8qwb~s#ca&+wnH^X}}*r!p!8zQNe5YTm5apEKC>v-Nv=m@I_@ zr;{y242pd}7tKL?4rl3N8NXjW(eYjkMw%OdWN=IwOZ7W@)1; z6aAo89|u}l>RcN%S7()*lA3^gzKJ9a{?g69b8Mp14&8K-%X@0$<01=e9han^<=Y!_0cqy+zToN^+AKEQJNt=h`9 zq4JZNo4Os*tw$KB)n`%ELd8W-HtGT=3EX>MBe1)q#V zmKiV{p=^3dHosx5!~|VU+P-{c_HB|^``4$Qi?29Ax4blrq3wea8*Pw%ND3fFSZ5qR z!q5~+pA+S^jlg=!W+krtVo$5uI&sBUc^}6c+nGQ`SmY8%6p@U~AbdWb@!6?Vwe+ud zID>BG15l0_Qul-}#=PF2sj%XkzgkIsVcoN6y^(7mFW~@}k>9Rp2vSt6)@dJc;V7yo z)^E!3LlD=iTyL)^|4!HS%9>((g7JtXbV&4)1Qta(0Hqq7;CJmOX*_9|sI>pvEJiE* zu;VlC_yY>vdIvFf6LZ5lkJ!~G(7=Jpo-7;#p3`53qdhUx`NNn{0umtlJbnu`=*1;P z)E+*Exb9eE@u6#F`J63Xg1M^*ex4M4P*BorUr(O>sndgtQ7P%GP1-0f`xovS`kq|;u`UZ7XR!fP}8b>;d;?L+U9eXYvI!IGaVX5giT zVS_HpVHD0k-#W~OdSAWxwDWwAk?%|??Kq`DUKXS%5IR}+WLWj(^A&PHhjEi`)d& z=p*4|=K)JbwwDTC6eMD{5pSbiwzGO;e>dx5Jn!^)%qHaQTpyPmOkc9m+dcvsF9~i3 zn5Yw=Yc+QY?vJ721{Sq`rzu2l&UJ)$a(~M>B#--f+bXq<7#jBS zHh!D-+g>j#Jn|g$WF#;ZNafv%WlsHgI;bmnEmOGW72(5kGIlmI`!tnrD;G3I8B;1x z-K2#Gj+7eAd$ae<=*F30K{bh>Pmd^|njD5z!PzV`Kz88ffx8Qk;$7h2mG&EcO8>`F zG}J&_3xI#)1?aJmwLq`M5kR-)i{Q{bLRQph$8+k8oLUjH#dBzeePGuToVnM2@&i_8 zJGmFQ{~Fi#d7DROU9=Bmt%b2|VK7lGwOl5`Mgo#MXvJ!4@-|vljL(Lw#z7`p%aB}(4n}VOtyLopg0mWm0j8DSR z=-c4aOYsk;o}a7r(&+s~1`&^R+nW#2(ctVH8$WnWuy6J+_PDHj9w!e`kYsIXYv~p1 zRXsSsI;ig`a~rbVS^n;nFv9J>U+1XTHVz&ZMtzOlOb+`?@^QO+Vm}l5CEh}xUfye< zgnm&Ly@233kI>Uiwb-=~-ETQt=1CIvkjxDXEO8zFc+eg^ea*@)n25exqn)af=W~5L zQPoAe_mg(^a?b<{>Rmn8-~uBrxxK#vi}-__$j)=;wb6;DZoVb*yFqH_d$aw4O{2kC z<8{&CgUQ0+2pOd^6kq~{>*9u;Zi5~T#2gSw4E8R5CZ(<3NEUVmKZ~7q?~mt<1ZpmnX-;niG!MXPaF{AaF?$qnoDm=pC>s* z5zTgcMn6Eo$gt=&K7^{EE~X&^G4PH~CP_5fzWKNFO2aX1p`W~Q`x$*wijrvv@XsR5 zzu1Z)JS6eMjcBCBg}l27FquM04+2Yza;;R>Vw!BrDXWGUH6FKpGl`?-*f)NF9l#b| z7e`k;L14%)oB0N%K#B#LPPJ+Vtcp>t-r}>GPGxut2fRXmt?m@HSg$3GMR-Kc9eh08R zQ~MmL^0vLxW+HDJ0W;=c;`VU+2)K=Fie_>}@9oz}(F!bRzO@Gt8@oij$w1T2npc9! z)UT>1`K(o1bc&MqL&2X{L1(((}?hZ-?YJjZZZik?Sd!A9PNCEDS49`82{eaLVtXD)}C|Dh;g;r8Zq+JyD=JV_{|9JCXd zbDNjR?juxf@>KV}=!H#ZL~>9KoKs+414R5$lCo*qPm~a2ndtG1)f#=jObmYV(UR!5 zgsg_6d4&Q?v+1F;<X@N>}0Fji{ z#IG+U&1VlH$zF;tX5JGCoos&X^**ol`jKkG2OIB$E`+E36y^?FX3OohU72l>x(pV3 zEz5V-l3?Y*=r>ky;8@78nozn^8d-A~{(0|{AMG~pOCHam=bSRMqacJpJw7he`Q~_j zk}c(1Y&Gy(n$^) zayS_^>YfnU?c*9QB0tVxeKe@gC#it8~GcB`r5voO8Og zqMV=c$ctzAPOEt#RmPR|rpbRreM8&)t*fz6FmOkYlaGG{o+P;q&f*~b1An_poTRt3 z)ZboQpgbHmapFJ@_1DM@|FmI&bIs6eaUV{*mYr&@+;}q?sn#xrP*}s6B+Gmp?_u`C$>p`IZ40Av|;{M#)4bZV@nY)U?D8sA@ ziLVlZ_hPt=yVvPw{02AV{OA9QrE;?KdOVzg0=?)u;tf|cb!VwUMbQe+-=rLQDCC1) zBRX6(`28PrRk?H=l`stvuOsKdDOtFD{m)7qsP~%p$$@PKbBXk63TVeu5{zA35LR!$!13| z1o4|>NVGc85p{!Vs_A@ z*Q>FuTsD~C8h>yg(pE>eb8w)m_BQ+Ho|G+O5f%A!_3P@7Yei8`-%qVqtCye8+kI1d zIh(EAaTkOd8NqI_c5N^@^CJ0?u1=9-@5RUCt@@2dlcc$N=Ppiq-(e@qAMP9VE$`05 z%tvam7?hKOFmNTlQxiFeDh&pT>WsOK`-ByOQ8hX=I7?l`HO1$;S5jX5;#QO4tT>H- zppJWrm~Z1>c9tLw{F_HA57Fd>wkL@T{|shk{{+S-J`X}v`EP|IWp+b)BI`2#pHVa@ zT30`XlRjJ($Hj2#pIAW$H}btq_~pJ%H_V?6m)}8;+RX|DH_Bm`e(-6Jgjkp-!8s-} zBruC2=#~BA7ZhuXzYaAJZu`~{$%hy-0tPY%Ujv?EP@HEsP}YZ;=qS)d=RPy5DV0}L zR7Kd0UAp&AmaW)dp6J5#wzMjz|6V)X3k$4iOd&nuIfY3WuQ6jFeY|~+Mcd1}yw*h5 z?n^&*y6wW!dQqyQBIQc0vU2UT7@y%^w+D+x;qp3B0RFr8$rJDKDA3Wgkm6+SsRTqh z`ChzG+#nRMB)>>n9*o~J)wY=k+kRGk5-|iUtBYu^3_Wi}z|A_%0if38}V6oc*kx`&puFjnMe4PtMrcA_W z`{cT6=3V(+T2bqVpl*9kZUI7wFj-x5xi!~+2GO6ADUF8<$q%d=Q>-bTOA4$;$KC}l z-?0aUb)rN1we~So-Y&#g7Iz+OcXsHDQl*L&GxU!Z4zFY8YlU8^D46Vtdi>n{kVrIEyvc z279G#kM`=6^ByGA$FicDnjy9t>zQpE);mcwgVK-hJ58;Q-RCOA?Dm9XjseRwXz!q! z*yIYF$dvZTvb5C@CIZaubGt$gO&AkN8ScT22WJQ#wX>*Dj^WMKxu>s!muCW_)kM*s zp$4^(sEf=;S`A!L0#2p^(b+T3*dn{oFWwscDFW~*+mZI@J>~|m_}m5>5zj%$N%&?k zpc-C3&Z3e;%&L{1F8CS4qQ)eX>WIfR$8}F6wpZglBXITENk=TDHRHege3^sOd>W^-L zCG9z9fx$+ke@yO|j-Mzz!C$sK7W{lYh$h_Cd-{ubR8XgcE&nok11H90l@*K!*wswS zzcw{u!%C5QU> zt9LphI!VZ4{+yyT3(sjUcOnm!B=~+r+rm8!m^i(82TfMq7_uD4Wt1c*b9EhB3FEJ67#xP_9(gYr(txJ8M*TE zmsdqykF=sZ^2I7ev$o_1W0;Q%_&dz#h7g)`E|UKx^GsrD4#*~VPWz_u!q1UAVF9F+ z=K*wTZ^sUUm^3w?&E4D3=v z=yug(%1`43YM2%%BW9@ll(r;?7k7k3z19j-8V+NlMZ2~Ayr1g(-Uv*CK25JfbP%Cl z^8|mJJqiWpea>l(TSDTOeDxUkHOzt2K&9E+1927BwL!|o&hRxak4XffJ5_FSaIB%f z)L_>v9eDBR4lIFa^m*4E#>08aSj_o$iZ#snZPU|#`3Hz&jaVUvL$KCK_lLTT_d7If zyXtws-38%||FA#Q8Ly`+6!W0^8FgvU+HXR_ZN>aMzEmbP>z;_O7SFj#ow9|ET5KeB*& zXkkSLZ=h5s5=~#W%5Ds4UC}#@A)@btePP(oqykwjW0c+$a!=_DQS|xs;#thDIjl8-pr=&l!y9#raSbF7_>5Z?Vgjkk!WXCZ-W& zFz;?KXj!_9knPWVi0cxKWl?RUB{{8%)9YH?s_~HYlY0A6J?b#Qt#%c&rmCVGt#Mrk zyjW#fqZviNO0riN{vgXzd8_Jtd*cJlU1Ytz9t{yI9?B`gZ3io`ss;g#*_+=ioeR3a zXwrFHFoEq-{Hzfh_-Pv7?kBGZhMpSX&0`M{tEK3`|4GUJS2g!(mZd z1*Z!xyZJ^ohhZFJ+lUgGNHR4hcG1rktEe8EjJ#`q01=`1+8+6Cnf7kXVCVWrgBm6|W(m-Iw zD&US>@;mFzQ&1LtXe=A;V9ic)hs;TB_MvQPgngw6E3lC+gSJHTlV zkHUnu7X&o`7T13~G?niJ0BSLq*ueA(LH2g2A?%TVOsLw-vijmkbMs%<7jFmaqRNp# zxjl?2UrHfB9^LdJguaOS&c$_(vu1pIb8QZ3xgYR=O6a6M%+=S|mqf^w4NO=7LQro( z6Obt6_*d@gP#)_$i{=wx3hM@C%Hso&!R{DkR{I*0a$jFxpWRYMMrz&XGw|vd&el4F zMn!c4(*&32kvS?V>N817KKn&+N;}ZB$)$0o+UAeLkCh#r7GFw0Dd}JH9bbG?n)OLi zqqfQOSQ7mBxXEE&(M|I8Yc8AVmp=WW_;mIM%hEQA^-c&S7=FP1@|`=H02c|Zgr`c^ z=}jW#B*t;PsF-^^4TtE^GDI-6}TbZ4P|xc=igEh+&6v{`al{;0~~;W|uG9zD>n5~O8}a36>h4$t(qvLD+vWkOHvwQYE2 zoU{<%T11KqvU6QHb|#!PHRP4IboyKh7pNx2M*aYjZhaKCn|jZVpw2~sZOk7 z*f8ieX!dtM5dER^RXOlx5dPq^ipoNjm!kMxA|``Ny+rXllh6cYHIt!Xe73XVMP#oW zcKXz>e?FuZeF)M%&R6eFf2KrH={6Y7PC7)f{~m_|cUc>t2T^L5XQIK=J1APxx@5!R z+S=Np*jaWX9zLWJCP@}@a}8sytp7NRbx`S6l~$?+kXHT4LK9`u|9Y?{)w+$r`I$8t zBS$=W{3`@3%3?+B%-}N1S_R;p4 zs7sLYn*BM1vo3kbm;)iw9j{iBu`myV8VF23VcXEEE(J>j1-JE_K=0hg2N0L(f{_DyT-+-&_`tA%n|GWX2%E0PL6d}oC<%o z+AuVGh)O`b4{?iwWwve-{vl@j?-4Jl1lFE%SdR9Y`v|=^zmRyaY~APRHPl69uf}gP z<$Jtm=b70Z^o5{f=spd%7FHAq*8_dObHcvwY{B}z9R5$}-=dn{-;Am7x6?~*T+OhMySj2lU*=hSALbo(R^>nP<1IK#0_RVdz69A;J zL+0zeh$Y%2fT0{+DT#k+(yGmSeJqpFbRcPUk`|Lw^ez}#yfY7Wx=)#t(}`c^X_Ucs z(69u$4uqFEc28r~-1R12n!t85^#5%~An|yXc|5>mBC=-x<_yQ(t(&fqZ-r)Fb!jf~ zX0xV6%kPuh=!Fo^m@DDD`laYQ*vaI%3IKl!_ZudX6OaNr6Y%e-fY$cblcf?v_em)U zP1x0IotJ1?)QclT8cx@ZqbY?x_rX?`zWLUhlda@Mvp1({7IVP9+rLRbu2&b?2V@I@-G?;D5hWvK>;Gh$DLe0sNSi$iZlDPa zG55c70PX{PBvOq-t5U8(mR_es=T~`3?zeV2fX4|=LHV|v>K|YZd>Dz%n`5& z8hEQzcs@GXox%yhqwJpIG2=46aAr?P5l%5tty7y*{`D>Uh4H4dZYa}o6bY{m4it$P zbfTdDSG>JEag&w!&P27faW-4+m67J~w{q?&+Ej}6tbom_l*CGpMFS&txkyc|Qy625 zJKcZtC+;?*OL6Iwn9yC@_skGi9k-``WE+8E3I{OqSnB-!dv*$SB~XUEh1fCCsvSJb z^YI>>^~!55-US@V3Vfae{#O+$#wG*|=5alB%uWFh3@c0r7Wei_{Qd+u0J0P?x<$Fh zP6NjWsBOO6qwD_*$ZEh%IFi6O^yIMGb}kIKqUpG}RBw6NAf@8r*#xqoy+3CF_(Q$m z!#)!Er==Hc2-PV>RB{wZZOSZ$WOERRRKIReS)|Z*G(9PtN)R4C_T8JW3-kw^z?gES zqUrTt#VcDYD_~e|sb*QLl!$`e{b$i8ua)f$9ui^u$EM-(kR^J_J7mk<-T(jJOk`nk z1{TCKOpt1QAHotmkuM9%wSaoG&}Fq^w^D^wb5M`%sf*TB?6=THEpwL9wFX;nSbFX` z2=R9()HOtv&k3Z>D2wXHqUv~9`FhxYJo4ACq`F?hZgOJcTy}1(6}~N3_auRZ6wb<& zEOVnmrbn~Xd!Ka&~u1;b@^MN|WbFdru4pzeKsUf_#QGURcE^e2FAI=l6eyFThJ3$rhVH3IGQu44<{Yc``hbdV-}Hi2iz0ealg$ zu)ioT6~9{ey|b;MuQ`zgp8|9Vp~HW$rv7JW=sml`HyyTfe3-wU5L+Ix6J<#Wpzo@y zS*Q-`0IzCy!EM_eeSg|zOKT$Mate@0g&hCS2XluoH|qFv{?e70mAQvdyRF<(UH%1| zT8;|xjb|`Tz6CcFdTx)$3hw(q4l)22`3QuLWLf%tKsIApIoK=uTtGIwwu&AM(QUXy zWYZ%m`(N`bz99lj;eTHJ!L0_PcF+! z%(~3RRNkcc0+rD@yZo<{ZT+Wl)I)WcRf--OO(6D zDR+HRKsS~D`NK6okme(jlN@p=WXe~Wx9nRRCbWZCe;ASIgna6z2fpE>i0~o} z_s#W!OMS*fVR^McRIkk(m8|bXUH_ivUk_@t`V@*;I~#;AVS9hQR<{g{_BlV~f5-Sf z_mEU+1SVcEXkgMvzV?^q12;&FoI|L6yj4Sx6I31wtgnp_N`i{at9_ocx5BTlLYG?g zZ|L8(oRi@j(o98T;YjN!umOJ5{|mr58y0>Nk{=i8K3<*F2o4#=vkm$xK=L5}d%nS^ z`Ny|IdP*R@cWC303=`FmgX~KL3xq+VDC1A;Xnh>)8V&0U@ep0+8{_!PBXdH{*2fLb zU#iRd&j#$uVT}Jrc#_gW-hNeC+&@}|e85DOvLjR;mmO+;&enegS1rvt&L}JPcHDVe z4Zha`xn{09e0?$hn2mH~-b)!qT;UPBCHfB(!+(TsdJovx1q3|^F(7QD`5H_^%QoBL zI+R`;7WWXap}DLywu~KWXM-DD|U$PX(4(;iZUfyHVLK=Wz_t;zGPsXDfPi{-ms0QO>);4&V?F08; z1_*<|Y)yAGNs5iWZ(vz|7AvGasLIZGA0QQd&eEdzuA}{&Bh~(Qq%d)Z{Q_;$L)tLW zbv{2EDO+H}AtFi5-I1nD(UW7Iy(aQ8s4uKkHQ+h7(&wY`^GI#E{HT+%!s;$s2Q!YV zpg7&SGL)y)R)8rRgCI z6GhgS31eu%wfo^Al> z2nZ4iSDXmq8%ZMM;%ydq>Ti&^n#+c}G%c`IM)$Dr_AD4;5pxM&nUerPpg?Nhv}IGh-Xz8L}0~Z;=LVImQfa38W-@d9O{G&FuF0 zP3)wk_+hq>acMsAy6Fgi4npxcq`OeJ=#){TXt{ijJRS6_1ZXwq*)PdLCN>&Fs{af@ zCPByY+P~DS|MnysuL$IE;H9DFsGX)p7tn&U#^Lu@zb$d!)})3gZz)UX_Fg)OJb#+5 z`UTg&&zD0QC!~wMi?(X_jXjIp?+4i-#|Tn)vEp%`E@6H&p}j9}Qy%Dck+qeJOW;74 zrcyZlel9wCHwT)mChEsb1Q9EO$b3^8@l#ZNPuX&=&!mA*QWXnYCLh0E8@n~y8>SI= z|DQuXeH~;G+kn93h0~fs1UVlr$UV3H?Tsz-Jhq%|a8uUl{r_90cKNqum8B7(%3a0s z>1T~g?~iosDVhy8YVjZS3zB@o+fwYvBSakVGdx}LRFY45t=fi3q#2N1b@RPgqDp8; zGSontDCN*MOgO>2rn6=Hfn6y5L!$Sn&JJ}}Eq=vbebMc!YUv};*Y<>hffC^hjh%4N zg#9I`r3FDXe0wx@QQB+GKih2ub5)4I54>^?VkX7pexw?D60 zWrJu<95fDT`-4`Skkj?aUAYp?AD4e%LgP43D!1P8on|vAX;su~SN^EvN4Dl^r(oYFrbfhp)$t%#V$W!+RD&(67mc3Ys!9!CpOE*1+9 zB_JuoWWn;OKISktV;i?`r+w3{Gy$7hU)%tAt9GDvM`fqkmEf-Tp7rNdR>O zWxXu#LFOV;FW5ByZ_LQUbM0168taG{^YxEFLT$bWegXdkaXY|af zW>DQ)q%)-*YVOw@=y};i1&)me7Bpf8HQq;wwVUk#re2y=^=rpn)_%?Z57}5KY%02H zd8ocxQ(uz2dVvl{Y0?2yVCCMb@ zfq%15n-=Pc(9{Y2AdihwgXlyAu*!yqH-BhO@Huqly>#$rGxK89H^2z^eGD{k`@f zThGw5+FWCxc8t1%xxDKNGoP*H0tD~BlPkKQtw0E1^Q6CtWw@v#)JTv8>Q~7kt*TOk zwg*|DYv0M==qurnW$Zsn;ib7vAxB5f+Y2q!J2N%18zb3Ogj$Y{Ed`J91tRxK*A|Fic?fnuV(l&Xlv-aF-xi|=yG?i zPZ3NW!l^b+9`iXnJNxT_*XV~0QXNB__CmD(Kb9m9vL~^i1XOfSKHa7^ReZAB>Y2W2 zZde$(+_kNl+jWJ%31fDOtu{3M=P&Do#Kgpv=eSP&+;ZjpUlBjevaIx39gP@WH=iSJ zw|-@N0oHRpoe5Pk57KqMRilc*=!AxP_6vsh$|n)G71hc)qsr7;Jh!4RnB_9GokWp~ z`>3cw-=~ZpQ&_5hQbNUbbRriRM6Q<>xtqWD#ZKhJyrT=m5asWN{k?J zyptCa2QfLpUEf_4o*1ju)p#Y2ypvJR=~6>-=|VA(j!;JN>{HoV5dznEgY}eM3FAwl z*L`HBL~KRr5~1Z6>3$_j<_l#gSMBYFSQWW)%9*94R8KIizEY2u=!UDA4bjZ5wZ=4E zmRiiA$1$KnzZxV*nM7bBVTyY^5Meux#z9ZIQKDa)2CApH_e5MMEgz!J)&_MsnHtZ1 zX2*Q!lDDOvth4eAQX~J2R$bJ$hQoNc{d}^~n9sWU#cYEImemK2j)56BeADpX559VN zh)h*H*UDjlSlUUuh!z{P5x{ubx#deEw&&y#iS4XMXiwRclLdnTcbrZ(isCL?`rv)j zfX-3#r^c4QZOU~{9dNijwfqq6d2E(0$UBrbU2|X)v!UMJ^P3nh#OUf9p_gB3+7{Sf zxNZClRH0-O#kx+(ij?DgB0I17Ka1X+8DAw`GU^;QuM2K=_QtnTRpL#oJ~hh ze!R5!X0$7(Tt|h56m(vHEaNQ8n}K zPZxYnDF;212Yw%BhX}dtrpd+7y6-iemVWSIbcZB9;;t|Ba^2}BPW6fMyS-e{GMASp z?cawBzD}>Uo_cp0uG$Qm6wu8y>@5S{ogr9om=CXuriGfMWMnMwe-ksew2b&S|A<}g&_UyTAGyX;1v`Q;^ZGdd} zOtvb&+!5W}I^M)+5U%hZp@#kWv&f=mUe~Xqxl==#gZ>ShbAyy(R*SYzkGzZ@Q$9m7_Q8@_JAhrY7vb0sx8W2ECBqzYZfF5qUH>u?OT`qP(*}kI`W2%@r|NKGCVEk^LI}QL!rO0pyPBQN9Sil zqHq<}7^r4|i8Inva40m!l7a-L|Dx^iXyZ>$Dkrt*&ARd5t25&WGOj15PrnhzaO&;L zGz)v&(NyWNpvvK6tQt!zcw!?)1_t-8cX^^2HBt3JrWIl*^aqE!Y>iuR@?jf%Hd{n0fzYq2m2;qPqKy;UnXdU`WCAK+ z_WO$xJF8b&9-kGy?#u0pf;O({Yw?6EAgV!W>N)1{WkO5ZesrcDo zZZF7!se&4$H}J>+uKVkpYE4VjvrDU`dN3CF{ebBf0Z639OW^<@YnJL85W6Yg;BdVo zR5RSD$#aLDxMf<_B-jHW*U$KLGFkf+ukIW}`FimHE&F@9geFHU+=cl6pAKmf3yGib z@{{@!xNHIo~VLxFrX)p3XBjZzBxY9GXxn8DuQ~b9s zkk9&L3evDI4fegu1nktZOfPXP3G$Z#f~3|0izS{p?A>a9`eiE@W_dy5>-KMrWXUwD zD9&=jlRfsGur71uZ}uUtvmLOty3Z4sFaS|{?3_O+1SuTM`kCXAxKu5nL)q}f1*Qvo z$I6Hk=SCwt!ND-TTxj(8vWz)N#~(qYDvDv=9ZiU${QQZJHNW+dl?7^d$R)bk1oVh?ZLJgj)T z)I0b%A9oE_9V#vL@jG%p-bS}oHLONVs}TOm#w9NIIx;*7de%(+eCRP&tl#M|chL>Ji`r$n)|p9`r+^9KdjymkMV5ML znC(`~m^o`r-7kKDV#!y$W_-cuv|-uo)~9$I6K@_53YRfk$&XQqo@QA=uz2Llxv7g5Ae zvY+_6@j?~@gxec2^~da}3NV%3D1G>otfpiMIwwtKn3O9>TD>))uUQ^liZIEE#4<2F zRt+*BFN@UVlk|_g9OarV75aa4opn@{;lJ%gKq&zg=@1kNhfaYZ1w^Dlnqfe?JBE-( z5RgXchM|V;975^tMsnyHn)`a!S?m1nI_Lg3e+;wUVP>A^eZG6|&jxtyf;5 z-G#ACXD}a*m;8LCkwqd=bYgkO;Uhx?eLXciwPa#t?%$^>c1iNJKGTLf=E^HWe5RGC z%b=Fj9{y{w#^IL;NdK^KoPlky8`*WVhrXaMy_`tqg(IN;(mXtEras8Dh|RnDC0uKV zI_b=8d5kETi7XC3`c#L{LA}{j1Ms#l4v|FvdQ$X#eEfKvt|!^3!Hy(7<4MP7M=mr9 z!K*~q@xI!Mo)1r|uWz+n!`_p~uzaeqTshq_)-n#3wwq}RI;TzJH-XziBH3zUucL5o zG#YJ|8Wd^+M%V+_*2ll82`NnmoIG~m2*D5wpAiKK&!w!m;BFE`@%^!=ON~T|dOy%7CiqJ6hOd$6YmOeI- zj&2r;$hgclcu)7{lv3&Z_8QN(yK6%pz3eq@AHjridQB4(Q1U*|t=Sj1Pr}TEHZ9VP zOukGJ^?a}<^F(&Z$D7M|Uu3=xg=uBZnPuZw=d#Ufsz?!ack5|9A1HSyZM5vzc62XFb1{$F_sS9n$b9xdHM?i&N4YDBB8?Cg(*6JR;l; z=d%)M6Ppe*Os0X-W8e@Sb?wB^TUjPQ(j=1P% z75IB-T!}i(!WCiHj!QBz1#PhLV>jcw6bc}lNV+iy3B^^*TTAnOz_15JJeqIs=6lQe z#nAWkKQP3ZmCQ4utaf$Q&i-^;~J3Egku-NyN6x9K!>VwgChvcN+{6|Wp6)bXQy6>Y~W+f zHklhNP%oh`T|Cq<2^(i9<(nou+DS|PJS2r|s2-_vpmILo!lAFh2`s!*sCsO8x-7aS zW>5TZuN+ap&z*Rwk}x3+teWyV^Fw0Wyyw+cw1Vi@2^9V&1qa~y`#y;M{gAIr!O+5A zCyrl+9>;O#88_?s=_45i-d+hOYU73a!g8N74S$N+iT+jD9P&sV>tTN6eZ5z!LoDcd z5h~hEL>|WX@9uM?$-}96xnBeT#smOtZ(w{w0l2^#TJ{0Js%-M-5{HxSCqNbef63?e zNrhP-;1_snh0$iX4%e7PRZ0RDv~nBaovD)iG4Hbp&8@L~CA^jIM(v%r&z-d^Ta%xp zZ`@!3DcT@3ww<>q`x{cWU;Ja4Y}Z8|_PbkL?f^Nb3Z0(c<=_b9eX9WaaEQA%YM}N9 z&!#LO6W1(i{+K#+0+6-O;GYhb=j>WK032)HNtu2nDZ?w;Q^b6$8=d3772Y=yq@6Xl zkqGe_p$Glh2Mm$o6VV-9QdT~<>zYEZU(d~n!?fUQLC0ht=(V`9n9x@_hy7Rg$0tJ# zw)_?Q<;IORp43Wi<&1o|FUZZ8+eY2!i1vtojrxv9a zyE~*2y;;UAhBO*%dS47f_n_wymQxW_Q<;Dy4y>_JhkuyT%@3rFy^ak|?{3BQ8;xch z2`G5U0Z=c6=%pajqoQ|7S&N)!6a&UUsu$xIpGBB(ZR(y4!u#5l?;LLK@PjsjQ9Zp> zyYh{N9!Rf_*sk@Kzc-#OAG_YuWrsnwW>-fr4LHw~Qc3HI$~HZo3q$+fR^P*idRugo z-g(>vo`)Hyw_KkK&pJ)-mYdTCT%YfEXaG{u+>M! zUK>IxL0#c5ro5xam%gD#^36D!3cFQ$2x}zgp=N)1V3Qy=>q&t6=FQ|3=5tz6^11q# zEs#C*kU!g;5+W(6Z+RqAV=-n5;K?*#q%9?B^>*sFKV?^M--8X_$y|z1W+mu@(YsOi z@S6RZqI^QeUOIxq86zP)-+#l&{B$3Gps6{#oy#DnwLfZ1XVks#Vpp?O zqF(KIWHJHzrPsGw17DyVSBl|A*%Iv(N6Oma5i=dRh7biVa?JiIpQQ1nLbQ zU$Vc#W-(4ACaA{TgbODUgYf!whGEE=dv*skfu75YJ6!P$FrmbbmofvV_Z0ZAh2V?1 zpt%-~g2H{-ihI+zo)Ed3<-5U{94(Lg~I1bH6P8)18=3ko5V=A?8h|Taj zqZg8uD=j_73k+T?G`L7K5~gxm?!Lyt4td%A)ZbfoDpRJb0_dF+YH&pb^Y1kp-sEf} zf`VQO_0yf0eG(7iW*jcnx2m!mdzkw%vHLHD6SP{EewOsRLf>Zg$C*|0xf;e<*R8LX z)jNhu?NXuPRcrn2GzFT~pkD%oQS7V-y%SbO?W6IEenWqua^>72(~uePCt87rx$-1a z;o1wZQ^~%`y>h2b+D;iE`@U-e9sc5|9Sznjt3*Qc{C(|WcL(SFk;k>S0m}$oVhT^9 zJsklF7mY|!z^0-(q-efS)nedGCG5kxyAlm-fh02LHc>{>C)w}oKblXJGbMl^L4hCM zk`7Qu9W#a-ZiPnwR;v@VoUp>Ve*n2yXz(Xwqs+3*#oHP!d?i$47ZS6xSfT+lK;tU! zJ&iOkg0RviD30`&?vOusq|z6z>PW&>d-^OMN4@~N+*Jx;?Z3?V_F+joBKYDJ>-gi_ z1~+jt7ctqo7ns**8Dwz8ig9_nQG~K_JKfPFOwi5wv86^?AYYLNWU?UK13zIKfsmlj z)M<;rY4CF$Ky6|Fr3Hs%srB3;9Md&iqTCxf&TVv~JmG1HwpcI66}~8ho0yCoL;Z8h znZ7tz<`Jd9p7jy5b9>#1q?Ro@jiqdcztKt)Ey1qx0_HbB^JbOc(LPY33CtWlRW5qt z`+lbnv6xf(=eBGlrXQ_EEmsn^^zS$&2IkPuQ*9(L zF6Qi7N4y&W*Dtk@`vU;`KH>d7N_^26h-q0;`{Z@+4;3i46b~M3raM`c>73sJ+>r74 zr&;Kvn-L8%S`M9@g7Y`oW;D{fKnfi{;PI33G@}$<=D3D~30Y=k%|dkwF)wr~t)?|( z|IcqQ{x;)OGfdzM3{B&bJ~T1S?DwoIY}?^>*4D z)%1?C2w+YW96F`*O?vKv8XxJ{=HoLEbUU2AblOCjS!Q4P#OwSX0@(D0P57%wq9wIG zeyNDQzJ`cM>UZ$5vBo6hznkffC_2?ct-6KMpk;K0SgX4a9`_&oMsngMfCZwPW0_X3~ZV6GJN~g(JOjSPV zB)a-}bnJ+iU^ed6zZoEwvP^^lwA~c;b(sB}N>heh{fu0!&XrG?6tgVI=+&>Xhu-Sh zH~Ad4!^n9|<9d#gM!r+>eFW&a{*1l^+$sYoVBAJB5B9*t|8M#8aQ7$~Cn1v^`UeP~7~l%|Zp^Z+tGO^e@-PVy6axC+}&^(zpL0DGED*Ju}4#=STewvO|3 z$q(hC^U%<$M{9?XX9ZeWoHe#H{-IkqozgQ1hXtWHc3o^HMHrHFEBukhN8_7<%+Szp z(&p}1wo4~|L(RgWDrmala_m|DLZYHx0T9C@^vyWfZo#k1hVBDf(+noU^$&=IJ&DL_ z(k^&nV;Da_VcAfN#aw4U(=5NHK(`SnQEScawUo|zg(XY4Ke>n%Yt}FGofQ%|Asga( z`^L@3de((_W#w}!`n5*4WRQFt>X_|4&#u)LoAciMqvl5hDz{I|_RXXu>#(ghm88=2 zma@?qPwO0+9?(NG?E@bfnjhE}sN_Cu;?VbtSk38On?J$?S~IbNBYt98eG$pBz9XM* zl!DVHJcSS3mZeB%&rTpbt`)V^leNZ=v~-!@s33}`$R+5ZJ3=+BbhdheCC41$xo`O& zpp6lBeU>C_>NqgMbQK$#qFFZakU%iZnT%DFH5?!T8jW5Y73k+<>|^OXHF_ddjP#ch zp3451J6h+y&E4Qe7Yg*z31Q1?lzo^m5GZxeENw8|+|PzLXQ{@$D@o9h?hC<9fSM^{ z+@A=)Zn~a>1l#`MU+;5)QSW%0f#h0j za8V0?x9@L~CL)FkI(g3C9s?C%!BIt6FR^PQinW^`E%qhQ03&;8al^0YKJd@g+>5>( z!eKAiiVx)MI)QlB@`BrvWbVfoXCl(TMC$I+?Bc43gVU-TMDqxsI6Pp}<&~|mKFDw# zpuEz-qZhlsdG4d?Qs;3S+>$U}s;>siA4v|WvYR8M^F5`hZA5w?wp&sZ8L9fEP`mOMknRjo{z5f6=Q84dsU!HWO}g~0SSzbKbN;pE zG@@NjvZB3so9E~}*)GfZPfXpi%c2YKPe7e4Y8lGwoluE?tAbAm6t{I;ADGGZMD9(X zAK)9U8F6~gs!t51uL5~hhvy*QPP25cz)Yz}DB{0l9G=yW?B?)c3NPW#XPzmW_CuZbhpNvU!Ts1$x~TCgDM?YYeln9W5V-eNi%IBgC}4MsU;87wq}s^7YNh>!RF zxH7Rd721qYwj z)wRV`hqNnA6`b!YTY*OUlCF1niC&^N-nS~nA5`>fSz_N5T<3b(vKWpTAE7u}m5rUl zuJjP78y3N_#+Xc9mK*PzmB&|)tp!RUN|s9}mZklPOi>Mq$%b+q^F*TRHuL!WXL{Z5 zWubpVS9IDolbRjZV@d^(c4{PM+UUKx*tmlgm{(_0L*}_*>nq+X zO=*b$3^l7qv}Z`%C2f5}5TpkGzLQNfQlsz|tLPvC1LMwIxiyWnQMbmLFyz%cUK>*h z2}i)7Pn(Vz)&(%lP#-Rk1b5_td$!d7m2Li~L#)gM-QW4b{d1jKWn+mAx!JU4*Ero4 z=!+MeFeGZUT>4pLgvPXpmp^pIAnz`kuHJ(Lw=m^F#3Ys)+mg!%p-72zEE2ohw;R^Y z!Nl?BBY-V6@=KIbzO2zp1}SgoNu&RpGb`i2b=#rqlpnJ&WzTJ7%U4Yhw`~^F*+x%o zh}w7Rd6cU^QRua}QbD7+Jc)V`!-msR4}TbWP#;Hj$5S%PV>OlonfKka!xY4rTxeal|!WW)|=4{8sL14J_O7M{iy{P$Y2E8W{Ww!Jrr;Cl`G}xVH;agaI?`qr1t2)OK z-H;r;Ru5sotP-m3va?X~%JXz5^7odOGiv;K>Ks}oiA{3ht@2qs$BnmLreCkyAJvKc z=+isCZo?}OI4gH*4uW!4>J!0Ds0t(!9bPZDnb|$M$p#&dO21D9r*`!Fn~eWdV;S`5 zT~q14<$n%=DQuE$c#E!IlBpwdrezOkI+}MXHr+KtSpIhSjAR9YJ+)MEpat^4xv2&? zH$_ZAslufB+~o3F!tCw7M;wtlA){uZb>pGeDE^1Ux1lM&%dl0{E}($^OIm!tBE6hL&l*Ox9St{h-f@bm1fRuxW{8*3gVp$Zead#NRE70 zQEZ|Pt5UNWy3#B&keX`NDrcyJO;J3YNa28L4g71?u@l7;0Ffa_Mv*_#s(00bck;xO z)Xt>h;qhFy^V2!aG8BZ<+kej3k8fi%Lwpv1-o#PwM?|zagUzu(r(F{WOth_1V|TEh z<4hteUm$u14E4Lki|DLV;^H^HBF(Y1_PyB}35&CtPWv3T z338(bph4SG0?7Mt;~YBe&;7p4l$<%%VgAMCtuqR~I^E9(p93ez=-0o8=MVuqtwf8y zN-!VQ&U8_mSt;~tcvQq#)-#ll?QT*|6Hv#Y4*WLYEyj!o!tNt;y0Ebko;V|sKID%& z0@!>8)cb7a%rMl5=TvZSq@j7`_hR7bYj^)LJW$c6^3uj z%}Y=h%VreF=|jtB~UES${~g1j&lIQZxc!VH_af5)kLVF$Zt96`cMwblTFZ1Qo(HXclC$VghfiZsb9w)b=WT_H;Bq^la+bx*gvHSJ%1dP z+S%?cjPM>4B4Ji036N2e)>5a=dPPGnkU{rr(gH_5lm_GUGj9_wTT7i?b9j5RP_|qw zKMrCcgmJudC`jial;})4aGiaYuORASJy3EMPg$T<&j43v4ex!yO0QY^FiF%22QQk2lh|ws@;(XtFcLvL-{?pR7OD{+VZa`N+X(N1-AU--w_9Cu7#!2< z-lWjVwu2qH@gh~c6Eb#xMsAe@fj>@A_#h6tC+#d;x#3&Yub+aW{(RItYg3A^Ee-E_dY0Wz5F_qjG@CO6t5wYJyj=r zvki(<)dhE^|7tlG->N9l^)cRIB@$aAlKH)K;Of?(4YOJXXC&>rAjEHGjT+)|`O}Ky*Vg39h#Y%l^W$xLQ}N6^_oJ-YzHgF0E`2Z`pUXyC&kSd# zs?7s{?FTJf_zA%9KSKhOW~a)~&#OSEnwvF_qwMap!~&pol|dl4Gh2k>?q!gy4K*=Yg{G(SbKE%MGM2CNh;h9vL zs^NSUG?pC&04(DG+g^TPGKRQ^Ys<=T+NRMNk$VN&&_)0dBSX<}OA6OhAosc@r%@sAO0qJW#B;SZz zs{|^T3iJwNY=wgfN;GR}f%reXEH{J^dkzT8zQNsW5gkNiTcfoB!PvP;{=lI5a8TDS z(=9!X1q&2zS*DULlVv?K>RHU4;}8OzuIhGh2cH783-vWt;qFM<)HpJ!{?S(m+r8P@ zwV|(Th2nQ{fb2^678OVO{C75>9noKki80acBq@N?K_entS2*0m+@v~@+BL4x0 zKWNDyUIKMi5@l&%l^kX0?ffuiEX*zMGp*+c*De#X>^SXIh8AoY$DU4lGjW0}@3#M4 z{HhtO%WG4bF81nm@glOKiszICsYi9Iw9=yfXLVNB_4cZ|f&IG=0NP+?6B)f00;ZoM za^9}8g48`m#+vkEqTHq!w2=XsOVR~-ti;N&50%3kmBiz@{k7&+o!=4(O1$Gd7pmeAUh|4 zFUXLEX?x6`Q4S5ib5a^=%fiBC0MdQS{p^*}Ab8g}_=jsN5&H74ncwxr@(Cy4&8A_P z)|35@C}Ntv&#U%P>%lb=(6)CWcEu0Fv)Of;f}l_Fk-ifi@}VzUp0+h*w_lWYagQh4 zKa8ze>NwSR8-@;QdySdnc3amyT>20kn`@ZpHN=aXuwzhT2{5yF2 zyycpU%;#o>>hI+dmDg=oVu5nADErbAaXmee?o(8_3?GV~`872Lf1^Bt;JtgOm?65o zjW%_-PQ?mK=b*@mP=AWkCH;`o7jVH1!wtYy7L$~Xt_MANCA#G%eQ&H6DqaZJ9JFH} zyuF&*i(bjZ!LJKHd%KYhZPsDdZ{a?td551o;P;^jI~s~H-Rcb%sW#pu zRv~dp2yzKm-e%UCEYy2;0^9=Ht1~=wp~416A|buTW85Tf)v;uiAXEM(2-c#B)ev{s zOVUB|C{Gv5j->pM7n9H(Q<$4{yl-B2g;&=&>$|!dYRQ^=Z z+wd)G0vpEulz`GG~cj9pGU$fA;*-S@qJEVV5+N3i@hrjU7uqER0)bs3R;=^xr$3Wj7lg;0sq|=?2 z<`ix&OFskELk!X&DfCdlkFz6$*DSlHRPQqyenC==_ktNn&KO)#qs;*l28XCh4+TSP z_@JBZ(q!82(_zb{ng~FEr^ZWoCpP$vQ9dOt;55c+DU+?D`I=wI#j;E^DFrIC4c#UI zy=C%9Q%SnH8B;o46+xPxcqR{oO_u2FppyA)vZOR=1??X|yf1S}`)cf#EOoG2iNwSp zw_#8b7A@}GodOl4f(30L{wl%a-XDngx0;6SfMgCx+M?}sOyYI&1 zWF-bIJ*AQ_KAU4<%$BG6lD{d%R>N7_HAM+3^NHVM?DK3OnEZ=C-ebK<}iqO+kDMn>8_SQf;bS&vcp(Akhri4%@1ZmpItjK&8(1EgEQN(@hci z2@;F}tb|r&Hv&uUG=R%-WD{s452Ky|KB9da?F>Uvwtm$>?$UHVr(ik^jNyXCKX zek5mp(^yIuMiF@baW%rx409)F?)BlulJ{iaS4+qKB->umu!G;6pUp(n$DSIU^y7h5 z(u;|r&trSSUk+dLCB#TAs;YB|)F-fM!?F7SnC|OuPC5vX+Brshg;^A>rB_n`zl{!K z1QE}va|+lhZ_$ZIvy{#OAOPeXQ}}+P*V_1&xuRy91Rlw4*RBRRmz8fQ3~g9T>OW?Tr>z(#p;&{i0X@#`D^m2i(G>^oh`{ z$d^~Vy~4-?>*^iYHWs^Y7DqLG%#?Zh{9ulZt_e-MGgX*;njJWfqv0+1RnPSi4#$F-Q{j$B5BcYZ61|gVuxq$un)z;95QrAu{%){Gh#g_<~Z3 z{XWW^nC3;qyGpaQa1PN4vB5fTR03gkA6U(4{Yo*)JA40>bA!5zj?#YU;~fG?EdFE= zmg?JvjG>3VoAQa_Vaii*32P;|6|tTsW;0Uj&nxJyB4bbKQ4(7pUGrS)K9lnpLvklx z?Z*gDp;;ryo;`a$T%xPVwm+%1w_mm)Y(STBmE*I}0AE^^ZuJ>-%@nu8Nx0d!_$x;b zpeiiy+|@6(z8e8r(AH9G>*C|-uj{6epHURUJc$hXM>B0zy#MbKkJ&!T>8TBT6@%YN zRUGr(Q4;xp4EMI&yK3vWeM7by)q`It5L*3Iw{ht&iyo9uOXf^my z8Ld4-*i3N8v8j^uM5ar8VK8)?eoE1NW=qmxDNipb%g)G zQ_K)H65Qw&asP@=W@psmV+~7zAV|iGNrbWsorb_fDgPqJ1%E@e&G*kGy6vl>0k4D} zJ%u+tU2%OMbhSFz6j8DXiLCOR9X38&!}YHk zPN{+);3dE#QvKH-#c@C|8VS?KT92a;da^yP10!a`_S44dK0BgljbuykWNtJDR0|N5*d$xJhxMzDpLr`oyR8^6G5&`{%tzhGEj&Sy0=HXZ*P#xr8*< zD?ZVrdSEB4CzhXkGL4y_-$FkU;>x#I_&lFR`V-SU4J=1qWjc0+3A%5E8d#f&rHi@} zZ$|Bp!IG$C;rjv7F&*)YaWU%>cUHPx{UZb|J80^rO?c30wY*aE09$KC{ z7owi01%v^~;Oj=_-0n}Y-3nEjjL7U!q(vD^&h{?EEMFJF3)6b$X`2Y)d4LtD)!0nxUs0hrVP7PqxV*u1-oZ%sM z%$o?R?OUpRrR35BIr`VIbGPBb=g65iTP?y6RQB~tn&@EGn?S~atK}#kQs1)!>zs$0M)t-Am2bDy8F%6x+8Qx zWXm#Q4-<*q5CcRsdAu@|;>ULG8Dz{-#KnxHl4j%(fE&z6vy|Nje;f%r<7*ltAnKz9 zH+YaJ4IpkjIo@l~)d(XeOLdwlxprVuz`$cY2X}sRM4QkoNpFZYfdE&21vOqcrekRG z^YT*^xhTm2;6l2NOm${fa}#`1UrRsc)HKovbmc9Hhi?oxUv7_RH8`{AGY!fDBJqUH z1=3Bdz+=aFkD_<;Ce6~!^ONd_FIroymR>v{R%C(WqQyi-E@@X?{@TB4cND7V+N6uy zOzh+xP7M~yBXWqhY$b~RpXm;n=csscd^`%PIKFEd!lX@*gK2T+pr8vafS6_EbN+|P z(|2;V+R~iEeqZh*(I23j^Uc}VK(au}H3EK_p`0mczSI)nNocpNTv7aZZ~mQG!Ixm@ zhBu&JCBxlVcx~s2*EQ<5MtVJB|H-&hFktd%O7ZO60xv-YeowLJGR=9`tUAEceX>T_ z!+i~O3VjxI>ehz*=c-MV)?jF{3zfrPPYc+mhiq$aKVxMXr&#&q@tyX&=t|poN$sIG za)x=r3G-1&LzsmyCa1CH1DTS>Z#n_BYn$CXoUk6Y3!$&e%8h+aJT~-DB*^E3^M&!i zsy4G~4vwNho!^$bxgXc;)5z;+{^o-(s62(?IuEMA*dqHgLetm_%hkLr?X*Y+`+CrfLDlJAYsD&KyxL6h5PlKxt#%WWp2^>7M z9+|fv|6P1C8}8@N*hl)@ljydgR_e@>&;BBbtW>W#v#T}NDKEn-9xmv{MC=zyuEFmq z{>bo8@i*oqCV`E9{fs`Bb`;5*NE*M2^9HV(Q)28POk-QU~kR;|) z*G-0B6JT+fw zrADf~nVc=BXg=%ac(y%!YSSDNZWfhc8Zj$qKaGEW_?yJU=NT-?{AWCtJSDQ^4Q>GK z;5}(x(D?mjdI)|YN0Q+mBCKG={>!5tA?kFBW&d?Rldm+r=C+h~V z({Y%_`pLh<8b|BRGakJ~yPF5r^9ZiH%TamYw#V)lX-lp3Y;hM7z1Zic3Gu<6sb~(U zFzMUEc0M^%%lp(0_)`CcEE&I*q#Z9c!iefZHZ&pL@gxRQU)TS+dHy*ykd7_Ky?qy3 z*-^@srcbDqjeCCE0b1VgG%yv=scY5zm@)GZ;k?Zd2hyfKXu0OUJL`Q5^!wIUCv|wg z0=K{W0h=0`Ly48$>E^NpP>kg-qd3HR&`Z7nR#T^W@S8?~_<}v0CYvpw9 zCMGGYOjR|J6AIg}lkr z<;Ee3JqM)o$ipSL0SU_!Xr5Bp;zi<)?7kf(>bRj&+lHLa@%8at%wxM7w9AcdL@K(% zM7GbAjW}oHAvX|T;tRenLHFip(m>q@9%ADaa9wl1QTTW+@^=#ywCbi#ceh68JGE#t zi?4k4WbT_k`CL+3Wuu#L9|{*w2+;Mr`tH5t4x}yqDzWP~_)nJ1Z5`dtw%+IV-a?v{ zP64Q>>UXhyxj*GUe%0m+Gey#9rf=t}&n$huJ&z&1-ah)AuSf%?ol%r|N6Mj-kv_m6 z9Wxgw$(JsC=T0v&pV>lXBfC%Mg!<9Q8#x1@h_)T9#^>~WgRgIndg#s;W7EB2)Wi;e z%NUc)i?#(C>pWAM@2*e{OH7JM8R$P>#D>R|Vb9<#e-Z^a91DDQ7aE!1>ZPIg@Vo2f z0Q7K%&uz|iB?Rzm74L6?=(;@bn4yWD-QTYr?$tdVop$ea2f$@5R~+CPX4m7(W%A|e z?4FGJs0%4#PjBCg71)kbCk6astK7ID9k0+Tn2_ds7JTpS_CWKr4sb9&zwx?_+3)jk z4D)Ou-}rUH0bcmI2^fUOt@tA2QeDAhRq<~Vvh`+0b^3kR;}ffxth(@CRGBrXuzLzR zrL^8HO(AT(E81oo-R!`R4|`rJ857B4hIOV$ZPD-FKs(vMXeR@+x#P-j>2Cp~>$CFz z;Nzr80UL{4_E+;jUl&@Z;A7_&#dA0>z=gP~!U}oGxhhJ!d)B_G(Vf**r!V+C?(0|b zwj~FMHp9cLuWzB^>GeHF-VxDS9N0ev!;kE(Zc501ik-|q!8lN z>~Tck>1taxNG3T`u@0=-F8#VydN6|bbN&v7n{UQTv|mVvlZ;#!Ym^yKshJH*d@v^m z`M3?2=?ar@T;Q|Dzm2feC^FvdEIh=;@k82n^?!S%QlV@R$D#Z1#am68C{av@qh6ap z9i&ET463A$Za0Kk_ob_?cG12j4PzLIWWD3MN~?+!HP}N2raOyyU^IC8tw6nn1hDu= z04h(W+}Or+lxBNR0)5 z`>SDgpz#I(_xgNF;ifqnaRvPpcpeY`9E7$J)9T1}Nzw~pO-4GB$!`pb$A_(-X1UZK zn+#`2ys}=XC;J@oG5?WO&IA!A%@nJbah)w%eRpA_`l zr>~5><->F1M26hA_o!xQxOSMC@g78<{MtBf#UcF&gyd8|tnn$aHCLD2ZHJ-&X zDUO(kdfz-?Rc9>=QnRYVe42TObJiR-IY0#+>|n$R|2_sY;XWv(5zcf9*+;-daqw}) zjq2zo*;B)1B9hng$}}SI&lQgAV5;&8RsEL!CeuIFK6vf%>DPp+yaMNW{4&i(PeAUn z`ivnpoyL?l!1f}?ky%|dwFTZL$o$j9**}~?!bDEX_4@U?5r0r1FzY}aW(E3hHhG-b zZw=GmrWrk!4rP>2*y?iZkakRi)EUx8Qj5kobKq%{F#k*oKMPE=IPL%IW5vZaBIvZi zo4}?U7RwZgI@#weUh~7eMtEIv7pu5rk;T!EEB`i3nv=#SgFB{A_KZp@D}Qac|Ln44 zGF@R(DH~Py519;D#&tNIg44gGrkrutGM4EBP+I^;o4+ZbG~eQlpUiL53HW=?+{@uZ zPk2Z|K9}lcN-0xzlwwF%MNkQBRaEr1w1}4S{8{IcQn3cOjav0axr%+>SCggs0Z*tV ztyaQqWTFF2405_3NU4oh4u4Iv0Jv;ww>2M@V$)Cr4i;@zWbArhfq3_pkHBol3QkWN zxDnxkGUdDTN0^}%y>2JSW-AZIC{nD#D=@*PJ2(SlWFdo*cDfzUy6{&#|gKmk+k5OwzEP9HLw#&l;9mRymH{3Tlv6{Rc6%X z{1olizHt#t+voe5_0C7nz_ynJA=)-@Hnee}Wk^>zsqw)g*xr2_fAp*OpF0ys#liXR zOzNsEZXnuBSM}wWxiz2J~|Z;5uPUk!k_^;SSs6ip}{WNm{R0U7wHGw$fJ%`+jwiadUkc_(u`N(>}UZk*;ytn#iEzW5Q%BRV$;Y7O$5j`M114rEg%6V%~5>!xYGTPWB z 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%0D6-b{;>y+$- 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�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 WKtk?dOS}O5D9Wn7D0pV<^?v}UA0}J? literal 0 HcmV?d00001 diff --git a/tests/functional/Docs/media/setupAppRegistrations1.png b/tests/functional/Docs/media/setupAppRegistrations1.png new file mode 100644 index 0000000000000000000000000000000000000000..9ae7045552a6fe48e13c25789643e6334ee3c7de GIT binary patch literal 216602 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%0Dkj>;t&V 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

  • N1sH#}r&P9}_06xuxQ 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±xPz+Ig#wowt5G5#0csU!_4GZgK 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 AI{*Lx literal 0 HcmV?d00001 diff --git a/tests/functional/Docs/media/setupAppRegistrations2.png b/tests/functional/Docs/media/setupAppRegistrations2.png new file mode 100644 index 0000000000000000000000000000000000000000..b6d15cad172daf1bd6db15f7e2f11f49c6407435 GIT binary patch literal 570822 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%0A)hs)Hl{x2KQFTQ9Zz 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�kUs2qN_a*Wk+XV{D@Gv zxW5KtSf<|4e-dPxWXy(jmi+@CfASBeA#p+$(ymZ@oh7(>W-g{ChY9U@lik;jE7=Km z!gP&Nuwl=!!pebs7PiAL##6uw(segG1=KpMpz+kl&)bmTa}kz`m9|h4KCzAR7uqHJ zPP!OKK8CxahWrURJx4qe##lYa7@8lAbuY${o%mLaVO`>c1nH8L@Qvoi%|~lLwPiSV zp*nhF7hzSfkend>CY_Mde9A~J9Nb7Y`{;uokBboVsHvQV&>u?`VIyIL7mcsG>j(sg zQt*BJE^0e#&~Rldwl0Vl+H-&I$B@6~MgAiBF$y8(VIPfkUP1l=;VAizFK~+F%!hEo znS5H(dEuo4&BOQ8c`FL`#WepK44t_RM=sQ%_IfF5s;{85z7}_`9l-JB5%8qB7nyO4 z$hN?mcq2KXSj*j=bXG+^3E3D2N0J+1?pU7LKX9S>vw;oSEY?BB3Z;f*j>@^Y6Gjj& z+OS{Yz z{2vF3o7w+)HJ&BCpf;rzocy8Z$liLBTN-+k%JN%@<;f^i-NF1h$Tp87%P${ z5>{MpKxaoWE}x!*Y02Rf*APCuf)(VG$O$h9r|mh$a;2Du`ftm(|B;{K z@1v#j3aWFLVNpsH*=h1;Uy6As7PDjBRgx|`kq=9@fyO^T&~di0G#0L8XC25^b5ih? z@udH0-lbxWc{tBOINv{3>ct9OEFs)Ps!$4f4kwBSdA@8Fwou8*29Z7UAsZp|(}(yY zKhA}8iIY(*+XBW2*hK9~sf-=*_uRK962^$^Jo#CUY-q#T!eK1X|fDY91$MUsmlIVR>XH#dc`tq&w)cVlIK8@jshprc{|R!?_?k^tU} zSDy@aB4alN;}#yqvBCo66&0eWpa2C$Maa!MjpHjvVRnEB4whyxFfxZV1^B)bmtw)O zb2xrtJ9Z{TVWfowwh{>}$S7J^I1pfrM*PHm*mwFU(hknT++l3D*L?Wx?9xA)<;`;Wz*y%VA z>!$C)q2gj>7Z;&8zYv9K`*3PwB9bEPAtDgxx5{!d(o*8V#Lx|%p|h~;z*(dfm7tL3 zovENGALmlnVoS0UqU;PHCa1$(`u3S)4iIG$3)lt6BVo-x>^Z$3+vdzeqTLLnjNgUS zyh7xZ7NfYJ2!-bkBYpdLq{Ndv(zu#XKqK-9g=WTPEIOKj)7$4`bCMmVO&X0w`*UzA zyA&lw#BXsna`F!2z}&HzOylluY)0}dCMQk|!_NZX=(!9_cAv$$vLY1p_OGzG5LqX8 zWA8M7BszRTPKFf*IgduzoITin_$ceIIs0c} zei8+<4+Gk(*b5{6gw$_EBW) zoPY_#oMB1Myx2knQ$uo=)Cm~3WG@coQt)2TtGhJ!Ip>bz@WP>(;$uRF#2ls+Jh7fw z%S139>`Ko33`|~r3@3|8=L_>un3sc`f->Y^xrdtOXXvF3EH+pM`~lIhi=KZ8lcKSi?s_eWGz>Ln)V-!raOZrhe0q zu;eICoXY-i;oo`GmrX_cLn8_>rvO-Mvh!9>T52djAT5UbSaO@<`)*DBx4tj zt{sk{!FGa;6q_(s1i{&7IhO9FG4G2NG$)xSc3{sGKa6xT5U|ONbV+aDUq=#h=ZN6QQxql5d zMED~{M7E2adTYWFb9dONr()c^!#J9L04KJO!-NPmENoq1I$}P??n%S3gA_2Ncw%;9 z5N2&6e9S0E5w%-Xl#Bcl@)5So$3hne1Q{3$`XlZ0X7bI6eFGX>Ls!_@&Lz3Ifyz4t zs5(Ch`_uPeUsXM-Ycg?q=_rJ8(9J8f#by*NIKpr83bGLe$RK-CN?4Ycmrr^}xROu! znUjU{85uaAos0AndvRcP7{<5`fm*GB%cupIb0`f*Pwv9*u|ttex^2fRvjjiJjvUb> z#E#jGT_=wr{m48l8b!g9of?Bf$0K6HaqK%mKGXatEFSKHsmnHF^XW3=5(XC+<)NVT z9MTT2$GR{-#2T4FMgEb5?5??~6~v-IL?o}m<}<`wA;~PunSd4Nac0X*ERVK=kBu?O z8Og)DVjB4_a+w*-74|Umn~o97j*+d&M{!9ZVFu$&A?ZUl&g@!5rqnD1f_Uy^MZzpP;&%q$pgq|=MGo`L&Dhkvb;XH~V~>^)Z|=!6zy&fvsW@^#&u5Nv3w zP4beCni?r65Rbvg+1tqO<|BumXI&EfgG`c%<)bh&&>W6(@|D>Cp>lFd5lmF%vqdk* z>}~1fCvzKAhIN9<=VYD1@zrB7C%_a=G6PrzjzGeO6WD*AWFoJWbo(Z5+-gBfM>EKyWq%*WD6zOc8orkIC!1dv`?gdlqST5L{p zreJZTB|H@-#HY28M0qzqhJ$$C#bO65$rwyoPI6dXiCcwpaq`ScY`;{4tM@LTXwOWH zqB&5LeUNZ0Ay>d9ehMb&*}Hmn#q6T=Q4EsH<;XuNIKa#ii zE1oB^lICK5{#{&sP>;JuR$`0F3SJ+6gwH-T#1N4k6l2z4dT|qOK6r|6>e5lNH5SAC z$Uh^!5>u>aV(0?*py^n=_cYFsT@l9zHhZxNKj*ns>I&!t$ri~J?R79F2O+EJcC2$S>CDLqHKy0PT=s0X_#%Rh7Z{@E18%uRsthC z^7E25V>RQv4zpR8sLz>a*&m6*c$Y!2A-UAVO+(7=3>*_M?E*?lZ=`$lR5JDRK6Y*f_(~e+H6Pp2X?wd@9Q^Kpy$Nq{HVAVE2kC7|ky` zXpUdx2ME*17Vzpzlfe`>DW+h;BJy(z@<}$?Ch@$J&S#z?tVqHv!V1oFu-{~5=K}vp zH2#MUBX##0%nF{4k-p2Zj{L(kis=f-ZWm@}BL5i4;G9tSxZ1$jOhz#X+d*@Pj2$79 zQS35v9}Y53lMh-ZU zL*7F)QxM!;z80yI+~6mZ!SsDn3a>*_~Ipm{v)Sj z%Y_y+{`wIb@^@mhpBwyn6`7O*b6)mp%uB;fAt9&B)F2#g?uT%&um?wqv*7OMi%)GL z5HMvIwjWJLR#rMGV<~Rj@5Iwz_n@QtEcT6xK&bKSZzB6CB(fIf-@&z(THHN<6?rQz z;A&Pbs&1V{HqGOytM$0j){2f>r;)xP7STSYP+IfyNDb8y0pHN&*l?&26^*sHTy+^~ zr_UfGBNL@}8*#h&9&V?v#NP2Ph;S4`X=yS#vu&>T*!9XB0*TiOBIEgdqWmu-kb7C!4;+7mZhN zKYb0Z;6>7)s7V#2h5-xrqwmqy0)1DpK=sqqrRPU2SM+ zx`mr()}Z|41{74^#ku;&xb@%x+8WETXlgvHy`zw@zYHb(UCj+-ufL4Uy@j}0LjmiB zvp8LP9l0cTe1Q7ZqmwXoxEcY;qcL&ESsWtACi@&Y3kA1OUB`*6dNkg-fU=@2a=y>u z9L>l1EOM064&c<5u^1ccK*6px8Dw|ZJEkCI(Q)M7ApRO^$g!m|r%oa7%5_w>b)fz# z1q~~rkrH4DM=KLyOO2^*0POvjVfy?6lwP}ud(9Wgz-1!s%vq#m72tgNZQN*lhW7jA zs5Pui7b&rI2;q#W6AC_G{59*kb`o$rV(9VKE>0{i^y6&5lQ4Mszns|QaQ$a4&q!! z&cNKfS^+B>E?mXg6{W~Y&B3+HX~@mb!0F4kQQl0>&%N`=-V%o-(ua`Ab1~;YCQhZ3 zE^(5jtX3Ojw%hpX4eShs{CUUebfM zr}*6$mvH^`42<%3g3O5DSjtGAEFm(mhDJRMvv(Ea)>psAqn-+^T{MaUL>UG<2g4<1 zGnTC?N9D~b+-oRDR%Qmyo+cb6UB2Gdj=Bq{ki8-bDG|h{^ds2#L}0}J3&?x=HQE0H zl#GtWL}OFf@TwVWvYW;MP}yzA>LV1GeN~U{Ypbz#v@OgWePA&AD3;%Rf(L|2odr8k zac&1LR^34E#Vgci4$fy*pr)yraJvi_SIxjQPbbm~vVCtDw7*2;6!XOZhSt$g4LynN zh0Um|Ohv&`4@{Xo1Jg6_;Zj`{uI`?Lc`h=zl5=XtXMEc7i?t<~NArI=BMW(1=W+f# z%{Af5nd4c=&ZhZneuA(5`Y9gPQ_!(I67iakp|Z6{z_Q~w*zyHBda6;gaxxZ^&N!3q z2!4#nnS#7UNLf*Xo86uGqU8`yF7}3_vpqf-xdx+)+HjZf{>hbNs5-q47b`B%98?jW z<&cdjN5$<%w6)#DtpjVYHq;Xi)W;zPw&dgvM@-@t9Ll|d8_jo7a-kS!Po6?nevyC` zb+wmKv2QX~$7|rDCcNP{w!&&!J!AG-;#CAzkeE3`;|fi&clX8M+Dki2rIKJ%*{ym2{VGD5xMFF7L_!T-*gS_H`7s=!{sxO zLjl0~vP^89C zn~r1L-nmi=xNhTCJ+;?ai~BX@C?Wq&>mOuMdlV?0*@L6&6Ok0Af=FQvBacY9GFGhC zV#Qsu=Nxovv7!n$T1nQ*PaF2%wX@}fPiuHk$CtT zj@8^pTYVmCE~X(pJ%h$2i*Ta^$Ik7-yh+~hSAPPLqZdr)9l_%3k16PGL}%eHTua}M z3pXl}#~4Gt!}-iBxJek(R(}y!*3QB#Z%4vYYZw~3K&2Ur(K8O<+~u37A|EZUAXm_( z+zS-Dw6vqXDjUV?M_^W%9Igsu@<**nwte6nwG@+f=i@|H8OjMib279#QCM~ncL+n< zZd0JVVFYG}S|Ttq8Y5PxV%w=~WS+|>Kc*5D)y-(>;1_b&aP2}K;SKpQ)JOKyvNKNN z{QlWkG~Npu8wHFE?4eMMMBJF|IF?_5D$@Dl@*rRHawoG})Mo1v#XLXOLBphtt;@ah>d7>-EDpx*{CGPJ^gDG2ADu z#p=uCS9CYvR^~OKTzPH|s;bXW|8l9^eOzm$`MY@>C)W_3cvJi%=UotQ7fZa7$m+U} zd&k#fhb!5C^2?-RBbbvt`yh5Yd=Ay1xUL(2)qDn}hoUevSb-sfl{ELE@CjamH5AKT zxqlZ|s;?rQ<~<|hJWB4=;}*qHx6iM|fk_^SaW;pIr8z{F8c0175HRxuc2KNU-%^EJ zHwy@xSpUd|*Ry&g{m~ zwIeVxfb_^M46;?{vF$F|$JT1JWNk)8)&Z2?tVT}h1)MpPi=4dcq!$!p-ONMb{P7s; zs-dxzLo5q{ck&j@J5q*>%tDlt9%OQim6nFGO7ex}^sp8OhA-Qz^oeKg&@gbU=~pF78xMmAiCc@E;t)(MytYb%^_ZR$G(BbFS(;WHf1 zpF`1wO5E$9asRprce1u&d4LDJOtk(kFHDj1aWP73n0f@lE@B0y&&x;Y#VXV`T|xnk z$=OpBOI)}@SV6JG^;{HhPQv^+Yq-ci5>}LkuS>&;`w!4U*mB{(C7fPcfXn2AUMM|- zv_k6hoo3Xw*5F>@daRx52`@(zVa2tD$ORhPDM(DAIV&ZZYQ9A=Og_$~ogsTxM3{CH zSF%o_VEZUc3$=$GzsMwe_4>2Ye){y9L>3D@5x>b2+d^VV4)Fpqrp;~Wd3GI_56r=I z-g+^}6~4o_U}t$98oy}7-TduXALRkx!JoiFdb z5~b3`n6{dXOXq#`+}(x!3xi;%j~=42@)Y*)mHPU&3-!{EI*}!l!fng~%+J1utF`UuCc|BK`x>riPREWJ1RDNs zkd9f8@#pJty|D$|SJ&b2VrvAr8spO;p>Xoqi47;K(a>Ivy5c=poDxrl*M=N*H$=_f zfz21&aI3Kn_cNAbPqGRDwz_@%`gzhv+C-KJPH`!ic82yB*~#I_3@@K&O}Xf4*vj)1eHJ#0yCLMAT8 zl57gx8^{5^x&xV8{SYyI1OC$h0RQw!L_t(>24Xf|MpAE zqHyobRDTpj4@czDA z3wb-KlQUf0oM5ksgI~}-Y&~6zhVC1vFI$aO)575F>;eZz7omT=P1)VW7WTXhS>*)r z_%#@xeh1fX-N&P<6G+>hjOY+g3a}LL3XjKFazxYae2!KM{BEa>!m=@9l3y9j#Cmvo z3wq-fSz^*bYa570%*U`}l_9xqu}5qBo6fvFx1UI6eBjA!r`i?XuN+54Y@P0 zCB+QRc2a!eG7%vwijj7`1&aV6`+o2VT!7Wb$btXr8M+?a!1axDvD`@w zXMQr)viNK*89XPD%ojGHs^cj> ze?)jn!Pmtd6R|qh8b010u$;IFld>8pAZWsaODmB&Uk-m4bC{aHZE&NtO;!rxQ{w~& z;?vQN9CW_`%-nh!#m$e<)>MwnW#cfC_)?qqO=OwFdH7_^$heJ*t)CO0570(VT*bk; z*qW$DsFwqzNlTD$@)pYPcalEtK-wAy3=L60Zs!OG2XC?mGmt!`0690C(A`FXd+G#? zjP{1g&IzurZoRtX1Q$CcRAgt&e22nmbsBaMR&?B}KwZIVtehDRX9wQ??10deWmuk5 zkBY{J=)ArkS)1H3JV*p{VP&1Z{_7zM?q&3>nK%R?Njq`$%6)YGrUiG4c42LlH+)P? zVZ~=~SV>@F8US1O%~*HpF4~?oqP=22mLvzj#K8~JS^Kb}s0odCtI>L48@4YQ3NLpj zsBF{-95n-T&fY|6!!vYNpG7HQ%;N(VHmmb435_H;QqaT&U!bY+7H%Dx zf%S2gaI-PT5JNNAd4^!dj&sN%|L-23MUy)X+h^G!(A$A*kR2Ri#=&dNF|61-2Rmn4 zA;{GngAGJby9HqCmNUq__Y8Nb-n#{}uxqY8f_~X<4Acc%|j_FjwNG6pd5V` zwtF{l?Z`sxAi0n5wufxwLc;W$D5>v4&yC$Ux84cyp;XSEF~*B9W*P-4dC0uphzIRC zC^?jZq*z~Q>~$DJa>&OKIFb);LjgPaOm94YY(Ghdl(zOH(}Ytb*S6}37?zxY)0cQ_ zVG%B$nt=%k{z7}sgs)mmbB3#f4b)PSUAGXZ79GKA#)>;P(Naz_up}1V?#=>M1SHSE z+_UU&JrQ2$mhK6{glKcZC@W!=oL;_OOID;OV&Mf+__+DlSyYFLmPcr~c?1Q!gOCz$ zOZd;nSNOty>PC#%y&rql1!7JF#UM_eFd~eZTh@Y>t{!~(pouW%B5vmI#JnkS#H$ya zTqj}vjzUyE=tO5r8Fs83LjkHi42;Qs%*aFT4f1~)3X!#YzHs0(Z|C!g9fe7$CCDP( zZn}|;@^!J87GMM`sTzhRV=;WvK^#1P6gwBEV6>AHyd4~%(WnqSY!p_UA-!z>3N6(I zxVUi`=7d|455`+_c{_Y8e0+Cc{gFGk*GazfrH$A)JBr5N4ffCd7@7|k-nPY)34+bSlh}OyKI$)>Kt^I9qBYU*nVp4$6)kAGav0}lksTx5Gcz@Xg_ROM)7D{i zIr;pZPw@1?L+XDyD$k6=x`~$X4Df?>%681iYsPJg3EE2+VaH@Mcshz9yN4Y=9ZfQ}2xabTVTelBEp$WMElRVexrS$B`E z#WqI`0)`lp9W#L`jkocL#Tb5$eESxP8E$Mx#tIvRyPIIpkYG4?Zo`@*Rj6yNMt$ji zte7@}=1C0)^06c5Y{7=IX54IGyR#bmN82D+V}c=eF>siC0^152$#1!e+FbGnCI=D* zc#$m_j~Q#TP~6^w&M%u#e|jtS1bZTs{4_Cdg;SHvP(0;mZwq%%FHBr@09mzNXzd{1 zeA5h!Qz>Cj@t`)5#VeA<5Q)flv|ojJTd$$IsTQp_k74WL(S$3`uq8WZYnzPl=-t?R z;sj3Yo{fp_4sf$nLhbA*V5OaU65>Xm$C*pKwXhJEPEN5?7!PO%f`Vte5|l8Yy3Cfk^`&>v&{t)X$GKG1mEsz)I_<~R=I z-Y4C^gqzt5F_$pk(aGiIn8(?c>;@-26|l77<4|1TOuFbqZNyDli2ddDXn53w>T{d0 z%-(T#}+3vh>x!iKOS8Iw5AarYTo z?-b+uu{g|%`3$y%{nvi^DKE$P%_8!{E3)4O=R@(OQ2A zx6Y2lq9g;-Yb6X!#vx{0Cep9ep{unNg=AaeA_Ji&jIp;5ft%ZMEL?pOXVbS})u=E8 zlFz~0HGj@q3}3qQwU&G6sM(G^^8?>1k;UiZ zSWy5b2^)o=gJno>Z9r4bE*$Z4N9c!g0;FV&U$GsjhqhwV{1Nc=P~$^s1YAa*Ag8qn z$Fonvi-I##gF)H@`iuYu`4kQ!9UeRmarmgKIZ2%prYXm zJZ-;#>hjsxIM){bnh%A8Hh&=_!#g7#X;mHg^2sG!Izryt|fAx1FM#AE2fY@EME^WIcQ0dF$m{WQYCwo(EKeLU%-=ZUOg6EWrN zEtE8UgU=sSqxsr$>|gGTaOY28ZafITFb{_P*ds{2*oG$$2oz3@#aMD2KXM-moAo(3 zaPtAa>S-b;Hwzhi<{&xRoyNcv@BLyB#Ht7+?<&F7-+Y6%?h4GFFaFl3Z}IQ} zIk$Ir;OsVkjPM@bY+h{9Uh((EZFfsTPpL{w9@BcCwcJ419 z_C7qo3Lk!=J?x$5k`E3R4h1zcfR!B?mkGzP>oNuU9XC+7a}E}}DPdtW1Rs#@8d|u( zdDv!b%x*+uM=e@%S72E@1$@pP2wHd+XDB%7Y`u)jTP9$Viv=VU*nRx*2l!AzIurjx z9riAP#LN(;#-HKC_o)BYeGhw|g&A=w;js5lJ{!{8KVuk?5i%M?*kn5#@muncLC#25 z139ESQxM}ThuG8rpL|T%WTu2NU;!2!x`R925Adw*6b`Q+N)EGv#)uEb*2mYI(RU}Z zcw2)dBqscP7{ZrO+jU*&XupOFN9G|p%$6|OP{7b3#-uN9laaFZDz3CX#FstPr|rYw z<8BM{=p~qu)rgu0&FIeFh<(ux@Gu{O_ueyrp~MF+a}Qv{%`Vh6-$L!diC7nI05_!> z%>y~eVhZ?;jqu3_zl7Ar9^*HjMNu<3!_^r$JUI?gdJ^*D-l1|ibN8b-o$={MJT9qA5x=fh4v{qQ}Q zS;#Pa(O#S*yU|czii{;=F+yJ=D}ExTrQJqJ^EddS`v#h>F2c@P4hXdV5T-*0;}?=) za2}t7;}t!4)|HFOqtO@{V2(kbeS}XxHN^+-4M*V6zK6X>z}wy&?|n3g`pJi##TR!`SGF8e zlRPOv;oEiIaOIKQitw78+aWTz293kKv}?Hh_zN^wW*}o)AVz5n$&oRKm;yor$9Slx zW?|puPW0T*qu^#F#(Pj8C+x(I z{5EtxYeL)gO;|L>8A^{(L~Y7KdfNjuUe7>wQWVC%l*saf%9eC<-)-FMszO8QQY=s6 zM3xr}r|rf3Qr-^Sj;~uU;$qrb%o`g92OBXydT$WPwy68{2u;wD-P{nA|%pH zNl)~S!)r-Swt|9Tb0av$kH@skDqL%-!IeV`kW2xh$!CcO7+Z+6>&MM@8Wt>7k=A)lXPhh zHqJ|ckFy*@J|issPzslX<=9-&iLT#$j^ez{@b+wD4nyZ>A@kNleEy7d;Ou0?g{YwjpNOgF$iF2Ftxw;EeV#6ecqx$;2j8$0I9Np zUq-?;pzmSt!x8Bz#fQ`$ANKwn(@exL9jt+4$SlIp8>r~+KiWESnktJ}b+da7`~?`iNyxW&v|6TaxYZn6RT970q4ft~-YO zUBMU|VMabO;RMOt5F;}TatMYdIsr*>j)-Q6?0q2?CXpXUwwN!i(at*`P))dMY6wfY z3XZXBu;9#n)N~LZnOm_h!UHZ8lf3`&`xs(MW9Uu3(7x-q*4%=g>l9?q4~Lt*LO6*3 ztyV%4h6?BVm<@qCFbpFP6d>A=mlFY#q(DQ*@_#_B0bcq-n9fsqKmR8a80D3APuHhkWkj@(UQ2=TIk zX5@S4pTpt1O+bvy#+W#N1^m21sH>AnO+`Kbj=%TMO?TUWv^%GI)OQ9zOcWlKjF%gwIREvBn;Bd_{Ka%u4JI62Vvc87$mK zBW^YMHxvu^)MTJ|+As`PN(6oQloMg9p@^QFfwY?)c-T~e%R7>g;G=-K-&hRYTY;h$ zij}UNM0QFrhFTlpvyX>RIW=rXtibewT3l^!LrdN|92sqi2s@H(UWLgQM3@=lGx7!b zAoYl8>v8->8|s^`B5%VqjP0AqB7cc5n92Bq`#Fs{WMmSG6>KujeHHA2R=WB{hD^Y(Y1#@G` zhd23*`ob|!08~zUu%*vo@5!MG`b~S-yN*xYB>}p_-X$Uv7*ZRbef$wzBS&Lxb`5Tk zu3kU80ZX1IvS{qdkGC+gf!ZY*qjr}dzm0tKd$~BZaV)|;tstUUg6G9RWCy$Ol~{4A z4s|^p=&3t|ZFBwL;Nc11g$J;w@^dtGcH?RD2^1ZQMM{u4R7StVN5-}o?6C$@58TJy z_F8mTF2k;wHc+YU@R{QxjM;JrH(Fcq?iVMqT4IT-i4f zvja_FPY%MT=7DgI+>Bk>ck$riZE{rBV!|+Qa!kpABWI4!st}vXAt6DHn{|+ak9M>@ zuED+yQ(^D!4X-(S|D=g5zA40-K)}c^0e0(iaQJRLnv3`1WTXc|K5&IsFx7dX1y9JZ zH56{foG^C+q8PX>$;R2+?Z`NP9Nu2;qzuM_1IPd`GB$*hPZ;JODnUgj1*bogMApKB zCRBDlMc2h0NSi4~goAI3qJxMHCnsU}e5|`zi@Oi1 zab?$ROp%IV^By_>#53P^`0+1g(6~>=n)K^veAs{+d0UYb<4ZQoYG;r~nf>o!kqOQ9Uw+nY*VyqWFa*GlYS*f?4 z;LDbasLvRW>G4Y8<{MLzCBBhTZs!Ew$t$t)6piokJ%}B#3}F+FA@h1YKJP3;{@y9@ zb+yGH12YQ9DY&+xHVp{i>_=h7?jl_4ZpPjEGNf!yN5q=TD6VP1uba;zW8--ExF#cV z@^R!*VA1*I9aL_afkhMm*~KqKN@+W;+-<}EB$ZYvFI_?&tVoMOF1q^~z zB7q6tc4(x8TAhHI+wxG!%WZF-#foWh6lj>il;pwKFczLcN3lPj6I~^^c6t)VMA-|D zaNnzFEotnw6@!`V#586*<>N zfzUW?!FBwO#?sB0KGIKc z(nVqmp-u~tHN<9qh)&sqleb&Y{_Gx39$EnxM_USJ&HC~1cJ!TzES6~sl*}aVu<=}o zB?qpdzUw}^ZX6)TFC1d(58p__eDXyaW`=GEOjwJ(m+H{+Wizr)u10{r2RtXN!tPrg zWIStdecenfA;-?$z!Vl@BZyQs_;~axBxE+Dy0ICLFDyjrEHQi>%*nxJe9`hLBFEj< z#S7E6XP~r|Fy>nmS&Oiws2Mjp9;35-D^5+9BizvtMvU8H(y1Y%5FVd_vlWf#?#x8t zz9dBYYN#)Kkm}nfvR)8jA;}~kHa}+NL1fi+p|QS%g67vHvQjYp+-;P1e2K1WN0GP0 z0SWGe6&5uA78INgiG_Cn=}IB#N)KWA=@cYKI0#$KMIy2>Mq?43l!J^L)Q`3_P9mUAml>%=U4Pgb187JaMCQS`g&^V64 ztbN6(eB6y%a)xG4NgyZA92SJ*`uqGU@pem@$PfyjC`4>7#)*4hqr0ATj2!!Uk$gUw zh@49!SVoOP3}}zH}Tte-!g)j}{VHVnI*!kAq&4TawdH*k){x$mF%u&%0>2la4bRqv7gk zgAYFNgMauA94e`$IlqJ}r)FSupfe;!y>rTSaL`Bg+S<}Wz!Y=4KtwD*h2ysx&~Wbr z&Ml2aBt0uPCV8je!rIRHdnK|)o+rCVcH!5z_al9sKYW}e7;HpxMRIB>HHU3TJVtIf zLOxg;Rxh0jH;)hm&)tKg_u6ouf`zQPBM~=v2xK2quuehm;6db@Lf#-m&`@;!9mDDL69c+Z6dWJrfSHO<`*IDb1k-?<*%GY{3N--)_bi zEosQ!5`!QQ6$W`uM$EPwD5&j3*QKpEGu;|t6r33m?ml0INV;o9Ix8U^u%I#H1Fa>2 zQxLWF8glP-q3h}{WXx6~iu@5{!YqrI%2Dt}w%b@_53yzvCax;L)%%Tja-Z;PRT6A% z6vBC|yh?#>9-o!y>^BoD(yrm|7oE6v;Sff|`a=;qhWv`EcSvN7!NgNlD5api>-q^4 zE^|hr#}J4lj4_skG12hwJ%l|u^=RuZryyx6#zi|4zL*kOQ@x`RF(MOb*BbDkEdvF6 zMiN%4g`n#>#xO?rnTvNLJ}*bRMKU1z433sjKRWYp;qVwFgxJD_+7k{<7ch=poWK zE3pYA_P)?eI*irD{F34-ZXb-tqOc(poJnA;TOrNzOMbnj1X`b%APYgl5rHXCMUtsI|jqaU(0UqK>hVoI5;90 zK_7eqb559%E`9cqDGY~rVCalgWZi8>M`H<6*G__+hJ8np5AwUr3`rmO1~C)%m5fLy zKEWp@b{OQk5|eh`#+}wWJgnJ?y^BKNpdpzc`(kSB3mdf-EAMnx;ePpYteEI2j02z9 zrk!^p;@QHKcZ2vMZuN1Ty5EL+vKwhrhavV;@(VxJ>inS3j4|jVdjutI#PMtQ(a~Ok zbGzrl)74IRY58`EEY@}Qr4{fFo`y{s*Kv>h+R`KA5F2cZ4?lK+z4H>RKURhM?i$=J zS&fAwePA`nh;-NrUQ^d#)rAgJQ^4O=xEhBiNfBUcB*YS8bF$%vWQXEcVSm|ev~|^> z;NSv;`ME-qFc*u9nsB|n2kj*rabl`9LhKDm=gIFC$~hq*W+`?T-a>2lZCp6J4l%)= zH0Bh;yi+1;4(8?F#g+CJG!>u5`8iXubaVnnjGT)xV@}}c$qH08TtQyRVQiZ)5@X1R zb}+Jn=h$UfbD1x9NX5z1ZB8&V3A(5qufO-V40DFMWo|~vEoP%vM)Ch7hrg>mq z`Gt)kw72C^+{!W{B+A+D@R1`U5Eye7N6Sf`I&x8dXf%cg+i8>PI;>!9A{@3R3^w)D zCbBkE^q{BZ2HK0}V8sMGk|ha@*!QDntW|1w@S=$$=W*oheoUS?oa&H~9-9k^B@?nO z!tI7+TTF;IQ=`xDp~x5F&^=g{b|39z%Nom;W61Xfdf%AmRSdNv{S`w@SR9Zr8C&vi;STxVFD0^wcTQxPNP^%Vvz2iC4!XLl zaXWVn#tri(KFKCh?7=>|xv89d&k)4VIgE_jR#J_fm0w zvp>d$^Hx=|h5WLOZ)7w!q46ajOh$baUS9O?=g*72JCP;4eX}5^zy)gG1z3K(0yo=Q zgo6m{TAFdcwFY&?>##n>2ey_b1TG>NIE{qo%q*O|(t$6#E}$lD8pcFB&;--Kk`VD5 zB&moL%t8*Y@hh?6G6lXp^*FF~HXQgSwLf(ticN6L2dKxbyiVl$V`DY~)OYj^B%nI~07k zmg3yzDF}41g^b_Os?|{1C~593;2AsuE6-G*mV&pcONWsZA0#9R_-a{wJn5qsiL4Y% z%c#M{2c2ll*@+{;4u~K_Zca{`nCHgG1dblzn44OJ8=c*#xpY)m4*QX7By85_;^6IP zczQnId0R(#z^hHmpP__!!B zm>eVFh87|*jf>pY3(>1i;!Ir&sv9aWWqT%~)?GzWbv=5jR^iYbdwAMMBWC&;&Xq2Zb-oddnd>fmSIY18?N5H-u+Xd;Vc#R6u=fv|P#pU83(Wa;?@5Pas8jBw084la|^aOgri zK7Vi(wOO+SpshZV0) zWRVe-@HrHkP^gj)VN-4kdb+C7PEPI8aUNuZrNX>1pDh0tCSo{6O~RaWRk-n}6Ip4S z5ftc!pb4vR^i~({_uNL+mbq9#j;K57ftjfh%#^k;7{4Cl3Y&4OsSfSwbFnQ!3=fqU zW;73iBf=O%&)T_qzd<64#%kOWEG@l{ss|0IJ-QNG-Q@72fZmh>AhCoTe8Xf!3_q_; zWOZbsaBt!dl*r& zy;zKjQU5>nbvV8;sadeb};o{fKe2%SJt=S>xPp^-$;7s ztiX_dSfOz6MeN$sNNeiBZ3+(N&KN}jt(Y9Sw^;qhSS2xm$UYFN@vLKQ6u8u&lN`Kt zlRbzhF$G^H@Eti5Ym4up=D~g3IJpFie4U`-?F7rqk$;Oa%E`@XED4jy zHu6}?c?*=gH$1&P;pAv9^p$1vmHxk$_*qT>@f+T;7&)U51-I^^{_;ZXnjwXQ$_yWV zWCka{5m<8a3T||@;!epPtRLnFZ&NdJ{`=T&8e=O8e$8zBpiJ0`<(ZAR*HnSqS;<(I zXaN-k^5!C5wO|bS_e^9ZW>WA*cHv3IN*rBi32#RVo=qv36l9EWinms~@C`{GuvK|M zZ8sKEx8&n$M-$p=&S1x!1UOqOU`4@)N~0!>CA=V;7B*@g_EQkj`lu24XV=5u#|3=- z_uGwWFIkbzAid!i27FVS!bUCF2erxy3b_O6(_{=wDMZfAMm%gii}RbJghZAiZV~3^ zQ*h8xkJ=+-YX~d6Y0TKKcpfsvpnaCI>*6t98ufwb(_fXe*A5W`yW8b1s8ZT=aOVTZRo&zq{LA7TzlJ^#(xU&aW zubf8WFtSzeoX8r7NoQ`LysHxpxw~;R)Co~$Ml>FbF%$q9#K6=45ccMBBC8D7&rHEs zPGp&zkzDX?-+B^Rei|WIe4F6>yNPg!#?Hh@Um~kFIMtoKMK+0VN;CGHhS*gXQGA>H zpO*6|-b+~FqlN+5p_i~iNm#L9FAgzQv|h*B6;p*|Fchevbh$WH9N7VH<88m zMZikU1}u9ik>w?<77>Ycelhb*{Wh_O+F?BA>?uYi=|j`?6WBC$7#w&!hyPyY2X}^ox`xaomqYR#ArZDALg7AZHll6<4 zh|M|Gs3(0ZIK2j8L7vbIpNAzSWUD&saqrMlY;l#thgbRto~FYpamCl zcOf>ym*zq1m+0@ytE5e2N#L3^3v)8>;1c=KJ$=;GEl76w7QAmwWU;SoMfTX-A2u#zkN4a_b$2(~I&R}`!6NLRuSS>`C$9L0 zJd#!6B?2dGcqI=fLKrIun~d}&vg`$)l(!B)A5+5B7m2Jh*jV`(T@9B}mp&W|N0`vu zSWp>yo^_BgLt*C#M^7KJ^B!<;u%kLSaZ2$W@4Vn-jKYRu9I`EHCFv4jj3fkhp4+kd zDB1GP8@OM#3`@q7eo-GqG}b0YQE>NtHIXGIAOA(nqo3GU)pljbEY>)WU+9PK{4haFBk#SQ?a>( zl%?x)eD%!}bX8@bY;Fw35HOjN!(l3xz{GP5yq1*W%#9vAZ9Ip|sbNSC=b+M35K69> zx391;yN+E%0Z_VwO=bKP_=QK)ocq1-x z1pMdZ;#|ocw13f#8D9{i!%~=nxJaJctAPcHv}t1}@+0z?Z*$f_qh`F)AUH#?$nBB(kb;v8UJJba6%a zU_O-93Kqf`4}qhXKW6POKt;zxRMXr{91-|ZBI|Ko7OtgwV{-Hm0g#2W95|CrR-$-A3PwA-!fNCS{fR7gj4vL?*@z&F z7-TBkhAAen6q_2t#?B67)*L~>{T|$}E5?ci$#0p+B10uO=dth$PsQPqTC_iFK|@U$ z&ZVEkPMW{egNJaK=J3G&JvemaAaXC?Lfhw$g~KJ+EII=3;Ir6q{vNuz3sG@=3=$)3 zVMsb@A^8y{vRo74GA|!TD|+y_ITw}3qA@Yrl6WMN_F@wSt9*-_bK)$_%d1Bf8T`}7 zcfiHT9()1B%RIat>9FEk6Is-@sbeHmDQB>?q#F-fE}`~(G8QBf*04Ntl9lSRlxnw2 z*+(a1(&_8C{NM?4GWH=bzz6c+>6mxoHm)`{qP=J*j*j<$kCh>Q@e3muNkS34^fZn% z^`NcmI<9V+jG2xWaNt0ToFjfqC1A{3C$j2L^?)4Jz00v)p@yF!Ib3ovjjK`{oQ>q* ztP$Pq9Gs2lU1ji>NMsRKbT^^y>{je?c0rhc6}sSb7<@vHBejTh1&2WmP8JYSF09G z=uKpu`(BBxmZqC%&Pu}CaU{!X3HcDzX75`>O9|P0(idL+Y)*5@-|_8rFZ%r*L}M(M znnJ8_hG8%TAP4GkqwXeZ&m>`G#4jN?{Sd$W#V=rF>jJmcXK~>6V>HziplEd%CVCBl z4FxM=DYYl8KH?P#k!?h#WJj)Ya_CrX1*uNp?^#@F3J-WOUN9LQu z-<98x(|8DnG|MTNmcYW)049c?;j>Sip;Rx&^1at6NNPuCQzgm@(y^Cp?Y;wq<%HR( zsRwZ2z;2}Hm7u2WF@E(;8%nab!Qam*|QaQp%)R{Xc2Bta-pl|h?_dnuPBymX8LnK(M&htAC_+bLYWj_LOk`b0c{i0i zw*&j#-4Qv2Z#(94mV%A-3_5~+dH2!wpcIv-Q!qB#;m4iGBAX;6vI6H}*w&jUyW5T@ zxA!1(gD1khErs#aopmT+g+>kEx!bXmu%f#89@eg$)0@aL@6-Ob6WdBL`^UcFn0}}T z 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� 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 ~u;@)V%WjTnrlp{^P9W?>?o)9=+u{bM)O&B) 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

    ;W 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 literal 0 HcmV?d00001 diff --git a/tests/functional/Docs/media/setupAppRegistrations4.png b/tests/functional/Docs/media/setupAppRegistrations4.png new file mode 100644 index 0000000000000000000000000000000000000000..db8a2951a959711929d97ad139e6a14ac82ac8e2 GIT binary patch literal 131289 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

    }0z7}z`Gdy_5EbM#c+=tbU-*JN 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͘u#djn0IvzExV}_9a8NhcPH)(+S(L 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 literal 0 HcmV?d00001 diff --git a/tests/functional/Docs/media/setupPipelines1.png b/tests/functional/Docs/media/setupPipelines1.png new file mode 100644 index 0000000000000000000000000000000000000000..8d991855e2a94c881237b0cf4395501a60054ae5 GIT binary patch literal 219442 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� zfa&IGiCt&UU$>s_6xsf?_}L0#vI|QmY_uD6X}d(erft)HpVbsU(m}1-B|ZG@ByYX( zh`UqvGeyRFexVR3^!t563ZZ&AsuNQ(YhsWkWW_9ubJ9T7m4woK|%#7;CrEnEP{6AIts^heNR;I^(bzH{mFAFsuJbr1d)C8w1D{-39-Pi|dY z2J%{gGh;a#Fe&wEbwR254<75dD8SZ0Sur!hT?A+Kg07i? z%BOsZa~B!VPPz2J>&l-xUSTwEZ27%K3aA-&0I>@4BDLhzEu^|nTkZjKhtoSIB3h4= zqE_8xsW_&6yMzo4kNZNRrAsPn(BgovpU)Ly8M<*U<>Cn<3x>vyIgmMqjUj6gQM!BO z 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

    %7jGOYG{@{Ga&%ZP& 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 UOUu4DIx+x(r>mdKI;Vst0Jz1Z`~Uy| literal 0 HcmV?d00001 diff --git a/tests/functional/Docs/media/setupPipelines3.png b/tests/functional/Docs/media/setupPipelines3.png new file mode 100644 index 0000000000000000000000000000000000000000..3c40597486cdcc6bf4d8fe4680fd397ddbbc60d5 GIT binary patch literal 169772 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

    + /// Creates the convert command. + /// + /// The created command. + public Command Create() + { + var cmd = new Command("convert", "Converts transcript files into test script to be executed by the TranscriptTestRunner"); + + cmd.AddArgument(new Argument("source")); + cmd.AddOption(new Option("--target", "Path to the target test script file.")); + + cmd.Handler = CommandHandler.Create((source, target) => + { + try + { + Console.WriteLine("{0}: {1}", "Converting source transcript", source); + + var testScript = Converter.ConvertTranscript(source); + + Console.WriteLine("Finished conversion"); + + var targetPath = string.IsNullOrEmpty(target) ? source.Replace(".transcript", ".json", StringComparison.InvariantCulture) : target; + + WriteTestScript(testScript, targetPath); + + Console.WriteLine("{0}: {1}", "Test script saved as", targetPath); + } + catch (FileNotFoundException e) + { + Console.WriteLine("{0}: {1}", "Error", e.Message); + } + catch (DirectoryNotFoundException e) + { + Console.WriteLine("{0}: {1}", "Error", e.Message); + } + }); + return cmd; + } + + /// + /// Writes the test script content to the path set in the target argument. + /// + private static void WriteTestScript(TestScript testScript, string targetScript) + { + var json = JsonConvert.SerializeObject( + testScript, + Formatting.Indented, + new JsonSerializerSettings + { + NullValueHandling = NullValueHandling.Ignore + }); + + using var streamWriter = new StreamWriter(Path.GetFullPath(targetScript)); + streamWriter.Write(json); + } + } +} diff --git a/tests/functional/Libraries/TranscriptConverter/Converter.cs b/tests/functional/Libraries/TranscriptConverter/Converter.cs new file mode 100644 index 0000000000..c275c1852d --- /dev/null +++ b/tests/functional/Libraries/TranscriptConverter/Converter.cs @@ -0,0 +1,254 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Text.RegularExpressions; +using Microsoft.Bot.Schema; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace TranscriptConverter +{ + public static class Converter + { + /// + /// Converts the transcript into a test script. + /// + /// The path to the transcript file. + /// The test script created. + public static TestScript ConvertTranscript(string transcriptPath) + { + using var reader = new StreamReader(Path.GetFullPath(transcriptPath)); + + var transcript = reader.ReadToEnd(); + + var cleanedTranscript = RemoveUndesiredFields(transcript); + + return CreateTestScript(cleanedTranscript); + } + + /// + /// Recursively goes through the json content removing the undesired elements. + /// + /// The JToken element to process. + /// The recursive function to iterate over the JToken. + private static void RemoveFields(JToken token, Func callback) + { + if (!(token is JContainer container)) + { + return; + } + + var removeList = new List(); + + foreach (var element in container.Children()) + { + if (element is JProperty prop && callback(prop)) + { + removeList.Add(element); + } + + RemoveFields(element, callback); + } + + foreach (var element in removeList) + { + element.Remove(); + } + } + + /// + /// Creates the test script based on the transcript's activities. + /// + /// Json containing the transcript's activities. + /// The test script created. + private static TestScript CreateTestScript(string json) + { + var activities = JsonConvert.DeserializeObject>(json); + var testScript = new TestScript(); + + foreach (var activity in activities) + { + var scriptItem = new TestScriptItem + { + Type = activity.Type, + Role = activity.From.Role, + Text = activity.Text + }; + + if (scriptItem.Role == "bot") + { + var assertionsList = CreateAssertionsList(activity); + + foreach (var assertion in assertionsList) + { + scriptItem.Assertions.Add(assertion); + } + } + + testScript.Items.Add(scriptItem); + } + + return testScript; + } + + /// + /// Creates a list of assertions with the activity's properties. + /// + /// The activity to parse as assertions. + /// The list of assertions. + private static IEnumerable CreateAssertionsList(IActivity activity) + { + var json = JsonConvert.SerializeObject( + activity, + Formatting.None, + new JsonSerializerSettings + { + NullValueHandling = NullValueHandling.Ignore + }); + + var token = JToken.Parse(json); + var assertionsList = new List(); + + AddAssertions(token, assertionsList); + + return assertionsList; + } + + /// + /// Goes over the Jtoken object adding assertions to the list for each property found. + /// + /// The JToken object containing the properties. + /// The list of assertions. + private static void AddAssertions(JToken token, ICollection assertionsList) + { + foreach (var property in token) + { + if (property is JProperty prop && !IsJsonObject(prop.Value.ToString())) + { + if (prop.Path == "from.name") + { + continue; + } + + var value = prop.Value.Type == JTokenType.String + ? $"'{prop.Value.ToString().Replace("'", "\\'", StringComparison.InvariantCulture)}'" + : prop.Value; + + assertionsList.Add($"{prop.Path} == {value}"); + } + else + { + AddAssertions(property, assertionsList); + } + } + } + + /// + /// Checks if a string is a GUID value. + /// + /// The string to check. + /// True if the string is a GUID, otherwise, returns false. + private static bool IsGuid(string guid) + { + var guidMatch = Regex.Match( + guid, + @"([a-z0-9]{8}[-][a-z0-9]{4}[-][a-z0-9]{4}[-][a-z0-9]{4}[-][a-z0-9]{12})", + RegexOptions.IgnoreCase); + return guidMatch.Success; + } + + /// + /// Checks if a string is an ID value. + /// + /// The string to check. + /// True if the string is an ID, otherwise, returns false. + private static bool IsId(string id) + { + var idMatch = Regex.Match( + id, + @"([a-z0-9]{23})", + RegexOptions.IgnoreCase); + return idMatch.Success; + } + + /// + /// Checks if a string is a service url value. + /// + /// The string to check. + /// True if the string is an url, otherwise, returns false. + private static bool IsServiceUrl(string url) + { + var idMatch = Regex.Match( + url, + @"https://([a-z0-9]{12})", + RegexOptions.IgnoreCase); + return idMatch.Success; + } + + /// + /// Checks if a string is a channel ID value. + /// + /// The string to check. + /// True if the string is a channel ID (Emulator), otherwise, returns false. + private static bool IsChannelId(string value) + { + return value.ToUpper(CultureInfo.InvariantCulture) == "EMULATOR"; + } + + /// + /// Checks if a string is a JSON Object. + /// + /// The string to check. + /// True if the string is a JSON Object, otherwise, returns false. + private static bool IsJsonObject(string value) + { + try + { + JsonConvert.DeserializeObject(value); + return true; + } + catch (JsonException) + { + return false; + } + } + + /// + /// Removes variable fields like IDs, Dates and urls from the transcript file. + /// + /// The transcript file content. + /// The transcript content without the undesired fields. + private static string RemoveUndesiredFields(string transcript) + { + var token = JToken.Parse(transcript); + + RemoveFields(token, (attr) => + { + var value = attr.Value.ToString(); + + if (IsJsonObject(value)) + { + return false; + } + + return IsGuid(value) || IsDateTime(value) || IsId(value) || IsServiceUrl(value) || IsChannelId(value); + }); + + return token.ToString(); + } + + /// + /// Checks if a string is a DateTime value. + /// + /// The string to check. + /// True if the string is a DateTime, otherwise, returns false. + private static bool IsDateTime(string datetime) + { + return DateTime.TryParse(datetime, out _); + } + } +} diff --git a/tests/functional/Libraries/TranscriptConverter/Program.cs b/tests/functional/Libraries/TranscriptConverter/Program.cs new file mode 100644 index 0000000000..938a956369 --- /dev/null +++ b/tests/functional/Libraries/TranscriptConverter/Program.cs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.CommandLine.Builder; +using System.CommandLine.Parsing; + +namespace TranscriptConverter +{ + public class Program + { + private static int Main(string[] args) + { + var cmd = new CommandLineBuilder() + .AddCommand(new ConvertTranscriptHandler().Create()) + .UseDefaults() + .Build(); + + return cmd.Invoke(args); + } + } +} diff --git a/tests/functional/Libraries/TranscriptConverter/TestScript.cs b/tests/functional/Libraries/TranscriptConverter/TestScript.cs new file mode 100644 index 0000000000..87999deee5 --- /dev/null +++ b/tests/functional/Libraries/TranscriptConverter/TestScript.cs @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace TranscriptConverter +{ + /// + /// A Test Script that can be used for functional testing of bots. + /// + public class TestScript + { + /// + /// Gets the test script items. + /// + /// + /// The sequence of test scripts to perform to validate the bots behavior. + /// + [JsonProperty("items")] + public List Items { get; } = new List(); + } +} diff --git a/tests/functional/Libraries/TranscriptConverter/TestScriptItem.cs b/tests/functional/Libraries/TranscriptConverter/TestScriptItem.cs new file mode 100644 index 0000000000..ace9299487 --- /dev/null +++ b/tests/functional/Libraries/TranscriptConverter/TestScriptItem.cs @@ -0,0 +1,59 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace TranscriptConverter +{ + /// + /// TestRunner's representation of an activity. + /// + public class TestScriptItem + { + /// + /// Gets or sets the activity type. + /// + /// + /// The activity type. + /// + [JsonProperty("type")] + public string Type { get; set; } + + /// + /// Gets or sets the activity role. + /// + /// + /// The activity role. + /// + [JsonProperty("role")] + public string Role { get; set; } + + /// + /// Gets or sets the activity text. + /// + /// + /// The activity text. + /// + [JsonProperty("text")] + public string Text { get; set; } + + /// + /// Gets the activity assertion collection. + /// + /// + /// The activity assertion collection. + /// + [JsonProperty("assertions")] + public List Assertions { get; } = new List(); + + /// + /// Prevents the serializer from creating the assertions collection if its empty. + /// + /// true if the assertions collection should be serialized. + public bool ShouldSerializeAssertions() + { + return Assertions.Count > 0; + } + } +} diff --git a/tests/functional/Libraries/TranscriptConverter/TranscriptConverter.csproj b/tests/functional/Libraries/TranscriptConverter/TranscriptConverter.csproj new file mode 100644 index 0000000000..aa4817caff --- /dev/null +++ b/tests/functional/Libraries/TranscriptConverter/TranscriptConverter.csproj @@ -0,0 +1,16 @@ + + + + Exe + netcoreapp3.1 + true + btc + + + + + + + + + diff --git a/tests/functional/Libraries/TranscriptTestRunner/Authentication/Session.cs b/tests/functional/Libraries/TranscriptTestRunner/Authentication/Session.cs new file mode 100644 index 0000000000..3f3f5698a8 --- /dev/null +++ b/tests/functional/Libraries/TranscriptTestRunner/Authentication/Session.cs @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Newtonsoft.Json; + +namespace TranscriptTestRunner.Authentication +{ + /// + /// Session definition. + /// + public class Session + { + /// + /// Gets or sets the session ID. + /// + /// + /// The session ID. + /// + [JsonProperty("sessionId")] + public string SessionId { get; set; } + } +} diff --git a/tests/functional/Libraries/TranscriptTestRunner/Authentication/SessionInfo.cs b/tests/functional/Libraries/TranscriptTestRunner/Authentication/SessionInfo.cs new file mode 100644 index 0000000000..5d96e14302 --- /dev/null +++ b/tests/functional/Libraries/TranscriptTestRunner/Authentication/SessionInfo.cs @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Net; + +namespace TranscriptTestRunner.Authentication +{ + /// + /// Session information definition. + /// + public class SessionInfo + { + /// + /// Gets or sets the session ID. + /// + /// + /// The session ID. + /// + public string SessionId { get; set; } + + /// + /// Gets or sets the session cookie. + /// + /// + /// The session cookie. + /// + public Cookie Cookie { get; set; } + } +} diff --git a/tests/functional/Libraries/TranscriptTestRunner/Authentication/TestClientAuthentication.cs b/tests/functional/Libraries/TranscriptTestRunner/Authentication/TestClientAuthentication.cs new file mode 100644 index 0000000000..6ea517ed43 --- /dev/null +++ b/tests/functional/Libraries/TranscriptTestRunner/Authentication/TestClientAuthentication.cs @@ -0,0 +1,119 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Threading.Tasks; +using Newtonsoft.Json; + +namespace TranscriptTestRunner.Authentication +{ + /// + /// Authentication class for the Test Client. + /// + public static class TestClientAuthentication + { + /// + /// Signs in to the bot. + /// + /// The sign in Url. + /// The Origin Header with key and value. + /// The Session information definition. + /// True, if SignIn is successful; otherwise false. + public static async Task SignInAsync(string url, KeyValuePair originHeader, SessionInfo sessionInfo) + { + var cookieContainer = new CookieContainer(); + using var handler = new HttpClientHandler + { + AllowAutoRedirect = false, + CookieContainer = cookieContainer + }; + + // We have a sign in url, which will produce multiple HTTP 302 for redirects + // This will path + // token service -> other services -> auth provider -> token service (post sign in)-> response with token + // When we receive the post sign in redirect, we add the cookie passed in the session info + // to test enhanced authentication. This in the scenarios happens by itself since browsers do this for us. + using var client = new HttpClient(handler); + client.DefaultRequestHeaders.Add(originHeader.Key, originHeader.Value); + + while (!string.IsNullOrEmpty(url)) + { + using var response = await client.GetAsync(new Uri(url)).ConfigureAwait(false); + var text = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + url = response.StatusCode == HttpStatusCode.Redirect + ? response.Headers.Location.OriginalString + : null; + + // Once the redirects are done, there is no more url. + // This means we did the entire loop. + if (url == null) + { + if (!response.IsSuccessStatusCode || !text.Contains("You are now signed in and can close this window.")) + { + throw new InvalidOperationException("An error occurred signing in"); + } + + return true; + } + + // If this is the post sign in callback, add the cookie and code challenge + // so that the token service gets the verification. + // Here we are simulating what WebChat does along with the browser cookies. + if (url.StartsWith("https://token.botframework.com/api/oauth/PostSignInCallback", StringComparison.Ordinal)) + { + url += $"&code_challenge={sessionInfo.SessionId}"; + cookieContainer.Add(sessionInfo.Cookie); + } + } + + throw new InvalidOperationException("Sign in did not succeed. Set a breakpoint in TestClientAuthentication.SignInAsync() to debug the redirect sequence."); + } + + /// + /// Obtains the from an URL endpoint with a token. + /// + /// The URL endpoint to obtain the from. + /// The token to use for authorization. + /// The Origin Header with key and value. + /// The Task. + public static async Task GetSessionInfoAsync(string url, string token, KeyValuePair originHeader) + { + // Set up cookie container to obtain response cookie + var cookies = new CookieContainer(); + using var handler = new HttpClientHandler { CookieContainer = cookies }; + + using var client = new HttpClient(handler); + + using var request = new HttpRequestMessage(HttpMethod.Get, url); + request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token); + + // We want to add the Origins header to this client as well + client.DefaultRequestHeaders.Add(originHeader.Key, originHeader.Value); + + using var response = await client.SendAsync(request).ConfigureAwait(false); + if (response.IsSuccessStatusCode) + { + // Extract cookie from cookies + var cookie = cookies.GetCookies(new Uri(url)).Cast().FirstOrDefault(c => c.Name == "webchat_session_v2"); + + // Extract session info from body + var body = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + var session = JsonConvert.DeserializeObject(body); + + return new SessionInfo + { + SessionId = session.SessionId, + Cookie = cookie + }; + } + + throw new InvalidOperationException("Failed to obtain session id"); + } + } +} diff --git a/tests/functional/Libraries/TranscriptTestRunner/Authentication/TokenInfo.cs b/tests/functional/Libraries/TranscriptTestRunner/Authentication/TokenInfo.cs new file mode 100644 index 0000000000..3415d629a4 --- /dev/null +++ b/tests/functional/Libraries/TranscriptTestRunner/Authentication/TokenInfo.cs @@ -0,0 +1,31 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Newtonsoft.Json; + +namespace TranscriptTestRunner.Authentication +{ + /// + /// Token definition. + /// + public class TokenInfo + { + /// + /// Gets or sets the token string. + /// + /// + /// The token string. + /// + [JsonProperty("token")] + public string Token { get; set; } + + /// + /// Gets or sets the conversation ID. + /// + /// + /// The conversation ID. + /// + [JsonProperty("conversationId")] + public string ConversationId { get; set; } + } +} diff --git a/tests/functional/Libraries/TranscriptTestRunner/README.md b/tests/functional/Libraries/TranscriptTestRunner/README.md new file mode 100644 index 0000000000..2d4a054bc8 --- /dev/null +++ b/tests/functional/Libraries/TranscriptTestRunner/README.md @@ -0,0 +1,196 @@ +# Transcript Test Runner + +## Summary + +Transcript Test Runner aims to simplify complex conversation scenarios against bots. +Starting from a transcript file containing the user-bot interactions to be tested, the Transcript Test Runner converts the transcript into a test script used to replicate the messages sent by the user and evaluate the answers from the bot. + +The Transcript Test Runner also offers the possibility of running the tests directly from a [test script](testscript.schema), adding flexibility to the assertions for the bot's messages. + +The Test Runner supports different formats of transcript files (Emulator, Teams, Slack, etc.) and +can be connected to the bots using different channels (*): +- DirectLineClient +- TeamsClient +- SlackClient +- FacebookClient + +(*) _This first version implements the DirectLineClient and uses Emulator transcript files. Stay tuned for the next features._ + +## User Step-by-step Guide +This step-by-step guide shows how to run a test with the `TestRunner` configuring a `DirectLine` client to communicate with the bots, and starting from an Emulator transcript file. + +### Using the TestRunner +1- Open your test project and install the `TranscriptTestRunner` package. + +2- In the `appsettings.json` file add the following variables: +```json +{ + "DIRECTLINE": "", + "BOTID": "" +} +``` + +> **Note:** For more information on how to obtain the bot `DIRECTLINE` secret key, follow [this guide](https://docs.microsoft.com/en-us/azure/bot-service/bot-service-channel-connect-directline). + +3- Add the `Emulator Transcript` file in a folder on your test project. To create a transcript file, follow [these steps](https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-debug-transcript?view=azure-bot-service-4.0#creatingstoring-a-bot-transcript-file). + +4- Add the `TestRunner` to your test. + +```csharp +// Create a DirectLine client with the `TestClientFactory`. +var directLineClient = new TestClientFactory(ClientType.DirectLine).GetTestClient(); + +// Instantiate the TestRunner and set up the DirectLine client. +var runner = new TestRunner(directLineClient); + +// Run the test recorded in the transcript file. +await runner.RunTestAsync(""); +``` +The `TestRunner` will convert the transcript file into a Test Script with the messages the user sends to the bot and the assertions that should be made to the bot's answers. + +The `TestRunner` also allows you to run the test from a custom Test Script file. + +### Using a Test Script file +A Test Script is basically a JSON file with an array of [TestScriptItem](TestScriptItem.cs) that will be used by the `TestRunner` as a test input. + +Create a test script file using this [JSON schema](testscript.schema). +```json +[ + { + "type": "conversationUpdate", + "role": "user" + }, + { + "type": "message", + "role": "bot", + "text": "Hello and welcome!", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Hello and welcome!'", + "inputHint == 'acceptingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "Hi" + } +] +``` +> **Note:** The JSON Schema is still a work in progress. + +Once the Test Script file is created, store it in a folder on your test project and pass it to the _RunTestAsync_ method of the TestRunner instead of the transcript file. + +### Creating tests programmatically +The `TestRunner` allows you to run tests in a programmatic way, sending Activities to the bot and Assert its reply. + +The following sample shows how to create a simple test programmatically. + +```csharp +// Create a DirectLine client instance that will be used to communicate with your bot. +var directLineClient = new TestClientFactory(ClientType.DirectLine).GetTestClient(); + +// Instantiate the TestRunner and set up the DirectLine client. +var runner = new TestRunner(directLineClient); + +// Send an Activity to the bot. +await runner.SendActivityAsync(new Activity(ActivityTypes.ConversationUpdate)); + +// Asserts the reply received from the bot. +await runner.AssertReplyAsync(activity => +{ + // Sample asserting Activity's type and text with xUnit. + Assert.Equal(ActivityTypes.Message, activity.Type); + Assert.Equal("Hello and welcome!", activity.Text); +}); +``` + +**Methods** +- **SendActivityAsync:** Used to send an Activity to the bot. +- **AssertReplyAsync:** Used to create custom assertions to an expected reply when the bot responds. +- **ClientSignInAsync:** Used to sign in to the bot. + +**ClientSignInAsync** + +This method is used when your bot has an authentication implementation and you want to sign in. + +The following sample shows how to use the `ClientSignInAsync` method to sign in. + +```csharp +// Create a DirectLine client instance that will be used to communicate with your bot. +var directLineClient = new TestClientFactory(ClientType.DirectLine).GetTestClient(); +// Instantiate the TestRunner and set up the DirectLine client. +var runner = new TestRunner(directLineClient); +var signInUrl = string.Empty; + +// Sends an Activity to the bot. +await runner.SendActivityAsync(new Activity { Type = ActivityTypes.Message, Text = "auth" }); + +// Obtain the sign in url. +await runner.AssertReplyAsync(activity => +{ + Assert.Equal(ActivityTypes.Message, activity.Type); + Assert.True(activity.Attachments.Count > 0); + + var attachment = JsonConvert.SerializeObject(activity.Attachments.FirstOrDefault().Content); + var card = JsonConvert.DeserializeObject(attachment); + signInUrl = card.Buttons[0].Value?.ToString(); + + Assert.False(string.IsNullOrEmpty(signInUrl)); +}); + +// Execute the sign in. +await runner.ClientSignInAsync(signInUrl); + +// If the sign in succeeded you can continue to execute the rest of the conversation +// either programmatically or with a test file. +``` + +### Setting up a Logger (Optional). +TestRunner uses [ILogger](https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.logging.ilogger) when it comes to display an output for each interaction between the test and the bot. + +The following sample shows how to create and pass an `ILogger` to the `TestRunner` with a `LoggerFactory`. + +```csharp +// Create a new Logger Factory. +var loggerFactory = LoggerFactory.Create(builder => +{ + // Add new Providers to tell the Logger where to output the data. + builder + // This provider will output the logs in the console. + .AddConsole() + // This provider will output the logs in the Debug output window. + .AddDebug(); +}); + +// Create the `Logger` instance with a Category name. +var logger = loggerFactory.CreateLogger("Category"); + +// Create a DirectLine client instance that will be used to communicate with your bot. +var directLineClient = new TestClientFactory(ClientType.DirectLine).GetTestClient(); +// Instantiate the TestRunner, set up the DirectLine client, and send the created `Logger`. +var runner = new TestRunner(directLineClient, logger); +``` + +### Extend TestRunner functionality +TestRunner has an Xunit extention to allow the users that prefer this test framework, to override the `AssertActivityAsync` with Xunit assertions. + +```csharp +public class XUnitTestRunner : TestRunner +{ + public XUnitTestRunner(TestClientBase client, ILogger logger = null) + : base(client, logger) + { + } + + protected override Task AssertActivityAsync(TestScriptItem expectedActivity, Activity actualActivity, CancellationToken cancellationToken = default) + { + Assert.Equal(expectedActivity.Type, actualActivity.Type); + Assert.Equal(expectedActivity.Text, actualActivity.Text); + + return Task.CompletedTask; + } +} +``` diff --git a/tests/functional/Libraries/TranscriptTestRunner/TestClientBase.cs b/tests/functional/Libraries/TranscriptTestRunner/TestClientBase.cs new file mode 100644 index 0000000000..3a6bd63b2a --- /dev/null +++ b/tests/functional/Libraries/TranscriptTestRunner/TestClientBase.cs @@ -0,0 +1,52 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Schema; + +namespace TranscriptTestRunner +{ + /// + /// Base class for test clients. + /// + /// + /// Test clients act as intermediaries between tests and bots. + /// + public abstract class TestClientBase + { + /// + /// Sends an to the bot. + /// + /// to send. + /// A that can be used by other objects + /// or threads to receive notice of cancellation. + /// A task that represents the work queued to execute. + public abstract Task SendActivityAsync(Activity activity, CancellationToken cancellationToken); + + /// + /// Gets the next reply from the bot. + /// + /// A that can be used by other objects + /// or threads to receive notice of cancellation. + /// A task that represents the work queued to execute. + public abstract Task GetNextReplyAsync(CancellationToken cancellationToken); + + /// + /// Signs in to the bot. + /// + /// The sign in Url. + /// True, if SignIn is successful; otherwise false. + public abstract Task SignInAsync(string signInUrl); + + /// + /// Uploads a file. + /// + /// The file to be uploaded. + /// A that can be used by other objects + /// or threads to receive notice of cancellation. + /// A task that represents the work queued to execute. + public abstract Task UploadAsync(Stream file, CancellationToken cancellationToken); + } +} diff --git a/tests/functional/Libraries/TranscriptTestRunner/TestClientFactory.cs b/tests/functional/Libraries/TranscriptTestRunner/TestClientFactory.cs new file mode 100644 index 0000000000..c8a752e6a3 --- /dev/null +++ b/tests/functional/Libraries/TranscriptTestRunner/TestClientFactory.cs @@ -0,0 +1,54 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.ComponentModel; +using Microsoft.Bot.Connector; +using Microsoft.Extensions.Logging; +using TranscriptTestRunner.TestClients; + +namespace TranscriptTestRunner +{ + /// + /// Factory class to create instances of . + /// + public class TestClientFactory + { + private readonly TestClientBase _testClientBase; + + /// + /// Initializes a new instance of the class. + /// + /// The type of channel to create based on the class. + /// The options to create the client. + /// An optional instance. + public TestClientFactory(string channel, DirectLineTestClientOptions options, ILogger logger) + { + switch (channel) + { + case Channels.Directline: + _testClientBase = new DirectLineTestClient(options, logger); + break; + case Channels.Emulator: + break; + case Channels.Msteams: + break; + case Channels.Facebook: + break; + case Channels.Slack: + break; + default: + throw new InvalidEnumArgumentException($"Invalid client type ({channel})"); + } + } + + /// + /// Gets the test client. + /// + /// The test client. + public TestClientBase GetTestClient() + { + return _testClientBase; + } + } +} diff --git a/tests/functional/Libraries/TranscriptTestRunner/TestClients/DirectLineTestClient.cs b/tests/functional/Libraries/TranscriptTestRunner/TestClients/DirectLineTestClient.cs new file mode 100644 index 0000000000..50f668d37a --- /dev/null +++ b/tests/functional/Libraries/TranscriptTestRunner/TestClients/DirectLineTestClient.cs @@ -0,0 +1,448 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Net.WebSockets; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Connector.DirectLine; +using Microsoft.Bot.Schema; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Microsoft.Rest.TransientFaultHandling; +using Newtonsoft.Json; +using TranscriptTestRunner.Authentication; +using Activity = Microsoft.Bot.Connector.DirectLine.Activity; +using ActivityTypes = Microsoft.Bot.Schema.ActivityTypes; +using Attachment = Microsoft.Bot.Connector.DirectLine.Attachment; +using BotActivity = Microsoft.Bot.Schema.Activity; +using BotChannelAccount = Microsoft.Bot.Schema.ChannelAccount; +using ChannelAccount = Microsoft.Bot.Connector.DirectLine.ChannelAccount; + +namespace TranscriptTestRunner.TestClients +{ + /// + /// DirectLine implementation of . + /// + public class DirectLineTestClient : TestClientBase, IDisposable + { + // DL client sample: https://github.com/microsoft/BotFramework-DirectLine-DotNet/tree/main/samples/core-DirectLine/DirectLineClient + // Stores the activities received from the bot + private readonly SortedDictionary _activityQueue = new SortedDictionary(); + + // Stores the activities received from the bot that don't immediately correlate with the last activity we received (an activity was skipped) + private readonly SortedDictionary _futureQueue = new SortedDictionary(); + + // Used to lock access to the internal lists + private readonly object _listLock = new object(); + + // Tracks the index of the last activity received + private int _lastActivityIndex = -1; + + private readonly KeyValuePair _originHeader = new KeyValuePair("Origin", $"https://botframework.test.com/{Guid.NewGuid()}"); + private readonly string _user = $"TestUser-{Guid.NewGuid()}"; + private Conversation _conversation; + private CancellationTokenSource _webSocketClientCts; + + // To detect redundant calls to dispose + private bool _disposed; + private DirectLineClient _dlClient; + private ClientWebSocket _webSocketClient; + private readonly ILogger _logger; + private readonly DirectLineTestClientOptions _options; + + /// + /// Initializes a new instance of the class. + /// + /// Options for the client configuration. + /// The logger. + public DirectLineTestClient(DirectLineTestClientOptions options, ILogger logger = null) + { + if (string.IsNullOrWhiteSpace(options.BotId)) + { + throw new ArgumentException("BotId not set."); + } + + if (string.IsNullOrWhiteSpace(options.DirectLineSecret)) + { + throw new ArgumentException("DirectLineSecret not set."); + } + + _options = options; + + _logger = logger ?? NullLogger.Instance; + } + + /// + public override async Task SendActivityAsync(BotActivity activity, CancellationToken cancellationToken) + { + if (_conversation == null) + { + await StartConversationAsync().ConfigureAwait(false); + + if (activity.Type == ActivityTypes.ConversationUpdate) + { + // StartConversationAsync sends a ConversationUpdate automatically. + // Ignore the activity sent if it is the first one we are sending to the bot and it is a ConversationUpdate. + // This can happen with recorded scripts where we get a conversation update from the transcript that we don't + // want to use. + return; + } + } + + var attachments = new List(); + + if (activity.Attachments != null && activity.Attachments.Any()) + { + foreach (var item in activity.Attachments) + { + attachments.Add(new Attachment + { + ContentType = item.ContentType, + ContentUrl = item.ContentUrl, + Content = item.Content, + Name = item.Name + }); + } + } + + var activityPost = new Activity + { + From = new ChannelAccount(_user), + Text = activity.Text, + Type = activity.Type, + Attachments = attachments, + }; + + _logger.LogDebug($"{DateTime.Now} Sending activity to conversation {_conversation.ConversationId}"); + _logger.LogDebug(JsonConvert.SerializeObject(activityPost, Formatting.Indented)); + + await _dlClient.Conversations.PostActivityAsync(_conversation.ConversationId, activityPost, cancellationToken).ConfigureAwait(false); + } + + /// + public override async Task GetNextReplyAsync(CancellationToken cancellationToken) + { + if (_conversation == null) + { + await StartConversationAsync().ConfigureAwait(false); + } + + // lock the list while work with it. + lock (_listLock) + { + if (_activityQueue.Any()) + { + // Return the first activity in the queue (if any) + var keyValuePair = _activityQueue.First(); + _activityQueue.Remove(keyValuePair.Key); + _logger.LogDebug($"{DateTime.Now} Popped ID {keyValuePair.Key} from queue (Activity ID is {keyValuePair.Value.Id}. Queue length is now: {_activityQueue.Count}."); + + return keyValuePair.Value; + } + } + + // No activities in the queue + return null; + } + + /// + public override async Task SignInAsync(string url) + { + const string sessionUrl = "https://directline.botframework.com/v3/directline/session/getsessionid"; + var directLineSession = await TestClientAuthentication.GetSessionInfoAsync(sessionUrl, _conversation.Token, _originHeader).ConfigureAwait(false); + return await TestClientAuthentication.SignInAsync(url, _originHeader, directLineSession).ConfigureAwait(false); + } + + /// + /// Frees resources. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + public override async Task UploadAsync(Stream file, CancellationToken cancellationToken) + { + await _dlClient.Conversations.UploadAsync(_conversation.ConversationId, file, _user, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// + /// Boolean value that determines whether to free resources or not. + protected virtual void Dispose(bool disposing) + { + if (_disposed) + { + return; + } + + if (disposing) + { + // Dispose managed objects owned by the class here. + _dlClient?.Dispose(); + + _webSocketClientCts?.Cancel(); + _webSocketClientCts?.Dispose(); + _webSocketClient?.Dispose(); + } + + _disposed = true; + } + + private async Task StartConversationAsync() + { + var tryCount = 0; + var maxTries = _options.StartConversationMaxAttempts; + while (tryCount < maxTries && !_activityQueue.Any() && !_futureQueue.Any()) + { + using var startConversationCts = new CancellationTokenSource(_options.StartConversationTimeout); + tryCount++; + try + { + _logger.LogDebug($"{DateTime.Now} Attempting to start conversation (try {tryCount} of {maxTries})."); + + // Obtain a token using the Direct Line secret + var tokenInfo = await GetDirectLineTokenAsync().ConfigureAwait(false); + + // Ensure we dispose the client after the retries (this helps us make sure we get a new conversation ID on each try) + _dlClient?.Dispose(); + + // Create directLine client from token and initialize settings. + _dlClient = new DirectLineClient(tokenInfo.Token); + _dlClient.SetRetryPolicy(new RetryPolicy(new HttpStatusCodeErrorDetectionStrategy(), 0)); + + // From now on, we'll add an Origin header in directLine calls, with + // the trusted origin we sent when acquiring the token as value. + _dlClient.HttpClient.DefaultRequestHeaders.Add(_originHeader.Key, _originHeader.Value); + + // Start the conversation now (this will send a ConversationUpdate to the bot) + _conversation = await _dlClient.Conversations.StartConversationAsync(startConversationCts.Token).ConfigureAwait(false); + _logger.LogDebug($"{DateTime.Now} Got conversation ID {_conversation.ConversationId} from direct line client."); + _logger.LogTrace($"{DateTime.Now} {Environment.NewLine}{JsonConvert.SerializeObject(_conversation, Formatting.Indented)}"); + + // Ensure we dispose the _webSocketClient after the retries. + _webSocketClient?.Dispose(); + + // Initialize web socket client and listener + _webSocketClient = new ClientWebSocket(); + await _webSocketClient.ConnectAsync(new Uri(_conversation.StreamUrl), startConversationCts.Token).ConfigureAwait(false); + + _logger.LogDebug($"{DateTime.Now} Connected to websocket, state is {_webSocketClient.State}."); + + // Block and wait for the first response to come in. + ActivitySet activitySet = null; + while (activitySet == null) + { + activitySet = await ReceiveActivityAsync(startConversationCts).ConfigureAwait(false); + if (activitySet != null) + { + ProcessActivitySet(activitySet); + } + else + { + _logger.LogDebug($"{DateTime.Now} Got empty ActivitySet while attempting to start the conversation."); + } + } + } + catch (Exception ex) + { + if (tryCount < maxTries) + { + _logger.LogDebug($"{DateTime.Now} Failed to start conversation (attempt {tryCount} of {maxTries}), retrying...{Environment.NewLine}Exception{Environment.NewLine}{ex}"); + } + else + { + _logger.LogCritical($"{DateTime.Now} Failed to start conversation after {maxTries} attempts.{Environment.NewLine}Exception{Environment.NewLine}{ex}"); + throw; + } + } + } + + // We have started a conversation and got at least one activity back. + // Start long running background task to read activities from the socket. + _webSocketClientCts = new CancellationTokenSource(); + _ = Task.Factory.StartNew(() => ListenAsync(_webSocketClientCts), _webSocketClientCts.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default); + } + + /// + /// This method is invoked as a background task and lists to directline websocket. + /// + /// The cancellation token for the operation. + private async Task ListenAsync(CancellationTokenSource cancellationToken) + { + try + { + while (!cancellationToken.IsCancellationRequested) + { + var activitySet = await ReceiveActivityAsync(cancellationToken).ConfigureAwait(false); + if (activitySet != null) + { + ProcessActivitySet(activitySet); + } + else + { + _logger.LogDebug($"{DateTime.Now} got empty ActivitySet."); + } + } + } + catch (Exception ex) + { + _logger.LogError(ex, "Error in ListenAsync"); + throw; + } + } + + private void ProcessActivitySet(ActivitySet activitySet) + { + // lock the list while work with it. + lock (_listLock) + { + foreach (var dlActivity in activitySet.Activities) + { + // Convert the DL Activity object to a BF activity object. + var botActivity = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(dlActivity)); + var activityIndex = int.Parse(botActivity.Id.Split('|')[1], CultureInfo.InvariantCulture); + if (activityIndex == _lastActivityIndex + 1) + { + ProcessActivity(botActivity, activityIndex); + _lastActivityIndex = activityIndex; + } + else + { + // Activities come out of sequence in some situations. + // put the activity in the future queue so we can process it once we fill in the gaps. + _futureQueue.Add(activityIndex, botActivity); + } + } + + // Process the future queue and append the activities if we filled in the gaps. + var queueCopy = new KeyValuePair[_futureQueue.Count]; + _futureQueue.CopyTo(queueCopy, 0); + foreach (var kvp in queueCopy) + { + if (kvp.Key == _lastActivityIndex + 1) + { + ProcessActivity(kvp.Value, kvp.Key); + _futureQueue.Remove(kvp.Key); + _lastActivityIndex = kvp.Key; + } + else + { + break; + } + } + } + } + + private async Task ReceiveActivityAsync(CancellationTokenSource cancellationToken) + { + var rcvBytes = new byte[16384]; + var rcvBuffer = new ArraySegment(rcvBytes); + + // Read messages from the socket. + var rcvMsg = new StringBuilder(); + WebSocketReceiveResult rcvResult; + do + { + _logger.LogDebug($"{DateTime.Now} Listening to web socket...."); + rcvResult = await _webSocketClient.ReceiveAsync(rcvBuffer, cancellationToken.Token).ConfigureAwait(false); + _logger.LogTrace($"{DateTime.Now} Received data from socket.{Environment.NewLine}Buffer offset: {rcvBuffer.Offset}.{Environment.NewLine}Buffer count: {rcvBuffer.Count}{Environment.NewLine}{JsonConvert.SerializeObject(rcvResult, Formatting.Indented)}"); + + if (rcvBuffer.Array != null) + { + rcvMsg.Append(Encoding.UTF8.GetString(rcvBuffer.Array, rcvBuffer.Offset, rcvResult.Count)); + } + else + { + _logger.LogDebug($"{DateTime.Now} Received data but the array was empty."); + } + } + while (!rcvResult.EndOfMessage); + + var message = rcvMsg.ToString(); + _logger.LogDebug($"{DateTime.Now} Activity received"); + _logger.LogDebug(message); + + var activitySet = JsonConvert.DeserializeObject(message); + return activitySet; + } + + private void ProcessActivity(BotActivity botActivity, int activitySeq) + { + if (botActivity.From.Id.StartsWith(_options.BotId, StringComparison.CurrentCultureIgnoreCase)) + { + botActivity.From.Role = RoleTypes.Bot; + botActivity.Recipient = new BotChannelAccount(role: RoleTypes.User); + + _activityQueue.Add(activitySeq, botActivity); + _logger.LogDebug($"{DateTime.Now} Added activity to queue (key is {activitySeq} activity ID is {botActivity.Id}. Activity queue length: {_activityQueue.Count} - Future activities queue length: {_futureQueue.Count}"); + } + } + + /// + /// Exchanges the directLine secret by an auth token. + /// + /// + /// Instead of generating a vanilla DirectLineClient with secret, + /// we obtain a directLine token with the secrets and then we use + /// that token to create the directLine client. + /// What this gives us is the ability to pass TrustedOrigins when obtaining the token, + /// which tests the enhanced authentication. + /// This endpoint is unfortunately not supported by the directLine client which is + /// why we add this custom code. + /// + /// A instance. + private async Task GetDirectLineTokenAsync() + { + using var client = new HttpClient(); + using var request = new HttpRequestMessage(HttpMethod.Post, "https://directline.botframework.com/v3/directline/tokens/generate"); + request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", _options.DirectLineSecret); + request.Content = new StringContent( + JsonConvert.SerializeObject(new + { + User = new { Id = _user }, + TrustedOrigins = new[] { _originHeader.Value } + }), Encoding.UTF8, + "application/json"); + + using var response = await client.SendAsync(request).ConfigureAwait(false); + try + { + response.EnsureSuccessStatusCode(); + } + catch + { + // Log headers and body to help troubleshoot issues (the exception itself will be handled upstream). + var sb = new StringBuilder(); + sb.AppendLine($"Failed to get a directline token (response status was: {response.StatusCode})"); + sb.AppendLine("Response headers:"); + sb.AppendLine(JsonConvert.SerializeObject(response.Headers, Formatting.Indented)); + sb.AppendLine("Response body:"); + sb.AppendLine(response.Content.ReadAsStringAsync().GetAwaiter().GetResult()); + _logger.LogWarning(sb.ToString()); + throw; + } + + // Extract token from response + var body = response.Content.ReadAsStringAsync().GetAwaiter().GetResult(); + var tokenInfo = JsonConvert.DeserializeObject(body); + if (string.IsNullOrWhiteSpace(tokenInfo?.Token)) + { + throw new InvalidOperationException("Failed to acquire directLine token"); + } + + return tokenInfo; + } + } +} diff --git a/tests/functional/Libraries/TranscriptTestRunner/TestClients/DirectLineTestClientOptions.cs b/tests/functional/Libraries/TranscriptTestRunner/TestClients/DirectLineTestClientOptions.cs new file mode 100644 index 0000000000..a65cbb2741 --- /dev/null +++ b/tests/functional/Libraries/TranscriptTestRunner/TestClients/DirectLineTestClientOptions.cs @@ -0,0 +1,39 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +namespace TranscriptTestRunner.TestClients +{ + /// + /// Class with the options needed to run a test against a TesClient. + /// + public class DirectLineTestClientOptions + { + /// + /// Gets or sets the Id of the host bot. + /// + /// The Id of the host bot. + public string BotId { get; set; } + + /// + /// Gets or sets the secret for the connection with the test client. + /// + /// The secret for the connection with the test client. + public string DirectLineSecret { get; set; } + + /// + /// Gets or sets the timeout for starting a conversation in milliseconds (default is 120000). + /// + /// + /// The timeout for starting a conversation (in milliseconds). + /// + public int StartConversationTimeout { get; set; } = 120000; + + /// + /// Gets or sets the maximum number of attempts to start a conversation (default is 3). + /// + /// + /// The maximum number of attempts to start a conversation. + /// + public int StartConversationMaxAttempts { get; set; } = 3; + } +} diff --git a/tests/functional/Libraries/TranscriptTestRunner/TestRunner.cs b/tests/functional/Libraries/TranscriptTestRunner/TestRunner.cs new file mode 100644 index 0000000000..211dda897d --- /dev/null +++ b/tests/functional/Libraries/TranscriptTestRunner/TestRunner.cs @@ -0,0 +1,324 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using AdaptiveExpressions; +using Microsoft.Bot.Schema; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Newtonsoft.Json; +using Activity = Microsoft.Bot.Schema.Activity; + +namespace TranscriptTestRunner +{ + /// + /// Test runner implementation. + /// + public class TestRunner + { + private readonly ILogger _logger; + private readonly int _replyTimeout; + private readonly TestClientBase _testClient; + private Stopwatch _stopwatch; + private string _testScriptPath; + + /// + /// Initializes a new instance of the class. + /// + /// Test client to use. + /// The timeout for waiting for replies (in seconds). Default is 180. + /// Optional. Instance of to use. + public TestRunner(TestClientBase client, int replyTimeout = 180, ILogger logger = null) + { + _testClient = client; + _replyTimeout = replyTimeout; + _logger = logger ?? NullLogger.Instance; + } + + private Stopwatch Stopwatch + { + get + { + if (_stopwatch == null) + { + _stopwatch = new Stopwatch(); + _stopwatch.Start(); + } + + return _stopwatch; + } + } + + /// + /// Executes a test script with the test steps. + /// + /// Path to the file to use. + /// Optional. Parameter dictionary, every key surrounded by brackets as such: ${key} + /// found in the script will be replaced by its value. + /// Optional. The name of the method caller. + /// Optional. A that can be used by other objects + /// or threads to receive notice of cancellation. + /// A task that represents the work queued to execute. + public async Task RunTestAsync(string testScriptPath, Dictionary scriptParams = null, [CallerMemberName] string callerName = "", CancellationToken cancellationToken = default) + { + var testFileName = $"{callerName} - {Path.GetFileNameWithoutExtension(testScriptPath)}"; + + _logger.LogInformation($"======== Running script: {testScriptPath} ========"); + + _testScriptPath = testScriptPath; + + await ExecuteTestScriptAsync(testFileName, cancellationToken, scriptParams).ConfigureAwait(false); + } + + /// + /// Sends an to the bot through the test client. + /// + /// to send. + /// Optional. A that can be used by other objects + /// or threads to receive notice of cancellation. + /// A task that represents the work queued to execute. + public async Task SendActivityAsync(Activity sendActivity, CancellationToken cancellationToken = default) + { + _logger.LogInformation("Elapsed Time: {Elapsed}, User sends: {Text}", Stopwatch.Elapsed, sendActivity.Text); + await _testClient.SendActivityAsync(sendActivity, cancellationToken).ConfigureAwait(false); + } + + /// + /// Uploads a file through the test client. + /// + /// The file to upload. + /// Optional. A that can be used by other objects + /// or threads to receive notice of cancellation. + /// A task that represents the work queued to execute. + public async Task UploadAsync(Stream file, CancellationToken cancellationToken = default) + { + _logger.LogInformation("Elapsed Time: {Elapsed}, Uploading file", Stopwatch.Elapsed); + await _testClient.UploadAsync(file, cancellationToken).ConfigureAwait(false); + } + + /// + /// Gets the next reply from the bot through the test client. + /// + /// Optional. A that can be used by other objects + /// or threads to receive notice of cancellation. + /// The reply Activity from the bot. + public async Task GetNextReplyAsync(CancellationToken cancellationToken = default) + { + var timeoutCheck = new Stopwatch(); + timeoutCheck.Start(); + while (true) + { + // Try to get the next activity. + var activity = await _testClient.GetNextReplyAsync(cancellationToken).ConfigureAwait(false); + if (activity != null && activity.Type != ActivityTypes.Trace && activity.Type != ActivityTypes.Typing) + { + _logger.LogInformation("Elapsed Time: {Elapsed}, Bot Responds: {Text}", Stopwatch.Elapsed, activity.Text); + + if (activity.Attachments != null && activity.Attachments.Any()) + { + foreach (var attachment in activity.Attachments) + { + _logger.LogInformation("Elapsed Time: {Elapsed}, Attachment included: {Type} - {Attachment}", Stopwatch.Elapsed, attachment.ContentType, attachment.Content); + } + } + + return activity; + } + + // Check timeout. + if (timeoutCheck.ElapsedMilliseconds > _replyTimeout * 1000) + { + throw new TimeoutException($"Operation timed out while waiting for a response from the bot after {timeoutCheck.ElapsedMilliseconds} milliseconds (current timeout is set to {_replyTimeout * 1000} milliseconds)."); + } + + // Wait a bit for the bot + await Task.Delay(TimeSpan.FromMilliseconds(100), cancellationToken).ConfigureAwait(false); + } + } + + /// + /// Validates the reply from the bot according to the validateAction parameter. + /// + /// The to validate the reply from the bot. + /// Optional. A that can be used by other objects + /// or threads to receive notice of cancellation. + /// A task that represents the work queued to execute. + public async Task AssertReplyAsync(Action validateAction, CancellationToken cancellationToken = default) + { + var nextReply = await GetNextReplyAsync(cancellationToken).ConfigureAwait(false); + validateAction(nextReply); + } + + /// + /// Signs in to the bot through the test client. + /// + /// The sign in Url. + /// A task that represents the work queued to execute. + public async Task ClientSignInAsync(string signInUrl) + { + if (string.IsNullOrEmpty(signInUrl)) + { + throw new ArgumentNullException(signInUrl); + } + + if (!signInUrl.StartsWith("https://", StringComparison.Ordinal)) + { + throw new ArgumentException($"Sign in url is badly formatted. Url received: {signInUrl}"); + } + + await _testClient.SignInAsync(signInUrl).ConfigureAwait(false); + } + + /// + /// Validates an according to an expected activity . + /// + /// The expected activity of type . + /// The actual response received. + /// Optional. A that can be used by other objects + /// or threads to receive notice of cancellation. + /// A task that represents the work queued to execute. + protected virtual Task AssertActivityAsync(TestScriptItem expectedActivity, Activity actualActivity, CancellationToken cancellationToken = default) + { + var templateRegex = new Regex(@"\{\{[\w\s]*\}\}"); + + foreach (var assertion in expectedActivity.Assertions) + { + var template = templateRegex.Match(assertion); + + if (template.Success) + { + ValidateVariable(template.Value, actualActivity); + } + + var (result, error) = Expression.Parse(assertion).TryEvaluate(actualActivity); + + if (!result) + { + throw new InvalidOperationException($"Assertion failed: {assertion}."); + } + + if (error != null) + { + throw new InvalidOperationException(error); + } + } + + return Task.CompletedTask; + } + + /// + /// Validates the variable date in the bots message with the value between double curly braces. + /// + /// The assertion containing the variable. + /// The activity with the message containing the date. + protected void ValidateVariable(string value, Activity actualActivity) + { + var dateRegex = new Regex(@"(\d{1,4}([.\-/])\d{1,2}([.\-/])\d{1,4})"); + var wordRegex = new Regex(@"[\w]+"); + + var dateMatch = dateRegex.Match(actualActivity.Text); + var resultExpression = string.Empty; + var expectedExpression = wordRegex.Match(value).Value; + var dateValue = string.Empty; + + if (dateMatch.Success) + { + dateValue = dateMatch.Value; + var date = Convert.ToDateTime(dateMatch.Value, CultureInfo.InvariantCulture); + resultExpression = EvaluateDate(date); + } + + if (resultExpression != expectedExpression) + { + throw new InvalidOperationException($"Assertion failed. The variable '{expectedExpression}' does not match with the value {dateValue}."); + } + + actualActivity.Text = actualActivity.Text.Replace(dateMatch.Value, value); + } + + private static string EvaluateDate(DateTime date) + { + var currentDate = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture); + var inputDate = date.ToString("yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture); + var expression = $"dateReadBack('{currentDate}', '{inputDate}')"; + var parsed = Expression.Parse(expression); + + if (parsed == null) + { + throw new InvalidOperationException("Null parsed expression"); + } + + // String.Empty is used to get the result of the prebuilt function in the parsed expression. + var (result, msg) = parsed.TryEvaluate(string.Empty); + + if (msg != null) + { + throw new InvalidOperationException("An error has occurred while evaluating the date"); + } + + return result.ToString(); + } + + private async Task ExecuteTestScriptAsync(string callerName, CancellationToken cancellationToken, Dictionary scriptParams = null) + { + _logger.LogInformation($"\n------ Starting test {callerName} ----------"); + + using var reader = new StreamReader(_testScriptPath); + var plainTestScript = await reader.ReadToEndAsync().ConfigureAwait(false); + + if (scriptParams != null && scriptParams.Any()) + { + var replacement = string.Join("|", scriptParams.Keys.Select(k => $@"\$\{{\s?{k}\s?\}}").ToArray()); + plainTestScript = Regex.Replace(plainTestScript, replacement, m => scriptParams[m.Value.Trim(new char[] { '$', '{', '}' })]); + } + + var testScript = JsonConvert.DeserializeObject(plainTestScript); + + foreach (var scriptActivity in testScript.Items) + { + switch (scriptActivity.Role) + { + case RoleTypes.User: + // Send the activity. + var sendActivity = new Activity + { + Type = scriptActivity.Type, + Text = scriptActivity.Text + }; + + await SendActivityAsync(sendActivity, cancellationToken).ConfigureAwait(false); + break; + + case RoleTypes.Bot: + if (IgnoreScriptActivity(scriptActivity)) + { + break; + } + + var nextReply = await GetNextReplyAsync(cancellationToken).ConfigureAwait(false); + await AssertActivityAsync(scriptActivity, nextReply, cancellationToken).ConfigureAwait(false); + break; + + default: + throw new InvalidOperationException($"Invalid script activity type {scriptActivity.Role}."); + } + } + + _logger.LogInformation($"======== Finished running script: {Stopwatch.Elapsed} =============\n"); + } + + private bool IgnoreScriptActivity(TestScriptItem activity) + { + return activity.Type == ActivityTypes.Trace || activity.Type == ActivityTypes.Typing; + } + } +} diff --git a/tests/functional/Libraries/TranscriptTestRunner/TestScript.cs b/tests/functional/Libraries/TranscriptTestRunner/TestScript.cs new file mode 100644 index 0000000000..0682a98c80 --- /dev/null +++ b/tests/functional/Libraries/TranscriptTestRunner/TestScript.cs @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace TranscriptTestRunner +{ + /// + /// A Test Script that can be used for functional testing of bots. + /// + public class TestScript + { + /// + /// Gets the test script items. + /// + /// + /// The sequence of test scripts to perform to validate the bots behavior. + /// + [JsonProperty("items")] + public List Items { get; } = new List(); + } +} diff --git a/tests/functional/Libraries/TranscriptTestRunner/TestScriptItem.cs b/tests/functional/Libraries/TranscriptTestRunner/TestScriptItem.cs new file mode 100644 index 0000000000..24171c0912 --- /dev/null +++ b/tests/functional/Libraries/TranscriptTestRunner/TestScriptItem.cs @@ -0,0 +1,59 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace TranscriptTestRunner +{ + /// + /// representation of an activity. + /// + public class TestScriptItem + { + /// + /// Gets or sets the activity type. + /// + /// + /// The activity type. + /// + [JsonProperty("type")] + public string Type { get; set; } + + /// + /// Gets or sets the activity role. + /// + /// + /// The activity role. + /// + [JsonProperty("role")] + public string Role { get; set; } + + /// + /// Gets or sets the activity text. + /// + /// + /// The activity text. + /// + [JsonProperty("text")] + public string Text { get; set; } + + /// + /// Gets the activity assertion collection. + /// + /// + /// The activity assertion collection. + /// + [JsonProperty("assertions")] + public List Assertions { get; } = new List(); + + /// + /// Prevents the serializer from creating the assertions collection if its empty. + /// + /// true if the assertions collection should be serialized. + public bool ShouldSerializeAssertions() + { + return Assertions.Count > 0; + } + } +} diff --git a/tests/functional/Libraries/TranscriptTestRunner/TranscriptTestRunner.csproj b/tests/functional/Libraries/TranscriptTestRunner/TranscriptTestRunner.csproj new file mode 100644 index 0000000000..357cf4ee10 --- /dev/null +++ b/tests/functional/Libraries/TranscriptTestRunner/TranscriptTestRunner.csproj @@ -0,0 +1,24 @@ + + + + Library + netstandard2.0 + latest + + + + bin\$(Configuration)\netstandard2.0\TranscriptTestRunner.xml + + + + + + + + + + + + + + diff --git a/tests/functional/Libraries/TranscriptTestRunner/XUnit/XUnitTestRunner.cs b/tests/functional/Libraries/TranscriptTestRunner/XUnit/XUnitTestRunner.cs new file mode 100644 index 0000000000..25add7bf40 --- /dev/null +++ b/tests/functional/Libraries/TranscriptTestRunner/XUnit/XUnitTestRunner.cs @@ -0,0 +1,60 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using AdaptiveExpressions; +using Microsoft.Bot.Schema; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Xunit; + +namespace TranscriptTestRunner.XUnit +{ + /// + /// XUnit extension of . + /// + public class XUnitTestRunner : TestRunner + { + /// + /// Initializes a new instance of the class. + /// + /// Test client to use. + /// The timeout for waiting for replies (in seconds). Default is 180. + /// Optional. Instance of to use. + public XUnitTestRunner(TestClientBase client, int replyTimeout = 180, ILogger logger = null) + : base(client, replyTimeout, logger) + { + } + + /// + /// Validates an according to an expected activity using XUnit. + /// + /// The expected activity of type . + /// The actual response received. + /// Optional. A that can be used by other objects + /// or threads to receive notice of cancellation. + /// A task that represents the work queued to execute. + protected override Task AssertActivityAsync(TestScriptItem expectedActivity, Activity actualActivity, CancellationToken cancellationToken = default) + { + var templateRegex = new Regex(@"\{\{[\w\s]*\}\}"); + + foreach (var assertion in expectedActivity.Assertions) + { + var template = templateRegex.Match(assertion); + + if (template.Success) + { + ValidateVariable(template.Value, actualActivity); + } + + var (result, _) = Expression.Parse(assertion).TryEvaluate(actualActivity); + + Assert.True(result, $"The bot's response was different than expected. The assertion: \"{assertion}\" was evaluated as false.\nExpected Activity:\n{JsonConvert.SerializeObject(expectedActivity, Formatting.Indented)}\nActual Activity:\n{JsonConvert.SerializeObject(actualActivity, Formatting.Indented)}"); + } + + return Task.CompletedTask; + } + } +} diff --git a/tests/functional/Libraries/TranscriptTestRunner/testscript.schema b/tests/functional/Libraries/TranscriptTestRunner/testscript.schema new file mode 100644 index 0000000000..f45715c6a1 --- /dev/null +++ b/tests/functional/Libraries/TranscriptTestRunner/testscript.schema @@ -0,0 +1,171 @@ +{ + "$schema": "https://json-schema.org/draft-07/schema#", + "type": "object", + "description": "Schema for TestScript items.", + "additionalProperties": false, + "definitions": { + "TestScriptItem": { + "type": "object", + "description": "TestScript item.", + "title": "TestScriptItem", + "additionalProperties": false, + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "description": "The activity type.", + "title": "type", + "oneOf": [ + { + "const": "message", + "description": "The type value for message activities.", + "title": "message" + }, + { + "const": "contactRelationUpdate", + "description": "The type value for contact relation update activities.", + "title": "contactRelationUpdate" + }, + { + "const": "conversationUpdate", + "description": "The type value for conversation update activities.", + "title": "conversationUpdate" + }, + { + "const": "typing", + "description": "The type value for typing activities.", + "title": "typing" + }, + { + "const": "endOfConversation", + "description": "The type value for end of conversation activities.", + "title": "endOfConversation" + }, + { + "const": "event", + "description": "The type value for event activities.", + "title": "event" + }, + { + "const": "invoke", + "description": "The type value for invoke activities.", + "title": "invoke" + }, + { + "const": "deleteUserData", + "description": "The type value for delete user data activities.", + "title": "deleteUserData" + }, + { + "const": "messageUpdate", + "description": "The type value for message update activities.", + "title": "messageUpdate" + }, + { + "const": "messageDelete", + "description": "The type value for message delete activities.", + "title": "messageDelete" + }, + { + "const": "installationUpdate", + "description": "The type value for installation update activities.", + "title": "installationUpdate" + }, + { + "const": "messageReaction", + "description": "The type value for message reaction activities.", + "title": "messageReaction" + }, + { + "const": "suggestion", + "description": "The type value for suggestion activities.", + "title": "suggestion" + }, + { + "const": "trace", + "description": "The type value for trace activities.", + "title": "trace" + }, + { + "const": "handoff", + "description": "The type value for handoff activities.", + "title": "handoff" + } + ] + }, + "role": { + "type": "string", + "description": "Role of the entity behind the account.", + "title": "role", + "oneOf": [ + { + "const": "user", + "description": "User" + }, + { + "const": "bot", + "description": "Bot" + } + ] + }, + "text": { + "type": "string", + "description": "The text content of the message.", + "title": "text" + }, + "assertions": { + "type": "array", + "title": "Assertions to perform to validate Activity.", + "description": "Sequence of expressions which must evaluate to true.", + "items": { + "$ref": "#/definitions/condition", + "title": "Assertion", + "description": "Assertion as an expression, which must evaluate to true or it will fail the test script." + } + } + } + }, + "condition": { + "$role": "expression", + "description": "Boolean constant or expression to evaluate.", + "title": "condition", + "oneOf": [ + { + "$ref": "#/definitions/expression" + } + ] + }, + "expression": { + "$role": "expression", + "type": "string", + "description": "Expression to evaluate. More information at\n https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-concept-adaptive-expressions?view=azure-bot-service-4.0&tabs=comparison#operators", + "title": "expression", + "examples": [ + "type", + "recipient.role", + "from.name", + "from.role", + "text", + "inputHint" + ] + } + }, + "properties": { + "$schema": { + "type": "string", + "description": "Schema.", + "title": "$schema" + }, + "items": { + "type": "array", + "description": "List of TestScript items.", + "title": "items", + "additionalItems": false, + "items": { + "$ref": "#/definitions/TestScriptItem" + } + } + } +} diff --git a/tests/functional/PackageReferences.props b/tests/functional/PackageReferences.props new file mode 100644 index 0000000000..8bae20ab44 --- /dev/null +++ b/tests/functional/PackageReferences.props @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/tests/functional/README.md b/tests/functional/README.md new file mode 100644 index 0000000000..2f12fba0b2 --- /dev/null +++ b/tests/functional/README.md @@ -0,0 +1,25 @@ +# Bot Framework Functional Tests + +This repository contains functional tests for the different [Bot Framework SDK](https://github.com/microsoft/botframework-sdk) tools. + +- [Skill functional tests](Tests/SkillFunctionalTests) aims to automate the testing of Host and Skill interactions through several scenarios in all available programming languages. +- [Transcript Test Runner](Libraries/TranscriptTestRunner) aims to simplify complex conversation scenarios against bots, starting from a transcript file with a user-bot recorded conversation. +- [Transcript Converter](Libraries/TranscriptConverter) takes a conversation transcript and converts it into JSON to be consumed by other projects. + +Head to [Docs](./Docs/) directory for more information. + +## Build Status + + | Branch | Description | Deploy Bot Resources Status | Run Test Scenarios Status | + |--------|-------------|-----------------------------|---------------------------| + | Main | 4.14.* Nightly Run | [![Build Status](https://dev.azure.com/FuseLabs/SDK_v4/_apis/build/status/FunctionalTests/02.A.%20Deploy%20skill%20bots%20(daily)?branchName=main)](https://dev.azure.com/FuseLabs/SDK_v4/_build/latest?definitionId=1229&branchName=main) | [![Build Status](https://dev.azure.com/FuseLabs/SDK_v4/_apis/build/status/FunctionalTests/02.B.%20Run%20skill%20test%20scenarios%20(daily)?branchName=main)](https://dev.azure.com/FuseLabs/SDK_v4/_build/latest?definitionId=1237&branchName=main)| + +## Contributing + +This project welcomes contributions and suggestions. Most contributions require you to agree to a +Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit . + +When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA. + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). +For more information, see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. diff --git a/tests/functional/SECURITY.md b/tests/functional/SECURITY.md new file mode 100644 index 0000000000..e0dfff56a9 --- /dev/null +++ b/tests/functional/SECURITY.md @@ -0,0 +1,41 @@ + + +## Security + +Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). + +If you believe you have found a security vulnerability in any Microsoft-owned repository that meets Microsoft's [Microsoft's definition of a security vulnerability](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc751383(v=technet.10)) of a security vulnerability, please report it to us as described below. + +## Reporting Security Issues + +**Please do not report security vulnerabilities through public GitHub issues.** + +Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). + +If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the the [Microsoft Security Response Center PGP Key page](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). + +You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). + +Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: + + * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) + * Full paths of source file(s) related to the manifestation of the issue + * The location of the affected source code (tag/branch/commit or direct URL) + * Any special configuration required to reproduce the issue + * Step-by-step instructions to reproduce the issue + * Proof-of-concept or exploit code (if possible) + * Impact of the issue, including how an attacker might exploit the issue + +This information will help us triage your report more quickly. + +If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) page for more details about our active programs. + +## Preferred Languages + +We prefer all communications to be in English. + +## Policy + +Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://www.microsoft.com/en-us/msrc/cvd). + + diff --git a/tests/functional/SkillFunctionalTests.sln b/tests/functional/SkillFunctionalTests.sln new file mode 100644 index 0000000000..5c48eeb48d --- /dev/null +++ b/tests/functional/SkillFunctionalTests.sln @@ -0,0 +1,59 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29806.167 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkillFunctionalTests", "Tests\SkillFunctionalTests\SkillFunctionalTests.csproj", "{DE0231D9-A9BE-4D4C-A830-7ADCF28EA5D6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TranscriptTestRunner", "Libraries\TranscriptTestRunner\TranscriptTestRunner.csproj", "{65C3A2E0-FDC5-4132-9980-3BAE230E9F2E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{BCBFF5A2-F2CD-4F82-BCD1-ED8E7950D82F}" + ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig + BotFramework-FunctionalTests.ruleset = BotFramework-FunctionalTests.ruleset + Directory.Build.props = Directory.Build.props + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TranscriptConverter", "Libraries\TranscriptConverter\TranscriptConverter.csproj", "{EF963904-79CB-4222-811A-E24B73E5DC1A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{B5E35C94-0880-4AEB-8F3C-940FECA7A8C7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{5A0C68F1-6CA7-43D7-8F01-70A484D8D412}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TranscriptTestRunnerTests", "Tests\TranscriptTestRunnerTests\TranscriptTestRunnerTests.csproj", "{5CAE9F80-9BD3-480C-8504-552B31B265E0}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DE0231D9-A9BE-4D4C-A830-7ADCF28EA5D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DE0231D9-A9BE-4D4C-A830-7ADCF28EA5D6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DE0231D9-A9BE-4D4C-A830-7ADCF28EA5D6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DE0231D9-A9BE-4D4C-A830-7ADCF28EA5D6}.Release|Any CPU.Build.0 = Release|Any CPU + {65C3A2E0-FDC5-4132-9980-3BAE230E9F2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {65C3A2E0-FDC5-4132-9980-3BAE230E9F2E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {65C3A2E0-FDC5-4132-9980-3BAE230E9F2E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {65C3A2E0-FDC5-4132-9980-3BAE230E9F2E}.Release|Any CPU.Build.0 = Release|Any CPU + {EF963904-79CB-4222-811A-E24B73E5DC1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EF963904-79CB-4222-811A-E24B73E5DC1A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EF963904-79CB-4222-811A-E24B73E5DC1A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EF963904-79CB-4222-811A-E24B73E5DC1A}.Release|Any CPU.Build.0 = Release|Any CPU + {5CAE9F80-9BD3-480C-8504-552B31B265E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5CAE9F80-9BD3-480C-8504-552B31B265E0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5CAE9F80-9BD3-480C-8504-552B31B265E0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5CAE9F80-9BD3-480C-8504-552B31B265E0}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {DE0231D9-A9BE-4D4C-A830-7ADCF28EA5D6} = {5A0C68F1-6CA7-43D7-8F01-70A484D8D412} + {65C3A2E0-FDC5-4132-9980-3BAE230E9F2E} = {B5E35C94-0880-4AEB-8F3C-940FECA7A8C7} + {5CAE9F80-9BD3-480C-8504-552B31B265E0} = {5A0C68F1-6CA7-43D7-8F01-70A484D8D412} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {CF79F565-B676-4679-83A1-DDE5CB729723} + EndGlobalSection +EndGlobal diff --git a/tests/functional/Tests/Directory.Build.props b/tests/functional/Tests/Directory.Build.props new file mode 100644 index 0000000000..83fc7a9e36 --- /dev/null +++ b/tests/functional/Tests/Directory.Build.props @@ -0,0 +1,16 @@ + + + + true + + + + + + $(NoWarn);SA0001;CS1573;CS1591;CS1712;SX1309 + + + + + + \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/CardActionsTests.cs b/tests/functional/Tests/SkillFunctionalTests/CardActions/CardActionsTests.cs new file mode 100644 index 0000000000..25391c6fa0 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/CardActionsTests.cs @@ -0,0 +1,120 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using Microsoft.Bot.Connector; +using Microsoft.Bot.Schema; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using SkillFunctionalTests.Common; +using TranscriptTestRunner; +using TranscriptTestRunner.XUnit; +using Xunit; +using Xunit.Abstractions; + +namespace SkillFunctionalTests.CardActions +{ + [Trait("TestCategory", "CardActions")] + public class CardActionsTests : ScriptTestBase + { + private readonly string _testScriptsFolder = Directory.GetCurrentDirectory() + @"/CardActions/TestScripts"; + + public CardActionsTests(ITestOutputHelper output) + : base(output) + { + } + + public static IEnumerable TestCases() + { + var channelIds = new List { Channels.Directline }; + + var deliverModes = new List + { + DeliveryModes.Normal, + DeliveryModes.ExpectReplies + }; + + var hostBots = new List + { + HostBot.WaterfallHostBotDotNet, + HostBot.WaterfallHostBotJS, + HostBot.WaterfallHostBotPython, + + // TODO: Enable this when the port to composer is ready + //HostBot.ComposerHostBotDotNet + }; + + var targetSkills = new List + { + SkillBotNames.WaterfallSkillBotDotNet, + SkillBotNames.WaterfallSkillBotJS, + SkillBotNames.WaterfallSkillBotPython, + + // TODO: Enable this when the port to composer is ready + //SkillBotNames.ComposerSkillBotDotNet + }; + + var scripts = new List + { + "BotAction.json", + "TaskModule.json", + "SubmitAction.json", + "Hero.json", + "Thumbnail.json", + "Receipt.json", + "SignIn.json", + "Carousel.json", + "List.json", + "O365.json", + "Animation.json", + "Audio.json", + "Video.json" + }; + + var testCaseBuilder = new TestCaseBuilder(); + + // This local function is used to exclude ExpectReplies, O365 and WaterfallSkillBotPython test cases + static bool ShouldExclude(TestCase testCase) + { + if (testCase.Script == "O365.json") + { + // BUG: O365 fails with ExpectReplies for WaterfallSkillBotPython (remove when https://github.com/microsoft/BotFramework-FunctionalTests/issues/328 is fixed). + if (testCase.TargetSkill == SkillBotNames.WaterfallSkillBotPython && testCase.DeliveryMode == DeliveryModes.ExpectReplies) + { + return true; + } + } + + return false; + } + + var testCases = testCaseBuilder.BuildTestCases(channelIds, deliverModes, hostBots, targetSkills, scripts, ShouldExclude); + foreach (var testCase in testCases) + { + yield return testCase; + } + } + + [Theory] + [MemberData(nameof(TestCases))] + public async Task RunTestCases(TestCaseDataObject testData) + { + var testCase = testData.GetObject(); + Logger.LogInformation(JsonConvert.SerializeObject(testCase, Formatting.Indented)); + + var options = TestClientOptions[testCase.HostBot]; + var runner = new XUnitTestRunner(new TestClientFactory(testCase.ChannelId, options, Logger).GetTestClient(), TestRequestTimeout, Logger); + + var testParams = new Dictionary + { + { "DeliveryMode", testCase.DeliveryMode }, + { "TargetSkill", testCase.TargetSkill } + }; + + await runner.RunTestAsync(Path.Combine(_testScriptsFolder, "WaterfallGreeting.json"), testParams); + await runner.RunTestAsync(Path.Combine(_testScriptsFolder, testCase.Script), testParams); + } + } +} diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Animation.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Animation.json new file mode 100644 index 0000000000..237082091f --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Animation.json @@ -0,0 +1,58 @@ +{ + "items": [ + { + "type": "message", + "role": "user", + "text": "Animation" + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "attachmentLayout == 'list'", + "inputHint == 'acceptingInput'", + "attachments[0].contentType == 'application/vnd.microsoft.card.animation'", + "attachments[0].content.title == 'Animation Card'", + "attachments[0].content.autostart == True" + ] + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "speak == 'What card do you want?'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "end" + }, + { + "type": "message", + "role": "bot", + "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Animation.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Animation.transcript new file mode 100644 index 0000000000..a2c1586a72 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Animation.transcript @@ -0,0 +1,165 @@ +[ + { + "channelData": { + "clientActivityID": "1611839814734xukiykq7r6", + "clientTimestamp": "2021-01-28T13:16:54.734Z" + }, + "text": "Animation", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "04e743bc-b422-4dc5-8a8a-6d006bfc6661", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:16:54.799Z", + "conversation": { + "id": "063c4460-616b-11eb-881a-afe376da3863|livechat" + }, + "id": "1776d1f0-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:16:54-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "063c4460-616b-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "04e743bc-b422-4dc5-8a8a-6d006bfc6661", + "role": "user" + }, + "attachmentLayout": "list", + "locale": "", + "inputHint": "acceptingInput", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.animation", + "content": { + "title": "Animation Card", + "media": [ + { + "url": "https://media3.giphy.com/media/xT0xeJpnrWC4XWblEk/giphy.gif?cid=ecf05e47mye7k75sup6tcmadoom8p1q8u03a7g2p3f76upp9&rid=giphy.gif" + } + ], + "autostart": true + } + } + ], + "entities": [], + "replyToId": "1776d1f0-616b-11eb-b46e-c3c3213a748e", + "id": "183d0820-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:16:56-03:00", + "timestamp": "2021-01-28T13:16:56.097Z" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "063c4460-616b-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "04e743bc-b422-4dc5-8a8a-6d006bfc6661", + "role": "user" + }, + "locale": "", + "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", + "speak": "What card do you want?", + "inputHint": "expectingInput", + "attachments": [], + "entities": [], + "replyToId": "1776d1f0-616b-11eb-b46e-c3c3213a748e", + "id": "18699660-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:16:56-03:00", + "timestamp": "2021-01-28T13:16:56.390Z" + }, + { + "channelData": { + "clientActivityID": "16118398192100re8kcctazwj", + "clientTimestamp": "2021-01-28T13:16:59.210Z" + }, + "text": "end", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "04e743bc-b422-4dc5-8a8a-6d006bfc6661", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:16:59.271Z", + "conversation": { + "id": "063c4460-616b-11eb-881a-afe376da3863|livechat" + }, + "id": "1a213170-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:16:59-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "063c4460-616b-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "04e743bc-b422-4dc5-8a8a-6d006bfc6661", + "role": "user" + }, + "locale": "", + "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "1a213170-616b-11eb-b46e-c3c3213a748e", + "id": "1adc9230-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:17:00-03:00", + "timestamp": "2021-01-28T13:17:00.498Z" + } +] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Audio.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Audio.json new file mode 100644 index 0000000000..2f7f16a576 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Audio.json @@ -0,0 +1,58 @@ +{ + "items": [ + { + "type": "message", + "role": "user", + "text": "Audio" + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "attachmentLayout == 'list'", + "inputHint == 'acceptingInput'", + "attachments[0].contentType == 'application/vnd.microsoft.card.audio'", + "attachments[0].content.title == 'Audio Card'", + "attachments[0].content.autoloop == True" + ] + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "speak == 'What card do you want?'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "end" + }, + { + "type": "message", + "role": "bot", + "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Audio.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Audio.transcript new file mode 100644 index 0000000000..4b83bab546 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Audio.transcript @@ -0,0 +1,165 @@ +[ + { + "channelData": { + "clientActivityID": "1611839872412avts1ortbzo", + "clientTimestamp": "2021-01-28T13:17:52.412Z" + }, + "text": "Audio", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "e0681749-455e-4df6-ac1d-cce532da5262", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:17:52.463Z", + "conversation": { + "id": "2f090f90-616b-11eb-881a-afe376da3863|livechat" + }, + "id": "39d5a5f0-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:17:52-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "2f090f90-616b-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "e0681749-455e-4df6-ac1d-cce532da5262", + "role": "user" + }, + "attachmentLayout": "list", + "locale": "", + "inputHint": "acceptingInput", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.audio", + "content": { + "title": "Audio Card", + "media": [ + { + "url": "https://bffnwaterfallskillbotdotnet.azurewebsites.net/api/music" + } + ], + "autoloop": true + } + } + ], + "entities": [], + "replyToId": "39d5a5f0-616b-11eb-b46e-c3c3213a748e", + "id": "3a6c1990-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:17:53-03:00", + "timestamp": "2021-01-28T13:17:53.449Z" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "2f090f90-616b-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "e0681749-455e-4df6-ac1d-cce532da5262", + "role": "user" + }, + "locale": "", + "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", + "speak": "What card do you want?", + "inputHint": "expectingInput", + "attachments": [], + "entities": [], + "replyToId": "39d5a5f0-616b-11eb-b46e-c3c3213a748e", + "id": "3a98f5f0-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:17:53-03:00", + "timestamp": "2021-01-28T13:17:53.743Z" + }, + { + "channelData": { + "clientActivityID": "16118398766380tfc3r379ha", + "clientTimestamp": "2021-01-28T13:17:56.638Z" + }, + "text": "end", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "e0681749-455e-4df6-ac1d-cce532da5262", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:17:56.693Z", + "conversation": { + "id": "2f090f90-616b-11eb-881a-afe376da3863|livechat" + }, + "id": "3c5b3f60-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:17:56-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "2f090f90-616b-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "e0681749-455e-4df6-ac1d-cce532da5262", + "role": "user" + }, + "locale": "", + "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "3c5b3f60-616b-11eb-b46e-c3c3213a748e", + "id": "3cfcfda0-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:17:57-03:00", + "timestamp": "2021-01-28T13:17:57.754Z" + } +] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/BotAction.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/BotAction.json new file mode 100644 index 0000000000..f3b7f58912 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/BotAction.json @@ -0,0 +1,77 @@ +{ + "items": [ + { + "type": "message", + "role": "user", + "text": "AdaptiveCardBotAction" + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "attachmentLayout == 'list'", + "inputHint == 'acceptingInput'", + "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'", + "attachments[0].content.type == 'AdaptiveCard'", + "attachments[0].content.body[0].type == 'TextBlock'", + "attachments[0].content.body[0].text == 'Bot Builder actions'", + "attachments[0].content.actions[0].type == 'Action.Submit'", + "attachments[0].content.actions[0].data.msteams.type == 'imBack'", + "attachments[0].content.actions[0].data.msteams.value == 'text'", + "attachments[0].content.actions[0].title == 'imBack'", + "attachments[0].content.actions[1].type == 'Action.Submit'", + "attachments[0].content.actions[1].data.msteams.type == 'messageBack'", + "attachments[0].content.actions[1].data.msteams.value.key == 'value'", + "attachments[0].content.actions[1].title == 'message back'", + "attachments[0].content.actions[2].type == 'Action.Submit'", + "attachments[0].content.actions[2].data.msteams.type == 'messageBack'", + "attachments[0].content.actions[2].data.msteams.text == 'text received by bots'", + "attachments[0].content.actions[2].data.msteams.displayText == 'display text message back'", + "attachments[0].content.actions[2].data.msteams.value.key == 'value'", + "attachments[0].content.actions[2].title == 'message back local echo'", + "attachments[0].content.actions[3].type == 'Action.Submit'", + "attachments[0].content.actions[3].data.msteams.type == 'invoke'", + "attachments[0].content.actions[3].data.msteams.value.key == 'value'", + "attachments[0].content.actions[3].title == 'invoke'" + ] + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "speak == 'What card do you want?'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "end" + }, + { + "type": "message", + "role": "bot", + "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + } + ] +} diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/BotAction.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/BotAction.transcript new file mode 100644 index 0000000000..089ea60de3 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/BotAction.transcript @@ -0,0 +1,216 @@ +[ + { + "channelData": { + "clientActivityID": "1611838440775fk6vbo5p5nw", + "clientTimestamp": "2021-01-28T12:54:00.775Z" + }, + "text": "AdaptiveCardBotAction", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T12:54:00.810Z", + "conversation": { + "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" + }, + "id": "e480bca0-6167-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T09:54:00-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", + "role": "user" + }, + "attachmentLayout": "list", + "locale": "", + "inputHint": "acceptingInput", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.adaptive", + "content": { + "type": "AdaptiveCard", + "version": "1.2", + "body": [ + { + "type": "TextBlock", + "text": "Bot Builder actions" + } + ], + "actions": [ + { + "type": "Action.Submit", + "data": { + "msteams": { + "type": "imBack", + "value": "text" + } + }, + "title": "imBack" + }, + { + "type": "Action.Submit", + "data": { + "msteams": { + "type": "messageBack", + "value": { + "key": "value" + } + } + }, + "title": "message back" + }, + { + "type": "Action.Submit", + "data": { + "msteams": { + "type": "messageBack", + "text": "text received by bots", + "displayText": "display text message back", + "value": { + "key": "value" + } + } + }, + "title": "message back local echo" + }, + { + "type": "Action.Submit", + "data": { + "msteams": { + "type": "invoke", + "value": { + "key": "value" + } + } + }, + "title": "invoke" + } + ] + } + } + ], + "entities": [], + "replyToId": "e480bca0-6167-11eb-b46e-c3c3213a748e", + "id": "e59fc130-6167-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T09:54:02-03:00", + "timestamp": "2021-01-28T12:54:02.691Z" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", + "role": "user" + }, + "locale": "", + "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", + "speak": "What card do you want?", + "inputHint": "expectingInput", + "attachments": [], + "entities": [], + "replyToId": "e480bca0-6167-11eb-b46e-c3c3213a748e", + "id": "e5cb3e00-6167-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T09:54:02-03:00", + "timestamp": "2021-01-28T12:54:02.976Z" + }, + { + "channelData": { + "clientActivityID": "1611838581343cy25vk7jmo9", + "clientTimestamp": "2021-01-28T12:56:21.344Z" + }, + "text": "end", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T12:56:21.384Z", + "conversation": { + "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" + }, + "id": "384aa080-6168-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T09:56:21-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", + "role": "user" + }, + "locale": "", + "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "384aa080-6168-11eb-b46e-c3c3213a748e", + "id": "3948af90-6168-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T09:56:23-03:00", + "timestamp": "2021-01-28T12:56:23.049Z" + } +] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Carousel.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Carousel.json new file mode 100644 index 0000000000..1bf2d60fcd --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Carousel.json @@ -0,0 +1,76 @@ +{ + "items": [ + { + "type": "message", + "role": "user", + "text": "Carousel" + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "attachmentLayout == 'carousel'", + "inputHint == 'acceptingInput'", + "attachments[0].contentType == 'application/vnd.microsoft.card.hero'", + "attachments[0].content.title == 'BotFramework Hero Card'", + "attachments[0].content.subtitle == 'Microsoft Bot Framework'", + "attachments[0].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'", + "attachments[0].content.buttons[0].type == 'openUrl'", + "attachments[0].content.buttons[0].title == 'Get Started'", + "attachments[0].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'", + "attachments[1].contentType == 'application/vnd.microsoft.card.hero'", + "attachments[1].content.title == 'BotFramework Hero Card'", + "attachments[1].content.subtitle == 'Microsoft Bot Framework'", + "attachments[1].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'", + "attachments[1].content.buttons[0].type == 'openUrl'", + "attachments[1].content.buttons[0].title == 'Get Started'", + "attachments[1].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'", + "attachments[2].contentType == 'application/vnd.microsoft.card.hero'", + "attachments[2].content.title == 'BotFramework Hero Card'", + "attachments[2].content.subtitle == 'Microsoft Bot Framework'", + "attachments[2].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'", + "attachments[2].content.buttons[0].type == 'openUrl'", + "attachments[2].content.buttons[0].title == 'Get Started'", + "attachments[2].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'" + ] + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "speak == 'What card do you want?'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "end" + }, + { + "type": "message", + "role": "bot", + "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Carousel.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Carousel.transcript new file mode 100644 index 0000000000..1a9de47a96 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Carousel.transcript @@ -0,0 +1,213 @@ +[ + { + "channelData": { + "clientActivityID": "1611839522508zaakfbpcfw", + "clientTimestamp": "2021-01-28T13:12:02.508Z" + }, + "text": "Carousel", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "43ff7934-8228-49a8-9925-6d469752f983", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:12:02.562Z", + "conversation": { + "id": "60a4e8e0-616a-11eb-881a-afe376da3863|livechat" + }, + "id": "6946fe20-616a-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:12:02-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "60a4e8e0-616a-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "43ff7934-8228-49a8-9925-6d469752f983", + "role": "user" + }, + "attachmentLayout": "carousel", + "locale": "", + "inputHint": "acceptingInput", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.hero", + "content": { + "title": "BotFramework Hero Card", + "subtitle": "Microsoft Bot Framework", + "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.", + "images": [ + { + "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg" + } + ], + "buttons": [ + { + "type": "openUrl", + "title": "Get Started", + "value": "https://docs.microsoft.com/bot-framework" + } + ] + } + }, + { + "contentType": "application/vnd.microsoft.card.hero", + "content": { + "title": "BotFramework Hero Card", + "subtitle": "Microsoft Bot Framework", + "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.", + "images": [ + { + "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg" + } + ], + "buttons": [ + { + "type": "openUrl", + "title": "Get Started", + "value": "https://docs.microsoft.com/bot-framework" + } + ] + } + }, + { + "contentType": "application/vnd.microsoft.card.hero", + "content": { + "title": "BotFramework Hero Card", + "subtitle": "Microsoft Bot Framework", + "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.", + "images": [ + { + "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg" + } + ], + "buttons": [ + { + "type": "openUrl", + "title": "Get Started", + "value": "https://docs.microsoft.com/bot-framework" + } + ] + } + } + ], + "entities": [], + "replyToId": "6946fe20-616a-11eb-b46e-c3c3213a748e", + "id": "69fedc70-616a-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:12:03-03:00", + "timestamp": "2021-01-28T13:12:03.767Z" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "60a4e8e0-616a-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "43ff7934-8228-49a8-9925-6d469752f983", + "role": "user" + }, + "locale": "", + "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", + "speak": "What card do you want?", + "inputHint": "expectingInput", + "attachments": [], + "entities": [], + "replyToId": "6946fe20-616a-11eb-b46e-c3c3213a748e", + "id": "6a2af580-616a-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:12:04-03:00", + "timestamp": "2021-01-28T13:12:04.056Z" + }, + { + "channelData": { + "clientActivityID": "1611839526614stj36f82vy", + "clientTimestamp": "2021-01-28T13:12:06.614Z" + }, + "text": "end", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "43ff7934-8228-49a8-9925-6d469752f983", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:12:06.671Z", + "conversation": { + "id": "60a4e8e0-616a-11eb-881a-afe376da3863|livechat" + }, + "id": "6bb9f9f0-616a-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:12:06-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "60a4e8e0-616a-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "43ff7934-8228-49a8-9925-6d469752f983", + "role": "user" + }, + "locale": "", + "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "6bb9f9f0-616a-11eb-b46e-c3c3213a748e", + "id": "6c559db0-616a-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:12:07-03:00", + "timestamp": "2021-01-28T13:12:07.691Z" + } +] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Hero.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Hero.json new file mode 100644 index 0000000000..d913abad6a --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Hero.json @@ -0,0 +1,62 @@ +{ + "items": [ + { + "type": "message", + "role": "user", + "text": "Hero" + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "attachmentLayout == 'list'", + "inputHint == 'acceptingInput'", + "attachments[0].contentType == 'application/vnd.microsoft.card.hero'", + "attachments[0].content.title == 'BotFramework Hero Card'", + "attachments[0].content.subtitle == 'Microsoft Bot Framework'", + "attachments[0].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'", + "attachments[0].content.buttons[0].type == 'openUrl'", + "attachments[0].content.buttons[0].title == 'Get Started'", + "attachments[0].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'" + ] + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "speak == 'What card do you want?'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "end" + }, + { + "type": "message", + "role": "bot", + "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Hero.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Hero.transcript new file mode 100644 index 0000000000..9a95ed0474 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Hero.transcript @@ -0,0 +1,173 @@ +[ + { + "channelData": { + "clientActivityID": "1611839251501nwivvhmw61i", + "clientTimestamp": "2021-01-28T13:07:31.501Z" + }, + "text": "Hero", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "f748dcdb-2d9b-4540-a2dc-341070aaf910", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:07:31.554Z", + "conversation": { + "id": "bd2d1200-6169-11eb-881a-afe376da3863|livechat" + }, + "id": "c7be7420-6169-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:07:31-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "bd2d1200-6169-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "f748dcdb-2d9b-4540-a2dc-341070aaf910", + "role": "user" + }, + "attachmentLayout": "list", + "locale": "", + "inputHint": "acceptingInput", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.hero", + "content": { + "title": "BotFramework Hero Card", + "subtitle": "Microsoft Bot Framework", + "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.", + "images": [ + { + "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg" + } + ], + "buttons": [ + { + "type": "openUrl", + "title": "Get Started", + "value": "https://docs.microsoft.com/bot-framework" + } + ] + } + } + ], + "entities": [], + "replyToId": "c7be7420-6169-11eb-b46e-c3c3213a748e", + "id": "c87519f0-6169-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:07:32-03:00", + "timestamp": "2021-01-28T13:07:32.750Z" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "bd2d1200-6169-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "f748dcdb-2d9b-4540-a2dc-341070aaf910", + "role": "user" + }, + "locale": "", + "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", + "speak": "What card do you want?", + "inputHint": "expectingInput", + "attachments": [], + "entities": [], + "replyToId": "c7be7420-6169-11eb-b46e-c3c3213a748e", + "id": "c8e67960-6169-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:07:33-03:00", + "timestamp": "2021-01-28T13:07:33.494Z" + }, + { + "channelData": { + "clientActivityID": "1611839255359ffrgmvahfew", + "clientTimestamp": "2021-01-28T13:07:35.359Z" + }, + "text": "end", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "f748dcdb-2d9b-4540-a2dc-341070aaf910", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:07:35.435Z", + "conversation": { + "id": "bd2d1200-6169-11eb-881a-afe376da3863|livechat" + }, + "id": "ca0ea5b0-6169-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:07:35-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "bd2d1200-6169-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "f748dcdb-2d9b-4540-a2dc-341070aaf910", + "role": "user" + }, + "locale": "", + "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "ca0ea5b0-6169-11eb-b46e-c3c3213a748e", + "id": "cab03ce0-6169-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:07:36-03:00", + "timestamp": "2021-01-28T13:07:36.494Z" + } +] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/List.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/List.json new file mode 100644 index 0000000000..d34f09b8de --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/List.json @@ -0,0 +1,76 @@ +{ + "items": [ + { + "type": "message", + "role": "user", + "text": "List" + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "attachmentLayout == 'list'", + "inputHint == 'acceptingInput'", + "attachments[0].contentType == 'application/vnd.microsoft.card.hero'", + "attachments[0].content.title == 'BotFramework Hero Card'", + "attachments[0].content.subtitle == 'Microsoft Bot Framework'", + "attachments[0].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'", + "attachments[0].content.buttons[0].type == 'openUrl'", + "attachments[0].content.buttons[0].title == 'Get Started'", + "attachments[0].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'", + "attachments[1].contentType == 'application/vnd.microsoft.card.hero'", + "attachments[1].content.title == 'BotFramework Hero Card'", + "attachments[1].content.subtitle == 'Microsoft Bot Framework'", + "attachments[1].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'", + "attachments[1].content.buttons[0].type == 'openUrl'", + "attachments[1].content.buttons[0].title == 'Get Started'", + "attachments[1].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'", + "attachments[2].contentType == 'application/vnd.microsoft.card.hero'", + "attachments[2].content.title == 'BotFramework Hero Card'", + "attachments[2].content.subtitle == 'Microsoft Bot Framework'", + "attachments[2].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'", + "attachments[2].content.buttons[0].type == 'openUrl'", + "attachments[2].content.buttons[0].title == 'Get Started'", + "attachments[2].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'" + ] + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "speak == 'What card do you want?'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "end" + }, + { + "type": "message", + "role": "bot", + "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/List.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/List.transcript new file mode 100644 index 0000000000..ccad6421be --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/List.transcript @@ -0,0 +1,213 @@ +[ + { + "channelData": { + "clientActivityID": "1611839575098y19me2gcp5b", + "clientTimestamp": "2021-01-28T13:12:55.098Z" + }, + "text": "List", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "59cdcc89-e282-4417-9822-4d725675243b", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:12:55.143Z", + "conversation": { + "id": "7e64e060-616a-11eb-881a-afe376da3863|livechat" + }, + "id": "889e3770-616a-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:12:55-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "7e64e060-616a-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "59cdcc89-e282-4417-9822-4d725675243b", + "role": "user" + }, + "attachmentLayout": "list", + "locale": "", + "inputHint": "acceptingInput", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.hero", + "content": { + "title": "BotFramework Hero Card", + "subtitle": "Microsoft Bot Framework", + "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.", + "images": [ + { + "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg" + } + ], + "buttons": [ + { + "type": "openUrl", + "title": "Get Started", + "value": "https://docs.microsoft.com/bot-framework" + } + ] + } + }, + { + "contentType": "application/vnd.microsoft.card.hero", + "content": { + "title": "BotFramework Hero Card", + "subtitle": "Microsoft Bot Framework", + "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.", + "images": [ + { + "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg" + } + ], + "buttons": [ + { + "type": "openUrl", + "title": "Get Started", + "value": "https://docs.microsoft.com/bot-framework" + } + ] + } + }, + { + "contentType": "application/vnd.microsoft.card.hero", + "content": { + "title": "BotFramework Hero Card", + "subtitle": "Microsoft Bot Framework", + "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.", + "images": [ + { + "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg" + } + ], + "buttons": [ + { + "type": "openUrl", + "title": "Get Started", + "value": "https://docs.microsoft.com/bot-framework" + } + ] + } + } + ], + "entities": [], + "replyToId": "889e3770-616a-11eb-b46e-c3c3213a748e", + "id": "89448990-616a-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:12:56-03:00", + "timestamp": "2021-01-28T13:12:56.233Z" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "7e64e060-616a-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "59cdcc89-e282-4417-9822-4d725675243b", + "role": "user" + }, + "locale": "", + "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", + "speak": "What card do you want?", + "inputHint": "expectingInput", + "attachments": [], + "entities": [], + "replyToId": "889e3770-616a-11eb-b46e-c3c3213a748e", + "id": "8970a2a0-616a-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:12:56-03:00", + "timestamp": "2021-01-28T13:12:56.522Z" + }, + { + "channelData": { + "clientActivityID": "1611839578738d2iy2wsylg", + "clientTimestamp": "2021-01-28T13:12:58.738Z" + }, + "text": "end", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "59cdcc89-e282-4417-9822-4d725675243b", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:12:58.788Z", + "conversation": { + "id": "7e64e060-616a-11eb-881a-afe376da3863|livechat" + }, + "id": "8aca6640-616a-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:12:58-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "7e64e060-616a-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "59cdcc89-e282-4417-9822-4d725675243b", + "role": "user" + }, + "locale": "", + "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "8aca6640-616a-11eb-b46e-c3c3213a748e", + "id": "8b62d5b0-616a-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:12:59-03:00", + "timestamp": "2021-01-28T13:12:59.787Z" + } +] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/O365.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/O365.json new file mode 100644 index 0000000000..a36b000dfe --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/O365.json @@ -0,0 +1,181 @@ +{ + "items": [ + { + "type": "message", + "role": "user", + "text": "o365" + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "attachmentLayout == 'list'", + "inputHint == 'acceptingInput'", + "attachments[0].contentType == 'application/vnd.microsoft.teams.card.o365connector'", + "attachments[0].content.title == 'card title'", + "attachments[0].content.text == 'card text'", + "attachments[0].content.summary == 'O365 card summary'", + "attachments[0].content.themeColor == '#E67A9E'", + "attachments[0].content.sections[0].title == '**section title**'", + "attachments[0].content.sections[0].text == 'section text'", + "attachments[0].content.sections[0].activityTitle == 'activity title'", + "attachments[0].content.sections[0].activitySubtitle == 'activity subtitle'", + "attachments[0].content.sections[0].activityText == 'activity text'", + "attachments[0].content.sections[0].activityImage == 'http://connectorsdemo.azurewebsites.net/images/MSC12_Oscar_002.jpg'", + "attachments[0].content.sections[0].activityImageType == 'avatar'", + "attachments[0].content.sections[0].markdown == True", + "attachments[0].content.sections[0].facts[0].name == 'Fact name 1'", + "attachments[0].content.sections[0].facts[0].value == 'Fact value 1'", + "attachments[0].content.sections[0].facts[1].name == 'Fact name 2'", + "attachments[0].content.sections[0].facts[1].value == 'Fact value 2'", + "attachments[0].content.sections[0].images[0].image == 'http://connectorsdemo.azurewebsites.net/images/MicrosoftSurface_024_Cafe_OH-06315_VS_R1c.jpg'", + "attachments[0].content.sections[0].images[0].title == 'image 1'", + "attachments[0].content.sections[0].images[1].image == 'http://connectorsdemo.azurewebsites.net/images/WIN12_Scene_01.jpg'", + "attachments[0].content.sections[0].images[1].title == 'image 2'", + "attachments[0].content.sections[0].images[2].image == 'http://connectorsdemo.azurewebsites.net/images/WIN12_Anthony_02.jpg'", + "attachments[0].content.sections[0].images[2].title == 'image 3'", + "attachments[0].content.potentialAction[0].@type == 'ActionCard'", + "attachments[0].content.potentialAction[0].inputs[0].@type == 'MultichoiceInput'", + "attachments[0].content.potentialAction[0].inputs[0].choices[0].display == 'Choice 1'", + "attachments[0].content.potentialAction[0].inputs[0].choices[1].display == 'Choice 2'", + "attachments[0].content.potentialAction[0].inputs[0].choices[2].display == 'Choice 3'", + "attachments[0].content.potentialAction[0].inputs[0].style == 'expanded'", + "attachments[0].content.potentialAction[0].inputs[0].isMultiSelect == True", + "attachments[0].content.potentialAction[0].inputs[0].id == 'list-1'", + "attachments[0].content.potentialAction[0].inputs[0].isRequired == True", + "attachments[0].content.potentialAction[0].inputs[0].title == 'Pick multiple options'", + "attachments[0].content.potentialAction[0].inputs[1].@type == 'MultichoiceInput'", + "attachments[0].content.potentialAction[0].inputs[1].choices[0].display == 'Choice 4'", + "attachments[0].content.potentialAction[0].inputs[1].choices[1].display == 'Choice 5'", + "attachments[0].content.potentialAction[0].inputs[1].choices[2].display == 'Choice 6'", + "attachments[0].content.potentialAction[0].inputs[1].style == 'compact'", + "attachments[0].content.potentialAction[0].inputs[1].isMultiSelect == True", + "attachments[0].content.potentialAction[0].inputs[1].id == 'list-2'", + "attachments[0].content.potentialAction[0].inputs[1].isRequired == True", + "attachments[0].content.potentialAction[0].inputs[1].title == 'Pick multiple options'", + "attachments[0].content.potentialAction[0].inputs[2].@type == 'MultichoiceInput'", + "attachments[0].content.potentialAction[0].inputs[2].choices[0].display == 'Choice a'", + "attachments[0].content.potentialAction[0].inputs[2].choices[0].value == 'a'", + "attachments[0].content.potentialAction[0].inputs[2].choices[1].display == 'Choice b'", + "attachments[0].content.potentialAction[0].inputs[2].choices[1].value == 'b'", + "attachments[0].content.potentialAction[0].inputs[2].choices[2].display == 'Choice c'", + "attachments[0].content.potentialAction[0].inputs[2].choices[2].value == 'c'", + "attachments[0].content.potentialAction[0].inputs[2].style == 'expanded'", + "attachments[0].content.potentialAction[0].inputs[2].isMultiSelect == False", + "attachments[0].content.potentialAction[0].inputs[2].id == 'list-3'", + "attachments[0].content.potentialAction[0].inputs[2].isRequired == False", + "attachments[0].content.potentialAction[0].inputs[2].title == 'Pick an option'", + "attachments[0].content.potentialAction[0].inputs[3].@type == 'MultichoiceInput'", + "attachments[0].content.potentialAction[0].inputs[3].choices[0].display == 'Choice x'", + "attachments[0].content.potentialAction[0].inputs[3].choices[0].value == 'x'", + "attachments[0].content.potentialAction[0].inputs[3].choices[1].display == 'Choice y'", + "attachments[0].content.potentialAction[0].inputs[3].choices[1].value == 'y'", + "attachments[0].content.potentialAction[0].inputs[3].choices[2].display == 'Choice z'", + "attachments[0].content.potentialAction[0].inputs[3].choices[2].value == 'z'", + "attachments[0].content.potentialAction[0].inputs[3].style == 'compact'", + "attachments[0].content.potentialAction[0].inputs[3].isMultiSelect == False", + "attachments[0].content.potentialAction[0].inputs[3].id == 'list-4'", + "attachments[0].content.potentialAction[0].inputs[3].isRequired == False", + "attachments[0].content.potentialAction[0].inputs[3].title == 'Pick an option'", + "attachments[0].content.potentialAction[0].actions[0].@type == 'HttpPOST'", + "attachments[0].content.potentialAction[0].actions[0].name == 'Send'", + "attachments[0].content.potentialAction[0].actions[0].@id == 'card-1-btn-1'", + "attachments[0].content.potentialAction[0].name == 'Multiple Choice'", + "attachments[0].content.potentialAction[0].@id == 'card-1'", + "attachments[0].content.potentialAction[1].@type == 'ActionCard'", + "attachments[0].content.potentialAction[1].inputs[0].@type == 'TextInput'", + "attachments[0].content.potentialAction[1].inputs[0].isMultiline == True", + "attachments[0].content.potentialAction[1].inputs[0].id == 'text-1'", + "attachments[0].content.potentialAction[1].inputs[0].isRequired == False", + "attachments[0].content.potentialAction[1].inputs[0].title == 'multiline, no maxLength'", + "attachments[0].content.potentialAction[1].inputs[1].@type == 'TextInput'", + "attachments[0].content.potentialAction[1].inputs[1].isMultiline == False", + "attachments[0].content.potentialAction[1].inputs[1].id == 'text-2'", + "attachments[0].content.potentialAction[1].inputs[1].isRequired == False", + "attachments[0].content.potentialAction[1].inputs[1].title == 'single line, no maxLength'", + "attachments[0].content.potentialAction[1].inputs[2].@type == 'TextInput'", + "attachments[0].content.potentialAction[1].inputs[2].isMultiline == True", + "attachments[0].content.potentialAction[1].inputs[2].id == 'text-3'", + "attachments[0].content.potentialAction[1].inputs[2].isRequired == True", + "attachments[0].content.potentialAction[1].inputs[2].title == 'multiline, max len = 10, isRequired'", + "attachments[0].content.potentialAction[1].inputs[3].@type == 'TextInput'", + "attachments[0].content.potentialAction[1].inputs[3].isMultiline == False", + "attachments[0].content.potentialAction[1].inputs[3].id == 'text-4'", + "attachments[0].content.potentialAction[1].inputs[3].isRequired == True", + "attachments[0].content.potentialAction[1].inputs[3].title == 'single line, max len = 10, isRequired'", + "attachments[0].content.potentialAction[1].actions[0].@type == 'HttpPOST'", + "attachments[0].content.potentialAction[1].actions[0].name == 'Send'", + "attachments[0].content.potentialAction[1].actions[0].@id == 'card-2-btn-1'", + "attachments[0].content.potentialAction[1].name == 'Text Input'", + "attachments[0].content.potentialAction[1].@id == 'card-2'", + "attachments[0].content.potentialAction[2].@type == 'ActionCard'", + "attachments[0].content.potentialAction[2].inputs[0].@type == 'DateInput'", + "attachments[0].content.potentialAction[2].inputs[0].includeTime == True", + "attachments[0].content.potentialAction[2].inputs[0].id == 'date-1'", + "attachments[0].content.potentialAction[2].inputs[0].isRequired == True", + "attachments[0].content.potentialAction[2].inputs[0].title == 'date with time'", + "attachments[0].content.potentialAction[2].inputs[1].@type == 'DateInput'", + "attachments[0].content.potentialAction[2].inputs[1].includeTime == False", + "attachments[0].content.potentialAction[2].inputs[1].id == 'date-2'", + "attachments[0].content.potentialAction[2].inputs[1].isRequired == False", + "attachments[0].content.potentialAction[2].inputs[1].title == 'date only'", + "attachments[0].content.potentialAction[2].actions[0].@type == 'HttpPOST'", + "attachments[0].content.potentialAction[2].actions[0].name == 'Send'", + "attachments[0].content.potentialAction[2].actions[0].@id == 'card-3-btn-1'", + "attachments[0].content.potentialAction[2].name == 'Date Input'", + "attachments[0].content.potentialAction[2].@id == 'card-3'", + "attachments[0].content.potentialAction[3].@type == 'ViewAction'", + "attachments[0].content.potentialAction[3].name == 'View Action'", + "attachments[0].content.potentialAction[4].@type == 'OpenUri'", + "attachments[0].content.potentialAction[4].targets[0].os == 'default'", + "attachments[0].content.potentialAction[4].targets[0].uri == 'http://microsoft.com'", + "attachments[0].content.potentialAction[4].targets[1].os == 'iOS'", + "attachments[0].content.potentialAction[4].targets[1].uri == 'http://microsoft.com'", + "attachments[0].content.potentialAction[4].targets[2].os == 'android'", + "attachments[0].content.potentialAction[4].targets[2].uri == 'http://microsoft.com'", + "attachments[0].content.potentialAction[4].targets[3].os == 'windows'", + "attachments[0].content.potentialAction[4].targets[3].uri == 'http://microsoft.com'", + "attachments[0].content.potentialAction[4].name == 'Open Uri'", + "attachments[0].content.potentialAction[4].@id == 'open-uri'" + ] + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "speak == 'What card do you want?'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "end" + }, + { + "type": "message", + "role": "bot", + "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/O365.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/O365.transcript new file mode 100644 index 0000000000..35486a16ed --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/O365.transcript @@ -0,0 +1,407 @@ +[ + { + "channelData": { + "clientActivityID": "16097853343944p9zoiqzu9d", + "clientTimestamp": "2021-01-04T18:35:34.394Z" + }, + "text": "o365", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "9dbd973e-a896-4b91-9d00-e98bb8dec6a2", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-04T18:35:34.423Z", + "conversation": { + "id": "9a3c8340-4ebb-11eb-9fc9-afbd749ec1ea|livechat" + }, + "id": "a1bbea70-4ebb-11eb-8029-87a6e92fcaab", + "localTimestamp": "2021-01-04T15:35:34-03:00", + "recipient": { + "id": "fce93a20-4e9c-11eb-9fc9-afbd749ec1ea", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://0e141a8d6e98.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://0e141a8d6e98.ngrok.io", + "channelId": "emulator", + "from": { + "id": "fce93a20-4e9c-11eb-9fc9-afbd749ec1ea", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "9a3c8340-4ebb-11eb-9fc9-afbd749ec1ea|livechat" + }, + "recipient": { + "id": "9dbd973e-a896-4b91-9d00-e98bb8dec6a2", + "role": "user" + }, + "attachmentLayout": "list", + "locale": "", + "inputHint": "acceptingInput", + "attachments": [ + { + "contentType": "application/vnd.microsoft.teams.card.o365connector", + "content": { + "title": "card title", + "text": "card text", + "summary": "O365 card summary", + "themeColor": "#E67A9E", + "sections": [ + { + "title": "**section title**", + "text": "section text", + "activityTitle": "activity title", + "activitySubtitle": "activity subtitle", + "activityText": "activity text", + "activityImage": "http://connectorsdemo.azurewebsites.net/images/MSC12_Oscar_002.jpg", + "activityImageType": "avatar", + "markdown": true, + "facts": [ + { + "name": "Fact name 1", + "value": "Fact value 1" + }, + { + "name": "Fact name 2", + "value": "Fact value 2" + } + ], + "images": [ + { + "image": "http://connectorsdemo.azurewebsites.net/images/MicrosoftSurface_024_Cafe_OH-06315_VS_R1c.jpg", + "title": "image 1" + }, + { + "image": "http://connectorsdemo.azurewebsites.net/images/WIN12_Scene_01.jpg", + "title": "image 2" + }, + { + "image": "http://connectorsdemo.azurewebsites.net/images/WIN12_Anthony_02.jpg", + "title": "image 3" + } + ] + } + ], + "potentialAction": [ + { + "@type": "ActionCard", + "inputs": [ + { + "@type": "MultichoiceInput", + "choices": [ + { + "display": "Choice 1", + "value": "1" + }, + { + "display": "Choice 2", + "value": "2" + }, + { + "display": "Choice 3", + "value": "3" + } + ], + "style": "expanded", + "isMultiSelect": true, + "id": "list-1", + "isRequired": true, + "title": "Pick multiple options" + }, + { + "@type": "MultichoiceInput", + "choices": [ + { + "display": "Choice 4", + "value": "4" + }, + { + "display": "Choice 5", + "value": "5" + }, + { + "display": "Choice 6", + "value": "6" + } + ], + "style": "compact", + "isMultiSelect": true, + "id": "list-2", + "isRequired": true, + "title": "Pick multiple options" + }, + { + "@type": "MultichoiceInput", + "choices": [ + { + "display": "Choice a", + "value": "a" + }, + { + "display": "Choice b", + "value": "b" + }, + { + "display": "Choice c", + "value": "c" + } + ], + "style": "expanded", + "isMultiSelect": false, + "id": "list-3", + "isRequired": false, + "title": "Pick an option" + }, + { + "@type": "MultichoiceInput", + "choices": [ + { + "display": "Choice x", + "value": "x" + }, + { + "display": "Choice y", + "value": "y" + }, + { + "display": "Choice z", + "value": "z" + } + ], + "style": "compact", + "isMultiSelect": false, + "id": "list-4", + "isRequired": false, + "title": "Pick an option" + } + ], + "actions": [ + { + "@type": "HttpPOST", + "body": "{\"list1\":\"{{list-1.value}}\", \"list2\":\"{{list-2.value}}\", \"list3\":\"{{list-3.value}}\", \"list4\":\"{{list-4.value}}\"}", + "name": "Send", + "@id": "card-1-btn-1" + } + ], + "name": "Multiple Choice", + "@id": "card-1" + }, + { + "@type": "ActionCard", + "inputs": [ + { + "@type": "TextInput", + "isMultiline": true, + "id": "text-1", + "isRequired": false, + "title": "multiline, no maxLength" + }, + { + "@type": "TextInput", + "isMultiline": false, + "id": "text-2", + "isRequired": false, + "title": "single line, no maxLength" + }, + { + "@type": "TextInput", + "isMultiline": true, + "maxLength": 10, + "id": "text-3", + "isRequired": true, + "title": "multiline, max len = 10, isRequired" + }, + { + "@type": "TextInput", + "isMultiline": false, + "maxLength": 10, + "id": "text-4", + "isRequired": true, + "title": "single line, max len = 10, isRequired" + } + ], + "actions": [ + { + "@type": "HttpPOST", + "body": "{\"text1\":\"{{text-1.value}}\", \"text2\":\"{{text-2.value}}\", \"text3\":\"{{text-3.value}}\", \"text4\":\"{{text-4.value}}\"}", + "name": "Send", + "@id": "card-2-btn-1" + } + ], + "name": "Text Input", + "@id": "card-2" + }, + { + "@type": "ActionCard", + "inputs": [ + { + "@type": "DateInput", + "includeTime": true, + "id": "date-1", + "isRequired": true, + "title": "date with time" + }, + { + "@type": "DateInput", + "includeTime": false, + "id": "date-2", + "isRequired": false, + "title": "date only" + } + ], + "actions": [ + { + "@type": "HttpPOST", + "body": "{\"date1\":\"{{date-1.value}}\", \"date2\":\"{{date-2.value}}\"}", + "name": "Send", + "@id": "card-3-btn-1" + } + ], + "name": "Date Input", + "@id": "card-3" + }, + { + "@type": "ViewAction", + "target": [ + "http://microsoft.com" + ], + "name": "View Action" + }, + { + "@type": "OpenUri", + "targets": [ + { + "os": "default", + "uri": "http://microsoft.com" + }, + { + "os": "iOS", + "uri": "http://microsoft.com" + }, + { + "os": "android", + "uri": "http://microsoft.com" + }, + { + "os": "windows", + "uri": "http://microsoft.com" + } + ], + "name": "Open Uri", + "@id": "open-uri" + } + ] + } + } + ], + "entities": [], + "replyToId": "a1bbea70-4ebb-11eb-8029-87a6e92fcaab", + "id": "a2567cc0-4ebb-11eb-8029-87a6e92fcaab", + "localTimestamp": "2021-01-04T15:35:35-03:00", + "timestamp": "2021-01-04T18:35:35.436Z" + }, + { + "type": "message", + "serviceUrl": "https://a3c0daa166e8.ngrok.io", + "channelId": "emulator", + "from": { + "id": "e6f62e00-5a57-11eb-856d-5fc1719d27ce", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "5cd758c0-5a5c-11eb-856d-5fc1719d27ce|livechat" + }, + "recipient": { + "id": "967d23e5-491c-4039-9edd-923a53617734", + "role": "user" + }, + "locale": "", + "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", + "speak": "What card do you want?", + "inputHint": "expectingInput", + "attachments": [], + "entities": [], + "replyToId": "6511ab80-5a5c-11eb-9f42-afe5fddb4d6c", + "id": "6603aca0-5a5c-11eb-9f42-afe5fddb4d6c", + "localTimestamp": "2021-01-19T10:44:05-03:00", + "timestamp": "2021-01-19T13:44:05.994Z" + }, + { + "channelData": { + "clientActivityID": "1609785433694xe3les8ksd", + "clientTimestamp": "2021-01-04T18:37:13.694Z" + }, + "text": "end", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "9bdd62a5-6bf7-4c0c-a7b6-e954be30f2f0", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-04T18:37:13.730Z", + "conversation": { + "id": "cee77be0-4ebb-11eb-9fc9-afbd749ec1ea|livechat" + }, + "id": "dcecf620-4ebb-11eb-8029-87a6e92fcaab", + "localTimestamp": "2021-01-04T15:37:13-03:00", + "recipient": { + "id": "fce93a20-4e9c-11eb-9fc9-afbd749ec1ea", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://0e141a8d6e98.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://0e141a8d6e98.ngrok.io", + "channelId": "emulator", + "from": { + "id": "fce93a20-4e9c-11eb-9fc9-afbd749ec1ea", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "cee77be0-4ebb-11eb-9fc9-afbd749ec1ea|livechat" + }, + "recipient": { + "id": "9bdd62a5-6bf7-4c0c-a7b6-e954be30f2f0", + "role": "user" + }, + "locale": "", + "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "dcecf620-4ebb-11eb-8029-87a6e92fcaab", + "id": "ddb8aa90-4ebb-11eb-8029-87a6e92fcaab", + "localTimestamp": "2021-01-04T15:37:15-03:00", + "timestamp": "2021-01-04T18:37:15.065Z" + } +] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Receipt.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Receipt.json new file mode 100644 index 0000000000..1709f44ccd --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Receipt.json @@ -0,0 +1,72 @@ +{ + "items": [ + { + "type": "message", + "role": "user", + "text": "Receipt" + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "attachmentLayout == 'list'", + "inputHint == 'acceptingInput'", + "attachments[0].contentType == 'application/vnd.microsoft.card.receipt'", + "attachments[0].content.title == 'John Doe'", + "attachments[0].content.facts[0].key == 'Order Number'", + "attachments[0].content.facts[1].key == 'Payment Method'", + "attachments[0].content.facts[1].value == 'VISA 5555-****'", + "attachments[0].content.items[0].title == 'Data Transfer'", + "attachments[0].content.items[0].image.url == 'https://github.com/amido/azure-vector-icons/raw/master/renders/traffic-manager.png'", + "attachments[0].content.items[0].price == '$ 38.45'", + "attachments[0].content.items[1].title == 'App Service'", + "attachments[0].content.items[1].image.url == 'https://github.com/amido/azure-vector-icons/raw/master/renders/cloud-service.png'", + "attachments[0].content.items[1].price == '$ 45.00'", + "attachments[0].content.total == '$ 90.95'", + "attachments[0].content.tax == '$ 7.50'", + "attachments[0].content.buttons[0].type == 'openUrl'", + "attachments[0].content.buttons[0].title == 'More information'", + "attachments[0].content.buttons[0].image == 'https://account.windowsazure.com/content/6.10.1.38-.8225.160809-1618/aux-pre/images/offer-icon-freetrial.png'", + "attachments[0].content.buttons[0].value == 'https://azure.microsoft.com/en-us/pricing/'" + ] + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "speak == 'What card do you want?'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "end" + }, + { + "type": "message", + "role": "bot", + "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Receipt.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Receipt.transcript new file mode 100644 index 0000000000..e5205b5dc7 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Receipt.transcript @@ -0,0 +1,197 @@ +[ + { + "channelData": { + "clientActivityID": "1611839371599wsbxze20iv", + "clientTimestamp": "2021-01-28T13:09:31.599Z" + }, + "text": "Receipt", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "3eb35847-111c-4ec7-86de-a54438c4a976", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:09:31.650Z", + "conversation": { + "id": "06cce110-616a-11eb-881a-afe376da3863|livechat" + }, + "id": "0f53a620-616a-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:09:31-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "06cce110-616a-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "3eb35847-111c-4ec7-86de-a54438c4a976", + "role": "user" + }, + "attachmentLayout": "list", + "locale": "", + "inputHint": "acceptingInput", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.receipt", + "content": { + "title": "John Doe", + "facts": [ + { + "key": "Order Number", + "value": "1234" + }, + { + "key": "Payment Method", + "value": "VISA 5555-****" + } + ], + "items": [ + { + "title": "Data Transfer", + "image": { + "url": "https://github.com/amido/azure-vector-icons/raw/master/renders/traffic-manager.png" + }, + "price": "$ 38.45", + "quantity": "368" + }, + { + "title": "App Service", + "image": { + "url": "https://github.com/amido/azure-vector-icons/raw/master/renders/cloud-service.png" + }, + "price": "$ 45.00", + "quantity": "720" + } + ], + "total": "$ 90.95", + "tax": "$ 7.50", + "buttons": [ + { + "type": "openUrl", + "title": "More information", + "image": "https://account.windowsazure.com/content/6.10.1.38-.8225.160809-1618/aux-pre/images/offer-icon-freetrial.png", + "value": "https://azure.microsoft.com/en-us/pricing/" + } + ] + } + } + ], + "entities": [], + "replyToId": "0f53a620-616a-11eb-b46e-c3c3213a748e", + "id": "0ff42be0-616a-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:09:32-03:00", + "timestamp": "2021-01-28T13:09:32.702Z" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "06cce110-616a-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "3eb35847-111c-4ec7-86de-a54438c4a976", + "role": "user" + }, + "locale": "", + "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", + "speak": "What card do you want?", + "inputHint": "expectingInput", + "attachments": [], + "entities": [], + "replyToId": "0f53a620-616a-11eb-b46e-c3c3213a748e", + "id": "101fcfc0-616a-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:09:32-03:00", + "timestamp": "2021-01-28T13:09:32.988Z" + }, + { + "channelData": { + "clientActivityID": "1611839374573ek608u3396m", + "clientTimestamp": "2021-01-28T13:09:34.573Z" + }, + "text": "end", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "3eb35847-111c-4ec7-86de-a54438c4a976", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:09:34.793Z", + "conversation": { + "id": "06cce110-616a-11eb-881a-afe376da3863|livechat" + }, + "id": "11333b90-616a-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:09:34-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "06cce110-616a-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "3eb35847-111c-4ec7-86de-a54438c4a976", + "role": "user" + }, + "locale": "", + "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "11333b90-616a-11eb-b46e-c3c3213a748e", + "id": "11ca2460-616a-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:09:35-03:00", + "timestamp": "2021-01-28T13:09:35.782Z" + } +] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SignIn.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SignIn.json new file mode 100644 index 0000000000..74415aeb59 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SignIn.json @@ -0,0 +1,60 @@ +{ + "items": [ + { + "type": "message", + "role": "user", + "text": "Signin" + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "attachmentLayout == 'list'", + "inputHint == 'acceptingInput'", + "attachments[0].contentType == 'application/vnd.microsoft.card.signin'", + "attachments[0].content.text == 'BotFramework Sign-in Card'", + "attachments[0].content.buttons[0].type == 'signin'", + "attachments[0].content.buttons[0].title == 'Sign-in'", + "attachments[0].content.buttons[0].value == 'https://login.microsoftonline.com/'" + ] + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "speak == 'What card do you want?'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "end" + }, + { + "type": "message", + "role": "bot", + "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SignIn.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SignIn.transcript new file mode 100644 index 0000000000..93337e2ddc --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SignIn.transcript @@ -0,0 +1,166 @@ +[ + { + "channelData": { + "clientActivityID": "1611839446716rvo7eet9ri", + "clientTimestamp": "2021-01-28T13:10:46.716Z" + }, + "text": "Signin", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "1eb07a8c-c293-47ab-aecf-0bf4201e7f43", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:10:46.812Z", + "conversation": { + "id": "32bac261-616a-11eb-881a-afe376da3863|livechat" + }, + "id": "3c209cd0-616a-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:10:46-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "32bac261-616a-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "1eb07a8c-c293-47ab-aecf-0bf4201e7f43", + "role": "user" + }, + "attachmentLayout": "list", + "locale": "", + "inputHint": "acceptingInput", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.signin", + "content": { + "text": "BotFramework Sign-in Card", + "buttons": [ + { + "type": "signin", + "title": "Sign-in", + "value": "https://login.microsoftonline.com/" + } + ] + } + } + ], + "entities": [], + "replyToId": "3c209cd0-616a-11eb-b46e-c3c3213a748e", + "id": "3cc47df0-616a-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:10:47-03:00", + "timestamp": "2021-01-28T13:10:47.887Z" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "32bac261-616a-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "1eb07a8c-c293-47ab-aecf-0bf4201e7f43", + "role": "user" + }, + "locale": "", + "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", + "speak": "What card do you want?", + "inputHint": "expectingInput", + "attachments": [], + "entities": [], + "replyToId": "3c209cd0-616a-11eb-b46e-c3c3213a748e", + "id": "3cf0be10-616a-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:10:48-03:00", + "timestamp": "2021-01-28T13:10:48.177Z" + }, + { + "channelData": { + "clientActivityID": "16118394507003s21693ifj8", + "clientTimestamp": "2021-01-28T13:10:50.700Z" + }, + "text": "end", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "1eb07a8c-c293-47ab-aecf-0bf4201e7f43", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:10:50.748Z", + "conversation": { + "id": "32bac261-616a-11eb-881a-afe376da3863|livechat" + }, + "id": "3e790bc0-616a-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:10:50-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "32bac261-616a-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "1eb07a8c-c293-47ab-aecf-0bf4201e7f43", + "role": "user" + }, + "locale": "", + "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "3e790bc0-616a-11eb-b46e-c3c3213a748e", + "id": "3f13c520-616a-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:10:51-03:00", + "timestamp": "2021-01-28T13:10:51.762Z" + } +] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SubmitAction.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SubmitAction.json new file mode 100644 index 0000000000..8509242e40 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SubmitAction.json @@ -0,0 +1,64 @@ +{ + "items": [ + { + "type": "message", + "role": "user", + "text": "AdaptiveCardSubmitAction" + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "attachmentLayout == 'list'", + "inputHint == 'acceptingInput'", + "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'", + "attachments[0].content.type == 'AdaptiveCard'", + "attachments[0].content.body[0].type == 'TextBlock'", + "attachments[0].content.body[0].text == 'Bot Builder actions'", + "attachments[0].content.body[1].type == 'Input.Text'", + "attachments[0].content.body[1].id == 'x'", + "attachments[0].content.actions[0].type == 'Action.Submit'", + "attachments[0].content.actions[0].data.key == 'value'", + "attachments[0].content.actions[0].title == 'Action.Submit'" + ] + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "speak == 'What card do you want?'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "end" + }, + { + "type": "message", + "role": "bot", + "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SubmitAction.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SubmitAction.transcript new file mode 100644 index 0000000000..35ffbdf33c --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SubmitAction.transcript @@ -0,0 +1,179 @@ +[ + { + "channelData": { + "clientActivityID": "1611839977312o3qfq3addts", + "clientTimestamp": "2021-01-28T13:19:37.312Z" + }, + "text": "AdaptiveCardSumbitAction", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "4ea03367-4ce0-46a8-901f-efcdb37418d3", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:19:37.385Z", + "conversation": { + "id": "6bc8f8a0-616b-11eb-881a-afe376da3863|livechat" + }, + "id": "785f7990-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:19:37-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "6bc8f8a0-616b-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "4ea03367-4ce0-46a8-901f-efcdb37418d3", + "role": "user" + }, + "attachmentLayout": "list", + "locale": "", + "inputHint": "acceptingInput", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.adaptive", + "content": { + "type": "AdaptiveCard", + "version": "1.2", + "body": [ + { + "type": "TextBlock", + "text": "Bot Builder actions" + }, + { + "type": "Input.Text", + "id": "x" + } + ], + "actions": [ + { + "type": "Action.Submit", + "data": { + "key": "value" + }, + "title": "Action.Submit" + } + ] + } + } + ], + "entities": [], + "replyToId": "785f7990-616b-11eb-b46e-c3c3213a748e", + "id": "78f5ed30-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:19:38-03:00", + "timestamp": "2021-01-28T13:19:38.371Z" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "6bc8f8a0-616b-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "4ea03367-4ce0-46a8-901f-efcdb37418d3", + "role": "user" + }, + "locale": "", + "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", + "speak": "What card do you want?", + "inputHint": "expectingInput", + "attachments": [], + "entities": [], + "replyToId": "785f7990-616b-11eb-b46e-c3c3213a748e", + "id": "79227b70-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:19:38-03:00", + "timestamp": "2021-01-28T13:19:38.663Z" + }, + { + "channelData": { + "clientActivityID": "1611839981867xrs9cyi53o9", + "clientTimestamp": "2021-01-28T13:19:41.867Z" + }, + "text": "end", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "4ea03367-4ce0-46a8-901f-efcdb37418d3", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:19:41.920Z", + "conversation": { + "id": "6bc8f8a0-616b-11eb-881a-afe376da3863|livechat" + }, + "id": "7b137600-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:19:41-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "6bc8f8a0-616b-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "4ea03367-4ce0-46a8-901f-efcdb37418d3", + "role": "user" + }, + "locale": "", + "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "7b137600-616b-11eb-b46e-c3c3213a748e", + "id": "7bbb27b0-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:19:43-03:00", + "timestamp": "2021-01-28T13:19:43.019Z" + } +] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/TaskModule.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/TaskModule.json new file mode 100644 index 0000000000..d821b94cfd --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/TaskModule.json @@ -0,0 +1,62 @@ +{ + "items": [ + { + "type": "message", + "role": "user", + "text": "AdaptiveCardTeamsTaskModule" + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "attachmentLayout == 'list'", + "inputHint == 'acceptingInput'", + "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'", + "attachments[0].content.type == 'AdaptiveCard'", + "attachments[0].content.body[0].type == 'TextBlock'", + "attachments[0].content.body[0].text == 'Task Module Adaptive Card'", + "attachments[0].content.actions[0].type == 'Action.Submit'", + "attachments[0].content.actions[0].data.msteams.type == 'invoke'", + "attachments[0].content.actions[0].title == 'Launch Task Module'" + ] + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "speak == 'What card do you want?'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "end" + }, + { + "type": "message", + "role": "bot", + "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/TaskModule.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/TaskModule.transcript new file mode 100644 index 0000000000..21df36d5ed --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/TaskModule.transcript @@ -0,0 +1,178 @@ +[ + { + "channelData": { + "clientActivityID": "16118391929936yytoz4eh0g", + "clientTimestamp": "2021-01-28T13:06:32.993Z" + }, + "text": "AdaptiveCardTaskModule", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "8402a6ae-fe88-4f1b-91cf-6026ed39d32a", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:06:33.044Z", + "conversation": { + "id": "9a706690-6169-11eb-881a-afe376da3863|livechat" + }, + "id": "a4de8940-6169-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:06:33-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "9a706690-6169-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "8402a6ae-fe88-4f1b-91cf-6026ed39d32a", + "role": "user" + }, + "attachmentLayout": "list", + "locale": "", + "inputHint": "acceptingInput", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.adaptive", + "content": { + "type": "AdaptiveCard", + "version": "1.2", + "body": [ + { + "type": "TextBlock", + "text": "Task Module Adaptive Card" + } + ], + "actions": [ + { + "type": "Action.Submit", + "data": { + "msteams": { + "type": "invoke", + "value": "{\r\n \"hiddenKey\": \"hidden value from task module launcher\",\r\n \"type\": \"task/fetch\"\r\n}" + } + }, + "title": "Launch Task Module" + } + ] + } + } + ], + "entities": [], + "replyToId": "a4de8940-6169-11eb-b46e-c3c3213a748e", + "id": "a5a115f0-6169-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:06:34-03:00", + "timestamp": "2021-01-28T13:06:34.319Z" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "9a706690-6169-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "8402a6ae-fe88-4f1b-91cf-6026ed39d32a", + "role": "user" + }, + "locale": "", + "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", + "speak": "What card do you want?", + "inputHint": "expectingInput", + "attachments": [], + "entities": [], + "replyToId": "a4de8940-6169-11eb-b46e-c3c3213a748e", + "id": "a5cd07f0-6169-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:06:34-03:00", + "timestamp": "2021-01-28T13:06:34.607Z" + }, + { + "channelData": { + "clientActivityID": "1611839197644k7d79gt7vgr", + "clientTimestamp": "2021-01-28T13:06:37.644Z" + }, + "text": "end", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "8402a6ae-fe88-4f1b-91cf-6026ed39d32a", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:06:37.717Z", + "conversation": { + "id": "9a706690-6169-11eb-881a-afe376da3863|livechat" + }, + "id": "a7a79450-6169-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:06:37-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "9a706690-6169-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "8402a6ae-fe88-4f1b-91cf-6026ed39d32a", + "role": "user" + }, + "locale": "", + "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "a7a79450-6169-11eb-b46e-c3c3213a748e", + "id": "a84e0d80-6169-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:06:38-03:00", + "timestamp": "2021-01-28T13:06:38.808Z" + } +] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Thumbnail.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Thumbnail.json new file mode 100644 index 0000000000..abf37c0aff --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Thumbnail.json @@ -0,0 +1,62 @@ +{ + "items": [ + { + "type": "message", + "role": "user", + "text": "Thumbnail" + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "attachmentLayout == 'list'", + "inputHint == 'acceptingInput'", + "attachments[0].contentType == 'application/vnd.microsoft.card.thumbnail'", + "attachments[0].content.title == 'BotFramework Thumbnail Card'", + "attachments[0].content.subtitle == 'Microsoft Bot Framework'", + "attachments[0].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'", + "attachments[0].content.buttons[0].type == 'openUrl'", + "attachments[0].content.buttons[0].title == 'Get Started'", + "attachments[0].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'" + ] + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "speak == 'What card do you want?'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "end" + }, + { + "type": "message", + "role": "bot", + "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Thumbnail.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Thumbnail.transcript new file mode 100644 index 0000000000..dbae756d1d --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Thumbnail.transcript @@ -0,0 +1,173 @@ +[ + { + "channelData": { + "clientActivityID": "1611839317022nw5evtm02lt", + "clientTimestamp": "2021-01-28T13:08:37.022Z" + }, + "text": "Thumbnail", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "341b7ecf-7777-43c0-83a2-2882c6dc6a78", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:08:37.084Z", + "conversation": { + "id": "e57bac80-6169-11eb-881a-afe376da3863|livechat" + }, + "id": "eecd89c0-6169-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:08:37-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "e57bac80-6169-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "341b7ecf-7777-43c0-83a2-2882c6dc6a78", + "role": "user" + }, + "attachmentLayout": "list", + "locale": "", + "inputHint": "acceptingInput", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.thumbnail", + "content": { + "title": "BotFramework Thumbnail Card", + "subtitle": "Microsoft Bot Framework", + "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.", + "images": [ + { + "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg" + } + ], + "buttons": [ + { + "type": "openUrl", + "title": "Get Started", + "value": "https://docs.microsoft.com/bot-framework" + } + ] + } + } + ], + "entities": [], + "replyToId": "eecd89c0-6169-11eb-b46e-c3c3213a748e", + "id": "ef633a10-6169-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:08:38-03:00", + "timestamp": "2021-01-28T13:08:38.064Z" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "e57bac80-6169-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "341b7ecf-7777-43c0-83a2-2882c6dc6a78", + "role": "user" + }, + "locale": "", + "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", + "speak": "What card do you want?", + "inputHint": "expectingInput", + "attachments": [], + "entities": [], + "replyToId": "eecd89c0-6169-11eb-b46e-c3c3213a748e", + "id": "ef8eb6e0-6169-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:08:38-03:00", + "timestamp": "2021-01-28T13:08:38.350Z" + }, + { + "channelData": { + "clientActivityID": "1611839320481tz2ppzyepo9", + "clientTimestamp": "2021-01-28T13:08:40.481Z" + }, + "text": "end", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "341b7ecf-7777-43c0-83a2-2882c6dc6a78", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:08:40.529Z", + "conversation": { + "id": "e57bac80-6169-11eb-881a-afe376da3863|livechat" + }, + "id": "f0db3410-6169-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:08:40-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "e57bac80-6169-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "341b7ecf-7777-43c0-83a2-2882c6dc6a78", + "role": "user" + }, + "locale": "", + "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "f0db3410-6169-11eb-b46e-c3c3213a748e", + "id": "f18e5770-6169-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:08:41-03:00", + "timestamp": "2021-01-28T13:08:41.703Z" + } +] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Video.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Video.json new file mode 100644 index 0000000000..2e96bb8001 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Video.json @@ -0,0 +1,58 @@ +{ + "items": [ + { + "type": "message", + "role": "user", + "text": "Video" + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "attachmentLayout == 'list'", + "inputHint == 'acceptingInput'", + "attachments[0].contentType == 'application/vnd.microsoft.card.video'", + "attachments[0].content.title == 'Video Card'", + "attachments[0].content.media[0].url == 'https://www.youtube.com/watch?v=LvqzubPZjHE'" + ] + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "speak == 'What card do you want?'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "end" + }, + { + "type": "message", + "role": "bot", + "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Video.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Video.transcript new file mode 100644 index 0000000000..884aa68788 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Video.transcript @@ -0,0 +1,164 @@ +[ + { + "channelData": { + "clientActivityID": "1611839916459etjxoqosqtr", + "clientTimestamp": "2021-01-28T13:18:36.459Z" + }, + "text": "Video", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "7563d50d-a9b1-48fd-aaf9-e0d4d59fc0e2", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:18:36.513Z", + "conversation": { + "id": "4b43edb0-616b-11eb-881a-afe376da3863|livechat" + }, + "id": "54172510-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:18:36-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "4b43edb0-616b-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "7563d50d-a9b1-48fd-aaf9-e0d4d59fc0e2", + "role": "user" + }, + "attachmentLayout": "list", + "locale": "", + "inputHint": "acceptingInput", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.video", + "content": { + "title": "Video Card", + "media": [ + { + "url": "https://www.youtube.com/watch?v=LvqzubPZjHE" + } + ] + } + } + ], + "entities": [], + "replyToId": "54172510-616b-11eb-b46e-c3c3213a748e", + "id": "54b86e20-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:18:37-03:00", + "timestamp": "2021-01-28T13:18:37.570Z" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "4b43edb0-616b-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "7563d50d-a9b1-48fd-aaf9-e0d4d59fc0e2", + "role": "user" + }, + "locale": "", + "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", + "speak": "What card do you want?", + "inputHint": "expectingInput", + "attachments": [], + "entities": [], + "replyToId": "54172510-616b-11eb-b46e-c3c3213a748e", + "id": "54e4d550-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:18:37-03:00", + "timestamp": "2021-01-28T13:18:37.861Z" + }, + { + "channelData": { + "clientActivityID": "1611839921730zsw4gsfltfm", + "clientTimestamp": "2021-01-28T13:18:41.731Z" + }, + "text": "end", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "7563d50d-a9b1-48fd-aaf9-e0d4d59fc0e2", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:18:41.787Z", + "conversation": { + "id": "4b43edb0-616b-11eb-881a-afe376da3863|livechat" + }, + "id": "573be4b0-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:18:41-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "4b43edb0-616b-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "7563d50d-a9b1-48fd-aaf9-e0d4d59fc0e2", + "role": "user" + }, + "locale": "", + "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "573be4b0-616b-11eb-b46e-c3c3213a748e", + "id": "57d31ba0-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:18:42-03:00", + "timestamp": "2021-01-28T13:18:42.778Z" + } +] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/WaterfallGreeting.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/WaterfallGreeting.json new file mode 100644 index 0000000000..af4438a1de --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/WaterfallGreeting.json @@ -0,0 +1,148 @@ +{ + "items": [ + { + "type": "conversationUpdate", + "role": "user" + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "attachmentLayout == 'list'", + "speak == 'Welcome to the waterfall host bot'", + "inputHint == 'acceptingInput'", + "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'", + "attachments[0].content.type == 'AdaptiveCard'", + "attachments[0].content.body[0].type == 'Image'", + "attachments[0].content.body[0].size == 'stretch'", + "attachments[0].content.body[1].type == 'TextBlock'", + "attachments[0].content.body[1].spacing == 'Medium'", + "attachments[0].content.body[1].size == 'Medium'", + "attachments[0].content.body[1].weight == 'Bolder'", + "attachments[0].content.body[1].text == 'Welcome to the Skill Dialog Sample!'", + "attachments[0].content.body[1].wrap == True", + "attachments[0].content.body[1].color == 'Accent'", + "attachments[0].content.body[2].type == 'TextBlock'", + "attachments[0].content.body[2].text == 'This sample allows you to connect to a skill using a SkillDialog and invoke several actions.'", + "attachments[0].content.body[2].wrap == True" + ] + }, + { + "type": "message", + "role": "bot", + "text": "What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'What delivery mode would you like to use?'", + "speak == 'What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + }, + { + "type": "message", + "role": "user", + "text": "${DeliveryMode}" + }, + { + "type": "message", + "role": "bot", + "text": "What group of skills would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'What group of skills would you like to use?'", + "speak == 'What group of skills would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'", + "suggestedActions.actions[0].value == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'" + ] + }, + { + "type": "message", + "role": "user", + "text": "Waterfall" + }, + { + "type": "message", + "role": "bot", + "text": "What skill would you like to call?\n\n 1. WaterfallSkillBotDotNet\n 2. WaterfallSkillBotJS\n 3. WaterfallSkillBotPython", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "startsWith(text, 'What skill would you like to call?')", + "speak == 'What skill would you like to call?'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "${TargetSkill}" + }, + { + "type": "message", + "role": "bot", + "text": "Select an action # to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Select an action to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update'", + "speak == 'Select an action to send to **${TargetSkill}**.'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "Cards" + }, + { + "type": "trace", + "role": "bot", + "assertions": [ + "type == 'trace'", + "from.role == 'bot'", + "recipient.role == 'user'", + "label == 'Got ActivityType: event'", + "name == 'ActivityRouterDialog.ProcessActivityAsync()'" + ] + }, + { + "type": "trace", + "role": "bot", + "assertions": [ + "type == 'trace'", + "from.role == 'bot'", + "recipient.role == 'user'", + "label == 'Name: Cards. Value: '", + "name == 'ActivityRouterDialog.OnEventActivityAsync()'" + ] + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "speak == 'What card do you want?'", + "inputHint == 'expectingInput'" + ] + } + ] +} diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/WaterfallGreeting.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/WaterfallGreeting.transcript new file mode 100644 index 0000000000..aae2fbe486 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/WaterfallGreeting.transcript @@ -0,0 +1,435 @@ +[ + { + "type": "conversationUpdate", + "membersAdded": [ + { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot" + }, + { + "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", + "name": "User" + } + ], + "membersRemoved": [], + "channelId": "emulator", + "conversation": { + "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" + }, + "id": "d6088360-6167-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T09:53:36-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "timestamp": "2021-01-28T12:53:36.534Z", + "from": { + "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", + "name": "User", + "role": "user" + }, + "locale": "", + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", + "role": "user" + }, + "attachmentLayout": "list", + "locale": "", + "speak": "Welcome to the waterfall host bot", + "inputHint": "acceptingInput", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.adaptive", + "content": { + "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", + "type": "AdaptiveCard", + "version": "1.0", + "body": [ + { + "type": "Image", + "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQtB3AwMUeNoq4gUBGe6Ocj8kyh3bXa9ZbV7u1fVKQoyKFHdkqU", + "size": "stretch" + }, + { + "type": "TextBlock", + "spacing": "Medium", + "size": "Medium", + "weight": "Bolder", + "text": "Welcome to the Skill Dialog Sample!", + "wrap": true, + "maxLines": 0, + "color": "Accent" + }, + { + "type": "TextBlock", + "size": "default", + "text": "This sample allows you to connect to a skill using a SkillDialog and invoke several actions.", + "wrap": true, + "maxLines": 0 + } + ] + } + } + ], + "entities": [], + "replyToId": "d6088360-6167-11eb-b46e-c3c3213a748e", + "id": "d71ba110-6167-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T09:53:38-03:00", + "timestamp": "2021-01-28T12:53:38.337Z" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", + "role": "user" + }, + "locale": "", + "text": "What delivery mode would you like to use?", + "speak": "What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "d6088360-6167-11eb-b46e-c3c3213a748e", + "id": "d75f60d0-6167-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T09:53:38-03:00", + "timestamp": "2021-01-28T12:53:38.781Z" + }, + { + "channelData": { + "clientActivityID": "1611838423833wj35v7pu64g", + "clientTimestamp": "2021-01-28T12:53:43.833Z" + }, + "text": "normal", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T12:53:43.851Z", + "entities": [ + { + "requiresBotState": true, + "supportsListening": true, + "supportsTts": true, + "type": "ClientCapabilities" + } + ], + "conversation": { + "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" + }, + "id": "da64ffb0-6167-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T09:53:43-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", + "role": "user" + }, + "locale": "", + "text": "What type of skill would you like to use?", + "speak": "What type of skill would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "EchoSkill", + "value": "EchoSkill" + }, + { + "type": "imBack", + "title": "WaterfallSkill", + "value": "WaterfallSkill" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "da64ffb0-6167-11eb-b46e-c3c3213a748e", + "id": "db167560-6167-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T09:53:45-03:00", + "timestamp": "2021-01-28T12:53:45.014Z" + }, + { + "channelData": { + "clientActivityID": "1611838427337752w1bylwms", + "clientTimestamp": "2021-01-28T12:53:47.337Z" + }, + "text": "WaterfallSkill", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T12:53:47.402Z", + "conversation": { + "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" + }, + "id": "dc82d6a0-6167-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T09:53:47-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", + "role": "user" + }, + "locale": "", + "text": "What skill would you like to call?", + "speak": "What skill would you like to call?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "WaterfallSkillBotDotNet", + "value": "WaterfallSkillBotDotNet" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "dc82d6a0-6167-11eb-b46e-c3c3213a748e", + "id": "dd207630-6167-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T09:53:48-03:00", + "timestamp": "2021-01-28T12:53:48.435Z" + }, + { + "channelData": { + "clientActivityID": "1611838429939ntmad398ck7", + "clientTimestamp": "2021-01-28T12:53:49.939Z" + }, + "text": "WaterfallSkillBotDotNet", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T12:53:49.965Z", + "conversation": { + "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" + }, + "id": "de0a12e0-6167-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T09:53:49-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", + "role": "user" + }, + "locale": "", + "text": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo", + "speak": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.", + "inputHint": "expectingInput", + "attachments": [], + "entities": [], + "replyToId": "de0a12e0-6167-11eb-b46e-c3c3213a748e", + "id": "dea31e90-6167-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T09:53:50-03:00", + "timestamp": "2021-01-28T12:53:50.969Z" + }, + { + "channelData": { + "clientActivityID": "16118384346899i989qque7t", + "clientTimestamp": "2021-01-28T12:53:54.689Z" + }, + "text": "Cards", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T12:53:54.717Z", + "conversation": { + "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" + }, + "id": "e0df04d0-6167-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T09:53:54-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "trace", + "timestamp": "2021-01-28T12:53:55.817Z", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", + "role": "user" + }, + "locale": "", + "replyToId": "e0df04d0-6167-11eb-b46e-c3c3213a748e", + "label": "Got ActivityType: event", + "name": "ActivityRouterDialog.ProcessActivityAsync()", + "id": "e186dd90-6167-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T09:53:55-03:00" + }, + { + "type": "trace", + "timestamp": "2021-01-28T12:53:56.114Z", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", + "role": "user" + }, + "locale": "", + "replyToId": "e0df04d0-6167-11eb-b46e-c3c3213a748e", + "label": "Name: Cards. Value: ", + "name": "ActivityRouterDialog.OnEventActivityAsync()", + "id": "e1b42f20-6167-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T09:53:56-03:00" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", + "role": "user" + }, + "locale": "", + "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", + "speak": "What card do you want?", + "inputHint": "expectingInput", + "attachments": [], + "entities": [], + "replyToId": "e0df04d0-6167-11eb-b46e-c3c3213a748e", + "id": "e1e26b10-6167-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T09:53:56-03:00", + "timestamp": "2021-01-28T12:53:56.417Z" + }, +] diff --git a/tests/functional/Tests/SkillFunctionalTests/Common/HostBot.cs b/tests/functional/Tests/SkillFunctionalTests/Common/HostBot.cs new file mode 100644 index 0000000000..d2aff8acd7 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/Common/HostBot.cs @@ -0,0 +1,53 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +namespace SkillFunctionalTests.Common +{ + public enum HostBot + { + /// + /// Simple host implemented using Composer and the dotnet runtime. + /// + SimpleHostBotComposerDotNet, + + /// + /// Simple host implemented using dotnet 3.1. + /// + SimpleHostBotDotNet, + + /// + /// Simple host implemented using dotnet 2.1. + /// + SimpleHostBotDotNet21, + + /// + /// Simple host implemented using JS. + /// + SimpleHostBotJS, + + /// + /// Simple host implemented using Python. + /// + SimpleHostBotPython, + + /// + /// Host implemented using dotnet and waterfall dialogs. + /// + WaterfallHostBotDotNet, + + /// + /// Host implemented using JS and waterfall dialogs. + /// + WaterfallHostBotJS, + + /// + /// Host implemented using Python and waterfall dialogs. + /// + WaterfallHostBotPython, + + /// + /// Host implemented for LegacyTests. + /// + EchoHostBot + } +} diff --git a/tests/functional/Tests/SkillFunctionalTests/Common/SkillBotNames.cs b/tests/functional/Tests/SkillFunctionalTests/Common/SkillBotNames.cs new file mode 100644 index 0000000000..2b1422ca76 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/Common/SkillBotNames.cs @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +namespace SkillFunctionalTests.Common +{ + public static class SkillBotNames + { + public const string EchoSkillBotComposerDotNet = "EchoSkillBotComposerDotNet"; + public const string EchoSkillBotDotNet = "EchoSkillBotDotNet"; + public const string EchoSkillBotDotNet21 = "EchoSkillBotDotNet21"; + public const string EchoSkillBotDotNetV3 = "EchoSkillBotDotNetV3"; + public const string EchoSkillBotJS = "EchoSkillBotJS"; + public const string EchoSkillBotJSV3 = "EchoSkillBotJSV3"; + public const string EchoSkillBotPython = "EchoSkillBotPython"; + + public const string WaterfallSkillBotDotNet = "WaterfallSkillBotDotNet"; + public const string WaterfallSkillBotJS = "WaterfallSkillBotJS"; + public const string WaterfallSkillBotPython = "WaterfallSkillBotPython"; + + public const string EchoSkillBot = "EchoSkillBot"; + } +} diff --git a/tests/functional/Tests/SkillFunctionalTests/Common/TestCase.cs b/tests/functional/Tests/SkillFunctionalTests/Common/TestCase.cs new file mode 100644 index 0000000000..990135daca --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/Common/TestCase.cs @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Microsoft.Bot.Connector; +using TranscriptTestRunner; + +namespace SkillFunctionalTests.Common +{ + public class TestCase + { + public string Description { get; set; } + + public string ChannelId { get; set; } + + public string DeliveryMode { get; set; } + + public HostBot HostBot { get; set; } + + public string TargetSkill { get; set; } + + public string Script { get; set; } + } +} diff --git a/tests/functional/Tests/SkillFunctionalTests/Common/TestCaseBuilder.cs b/tests/functional/Tests/SkillFunctionalTests/Common/TestCaseBuilder.cs new file mode 100644 index 0000000000..16b422d5f7 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/Common/TestCaseBuilder.cs @@ -0,0 +1,60 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using TranscriptTestRunner; + +namespace SkillFunctionalTests.Common +{ + public class TestCaseBuilder + { + public IEnumerable BuildTestCases(List channelIds, List deliveryModes, List hostBots, List targetSkills, List scripts, Func shouldExclude = null) + { + var testCases = new List(); + var count = 1; + foreach (var channelId in channelIds) + { + foreach (var script in scripts) + { + foreach (var deliveryMode in deliveryModes) + { + foreach (var hostBot in hostBots) + { + foreach (var targetSkill in targetSkills) + { + var testCase = new TestCase + { + Description = $"{script}, {hostBot}, {targetSkill}, {channelId}, {deliveryMode}", + ChannelId = channelId, + DeliveryMode = deliveryMode, + HostBot = hostBot, + TargetSkill = targetSkill, + Script = script + }; + + if (!ExcludeTestCase(shouldExclude, testCase)) + { + testCases.Add(new object[] { new TestCaseDataObject(testCase) }); + count++; + } + } + } + } + } + } + + return testCases; + } + + private bool ExcludeTestCase(Func shouldExclude, TestCase testCase) + { + if (shouldExclude == null) + { + return false; + } + + return shouldExclude(testCase); + } + } +} diff --git a/tests/functional/Tests/SkillFunctionalTests/Common/TestCaseDataObject.cs b/tests/functional/Tests/SkillFunctionalTests/Common/TestCaseDataObject.cs new file mode 100644 index 0000000000..422264211a --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/Common/TestCaseDataObject.cs @@ -0,0 +1,73 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using Newtonsoft.Json; +using Xunit.Abstractions; + +namespace SkillFunctionalTests.Common +{ + public class TestCaseDataObject : IXunitSerializable + { + private const string TestObjectKey = "TestObjectKey"; + private string _testObject; + + /// + /// Initializes a new instance of the class. + /// + public TestCaseDataObject() + { + // Note: This empty constructor is needed by the serializer. + } + + /// + /// Initializes a new instance of the class. + /// + /// An object with the data to be used in the test. + public TestCaseDataObject(object testData) + { + _testObject = JsonConvert.SerializeObject(testData); + } + + /// + /// Used by XUnit.net for deserialization. + /// + /// A parameter used by XUnit.net. + public void Deserialize(IXunitSerializationInfo serializationInfo) + { + _testObject = serializationInfo.GetValue(TestObjectKey); + } + + /// + /// Used by XUnit.net for serialization. + /// + /// A parameter used by XUnit.net. + public void Serialize(IXunitSerializationInfo serializationInfo) + { + serializationInfo.AddValue(TestObjectKey, _testObject); + } + + /// + /// Gets the test data object for the specified .Net type. + /// + /// The type of the object to be returned. + /// The test object instance. + public T GetObject() + { + return JsonConvert.DeserializeObject(_testObject); + } + + public override string ToString() + { + try + { + var testCase = GetObject(); + return testCase.Description; + } + catch (Exception) + { + return base.ToString(); + } + } + } +} diff --git a/tests/functional/Tests/SkillFunctionalTests/FileUpload/FileUploadTests.cs b/tests/functional/Tests/SkillFunctionalTests/FileUpload/FileUploadTests.cs new file mode 100644 index 0000000000..084da720be --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/FileUpload/FileUploadTests.cs @@ -0,0 +1,110 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using Microsoft.Bot.Connector; +using Microsoft.Bot.Schema; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using SkillFunctionalTests.Common; +using TranscriptTestRunner; +using TranscriptTestRunner.XUnit; +using Xunit; +using Xunit.Abstractions; + +namespace SkillFunctionalTests.FileUpload +{ + [Trait("TestCategory", "FileUpload")] + public class FileUploadTests : ScriptTestBase + { + private readonly string _testScriptsFolder = Directory.GetCurrentDirectory() + @"/FileUpload/TestScripts"; + + public FileUploadTests(ITestOutputHelper output) + : base(output) + { + } + + public static IEnumerable TestCases() + { + var channelIds = new List { Channels.Directline }; + + var deliverModes = new List + { + DeliveryModes.Normal, + DeliveryModes.ExpectReplies + }; + + var hostBots = new List + { + HostBot.WaterfallHostBotDotNet, + HostBot.WaterfallHostBotJS, + HostBot.WaterfallHostBotPython + + // TODO: Enable these when the port to composer is ready + //HostBotNames.ComposerHostBotDotNet + }; + + var targetSkills = new List + { + SkillBotNames.WaterfallSkillBotDotNet, + SkillBotNames.WaterfallSkillBotJS, + SkillBotNames.WaterfallSkillBotPython + + // TODO: Enable these when the port to composer is ready + //SkillBotNames.ComposerSkillBotDotNet + }; + + var scripts = new List + { + "FileUpload1.json" + }; + + var testCaseBuilder = new TestCaseBuilder(); + var testCases = testCaseBuilder.BuildTestCases(channelIds, deliverModes, hostBots, targetSkills, scripts); + foreach (var testCase in testCases) + { + yield return testCase; + } + } + + [Theory] + [MemberData(nameof(TestCases))] + public async Task RunTestCases(TestCaseDataObject testData) + { + const string fileName = "TestFile.txt"; + var testGuid = Guid.NewGuid().ToString(); + var testCase = testData.GetObject(); + Logger.LogInformation(JsonConvert.SerializeObject(testCase, Formatting.Indented)); + + var options = TestClientOptions[testCase.HostBot]; + var runner = new XUnitTestRunner(new TestClientFactory(testCase.ChannelId, options, Logger).GetTestClient(), TestRequestTimeout, Logger); + + // Execute the first part of the conversation. + var testParams = new Dictionary + { + { "DeliveryMode", testCase.DeliveryMode }, + { "TargetSkill", testCase.TargetSkill }, + { "FileName", fileName }, + { "TestGuid", testGuid } + }; + + await runner.RunTestAsync(Path.Combine(_testScriptsFolder, testCase.Script), testParams); + + // Create or Update testFile. + await using var stream = File.OpenWrite(Directory.GetCurrentDirectory() + $"/FileUpload/Media/{fileName}"); + await using var writer = new StreamWriter(stream); + await writer.WriteLineAsync($"GUID:{testGuid}"); + writer.Close(); + + // Upload file. + await using var file = File.OpenRead(Directory.GetCurrentDirectory() + $"/FileUpload/Media/{fileName}"); + await runner.UploadAsync(file); + + // Execute the rest of the conversation. + await runner.RunTestAsync(Path.Combine(_testScriptsFolder, "FileUpload2.json"), testParams); + } + } +} diff --git a/tests/functional/Tests/SkillFunctionalTests/FileUpload/Media/TestFile.txt b/tests/functional/Tests/SkillFunctionalTests/FileUpload/Media/TestFile.txt new file mode 100644 index 0000000000..af27ff4986 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/FileUpload/Media/TestFile.txt @@ -0,0 +1 @@ +This is a test file. \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload1.json b/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload1.json new file mode 100644 index 0000000000..45098d7133 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload1.json @@ -0,0 +1,148 @@ +{ + "items": [ + { + "type": "conversationUpdate", + "role": "user" + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "attachmentLayout == 'list'", + "speak == 'Welcome to the waterfall host bot'", + "inputHint == 'acceptingInput'", + "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'", + "attachments[0].content.type == 'AdaptiveCard'", + "attachments[0].content.body[0].type == 'Image'", + "attachments[0].content.body[0].size == 'stretch'", + "attachments[0].content.body[1].type == 'TextBlock'", + "attachments[0].content.body[1].spacing == 'Medium'", + "attachments[0].content.body[1].size == 'Medium'", + "attachments[0].content.body[1].weight == 'Bolder'", + "attachments[0].content.body[1].text == 'Welcome to the Skill Dialog Sample!'", + "attachments[0].content.body[1].wrap == true", + "attachments[0].content.body[1].color == 'Accent'", + "attachments[0].content.body[2].type == 'TextBlock'", + "attachments[0].content.body[2].text == 'This sample allows you to connect to a skill using a SkillDialog and invoke several actions.'", + "attachments[0].content.body[2].wrap == true" + ] + }, + { + "type": "message", + "role": "bot", + "text": "What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'What delivery mode would you like to use?'", + "speak == 'What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + }, + { + "type": "message", + "role": "user", + "text": "${DeliveryMode}" + }, + { + "type": "message", + "role": "bot", + "text": "What group of skills would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'What group of skills would you like to use?'", + "speak == 'What group of skills would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'", + "suggestedActions.actions[0].value == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'" + ] + }, + { + "type": "message", + "role": "user", + "text": "Waterfall" + }, + { + "type": "message", + "role": "bot", + "text": "What skill would you like to call?\n\n 1. WaterfallSkillBotDotNet\n 2. WaterfallSkillBotJS\n 3. WaterfallSkillBotPython", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "startsWith(text, 'What skill would you like to call?')", + "speak == 'What skill would you like to call?'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "${TargetSkill}" + }, + { + "type": "message", + "role": "bot", + "text": "Select an action to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Select an action to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update'", + "speak == 'Select an action to send to **${TargetSkill}**.'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "FileUpload" + }, + { + "type": "trace", + "role": "bot", + "assertions": [ + "type == 'trace'", + "from.role == 'bot'", + "recipient.role == 'user'", + "label == 'Got ActivityType: event'", + "name == 'ActivityRouterDialog.ProcessActivityAsync()'" + ] + }, + { + "type": "trace", + "role": "bot", + "assertions": [ + "type == 'trace'", + "from.role == 'bot'", + "recipient.role == 'user'", + "label == 'Name: FileUpload. Value: '", + "name == 'ActivityRouterDialog.OnEventActivityAsync()'" + ] + }, + { + "type": "message", + "role": "bot", + "text": "Please upload a file to continue.", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Please upload a file to continue.'" + ] + } + ] +} diff --git a/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload1.transcript b/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload1.transcript new file mode 100644 index 0000000000..cc5270a21e --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload1.transcript @@ -0,0 +1,434 @@ +[ + { + "type": "conversationUpdate", + "membersAdded": [ + { + "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", + "name": "Bot" + }, + { + "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", + "name": "User" + } + ], + "membersRemoved": [], + "channelId": "emulator", + "conversation": { + "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" + }, + "id": "cd00e2e0-60d5-11eb-9a74-bb9adba325d2", + "localTimestamp": "2021-01-27T16:28:14-03:00", + "recipient": { + "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", + "name": "Bot", + "role": "bot" + }, + "timestamp": "2021-01-27T19:28:14.862Z", + "from": { + "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", + "name": "User", + "role": "user" + }, + "locale": "en-US", + "serviceUrl": "https://506512dd91f3.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://506512dd91f3.ngrok.io", + "channelId": "emulator", + "from": { + "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" + }, + "recipient": { + "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", + "role": "user" + }, + "attachmentLayout": "list", + "locale": "en-US", + "speak": "Welcome to the waterfall host bot", + "inputHint": "acceptingInput", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.adaptive", + "content": { + "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", + "type": "AdaptiveCard", + "version": "1.0", + "body": [ + { + "type": "Image", + "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQtB3AwMUeNoq4gUBGe6Ocj8kyh3bXa9ZbV7u1fVKQoyKFHdkqU", + "size": "stretch" + }, + { + "type": "TextBlock", + "spacing": "Medium", + "size": "Medium", + "weight": "Bolder", + "text": "Welcome to the Skill Dialog Sample!", + "wrap": true, + "maxLines": 0, + "color": "Accent" + }, + { + "type": "TextBlock", + "size": "default", + "text": "This sample allows you to connect to a skill using a SkillDialog and invoke several actions.", + "wrap": true, + "maxLines": 0 + } + ] + } + } + ], + "entities": [], + "replyToId": "cd00e2e0-60d5-11eb-9a74-bb9adba325d2", + "id": "cdb9f9b0-60d5-11eb-9a74-bb9adba325d2", + "localTimestamp": "2021-01-27T16:28:16-03:00", + "timestamp": "2021-01-27T19:28:16.075Z" + }, + { + "type": "message", + "serviceUrl": "https://506512dd91f3.ngrok.io", + "channelId": "emulator", + "from": { + "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" + }, + "recipient": { + "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", + "role": "user" + }, + "locale": "en-US", + "text": "What delivery mode would you like to use?", + "speak": "What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "cd00e2e0-60d5-11eb-9a74-bb9adba325d2", + "id": "cde04660-60d5-11eb-9a74-bb9adba325d2", + "localTimestamp": "2021-01-27T16:28:16-03:00", + "timestamp": "2021-01-27T19:28:16.326Z" + }, + { + "channelData": { + "clientActivityID": "16117756974587xlkqssva0r", + "clientTimestamp": "2021-01-27T19:28:17.458Z" + }, + "text": "normal", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", + "name": "User", + "role": "user" + }, + "locale": "en-US", + "timestamp": "2021-01-27T19:28:17.472Z", + "entities": [ + { + "requiresBotState": true, + "supportsListening": true, + "supportsTts": true, + "type": "ClientCapabilities" + } + ], + "conversation": { + "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" + }, + "id": "ce8f2400-60d5-11eb-9a74-bb9adba325d2", + "localTimestamp": "2021-01-27T16:28:17-03:00", + "recipient": { + "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://506512dd91f3.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://506512dd91f3.ngrok.io", + "channelId": "emulator", + "from": { + "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" + }, + "recipient": { + "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", + "role": "user" + }, + "locale": "en-US", + "text": "What type of skill would you like to use?", + "speak": "What type of skill would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "EchoSkill", + "value": "EchoSkill" + }, + { + "type": "imBack", + "title": "WaterfallSkill", + "value": "WaterfallSkill" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "ce8f2400-60d5-11eb-9a74-bb9adba325d2", + "id": "cf180310-60d5-11eb-9a74-bb9adba325d2", + "localTimestamp": "2021-01-27T16:28:18-03:00", + "timestamp": "2021-01-27T19:28:18.369Z" + }, + { + "channelData": { + "clientActivityID": "1611775699426cx57468bwb6", + "clientTimestamp": "2021-01-27T19:28:19.427Z" + }, + "text": "WaterfallSkill", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", + "name": "User", + "role": "user" + }, + "locale": "en-US", + "timestamp": "2021-01-27T19:28:19.441Z", + "conversation": { + "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" + }, + "id": "cfbb9610-60d5-11eb-9a74-bb9adba325d2", + "localTimestamp": "2021-01-27T16:28:19-03:00", + "recipient": { + "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://506512dd91f3.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://506512dd91f3.ngrok.io", + "channelId": "emulator", + "from": { + "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" + }, + "recipient": { + "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", + "role": "user" + }, + "locale": "en-US", + "text": "What skill would you like to call?", + "speak": "What skill would you like to call?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "WaterfallSkillBotDotNet", + "value": "WaterfallSkillBotDotNet" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "cfbb9610-60d5-11eb-9a74-bb9adba325d2", + "id": "d04363b0-60d5-11eb-9a74-bb9adba325d2", + "localTimestamp": "2021-01-27T16:28:20-03:00", + "timestamp": "2021-01-27T19:28:20.331Z" + }, + { + "channelData": { + "clientActivityID": "1611775701238btqor6clvrg", + "clientTimestamp": "2021-01-27T19:28:21.238Z" + }, + "text": "WaterfallSkillBotDotNet", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", + "name": "User", + "role": "user" + }, + "locale": "en-US", + "timestamp": "2021-01-27T19:28:21.255Z", + "conversation": { + "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" + }, + "id": "d0d06170-60d5-11eb-9a74-bb9adba325d2", + "localTimestamp": "2021-01-27T16:28:21-03:00", + "recipient": { + "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://506512dd91f3.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://506512dd91f3.ngrok.io", + "channelId": "emulator", + "from": { + "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" + }, + "recipient": { + "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", + "role": "user" + }, + "locale": "en-US", + "text": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo", + "speak": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.", + "inputHint": "expectingInput", + "attachments": [], + "entities": [], + "replyToId": "d0d06170-60d5-11eb-9a74-bb9adba325d2", + "id": "d15a7900-60d5-11eb-9a74-bb9adba325d2", + "localTimestamp": "2021-01-27T16:28:22-03:00", + "timestamp": "2021-01-27T19:28:22.159Z" + }, + { + "channelData": { + "clientActivityID": "1611775705642g7ss96aqemf", + "clientTimestamp": "2021-01-27T19:28:25.642Z" + }, + "text": "FileUpload", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", + "name": "User", + "role": "user" + }, + "locale": "en-US", + "timestamp": "2021-01-27T19:28:25.677Z", + "conversation": { + "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" + }, + "id": "d3731fd0-60d5-11eb-9a74-bb9adba325d2", + "localTimestamp": "2021-01-27T16:28:25-03:00", + "recipient": { + "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://506512dd91f3.ngrok.io" + }, + { + "type": "trace", + "timestamp": "2021-01-27T19:28:26.806Z", + "serviceUrl": "https://506512dd91f3.ngrok.io", + "channelId": "emulator", + "from": { + "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" + }, + "recipient": { + "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", + "role": "user" + }, + "locale": "en-US", + "replyToId": "d3731fd0-60d5-11eb-9a74-bb9adba325d2", + "label": "Got ActivityType: event", + "name": "ActivityRouterDialog.ProcessActivityAsync()", + "id": "d41f6560-60d5-11eb-9a74-bb9adba325d2", + "localTimestamp": "2021-01-27T16:28:26-03:00" + }, + { + "type": "trace", + "timestamp": "2021-01-27T19:28:27.070Z", + "serviceUrl": "https://506512dd91f3.ngrok.io", + "channelId": "emulator", + "from": { + "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" + }, + "recipient": { + "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", + "role": "user" + }, + "locale": "en-US", + "replyToId": "d3731fd0-60d5-11eb-9a74-bb9adba325d2", + "label": "Name: FileUpload. Value: ", + "name": "ActivityRouterDialog.OnEventActivityAsync()", + "id": "d447ade0-60d5-11eb-9a74-bb9adba325d2", + "localTimestamp": "2021-01-27T16:28:27-03:00" + }, + { + "type": "message", + "serviceUrl": "https://506512dd91f3.ngrok.io", + "channelId": "emulator", + "from": { + "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" + }, + "recipient": { + "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", + "role": "user" + }, + "locale": "en-US", + "text": "Please upload a file to continue.", + "inputHint": "acceptingInput", + "attachments": [], + "entities": [], + "replyToId": "d3731fd0-60d5-11eb-9a74-bb9adba325d2", + "id": "d46e6fc0-60d5-11eb-9a74-bb9adba325d2", + "localTimestamp": "2021-01-27T16:28:27-03:00", + "timestamp": "2021-01-27T19:28:27.324Z" + } +] diff --git a/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload2.json b/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload2.json new file mode 100644 index 0000000000..49696744d4 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload2.json @@ -0,0 +1,59 @@ +{ + "items": [ + { + "type": "message", + "role": "bot", + "text": "Attachment \"${FileName}\" has been received.\r\nFile content: GUID:${TestGuid}\r\n\r\n", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "startsWith(text, 'Attachment \"${FileName}\" has been received.\r\nFile content: GUID:${TestGuid}')", + "inputHint == 'acceptingInput'" + ] + }, + { + "type": "message", + "role": "bot", + "text": "Do you want to upload another file?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Do you want to upload another file?'", + "speak == 'Do you want to upload another file?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'Yes'", + "suggestedActions.actions[0].value == 'Yes'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'No'", + "suggestedActions.actions[1].value == 'No'" + ] + }, + { + "type": "message", + "role": "user", + "text": "No" + }, + { + "type": "message", + "role": "bot", + "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + } + ] +} diff --git a/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload2.transcript b/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload2.transcript new file mode 100644 index 0000000000..d785b4b3ff --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload2.transcript @@ -0,0 +1,138 @@ +[ + { + "type": "message", + "serviceUrl": "https://7e981c20ff5a.ngrok.io", + "channelId": "emulator", + "from": { + "id": "19b99450-a209-11eb-9135-ffc715768685", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "19c30a30-a209-11eb-8b44-53ccf8d65f4d|livechat" + }, + "recipient": { + "id": "0c3116ae-0d26-4a5f-8483-1082c9ab6c7f", + "role": "user" + }, + "locale": "", + "text": "Attachment \"test2.txt\" has been received.\r\nFile content: GUID:1234\r\n", + "inputHint": "acceptingInput", + "attachments": [], + "entities": [], + "replyToId": "2df8af51-a209-11eb-8b44-53ccf8d65f4d", + "id": "2ed3cd10-a209-11eb-8b44-53ccf8d65f4d", + "localTimestamp": "2021-04-20T15:49:48-03:00", + "timestamp": "2021-04-20T18:49:48.897Z" + }, + { + "type": "message", + "serviceUrl": "https://7e981c20ff5a.ngrok.io", + "channelId": "emulator", + "from": { + "id": "19b99450-a209-11eb-9135-ffc715768685", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "19c30a30-a209-11eb-8b44-53ccf8d65f4d|livechat" + }, + "recipient": { + "id": "0c3116ae-0d26-4a5f-8483-1082c9ab6c7f", + "role": "user" + }, + "locale": "", + "text": "Do you want to upload another file?", + "speak": "Do you want to upload another file?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "Yes", + "value": "Yes" + }, + { + "type": "imBack", + "title": "No", + "value": "No" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "2df8af51-a209-11eb-8b44-53ccf8d65f4d", + "id": "2f160630-a209-11eb-8b44-53ccf8d65f4d", + "localTimestamp": "2021-04-20T15:49:49-03:00", + "timestamp": "2021-04-20T18:49:49.331Z" + }, + { + "channelData": { + "clientActivityID": "1618944597322y3mgzbre63", + "clientTimestamp": "2021-04-20T18:49:57.322Z" + }, + "text": "No", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "0c3116ae-0d26-4a5f-8483-1082c9ab6c7f", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-04-20T18:49:57.359Z", + "conversation": { + "id": "19c30a30-a209-11eb-8b44-53ccf8d65f4d|livechat" + }, + "id": "33defff0-a209-11eb-8b44-53ccf8d65f4d", + "localTimestamp": "2021-04-20T15:49:57-03:00", + "recipient": { + "id": "19b99450-a209-11eb-9135-ffc715768685", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://7e981c20ff5a.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://7e981c20ff5a.ngrok.io", + "channelId": "emulator", + "from": { + "id": "19b99450-a209-11eb-9135-ffc715768685", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "19c30a30-a209-11eb-8b44-53ccf8d65f4d|livechat" + }, + "recipient": { + "id": "0c3116ae-0d26-4a5f-8483-1082c9ab6c7f", + "role": "user" + }, + "locale": "", + "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "33defff0-a209-11eb-8b44-53ccf8d65f4d", + "id": "34157940-a209-11eb-8b44-53ccf8d65f4d", + "localTimestamp": "2021-04-20T15:49:57-03:00", + "timestamp": "2021-04-20T18:49:57.716Z" + } +] \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/MessageWithAttachmentTests.cs b/tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/MessageWithAttachmentTests.cs new file mode 100644 index 0000000000..c7c045e792 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/MessageWithAttachmentTests.cs @@ -0,0 +1,91 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using Microsoft.Bot.Connector; +using Microsoft.Bot.Schema; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using SkillFunctionalTests.Common; +using TranscriptTestRunner; +using TranscriptTestRunner.XUnit; +using Xunit; +using Xunit.Abstractions; + +namespace SkillFunctionalTests.MessageWithAttachment +{ + [Trait("TestCategory", "Attachments")] + public class MessageWithAttachmentTests : ScriptTestBase + { + private readonly string _testScriptsFolder = Directory.GetCurrentDirectory() + @"/MessageWithAttachment/TestScripts"; + + public MessageWithAttachmentTests(ITestOutputHelper output) + : base(output) + { + } + + public static IEnumerable TestCases() + { + var channelIds = new List { Channels.Directline }; + var deliverModes = new List + { + DeliveryModes.Normal, + DeliveryModes.ExpectReplies + }; + + var hostBots = new List + { + HostBot.WaterfallHostBotDotNet, + HostBot.WaterfallHostBotJS, + HostBot.WaterfallHostBotPython, + + // TODO: Enable this when the port to composer is ready + //HostBot.ComposerHostBotDotNet + }; + + var targetSkills = new List + { + SkillBotNames.WaterfallSkillBotDotNet, + SkillBotNames.WaterfallSkillBotJS, + SkillBotNames.WaterfallSkillBotPython, + + // TODO: Enable this when the port to composer is ready + //SkillBotNames.ComposerSkillBotDotNet + }; + + var scripts = new List + { + "MessageWithAttachment.json", + }; + + var testCaseBuilder = new TestCaseBuilder(); + + var testCases = testCaseBuilder.BuildTestCases(channelIds, deliverModes, hostBots, targetSkills, scripts); + foreach (var testCase in testCases) + { + yield return testCase; + } + } + + [Theory] + [MemberData(nameof(TestCases))] + public async Task RunTestCases(TestCaseDataObject testData) + { + var testCase = testData.GetObject(); + Logger.LogInformation(JsonConvert.SerializeObject(testCase, Formatting.Indented)); + + var options = TestClientOptions[testCase.HostBot]; + var runner = new XUnitTestRunner(new TestClientFactory(testCase.ChannelId, options, Logger).GetTestClient(), TestRequestTimeout, Logger); + + var testParams = new Dictionary + { + { "DeliveryMode", testCase.DeliveryMode }, + { "TargetSkill", testCase.TargetSkill } + }; + + await runner.RunTestAsync(Path.Combine(_testScriptsFolder, testCase.Script), testParams); + } + } +} diff --git a/tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/TestScripts/MessageWithAttachment.json b/tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/TestScripts/MessageWithAttachment.json new file mode 100644 index 0000000000..3efa3c468d --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/TestScripts/MessageWithAttachment.json @@ -0,0 +1,281 @@ +{ + "items": [ + { + "type": "conversationUpdate", + "role": "user" + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "attachmentLayout == 'list'", + "speak == 'Welcome to the waterfall host bot'", + "inputHint == 'acceptingInput'", + "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'", + "attachments[0].content.type == 'AdaptiveCard'", + "attachments[0].content.body[0].type == 'Image'", + "attachments[0].content.body[0].size == 'stretch'", + "attachments[0].content.body[1].type == 'TextBlock'", + "attachments[0].content.body[1].spacing == 'Medium'", + "attachments[0].content.body[1].size == 'Medium'", + "attachments[0].content.body[1].weight == 'Bolder'", + "attachments[0].content.body[1].text == 'Welcome to the Skill Dialog Sample!'", + "attachments[0].content.body[1].wrap == True", + "attachments[0].content.body[1].color == 'Accent'", + "attachments[0].content.body[2].type == 'TextBlock'", + "attachments[0].content.body[2].text == 'This sample allows you to connect to a skill using a SkillDialog and invoke several actions.'", + "attachments[0].content.body[2].wrap == True" + ] + }, + { + "type": "message", + "role": "bot", + "text": "What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'What delivery mode would you like to use?'", + "speak == 'What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + }, + { + "type": "message", + "role": "user", + "text": "${DeliveryMode}" + }, + { + "type": "message", + "role": "bot", + "text": "What group of skills would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'What group of skills would you like to use?'", + "speak == 'What group of skills would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'", + "suggestedActions.actions[0].value == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'" + ] + }, + { + "type": "message", + "role": "user", + "text": "Waterfall" + }, + { + "type": "message", + "role": "bot", + "text": "What skill would you like to call?\n\n 1. WaterfallSkillBotDotNet\n 2. WaterfallSkillBotJS\n 3. WaterfallSkillBotPython", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "startsWith(text, 'What skill would you like to call?')", + "speak == 'What skill would you like to call?'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "${TargetSkill}" + }, + { + "type": "message", + "role": "bot", + "text": "Select an action # to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Select an action to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update'", + "speak == 'Select an action to send to **${TargetSkill}**.'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "MessageWithAttachment" + }, + { + "type": "trace", + "role": "bot", + "assertions": [ + "type == 'trace'", + "from.role == 'bot'", + "recipient.role == 'user'", + "label == 'Got ActivityType: event'", + "name == 'ActivityRouterDialog.ProcessActivityAsync()'" + ] + }, + { + "type": "trace", + "role": "bot", + "assertions": [ + "type == 'trace'", + "from.role == 'bot'", + "recipient.role == 'user'", + "label == 'Name: Attachment. Value: '", + "name == 'ActivityRouterDialog.OnEventActivityAsync()'" + ] + }, + { + "type": "message", + "role": "bot", + "text": "What attachment type do you want?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'What attachment type do you want?'", + "speak == 'What attachment type do you want?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'Inline'", + "suggestedActions.actions[0].value == 'Inline'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'Internet'", + "suggestedActions.actions[1].value == 'Internet'" + ] + }, + { + "type": "message", + "role": "user", + "text": "Inline" + }, + { + "type": "message", + "role": "bot", + "text": "This is an inline attachment.", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'This is an inline attachment.'", + "inputHint == 'ignoringInput'", + "attachments[0].contentType == 'image/png'", + "attachments[0].name == 'Files/architecture-resize.png'" + ] + }, + { + "type": "message", + "role": "bot", + "text": "Do you want another type of attachment?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Do you want another type of attachment?'", + "speak == 'Do you want another type of attachment?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'Yes'", + "suggestedActions.actions[0].value == 'Yes'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'No'", + "suggestedActions.actions[1].value == 'No'" + ] + }, + { + "type": "message", + "role": "user", + "text": "Yes" + }, + { + "type": "message", + "role": "bot", + "text": "What attachment type do you want?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'What attachment type do you want?'", + "speak == 'What attachment type do you want?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'Inline'", + "suggestedActions.actions[0].value == 'Inline'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'Internet'", + "suggestedActions.actions[1].value == 'Internet'" + ] + }, + { + "type": "message", + "role": "user", + "text": "Internet" + }, + { + "type": "message", + "role": "bot", + "text": "This is an attachment from a HTTP URL.", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'This is an attachment from a HTTP URL.'", + "inputHint == 'ignoringInput'", + "attachments[0].contentType == 'image/png'", + "endsWith(attachments[0].contentUrl, 'images/architecture-resize.png')", + "attachments[0].name == 'Files/architecture-resize.png'" + ] + }, + { + "type": "message", + "role": "bot", + "text": "Do you want another type of attachment?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Do you want another type of attachment?'", + "speak == 'Do you want another type of attachment?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'Yes'", + "suggestedActions.actions[0].value == 'Yes'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'No'", + "suggestedActions.actions[1].value == 'No'" + ] + }, + { + "type": "message", + "role": "user", + "text": "No" + }, + { + "type": "message", + "role": "bot", + "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + } + ] +} diff --git a/tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/TestScripts/MessageWithAttachment.transcript b/tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/TestScripts/MessageWithAttachment.transcript new file mode 100644 index 0000000000..112a5cde62 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/TestScripts/MessageWithAttachment.transcript @@ -0,0 +1,789 @@ +[ + { + "type": "conversationUpdate", + "membersAdded": [ + { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot" + }, + { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "name": "User" + } + ], + "membersRemoved": [], + "channelId": "emulator", + "conversation": { + "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" + }, + "id": "9496dfd0-616c-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:27:34-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "timestamp": "2021-01-28T13:27:34.221Z", + "from": { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "name": "User", + "role": "user" + }, + "locale": "", + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "role": "user" + }, + "attachmentLayout": "list", + "locale": "", + "speak": "Welcome to the waterfall host bot", + "inputHint": "acceptingInput", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.adaptive", + "content": { + "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", + "type": "AdaptiveCard", + "version": "1.0", + "body": [ + { + "type": "Image", + "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQtB3AwMUeNoq4gUBGe6Ocj8kyh3bXa9ZbV7u1fVKQoyKFHdkqU", + "size": "stretch" + }, + { + "type": "TextBlock", + "spacing": "Medium", + "size": "Medium", + "weight": "Bolder", + "text": "Welcome to the Skill Dialog Sample!", + "wrap": true, + "maxLines": 0, + "color": "Accent" + }, + { + "type": "TextBlock", + "size": "default", + "text": "This sample allows you to connect to a skill using a SkillDialog and invoke several actions.", + "wrap": true, + "maxLines": 0 + } + ] + } + } + ], + "entities": [], + "replyToId": "9496dfd0-616c-11eb-b46e-c3c3213a748e", + "id": "9544fa20-616c-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:27:35-03:00", + "timestamp": "2021-01-28T13:27:35.362Z" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "role": "user" + }, + "locale": "", + "text": "What delivery mode would you like to use?", + "speak": "What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "9496dfd0-616c-11eb-b46e-c3c3213a748e", + "id": "956e2d00-616c-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:27:35-03:00", + "timestamp": "2021-01-28T13:27:35.632Z" + }, + { + "channelData": { + "clientActivityID": "1611840456587v84hgz17ny8", + "clientTimestamp": "2021-01-28T13:27:36.587Z" + }, + "text": "normal", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:27:36.608Z", + "entities": [ + { + "requiresBotState": true, + "supportsListening": true, + "supportsTts": true, + "type": "ClientCapabilities" + } + ], + "conversation": { + "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" + }, + "id": "96031a00-616c-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:27:36-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "role": "user" + }, + "locale": "", + "text": "What type of skill would you like to use?", + "speak": "What type of skill would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "EchoSkill", + "value": "EchoSkill" + }, + { + "type": "imBack", + "title": "WaterfallSkill", + "value": "WaterfallSkill" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "96031a00-616c-11eb-b46e-c3c3213a748e", + "id": "96980700-616c-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:27:37-03:00", + "timestamp": "2021-01-28T13:27:37.584Z" + }, + { + "channelData": { + "clientActivityID": "16118404585657p5vbek9bxa", + "clientTimestamp": "2021-01-28T13:27:38.565Z" + }, + "text": "WaterfallSkill", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:27:38.588Z", + "conversation": { + "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" + }, + "id": "973139c0-616c-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:27:38-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "role": "user" + }, + "locale": "", + "text": "What skill would you like to call?", + "speak": "What skill would you like to call?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "WaterfallSkillBotDotNet", + "value": "WaterfallSkillBotDotNet" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "973139c0-616c-11eb-b46e-c3c3213a748e", + "id": "97cf2770-616c-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:27:39-03:00", + "timestamp": "2021-01-28T13:27:39.623Z" + }, + { + "channelData": { + "clientActivityID": "1611840461032eejmg7hkwgc", + "clientTimestamp": "2021-01-28T13:27:41.032Z" + }, + "text": "WaterfallSkillBotDotNet", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:27:41.053Z", + "conversation": { + "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" + }, + "id": "98a95ad0-616c-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:27:41-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "role": "user" + }, + "locale": "", + "text": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo", + "speak": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.", + "inputHint": "expectingInput", + "attachments": [], + "entities": [], + "replyToId": "98a95ad0-616c-11eb-b46e-c3c3213a748e", + "id": "993e6ee0-616c-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:27:42-03:00", + "timestamp": "2021-01-28T13:27:42.029Z" + }, + { + "channelData": { + "clientActivityID": "1611840465174eu3jly2odgv", + "clientTimestamp": "2021-01-28T13:27:45.174Z" + }, + "text": "4", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:27:45.203Z", + "conversation": { + "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" + }, + "id": "9b229830-616c-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:27:45-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "trace", + "timestamp": "2021-01-28T13:27:46.200Z", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "role": "user" + }, + "locale": "", + "replyToId": "9b229830-616c-11eb-b46e-c3c3213a748e", + "label": "Got ActivityType: event", + "name": "ActivityRouterDialog.ProcessActivityAsync()", + "id": "9bbab980-616c-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:27:46-03:00" + }, + { + "type": "trace", + "timestamp": "2021-01-28T13:27:46.485Z", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "role": "user" + }, + "locale": "", + "replyToId": "9b229830-616c-11eb-b46e-c3c3213a748e", + "label": "Name: MessageWithAttachment. Value: ", + "name": "ActivityRouterDialog.OnEventActivityAsync()", + "id": "9be63650-616c-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:27:46-03:00" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "role": "user" + }, + "locale": "", + "text": "What card do you want?", + "speak": "What card do you want?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "Inline", + "value": "Inline" + }, + { + "type": "imBack", + "title": "Internet", + "value": "Internet" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "9b229830-616c-11eb-b46e-c3c3213a748e", + "id": "9c10efd0-616c-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:27:46-03:00", + "timestamp": "2021-01-28T13:27:46.765Z" + }, + { + "channelData": { + "clientActivityID": "16118405051429uurdklppdu", + "clientTimestamp": "2021-01-28T13:28:25.142Z" + }, + "text": "Inline", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:28:25.198Z", + "conversation": { + "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" + }, + "id": "b2f958e0-616c-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:28:25-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "role": "user" + }, + "locale": "", + "text": "This is an inline attachment.", + "inputHint": "acceptingInput", + "attachments": [ + { + "contentType": "image/png", + "contentUrl": "data:image/png;base64,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", + "name": "Files\\architecture-resize.png" + } + ], + "entities": [], + "replyToId": "b2f958e0-616c-11eb-b46e-c3c3213a748e", + "id": "b57b96f0-616c-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:28:29-03:00", + "timestamp": "2021-01-28T13:28:29.407Z" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "role": "user" + }, + "locale": "", + "text": "Do you want another type of attachment?", + "speak": "Do you want another type of attachment?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "Yes", + "value": "Yes" + }, + { + "type": "imBack", + "title": "No", + "value": "No" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "b2f958e0-616c-11eb-b46e-c3c3213a748e", + "id": "b5a82530-616c-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:28:29-03:00", + "timestamp": "2021-01-28T13:28:29.699Z" + }, + { + "channelData": { + "clientActivityID": "16118405370383nul2pf807g", + "clientTimestamp": "2021-01-28T13:28:57.038Z" + }, + "text": "Yes", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:28:57.116Z", + "conversation": { + "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" + }, + "id": "c5ffa5c0-616c-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:28:57-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "role": "user" + }, + "locale": "", + "text": "What card do you want?", + "speak": "What card do you want?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "Inline", + "value": "Inline" + }, + { + "type": "imBack", + "title": "Internet", + "value": "Internet" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "c5ffa5c0-616c-11eb-b46e-c3c3213a748e", + "id": "c6c4f190-616c-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:28:58-03:00", + "timestamp": "2021-01-28T13:28:58.409Z" + }, + { + "channelData": { + "clientActivityID": "16118405437189fvw0nchfd", + "clientTimestamp": "2021-01-28T13:29:03.718Z" + }, + "text": "Internet", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:29:03.775Z", + "conversation": { + "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" + }, + "id": "c9f7baf0-616c-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:29:03-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "role": "user" + }, + "locale": "", + "text": "This is an attachment from a HTTP URL.", + "inputHint": "acceptingInput", + "attachments": [ + { + "contentType": "image/png", + "contentUrl": "https://docs.microsoft.com/en-us/bot-framework/media/how-it-works/architecture-resize.png", + "name": "Files\\architecture-resize.png" + } + ], + "entities": [], + "replyToId": "c9f7baf0-616c-11eb-b46e-c3c3213a748e", + "id": "caae87d0-616c-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:29:04-03:00", + "timestamp": "2021-01-28T13:29:04.973Z" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "role": "user" + }, + "locale": "", + "text": "Do you want another type of attachment?", + "speak": "Do you want another type of attachment?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "Yes", + "value": "Yes" + }, + { + "type": "imBack", + "title": "No", + "value": "No" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "c9f7baf0-616c-11eb-b46e-c3c3213a748e", + "id": "cad9dd90-616c-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:29:05-03:00", + "timestamp": "2021-01-28T13:29:05.257Z" + }, + { + "channelData": { + "clientActivityID": "1611840562624thw0ki5mdtf", + "clientTimestamp": "2021-01-28T13:29:22.624Z" + }, + "text": "No", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:29:22.702Z", + "conversation": { + "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" + }, + "id": "d53fc2e0-616c-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:29:22-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", + "role": "user" + }, + "locale": "", + "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "d53fc2e0-616c-11eb-b46e-c3c3213a748e", + "id": "d5dffa80-616c-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:29:23-03:00", + "timestamp": "2021-01-28T13:29:23.752Z" + } +] diff --git a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/ProactiveTests.cs b/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/ProactiveTests.cs new file mode 100644 index 0000000000..cf5fb00613 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/ProactiveTests.cs @@ -0,0 +1,121 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Collections.Generic; +using System.IO; +using System.Net.Http; +using System.Threading.Tasks; +using Microsoft.Bot.Connector; +using Microsoft.Bot.Schema; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using SkillFunctionalTests.Common; +using TranscriptTestRunner; +using TranscriptTestRunner.XUnit; +using Xunit; +using Xunit.Abstractions; + +namespace SkillFunctionalTests.ProactiveMessages +{ + [Trait("TestCategory", "ProactiveMessages")] + public class ProactiveTests : ScriptTestBase + { + private readonly string _testScriptsFolder = Directory.GetCurrentDirectory() + @"/ProactiveMessages/TestScripts"; + + public ProactiveTests(ITestOutputHelper output) + : base(output) + { + } + + public static IEnumerable TestCases() + { + var channelIds = new List { Channels.Directline }; + var deliverModes = new List + { + DeliveryModes.Normal, + DeliveryModes.ExpectReplies + }; + + var hostBots = new List + { + HostBot.WaterfallHostBotDotNet, + HostBot.WaterfallHostBotJS, + HostBot.WaterfallHostBotPython, + + // TODO: Enable this when the port to composer is ready + //HostBot.ComposerHostBotDotNet + }; + + var targetSkills = new List + { + SkillBotNames.WaterfallSkillBotDotNet, + SkillBotNames.WaterfallSkillBotPython, + + // TODO: Enable these when the ports to JS, and composer are ready + //SkillBotNames.WaterfallSkillBotJS, + //SkillBotNames.ComposerSkillBotDotNet + }; + + var scripts = new List + { + "ProactiveStart.json", + }; + + var testCaseBuilder = new TestCaseBuilder(); + + var testCases = testCaseBuilder.BuildTestCases(channelIds, deliverModes, hostBots, targetSkills, scripts); + foreach (var testCase in testCases) + { + yield return testCase; + } + } + + [Theory] + [MemberData(nameof(TestCases))] + public async Task RunTestCases(TestCaseDataObject testData) + { + var userId = string.Empty; + var url = string.Empty; + + var testCase = testData.GetObject(); + Logger.LogInformation(JsonConvert.SerializeObject(testCase, Formatting.Indented)); + + var options = TestClientOptions[testCase.HostBot]; + var runner = new XUnitTestRunner(new TestClientFactory(testCase.ChannelId, options, Logger).GetTestClient(), TestRequestTimeout, Logger); + + var testParamsStart = new Dictionary + { + { "DeliveryMode", testCase.DeliveryMode }, + { "TargetSkill", testCase.TargetSkill } + }; + + // Execute the first part of the conversation. + await runner.RunTestAsync(Path.Combine(_testScriptsFolder, testCase.Script), testParamsStart); + + await runner.AssertReplyAsync(activity => + { + Assert.Equal(ActivityTypes.Message, activity.Type); + Assert.Contains("Navigate to http", activity.Text); + + var message = activity.Text.Split(" "); + url = message[2]; + userId = url.Split("user=")[1]; + }); + + // Send a get request to the message's url to continue the conversation. + using (var client = new HttpClient()) + { + await client.GetAsync(url).ConfigureAwait(false); + } + + var testParamsEnd = new Dictionary + { + { "UserId", userId }, + { "TargetSkill", testCase.TargetSkill } + }; + + // Execute the rest of the conversation passing the messageId. + await runner.RunTestAsync(Path.Combine(_testScriptsFolder, "ProactiveEnd.json"), testParamsEnd); + } + } +} diff --git a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveEnd.json b/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveEnd.json new file mode 100644 index 0000000000..9e6671b8d0 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveEnd.json @@ -0,0 +1,47 @@ +{ + "items": [ + { + "type": "message", + "role": "bot", + "text": "Got proactive message for user: ${UserId}", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Got proactive message for user: ${UserId}'", + "inputHint == 'acceptingInput'" + ] + }, + { + "type": "message", + "role": "bot", + "text": "We received a proactive message, ending the dialog", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'We received a proactive message, ending the dialog'", + "inputHint == 'acceptingInput'" + ] + }, + { + "type": "message", + "role": "bot", + "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveEnd.transcript b/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveEnd.transcript new file mode 100644 index 0000000000..0ee0498b53 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveEnd.transcript @@ -0,0 +1,91 @@ +[ + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", + "role": "user" + }, + "locale": "", + "text": "Got proactive message for user: ${UserId}", + "inputHint": "acceptingInput", + "replyToId": "5dfebb53-9851-449a-a86f-dff9a9155816", + "id": "f44c7b20-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:23:05-03:00", + "timestamp": "2021-01-28T13:23:05.298Z" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", + "role": "user" + }, + "locale": "", + "text": "We received a proactive message, ending the dialog", + "inputHint": "acceptingInput", + "replyToId": "5dfebb53-9851-449a-a86f-dff9a9155816", + "id": "f4789430-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:23:05-03:00", + "timestamp": "2021-01-28T13:23:05.587Z" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", + "role": "user" + }, + "locale": "", + "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "5dfebb53-9851-449a-a86f-dff9a9155816", + "id": "f4a4fb60-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:23:05-03:00", + "timestamp": "2021-01-28T13:23:05.878Z" + } +] diff --git a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveStart.json b/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveStart.json new file mode 100644 index 0000000000..1f1b1108d8 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveStart.json @@ -0,0 +1,137 @@ +{ + "items": [ + { + "type": "conversationUpdate", + "role": "user" + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "attachmentLayout == 'list'", + "speak == 'Welcome to the waterfall host bot'", + "inputHint == 'acceptingInput'", + "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'", + "attachments[0].content.type == 'AdaptiveCard'", + "attachments[0].content.body[0].type == 'Image'", + "attachments[0].content.body[0].size == 'stretch'", + "attachments[0].content.body[1].type == 'TextBlock'", + "attachments[0].content.body[1].spacing == 'Medium'", + "attachments[0].content.body[1].size == 'Medium'", + "attachments[0].content.body[1].weight == 'Bolder'", + "attachments[0].content.body[1].text == 'Welcome to the Skill Dialog Sample!'", + "attachments[0].content.body[1].wrap == True", + "attachments[0].content.body[1].color == 'Accent'", + "attachments[0].content.body[2].type == 'TextBlock'", + "attachments[0].content.body[2].text == 'This sample allows you to connect to a skill using a SkillDialog and invoke several actions.'", + "attachments[0].content.body[2].wrap == True" + ] + }, + { + "type": "message", + "role": "bot", + "text": "What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'What delivery mode would you like to use?'", + "speak == 'What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + }, + { + "type": "message", + "role": "user", + "text": "${DeliveryMode}" + }, + { + "type": "message", + "role": "bot", + "text": "What group of skills would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'What group of skills would you like to use?'", + "speak == 'What group of skills would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'", + "suggestedActions.actions[0].value == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'" + ] + }, + { + "type": "message", + "role": "user", + "text": "Waterfall" + }, + { + "type": "message", + "role": "bot", + "text": "What skill would you like to call?\n\n 1. WaterfallSkillBotDotNet\n 2. WaterfallSkillBotJS\n 3. WaterfallSkillBotPython", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "startsWith(text, 'What skill would you like to call?')", + "speak == 'What skill would you like to call?'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "${TargetSkill}" + }, + { + "type": "message", + "role": "bot", + "text": "Select an action # to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Select an action to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update'", + "speak == 'Select an action to send to **${TargetSkill}**.'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "Proactive" + }, + { + "type": "trace", + "role": "bot", + "assertions": [ + "type == 'trace'", + "from.role == 'bot'", + "recipient.role == 'user'", + "label == 'Got ActivityType: event'", + "name == 'ActivityRouterDialog.ProcessActivityAsync()'" + ] + }, + { + "type": "trace", + "role": "bot", + "assertions": [ + "type == 'trace'", + "from.role == 'bot'", + "recipient.role == 'user'", + "label == 'Name: Proactive. Value: '", + "name == 'ActivityRouterDialog.OnEventActivityAsync()'" + ] + } + ] +} diff --git a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveStart.transcript b/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveStart.transcript new file mode 100644 index 0000000000..ef34517760 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveStart.transcript @@ -0,0 +1,408 @@ +[ + { + "type": "conversationUpdate", + "membersAdded": [ + { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot" + }, + { + "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", + "name": "User" + } + ], + "membersRemoved": [], + "channelId": "emulator", + "conversation": { + "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" + }, + "id": "981e0030-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:20:30-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "timestamp": "2021-01-28T13:20:30.643Z", + "from": { + "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", + "name": "User", + "role": "user" + }, + "locale": "", + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", + "role": "user" + }, + "attachmentLayout": "list", + "locale": "", + "speak": "Welcome to the waterfall host bot", + "inputHint": "acceptingInput", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.adaptive", + "content": { + "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", + "type": "AdaptiveCard", + "version": "1.0", + "body": [ + { + "type": "Image", + "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQtB3AwMUeNoq4gUBGe6Ocj8kyh3bXa9ZbV7u1fVKQoyKFHdkqU", + "size": "stretch" + }, + { + "type": "TextBlock", + "spacing": "Medium", + "size": "Medium", + "weight": "Bolder", + "text": "Welcome to the Skill Dialog Sample!", + "wrap": true, + "maxLines": 0, + "color": "Accent" + }, + { + "type": "TextBlock", + "size": "default", + "text": "This sample allows you to connect to a skill using a SkillDialog and invoke several actions.", + "wrap": true, + "maxLines": 0 + } + ] + } + } + ], + "entities": [], + "replyToId": "981e0030-616b-11eb-b46e-c3c3213a748e", + "id": "98f26730-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:20:32-03:00", + "timestamp": "2021-01-28T13:20:32.035Z" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", + "role": "user" + }, + "locale": "", + "text": "What delivery mode would you like to use?", + "speak": "What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "981e0030-616b-11eb-b46e-c3c3213a748e", + "id": "991c0f40-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:20:32-03:00", + "timestamp": "2021-01-28T13:20:32.308Z" + }, + { + "channelData": { + "clientActivityID": "1611840033447rjp2jvkf9jk", + "clientTimestamp": "2021-01-28T13:20:33.447Z" + }, + "text": "normal", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:20:33.472Z", + "entities": [ + { + "requiresBotState": true, + "supportsListening": true, + "supportsTts": true, + "type": "ClientCapabilities" + } + ], + "conversation": { + "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" + }, + "id": "99cdac00-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:20:33-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", + "role": "user" + }, + "locale": "", + "text": "What type of skill would you like to use?", + "speak": "What type of skill would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "EchoSkill", + "value": "EchoSkill" + }, + { + "type": "imBack", + "title": "WaterfallSkill", + "value": "WaterfallSkill" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "99cdac00-616b-11eb-b46e-c3c3213a748e", + "id": "9a618790-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:20:34-03:00", + "timestamp": "2021-01-28T13:20:34.441Z" + }, + { + "channelData": { + "clientActivityID": "1611840035554f72iioqm5u6", + "clientTimestamp": "2021-01-28T13:20:35.554Z" + }, + "text": "WaterfallSkill", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:20:35.584Z", + "conversation": { + "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" + }, + "id": "9b0ff000-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:20:35-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", + "role": "user" + }, + "locale": "", + "text": "What skill would you like to call?", + "speak": "What skill would you like to call?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "WaterfallSkillBotDotNet", + "value": "WaterfallSkillBotDotNet" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "9b0ff000-616b-11eb-b46e-c3c3213a748e", + "id": "9babe1e0-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:20:36-03:00", + "timestamp": "2021-01-28T13:20:36.606Z" + }, + { + "channelData": { + "clientActivityID": "1611840037630e91nk7asij4", + "clientTimestamp": "2021-01-28T13:20:37.630Z" + }, + "text": "WaterfallSkillBotDotNet", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:20:37.663Z", + "conversation": { + "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" + }, + "id": "9c4d2af0-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:20:37-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", + "role": "user" + }, + "locale": "", + "text": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo", + "speak": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.", + "inputHint": "expectingInput", + "attachments": [], + "entities": [], + "replyToId": "9c4d2af0-616b-11eb-b46e-c3c3213a748e", + "id": "9ce30250-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:20:38-03:00", + "timestamp": "2021-01-28T13:20:38.645Z" + }, + { + "channelData": { + "clientActivityID": "16118400442741u2eexpiomv", + "clientTimestamp": "2021-01-28T13:20:44.274Z" + }, + "text": "Proactive", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-28T13:20:44.313Z", + "conversation": { + "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" + }, + "id": "a043e090-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:20:44-03:00", + "recipient": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://9ed82cccfc76.ngrok.io" + }, + { + "type": "trace", + "timestamp": "2021-01-28T13:20:45.553Z", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", + "role": "user" + }, + "locale": "", + "replyToId": "a043e090-616b-11eb-b46e-c3c3213a748e", + "label": "Got ActivityType: event", + "name": "ActivityRouterDialog.ProcessActivityAsync()", + "id": "a1011610-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:20:45-03:00" + }, + { + "type": "trace", + "timestamp": "2021-01-28T13:20:45.845Z", + "serviceUrl": "https://9ed82cccfc76.ngrok.io", + "channelId": "emulator", + "from": { + "id": "48224d50-60a5-11eb-881a-afe376da3863", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" + }, + "recipient": { + "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", + "role": "user" + }, + "locale": "", + "replyToId": "a043e090-616b-11eb-b46e-c3c3213a748e", + "label": "Name: Proactive. Value: ", + "name": "ActivityRouterDialog.OnEventActivityAsync()", + "id": "a12da450-616b-11eb-b46e-c3c3213a748e", + "localTimestamp": "2021-01-28T10:20:45-03:00" + } +] diff --git a/tests/functional/Tests/SkillFunctionalTests/README.md b/tests/functional/Tests/SkillFunctionalTests/README.md new file mode 100644 index 0000000000..7de681fca3 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/README.md @@ -0,0 +1,7 @@ +# Skills Functional Tests + +## Summary + +Skill functional testing aims to automate the testing of Host and Skill interactions through several scenarios in all available programming languages. + +Head to [Docs](../../Docs/) directory for more information. diff --git a/tests/functional/Tests/SkillFunctionalTests/ScriptTestBase.cs b/tests/functional/Tests/SkillFunctionalTests/ScriptTestBase.cs new file mode 100644 index 0000000000..59ae89e379 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/ScriptTestBase.cs @@ -0,0 +1,46 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Collections.Generic; +using System.IO; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using SkillFunctionalTests.Common; +using TranscriptTestRunner.TestClients; +using Xunit.Abstractions; + +namespace SkillFunctionalTests +{ + public class ScriptTestBase + { + public ScriptTestBase(ITestOutputHelper output) + { + var configuration = new ConfigurationBuilder() + .AddJsonFile("appsettings.json") + .AddJsonFile("appsettings.Development.json", true, true) + .AddEnvironmentVariables() + .Build(); + + var loggerFactory = LoggerFactory.Create(builder => + { + builder + .AddConfiguration(configuration.GetSection("Logging")) + .AddConsole() + .AddDebug() + .AddFile(Directory.GetCurrentDirectory() + @"/Logs/Log.json", isJson: true) + .AddXunit(output); + }); + + Logger = loggerFactory.CreateLogger(); + + TestRequestTimeout = int.Parse(configuration["TestRequestTimeout"]); + TestClientOptions = configuration.GetSection("HostBotClientOptions").Get>(); + } + + public Dictionary TestClientOptions { get; } + + public ILogger Logger { get; } + + public int TestRequestTimeout { get; } + } +} diff --git a/tests/functional/Tests/SkillFunctionalTests/SignIn/SignInTests.cs b/tests/functional/Tests/SkillFunctionalTests/SignIn/SignInTests.cs new file mode 100644 index 0000000000..abbb3582c7 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/SignIn/SignInTests.cs @@ -0,0 +1,111 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Bot.Connector; +using Microsoft.Bot.Schema; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using SkillFunctionalTests.Common; +using TranscriptTestRunner; +using TranscriptTestRunner.XUnit; +using Xunit; +using Xunit.Abstractions; + +namespace SkillFunctionalTests.SignIn +{ + [Trait("TestCategory", "SignIn")] + public class SignInTests : ScriptTestBase + { + private readonly string _testScriptsFolder = Directory.GetCurrentDirectory() + @"/SignIn/TestScripts"; + + public SignInTests(ITestOutputHelper output) + : base(output) + { + } + + public static IEnumerable TestCases() + { + var channelIds = new List { Channels.Directline }; + var deliverModes = new List + { + DeliveryModes.Normal, + DeliveryModes.ExpectReplies, + }; + + var hostBots = new List + { + HostBot.WaterfallHostBotDotNet, + HostBot.WaterfallHostBotJS, + HostBot.WaterfallHostBotPython, + + // TODO: Enable this when the port to composer is ready + //HostBot.ComposerHostBotDotNet + }; + + var targetSkills = new List + { + SkillBotNames.WaterfallSkillBotDotNet, + SkillBotNames.WaterfallSkillBotJS, + SkillBotNames.WaterfallSkillBotPython, + + // TODO: Enable this when the port to composer is ready + //SkillBotNames.ComposerSkillBotDotNet + }; + + var scripts = new List + { + "SignIn1.json" + }; + + var testCaseBuilder = new TestCaseBuilder(); + + var testCases = testCaseBuilder.BuildTestCases(channelIds, deliverModes, hostBots, targetSkills, scripts); + foreach (var testCase in testCases) + { + yield return testCase; + } + } + + [Theory] + [MemberData(nameof(TestCases))] + public async Task RunTestCases(TestCaseDataObject testData) + { + var signInUrl = string.Empty; + var testCase = testData.GetObject(); + Logger.LogInformation(JsonConvert.SerializeObject(testCase, Formatting.Indented)); + + var options = TestClientOptions[testCase.HostBot]; + var runner = new XUnitTestRunner(new TestClientFactory(testCase.ChannelId, options, Logger).GetTestClient(), TestRequestTimeout, Logger); + + var testParams = new Dictionary + { + { "DeliveryMode", testCase.DeliveryMode }, + { "TargetSkill", testCase.TargetSkill } + }; + + // Execute the first part of the conversation. + await runner.RunTestAsync(Path.Combine(_testScriptsFolder, testCase.Script), testParams); + + await runner.AssertReplyAsync(activity => + { + Assert.Equal(ActivityTypes.Message, activity.Type); + Assert.True(activity.Attachments.Count > 0); + + var card = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(activity.Attachments.FirstOrDefault().Content)); + signInUrl = card.Buttons[0].Value?.ToString(); + + Assert.False(string.IsNullOrEmpty(signInUrl)); + }); + + // Execute the SignIn. + await runner.ClientSignInAsync(signInUrl); + + // Execute the rest of the conversation passing the messageId. + await runner.RunTestAsync(Path.Combine(_testScriptsFolder, "SignIn2.json"), testParams); + } + } +} diff --git a/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn1.json b/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn1.json new file mode 100644 index 0000000000..75f761289a --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn1.json @@ -0,0 +1,112 @@ +{ + "items": [ + { + "type": "conversationUpdate", + "role": "user" + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "attachmentLayout == 'list'", + "speak == 'Welcome to the waterfall host bot'", + "inputHint == 'acceptingInput'", + "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'", + "attachments[0].content.type == 'AdaptiveCard'", + "attachments[0].content.body[0].type == 'Image'", + "attachments[0].content.body[0].size == 'stretch'", + "attachments[0].content.body[1].type == 'TextBlock'", + "attachments[0].content.body[1].spacing == 'Medium'", + "attachments[0].content.body[1].size == 'Medium'", + "attachments[0].content.body[1].weight == 'Bolder'", + "attachments[0].content.body[1].text == 'Welcome to the Skill Dialog Sample!'", + "attachments[0].content.body[1].wrap == True", + "attachments[0].content.body[1].color == 'Accent'", + "attachments[0].content.body[2].type == 'TextBlock'", + "attachments[0].content.body[2].text == 'This sample allows you to connect to a skill using a SkillDialog and invoke several actions.'", + "attachments[0].content.body[2].wrap == True" + ] + }, + { + "type": "message", + "role": "bot", + "text": "What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'What delivery mode would you like to use?'", + "speak == 'What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + }, + { + "type": "message", + "role": "user", + "text": "${DeliveryMode}" + }, + { + "type": "message", + "role": "bot", + "text": "What group of skills would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'What group of skills would you like to use?'", + "speak == 'What group of skills would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'", + "suggestedActions.actions[0].value == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'" + ] + }, + { + "type": "message", + "role": "user", + "text": "Waterfall" + }, + { + "type": "message", + "role": "bot", + "text": "What skill would you like to call?\n\n 1. WaterfallSkillBotDotNet\n 2. WaterfallSkillBotJS\n 3. WaterfallSkillBotPython", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "startsWith(text, 'What skill would you like to call?')", + "speak == 'What skill would you like to call?'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "${TargetSkill}" + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "Auth" + } + ] +} diff --git a/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn1.transcript b/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn1.transcript new file mode 100644 index 0000000000..71181719c3 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn1.transcript @@ -0,0 +1,360 @@ +[ + { + "type": "conversationUpdate", + "membersAdded": [ + { + "id": "73573150-60c5-11eb-b881-018622be8a2a", + "name": "Bot" + }, + { + "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", + "name": "User" + } + ], + "membersRemoved": [], + "channelId": "emulator", + "conversation": { + "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" + }, + "id": "da5e8130-60d1-11eb-8b98-b971494822a6", + "localTimestamp": "2021-01-27T15:59:59-03:00", + "recipient": { + "id": "73573150-60c5-11eb-b881-018622be8a2a", + "name": "Bot", + "role": "bot" + }, + "timestamp": "2021-01-27T18:59:59.299Z", + "from": { + "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", + "name": "User", + "role": "user" + }, + "locale": "", + "serviceUrl": "https://259039676c61.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://259039676c61.ngrok.io", + "channelId": "emulator", + "from": { + "id": "73573150-60c5-11eb-b881-018622be8a2a", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" + }, + "recipient": { + "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", + "role": "user" + }, + "attachmentLayout": "list", + "locale": "", + "speak": "Welcome to the waterfall host bot", + "inputHint": "acceptingInput", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.adaptive", + "content": { + "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", + "type": "AdaptiveCard", + "version": "1.0", + "body": [ + { + "type": "Image", + "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQtB3AwMUeNoq4gUBGe6Ocj8kyh3bXa9ZbV7u1fVKQoyKFHdkqU", + "size": "stretch" + }, + { + "type": "TextBlock", + "spacing": "Medium", + "size": "Medium", + "weight": "Bolder", + "text": "Welcome to the Skill Dialog Sample!", + "wrap": true, + "maxLines": 0, + "color": "Accent" + }, + { + "type": "TextBlock", + "size": "default", + "text": "This sample allows you to connect to a skill using a SkillDialog and invoke several actions.", + "wrap": true, + "maxLines": 0 + } + ] + } + } + ], + "entities": [], + "replyToId": "da5e8130-60d1-11eb-8b98-b971494822a6", + "id": "db473380-60d1-11eb-8b98-b971494822a6", + "localTimestamp": "2021-01-27T16:00:00-03:00", + "timestamp": "2021-01-27T19:00:00.824Z" + }, + { + "type": "message", + "serviceUrl": "https://259039676c61.ngrok.io", + "channelId": "emulator", + "from": { + "id": "73573150-60c5-11eb-b881-018622be8a2a", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" + }, + "recipient": { + "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", + "role": "user" + }, + "locale": "", + "text": "What delivery mode would you like to use?", + "speak": "What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "da5e8130-60d1-11eb-8b98-b971494822a6", + "id": "db7129b0-60d1-11eb-8b98-b971494822a6", + "localTimestamp": "2021-01-27T16:00:01-03:00", + "timestamp": "2021-01-27T19:00:01.099Z" + }, + { + "channelData": { + "clientActivityID": "16117740025163t1zr5cif", + "clientTimestamp": "2021-01-27T19:00:02.516Z" + }, + "text": "normal", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-27T19:00:02.528Z", + "entities": [ + { + "requiresBotState": true, + "supportsListening": true, + "supportsTts": true, + "type": "ClientCapabilities" + } + ], + "conversation": { + "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" + }, + "id": "dc4b3600-60d1-11eb-8b98-b971494822a6", + "localTimestamp": "2021-01-27T16:00:02-03:00", + "recipient": { + "id": "73573150-60c5-11eb-b881-018622be8a2a", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://259039676c61.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://259039676c61.ngrok.io", + "channelId": "emulator", + "from": { + "id": "73573150-60c5-11eb-b881-018622be8a2a", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" + }, + "recipient": { + "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", + "role": "user" + }, + "locale": "", + "text": "What type of skill would you like to use?", + "speak": "What type of skill would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "EchoSkill", + "value": "EchoSkill" + }, + { + "type": "imBack", + "title": "WaterfallSkill", + "value": "WaterfallSkill" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "dc4b3600-60d1-11eb-8b98-b971494822a6", + "id": "dcd65f00-60d1-11eb-8b98-b971494822a6", + "localTimestamp": "2021-01-27T16:00:03-03:00", + "timestamp": "2021-01-27T19:00:03.440Z" + }, + { + "channelData": { + "clientActivityID": "1611774004677b31ih46f32l", + "clientTimestamp": "2021-01-27T19:00:04.677Z" + }, + "text": "WaterfallSkill", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-27T19:00:04.692Z", + "conversation": { + "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" + }, + "id": "dd956940-60d1-11eb-8b98-b971494822a6", + "localTimestamp": "2021-01-27T16:00:04-03:00", + "recipient": { + "id": "73573150-60c5-11eb-b881-018622be8a2a", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://259039676c61.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://259039676c61.ngrok.io", + "channelId": "emulator", + "from": { + "id": "73573150-60c5-11eb-b881-018622be8a2a", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" + }, + "recipient": { + "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", + "role": "user" + }, + "locale": "", + "text": "What skill would you like to call?", + "speak": "What skill would you like to call?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "WaterfallSkillBotDotNet", + "value": "WaterfallSkillBotDotNet" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "dd956940-60d1-11eb-8b98-b971494822a6", + "id": "de24d800-60d1-11eb-8b98-b971494822a6", + "localTimestamp": "2021-01-27T16:00:05-03:00", + "timestamp": "2021-01-27T19:00:05.632Z" + }, + { + "channelData": { + "clientActivityID": "1611774006749prlvxjdfr2b", + "clientTimestamp": "2021-01-27T19:00:06.749Z" + }, + "text": "WaterfallSkillBotDotNet", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-27T19:00:06.776Z", + "conversation": { + "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" + }, + "id": "ded36780-60d1-11eb-8b98-b971494822a6", + "localTimestamp": "2021-01-27T16:00:06-03:00", + "recipient": { + "id": "73573150-60c5-11eb-b881-018622be8a2a", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://259039676c61.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://259039676c61.ngrok.io", + "channelId": "emulator", + "from": { + "id": "73573150-60c5-11eb-b881-018622be8a2a", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" + }, + "recipient": { + "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", + "role": "user" + }, + "locale": "", + "text": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo", + "speak": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.", + "inputHint": "expectingInput", + "attachments": [], + "entities": [], + "replyToId": "ded36780-60d1-11eb-8b98-b971494822a6", + "id": "df60da70-60d1-11eb-8b98-b971494822a6", + "localTimestamp": "2021-01-27T16:00:07-03:00", + "timestamp": "2021-01-27T19:00:07.703Z" + }, + { + "channelData": { + "clientActivityID": "1611774010842ks0wa2td8kl", + "clientTimestamp": "2021-01-27T19:00:10.842Z" + }, + "text": "Auth", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-27T19:00:10.866Z", + "conversation": { + "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" + }, + "id": "e1437d20-60d1-11eb-8b98-b971494822a6", + "localTimestamp": "2021-01-27T16:00:10-03:00", + "recipient": { + "id": "73573150-60c5-11eb-b881-018622be8a2a", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://259039676c61.ngrok.io" + } +] \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn2.json b/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn2.json new file mode 100644 index 0000000000..6382f436e7 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn2.json @@ -0,0 +1,77 @@ +{ + "items": [ + { + "type": "message", + "role": "bot", + "text": "You are now logged in.", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'You are now logged in.'", + "speak == 'You are now logged in.'", + "inputHint == 'ignoringInput'" + ] + }, + { + "type": "message", + "role": "bot", + "text": "Would you like to view your token?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Would you like to view your token?'", + "inputHint == 'acceptingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "yes" + }, + { + "type": "message", + "role": "bot", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "speak == 'Here is your token:'", + "inputHint == 'ignoringInput'" + ] + }, + { + "type": "message", + "role": "bot", + "text": "I have signed you out.", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'I have signed you out.'", + "speak == 'I have signed you out.'", + "inputHint == 'ignoringInput'" + ] + }, + { + "type": "message", + "role": "bot", + "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/signin2.transcript b/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/signin2.transcript new file mode 100644 index 0000000000..2d8cf8ee19 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/signin2.transcript @@ -0,0 +1,124 @@ +[ + { + "type": "message", + "serviceUrl": "https://259039676c61.ngrok.io", + "channelId": "emulator", + "from": { + "id": "73573150-60c5-11eb-b881-018622be8a2a", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" + }, + "recipient": { + "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", + "role": "user" + }, + "locale": "", + "text": "You are now logged in.", + "speak": "You are now logged in.", + "inputHint": "ignoringInput", + "attachments": [], + "entities": [], + "replyToId": "05fa4ae0-60d2-11eb-8b98-b971494822a6", + "id": "07013390-60d2-11eb-8b98-b971494822a6", + "localTimestamp": "2021-01-27T16:01:14-03:00", + "timestamp": "2021-01-27T19:01:14.185Z" + }, + { + "type": "message", + "serviceUrl": "https://259039676c61.ngrok.io", + "channelId": "emulator", + "from": { + "id": "73573150-60c5-11eb-b881-018622be8a2a", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" + }, + "recipient": { + "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", + "role": "user" + }, + "locale": "", + "text": "Here is your token: 37f0ba3c-24bd-485c-9a11-7151fe604b95", + "speak": "Here is your token:", + "inputHint": "ignoringInput", + "attachments": [], + "entities": [], + "replyToId": "05fa4ae0-60d2-11eb-8b98-b971494822a6", + "id": "072c6240-60d2-11eb-8b98-b971494822a6", + "localTimestamp": "2021-01-27T16:01:14-03:00", + "timestamp": "2021-01-27T19:01:14.468Z" + }, + { + "type": "message", + "serviceUrl": "https://259039676c61.ngrok.io", + "channelId": "emulator", + "from": { + "id": "73573150-60c5-11eb-b881-018622be8a2a", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" + }, + "recipient": { + "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", + "role": "user" + }, + "locale": "", + "text": "I have signed you out.", + "speak": "I have signed you out.", + "inputHint": "ignoringInput", + "attachments": [], + "entities": [], + "replyToId": "05fa4ae0-60d2-11eb-8b98-b971494822a6", + "id": "077e2bc0-60d2-11eb-8b98-b971494822a6", + "localTimestamp": "2021-01-27T16:01:15-03:00", + "timestamp": "2021-01-27T19:01:15.004Z" + }, + { + "type": "message", + "serviceUrl": "https://259039676c61.ngrok.io", + "channelId": "emulator", + "from": { + "id": "73573150-60c5-11eb-b881-018622be8a2a", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" + }, + "recipient": { + "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", + "role": "user" + }, + "locale": "", + "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "05fa4ae0-60d2-11eb-8b98-b971494822a6", + "id": "07aa92f0-60d2-11eb-8b98-b971494822a6", + "localTimestamp": "2021-01-27T16:01:15-03:00", + "timestamp": "2021-01-27T19:01:15.295Z" + } +] \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/SingleTurn/EchoTests.cs b/tests/functional/Tests/SkillFunctionalTests/SingleTurn/EchoTests.cs new file mode 100644 index 0000000000..8ba52a0f71 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/SingleTurn/EchoTests.cs @@ -0,0 +1,104 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using Microsoft.Bot.Connector; +using Microsoft.Bot.Schema; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using SkillFunctionalTests.Common; +using TranscriptTestRunner; +using TranscriptTestRunner.XUnit; +using Xunit; +using Xunit.Abstractions; + +namespace SkillFunctionalTests.SingleTurn +{ + [Trait("TestCategory", "SingleTurn")] + public class EchoTests : ScriptTestBase + { + private readonly string _testScriptsFolder = Directory.GetCurrentDirectory() + @"/SingleTurn/TestScripts"; + + public EchoTests(ITestOutputHelper output) + : base(output) + { + } + + public static IEnumerable TestCases() + { + var channelIds = new List { Channels.Directline }; + var deliverModes = new List + { + DeliveryModes.Normal, + DeliveryModes.ExpectReplies + }; + + var hostBots = new List + { + HostBot.SimpleHostBotComposerDotNet, + HostBot.SimpleHostBotDotNet, + HostBot.SimpleHostBotDotNet21, + HostBot.SimpleHostBotJS, + HostBot.SimpleHostBotPython, + }; + + var targetSkills = new List + { + SkillBotNames.EchoSkillBotComposerDotNet, + SkillBotNames.EchoSkillBotDotNet, + SkillBotNames.EchoSkillBotDotNet21, + SkillBotNames.EchoSkillBotDotNetV3, + SkillBotNames.EchoSkillBotJS, + SkillBotNames.EchoSkillBotJSV3, + SkillBotNames.EchoSkillBotPython + }; + + var scripts = new List { "EchoMultiSkill.json" }; + + var testCaseBuilder = new TestCaseBuilder(); + + // This local function is used to exclude ExpectReplies test cases for v3 bots + static bool ShouldExclude(TestCase testCase) + { + if (testCase.DeliveryMode == DeliveryModes.ExpectReplies) + { + // Note: ExpectReplies is not supported by DotNetV3 and JSV3 skills. + if (testCase.TargetSkill == SkillBotNames.EchoSkillBotDotNetV3 || testCase.TargetSkill == SkillBotNames.EchoSkillBotJSV3) + { + return true; + } + } + + return false; + } + + var testCases = testCaseBuilder.BuildTestCases(channelIds, deliverModes, hostBots, targetSkills, scripts, ShouldExclude); + foreach (var testCase in testCases) + { + yield return testCase; + } + } + + [Theory] + [MemberData(nameof(TestCases))] + public async Task RunTestCases(TestCaseDataObject testData) + { + var testCase = testData.GetObject(); + Logger.LogInformation(JsonConvert.SerializeObject(testCase, Formatting.Indented)); + + var options = TestClientOptions[testCase.HostBot]; + + var runner = new XUnitTestRunner(new TestClientFactory(testCase.ChannelId, options, Logger).GetTestClient(), TestRequestTimeout, Logger); + + var testParams = new Dictionary + { + { "DeliveryMode", testCase.DeliveryMode }, + { "TargetSkill", testCase.TargetSkill } + }; + + await runner.RunTestAsync(Path.Combine(_testScriptsFolder, testCase.Script), testParams); + } + } +} diff --git a/tests/functional/Tests/SkillFunctionalTests/SingleTurn/TestScripts/EchoMultiSkill.json b/tests/functional/Tests/SkillFunctionalTests/SingleTurn/TestScripts/EchoMultiSkill.json new file mode 100644 index 0000000000..1b3c06348e --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/SingleTurn/TestScripts/EchoMultiSkill.json @@ -0,0 +1,163 @@ +{ + "items": [ + { + "type": "conversationUpdate", + "role": "user" + }, + { + "type": "message", + "role": "bot", + "text": "Hello and welcome!", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Hello and welcome!'", + "inputHint == 'acceptingInput'" + ] + }, + { + "type": "message", + "role": "bot", + "text": "What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'What delivery mode would you like to use?'", + "speak == 'What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + }, + { + "type": "message", + "role": "user", + "text": "${DeliveryMode}" + }, + { + "type": "message", + "role": "bot", + "text": "What skill would you like to call?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'What skill would you like to call?'", + "speak == 'What skill would you like to call?'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "${TargetSkill}" + }, + { + "type": "message", + "role": "bot", + "text": "Type anything to send to the skill.", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Type anything to send to the skill.'", + "inputHint == 'expectingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "Hello" + }, + { + "type": "message", + "role": "bot", + "text": "Echo: Hello", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Echo: Hello'", + "inputHint == 'acceptingInput'" + ] + }, + { + "type": "message", + "role": "bot", + "text": "Say \"end\" or \"stop\" and I'll end the conversation and back to the parent.", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Say \"end\" or \"stop\" and I\\'ll end the conversation and back to the parent.'", + "inputHint == 'acceptingInput'" + ] + }, + { + "type": "message", + "role": "user", + "text": "end" + }, + { + "type": "message", + "role": "bot", + "text": "Ending conversation from the skill...", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Ending conversation from the skill...'", + "inputHint == 'acceptingInput'" + ] + }, + { + "type": "message", + "role": "bot", + "text": "Received endOfConversation.\n\nCode: completedSuccessfully.", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Received endOfConversation.\n\nCode: completedSuccessfully.'", + "inputHint == 'acceptingInput'" + ] + }, + { + "type": "message", + "role": "bot", + "text": "Back in the host bot.", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Back in the host bot.'", + "inputHint == 'acceptingInput'" + ] + }, + { + "type": "message", + "role": "bot", + "text": "What delivery mode would you like to use?", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'What delivery mode would you like to use?'", + "speak == 'What delivery mode would you like to use?'", + "inputHint == 'expectingInput'", + "suggestedActions.actions[0].type == 'imBack'", + "suggestedActions.actions[0].title == 'normal'", + "suggestedActions.actions[0].value == 'normal'", + "suggestedActions.actions[1].type == 'imBack'", + "suggestedActions.actions[1].title == 'expectReplies'", + "suggestedActions.actions[1].value == 'expectReplies'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/SingleTurn/TestScripts/EchoMultiSkill.transcript b/tests/functional/Tests/SkillFunctionalTests/SingleTurn/TestScripts/EchoMultiSkill.transcript new file mode 100644 index 0000000000..f5569cf169 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/SingleTurn/TestScripts/EchoMultiSkill.transcript @@ -0,0 +1,480 @@ +[ + { + "type": "conversationUpdate", + "membersAdded": [ + { + "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", + "name": "Bot" + }, + { + "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", + "name": "User" + } + ], + "membersRemoved": [], + "channelId": "emulator", + "conversation": { + "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" + }, + "id": "67d08fd0-4f58-11eb-80df-41840e87027c", + "localTimestamp": "2021-01-05T10:17:48-03:00", + "recipient": { + "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", + "name": "Bot", + "role": "bot" + }, + "timestamp": "2021-01-05T13:17:48.237Z", + "from": { + "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", + "name": "User", + "role": "user" + }, + "locale": "", + "serviceUrl": "https://60ecb8345374.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://60ecb8345374.ngrok.io", + "channelId": "emulator", + "from": { + "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" + }, + "recipient": { + "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", + "role": "user" + }, + "locale": "", + "text": "Hello and welcome!", + "inputHint": "acceptingInput", + "attachments": [], + "entities": [], + "replyToId": "67d08fd0-4f58-11eb-80df-41840e87027c", + "id": "68722700-4f58-11eb-80df-41840e87027c", + "localTimestamp": "2021-01-05T10:17:49-03:00", + "timestamp": "2021-01-05T13:17:49.296Z" + }, + { + "type": "message", + "serviceUrl": "https://60ecb8345374.ngrok.io", + "channelId": "emulator", + "from": { + "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" + }, + "recipient": { + "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", + "role": "user" + }, + "locale": "", + "text": "What delivery mode would you like to use?", + "speak": "What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "67d08fd0-4f58-11eb-80df-41840e87027c", + "id": "689ae4b0-4f58-11eb-80df-41840e87027c", + "localTimestamp": "2021-01-05T10:17:49-03:00", + "timestamp": "2021-01-05T13:17:49.563Z" + }, + { + "channelData": { + "clientActivityID": "1609852670737zdf39h87ze9", + "clientTimestamp": "2021-01-05T13:17:50.737Z" + }, + "text": "expectReplies", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-05T13:17:50.760Z", + "entities": [ + { + "requiresBotState": true, + "supportsListening": true, + "supportsTts": true, + "type": "ClientCapabilities" + } + ], + "conversation": { + "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" + }, + "id": "69518a80-4f58-11eb-80df-41840e87027c", + "localTimestamp": "2021-01-05T10:17:50-03:00", + "recipient": { + "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://60ecb8345374.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://60ecb8345374.ngrok.io", + "channelId": "emulator", + "from": { + "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" + }, + "recipient": { + "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", + "role": "user" + }, + "locale": "", + "text": "What skill would you like to call?", + "speak": "What skill would you like to call?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "EchoSkillBotDotNet", + "value": "EchoSkillBotDotNet" + }, + { + "type": "imBack", + "title": "EchoSkillBotDotNet21", + "value": "EchoSkillBotDotNet21" + }, + { + "type": "imBack", + "title": "EchoSkillBotDotNetV3", + "value": "EchoSkillBotDotNetV3" + }, + { + "type": "imBack", + "title": "EchoSkillBotJS", + "value": "EchoSkillBotJS" + }, + { + "type": "imBack", + "title": "EchoSkillBotJSV3", + "value": "EchoSkillBotJSV3" + }, + { + "type": "imBack", + "title": "EchoSkillBotPython", + "value": "EchoSkillBotPython" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "69518a80-4f58-11eb-80df-41840e87027c", + "id": "69f93c30-4f58-11eb-80df-41840e87027c", + "localTimestamp": "2021-01-05T10:17:51-03:00", + "timestamp": "2021-01-05T13:17:51.859Z" + }, + { + "channelData": { + "clientActivityID": "16098526780751zl7loernbj", + "clientTimestamp": "2021-01-05T13:17:58.075Z" + }, + "text": "EchoSkillBotDotNet", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-05T13:17:58.102Z", + "conversation": { + "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" + }, + "id": "6db1d760-4f58-11eb-80df-41840e87027c", + "localTimestamp": "2021-01-05T10:17:58-03:00", + "recipient": { + "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://60ecb8345374.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://60ecb8345374.ngrok.io", + "channelId": "emulator", + "from": { + "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" + }, + "recipient": { + "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", + "role": "user" + }, + "locale": "", + "text": "Type anything to send to the skill.", + "inputHint": "expectingInput", + "attachments": [], + "entities": [], + "replyToId": "6db1d760-4f58-11eb-80df-41840e87027c", + "id": "6e4ae310-4f58-11eb-80df-41840e87027c", + "localTimestamp": "2021-01-05T10:17:59-03:00", + "timestamp": "2021-01-05T13:17:59.105Z" + }, + { + "channelData": { + "clientActivityID": "1609852686824zhcy1hqt9dd", + "clientTimestamp": "2021-01-05T13:18:06.824Z" + }, + "text": "Hello", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-05T13:18:06.848Z", + "conversation": { + "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" + }, + "id": "72e86000-4f58-11eb-80df-41840e87027c", + "localTimestamp": "2021-01-05T10:18:06-03:00", + "recipient": { + "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://60ecb8345374.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://60ecb8345374.ngrok.io", + "channelId": "emulator", + "from": { + "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" + }, + "recipient": { + "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", + "role": "user" + }, + "locale": "", + "text": "Echo: Hello", + "inputHint": "acceptingInput", + "attachments": [], + "entities": [], + "replyToId": "72e86000-4f58-11eb-80df-41840e87027c", + "id": "740cbbc0-4f58-11eb-80df-41840e87027c", + "localTimestamp": "2021-01-05T10:18:08-03:00", + "timestamp": "2021-01-05T13:18:08.764Z" + }, + { + "type": "message", + "serviceUrl": "https://60ecb8345374.ngrok.io", + "channelId": "emulator", + "from": { + "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" + }, + "recipient": { + "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", + "role": "user" + }, + "locale": "", + "text": "Say \"end\" or \"stop\" and I'll end the conversation and back to the parent.", + "inputHint": "acceptingInput", + "attachments": [], + "entities": [], + "replyToId": "72e86000-4f58-11eb-80df-41840e87027c", + "id": "74411230-4f58-11eb-80df-41840e87027c", + "localTimestamp": "2021-01-05T10:18:09-03:00", + "timestamp": "2021-01-05T13:18:09.107Z" + }, + { + "channelData": { + "clientActivityID": "16098526945962f14ibp83pt", + "clientTimestamp": "2021-01-05T13:18:14.596Z" + }, + "text": "end", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", + "name": "User", + "role": "user" + }, + "locale": "", + "timestamp": "2021-01-05T13:18:14.627Z", + "conversation": { + "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" + }, + "id": "778b5b30-4f58-11eb-80df-41840e87027c", + "localTimestamp": "2021-01-05T10:18:14-03:00", + "recipient": { + "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://60ecb8345374.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://60ecb8345374.ngrok.io", + "channelId": "emulator", + "from": { + "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" + }, + "recipient": { + "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", + "role": "user" + }, + "locale": "", + "text": "Ending conversation from the skill...", + "inputHint": "acceptingInput", + "attachments": [], + "entities": [], + "replyToId": "778b5b30-4f58-11eb-80df-41840e87027c", + "id": "7839c3a0-4f58-11eb-80df-41840e87027c", + "localTimestamp": "2021-01-05T10:18:15-03:00", + "timestamp": "2021-01-05T13:18:15.770Z" + }, + { + "type": "message", + "serviceUrl": "https://60ecb8345374.ngrok.io", + "channelId": "emulator", + "from": { + "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" + }, + "recipient": { + "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", + "role": "user" + }, + "locale": "", + "text": "Received endOfConversation.\n\nCode: completedSuccessfully", + "inputHint": "acceptingInput", + "attachments": [], + "entities": [], + "replyToId": "778b5b30-4f58-11eb-80df-41840e87027c", + "id": "78684db0-4f58-11eb-80df-41840e87027c", + "localTimestamp": "2021-01-05T10:18:16-03:00", + "timestamp": "2021-01-05T13:18:16.075Z" + }, + { + "type": "message", + "serviceUrl": "https://60ecb8345374.ngrok.io", + "channelId": "emulator", + "from": { + "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" + }, + "recipient": { + "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", + "role": "user" + }, + "locale": "", + "text": "Back in the host bot.", + "inputHint": "acceptingInput", + "attachments": [], + "entities": [], + "replyToId": "778b5b30-4f58-11eb-80df-41840e87027c", + "id": "7898faa0-4f58-11eb-80df-41840e87027c", + "localTimestamp": "2021-01-05T10:18:16-03:00", + "timestamp": "2021-01-05T13:18:16.394Z" + }, + { + "type": "message", + "serviceUrl": "https://60ecb8345374.ngrok.io", + "channelId": "emulator", + "from": { + "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" + }, + "recipient": { + "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", + "role": "user" + }, + "locale": "", + "text": "What delivery mode would you like to use?", + "speak": "What delivery mode would you like to use?", + "inputHint": "expectingInput", + "suggestedActions": { + "actions": [ + { + "type": "imBack", + "title": "normal", + "value": "normal" + }, + { + "type": "imBack", + "title": "expectReplies", + "value": "expectReplies" + } + ] + }, + "attachments": [], + "entities": [], + "replyToId": "778b5b30-4f58-11eb-80df-41840e87027c", + "id": "78c317e0-4f58-11eb-80df-41840e87027c", + "localTimestamp": "2021-01-05T10:18:16-03:00", + "timestamp": "2021-01-05T13:18:16.670Z" + } +] diff --git a/tests/functional/Tests/SkillFunctionalTests/SkillFunctionalTests.csproj b/tests/functional/Tests/SkillFunctionalTests/SkillFunctionalTests.csproj new file mode 100644 index 0000000000..c9208c26ac --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/SkillFunctionalTests.csproj @@ -0,0 +1,60 @@ + + + + netcoreapp3.1 + false + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + Always + + + + + + Always + + + + + + Always + + + + + + Always + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/Sso/SsoTests.cs b/tests/functional/Tests/SkillFunctionalTests/Sso/SsoTests.cs new file mode 100644 index 0000000000..151306b8b4 --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/Sso/SsoTests.cs @@ -0,0 +1,80 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using Microsoft.Bot.Connector; +using Microsoft.Bot.Schema; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using SkillFunctionalTests.Common; +using TranscriptTestRunner; +using TranscriptTestRunner.XUnit; +using Xunit; +using Xunit.Abstractions; + +namespace SkillFunctionalTests.Sso +{ + public class SsoTests : ScriptTestBase + { + private readonly string _testScriptsFolder = Directory.GetCurrentDirectory() + @"/Sso/TestScripts"; + + public SsoTests(ITestOutputHelper output) + : base(output) + { + } + + public static IEnumerable TestCases() + { + var channelIds = new List { Channels.Directline }; + var deliverModes = new List + { + DeliveryModes.Normal, + DeliveryModes.ExpectReplies, + }; + + var hostBots = new List + { + HostBot.WaterfallHostBotDotNet, + HostBot.WaterfallHostBotJS, + HostBot.WaterfallHostBotPython + }; + + var targetSkills = new List + { + SkillBotNames.WaterfallSkillBotDotNet, + SkillBotNames.WaterfallSkillBotJS, + SkillBotNames.WaterfallSkillBotPython + }; + + var scripts = new List + { + "Sso.json", + }; + + var testCaseBuilder = new TestCaseBuilder(); + + var testCases = testCaseBuilder.BuildTestCases(channelIds, deliverModes, hostBots, targetSkills, scripts); + foreach (var testCase in testCases) + { + yield return testCase; + } + } + + [Theory] + [MemberData(nameof(TestCases))] + public Task RunTestCases(TestCaseDataObject testData) + { + var testCase = testData.GetObject(); + Logger.LogInformation(JsonConvert.SerializeObject(testCase, Formatting.Indented)); + + // TODO: Implement tests and scripts + //var runner = new XUnitTestRunner(new TestClientFactory(testCase.ChannelId).GetTestClient(), Logger); + //await runner.RunTestAsync(Path.Combine(_testScriptsFolder, testCase.Script)); + + // TODO: remove this line once we implement the test and we change the method to public async task + return Task.CompletedTask; + } + } +} diff --git a/tests/functional/Tests/SkillFunctionalTests/appsettings.json b/tests/functional/Tests/SkillFunctionalTests/appsettings.json new file mode 100644 index 0000000000..447bc08b9a --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/appsettings.json @@ -0,0 +1,45 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Debug", + "Microsoft": "Warning" + } + }, + + "TestRequestTimeout": 180, + + "HostBotClientOptions": { + "SimpleHostBotComposerDotNet": { + "BotId": "bffnsimplehostbotcomposerdotnet", + "DirectLineSecret": "" + }, + "SimpleHostBotDotNet": { + "BotId": "bffnsimplehostbotdotnet", + "DirectLineSecret": "" + }, + "SimpleHostBotDotNet21": { + "BotId": "bffnsimplehostbotdotnet21", + "DirectLineSecret": "" + }, + "SimpleHostBotJS": { + "BotId": "bffnsimplehostbotjs", + "DirectLineSecret": "" + }, + "SimpleHostBotPython": { + "BotId": "bffnsimplehostbotpython", + "DirectLineSecret": "" + }, + "WaterfallHostBotDotNet": { + "BotId": "bffnwaterfallhostbotdotnet", + "DirectLineSecret": "" + }, + "WaterfallHostBotJS": { + "BotId": "bffnwaterfallhostbotjs", + "DirectLineSecret": "" + }, + "WaterfallHostBotPython": { + "BotId": "bffnwaterfallhostbotpython", + "DirectLineSecret": "" + } + } +} diff --git a/tests/functional/Tests/SkillFunctionalTests/xunit.runner.json b/tests/functional/Tests/SkillFunctionalTests/xunit.runner.json new file mode 100644 index 0000000000..285c70b81a --- /dev/null +++ b/tests/functional/Tests/SkillFunctionalTests/xunit.runner.json @@ -0,0 +1,3 @@ +{ + "parallelizeAssembly": true +} \ No newline at end of file diff --git a/tests/functional/Tests/TranscriptTestRunnerTests/TestRunnerTests.cs b/tests/functional/Tests/TranscriptTestRunnerTests/TestRunnerTests.cs new file mode 100644 index 0000000000..2bbdd79c9c --- /dev/null +++ b/tests/functional/Tests/TranscriptTestRunnerTests/TestRunnerTests.cs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Moq; +using TranscriptTestRunner; +using Xunit; + +namespace TranscriptTestRunnerTests +{ + public class TestRunnerTests + { + [Fact] + public void CreateTestRunnerTest() + { + var testClientMock = new Mock(); + var testRunner = new TestRunner(testClientMock.Object); + + Assert.NotNull(testRunner); + } + } +} diff --git a/tests/functional/Tests/TranscriptTestRunnerTests/TranscriptTestRunnerTests.csproj b/tests/functional/Tests/TranscriptTestRunnerTests/TranscriptTestRunnerTests.csproj new file mode 100644 index 0000000000..14d32b4f57 --- /dev/null +++ b/tests/functional/Tests/TranscriptTestRunnerTests/TranscriptTestRunnerTests.csproj @@ -0,0 +1,21 @@ + + + + netcoreapp3.1 + + false + + + + + + + + + + + + + + + diff --git a/tests/functional/build/templates/template-app-insights-resources.json b/tests/functional/build/templates/template-app-insights-resources.json new file mode 100644 index 0000000000..640b82e924 --- /dev/null +++ b/tests/functional/build/templates/template-app-insights-resources.json @@ -0,0 +1,35 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "appInsightsName": { + "type": "string", + "defaultValue": "bffnappinsights", + "metadata": { + "description": "The name of the Application Insights instance." + } + }, + "location": { + "type": "string", + "defaultValue": "[resourceGroup().location]", + "metadata": { + "description": "Specifies the Azure location where the key vault should be created." + } + } + }, + "resources": [ + { + "type": "Microsoft.Insights/components", + "apiVersion": "2020-02-02-preview", + "name": "[parameters('appInsightsName')]", + "location": "[parameters('location')]", + "kind": "web", + "properties": { + "Application_Type":"web", + "IngestionMode": "ApplicationInsights", + "publicNetworkAccessForIngestion": "Enabled", + "publicNetworkAccessForQuery": "Enabled" + } + } + ] +} diff --git a/tests/functional/build/templates/template-bot-resources.json b/tests/functional/build/templates/template-bot-resources.json new file mode 100644 index 0000000000..de5faada36 --- /dev/null +++ b/tests/functional/build/templates/template-bot-resources.json @@ -0,0 +1,210 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "appId": { + "type": "string", + "metadata": { + "description": "Active Directory App ID, set as MicrosoftAppId in the Web App's Application Settings." + } + }, + "appSecret": { + "type": "string", + "metadata": { + "description": "Active Directory App Password, set as MicrosoftAppPassword in the Web App's Application Settings." + } + }, + "botName": { + "type": "string" + }, + "botLocation": { + "type": "string" + }, + "appInsightsName": { + "type": "string", + "defaultValue": "" + }, + "appServicePlanName": { + "type": "string" + }, + "appServicePlanResourceGroup": { + "type": "string" + }, + "botSku": { + "type": "string", + "defaultValue": "F0", + "metadata": { + "description": "The pricing tier of the Bot Service Registration. Acceptable values are F0 and S1." + } + } + }, + "variables": { + "siteHost": "[concat(parameters('botName'), '.azurewebsites.net')]", + "botEndpoint": "[concat('https://', variables('siteHost'), '/api/messages')]", + "publishingUsername": "[concat('$', parameters('botName'))]" + }, + "resources": [ + { + "type": "Microsoft.Web/sites", + "apiVersion": "2020-09-01", + "name": "[parameters('botName')]", + "location": "[parameters('botLocation')]", + "kind": "app", + "properties": { + "enabled": true, + "hostNameSslStates": [ + { + "name": "[concat(parameters('botName'), '.azurewebsites.net')]", + "sslState": "Disabled", + "hostType": "Standard" + }, + { + "name": "[concat(parameters('botName'), '.scm.azurewebsites.net')]", + "sslState": "Disabled", + "hostType": "Repository" + } + ], + "serverFarmId": "[concat('/subscriptions/', subscription().id,'/resourcegroups/', parameters('appServicePlanResourceGroup'), '/providers/Microsoft.Web/serverfarms/', parameters('appServicePlanName'))]", + "reserved": true, + "hyperV": false, + "siteConfig": { + "appSettings": [ + { + "name": "WEBSITE_NODE_DEFAULT_VERSION", + "value": "10.14.1" + }, + { + "name": "MicrosoftAppId", + "value": "[parameters('appId')]" + }, + { + "name": "MicrosoftAppPassword", + "value": "[parameters('appSecret')]" + }, + { + "name": "APPINSIGHTS_INSTRUMENTATIONKEY", + "value": "[if(empty(parameters('appInsightsName')), '', reference(resourceId(parameters('appServicePlanResourceGroup'),'Microsoft.Insights/components', parameters('appInsightsName')), '2015-05-01', 'Full').properties.InstrumentationKey)]" + }, + { + "name": "APPLICATIONINSIGHTS_CONNECTION_STRING", + "value": "[if(empty(parameters('appInsightsName')), '', reference(resourceId(parameters('appServicePlanResourceGroup'),'Microsoft.Insights/components', parameters('appInsightsName')), '2015-05-01', 'Full').properties.ConnectionString)]" + }, + { + "name": "ApplicationInsightsAgent_EXTENSION_VERSION", + "value": "~2" + } + ], + "webSocketsEnabled": true, + "scmType": "None", + "use32BitWorkerProcess": true, + "alwaysOn": true, + "managedPipelineMode": "Integrated", + "virtualApplications": [ + { + "virtualPath": "/", + "physicalPath": "site\\wwwroot", + "preloadEnabled": true + } + ], + "loadBalancing": "LeastRequests", + "experiments": { + "rampUpRules": [] + }, + "autoHealEnabled": false, + "cors": { + "allowedOrigins": [ + "https://botservice.hosting.portal.azure.net", + "https://hosting.onecloud.azure-test.net/" + ], + "supportCredentials": false + }, + "localMySqlEnabled": false, + "ipSecurityRestrictions": [ + { + "ipAddress": "Any", + "action": "Allow", + "priority": 1, + "name": "Allow all", + "description": "Allow all access" + } + ], + "scmIpSecurityRestrictions": [ + { + "ipAddress": "Any", + "action": "Allow", + "priority": 1, + "name": "Allow all", + "description": "Allow all access" + } + ], + "scmIpSecurityRestrictionsUseMain": false, + "http20Enabled": false, + "minTlsVersion": "1.2", + "ftpsState": "AllAllowed", + "numberOfWorkers": 1, + "defaultDocuments": [ + "Default.htm", + "Default.html", + "Default.asp", + "index.htm", + "index.html", + "iisstart.htm", + "default.aspx", + "index.php", + "hostingstart.html" + ], + "netFrameworkVersion": "v4.0", + "phpVersion": "5.6", + "requestTracingEnabled": false, + "remoteDebuggingEnabled": false, + "httpLoggingEnabled": true, + "logsDirectorySizeLimit": 35, + "detailedErrorLoggingEnabled": false, + "publishingUsername": "[variables('publishingUsername')]" + }, + "scmSiteAlsoStopped": false, + "clientAffinityEnabled": true, + "hostNamesDisabled": false, + "clientCertEnabled": false, + "httpsOnly": false, + "redundancyMode": "None" + } + }, + { + "type": "Microsoft.Web/sites/hostNameBindings", + "apiVersion": "2020-09-01", + "name": "[concat(parameters('botName'), '/', parameters('botName'), '.azurewebsites.net')]", + "location": "[parameters('botLocation')]", + "dependsOn": [ + "[resourceId('Microsoft.Web/sites', parameters('botName'))]" + ], + "properties": { + "siteName": "[parameters('botName')]", + "hostNameType": "Verified" + } + }, + { + "type": "Microsoft.BotService/botServices", + "apiVersion": "2020-06-02", + "name": "[parameters('botName')]", + "location": "global", + "kind": "bot", + "sku": { + "name": "[parameters('botSku')]" + }, + "dependsOn": [ + "[resourceId('Microsoft.Web/sites', parameters('botName'))]" + ], + "properties": { + "name": "[parameters('botName')]", + "displayName": "[parameters('botName')]", + "endpoint": "[variables('botEndpoint')]", + "msaAppId": "[parameters('appId')]", + "developerAppInsightsApplicationId": "", + "developerAppInsightKey": "", + "publishingCredentials": null, + "storageResourceId": null + } + } + ] +} \ No newline at end of file diff --git a/tests/functional/build/templates/template-cosmosdb-resources.json b/tests/functional/build/templates/template-cosmosdb-resources.json new file mode 100644 index 0000000000..152fb99a29 --- /dev/null +++ b/tests/functional/build/templates/template-cosmosdb-resources.json @@ -0,0 +1,77 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "accountName": { + "type": "string", + "metadata": { + "description": "Cosmos DB account name" + } + }, + "databaseName": { + "type": "string", + "metadata": { + "description": "The name for the Core (SQL) database" + } + } + }, + "variables": { + "accountName": "[toLower(parameters('accountName'))]" + }, + "resources": [ + { + "apiVersion": "2020-04-01", + "kind": "GlobalDocumentDB", + "type": "Microsoft.DocumentDB/databaseAccounts", + "name": "[parameters('accountName')]", + "location": "westus", + "properties": { + "databaseAccountOfferType": "Standard", + "locations": [ + { + "id": "[concat(variables('accountName'), '-westus')]", + "failoverPriority": 0, + "locationName": "West US" + } + ], + "backupPolicy": { + "type": "Periodic", + "periodicModeProperties": { + "backupIntervalInMinutes": 240, + "backupRetentionIntervalInHours": 8 + } + }, + "isVirtualNetworkFilterEnabled": false, + "virtualNetworkRules": [], + "ipRules": [], + "dependsOn": [], + "enableMultipleWriteLocations": false, + "capabilities": [], + "enableFreeTier": false + }, + "tags": { + "defaultExperience": "Core (SQL)", + "hidden-cosmos-mmspecial": "", + "CosmosAccountType": "Non-Production" + } + }, + { + "type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases", + "apiVersion": "2020-03-01", + "name": "[concat(variables('accountName'), '/', parameters('databaseName'))]", + "dependsOn": [ + "[resourceId('Microsoft.DocumentDB/databaseAccounts', variables('accountName'))]" + ], + "properties": { + "mode": "Complete", + "resource": { + "id": "[parameters('databaseName')]" + }, + "options": { + "throughput": "400" + } + } + } + ], + "outputs": {} +} diff --git a/tests/functional/build/templates/template-key-vault-resources.json b/tests/functional/build/templates/template-key-vault-resources.json new file mode 100644 index 0000000000..3c3849c5f3 --- /dev/null +++ b/tests/functional/build/templates/template-key-vault-resources.json @@ -0,0 +1,129 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "keyVaultName": { + "type": "string", + "metadata": { + "description": "Specifies the name of the key vault." + } + }, + "location": { + "type": "string", + "defaultValue": "[resourceGroup().location]", + "metadata": { + "description": "Specifies the Azure location where the key vault should be created." + } + }, + "enabledForDeployment": { + "type": "bool", + "defaultValue": false, + "allowedValues": [ + true, + false + ], + "metadata": { + "description": "Specifies whether Azure Virtual Machines are permitted to retrieve certificates stored as secrets from the key vault." + } + }, + "enabledForDiskEncryption": { + "type": "bool", + "defaultValue": false, + "allowedValues": [ + true, + false + ], + "metadata": { + "description": "Specifies whether Azure Disk Encryption is permitted to retrieve secrets from the vault and unwrap keys." + } + }, + "enabledForTemplateDeployment": { + "type": "bool", + "defaultValue": true, + "allowedValues": [ + true, + false + ], + "metadata": { + "description": "Specifies whether Azure Resource Manager is permitted to retrieve secrets from the key vault." + } + }, + "tenantId": { + "type": "string", + "defaultValue": "[subscription().tenantId]", + "metadata": { + "description": "Specifies the Azure Active Directory tenant ID that should be used for authenticating requests to the key vault. Get it by using Get-AzSubscription cmdlet." + } + }, + "objectId": { + "type": "string", + "defaultValue": "", + "metadata": { + "description": "Specifies the object ID of a user, service principal or security group in the Azure Active Directory tenant for the vault. The object ID must be unique for the list of access policies. Get it by using Get-AzADUser or Get-AzADServicePrincipal cmdlets." + } + }, + "keysPermissions": { + "type": "array", + "defaultValue": [ + "list" + ], + "metadata": { + "description": "Specifies the permissions to keys in the vault. Valid values are: all, encrypt, decrypt, wrapKey, unwrapKey, sign, verify, get, list, create, update, import, delete, backup, restore, recover, and purge." + } + }, + "secretsPermissions": { + "type": "array", + "defaultValue": [ + "list", + "set", + "get" + ], + "metadata": { + "description": "Specifies the permissions to secrets in the vault. Valid values are: all, get, list, set, delete, backup, restore, recover, and purge." + } + }, + "skuName": { + "type": "string", + "defaultValue": "Standard", + "allowedValues": [ + "Standard", + "Premium" + ], + "metadata": { + "description": "Specifies whether the key vault is a standard vault or a premium vault." + } + } + }, + "resources": [ + { + "type": "Microsoft.KeyVault/vaults", + "apiVersion": "2019-09-01", + "name": "[parameters('keyVaultName')]", + "location": "[parameters('location')]", + "properties": { + "enabledForDeployment": "[parameters('enabledForDeployment')]", + "enabledForDiskEncryption": "[parameters('enabledForDiskEncryption')]", + "enabledForTemplateDeployment": "[parameters('enabledForTemplateDeployment')]", + "tenantId": "[parameters('tenantId')]", + "accessPolicies": [ + { + "objectId": "[parameters('objectId')]", + "tenantId": "[parameters('tenantId')]", + "permissions": { + "keys": "[parameters('keysPermissions')]", + "secrets": "[parameters('secretsPermissions')]" + } + } + ], + "sku": { + "name": "[parameters('skuName')]", + "family": "A" + }, + "networkAcls": { + "defaultAction": "Allow", + "bypass": "AzureServices" + } + } + } + ] +} diff --git a/tests/functional/build/templates/template-python-bot-resources.json b/tests/functional/build/templates/template-python-bot-resources.json new file mode 100644 index 0000000000..d704aabd80 --- /dev/null +++ b/tests/functional/build/templates/template-python-bot-resources.json @@ -0,0 +1,195 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "appId": { + "type": "string", + "metadata": { + "description": "Active Directory App ID, set as MicrosoftAppId in the Web App's Application Settings." + } + }, + "appSecret": { + "type": "string", + "metadata": { + "description": "Active Directory App Password, set as MicrosoftAppPassword in the Web App's Application Settings." + } + }, + "botName": { + "type": "string" + }, + "botLocation": { + "type": "string" + }, + "appServicePlanName": { + "type": "string" + }, + "appServicePlanResourceGroup": { + "type": "string" + }, + "botSku": { + "type": "string", + "defaultValue": "F0", + "metadata": { + "description": "The pricing tier of the Bot Service Registration. Acceptable values are F0 and S1." + } + } + }, + "variables": { + "siteHost": "[concat(parameters('botName'), '.azurewebsites.net')]", + "botEndpoint": "[concat('https://', variables('siteHost'), '/api/messages')]", + "publishingUsername": "[concat('$', parameters('botName'))]" + }, + "resources": [ + { + "type": "Microsoft.Web/sites", + "apiVersion": "2020-09-01", + "name": "[parameters('botName')]", + "location": "[parameters('botLocation')]", + "kind": "app,linux", + "properties": { + "enabled": true, + "hostNameSslStates": [ + { + "name": "[concat(parameters('botName'), '.azurewebsites.net')]", + "sslState": "Disabled", + "hostType": "Standard" + }, + { + "name": "[concat(parameters('botName'), '.scm.azurewebsites.net')]", + "sslState": "Disabled", + "hostType": "Repository" + } + ], + "serverFarmId": "[concat('/subscriptions/', subscription().id,'/resourcegroups/', parameters('appServicePlanResourceGroup'), '/providers/Microsoft.Web/serverfarms/', parameters('appServicePlanName'))]", + "reserved": true, + "hyperV": false, + "siteConfig": { + "appSettings": [ + { + "name": "WEBSITE_RUN_FROM_PACKAGE", + "value": "1" + }, + { + "name": "MicrosoftAppId", + "value": "[parameters('appId')]" + }, + { + "name": "MicrosoftAppPassword", + "value": "[parameters('appSecret')]" + } + ], + "webSocketsEnabled": true, + "numberOfWorkers": 1, + "defaultDocuments": [ + "Default.htm", + "Default.html", + "Default.asp", + "index.htm", + "index.html", + "iisstart.htm", + "default.aspx", + "index.php", + "hostingstart.html" + ], + "netFrameworkVersion": "v4.0", + "linuxFxVersion": "PYTHON|3.8", + "requestTracingEnabled": false, + "remoteDebuggingEnabled": false, + "httpLoggingEnabled": true, + "logsDirectorySizeLimit": 35, + "detailedErrorLoggingEnabled": false, + "publishingUsername": "[variables('publishingUsername')]", + "scmType": "None", + "use32BitWorkerProcess": true, + "alwaysOn": true, + "appCommandLine": "gunicorn --bind 0.0.0.0 --worker-class aiohttp.worker.GunicornWebWorker --timeout 600 app:APP", + "managedPipelineMode": "Integrated", + "virtualApplications": [ + { + "virtualPath": "/", + "physicalPath": "site\\wwwroot", + "preloadEnabled": true + } + ], + "loadBalancing": "LeastRequests", + "experiments": { + "rampUpRules": [] + }, + "autoHealEnabled": false, + "cors": { + "allowedOrigins": [ + "https://botservice.hosting.portal.azure.net", + "https://hosting.onecloud.azure-test.net/" + ], + "supportCredentials": false + }, + "localMySqlEnabled": false, + "ipSecurityRestrictions": [ + { + "ipAddress": "Any", + "action": "Allow", + "priority": 1, + "name": "Allow all", + "description": "Allow all access" + } + ], + "scmIpSecurityRestrictions": [ + { + "ipAddress": "Any", + "action": "Allow", + "priority": 1, + "name": "Allow all", + "description": "Allow all access" + } + ], + "scmIpSecurityRestrictionsUseMain": false, + "http20Enabled": false, + "minTlsVersion": "1.2", + "ftpsState": "AllAllowed" + }, + "scmSiteAlsoStopped": false, + "clientAffinityEnabled": true, + "hostNamesDisabled": false, + "clientCertEnabled": false, + "httpsOnly": false, + "redundancyMode": "None" + } + }, + { + "type": "Microsoft.Web/sites/hostNameBindings", + "apiVersion": "2020-09-01", + "name": "[concat(parameters('botName'), '/', parameters('botName'), '.azurewebsites.net')]", + "location": "[parameters('botLocation')]", + "dependsOn": [ + "[resourceId('Microsoft.Web/sites', parameters('botName'))]" + ], + "properties": { + "siteName": "[parameters('botName')]", + "hostNameType": "Verified" + } + }, + { + "type": "Microsoft.BotService/botServices", + "apiVersion": "2020-06-02", + "name": "[parameters('botName')]", + "location": "global", + "kind": "bot", + "sku": { + "name": "[parameters('botSku')]" + }, + "dependsOn": [ + "[resourceId('Microsoft.Web/sites', parameters('botName'))]" + ], + "properties": { + "name": "[parameters('botName')]", + "displayName": "[parameters('botName')]", + "endpoint": "[variables('botEndpoint')]", + "msaAppId": "[parameters('appId')]", + "developerAppInsightsApplicationId": "", + "developerAppInsightKey": "", + "publishingCredentials": null, + "storageResourceId": null + } + } + ] +} \ No newline at end of file diff --git a/tests/functional/build/templates/template-service-plan-linux-resources.json b/tests/functional/build/templates/template-service-plan-linux-resources.json new file mode 100644 index 0000000000..f52af0cec3 --- /dev/null +++ b/tests/functional/build/templates/template-service-plan-linux-resources.json @@ -0,0 +1,61 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "newAppServicePlanName": { + "type": "string", + "defaultValue": "", + "metadata": { + "description": "The name of the new App Service Plan." + } + }, + "newAppServicePlanSku": { + "type": "string", + "defaultValue": "F1", + "metadata": { + "description": "The SKU of the App Service Plan. Defaults to Standard values." + } + }, + "appServicePlanLocation": { + "type": "string", + "defaultValue": "[resourceGroup().location]", + "metadata": { + "description": "The location of the App Service Plan." + } + }, + "existingAppServicePlan": { + "type": "string", + "defaultValue": "", + "metadata": { + "description": "Name of the existing App Service Plan used to create the Web App for the bot." + } + } + }, + "variables": { + "defaultAppServicePlanName": "[if(empty(parameters('existingAppServicePlan')), 'createNewAppServicePlan', parameters('existingAppServicePlan'))]", + "useExistingAppServicePlan": "[not(equals(variables('defaultAppServicePlanName'), 'createNewAppServicePlan'))]", + "servicePlanName": "[if(variables('useExistingAppServicePlan'), parameters('existingAppServicePlan'), parameters('newAppServicePlanName'))]", + "resourcesLocation": "[parameters('appServicePlanLocation')]" + }, + "resources": [ + { + "type": "Microsoft.Web/serverfarms", + "apiVersion": "2018-02-01", + "name": "[variables('servicePlanName')]", + "location": "[variables('resourcesLocation')]", + "comments": "Create a new Linux App Service Plan if no existing App Service Plan name was passed in.", + "condition": "[not(variables('useExistingAppServicePlan'))]", + "sku": { + "name": "[parameters('newAppServicePlanSku')]" + }, + "kind": "linux", + "properties": { + "name": "[variables('servicePlanName')]", + "perSiteScaling": false, + "reserved": true, + "targetWorkerCount": 0, + "targetWorkerSizeId": 0 + } + } + ] +} diff --git a/tests/functional/build/templates/template-service-plan-windows-resources.json b/tests/functional/build/templates/template-service-plan-windows-resources.json new file mode 100644 index 0000000000..996fc7d078 --- /dev/null +++ b/tests/functional/build/templates/template-service-plan-windows-resources.json @@ -0,0 +1,61 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "newAppServicePlanName": { + "type": "string", + "defaultValue": "", + "metadata": { + "description": "The name of the new App Service Plan." + } + }, + "newAppServicePlanSku": { + "type": "string", + "defaultValue": "F1", + "metadata": { + "description": "The SKU of the App Service Plan. Defaults to Standard values." + } + }, + "appServicePlanLocation": { + "type": "string", + "defaultValue": "[resourceGroup().location]", + "metadata": { + "description": "The location of the App Service Plan." + } + }, + "existingAppServicePlan": { + "type": "string", + "defaultValue": "", + "metadata": { + "description": "Name of the existing App Service Plan used to create the Web App for the bot." + } + } + }, + "variables": { + "defaultAppServicePlanName": "[if(empty(parameters('existingAppServicePlan')), 'createNewAppServicePlan', parameters('existingAppServicePlan'))]", + "useExistingAppServicePlan": "[not(equals(variables('defaultAppServicePlanName'), 'createNewAppServicePlan'))]", + "servicePlanName": "[if(variables('useExistingAppServicePlan'), parameters('existingAppServicePlan'), parameters('newAppServicePlanName'))]", + "resourcesLocation": "[parameters('appServicePlanLocation')]" + }, + "resources": [ + { + "type": "Microsoft.Web/serverfarms", + "apiVersion": "2018-02-01", + "name": "[variables('servicePlanName')]", + "location": "[variables('resourcesLocation')]", + "comments": "Create a new Windows App Service Plan if no existing App Service Plan name was passed in.", + "condition": "[not(variables('useExistingAppServicePlan'))]", + "sku": { + "name": "[parameters('newAppServicePlanSku')]" + }, + "kind": "app", + "properties": { + "name": "[variables('servicePlanName')]", + "perSiteScaling": false, + "reserved": false, + "targetWorkerCount": 0, + "targetWorkerSizeId": 0 + } + } + ] +} diff --git a/tests/functional/build/yaml/cleanupResources/cleanupResources.yml b/tests/functional/build/yaml/cleanupResources/cleanupResources.yml new file mode 100644 index 0000000000..fb0fd3d206 --- /dev/null +++ b/tests/functional/build/yaml/cleanupResources/cleanupResources.yml @@ -0,0 +1,261 @@ +# +# Deletes resources from Deploy & Shared Pipelines for the Skills Functional Tests. +# + +name: $(BUILD.BUILDID) +trigger: none +pr: none + +variables: + ## Azure Resources (Define these variables in Azure) + # AzureSubscription: Service Connection Name to Manage Azure resources. + # DeployResourceGroup: (optional) Name of the Resource Group containing the bots. + # ResourceSuffix: (optional) Suffix to add to the resources' name to avoid collitions. + # SharedResourceGroup: (optional) Name of the Resource Group containing the shared resources. + + ## Internal variables + InternalAppInsightsName: "bffnappinsights$($env:RESOURCESUFFIX)" + InternalAppServicePlanDotNetName: "bffnbotsappservicedotnet$($env:RESOURCESUFFIX)" + InternalAppServicePlanJSName: "bffnbotsappservicejs$($env:RESOURCESUFFIX)" + InternalAppServicePlanPythonName: "bffnbotsappservicepython$($env:RESOURCESUFFIX)" + InternalCosmosDBName: "bffnbotstatedb$($env:RESOURCESUFFIX)" + InternalKeyVaultName: "bffnbotkeyvault$($env:RESOURCESUFFIX)" + InternalBotResourceGroupName: $[coalesce(variables['DEPLOYRESOURCEGROUP'], 'bffnbots')] + InternalSharedResourceGroupName: $[coalesce(variables['SHAREDRESOURCEGROUP'], 'bffnshared')] + +pool: + vmImage: "windows-2019" + +stages: +- stage: "Delete_DotNet_Resource_Group" + displayName: "Delete DotNet's Resource Group" + dependsOn: [] + jobs: + - job: "Delete" + displayName: "Delete steps" + steps: + - template: ../common/deleteResourceGroup.yml + parameters: + azureSubscription: $(AZURESUBSCRIPTION) + name: "$(INTERNALBOTRESOURCEGROUPNAME)-DotNet" + +- stage: "Delete_JS_Resource_Group" + displayName: "Delete JS's Resource Group" + dependsOn: [] + jobs: + - job: "Delete" + displayName: "Delete steps" + steps: + - template: ../common/deleteResourceGroup.yml + parameters: + azureSubscription: $(AZURESUBSCRIPTION) + name: "$(INTERNALBOTRESOURCEGROUPNAME)-JS" + +- stage: "Delete_Python_Resource_Group" + displayName: "Delete Python's Resource Group" + dependsOn: [] + jobs: + - job: "Delete" + displayName: "Delete steps" + steps: + - template: ../common/deleteResourceGroup.yml + parameters: + azureSubscription: $(AZURESUBSCRIPTION) + name: "$(INTERNALBOTRESOURCEGROUPNAME)-Python" + +- stage: "Delete_App_Service_Plan_DotNet" + displayName: "Delete App Service Plan (DotNet)" + dependsOn: + - Delete_DotNet_Resource_Group + jobs: + - job: "Delete" + displayName: "Delete steps" + steps: + - task: AzureCLI@2 + displayName: "Delete App Service Plan (DotNet)" + inputs: + azureSubscription: $(AZURESUBSCRIPTION) + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + Write-Host "Looking for $(INTERNALAPPSERVICEPLANDOTNETNAME)..." + $exists = az appservice plan show --name "$(INTERNALAPPSERVICEPLANDOTNETNAME)" --resource-group "$(INTERNALSHAREDRESOURCEGROUPNAME)" + if ($exists) { + Write-Host "Deleting $(INTERNALAPPSERVICEPLANDOTNETNAME)..." + az appservice plan delete --name "$(INTERNALAPPSERVICEPLANDOTNETNAME)" --resource-group "$(INTERNALSHAREDRESOURCEGROUPNAME)" --yes + } else { + Write-Host "No pre-existing $(INTERNALAPPSERVICEPLANDOTNETNAME) resource found." + } + +- stage: "Delete_App_Service_Plan_JS" + displayName: "Delete App Service Plan (JS)" + dependsOn: + - Delete_JS_Resource_Group + jobs: + - job: "Delete" + displayName: "Delete steps" + steps: + - task: AzureCLI@2 + displayName: "Delete App Service Plan (JS)" + inputs: + azureSubscription: $(AZURESUBSCRIPTION) + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + Write-Host "Looking for $(INTERNALAPPSERVICEPLANJSNAME)..." + $exists = az appservice plan show --name "$(INTERNALAPPSERVICEPLANJSNAME)" --resource-group "$(INTERNALSHAREDRESOURCEGROUPNAME)" + if ($exists) { + Write-Host "Deleting $(INTERNALAPPSERVICEPLANJSNAME)..." + az appservice plan delete --name "$(INTERNALAPPSERVICEPLANJSNAME)" --resource-group "$(INTERNALSHAREDRESOURCEGROUPNAME)" --yes + } else { + Write-Host "No pre-existing $(INTERNALAPPSERVICEPLANJSNAME) resource found." + } + +- stage: "Delete_App_Service_Plan_Python" + displayName: "Delete App Service Plan (Python)" + dependsOn: + - Delete_Python_Resource_Group + jobs: + - job: "Delete" + displayName: "Delete steps" + steps: + - task: AzureCLI@2 + displayName: "Delete App Service Plan (Python)" + inputs: + azureSubscription: $(AZURESUBSCRIPTION) + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + Write-Host "Looking for $(INTERNALAPPSERVICEPLANPYTHONNAME)..." + $exists = az appservice plan show --name "$(INTERNALAPPSERVICEPLANPYTHONNAME)" --resource-group "$(INTERNALSHAREDRESOURCEGROUPNAME)-linux" + if ($exists) { + Write-Host "Deleting $(INTERNALAPPSERVICEPLANPYTHONNAME)..." + az appservice plan delete --name "$(INTERNALAPPSERVICEPLANPYTHONNAME)" --resource-group "$(INTERNALSHAREDRESOURCEGROUPNAME)-linux" --yes + } else { + Write-Host "No pre-existing $(INTERNALAPPSERVICEPLANPYTHONNAME) resource found." + } + +- stage: "Delete_App_Registrations" + displayName: "Delete App Registrations" + dependsOn: [] + jobs: + - job: "Delete" + displayName: "Delete steps" + steps: + - template: deleteAppRegistrations.yml + parameters: + azureSubscription: "$(AZURESUBSCRIPTION)" + keyVault: "$(INTERNALKEYVAULTNAME)" + resourceGroup: "$(INTERNALSHAREDRESOURCEGROUPNAME)" + +- stage: "Delete_Key_Vault" + displayName: "Delete Key Vault" + dependsOn: + - Delete_App_Registrations + jobs: + - job: "Delete" + displayName: "Delete steps" + steps: + - task: AzureCLI@2 + displayName: "Delete Key Vault" + inputs: + azureSubscription: $(AZURESUBSCRIPTION) + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + Write-Host "Looking for $(INTERNALKEYVAULTNAME)..." + $exists = az keyvault list --resource-group "$(INTERNALSHAREDRESOURCEGROUPNAME)" --query "[?name == '$(INTERNALKEYVAULTNAME)']" | ConvertFrom-Json + if ($exists) { + Write-Host "Deleting $(INTERNALKEYVAULTNAME)..." + az keyvault delete --name "$(INTERNALKEYVAULTNAME)" --resource-group "$(INTERNALSHAREDRESOURCEGROUPNAME)" + az keyvault purge --name "$(INTERNALKEYVAULTNAME)" + } else { + Write-Host "No pre-existing $(INTERNALKEYVAULTNAME) resource found." + } + +- stage: "Delete_App_Insights" + displayName: "Delete App Insights" + dependsOn: [] + jobs: + - job: "Delete" + displayName: "Delete steps" + steps: + - task: AzureCLI@2 + displayName: "Delete App Insights" + inputs: + azureSubscription: $(AZURESUBSCRIPTION) + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + az config set extension.use_dynamic_install=yes_without_prompt + az feature register --name AIWorkspacePreview --namespace microsoft.insights + Write-Host "Looking for $(INTERNALAPPINSIGHTSNAME)..." + if ((az group exists -n "$(INTERNALSHAREDRESOURCEGROUPNAME)") -eq "true") { + $exists = az monitor app-insights component show --app "$(INTERNALAPPINSIGHTSNAME)" --resource-group "$(INTERNALSHAREDRESOURCEGROUPNAME)" + if ($exists) { + Write-Host "Deleting $(INTERNALAPPINSIGHTSNAME)..." + az monitor app-insights component delete --app "$(INTERNALAPPINSIGHTSNAME)" --resource-group "$(INTERNALSHAREDRESOURCEGROUPNAME)" + } else { + Write-Host "No pre-existing $(INTERNALAPPINSIGHTSNAME) resource found." + } + } else { + Write-Host "No pre-existing $(INTERNALSHAREDRESOURCEGROUPNAME) group found." + } + +- stage: "Delete_CosmosDB" + displayName: "Delete CosmosDB" + dependsOn: [] + jobs: + - job: "Delete" + displayName: "Delete steps" + steps: + - task: AzureCLI@2 + displayName: "Delete CosmosDB" + inputs: + azureSubscription: $(AZURESUBSCRIPTION) + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + Write-Host "Looking for $(INTERNALCOSMOSDBNAME)..." + $exists = az cosmosdb check-name-exists --name "$(INTERNALCOSMOSDBNAME)" + if ($exists -eq $true) { + Write-Host "Deleting $(INTERNALCOSMOSDBNAME)..." + az cosmosdb delete --name "$(INTERNALCOSMOSDBNAME)" --resource-group "$(INTERNALSHAREDRESOURCEGROUPNAME)" --yes + } else { + Write-Host "No pre-existing $(INTERNALCOSMOSDBNAME) resource found." + } + +- stage: "Delete_Resource_Group_Windows" + displayName: "Delete Resource Group (Windows)" + dependsOn: + - Delete_DotNet_Resource_Group + - Delete_JS_Resource_Group + - Delete_App_Service_Plan_DotNet + - Delete_App_Service_Plan_JS + - Delete_App_Insights + - Delete_CosmosDB + - Delete_App_Registrations + - Delete_Key_Vault + jobs: + - job: "Delete" + displayName: "Delete steps" + steps: + - template: ../common/deleteResourceGroup.yml + parameters: + azureSubscription: $(AZURESUBSCRIPTION) + name: "$(INTERNALSHAREDRESOURCEGROUPNAME)" + +- stage: "Delete_Resource_Group_Linux" + displayName: "Delete Resource Group (Linux)" + dependsOn: + - Delete_Python_Resource_Group + - Delete_App_Service_Plan_Python + jobs: + - job: "Delete" + displayName: "Delete Resource Group (Linux)" + steps: + - template: ../common/deleteResourceGroup.yml + parameters: + azureSubscription: $(AZURESUBSCRIPTION) + name: "$(INTERNALSHAREDRESOURCEGROUPNAME)-linux" + diff --git a/tests/functional/build/yaml/cleanupResources/deleteAppRegistrations.yml b/tests/functional/build/yaml/cleanupResources/deleteAppRegistrations.yml new file mode 100644 index 0000000000..6236117a2d --- /dev/null +++ b/tests/functional/build/yaml/cleanupResources/deleteAppRegistrations.yml @@ -0,0 +1,62 @@ +parameters: + - name: azureSubscription + displayName: Azure Service Connection + type: string + + - name: keyVault + displayName: Key Vault name + type: string + + - name: resourceGroup + displayName: Resource Group + type: string + +steps: + - task: AzureCLI@2 + displayName: "Delete Bots App Registrations" + inputs: + azureSubscription: "${{ parameters.azureSubscription }}" + addSpnToEnvironment: true + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + # Using Microsoft Graph REST API to create App Registrations (https://docs.microsoft.com/en-us/graph/api/application-post-applications) instead of Azure CLI due to Azure Active Directory Graph API has been deprecated and still in a migration process to Microsoft Graph API, more information can be found in this link (https://github.com/Azure/azure-cli/issues/12946). + + function GetToken() { + # Get Token + + $body = @{ + grant_type = "client_credentials"; + scope = "https://graph.microsoft.com/.default"; + client_id = $env:SERVICEPRINCIPALID; + client_secret = $env:SERVICEPRINCIPALKEY; + } + + Invoke-WebRequest -Uri "https://login.microsoftonline.com/$($env:TENANTID)/oauth2/v2.0/token" -Method "POST" -Body $body | ConvertFrom-Json + } + + function DeleteAppRegistration($token, $objectId) { + # Delete App Registration + + $headers = @{ + Authorization = "Bearer " + $token.access_token + } + + Invoke-WebRequest -Uri "https://graph.microsoft.com/v1.0/applications/$objectId" -Method "DELETE" -Headers $headers | ConvertFrom-Json + } + + Write-Host "Looking for ${{ parameters.keyVault }}..." + $exists = az keyvault list --resource-group "${{ parameters.resourceGroup }}" --query "[?name == '${{ parameters.keyVault }}']" | ConvertFrom-Json + if ($exists) { + $entries = az keyvault secret list --vault-name "${{ parameters.keyVault }}" --query "[?ends_with(name, 'AppObjectId')]" | ConvertFrom-Json + $token = GetToken + + foreach ($entry in $entries) { + $name = $entry.name -replace "AppObjectId" + Write-Host "Deleting $name secrets..." + $secretVault = az keyvault secret show --id $entry.id | ConvertFrom-Json + DeleteAppRegistration $token $secretVault.value + } + } else { + Write-Host "No pre-existing ${{ parameters.keyVault }} resource found." + } diff --git a/tests/functional/build/yaml/common/deleteResourceGroup.yml b/tests/functional/build/yaml/common/deleteResourceGroup.yml new file mode 100644 index 0000000000..8ef7f4cc2f --- /dev/null +++ b/tests/functional/build/yaml/common/deleteResourceGroup.yml @@ -0,0 +1,37 @@ +parameters: +- name: azureSubscription + displayName: Azure Service Connection + type: string + +- name: name + displayName: WebApp name + type: string + +steps: + - task: AzureCLI@2 + displayName: "Delete pre-existing Resource Group" + inputs: + azureSubscription: "${{ parameters.azureSubscription }}" + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + Write-Host "Looking for ${{ parameters.name }}..." + if ((az group exists -n "${{ parameters.name }}") -eq "true") { + Write-Host "Found pre-existing resource group ${{ parameters.name }}." + Write-Host "Starting resource cleanup..." + + $webapps = az webapp list --resource-group "${{ parameters.name }}" | ConvertFrom-Json + + foreach ($webapp in $webapps) { + Write-Host ("Deleting '" + $webapp.name + "'...") + az webapp delete --name $webapp.name --resource-group "${{ parameters.name }}" --keep-empty-plan + } + + Write-Host "Deleting ${{ parameters.name }}..." + az group delete -n "${{ parameters.name }}" --yes --no-wait + az group wait --deleted --interval 15 --timeout 600 --resource-group "${{ parameters.name }}" + + Write-Host "Pre-existing resource group ${{ parameters.name }} deleted." + } else { + Write-Host "No pre-existing resource group found." + } diff --git a/tests/functional/build/yaml/deployBotResources/common/configureOAuth.yml b/tests/functional/build/yaml/deployBotResources/common/configureOAuth.yml new file mode 100644 index 0000000000..6d33840271 --- /dev/null +++ b/tests/functional/build/yaml/deployBotResources/common/configureOAuth.yml @@ -0,0 +1,45 @@ +parameters: + - name: appId + displayName: Bot's App Registration Id + type: string + + - name: appSecret + displayName: Bot's App Registration Secret + type: string + + - name: azureSubscription + displayName: Azure Service Connection + type: string + + - name: botName + displayName: Bot Name + type: string + + - name: botGroup + displayName: Bot's Resource Group + type: string + + - name: connectionName + displayName: OAuth Connection Name + type: string + + - name: resourceSuffix + displayName: Azure resources' name suffix + type: string + +steps: + - task: AzureCLI@2 + displayName: "Configure OAuth connection" + inputs: + azureSubscription: "${{ parameters.azureSubscription }}" + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + $connectionName = if([string]::IsNullOrEmpty("${{ parameters.connectionName }}")) { "TestOAuthProvider" } Else { "${{ parameters.connectionName }}" }; + + # Create OAuth Connection. + az bot show -g "${{ parameters.botGroup }}" -n "${{ parameters.botName }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)" + az bot authsetting create -g "${{ parameters.botGroup }}" -n "${{ parameters.botName }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)" -c $connectionName --client-id="${{ parameters.appId }}" --client-secret="${{ parameters.appSecret }}" --service "oauth2" --provider-scope-string '""' --parameters authorizationUrl=https://webjobs.botframework.com/api/testauthprovider/authorize tokenUrl=https://webjobs.botframework.com/api/testauthprovider/token refreshUrl=https://webjobs.botframework.com/api/testauthprovider/refresh clientId="${{ parameters.appId }}" clientSecret="${{ parameters.appSecret }}" + + # Add ConnectionName to Azure AppSettings. + az webapp config appsettings set --name "${{ parameters.botName }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)" --resource-group ${{ parameters.botGroup }} --settings "ConnectionName=$connectionName" --output none diff --git a/tests/functional/build/yaml/deployBotResources/common/createAppService.yml b/tests/functional/build/yaml/deployBotResources/common/createAppService.yml new file mode 100644 index 0000000000..7b3b6fc5ed --- /dev/null +++ b/tests/functional/build/yaml/deployBotResources/common/createAppService.yml @@ -0,0 +1,62 @@ +parameters: + - name: appId + displayName: Bot's App Registration Id + type: string + + - name: appInsight + displayName: Azure Application Insight name + type: string + default: "" + + - name: appSecret + displayName: Bot's App Registration Secret + type: string + + - name: appServicePlan + displayName: App Service Plan name + type: string + + - name: appServicePlanRG + displayName: App Service Plan Resource Group + type: string + + - name: azureSubscription + displayName: Azure Service Connection + type: string + + - name: botGroup + displayName: Bot's Resource Group + type: string + + - name: botName + displayName: Bot Name + type: string + + - name: botPricingTier + displayName: Bot Pricing Tier + type: string + + - name: templateFile + displayName: Template File Location + type: string + + - name: resourceSuffix + displayName: Azure resources' name suffix + type: string + +steps: + - task: AzureCLI@2 + displayName: "Create resources" + inputs: + azureSubscription: "${{ parameters.azureSubscription }}" + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + Set-PSDebug -Trace 1 + + $botPricingTier = if(-not ([string]::IsNullOrEmpty("${{ parameters.botPricingTier }}"))) { "botSku=${{ parameters.botPricingTier }}" }; + $appInsights = if(-not ([string]::IsNullOrEmpty("${{ parameters.appInsight }}"))) { "appInsightsName=${{ parameters.appInsight }}" } + + az deployment group create --resource-group "${{ parameters.botGroup }}" --name "${{ parameters.botName }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)" --template-file ${{ parameters.templateFile }} --parameters $botPricingTier botLocation="westus" appId="${{ parameters.appId }}" appSecret="${{ parameters.appSecret }}" botName="${{ parameters.botName }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)" appServicePlanName="${{ parameters.appServicePlan }}" appServicePlanResourceGroup="${{ parameters.appServicePlanRG }}" $appInsights; + + Set-PSDebug -Trace 0 diff --git a/tests/functional/build/yaml/deployBotResources/common/createDirectLine.yml b/tests/functional/build/yaml/deployBotResources/common/createDirectLine.yml new file mode 100644 index 0000000000..2fdd1aa044 --- /dev/null +++ b/tests/functional/build/yaml/deployBotResources/common/createDirectLine.yml @@ -0,0 +1,26 @@ +parameters: + - name: azureSubscription + displayName: Azure Service Connection + type: string + + - name: botGroup + displayName: Bot's Resource Group + type: string + + - name: botName + displayName: Bot Name + type: string + + - name: resourceSuffix + displayName: Azure resources' name suffix + type: string + +steps: +- task: AzureCLI@2 + displayName: "Create DirectLine Channel" + inputs: + azureSubscription: "${{ parameters.azureSubscription }}" + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + az bot directline create -n "${{ parameters.botName }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)" -g "${{ parameters.botGroup }}" diff --git a/tests/functional/build/yaml/deployBotResources/common/deleteResources.yml b/tests/functional/build/yaml/deployBotResources/common/deleteResources.yml new file mode 100644 index 0000000000..21e9a7b408 --- /dev/null +++ b/tests/functional/build/yaml/deployBotResources/common/deleteResources.yml @@ -0,0 +1,40 @@ +parameters: + - name: azureSubscription + displayName: Azure Service Connection + type: string + + - name: resourceGroup + displayName: Resource Group + type: string + + - name: resourceName + displayName: Resource Name + type: string + + - name: resourceSuffix + displayName: Azure resources' name suffix + type: string + +steps: + - task: AzureCLI@2 + displayName: "Delete pre-existing bot resources" + inputs: + azureSubscription: "${{ parameters.azureSubscription }}" + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + Write-Host "Looking for ${{ parameters.resourceGroup }}..." + if ((az group exists -n "${{ parameters.resourceGroup }}") -eq "true") { + Write-Host "Found pre-existing resource group ${{ parameters.resourceGroup }}." + Write-Host "Starting resource cleanup..." + + Write-Host ("Deleting '" + "${{ parameters.resourceName }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)" + "'...") + az webapp delete --name "${{ parameters.resourceName }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)" --resource-group ${{ parameters.resourceGroup }} --keep-empty-plan + az bot delete --name "${{ parameters.resourceName }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)" --resource-group ${{ parameters.resourceGroup }} + + Write-Host "Pre-existing bot resources for '${{ parameters.resourceName }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)' deleted." + } else { + Write-Host "Resource group not found." + Write-Host "##vso[task.complete result=Failed;]" + return + } diff --git a/tests/functional/build/yaml/deployBotResources/common/getAppRegistration.yml b/tests/functional/build/yaml/deployBotResources/common/getAppRegistration.yml new file mode 100644 index 0000000000..039721c08a --- /dev/null +++ b/tests/functional/build/yaml/deployBotResources/common/getAppRegistration.yml @@ -0,0 +1,62 @@ +parameters: + - name: appId + displayName: Bot's App Registration Id + type: string + + - name: appSecret + displayName: Bot's App Registration Secret + type: string + + - name: azureSubscription + displayName: Azure Service Connection + type: string + + - name: botName + displayName: Bot Name + type: string + + - name: keyVault + displayName: KeyVault name + type: string + +steps: + - task: AzureCLI@2 + displayName: "Get AppId & AppSecret" + inputs: + azureSubscription: "${{ parameters.azureSubscription }}" + scriptType: pscore + failOnStandardError: true + scriptLocation: inlineScript + inlineScript: | + $secret = New-Object -TypeName psobject + $source = "" + + if ([string]::IsNullOrEmpty("${{ parameters.appId }}")) { + $source = "KeyVault ${{ parameters.keyVault }}"; + $entries = az keyvault secret list --vault-name "${{ parameters.keyVault }}" | ConvertFrom-Json | Where-Object {$_.name -like "${{ parameters.botName }}*"}; + + foreach ($entry in $entries) { + $secretVault = az keyvault secret show --id $entry.id | ConvertFrom-Json + $secret | Add-Member -MemberType NoteProperty -Name ($secretVault.name -replace "${{ parameters.botName }}", "") -Value "$($secretVault.value)" + } + } else { + $source = "Pipeline Variables" + $secret | Add-Member -MemberType NoteProperty -Name AppId -Value "${{ parameters.appId }}" + $secret | Add-Member -MemberType NoteProperty -Name AppSecret -Value "${{ parameters.appSecret }}" + } + + if ([string]::IsNullOrEmpty($secret.AppId)) { + Write-Host "##vso[task.LogIssue type=error;]AppId is Null or Empty" + Write-Host "##vso[task.complete result=Failed;]DONE" + } + + if ([string]::IsNullOrEmpty($secret.AppSecret)) { + Write-Host "##vso[task.LogIssue type=error;]AppSecret is Null or Empty" + Write-Host "##vso[task.complete result=Failed;]DONE" + } + + Write-Host "Source: $source;" + Write-Host "AppId: $($secret.AppId);" + + Write-Host "##vso[task.setvariable variable=AppId]$($secret.AppId)" + Write-Host "##vso[task.setvariable variable=AppSecret]$($secret.AppSecret)" diff --git a/tests/functional/build/yaml/deployBotResources/common/prepareResources.yml b/tests/functional/build/yaml/deployBotResources/common/prepareResources.yml new file mode 100644 index 0000000000..e8f687de44 --- /dev/null +++ b/tests/functional/build/yaml/deployBotResources/common/prepareResources.yml @@ -0,0 +1,29 @@ +parameters: + - name: azureSubscription + displayName: Azure Service Connection + type: string + + - name: resourceGroups + displayName: Resource Groups + type: object + +stages: +- ${{ each resourceGroup in parameters.resourceGroups }}: + - stage: "${{ resourceGroup.id }}" + displayName: "${{ resourceGroup.displayName }}" + dependsOn: [] # Makes this run in parallel + jobs: + - job: "Prepare" + displayName: "Prepare steps" + steps: + - template: ../../common/deleteResourceGroup.yml + parameters: + azureSubscription: "${{ parameters.azureSubscription }}" + name: "${{ resourceGroup.name }}" + + - task: AzureCLI@1 + displayName: "Create Resource Group" + inputs: + azureSubscription: "${{ parameters.azureSubscription }}" + scriptLocation: inlineScript + inlineScript: az group create --location westus --name "${{ resourceGroup.name }}" diff --git a/tests/functional/build/yaml/deployBotResources/common/tagBotBuilderVersion.yml b/tests/functional/build/yaml/deployBotResources/common/tagBotBuilderVersion.yml new file mode 100644 index 0000000000..dd3107eb0a --- /dev/null +++ b/tests/functional/build/yaml/deployBotResources/common/tagBotBuilderVersion.yml @@ -0,0 +1,15 @@ +parameters: + - name: botName + displayName: Bot Name + type: string + + - name: version + displayName: Version number + type: string + +steps: + - task: colinsalmcorner.colinsalmcorner-buildtasks.tag-build-task.tagBuildOrRelease@0 + displayName: "Tag BotBuilder Version" + inputs: + tags: "${{ parameters.botName }} Version = ${{ parameters.version }}" + continueOnError: true diff --git a/tests/functional/build/yaml/deployBotResources/deployBotResources.yml b/tests/functional/build/yaml/deployBotResources/deployBotResources.yml new file mode 100644 index 0000000000..61f31b8c58 --- /dev/null +++ b/tests/functional/build/yaml/deployBotResources/deployBotResources.yml @@ -0,0 +1,510 @@ +# +# Deploys the bot resources needed for the Skills Functional Tests. +# + +name: "$(BUILD.BUILDID)" +trigger: none +pr: none + +pool: + vmImage: "windows-2019" + +parameters: + - name: dependenciesVersionDotNetHosts + displayName: DotNet Hosts Version + type: string + default: $env:DEPENDENCIESVERSIONDOTNETHOSTS + + - name: dependenciesRegistryDotNetHosts + displayName: DotNet Hosts Registry + type: string + default: Artifacts + values: + - Artifacts + - MyGet + - NuGet + + - name: dependenciesVersionDotNetSkills + displayName: DotNet Skills Version + type: string + default: $env:DEPENDENCIESVERSIONDOTNETSKILLS + + - name: dependenciesRegistryDotNetSkills + displayName: DotNet Skills Registry + type: string + default: Artifacts + values: + - Artifacts + - MyGet + - NuGet + + - name: dependenciesVersionDotNetSkillsV3 + displayName: DotNet Skills V3 Version + type: string + default: $env:DEPENDENCIESVERSIONDOTNETSKILLSV3 + + - name: dependenciesRegistryDotNetSkillsV3 + displayName: DotNet Skills V3 Registry + type: string + default: MyGet + values: + - MyGet + - NuGet + + - name: dependenciesVersionJSHosts + displayName: JS Hosts Version + type: string + default: $env:DEPENDENCIESVERSIONJSHOSTS + + - name: dependenciesRegistryJSHosts + displayName: JS Hosts Registry + type: string + default: MyGet + values: + - MyGet + - Npm + + - name: dependenciesVersionJSSkills + displayName: JS Skills Version + type: string + default: $env:DEPENDENCIESVERSIONJSSKILLS + + - name: dependenciesRegistryJSSkills + displayName: JS Skills Registry + type: string + default: MyGet + values: + - MyGet + - Npm + + - name: dependenciesVersionJSSkillsV3 + displayName: JS Skills V3 Version + type: string + default: $env:DEPENDENCIESVERSIONJSSKILLSV3 + + - name: dependenciesRegistryJSSkillsV3 + displayName: JS Skills V3 Registry + type: string + default: MyGet + values: + - MyGet + - Npm + + - name: dependenciesVersionPythonHosts + displayName: Python Hosts Version + type: string + default: $env:DEPENDENCIESVERSIONPYTHONHOSTS + + - name: dependenciesRegistryPythonHosts + displayName: Python Hosts Registry + type: string + default: Artifacts + values: + - Artifacts + - Pypi + - Test.Pypi + + - name: dependenciesVersionPythonSkills + displayName: Python Skills Version + type: string + default: $env:DEPENDENCIESVERSIONPYTHONSKILLS + + - name: dependenciesRegistryPythonSkills + displayName: Python Skills Registry + type: string + default: Artifacts + values: + - Artifacts + - Pypi + - Test.Pypi + +variables: + BuildConfiguration: "Debug" + BuildPlatform: "AnyCPU" + ## Azure Resources (Define these variables in Azure) + # AzureSubscription: Service Connection Name to Manage Azure resources. + # AppServicePlanGroup: (optional) Name of the Resource Group where the Windows App Service Plan is located. + # AppServicePlanGroupLinux: (optional) Name of the Resource Group where the Linux App Service Plan is located. + # AppServicePlanDotNetName: (optional) Name of the DotNet App Service Plan. + # AppServicePlanJSName: (optional) Name of the JavaScript App Service Plan. + # AppServicePlanPythonName: (optional) Name of the Python App Service Plan. + # BotPricingTier: (optional) Pricing Tier for the bots, default F0. + # ResourceGroup: (optional) Name of the Resource Group where the bots will be deployed. + # ResourceSuffix: (optional) Suffix to add to the resources' name to avoid collitions. + + ## Bots Configuration (Define these variables in Azure) + # BffnEchoSkillBotComposerDotNetAppId: (optional) App Id for BffnEchoSkillBotComposerDotNet bot. + # BffnEchoSkillBotComposerDotNetAppSecret: (optional) App Secret for BffnEchoSkillBotComposerDotNet bot. + # BffnEchoSkillBotDotNet21AppId: (optional) App Id for BffnEchoSkillBotDotNet21 bot. + # BffnEchoSkillBotDotNet21AppSecret: (optional) App Secret for BffnEchoSkillBotDotNet21 bot. + # BffnEchoSkillBotDotNetAppId: (optional) App Id for BffnEchoSkillBotDotNet bot. + # BffnEchoSkillBotDotNetAppSecret: (optional) App Secret for BffnEchoSkillBotDotNet bot. + # BffnEchoSkillBotDotNetV3AppId: (optional) App Id for BffnEchoSkillBotDotNetV3 bot. + # BffnEchoSkillBotDotNetV3AppSecret: (optional) App Secret for BffnEchoSkillBotDotNetV3 bot. + # BffnEchoSkillBotJSAppId: (optional) App Id for BffnEchoSkillBotJS bot. + # BffnEchoSkillBotJSAppSecret: (optional) App Secret for BffnEchoSkillBotJS bot. + # BffnEchoSkillBotJSV3AppId: (optional) App Id for BffnEchoSkillBotJSV3 bot. + # BffnEchoSkillBotJSV3AppSecret: (optional) App Secret for BffnEchoSkillBotJSV3 bot. + # BffnEchoSkillBotPythonAppId: (optional) App Id for BffnEchoSkillBotPython bot. + # BffnEchoSkillBotPythonAppSecret: (optional) App Secret for BffnEchoSkillBotPython bot. + # BffnSimpleHostBotComposerDotNetAppId: (optional) App Id for BffnSimpleHostBotComposerDotNet bot. + # BffnSimpleHostBotComposerDotNetAppSecret: (optional) App Secret for BffnSimpleHostBotComposerDotNet bot. + # BffnSimpleHostBotDotNet21AppId: (optional) App Id for BffnSimpleHostBotDotNet21 bot. + # BffnSimpleHostBotDotNet21AppSecret: (optional) App Secret for BffnSimpleHostBotDotNet21 bot. + # BffnSimpleHostBotDotNetAppId: (optional) App Id for BffnSimpleHostBotDotNet bot. + # BffnSimpleHostBotDotNetAppSecret: (optional) App Secret for BffnSimpleHostBotDotNet bot. + # BffnSimpleHostBotJSAppId: (optional) App Id for BffnSimpleHostBotJS bot. + # BffnSimpleHostBotJSAppSecret: (optional) App Secret for BffnSimpleHostBotJS bot. + # BffnSimpleHostBotPythonAppId: (optional) App Id for BffnSimpleHostBotPython bot. + # BffnSimpleHostBotPythonAppSecret: (optional) App Secret for BffnSimpleHostBotPython bot. + # BffnWaterfallHostBotDotNetAppId: (optional) App Id for BffnWaterfallHostBotDotNet bot. + # BffnWaterfallHostBotDotNetAppSecret: (optional) App Secret for BffnWaterfallHostBotDotNet bot. + # BffnWaterfallSkillBotDotNetAppId: (optional) App Id for BffnWaterfallSkillBotDotNet bot. + # BffnWaterfallSkillBotDotNetAppSecret: (optional) App Secret for BffnWaterfallSkillBotDotNet bot. + # BffnWaterfallHostBotJSAppId: (optional) App Id for BffnWaterfallHostBotJS bot. + # BffnWaterfallHostBotJSAppSecret: (optional) App Secret for BffnWaterfallHostBotJS bot. + # BffnWaterfallSkillBotJSAppId: (optional) App Id for BffnWaterfallSkillBotJS bot. + # BffnWaterfallSkillBotJSAppSecret: (optional) App Secret for BffnWaterfallSkillBotJS bot. + # BffnWaterfallHostBotPythonAppId: (optional) App Id for BffnWaterfallHostBotPython bot. + # BffnWaterfallHostBotPythonAppSecret: (optional) App Secret for BffnWaterfallHostBotPython bot. + # BffnWaterfallSkillBotPythonAppId: (optional) App Id for BffnWaterfallSkillBotPython bot. + # BffnWaterfallSkillBotPythonAppSecret: (optional) App Secret for BffnWaterfallSkillBotPython bot. + # ConnectionName: (optional) Name for the OAuth connection to use in the skill bots. + + ## DependenciesVersion (Define these variables in Azure) Possible values are: Latest (default), Stable, or specific version numbers. + # DependenciesVersionDotNetHosts: (optional) Bot Builder dependency version to use for DotNet host bots. + # DependenciesVersionDotNetSkills: (optional) Bot Builder dependency version to use for DotNet skill bots. + # DependenciesVersionDotNetSkillsV3: (optional) Bot Builder dependency version to use for DotNet skill V3 bots. + # DependenciesVersionJSHosts: (optional) Bot Builder dependency version to use for JS host bots. + # DependenciesVersionJSSkills: (optional) Bot Builder dependency version to use for JS skill bots. + # DependenciesVersionJSSkillsV3: (optional) Bot Builder dependency version to use for JS skill V3 bots. + # DependenciesVersionPythonHosts: (optional) Bot Builder dependency version to use for Python host bots. + # DependenciesVersionPythonSkills: (optional) Bot Builder dependency version to use for Python skill bots. + + ## Internal variables + InternalAppInsightsName: 'bffnappinsights$(INTERNALRESOURCESUFFIX)' + InternalAppServicePlanWindowsResourceGroup: $[coalesce(variables['APPSERVICEPLANGROUP'], 'bffnshared')] + InternalAppServicePlanLinuxResourceGroup: $[coalesce(variables['APPSERVICEPLANGROUPLINUX'], 'bffnshared-linux')] + InternalAppServicePlanDotNetName: $[coalesce(variables['APPSERVICEPLANDOTNETNAME'], 'bffnbotsappservicedotnet$(INTERNALRESOURCESUFFIX)')] + InternalAppServicePlanJSName: $[coalesce(variables['APPSERVICEPLANJSNAME'], 'bffnbotsappservicejs$(INTERNALRESOURCESUFFIX)')] + InternalAppServicePlanPythonName: $[coalesce(variables['APPSERVICEPLANPYTHONNAME'], 'bffnbotsappservicepython$(INTERNALRESOURCESUFFIX)')] + InternalKeyVaultName: 'bffnbotkeyvault$(INTERNALRESOURCESUFFIX)' + InternalResourceGroupName: $[coalesce(variables['RESOURCEGROUP'], 'bffnbots')] + InternalResourceSuffix: $[coalesce(variables['RESOURCESUFFIX'], '')] + +stages: +# Resource Groups + - template: common/prepareResources.yml + parameters: + azureSubscription: "$(AZURESUBSCRIPTION)" + resourceGroups: + - id: "Prepare_DotNetGroup" + name: "$(INTERNALRESOURCEGROUPNAME)-DotNet" + displayName: "Prepare DotNet's Resource Group" + + - id: "Prepare_JSGroup" + name: "$(INTERNALRESOURCEGROUPNAME)-JS" + displayName: "Prepare JS's Resource Group" + + - id: "Prepare_PythonGroup" + name: "$(INTERNALRESOURCEGROUPNAME)-Python" + displayName: "Prepare Python's Resource Group" + +# DotNet + - template: dotnet/deploy.yml + parameters: + appInsight: "$(INTERNALAPPINSIGHTSNAME)" + appServicePlan: "$(INTERNALAPPSERVICEPLANDOTNETNAME)" + appServicePlanRG: "$(INTERNALAPPSERVICEPLANWINDOWSRESOURCEGROUP)" + azureSubscription: "$(AZURESUBSCRIPTION)" + botPricingTier: $env:BOTPRICINGTIER + connectionName: $env:CONNECTIONNAME + keyVault: "$(INTERNALKEYVAULTNAME)" + resourceGroup: "$(INTERNALRESOURCEGROUPNAME)-DotNet" + resourceSuffix: $(INTERNALRESOURCESUFFIX) + bots: + - name: "bffnsimplehostbotdotnet" + dependsOn: "Prepare_DotNetGroup" + type: "Host" + displayName: "DotNet Simple Host Bot" + appId: $(BFFNSIMPLEHOSTBOTDOTNETAPPID) + appSecret: $(BFFNSIMPLEHOSTBOTDOTNETAPPSECRET) + project: + directory: 'Bots/DotNet/Consumers/CodeFirst/SimpleHostBot' + name: "SimpleHostBot.csproj" + netCoreVersion: "3.1.x" + dependency: + registry: ${{ parameters.dependenciesRegistryDotNetHosts }} + version: ${{ parameters.dependenciesVersionDotNetHosts }} + + - name: "bffnsimplehostbotdotnet21" + dependsOn: "Prepare_DotNetGroup" + type: "Host" + displayName: "DotNet Simple Host Bot 2.1" + appId: $(BFFNSIMPLEHOSTBOTDOTNET21APPID) + appSecret: $(BFFNSIMPLEHOSTBOTDOTNET21APPSECRET) + project: + directory: 'Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1' + name: "SimpleHostBot-2.1.csproj" + netCoreVersion: "2.1.x" + dependency: + registry: ${{ parameters.dependenciesRegistryDotNetHosts }} + version: ${{ parameters.dependenciesVersionDotNetHosts }} + + - name: "bffnechoskillbotdotnet" + dependsOn: "Prepare_DotNetGroup" + type: "Skill" + displayName: "DotNet Echo Skill Bot" + appId: $(BFFNECHOSKILLBOTDOTNETAPPID) + appSecret: $(BFFNECHOSKILLBOTDOTNETAPPSECRET) + project: + directory: 'Bots/DotNet/Skills/CodeFirst/EchoSkillBot' + name: "EchoSkillBot.csproj" + netCoreVersion: "3.1.x" + dependency: + registry: ${{ parameters.dependenciesRegistryDotNetSkills }} + version: ${{ parameters.dependenciesVersionDotNetSkills }} + + - name: "bffnechoskillbotdotnet21" + dependsOn: "Prepare_DotNetGroup" + type: "Skill" + displayName: "DotNet Echo Skill Bot 2.1" + appId: $(BFFNECHOSKILLBOTDOTNET21APPID) + appSecret: $(BFFNECHOSKILLBOTDOTNET21APPSECRET) + project: + directory: 'Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1' + name: "EchoSkillBot-2.1.csproj" + netCoreVersion: "2.1.x" + dependency: + registry: ${{ parameters.dependenciesRegistryDotNetSkills }} + version: ${{ parameters.dependenciesVersionDotNetSkills }} + + - name: "bffnechoskillbotdotnetv3" + dependsOn: "Prepare_DotNetGroup" + type: "SkillV3" + displayName: "DotNet Echo Skill Bot v3" + appId: $(BFFNECHOSKILLBOTDOTNETV3APPID) + appSecret: $(BFFNECHOSKILLBOTDOTNETV3APPSECRET) + project: + directory: 'Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3' + name: "EchoSkillBot-v3.csproj" + dependency: + registry: ${{ parameters.dependenciesRegistryDotNetSkillsV3 }} + version: ${{ parameters.dependenciesVersionDotNetSkillsV3 }} + + - name: "bffnwaterfallhostbotdotnet" + dependsOn: "Deploy_bffnsimplehostbotdotnet" + type: "Host" + displayName: "DotNet Waterfall Host Bot" + appId: $(BFFNWATERFALLHOSTBOTDOTNETAPPID) + appSecret: $(BFFNWATERFALLHOSTBOTDOTNETAPPSECRET) + project: + directory: 'Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot' + name: "WaterfallHostBot.csproj" + netCoreVersion: "3.1.x" + dependency: + registry: ${{ parameters.dependenciesRegistryDotNetHosts }} + version: ${{ parameters.dependenciesVersionDotNetHosts }} + + - name: "bffnwaterfallskillbotdotnet" + dependsOn: "Deploy_bffnsimplehostbotdotnet21" + type: "Skill" + displayName: "DotNet Waterfall Skill Bot" + appId: $(BFFNWATERFALLSKILLBOTDOTNETAPPID) + appSecret: $(BFFNWATERFALLSKILLBOTDOTNETAPPSECRET) + project: + directory: 'Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot' + name: "WaterfallSkillBot.csproj" + netCoreVersion: "3.1.x" + dependency: + registry: ${{ parameters.dependenciesRegistryDotNetSkills }} + version: ${{ parameters.dependenciesVersionDotNetSkills }} + +# DotNet Composer + - template: dotnet/deployComposer.yml + parameters: + appInsight: "$(INTERNALAPPINSIGHTSNAME)" + appServicePlan: "$(INTERNALAPPSERVICEPLANDOTNETNAME)" + appServicePlanRG: "$(INTERNALAPPSERVICEPLANWINDOWSRESOURCEGROUP)" + azureSubscription: "$(AZURESUBSCRIPTION)" + botPricingTier: $env:BOTPRICINGTIER + keyVault: "$(INTERNALKEYVAULTNAME)" + resourceGroup: "$(INTERNALRESOURCEGROUPNAME)-DotNet" + resourceSuffix: $(INTERNALRESOURCESUFFIX) + bots: + - name: "bffnsimplehostbotcomposerdotnet" + dependsOn: "Deploy_bffnechoskillbotdotnet" + type: "Host" + displayName: "DotNet Simple Composer Host Bot" + appId: $(BFFNSIMPLEHOSTBOTCOMPOSERDOTNETAPPID) + appSecret: $(BFFNSIMPLEHOSTBOTCOMPOSERDOTNETAPPSECRET) + project: + directory: 'Bots/DotNet/Consumers/Composer/SimpleHostBotComposer' + name: "SimpleHostBotComposer.csproj" + netCoreVersion: "3.1.x" + dependency: + registry: ${{ parameters.dependenciesRegistryDotNetHosts }} + version: ${{ parameters.dependenciesVersionDotNetHosts }} + + - name: "bffnechoskillbotcomposerdotnet" + dependsOn: "Deploy_bffnechoskillbotdotnet21" + type: "Skill" + displayName: "DotNet Echo Composer Skill Bot" + appId: $(BFFNECHOSKILLBOTCOMPOSERDOTNETAPPID) + appSecret: $(BFFNECHOSKILLBOTCOMPOSERDOTNETAPPSECRET) + project: + directory: 'Bots/DotNet/Skills/Composer/EchoSkillBotComposer' + name: "EchoSkillBotComposer.csproj" + netCoreVersion: "3.1.x" + dependency: + registry: ${{ parameters.dependenciesRegistryDotNetSkills }} + version: ${{ parameters.dependenciesVersionDotNetSkills }} + +# JS + - template: js/deploy.yml + parameters: + appInsight: "$(INTERNALAPPINSIGHTSNAME)" + appServicePlan: "$(INTERNALAPPSERVICEPLANJSNAME)" + appServicePlanRG: "$(INTERNALAPPSERVICEPLANWINDOWSRESOURCEGROUP)" + azureSubscription: "$(AZURESUBSCRIPTION)" + botPricingTier: $env:BOTPRICINGTIER + connectionName: $env:CONNECTIONNAME + dependsOn: "Prepare_JSGroup" + keyVault: "$(INTERNALKEYVAULTNAME)" + resourceGroup: "$(INTERNALRESOURCEGROUPNAME)-JS" + resourceSuffix: $(INTERNALRESOURCESUFFIX) + bots: + - name: "bffnsimplehostbotjs" + type: "Host" + displayName: "JS Simple Host Bot" + appId: $(BFFNSIMPLEHOSTBOTJSAPPID) + appSecret: $(BFFNSIMPLEHOSTBOTJSAPPSECRET) + project: + directory: 'Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot' + dependency: + registry: ${{ parameters.dependenciesRegistryJSHosts }} + version: ${{ parameters.dependenciesVersionJSHosts }} + + - name: "bffnechoskillbotjs" + type: "Skill" + displayName: "JS Echo Skill Bot" + appId: $(BFFNECHOSKILLBOTJSAPPID) + appSecret: $(BFFNECHOSKILLBOTJSAPPSECRET) + project: + directory: 'Bots/JavaScript/Skills/CodeFirst/EchoSkillBot' + dependency: + registry: ${{ parameters.dependenciesRegistryJSSkills }} + version: ${{ parameters.dependenciesVersionJSSkills }} + + - name: "bffnechoskillbotjsv3" + type: "SkillV3" + displayName: "JS Echo Skill Bot v3" + appId: $(BFFNECHOSKILLBOTJSV3APPID) + appSecret: $(BFFNECHOSKILLBOTJSV3APPSECRET) + project: + directory: 'Bots/JavaScript/Skills/CodeFirst/EchoSkillBot-v3' + dependency: + registry: ${{ parameters.dependenciesRegistryJSSkillsV3 }} + version: ${{ parameters.dependenciesVersionJSSkillsV3 }} + + - name: "bffnwaterfallhostbotjs" + type: "Host" + displayName: "JS Waterfall Host Bot" + appId: $(BFFNWATERFALLHOSTBOTJSAPPID) + appSecret: $(BFFNWATERFALLHOSTBOTJSAPPSECRET) + project: + directory: 'Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot' + dependency: + registry: ${{ parameters.dependenciesRegistryJSHosts }} + version: ${{ parameters.dependenciesVersionJSHosts }} + + - name: "bffnwaterfallskillbotjs" + type: "Skill" + displayName: "JS Waterfall Skill Bot" + appId: $(BFFNWATERFALLSKILLBOTJSAPPID) + appSecret: $(BFFNWATERFALLSKILLBOTJSAPPSECRET) + project: + directory: 'Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot' + dependency: + registry: ${{ parameters.dependenciesRegistryJSSkills }} + version: ${{ parameters.dependenciesVersionJSSkills }} + +# Python + - template: python/deploy.yml + parameters: + appServicePlan: "$(INTERNALAPPSERVICEPLANPYTHONNAME)" + appServicePlanRG: "$(INTERNALAPPSERVICEPLANLINUXRESOURCEGROUP)" + azureSubscription: "$(AZURESUBSCRIPTION)" + botPricingTier: $env:BOTPRICINGTIER + connectionName: $env:CONNECTIONNAME + dependsOn: "Prepare_PythonGroup" + keyVault: "$(INTERNALKEYVAULTNAME)" + resourceGroup: "$(INTERNALRESOURCEGROUPNAME)-Python" + resourceSuffix: "$(INTERNALRESOURCESUFFIX)" + bots: + - name: "bffnsimplehostbotpython" + type: "Host" + displayName: "Python Simple Host Bot" + appId: $(BFFNSIMPLEHOSTBOTPYTHONAPPID) + appSecret: $(BFFNSIMPLEHOSTBOTPYTHONAPPSECRET) + project: + directory: 'Bots/Python/Consumers/CodeFirst/SimpleHostBot' + dependency: + registry: ${{ parameters.dependenciesRegistryPythonHosts }} + version: ${{ parameters.dependenciesVersionPythonHosts }} + + - name: "bffnechoskillbotpython" + type: "Skill" + displayName: "Python Echo Skill Bot" + appId: $(BFFNECHOSKILLBOTPYTHONAPPID) + appSecret: $(BFFNECHOSKILLBOTPYTHONAPPSECRET) + project: + directory: 'Bots/Python/Skills/CodeFirst/EchoSkillBot' + dependency: + registry: ${{ parameters.dependenciesRegistryPythonSkills }} + version: ${{ parameters.dependenciesVersionPythonSkills }} + + - name: "bffnwaterfallhostbotpython" + type: "Host" + displayName: "Python Waterfall Host Bot" + appId: $(BFFNWATERFALLHOSTBOTPYTHONAPPID) + appSecret: $(BFFNWATERFALLHOSTBOTPYTHONAPPSECRET) + project: + directory: 'Bots/Python/Consumers/CodeFirst/WaterfallHostBot' + dependency: + registry: ${{ parameters.dependenciesRegistryPythonHosts }} + version: ${{ parameters.dependenciesVersionPythonHosts }} + + - name: "bffnwaterfallskillbotpython" + type: "Skill" + displayName: "Python Waterfall Skill Bot" + appId: $(BFFNWATERFALLSKILLBOTPYTHONAPPID) + appSecret: $(BFFNWATERFALLSKILLBOTPYTHONAPPSECRET) + project: + directory: 'Bots/Python/Skills/CodeFirst/WaterfallSkillBot' + dependency: + registry: ${{ parameters.dependenciesRegistryPythonSkills }} + version: ${{ parameters.dependenciesVersionPythonSkills }} + +# Publish variables + - stage: "Publish_Variables" + displayName: "Publish Variables" + dependsOn: [] + jobs: + - job: "Publish_Variables" + displayName: "Publish Variables" + steps: + - powershell: | + $variables = @{ + deploymentBuildSuffix = "$(BUILD.BUILDID)" + } + Write-Host $variables + New-Item -Path "$(SYSTEM.DEFAULTWORKINGDIRECTORY)" -Name "variables" -ItemType "directory" + $variables | ConvertTo-Json | Out-File "$(SYSTEM.DEFAULTWORKINGDIRECTORY)/Variables/variables.json" + displayName: "Create Variables file" + + - task: PublishPipelineArtifact@1 + displayName: "Publish Variables as artifact" + inputs: + targetPath: "$(SYSTEM.DEFAULTWORKINGDIRECTORY)/variables" + artifactName: Variables diff --git a/tests/functional/build/yaml/deployBotResources/dotnet/deploy.yml b/tests/functional/build/yaml/deployBotResources/dotnet/deploy.yml new file mode 100644 index 0000000000..9c85c0cd42 --- /dev/null +++ b/tests/functional/build/yaml/deployBotResources/dotnet/deploy.yml @@ -0,0 +1,260 @@ +parameters: + - name: appInsight + displayName: Azure Application Insight name + type: string + + - name: appServicePlan + displayName: App Service Plan name + type: string + + - name: appServicePlanRG + displayName: App Service Plan Resource Group + type: string + + - name: azureSubscription + displayName: Azure Service Connection + type: string + + - name: botPricingTier + displayName: Bot Pricing Tier + type: string + + - name: bots + displayName: Bots + type: object + + - name: buildFolder + displayName: Build Folder + type: string + default: "build-dotnet" + + - name: connectionName + displayName: OAuth Connection Name + type: string + + - name: keyVault + displayName: Key Vault name + type: string + + - name: resourceGroup + displayName: Resource Group + type: string + + - name: resourceSuffix + displayName: Azure resources' name suffix + type: string + +stages: +- ${{ each bot in parameters.bots }}: + - stage: "Deploy_${{ bot.name }}" + ${{ if eq(bot.displayName, '') }}: + displayName: "${{ bot.name }}" + ${{ if ne(bot.displayName, '') }}: + displayName: "${{ bot.displayName }}" + dependsOn: "${{ bot.dependsOn }}" + jobs: + - job: "Deploy" + ${{ if eq(bot.type, 'SkillV3') }}: + variables: + SolutionDir: "$(BUILD.SOURCESDIRECTORY)/Bots/DotNet/" + displayName: "Deploy steps" + steps: + # Delete Bot Resources + - template: ../common/deleteResources.yml + parameters: + azureSubscription: "${{ parameters.azureSubscription }}" + resourceGroup: "${{ parameters.resourceGroup }}" + resourceName: "${{ bot.name }}" + resourceSuffix: "${{ parameters.resourceSuffix }}" + + # Gets Bot App Registration credentials from KeyVault or Pipeline Variables + - template: ../common/getAppRegistration.yml + parameters: + appId: ${{ bot.appId }} + appSecret: ${{ bot.appSecret }} + azureSubscription: "${{ parameters.azureSubscription }}" + botName: "${{ bot.name }}" + keyVault: "${{ parameters.keyVault }}" + + # Use Net Core version + - ${{ if ne(bot.project.netCoreVersion, '') }}: + - task: UseDotNet@2 + displayName: "Use NetCore v${{ bot.project.netCoreVersion }}" + inputs: + version: "${{ bot.project.netCoreVersion }}" + + # Use NuGet + - task: NuGetToolInstaller@1 + displayName: "Use NuGet" + + # Prepare appsettings.json file, deleting all the declared skills, so it uses only the settings define in Azure + - ${{ if eq(bot.type, 'Host') }}: + - task: PowerShell@2 + displayName: 'Prepare App Settings' + inputs: + targetType: inline + workingDirectory: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ bot.project.directory }}' + failOnStderr: true + script: | + $file = "./appsettings.json" + $content = Get-Content -Raw $file | ConvertFrom-Json + $content.BotFrameworkSkills = @() + $content | ConvertTo-Json | Set-Content $file + + # Run NuGet restore SkillV3 + - ${{ if eq(bot.type, 'SkillV3') }}: + - task: NuGetCommand@2 + displayName: "NuGet restore" + inputs: + restoreSolution: "${{ bot.project.directory }}/${{ bot.project.name }}" + restoreDirectory: "$(SOLUTIONDIR)packages" + + # Evaluate dependencies source and version + - template: evaluateDependenciesVariables.yml + parameters: + botType: "${{ bot.type }}" + registry: "${{ bot.dependency.registry }}" + version: "${{ bot.dependency.version }}" + + # Start of DotNet Install & Build + - ${{ if in(bot.type, 'Host', 'Skill') }}: + # Install dependencies + - template: installDependencies.yml + parameters: + project: "${{ bot.project }}" + registry: "$(DEPENDENCIESSOURCE)" + version: "$(DEPENDENCIESVERSIONNUMBER)" + packages: + Microsoft.Bot.Builder.Dialogs + Microsoft.Bot.Builder.Integration.AspNet.Core + + # Build Bot + - task: DotNetCoreCLI@2 + displayName: "Build" + inputs: + command: publish + publishWebProjects: false + projects: "${{ bot.project.directory }}/${{ bot.project.name }}" + arguments: "--output $(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ parameters.buildFolder }}/${{ bot.name }}" + modifyOutputPath: false + + # Get BotBuilder package version + - task: PowerShell@2 + displayName: 'Get BotBuilder Version' + inputs: + targetType: inline + workingDirectory: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ bot.project.directory }}' + failOnStderr: true + script: | + [XML]$data = Get-Content "./${{ bot.project.name }}" + $package = $data.Project.ItemGroup.PackageReference | Where-Object { $_.Include -eq "Microsoft.Bot.Builder.Integration.AspNet.Core" } + Write-Host "##vso[task.setvariable variable=BotBuilderVersionNumber]$($package.version)" + + # End of DotNet Install & Build + + # Start DotNet v3 Install, Build + - ${{ if eq(bot.type, 'SkillV3') }}: + # Install dependencies + - template: installDependenciesV3.yml + parameters: + registry: "$(DEPENDENCIESSOURCE)" + version: "$(DEPENDENCIESVERSIONNUMBER)" + project: "${{ bot.project }}" + packages: + Microsoft.Bot.Builder + Microsoft.Bot.Builder.Azure + Microsoft.Bot.Builder.History + + # Build bot + - task: MSBuild@1 + displayName: "Build" + inputs: + solution: "${{ bot.project.directory }}/${{ bot.project.name }}" + vsVersion: 16.0 + platform: "$(BUILDPLATFORM)" + configuration: "$(BUILDCONFIGURATION)" + + # Get BotBuilder version + - task: PowerShell@2 + displayName: 'Get BotBuilder Version' + inputs: + targetType: inline + failOnStderr: true + script: | + $result = @(Get-ChildItem "$(SOLUTIONDIR)packages\Microsoft.Bot.Builder.[0-9]*" -directory | Sort LastWriteTime -Descending) + $version = $result[0].Name.Replace("Microsoft.Bot.Builder.", "") + Write-Host "##vso[task.setvariable variable=BotBuilderVersionNumber]$($version)" + + # Zip bot + - task: ArchiveFiles@2 + displayName: 'Zip bot' + inputs: + rootFolderOrFile: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ bot.project.directory }}' + includeRootFolder: false + archiveType: 'zip' + archiveFile: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ parameters.buildFolder }}/${{ bot.name }}/${{ bot.name }}.zip' + replaceExistingArchive: true + verbose: true + # End of DotNet v3 Install, Build + + # Tag BotBuilder package version + - template: ../common/tagBotBuilderVersion.yml + parameters: + ${{ if eq(bot.displayName, '') }}: + botName: "${{ bot.name }}" + ${{ if ne(bot.displayName, '') }}: + botName: "${{ bot.displayName }}" + version: "$(BOTBUILDERVERSIONNUMBER)" + + # Upload zip to artifacts in case we want to debug it + - task: PublishBuildArtifacts@1 + displayName: 'Publish zip package' + inputs: + pathToPublish: "$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ parameters.buildFolder }}/${{ bot.name }}/${{ bot.name }}.zip" + artifactName: dotnet-$(BUILD.BUILDID) + + # Create App Service and Bot Channel Registration + - template: ../common/createAppService.yml + parameters: + appId: $(APPID) + appInsight: "${{ parameters.appInsight }}" + appSecret: $(APPSECRET) + appServicePlan: "${{ parameters.appServicePlan }}" + appServicePlanRG: "${{ parameters.appServicePlanRG }}" + azureSubscription: "${{ parameters.azureSubscription }}" + botGroup: "${{ parameters.resourceGroup }}" + botName: "${{ bot.name }}" + botPricingTier: "${{ parameters.botPricingTier }}" + resourceSuffix: "${{ parameters.resourceSuffix }}" + templateFile: "build/templates/template-bot-resources.json" + + # Deploy bot + - task: AzureWebApp@1 + displayName: 'Deploy Azure Web App : ${{ bot.name }}-$(BUILD.BUILDID)' + inputs: + azureSubscription: "${{ parameters.azureSubscription }}" + appName: '${{ bot.name }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)' + resourceGroupName: '${{ parameters.resourceGroup }}' + package: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ parameters.buildFolder }}/${{ bot.name }}/${{ bot.name }}.zip' + deploymentMethod: runFromPackage + + # Configure OAuth + - ${{ if eq(bot.type, 'Skill') }}: + - template: ../common/configureOAuth.yml + parameters: + appId: $(APPID) + appSecret: $(APPSECRET) + azureSubscription: "${{ parameters.azureSubscription }}" + botGroup: "${{ parameters.resourceGroup }}" + botName: "${{ bot.name }}" + connectionName: "${{ parameters.connectionName }}" + resourceSuffix: "${{ parameters.resourceSuffix }}" + + # Create DirectLine Channel Hosts + - ${{ if eq(bot.type, 'Host') }}: + - template: ../common/createDirectLine.yml + parameters: + azureSubscription: "${{ parameters.azureSubscription }}" + botGroup: "${{ parameters.resourceGroup }}" + botName: "${{ bot.name }}" + resourceSuffix: "${{ parameters.resourceSuffix }}" diff --git a/tests/functional/build/yaml/deployBotResources/dotnet/deployComposer.yml b/tests/functional/build/yaml/deployBotResources/dotnet/deployComposer.yml new file mode 100644 index 0000000000..5e20c68afe --- /dev/null +++ b/tests/functional/build/yaml/deployBotResources/dotnet/deployComposer.yml @@ -0,0 +1,167 @@ +parameters: + - name: appInsight + displayName: Azure Application Insight name + type: string + + - name: appServicePlan + displayName: App Service Plan name + type: string + + - name: appServicePlanRG + displayName: App Service Plan Resource Group + type: string + + - name: azureSubscription + displayName: Azure Service Connection + type: string + + - name: botPricingTier + displayName: Bot Pricing Tier + type: string + + - name: bots + displayName: Bots + type: object + + - name: buildFolder + displayName: Build Folder + type: string + default: "build-composer" + + - name: keyVault + displayName: Key Vault name + type: string + + - name: resourceGroup + displayName: Resource Group + type: string + + - name: resourceSuffix + displayName: Azure resources' name suffix + type: string + +stages: +- ${{ each bot in parameters.bots }}: + - stage: "Deploy_${{ bot.name }}" + ${{ if eq(bot.displayName, '') }}: + displayName: "${{ bot.name }}" + ${{ if ne(bot.displayName, '') }}: + displayName: "${{ bot.displayName }}" + dependsOn: "${{ bot.dependsOn }}" + jobs: + - job: "Deploy" + displayName: "Deploy steps" + steps: + # Delete Bot Resources + - template: ../common/deleteResources.yml + parameters: + azureSubscription: "${{ parameters.azureSubscription }}" + resourceGroup: "${{ parameters.resourceGroup }}" + resourceName: "${{ bot.name }}" + resourceSuffix: "${{ parameters.resourceSuffix }}" + + # Gets Bot App Registration credentials from KeyVault or Pipeline Variables + - template: ../common/getAppRegistration.yml + parameters: + appId: ${{ bot.appId }} + appSecret: ${{ bot.appSecret }} + azureSubscription: "${{ parameters.azureSubscription }}" + botName: "${{ bot.name }}" + keyVault: "${{ parameters.keyVault }}" + + # Use Net Core version + - ${{ if ne(bot.project.netCoreVersion, '') }}: + - task: UseDotNet@2 + displayName: "Use NetCore v${{ bot.project.netCoreVersion }}" + inputs: + version: "${{ bot.project.netCoreVersion }}" + + # Evaluate dependencies source and version + - template: evaluateDependenciesVariables.yml + parameters: + botType: "${{ bot.type }}" + registry: "${{ bot.dependency.registry }}" + version: "${{ bot.dependency.version }}" + + # Start of DotNet Install & Build + - template: installDependencies.yml + parameters: + project: "${{ bot.project }}" + registry: "$(DEPENDENCIESSOURCE)" + version: "$(DEPENDENCIESVERSIONNUMBER)" + packages: + Microsoft.Bot.Builder.AI.Luis + Microsoft.Bot.Builder.AI.QnA + Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime + + # Build Bot + - task: DotNetCoreCLI@2 + displayName: "Build" + inputs: + command: publish + publishWebProjects: false + projects: "${{ bot.project.directory }}/${{ bot.project.name }}" + arguments: "--output $(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ parameters.buildFolder }}/${{ bot.name }}" + modifyOutputPath: false + + # Get BotBuilder package version + - task: PowerShell@2 + displayName: 'Get BotBuilder Version' + inputs: + targetType: inline + workingDirectory: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ bot.project.directory }}' + failOnStderr: true + script: | + [XML]$data = Get-Content "./${{ bot.project.name }}" + $package = $data.Project.ItemGroup.PackageReference | Where-Object { $_.Include -eq "Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime" } + Write-Host "##vso[task.setvariable variable=BotBuilderVersionNumber]$($package.version)" + + # Tag BotBuilder package version + - template: ../common/tagBotBuilderVersion.yml + parameters: + ${{ if eq(bot.displayName, '') }}: + botName: "${{ bot.name }}" + ${{ if ne(bot.displayName, '') }}: + botName: "${{ bot.displayName }}" + version: "$(BOTBUILDERVERSIONNUMBER)" + + # Upload zip to artifacts in case we want to debug it + - task: PublishBuildArtifacts@1 + displayName: 'Publish zip package' + inputs: + pathToPublish: "$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ parameters.buildFolder }}/${{ bot.name }}/${{ bot.name }}.zip" + artifactName: dotnet-$(BUILD.BUILDID) + + # Create App Service and Bot Channel Registration + - template: ../common/createAppService.yml + parameters: + appId: $(APPID) + appInsight: "${{ parameters.appInsight }}" + appSecret: $(APPSECRET) + appServicePlan: "${{ parameters.appServicePlan }}" + appServicePlanRG: "${{ parameters.appServicePlanRG }}" + azureSubscription: "${{ parameters.azureSubscription }}" + botGroup: "${{ parameters.resourceGroup }}" + botName: "${{ bot.name }}" + botPricingTier: "${{ parameters.botPricingTier }}" + resourceSuffix: "${{ parameters.resourceSuffix }}" + templateFile: "build/templates/template-bot-resources.json" + + # Deploy bot + - task: AzureWebApp@1 + displayName: 'Deploy Azure Web App : ${{ bot.name }}-$(BUILD.BUILDID)' + inputs: + azureSubscription: "${{ parameters.azureSubscription }}" + appName: '${{ bot.name }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)' + resourceGroupName: '${{ parameters.resourceGroup }}' + package: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ parameters.buildFolder }}/${{ bot.name }}/${{ bot.name }}.zip' + deploymentMethod: runFromPackage + + # Create DirectLine Channel Hosts + - ${{ if eq(bot.type, 'Host') }}: + - template: ../common/createDirectLine.yml + parameters: + azureSubscription: "${{ parameters.azureSubscription }}" + botGroup: "${{ parameters.resourceGroup }}" + botName: "${{ bot.name }}" + resourceSuffix: "${{ parameters.resourceSuffix }}" diff --git a/tests/functional/build/yaml/deployBotResources/dotnet/evaluateDependenciesVariables.yml b/tests/functional/build/yaml/deployBotResources/dotnet/evaluateDependenciesVariables.yml new file mode 100644 index 0000000000..161b04723b --- /dev/null +++ b/tests/functional/build/yaml/deployBotResources/dotnet/evaluateDependenciesVariables.yml @@ -0,0 +1,67 @@ +parameters: + - name: botType + displayName: Bot type + type: string + + - name: registry + displayName: Registry source + type: string + + - name: version + displayName: Version number + type: string + +steps: + - task: PowerShell@2 + displayName: 'Evaluate source & version' + inputs: + targetType: inline + failOnStderr: true + script: | + # Get Source + $sourceDotNetv3MyGet = "https://botbuilder.myget.org/F/botbuilder-v3-dotnet-daily/api/v3/index.json" + $sourceDotNetArtifacts = "https://pkgs.dev.azure.com/ConversationalAI/BotFramework/_packaging/SDK/nuget/v3/index.json" + $sourceDotNetMyGet = "https://botbuilder.myget.org/F/botbuilder-v4-dotnet-daily/api/v3/index.json" + switch -regex ("${{ parameters.registry }}") { + "^($null|)$" { + switch ("${{ parameters.botType }}") { + "SkillV3" { $source = $sourceDotNetv3MyGet } + default { $source = $sourceDotNetArtifacts } + } + } + "Artifacts" { $source = $sourceDotNetArtifacts } + "MyGet" { + switch ("${{ parameters.botType }}") { + "SkillV3" { $source = $sourceDotNetv3MyGet } + default { $source = $sourceDotNetMyGet } + } + } + "NuGet" { $source = "" } + default { $source = "${{ parameters.registry }}" } + } + Write-Host "Source: $source" + + # Get Version Number + switch -regex ("${{ parameters.version }}") { + "^($null||LATEST)$" { + if ("${{ parameters.registry }}".ToUpper() -in "NUGET") { + [Console]::ForegroundColor = "red" + [Console]::Error.WriteLine("Preview versions of BotBuilder are not available for this source.") + [Console]::ResetColor() + exit 1 # Force exit + } + if ("${{ parameters.botType }}" -in "Host", "Skill") { + $PackageList = nuget list Microsoft.Bot.Builder.Integration.AspNet.Core -Source "$source" -PreRelease + $versionNumber = $PackageList.Split(" ")[-1] + } elseif ("${{ parameters.botType }}" -in "SkillV3") { + $versionNumber = "" + } + } + STABLE { $versionNumber = "" } + default { $versionNumber = "${{ parameters.version }}" } + } + Write-Host "Version Number: $versionNumber" + + # Set environment variables + Write-Host "##vso[task.setvariable variable=DependenciesSource]$source" + Write-Host "##vso[task.setvariable variable=DependenciesVersionNumber]$versionNumber" diff --git a/tests/functional/build/yaml/deployBotResources/dotnet/installDependencies.yml b/tests/functional/build/yaml/deployBotResources/dotnet/installDependencies.yml new file mode 100644 index 0000000000..4fc5ef882e --- /dev/null +++ b/tests/functional/build/yaml/deployBotResources/dotnet/installDependencies.yml @@ -0,0 +1,60 @@ +parameters: + - name: packages + displayName: Dependency Packages + type: object + + - name: project + displayName: Project + type: object + + - name: registry + displayName: Registry source + type: string + + - name: version + displayName: Version number + type: string + +steps: + - task: PowerShell@2 + displayName: 'Install dependencies for ${{ parameters.project.name }}' + inputs: + targetType: inline + workingDirectory: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ parameters.project.directory }}' + failOnStderr: true + script: | + $version = "" + $source = "" + + if (-not ([string]::IsNullOrEmpty("${{ parameters.version }}"))) { + $version = "--version ${{ parameters.version }}" + } + + if (-not ([string]::IsNullOrEmpty("${{ parameters.registry }}"))) { + $source = "--source ${{ parameters.registry }}" + } + + foreach ($package in "${{ parameters.packages }}".Split()) { + if ($package -eq "Microsoft.Bot.Builder.Dialogs.Debugging") { + $versionAux = $version + if ($version -Match "rc") { + $version = "$version.preview" + } elseif ($version -Match "daily") { + $version = $version.replace("daily", "daily.preview") + } else { + $version = "$version-preview" + } + } + + Invoke-Expression "dotnet add ""./${{ parameters.project.name }}"" package $version $source $package" + + if (-not ([string]::IsNullOrEmpty("$versionAux"))) { + $version = $versionAux + $versionAux = "" + } + } + + write-host " `nPackages:" + foreach ($package in "${{ parameters.packages }}".Split()) { + write-host " - $package" + } diff --git a/tests/functional/build/yaml/deployBotResources/dotnet/installDependenciesV3.yml b/tests/functional/build/yaml/deployBotResources/dotnet/installDependenciesV3.yml new file mode 100644 index 0000000000..62bb916f5a --- /dev/null +++ b/tests/functional/build/yaml/deployBotResources/dotnet/installDependenciesV3.yml @@ -0,0 +1,44 @@ +parameters: + - name: packages + displayName: Dependency Packages + type: object + + - name: project + displayName: Project + type: object + + - name: registry + displayName: Registry source + type: string + + - name: version + displayName: Version number + type: string + +steps: + - task: PowerShell@2 + displayName: 'Install dependencies' + inputs: + targetType: inline + workingDirectory: '$(System.DefaultWorkingDirectory)/${{ parameters.project.directory }}' + failOnStderr: true + script: | + $version = "" + $source = "" + + if (-not ([string]::IsNullOrEmpty("${{ parameters.version }}"))) { + $version = "-Version ""${{ parameters.version }}""" + } + + if (-not ([string]::IsNullOrEmpty("${{ parameters.registry }}"))) { + $source = "-Source ""${{ parameters.registry }}""" + } + + foreach ($package in "${{ parameters.packages }}".Split()) { + Invoke-Expression "nuget update ""./packages.config"" -Id $package $version $source" + } + + write-host "`nPackages:" + foreach ($package in "${{ parameters.packages }}".Split()) { + write-host " - $package " + } diff --git a/tests/functional/build/yaml/deployBotResources/js/deploy.yml b/tests/functional/build/yaml/deployBotResources/js/deploy.yml new file mode 100644 index 0000000000..497994cda4 --- /dev/null +++ b/tests/functional/build/yaml/deployBotResources/js/deploy.yml @@ -0,0 +1,218 @@ +parameters: + - name: appInsight + displayName: Azure Application Insight name + type: string + + - name: appServicePlan + displayName: App Service Plan name + type: string + + - name: appServicePlanRG + displayName: App Service Plan Resource Group + type: string + + - name: azureSubscription + displayName: Azure Service Connection + type: string + + - name: bots + displayName: Bots + type: object + + - name: botPricingTier + displayName: Bot Pricing Tier + type: string + + - name: connectionName + displayName: OAuth Connection Name + type: string + + - name: dependsOn + displayName: Depends On + type: string + + - name: keyVault + displayName: Key Vault name + type: string + + - name: resourceGroup + displayName: Resource Group + type: string + + - name: resourceSuffix + displayName: Azure resources' name suffix + type: string + +stages: +- ${{ each bot in parameters.bots }}: + - stage: "Deploy_${{ bot.name }}" + ${{ if eq(bot.displayName, '') }}: + displayName: "${{ bot.name }}" + ${{ if ne(bot.displayName, '') }}: + displayName: "${{ bot.displayName }}" + dependsOn: "${{ parameters.dependsOn }}" + jobs: + - job: "Deploy" + displayName: "Deploy steps" + steps: + # Delete Bot Resources + - template: ../common/deleteResources.yml + parameters: + azureSubscription: "${{ parameters.azureSubscription }}" + resourceGroup: "${{ parameters.resourceGroup }}" + resourceName: "${{ bot.name }}" + resourceSuffix: "${{ parameters.resourceSuffix }}" + + # Gets Bot App Registration credentials from KeyVault or Pipeline Variables + - template: ../common/getAppRegistration.yml + parameters: + appId: ${{ bot.appId }} + appSecret: ${{ bot.appSecret }} + azureSubscription: "${{ parameters.azureSubscription }}" + botName: "${{ bot.name }}" + keyVault: "${{ parameters.keyVault }}" + + # Prepare .env file, deleting all the declared skills, so it uses only the settings define in Azure + - ${{ if eq(bot.type, 'Host') }}: + - task: PowerShell@2 + displayName: 'Prepare .env file' + inputs: + targetType: inline + workingDirectory: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ bot.project.directory }}' + failOnStderr: true + script: | + $file = "./.env" + $content = Get-Content $file + $content | ForEach-Object { + $line = $_ + if ($line.Trim().Length -gt 0 -and -not $line.Trim().ToLower().StartsWith('skill_')) { + $line + } + } | Set-Content $file; + + # Evaluate dependencies source and version + - template: evaluateDependenciesVariables.yml + parameters: + botType: "${{ bot.type }}" + registry: "${{ bot.dependency.registry }}" + version: "${{ bot.dependency.version }}" + + # Tag BotBuilder version + - template: ../common/tagBotBuilderVersion.yml + parameters: + ${{ if eq(bot.displayName, '') }}: + botName: "${{ bot.name }}" + ${{ if ne(bot.displayName, '') }}: + botName: "${{ bot.displayName }}" + version: "$(DEPENDENCIESVERSIONNUMBER)" + + # Set BotBuilder source and version + - task: PowerShell@2 + displayName: 'Set BotBuilder source and version' + inputs: + targetType: inline + workingDirectory: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ bot.project.directory }}' + failOnStderr: true + script: | + $registry = "$(DEPENDENCIESSOURCE)"; + $version = "$(DEPENDENCIESVERSIONNUMBER)"; + $packagejsonPath = "./package.json"; + + $packagejson = Get-Content $packagejsonPath | ConvertFrom-Json + $dependencies = @{} + + $packagejson.dependencies.psobject.properties | ForEach-Object { + $dependencies[$_.Name] = if ($_.Name -match "botbuilder*") { $version } else { $_.Value } + } + + $packagejson.dependencies = $dependencies + + Set-Content $packagejsonPath -Value ($packagejson | ConvertTo-Json) + + Write-Host "Updated BotBuilder packages version:"; + $dependencies + + Write-Host "`nUsing the registry source: $registry"; + New-Item -Path . -Name ".npmrc" -ItemType "file" -Value "registry=$registry"; + + # Install Packages + - task: Npm@1 + displayName: 'Install dependencies' + inputs: + command: 'install' + workingDir: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ bot.project.directory }}' + customRegistries: 'useNpmrc' + verbose: true + + # Prepate bot + - task: AzureCLI@2 + displayName: 'Prepare Bot' + inputs: + azureSubscription: "${{ parameters.azureSubscription }}" + scriptType: pscore + scriptLocation: inlineScript + inlineScript: 'az bot prepare-deploy --code-dir "${{ bot.project.directory }}" --lang Javascript' + + # Zip bot + - task: ArchiveFiles@2 + displayName: 'Zip bot' + inputs: + rootFolderOrFile: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ bot.project.directory }}' + includeRootFolder: false + archiveType: 'zip' + archiveFile: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/build/${{ bot.name }}.zip' + replaceExistingArchive: true + verbose: true + + # Upload zip to artifacts in case we want to debug it + - task: PublishBuildArtifacts@1 + displayName: 'Publish zip package' + inputs: + pathToPublish: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/build/${{ bot.name }}.zip' + artifactName: javascript-$(BUILD.BUILDID) + + # Create App Service and Bot Channel Registration + - template: ../common/createAppService.yml + parameters: + appId: $(APPID) + appInsight: "${{ parameters.appInsight }}" + appSecret: $(APPSECRET) + appServicePlan: "${{ parameters.appServicePlan }}" + appServicePlanRG: "${{ parameters.appServicePlanRG }}" + azureSubscription: "${{ parameters.azureSubscription }}" + botGroup: "${{ parameters.resourceGroup }}" + botName: "${{ bot.name }}" + botPricingTier: "${{ parameters.botPricingTier }}" + resourceSuffix: "${{ parameters.resourceSuffix }}" + templateFile: "build/templates/template-bot-resources.json" + + # Deploy bot + - task: AzureWebApp@1 + displayName: 'Deploy Azure Web App : ${{ bot.name }}-$(BUILD.BUILDID)' + inputs: + azureSubscription: "${{ parameters.azureSubscription }}" + appName: '${{ bot.name }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)' + resourceGroupName: '${{ parameters.resourceGroup }}' + package: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/build/${{ bot.name }}.zip' + deploymentMethod: runFromPackage + + # Configure OAuth + - ${{ if eq(bot.type, 'Skill') }}: + - template: ../common/configureOAuth.yml + parameters: + appId: $(APPID) + appSecret: $(APPSECRET) + azureSubscription: "${{ parameters.azureSubscription }}" + botGroup: "${{ parameters.resourceGroup }}" + botName: "${{ bot.name }}" + connectionName: "${{ parameters.connectionName }}" + resourceSuffix: "${{ parameters.resourceSuffix }}" + + # Create DirectLine Channel Hosts + - ${{ if eq(bot.type, 'Host') }}: + - template: ../common/createDirectLine.yml + parameters: + azureSubscription: "${{ parameters.azureSubscription }}" + botGroup: "${{ parameters.resourceGroup }}" + botName: "${{ bot.name }}" + resourceSuffix: "${{ parameters.resourceSuffix }}" diff --git a/tests/functional/build/yaml/deployBotResources/js/evaluateDependenciesVariables.yml b/tests/functional/build/yaml/deployBotResources/js/evaluateDependenciesVariables.yml new file mode 100644 index 0000000000..fc47b0302e --- /dev/null +++ b/tests/functional/build/yaml/deployBotResources/js/evaluateDependenciesVariables.yml @@ -0,0 +1,69 @@ +parameters: + - name: botType + displayName: Bot type + type: string + + - name: registry + displayName: Registry source + type: string + + - name: version + displayName: Version number + type: string + +steps: + - task: PowerShell@2 + displayName: 'Evaluate source & version' + inputs: + targetType: inline + failOnStderr: true + script: | + # Get Source + $sourceJSMyGet = "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/" + $sourceJSv3MyGet = "https://botbuilder.myget.org/F/botbuilder-v3-js-daily/npm/" + $sourceJSNpm = "https://registry.npmjs.com/" + switch -regex ("${{ parameters.registry }}") { + "^($null|MyGet)$" { + switch ("${{ parameters.botType }}") { + "SkillV3" { $source = $sourceJSv3MyGet } + default { $source = $sourceJSMyGet } + } + } + "Npm" { $source = $sourceJSNpm } + default { $source = "${{ parameters.registry }}" } + } + Write-Host "Source: $source" + npm config set registry $source + + # Get Version Number + switch -regex ("${{ parameters.version }}") { + "^($null||LATEST)$" { + if ("${{ parameters.registry }}".ToUpper() -in "NPM") { + [Console]::ForegroundColor = 'red' + [Console]::Error.WriteLine("Preview versions of BotBuilder are not available for this source.") + [Console]::ResetColor() + exit 1 # Force exit + } + + if ($source -eq $sourceJSMyGet) { + $versionNumber = npm show botbuilder@next version | Out-String + } else { + $versionNumber = npm show botbuilder@latest version | Out-String + } + } + STABLE { + if ("${{ parameters.botType }}" -in "Host", "Skill") { + $PackageList = npm show botbuilder@* version | Out-String; + } + elseif ("${{ parameters.botType }}" -in "SkillV3") { + $PackageList = npm show botbuilder@3.* version | Out-String; + } + $versionNumber = ($PackageList.Split(" ")[-1]).Trim().TrimStart("'").TrimEnd("'"); + } + default { $versionNumber = "${{ parameters.version }}" } + } + Write-Host "Version Number: $versionNumber" + + # Set environment variables + Write-Host "##vso[task.setvariable variable=DependenciesSource]$source" + Write-Host "##vso[task.setvariable variable=DependenciesVersionNumber]$versionNumber" diff --git a/tests/functional/build/yaml/deployBotResources/python/deploy.yml b/tests/functional/build/yaml/deployBotResources/python/deploy.yml new file mode 100644 index 0000000000..b0f721a61e --- /dev/null +++ b/tests/functional/build/yaml/deployBotResources/python/deploy.yml @@ -0,0 +1,183 @@ +parameters: + - name: appServicePlan + displayName: App Service Plan name + type: string + + - name: appServicePlanRG + displayName: App Service Plan Resource Group + type: string + + - name: azureSubscription + displayName: Azure Service Connection + type: string + + - name: bots + displayName: Bots + type: object + + - name: botPricingTier + displayName: Bot Pricing Tier + type: string + + - name: connectionName + displayName: OAuth Connection Name + type: string + + - name: dependsOn + displayName: Depends On + type: string + + - name: keyVault + displayName: Key Vault name + type: string + + - name: resourceGroup + displayName: Resource Group + type: string + + - name: resourceSuffix + displayName: Azure resources' name suffix + type: string + +stages: +- ${{ each bot in parameters.bots }}: + - stage: "Deploy_${{ bot.name }}" + ${{ if eq(bot.displayName, '') }}: + displayName: "${{ bot.name }}" + ${{ if ne(bot.displayName, '') }}: + displayName: "${{ bot.displayName }}" + dependsOn: "${{ parameters.dependsOn }}" + jobs: + - job: "Deploy" + pool: + vmImage: "ubuntu-latest" + displayName: "Deploy steps" + steps: + # Delete Bot Resources + - template: ../common/deleteResources.yml + parameters: + azureSubscription: "${{ parameters.azureSubscription }}" + resourceGroup: "${{ parameters.resourceGroup }}" + resourceName: "${{ bot.name }}" + resourceSuffix: "${{ parameters.resourceSuffix }}" + + # Gets Bot App Registration credentials from KeyVault or Pipeline Variables + - template: ../common/getAppRegistration.yml + parameters: + appId: ${{ bot.appId }} + appSecret: ${{ bot.appSecret }} + azureSubscription: "${{ parameters.azureSubscription }}" + botName: "${{ bot.name }}" + keyVault: "${{ parameters.keyVault }}" + + # Prepare .env file, deleting all the declared skills, so it uses only the settings define in Azure + - ${{ if eq(bot.type, 'Host') }}: + - task: PowerShell@2 + displayName: "Prepare .env file" + inputs: + targetType: inline + script: | + $file = "${{ bot.project.directory }}/.env" + $content = Get-Content $file + $content | ForEach-Object { + $line = $_ + if ($line.Trim().Length -gt 0 -and -not $line.Trim().ToLower().StartsWith("skill_")) { + $line + } + } | Set-Content $file + + # Evaluate dependencies source and version + - template: evaluateDependenciesVariables.yml + parameters: + botType: "${{ bot.type }}" + source: "${{ bot.project.directory }}" + registry: "${{ bot.dependency.registry }}" + version: "${{ bot.dependency.version }}" + + # Tag BotBuilder package version + - template: ../common/tagBotBuilderVersion.yml + parameters: + ${{ if eq(bot.displayName, '') }}: + botName: "${{ bot.name }}" + ${{ if ne(bot.displayName, '') }}: + botName: "${{ bot.displayName }}" + version: "$(DEPENDENCIESVERSIONNUMBER)" + + # Create App Service and Bot Channel Registration + - template: ../common/createAppService.yml + parameters: + appId: $(APPID) + appSecret: $(APPSECRET) + appServicePlan: "${{ parameters.appServicePlan }}" + appServicePlanRG: "${{ parameters.appServicePlanRG }}" + azureSubscription: "${{ parameters.azureSubscription }}" + botName: "${{ bot.name }}" + botGroup: "${{ parameters.resourceGroup }}" + botPricingTier: "${{ parameters.botPricingTier }}" + resourceSuffix: "${{ parameters.resourceSuffix }}" + templateFile: "build/templates/template-python-bot-resources.json" + + # Configure OAuth + - ${{ if eq(bot.type, 'Skill') }}: + - template: ../common/configureOAuth.yml + parameters: + appId: $(APPID) + appSecret: $(APPSECRET) + azureSubscription: "${{ parameters.azureSubscription }}" + botGroup: "${{ parameters.resourceGroup }}" + botName: "${{ bot.name }}" + connectionName: "${{ parameters.connectionName }}" + resourceSuffix: "${{ parameters.resourceSuffix }}" + + # Set Python version + - task: UsePythonVersion@0 + displayName: "Set python version to 3.8.x" + inputs: + versionSpec: "3.8.x" + + # Build Python app (linux only) + - script: | + python -m venv antenv + source antenv/bin/activate + python -m pip install --upgrade pip + pip install -r requirements.txt + workingDirectory: $(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ bot.project.directory }} + displayName: "Build Python app" + + # Zip bot + - task: ArchiveFiles@2 + displayName: "Zip bot" + inputs: + rootFolderOrFile: "$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ bot.project.directory }}" + includeRootFolder: false + archiveType: "zip" + archiveFile: "$(SYSTEM.DEFAULTWORKINGDIRECTORY)/build/${{ bot.name }}.zip" + replaceExistingArchive: true + verbose: true + + # Upload zip to artifacts in case we want to debug it + - task: PublishBuildArtifacts@1 + displayName: "Publish zip package" + inputs: + pathToPublish: "$(SYSTEM.DEFAULTWORKINGDIRECTORY)/build/${{ bot.name }}.zip" + artifactName: python-$(BUILD.BUILDID) + + # Deploy bot + - task: AzureWebApp@1 + displayName: "Deploy Azure Web App : ${{ bot.name }}-$(BUILD.BUILDID)" + inputs: + azureSubscription: "${{ parameters.azureSubscription }}" + appName: "${{ bot.name }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)" + appType: webAppLinux + resourceGroupName: "${{ parameters.resourceGroup }}" + package: "$(System.DefaultWorkingDirectory)/build/${{ bot.name }}.zip" + deploymentMethod: runFromPackage + + # Create DirectLine Channel Hosts + - ${{ if eq(bot.type, 'Host') }}: + - template: ../common/createDirectLine.yml + parameters: + azureSubscription: "${{ parameters.azureSubscription }}" + botGroup: "${{ parameters.resourceGroup }}" + botName: "${{ bot.name }}" + resourceSuffix: "${{ parameters.resourceSuffix }}" diff --git a/tests/functional/build/yaml/deployBotResources/python/evaluateDependenciesVariables.yml b/tests/functional/build/yaml/deployBotResources/python/evaluateDependenciesVariables.yml new file mode 100644 index 0000000000..aa8874fa4e --- /dev/null +++ b/tests/functional/build/yaml/deployBotResources/python/evaluateDependenciesVariables.yml @@ -0,0 +1,110 @@ +parameters: + - name: botType + displayName: Bot type + type: string + + - name: source + displayName: Bot Source Location + type: string + + - name: registry + displayName: Registry source + type: string + + - name: version + displayName: Version number + type: string + +steps: + - task: PowerShell@2 + displayName: "Evaluate source & version" + inputs: + targetType: inline + script: | + # Get Source + $sourcePypi = "https://pypi.org/simple/" + $sourceTestPypi = "https://test.pypi.org/simple/" + $sourceArtifacts = "https://pkgs.dev.azure.com/ConversationalAI/BotFramework/_packaging/SDK/pypi/simple/" + + switch -regex ("${{ parameters.registry }}") { + "^($null||Artifacts)$" { + $source = $sourceArtifacts + $extraSource = $sourcePypi + } + "Pypi" { + $source = $sourcePypi + $extraSource = $sourceArtifacts + } + "Test.Pypi" { + $source = $sourceTestPypi + $extraSource = $sourcePypi + } + default { + $source = "${{ parameters.registry }}" + $extraSource = $sourcePypi + } + } + + # Get Version Number + switch -regex ("${{ parameters.version }}") { + "^($null||LATEST)$" { + if ("${{ parameters.registry }}".ToUpper() -in "PYPI") { + [Console]::ForegroundColor = "red" + [Console]::Error.WriteLine("Preview versions of BotBuilder are not available for this source.") + [Console]::ResetColor() + exit 1 # Force exit + } + $versionNumber = "" + $preFag = "--pre" + } + STABLE { + $versionNumber = "" + } + default { + $versionNumber = "${{ parameters.version }}" + $condition = "==" + } + } + + #Add the $source source at the beginning of requirements + $file = "${{ parameters.source }}/requirements.txt" + $content = @(Get-Content $file) + $line = "$preFag --index-url $source --extra-index-url $extraSource".Trim() + Set-Content -Path $file -Value $line + Add-Content -Path $file -Value $content + + function UpdatePackageVersion($package) { + #Set Package version to empty value + $content = @(Get-Content $file) + $matchinfo = Select-String -Path $file -Pattern $package + + $script = "$package $condition $versionNumber" + + if ($matchinfo.LineNumber -gt 0) { + $content[$matchinfo.LineNumber - 1] = $script + Set-Content -Path $file -Value $content + } else { + Add-Content -Path $file -Value $script + } + } + + UpdatePackageVersion "botbuilder-dialogs" + UpdatePackageVersion "botbuilder-integration-aiohttp" + + if (-not $versionNumber) { + Invoke-Expression "pip install botbuilder-integration-aiohttp $line --quiet" + $packageVersion = pip show botbuilder-integration-aiohttp | Where-Object { $_ -match "^Version" } + $versionNumber = $packageVersion.Split(" ")[1] + } + + Write-Host "`nSource: $source" + Write-Host "Extra Source: $extraSource" + Write-Host "Version Number: $versionNumber" + + $content = @(Get-Content $file) + Write-Host "`nrequirements.txt file:" + $content + + # Set environment variables + Write-Host "##vso[task.setvariable variable=DependenciesSource]$source" + Write-Host "##vso[task.setvariable variable=DependenciesVersionNumber]$versionNumber" diff --git a/tests/functional/build/yaml/dotnetBotsBuild-CI.yml b/tests/functional/build/yaml/dotnetBotsBuild-CI.yml new file mode 100644 index 0000000000..a5d9e29280 --- /dev/null +++ b/tests/functional/build/yaml/dotnetBotsBuild-CI.yml @@ -0,0 +1,53 @@ +parameters: + - name: buildConfiguration + displayName: Build Configuration + type: string + + - name: buildPlatform + displayName: Build Platfrom + type: string + + - name: solutionDir + displayName: Solution Directory + type: string + +steps: +- task: UseDotNet@2 + displayName: "Use .Net Core sdk 2.1.x" + inputs: + version: 2.1.x + +- task: UseDotNet@2 + displayName: "Use .Net Core sdk 3.1.x" + inputs: + version: 3.1.x + +- task: NuGetToolInstaller@1 + displayName: "Use NuGet" + +- task: NuGetCommand@2 + displayName: "NuGet restore" + inputs: + restoreSolution: "Bots/DotNet/FunctionalTestsBots.sln" + restoreDirectory: "${{ parameters.solutionDir }}packages" + +- task: MSBuild@1 + displayName: "Build" + inputs: + solution: "Bots/DotNet/FunctionalTestsBots.sln" + vsVersion: 16.0 + platform: "${{ parameters.buildPlatform }}" + configuration: "${{ parameters.buildConfiguration }}" + +- task: PublishBuildArtifacts@1 + displayName: "Publish Artifact: build folder" + inputs: + PathtoPublish: build + ArtifactName: build + +- powershell: | + cd .. + ls -R + displayName: "Dir workspace" + continueOnError: true + condition: succeededOrFailed() diff --git a/tests/functional/build/yaml/functionalTests-CI.yml b/tests/functional/build/yaml/functionalTests-CI.yml new file mode 100644 index 0000000000..a7bd678a83 --- /dev/null +++ b/tests/functional/build/yaml/functionalTests-CI.yml @@ -0,0 +1,31 @@ +# This YAML runs all the CI pipelines Dot Net, python, JS in parallel +variables: + BuildConfiguration: "Debug" + BuildPlatform: "Any CPU" + +jobs: + - job: "BuildJSBots" + steps: + - template: jsBotsBuildCI.yml + + - job: "BuildPythonBots" + steps: + - template: pythonBotsBuild-CI.yml + + - job: "BuildDotnetBots" + steps: + - template: dotnetBotsBuild-CI.yml + parameters: + buildConfiguration: "$(BUILDCONFIGURATION)" + buildPlatform: "$(BUILDPLATFORM)" + solutionDir: "$(BUILD.SOURCESDIRECTORY)/Bots/DotNet/" + + - job: "BuildSkillsFunctionalTests" + steps: + - template: functionalTestsBuild-CI.yml + parameters: + buildConfiguration: "$(BUILDCONFIGURATION)" + buildPlatform: "$(BUILDPLATFORM)" + +pool: + vmImage: "windows-2019" diff --git a/tests/functional/build/yaml/functionalTestsBuild-CI.yml b/tests/functional/build/yaml/functionalTestsBuild-CI.yml new file mode 100644 index 0000000000..89bff9a0cd --- /dev/null +++ b/tests/functional/build/yaml/functionalTestsBuild-CI.yml @@ -0,0 +1,56 @@ +parameters: + - name: buildConfiguration + displayName: Build Configuration + type: string + + - name: buildPlatform + displayName: Build Platform + type: string + +steps: +- task: UseDotNet@2 + displayName: "Use .Net Core sdk 2.1.x" + inputs: + version: 2.1.x + +- task: UseDotNet@2 + displayName: "Use .Net Core sdk 3.1.x" + inputs: + version: 3.1.x + +- task: NuGetToolInstaller@1 + displayName: "Use NuGet" + +- task: NuGetCommand@2 + displayName: "NuGet restore" + inputs: + restoreSolution: SkillFunctionalTests.sln + +- task: MSBuild@1 + displayName: "Build" + inputs: + solution: "SkillFunctionalTests.sln" + vsVersion: 16.0 + platform: "${{ parameters.buildPlatform }}" + configuration: "${{ parameters.buildConfiguration }}" + +- task: DotNetCoreCLI@2 + displayName: 'Run Unit Tests' + inputs: + command: test + projects: 'Tests/TranscriptTestRunnerTests/TranscriptTestRunnerTests.csproj' + testRunTitle: 'FunctionalTests-CI-Results-$(BUILD.BUILDNUMBER)' + arguments: '-v n --configuration ${{ parameters.buildConfiguration }} --no-build --no-restore --collect "Code Coverage" --logger "trx;LogFileName=FunctionalTests-CI-Results-$(BUILD.BUILDNUMBER).trx"' + +- task: PublishBuildArtifacts@1 + displayName: "Publish Artifact: build folder" + inputs: + PathtoPublish: build + ArtifactName: build + +- powershell: | + cd .. + ls -R + displayName: "Dir workspace" + continueOnError: true + condition: succeededOrFailed() diff --git a/tests/functional/build/yaml/jsBotsBuildCI.yml b/tests/functional/build/yaml/jsBotsBuildCI.yml new file mode 100644 index 0000000000..264b80a4c5 --- /dev/null +++ b/tests/functional/build/yaml/jsBotsBuildCI.yml @@ -0,0 +1,6 @@ +steps: +- script: yarn + displayName: "yarn install" + +- script: yarn lint + displayName: "yarn lint" diff --git a/tests/functional/build/yaml/pythonBotsBuild-CI.yml b/tests/functional/build/yaml/pythonBotsBuild-CI.yml new file mode 100644 index 0000000000..816153ba31 --- /dev/null +++ b/tests/functional/build/yaml/pythonBotsBuild-CI.yml @@ -0,0 +1,14 @@ + steps: + - task: UsePythonVersion@0 + displayName: "Use Python version" + inputs: + versionSpec: "3.8.x" + + - task: Bash@3 + displayName: "Install dependencies" + inputs: + targetType: "inline" + script: | + python -m pip install pip==21.0.1; + find ./Bots -type f -name "requirements.txt" -exec pip install pip==21.0.1 -r "{}" \; + diff --git a/tests/functional/build/yaml/sharedResources/createAppRegistrations.yml b/tests/functional/build/yaml/sharedResources/createAppRegistrations.yml new file mode 100644 index 0000000000..3edd645750 --- /dev/null +++ b/tests/functional/build/yaml/sharedResources/createAppRegistrations.yml @@ -0,0 +1,132 @@ +parameters: +- name: azureSubscription + displayName: Azure Service Connection + type: string + +- name: keyVault + displayName: KeyVault name + type: string + +- name: resourceSuffix + displayName: Azure resources' name suffix + type: string + +- name: servicePrincipalId + displayName: Service Principal Id + type: string + +- name: servicePrincipalKey + displayName: Service Principal Key + type: string + +- name: tenantId + displayName: Subscription Tenant Id + type: string + +steps: + - task: AzureCLI@2 + displayName: "Create App Registrations & Store into KeyVault" + inputs: + azureSubscription: "${{ parameters.azureSubscription }}" + addSpnToEnvironment: true + failOnStandardError: true + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + # Using Microsoft Graph REST API to create App Registrations (https://docs.microsoft.com/en-us/graph/api/application-post-applications) instead of Azure CLI due to Azure Active Directory Graph API has been deprecated and still in a migration process to Microsoft Graph API, more information can be found in this link (https://github.com/Azure/azure-cli/issues/12946). + + function GetToken() { + # Get Token + + $body = @{ + grant_type = "client_credentials"; + scope = "https://graph.microsoft.com/.default"; + client_id = ${{ parameters.servicePrincipalId }}; + client_secret = ${{ parameters.servicePrincipalKey }}; + } + + Invoke-WebRequest -Uri "https://login.microsoftonline.com/${{ parameters.tenantId }}/oauth2/v2.0/token" -Method "POST" -Body $body | ConvertFrom-Json + } + + function CreateAppRegistration($token, $appName) { + # Create App Registration + + $headers = @{ + Authorization = "Bearer " + $token.access_token + } + + $body = @{ + displayName = $appName; + signInAudience = "AzureADandPersonalMicrosoftAccount" + } | ConvertTo-Json + + $app = Invoke-WebRequest -Uri "https://graph.microsoft.com/v1.0/applications" -Method "POST" -Headers $headers -Body $body -ContentType "application/json" | ConvertFrom-Json; + + # Assign a secret to the App Registration + + $body = @{ + displayName = $app.appId; + } | ConvertTo-Json + + $secret = Invoke-WebRequest -Uri "https://graph.microsoft.com/v1.0/applications/$($app.id)/addPassword" -Method "POST" -Headers $headers -Body $body -ContentType "application/json" | ConvertFrom-Json + + $app | Add-Member -MemberType NoteProperty -Name secret -Value $secret.secretText; + + $app + } + + function SaveAppRegistrationIntoKeyVault($vaultName, $bot, $app) { + # Store secrets into KeyVault + + $secrets = @( + @{ name = $bot.objectId; value = $app.id }, + @{ name = $bot.appId; value = $app.appId }, + @{ name = $bot.appSecret; value = $app.secret } + ) + + foreach ($secret in $secrets) { + az keyvault secret set --vault-name $vaultName --name $secret.name --value="$($secret.value)" --output none + } + } + + $bots = @( + @{ appName = "bffnsimplehostbotdotnet"; variables = @{ appId = "BffnSimpleHostBotDotNetAppId"; appSecret = "BffnSimpleHostBotDotNetAppSecret"; objectId = "BffnSimpleHostBotDotNetAppObjectId" }}, + @{ appName = "bffnsimplehostbotdotnet21"; variables = @{ appId = "BffnSimpleHostBotDotNet21AppId"; appSecret = "BffnSimpleHostBotDotNet21AppSecret"; objectId = "BffnSimpleHostBotDotNet21AppObjectId" }}, + @{ appName = "bffnechoskillbotdotnet"; variables = @{ appId = "BffnEchoSkillBotDotNetAppId"; appSecret = "BffnEchoSkillBotDotNetAppSecret"; objectId = "BffnEchoSkillBotDotNetAppObjectId" }}, + @{ appName = "bffnechoskillbotdotnet21"; variables = @{ appId = "BffnEchoSkillBotDotNet21AppId"; appSecret = "BffnEchoSkillBotDotNet21AppSecret"; objectId = "BffnEchoSkillBotDotNet21AppObjectId" }}, + @{ appName = "bffnechoskillbotdotnetv3"; variables = @{ appId = "BffnEchoSkillBotDotNetV3AppId"; appSecret = "BffnEchoSkillBotDotNetV3AppSecret"; objectId = "BffnEchoSkillBotDotNetV3AppObjectId" }}, + @{ appName = "bffnsimplehostbotcomposerdotnet"; variables = @{ appId = "BffnSimpleHostBotComposerDotNetAppId"; appSecret = "BffnSimpleHostBotComposerDotNetAppSecret"; objectId = "BffnSimpleHostBotComposerDotNetAppObjectId" }}, + @{ appName = "bffnechoskillbotcomposerdotnet"; variables = @{ appId = "BffnEchoSkillBotComposerDotNetAppId"; appSecret = "BffnEchoSkillBotComposerDotNetAppSecret"; objectId = "BffnEchoSkillBotComposerDotNetAppObjectId" }}, + @{ appName = "bffnwaterfallhostbotdotnet"; variables = @{ appId = "BffnWaterfallHostBotDotNetAppId"; appSecret = "BffnWaterfallHostBotDotNetAppSecret"; objectId = "BffnWaterfallHostBotDotNetAppObjectId" }}, + @{ appName = "bffnwaterfallskillbotdotnet"; variables = @{ appId = "BffnWaterfallSkillBotDotNetAppId"; appSecret = "BffnWaterfallSkillBotDotNetAppSecret"; objectId = "BffnWaterfallSkillBotDotNetAppObjectId" }}, + @{ appName = "bffnsimplehostbotjs"; variables = @{ appId = "BffnSimpleHostBotJSAppId"; appSecret = "BffnSimpleHostBotJSAppSecret"; objectId = "BffnSimpleHostBotJSAppObjectId" }}, + @{ appName = "bffnechoskillbotjs"; variables = @{ appId = "BffnEchoSkillBotJSAppId"; appSecret = "BffnEchoSkillBotJSAppSecret"; objectId = "BffnEchoSkillBotJSAppObjectId" }}, + @{ appName = "bffnechoskillbotjsv3"; variables = @{ appId = "BffnEchoSkillBotJSV3AppId"; appSecret = "BffnEchoSkillBotJSV3AppSecret"; objectId = "BffnEchoSkillBotJSV3AppObjectId" }}, + @{ appName = "bffnwaterfallhostbotjs"; variables = @{ appId = "BffnWaterfallHostBotJSAppId"; appSecret = "BffnWaterfallHostBotJSAppSecret"; objectId = "BffnWaterfallHostBotJSAppObjectId" }}, + @{ appName = "bffnwaterfallskillbotjs"; variables = @{ appId = "BffnWaterfallSkillBotJSAppId"; appSecret = "BffnWaterfallSkillBotJSAppSecret"; objectId = "BffnWaterfallSkillBotJSAppObjectId" }}, + @{ appName = "bffnsimplehostbotpython"; variables = @{ appId = "BffnSimpleHostBotPythonAppId"; appSecret = "BffnSimpleHostBotPythonAppSecret"; objectId = "BffnSimpleHostBotPythonAppObjectId" }}, + @{ appName = "bffnechoskillbotpython"; variables = @{ appId = "BffnEchoSkillBotPythonAppId"; appSecret = "BffnEchoSkillBotPythonAppSecret"; objectId = "BffnEchoSkillBotPythonAppObjectId" }}, + @{ appName = "bffnwaterfallhostbotpython"; variables = @{ appId = "BffnWaterfallHostBotPythonAppId"; appSecret = "BffnWaterfallHostBotPythonAppSecret"; objectId = "BffnWaterfallHostBotPythonAppObjectId" }}, + @{ appName = "bffnwaterfallskillbotpython"; variables = @{ appId = "BffnWaterfallSkillBotPythonAppId"; appSecret = "BffnWaterfallSkillBotPythonAppSecret"; objectId = "BffnWaterfallSkillBotPythonAppObjectId" }} + ) + + $token = GetToken + + foreach ($bot in $bots) { + $botName = "$($bot.appName)${{ parameters.resourceSuffix }}" + Write-Host "`n[$botName] Starting" + Write-Host "Creating App Registration ..." + + $app = CreateAppRegistration $token $botName + Write-Host " + App Registration: + Name: $botName + Variables: + $($bot.variables.objectId): $($app.id) + $($bot.variables.appId): $($app.appId) + " + + Write-Host "Storing App Registration into the KeyVault (${{ parameters.keyVault }}) ..." + SaveAppRegistrationIntoKeyVault "${{ parameters.keyVault }}" $bot.variables $app + Write-Host "[$botName] Ending" + } diff --git a/tests/functional/build/yaml/sharedResources/createSharedResources.yml b/tests/functional/build/yaml/sharedResources/createSharedResources.yml new file mode 100644 index 0000000000..cae6a936aa --- /dev/null +++ b/tests/functional/build/yaml/sharedResources/createSharedResources.yml @@ -0,0 +1,172 @@ +# +# Creates the shared resources needed for the Skills Functional Tests. +# + +name: $(BUILD.BUILDID) +trigger: none +pr: none + +pool: + vmImage: "windows-2019" + +variables: + ## Azure Resources (Define these variables in Azure) + # AzureSubscription: Service Connection Name to Manage Azure resources. + # KeyVaultObjectId: Suscription's Object Id to create the keyvault to store App Registrations. + # AppServicePlanPricingTier: (optional) Pricing Tier for App Service Plans, default F1. + # ResourceGroupName: (optional) Name of the Resource Group for the shared resources. + # ResourceSuffix: (optional) Suffix to add to the resources' name to avoid collitions. + + ## Internal variables + InternalAppInsightsName: "bffnappinsights$($env:RESOURCESUFFIX)" + InternalAppServicePlanDotNetName: "bffnbotsappservicedotnet$($env:RESOURCESUFFIX)" + InternalAppServicePlanJSName: "bffnbotsappservicejs$($env:RESOURCESUFFIX)" + InternalAppServicePlanPythonName: "bffnbotsappservicepython$($env:RESOURCESUFFIX)" + InternalCosmosDBName: "bffnbotstatedb$($env:RESOURCESUFFIX)" + InternalKeyVaultName: "bffnbotkeyvault$($env:RESOURCESUFFIX)" + InternalResourceGroupName: $[coalesce(variables['RESOURCEGROUPNAME'], 'bffnshared')] + +stages: +- stage: Create_Resource_Group_Windows + displayName: "Create Resource Group (Windows)" + jobs: + - job: Create_Resource_Group_Windows + displayName: "Create steps" + steps: + - checkout: none + - task: AzureCLI@2 + displayName: "Create $(INTERNALRESOURCEGROUPNAME)" + inputs: + azureSubscription: $(AZURESUBSCRIPTION) + scriptType: pscore + scriptLocation: inlineScript + inlineScript: "az group create --name $(INTERNALRESOURCEGROUPNAME) --location westus" + +- stage: Create_Resource_Group_Linux + displayName: "Create Resource Group (Linux)" + dependsOn: [] + jobs: + - job: Create_Resource_Group_Linux + displayName: "Create steps" + steps: + - checkout: none + - task: AzureCLI@2 + displayName: "Create $(INTERNALRESOURCEGROUPNAME)-linux" + inputs: + azureSubscription: $(AZURESUBSCRIPTION) + scriptType: pscore + scriptLocation: inlineScript + inlineScript: "az group create --name $(INTERNALRESOURCEGROUPNAME)-linux --location westus" + +- stage: Create_CosmosDB + displayName: "Create CosmosDB" + dependsOn: Create_Resource_Group_Windows + jobs: + - job: Deploy_Cosmos_DB + displayName: "Deploy steps" + steps: + - task: AzureCLI@2 + displayName: "Deploy CosmosDB" + inputs: + azureSubscription: $(AZURESUBSCRIPTION) + scriptType: pscore + scriptLocation: inlineScript + inlineScript: "az deployment group create --name $(INTERNALCOSMOSDBNAME) --resource-group $(INTERNALRESOURCEGROUPNAME) --template-file build/templates/template-cosmosdb-resources.json --parameters accountName=$(INTERNALCOSMOSDBNAME) databaseName=$(INTERNALCOSMOSDBNAME)" + +- stage: Create_Key_Vault + displayName: "Create Key Vault" + dependsOn: Create_Resource_Group_Windows + jobs: + - job: Deploy_Key_Vault + displayName: "Deploy steps" + steps: + - task: AzureCLI@2 + displayName: "Deploy Key Vault" + inputs: + azureSubscription: $(AZURESUBSCRIPTION) + scriptType: pscore + scriptLocation: inlineScript + inlineScript: "az deployment group create --name $(INTERNALKEYVAULTNAME) --resource-group $(INTERNALRESOURCEGROUPNAME) --template-file build/templates/template-key-vault-resources.json --parameters keyVaultName=$(INTERNALKEYVAULTNAME) objectId=$(KEYVAULTOBJECTID)" + +- stage: Create_App_Registrations + displayName: "Create App Registrations" + dependsOn: Create_Key_Vault + jobs: + - job: Create_App_Registrations + displayName: "Create steps" + steps: + - checkout: none + - template: createAppRegistrations.yml + parameters: + azureSubscription: $(AZURESUBSCRIPTION) + keyVault: "$(INTERNALKEYVAULTNAME)" + resourceSuffix: $env:RESOURCESUFFIX + servicePrincipalId: $env:SERVICEPRINCIPALID + servicePrincipalKey: $env:SERVICEPRINCIPALKEY + tenantId: $env:TENANTID + +- stage: Create_App_Service_Plan_DotNet + displayName: "Create App Service Plan (DotNet)" + dependsOn: Create_Resource_Group_Windows + jobs: + - job: Deploy_App_Service_Plan_DotNet + displayName: "Deploy steps" + steps: + - task: AzureCLI@2 + displayName: "Deploy App Service Plan (DotNet)" + inputs: + azureSubscription: $(AZURESUBSCRIPTION) + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + $appServicePlanPricingTier = if ($env:APPSERVICEPLANPRICINGTIER) { "newAppServicePlanSku=$env:APPSERVICEPLANPRICINGTIER" } + az deployment group create --name "$(INTERNALAPPSERVICEPLANDOTNETNAME)" --resource-group "$(INTERNALRESOURCEGROUPNAME)" --template-file build/templates/template-service-plan-windows-resources.json --parameters $appServicePlanPricingTier newAppServicePlanName="$(INTERNALAPPSERVICEPLANDOTNETNAME)" + +- stage: Create_App_Service_Plan_JS + displayName: "Create App Service Plan (JS)" + dependsOn: Create_Resource_Group_Windows + jobs: + - job: Deploy_App_Service_Plan_JS + displayName: "Deploy steps" + steps: + - task: AzureCLI@2 + displayName: "Deploy App Service Plan (JS)" + inputs: + azureSubscription: $(AZURESUBSCRIPTION) + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + $appServicePlanPricingTier = if ($env:APPSERVICEPLANPRICINGTIER) { "newAppServicePlanSku=$env:APPSERVICEPLANPRICINGTIER" } + az deployment group create --name "$(INTERNALAPPSERVICEPLANJSNAME)" --resource-group "$(INTERNALRESOURCEGROUPNAME)" --template-file build/templates/template-service-plan-windows-resources.json --parameters $appServicePlanPricingTier newAppServicePlanName="$(INTERNALAPPSERVICEPLANJSNAME)" + +- stage: Create_App_Service_Plan_Python + displayName: "Create App Service Plan (Python)" + dependsOn: Create_Resource_Group_Linux + jobs: + - job: Deploy_App_Service_Plan_Python + displayName: "Deploy steps" + steps: + - task: AzureCLI@2 + displayName: "Deploy App Service Plan (Python)" + inputs: + azureSubscription: $(AZURESUBSCRIPTION) + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + $appServicePlanPricingTier = if ($env:APPSERVICEPLANPRICINGTIER) { "newAppServicePlanSku=$env:APPSERVICEPLANPRICINGTIER" } + az deployment group create --name "$(INTERNALAPPSERVICEPLANPYTHONNAME)" --resource-group "$(INTERNALRESOURCEGROUPNAME)-linux" --template-file build/templates/template-service-plan-linux-resources.json --parameters $appServicePlanPricingTier newAppServicePlanName="$(INTERNALAPPSERVICEPLANPYTHONNAME)" + +- stage: Create_App_Insights + displayName: "Create App Insights" + dependsOn: Create_Resource_Group_Windows + jobs: + - job: Deploy_App_Insights + displayName: "Deploy steps" + steps: + - task: AzureCLI@2 + displayName: "Deploy App Insights" + inputs: + azureSubscription: $(AZURESUBSCRIPTION) + scriptType: pscore + scriptLocation: inlineScript + inlineScript: "az deployment group create --name $(INTERNALAPPINSIGHTSNAME) --resource-group $(INTERNALRESOURCEGROUPNAME) --template-file build/templates/template-app-insights-resources.json --parameters appInsightsName=$(INTERNALAPPINSIGHTSNAME)" diff --git a/tests/functional/build/yaml/testScenarios/configureConsumers.yml b/tests/functional/build/yaml/testScenarios/configureConsumers.yml new file mode 100644 index 0000000000..0cf5eadbee --- /dev/null +++ b/tests/functional/build/yaml/testScenarios/configureConsumers.yml @@ -0,0 +1,618 @@ +parameters: +- name: appIds + displayName: Bot's App Registration Ids + type: object + default: + EchoSkillBotComposerDotNet: "" + EchoSkillBotDotNet: "" + EchoSkillBotDotNet21: "" + EchoSkillBotDotNetV3: "" + EchoSkillBotJS: "" + EchoSkillBotJSV3: "" + EchoSkillBotPython: "" + WaterfallSkillBotDotNet: "" + WaterfallSkillBotJS: "" + WaterfallSkillBotPython: "" + +- name: azureSubscription + displayName: Azure Service Connection + type: string + +- name: keyVault + displayName: KeyVault name + type: string + +- name: resourceGroup + displayName: Resource Group name + type: string + +- name: resourceSuffix + displayName: Azure resources' name suffix + type: string + +- name: scenario + displayName: Test scenario + type: object + +steps: + - task: AzureCLI@2 + displayName: "Set Consumers AppSettings" + inputs: + azureSubscription: ${{ parameters.azureSubscription }} + scriptType: pscore + scriptLocation: inlineScript + failOnStderr: true + inlineScript: | + # Global Variables + $scenario = "${{ parameters.scenario }}"; + $resourceGroup = "${{ parameters.resourceGroup }}"; + $keyVault = "${{ parameters.keyVault }}"; + $suffix = "${{ parameters.resourceSuffix }}"; + + # Helper Functions. + + $noBotsFoundMessage = "No bots were found in the configuration."; + + function AddTimeStamp { + param($text) + return "$("[{0:MM/dd/yy} {0:HH:mm:ss}]" -f (Get-Date)): $text"; + } + + function AddBotsSuffix { + param($bots, $suffix) + # Add a suffix for each bot. + + if (-not $bots) { + Write-Host $(AddTimeStamp -text $noBotsFoundMessage); + return $bots; + } + + return $bots | ForEach-Object { + $bot = $_; + $bot.resourceBotName = $bot.botName + $suffix; + return $bot; + } + } + + function AddBotsAppIdFromKeyVault { + param($bots, $keyVault) + # Load AppIds from KeyVault. + + if (-not $bots) { + Write-Host $(AddTimeStamp -text $noBotsFoundMessage); + return $bots; + } + + $AddTimeStampDef = $function:AddTimeStamp.ToString(); + + return $bots | ForEach-Object -Parallel { + $bot = $_; + $function:AddTimeStamp = $using:AddTimeStampDef + $keyVault = $using:keyVault + + if ([string]::IsNullOrEmpty($bot.appId)) { + Write-Host $(AddTimeStamp -text "$($bot.key): Unable to find the AppId in the Pipeline Variables, proceeding to search in the KeyVault '$keyVault'."); + + $entry = az keyvault secret list --vault-name $keyVault --query "[?name == 'Bffn$($bot.key)AppId']" | ConvertFrom-Json; + + if ($entry) { + $secretVault = az keyvault secret show --id $entry.id | ConvertFrom-Json; + $bot.appId = $secretVault.value; + } + else { + Write-Host $(AddTimeStamp -text "$($bot.key): Unable to find the AppId in the KeyVault '$keyVault'."); + } + } + else { + Write-Host $(AddTimeStamp -text "$($bot.key): Using AppId from the Pipeline Variable."); + } + + return $bot; + } + } + + function FilterBotsByScenario { + param($bots, $scenarios, $scenario) + # Filter bots by a specific test scenario. + + if (-not $bots) { + Write-Host $(AddTimeStamp -text $noBotsFoundMessage); + return $bots; + } + + $scenarioSelected = $scenarios | Where-Object { $_.name -eq $scenario } + + if (-not $scenarioSelected) { + Write-Host $(AddTimeStamp -text "$($scenario): Unable to find the Test Scenario."); + return @(); + } + + return $bots | Where-Object { + $bot = $_; + + $scenarioBots = $scenarioSelected.consumers + $scenarioSelected.skills; + return $scenarioBots -contains $bot.key; + } + } + + function FilterResourceGroupsByExistence { + param($groups) + # Filter created resource groups. + + $AddTimeStampDef = $function:AddTimeStamp.ToString(); + + return $groups.GetEnumerator() | ForEach-Object -Parallel { + $function:AddTimeStamp = $using:AddTimeStampDef + $group = $_; + + $exists = (az group exists -n $group.Value) -eq "true"; + if ($exists) { + Write-Host $(AddTimeStamp -text "$($group.Value): Resource Group found."); + return $group; + } + else { + Write-Host $(AddTimeStamp -text "$($group.Value): Unable to find the Resource Group."); + } + } + } + + function FilterBotsByResourceExistence { + param($groups, $bots) + # Filter bots only if their resource exists in Azure. + + if (-not $bots) { + Write-Host $(AddTimeStamp -text $noBotsFoundMessage); + return $bots; + } + + $AddTimeStampDef = $function:AddTimeStamp.ToString(); + + return $bots | ForEach-Object -Parallel { + $groups = $using:groups + $function:AddTimeStamp = $using:AddTimeStampDef + $bot = $_; + + if ($groups.Value -contains $bot.resourceGroup) { + $enabled = (az webapp show --name $bot.resourceBotName --resource-group $bot.resourceGroup 2>$null | ConvertFrom-Json).enabled; + + if ($enabled) { + Write-Host $(AddTimeStamp -text "$($bot.key): Resource '$($bot.resourceBotName)' found."); + return $bot; + } + else { + Write-Host $(AddTimeStamp -text "$($bot.key): Unable to find the resource '$($bot.resourceBotName)'."); + } + } + }; + } + + function FilterBotsWithAppId { + param($bots) + # Filter bots that have an AppId. + + if (-not $bots) { + Write-Host $(AddTimeStamp -text $noBotsFoundMessage); + return $bots; + } + + return @($bots | Where-Object { + $bot = $_; + + if ($bot.appId.Trim().Length -eq 0) { + Write-Host $(AddTimeStamp -text "$($bot.key): AppId not found in the configuration, Skiping ..."); + return $false; + } + + return $true; + }) + } + + function AddAzureAppSettings { + param($consumers, $skills) + # Add Azure AppSettings to each Consumer. + + if (-not $consumers) { + Write-Host $(AddTimeStamp -text $noBotsFoundMessage); + return $consumers; + } + + return $consumers | Sort-Object { $_.key } | ForEach-Object { + $consumer = $_; + $consumer.appSettings = @( + @{name = "SkillHostEndpoint"; value = "https://$($consumer.resourceBotName).azurewebsites.net/api/skills" }; + ); + + $orderedSkills = $skills | Sort-Object { $_.key } + + for ($index = 0; $index -lt $orderedSkills.Count; $index++) { + $skill = $orderedSkills[$index]; + + switch ($consumer.configType) { + $types.Appsettings { + $consumer.appSettings += @{name = "BotFrameworkSkills:$($index):Id"; value = "$($skill.key)" }; + $consumer.appSettings += @{name = "BotFrameworkSkills:$($index):AppId"; value = "$($skill.appId)" }; + $consumer.appSettings += @{name = "BotFrameworkSkills:$($index):SkillEndpoint"; value = "https://$($skill.resourceBotName).azurewebsites.net/api/messages" }; + $consumer.appSettings += @{name = "BotFrameworkSkills:$($index):Group"; value = "$($skill.group)" }; + } + $types.Env { + $consumer.appSettings += @{name = "skill_$($skill.key)_appId"; value = "$($skill.appId)" }; + $consumer.appSettings += @{name = "skill_$($skill.key)_endpoint"; value = "https://$($skill.resourceBotName).azurewebsites.net/api/messages" }; + $consumer.appSettings += @{name = "skill_$($skill.key)_group"; value = "$($skill.group)" }; + } + $types.Composer { + # NOTE: Composer uses different capitalization for the skill keys. + $consumer.appSettings += @{name = "skill__$($skill.keyComposer)__msAppId"; value = "$($skill.appId)" }; + $consumer.appSettings += @{name = "skill__$($skill.keyComposer)__endpointUrl"; value = "https://$($skill.resourceBotName).azurewebsites.net/api/messages" }; + } + } + } + + return $consumer; + } + } + + function ConfigureTestProjectAppSettings { + param($bots, $appSettingsPath) + # Save each bot direct line into the Test Project AppSettings file. + + if (-not $bots) { + Write-Host $(AddTimeStamp -text $noBotsFoundMessage); + return $bots; + } + + $appSettings = Get-Content -Raw $appSettingsPath | ConvertFrom-Json; + $appSettings.HostBotClientOptions = @{} + + $AddTimeStampDef = $function:AddTimeStamp.ToString(); + + $bots | ForEach-Object -Parallel { + # Gets the Bot DirectLine + $function:AddTimeStamp = $using:AddTimeStampDef + $appSettings = $using:appSettings + $bot = $_; + + Write-Host $(AddTimeStamp -text "$($bot.key): Getting the DirectLine secret."); + $tries = 3; + $directLine = ""; + + while($tries -gt 0) { + $directLine = (az bot directline show --name $bot.resourceBotName --resource-group $bot.resourceGroup --with-secrets true 2>$null | ConvertFrom-Json).properties.properties.sites.key; + if (-not [string]::IsNullOrEmpty($directLine)) { + $appSettings.HostBotClientOptions[$bot.key] = @{ + DirectLineSecret = $directLine + BotId = $bot.botName + } + break; + } + $tries--; + } + } + + if ($appSettings.HostBotClientOptions.count -ne $bots.length) { + Write-Host "##vso[task.logissue type=error]Some host bots' DirectLine secrets couldn't be retrieved from Azure." + $config = $appSettings.HostBotClientOptions | Out-String + Write-Host "##vso[task.logissue type=error]$config" + exit 1 # Force exit + } + + $appSettings | ConvertTo-Json | Set-Content $appsettingsPath; + + Write-Host $(AddTimeStamp -text "Test Project AppSettings saved:"); + $appSettings.HostBotClientOptions; + Write-Host ""; # Separator + } + + function ConfigureConsumers { + param($consumers, $skills) + # Configure Consumers with all the Skills to connect to. + + $AddTimeStampDef = $function:AddTimeStamp.ToString(); + + Write-Host $(AddTimeStamp -text "Waiting for configuration to finish ..."); + $consumers | ForEach-Object -Parallel { + $function:AddTimeStamp = $using:AddTimeStampDef + $skills = $using:skills + $types = $using:types + + $consumer = $_; + $output = @(); + + $conditions = @( + "SkillHostEndpoint" + "BotFrameworkSkills*" + "skill_*" + ) + + $output += AddTimeStamp -text "$($consumer.key): Looking for existing Azure AppSettings ..."; + + $json = (az webapp config appsettings list --name $consumer.resourceBotName --resource-group $consumer.resourceGroup) | ConvertFrom-Json + $appSettings = @($json | Where-Object { $_.name -match ($conditions -join "|") }) + + $settings = @{ + toSet = [System.Collections.ArrayList]$consumer.appSettings; + toRemove = [System.Collections.ArrayList]@(); + } + + # Lookup for Azure AppSettings that are needed to be added/updated, otherwise, skip. + foreach ($appSetting in $appSettings) { + $setting = $settings.toSet | Where-Object { $_.name -eq $appSetting.name } | Select-Object -Unique + if ($setting) { + if ($setting.value -eq $appSetting.value) { + $settings.toSet.Remove($setting); + } + } + else { + $settings.toRemove.Add($appSetting); + } + } + + if ($settings.toRemove) { + $output += AddTimeStamp -text "$($consumer.key): Removing unnecessary Azure AppSettings ..."; + + $config = $settings.toRemove | ForEach-Object { $_.name } + az webapp config appsettings delete --name $consumer.resourceBotName --resource-group $consumer.resourceGroup --setting-names $config --output none + + $output += AddTimeStamp -text "$($consumer.key): Azure AppSettings removed:"; + $output += $config | ForEach-Object { [PSCustomObject]@{ Name = $_ } } | Format-Table -AutoSize; + } + + if ($settings.toSet) { + $output += AddTimeStamp -text "$($consumer.key): Adding new Azure AppSettings ..."; + + $config = $settings.toSet | ForEach-Object { "$($_.name)=$($_.value)" } + az webapp config appsettings set --name $consumer.resourceBotName --resource-group $consumer.resourceGroup --settings $config --output none + + $output += AddTimeStamp -text "$($consumer.key): Azure AppSettings added:"; + # Format output + $output += $settings.toSet | ForEach-Object { + $setting = $_; + + if ($setting.name.ToLower().EndsWith("appid")) { + $setting.value = $setting.value.Substring(0, 3) + "***" + } + + return [PSCustomObject]@{ + Name = $setting.name + Value = $setting.value + } + } | Format-Table -AutoSize + } + + if (-not $settings.toSet -and -not $settings.toRemove) { + $output += AddTimeStamp -text "$($consumer.key): Azure AppSettings are up to date."; + } + + $output; + } + } + + # Configuration + + # Type of setting to use for the AppSettings variables. + $types = @{ + Appsettings = 0 + Env = 1 + Composer = 2 + } + + # Bots Resource Groups + $groups = @{ + DotNet = "$resourceGroup-DotNet" + JS = "$resourceGroup-JS" + Python = "$resourceGroup-Python" + } + + # Bots Settings + $consumers = @( + @{ + key = "SimpleHostBotDotNet" + botName = "bffnsimplehostbotdotnet" + resourceGroup = $groups.DotNet + configType = $types.Appsettings + } + @{ + key = "SimpleHostBotDotNet21" + botName = "bffnsimplehostbotdotnet21" + resourceGroup = $groups.DotNet + configType = $types.Appsettings + } + @{ + key = "SimpleHostBotComposerDotNet" + botName = "bffnsimplehostbotcomposerdotnet" + resourceGroup = $groups.DotNet + configType = $types.Composer + } + @{ + key = "WaterfallHostBotDotNet" + botName = "bffnwaterfallhostbotdotnet" + resourceGroup = $groups.DotNet + configType = $types.Appsettings + } + @{ + key = "SimpleHostBotJS" + botName = "bffnsimplehostbotjs" + resourceGroup = $groups.JS + configType = $types.Env + } + @{ + key = "WaterfallHostBotJS" + botName = "bffnwaterfallhostbotjs" + resourceGroup = $groups.JS + configType = $types.Env + } + @{ + key = "SimpleHostBotPython" + botName = "bffnsimplehostbotpython" + resourceGroup = $groups.Python + configType = $types.Env + } + @{ + key = "WaterfallHostBotPython" + botName = "bffnwaterfallhostbotpython" + resourceGroup = $groups.Python + configType = $types.Env + } + ) + + $skills = @( + @{ + key = "EchoSkillBotDotNet" + keyComposer = "echoSkillBotDotNet" + botName = "bffnechoskillbotdotnet" + appId = "${{ parameters.appIds.EchoSkillBotDotNet }}" + resourceGroup = $groups.DotNet + group = "Echo" + } + @{ + key = "EchoSkillBotDotNet21" + keyComposer = "echoSkillBotDotNet21" + botName = "bffnechoskillbotdotnet21" + appId = "${{ parameters.appIds.EchoSkillBotDotNet21 }}" + resourceGroup = $groups.DotNet + group = "Echo" + } + @{ + key = "EchoSkillBotDotNetV3" + keyComposer = "echoSkillBotDotNetV3" + botName = "bffnechoskillbotdotnetv3" + appId = "${{ parameters.appIds.EchoSkillBotDotNetV3 }}" + resourceGroup = $groups.DotNet + group = "Echo" + } + @{ + key = "EchoSkillBotComposerDotNet" + keyComposer = "echoSkillBotComposerDotNet" + botName = "bffnechoskillbotcomposerdotnet" + appId = "${{ parameters.appIds.EchoSkillBotComposerDotNet }}" + resourceGroup = $groups.DotNet + group = "Echo" + } + @{ + key = "WaterfallSkillBotDotNet" + keyComposer = "waterfallSkillBotDotNet" + botName = "bffnwaterfallskillbotdotnet" + appId = "${{ parameters.appIds.WaterfallSkillBotDotNet }}" + resourceGroup = $groups.DotNet + group = "Waterfall" + } + @{ + key = "EchoSkillBotJS" + keyComposer = "echoSkillBotJs" + botName = "bffnechoskillbotjs" + appId = "${{ parameters.appIds.EchoSkillBotJS }}" + resourceGroup = $groups.JS + group = "Echo" + } + @{ + key = "EchoSkillBotJSV3" + keyComposer = "echoSkillBotJsV3" + botName = "bffnechoskillbotjsv3" + appId = "${{ parameters.appIds.EchoSkillBotJSV3 }}" + resourceGroup = $groups.JS + group = "Echo" + } + @{ + key = "WaterfallSkillBotJS" + keyComposer = "waterfallSkillBotJS" + botName = "bffnwaterfallskillbotjs" + appId = "${{ parameters.appIds.WaterfallSkillBotJS }}" + resourceGroup = $groups.JS + group = "Waterfall" + } + @{ + key = "EchoSkillBotPython" + keyComposer = "echoSkillBotPython" + botName = "bffnechoskillbotpython" + appId = "${{ parameters.appIds.EchoSkillBotPython }}" + resourceGroup = $groups.Python + group = "Echo" + } + @{ + key = "WaterfallSkillBotPython" + keyComposer = "waterfallSkillBotPython" + botName = "bffnwaterfallskillbotpython" + appId = "${{ parameters.appIds.WaterfallSkillBotPython }}" + resourceGroup = $groups.Python + group = "Waterfall" + } + ) + + # Bots Test Scenarios + $scenarios = @( + @{ + name = "SingleTurn"; + consumers = @( + "SimpleHostBotComposerDotNet", + "SimpleHostBotDotNet", + "SimpleHostBotDotNet21", + "SimpleHostBotJS", + "SimpleHostBotPython" + ); + skills = @( + "EchoSkillBotComposerDotNet", + "EchoSkillBotDotNet", + "EchoSkillBotDotNet21", + "EchoSkillBotDotNetV3", + "EchoSkillBotJS", + "EchoSkillBotJSV3", + "EchoSkillBotPython" + ); + } + @{ + name = "Waterfall"; + consumers = @( + "WaterfallHostBotDotNet", + "WaterfallHostBotJS", + "WaterfallHostBotPython" + ); + skills = @( + "WaterfallSkillBotDotNet", + "WaterfallSkillBotJS", + "WaterfallSkillBotPython" + ); + } + ) + + # Pre-configure and filter bots. + Write-Host $(AddTimeStamp -text "Filtering bots by '$scenario' scenario ..."); + $consumersToConfigure = FilterBotsByScenario -bots $consumers -scenarios $scenarios -scenario $scenario; + $skillsToConfigure = FilterBotsByScenario -bots $skills -scenarios $scenarios -scenario $scenario; + + Write-Host $(AddTimeStamp -text "Loading the Skills AppIds from the KeyVault '$keyVault' when no Pipeline Variable is provided."); + $skillsToConfigure = AddBotsAppIdFromKeyVault -bots $skillsToConfigure -keyVault $keyVault + + Write-Host $(AddTimeStamp -text "Filtering bots that have an AppId assigned ..."); + $skillsToConfigure = FilterBotsWithAppId -bots $skillsToConfigure + + Write-Host $(AddTimeStamp -text "Adding the suffix '$suffix' to the bot resources ..."); + $consumersToConfigure = AddBotsSuffix -bots $consumersToConfigure -suffix $suffix + $skillsToConfigure = AddBotsSuffix -bots $skillsToConfigure -suffix $suffix + + Write-Host $(AddTimeStamp -text "Filtering existing Resource Groups ..."); + $resourceGroups = FilterResourceGroupsByExistence -groups $groups + + Write-Host $(AddTimeStamp -text "Filtering deployed bots in Azure ..."); + $consumersToConfigure = FilterBotsByResourceExistence -groups $resourceGroups -bots $consumersToConfigure + $skillsToConfigure = FilterBotsByResourceExistence -groups $resourceGroups -bots $skillsToConfigure + + Write-Host $(AddTimeStamp -text "Adding Azure AppSettings to Consumers' configuration."); + $consumersToConfigure = AddAzureAppSettings -consumers $consumersToConfigure -skills $skillsToConfigure + + if (-not $consumersToConfigure) { + Write-Error $(AddTimeStamp -text "No Consumers were found to configure. Cancelling the configuration ..."); + return; + } + + if (-not $skillsToConfigure) { + Write-Error $(AddTimeStamp -text "No Skills were found to configure each Consumer. Cancelling the configuration ..."); + return; + } + + # Configure steps. + Write-Host $(AddTimeStamp -text "Configuring the Test Project."); + ConfigureTestProjectAppSettings -bots $consumersToConfigure -appSettingsPath "tests/SkillFunctionalTests/appsettings.json"; + + Write-Host $(AddTimeStamp -text "Configuring the Consumer bots App Settings in Azure."); + ConfigureConsumers -consumers $consumersToConfigure -skills $skillsToConfigure + + Write-Host $(AddTimeStamp -text "Process Finished!"); diff --git a/tests/functional/build/yaml/testScenarios/runScenario.yml b/tests/functional/build/yaml/testScenarios/runScenario.yml new file mode 100644 index 0000000000..bfa72bd232 --- /dev/null +++ b/tests/functional/build/yaml/testScenarios/runScenario.yml @@ -0,0 +1,83 @@ +parameters: +- name: appIds + displayName: Bot's App Registration Ids + type: object + default: + EchoSkillBotComposerDotNet: "" + EchoSkillBotDotNet: "" + EchoSkillBotDotNet21: "" + EchoSkillBotDotNetV3: "" + EchoSkillBotJS: "" + EchoSkillBotJSV3: "" + EchoSkillBotPython: "" + WaterfallSkillBotDotNet: "" + WaterfallSkillBotJS: "" + WaterfallSkillBotPython: "" + +- name: azureSubscription + displayName: Azure Service Connection + type: string + +- name: buildConfiguration + displayName: Build Configuration + type: string + +- name: buildIdSuffix + displayName: Build Id Suffix + type: string + +- name: keyVault + displayName: KeyVault name + type: string + +- name: resourceGroup + displayName: Resource Group name + type: string + +- name: resourceSuffix + displayName: Azure resources' name suffix + type: string + +- name: scenarios + displayName: Test Scenarios + type: object + +stages: + - ${{ each scenario in parameters.scenarios }}: + - stage: "${{ scenario.name }}" + displayName: "Test ${{ scenario.name }} Scenario" + dependsOn: "${{ scenario.dependsOn }}" + jobs: + - job: Test + variables: + BuildIdSuffix: "${{ parameters.buildIdSuffix }}" + steps: + - template: configureConsumers.yml + parameters: + appIds: "${{ parameters.appIds }}" + azureSubscription: "${{ parameters.azureSubscription }}" + keyVault: "${{ parameters.keyVault }}" + resourceGroup: "${{ parameters.resourceGroup }}" + resourceSuffix: "${{ parameters.resourceSuffix }}$(BUILDIDSUFFIX)" + scenario: "${{ scenario.name }}" + + - task: UseDotNet@2 + displayName: "Use .Net Core sdk 3.1.x" + inputs: + version: 3.1.x + + - task: DotNetCoreCLI@2 + displayName: "Build" + inputs: + command: build + publishWebProjects: false + projects: "Tests/SkillFunctionalTests/SkillFunctionalTests.csproj" + arguments: "-v n --configuration ${{ parameters.buildConfiguration }}" + + - task: DotNetCoreCLI@2 + displayName: "DotNet Test" + inputs: + command: test + testRunTitle: "SkillFunctionalTests-${{ scenario.name }}-$(BUILD.BUILDNUMBER)" + projects: "Tests/SkillFunctionalTests/SkillFunctionalTests.csproj" + arguments: "-v n --configuration ${{ parameters.buildConfiguration }} --no-build --no-restore --logger trx;LogFileName=SkillFunctionalTests-${{ scenario.name }}-$(BUILD.BUILDNUMBER).trx --filter TestCategory!=IgnoreInAutomatedBuild&TestCategory=${{ join('|TestCategory=', scenario.testCategories) }}" diff --git a/tests/functional/build/yaml/testScenarios/runTestScenarios.yml b/tests/functional/build/yaml/testScenarios/runTestScenarios.yml new file mode 100644 index 0000000000..ebb6a14b2d --- /dev/null +++ b/tests/functional/build/yaml/testScenarios/runTestScenarios.yml @@ -0,0 +1,102 @@ +# +# Executes the test scenarios. +# + +# "name" here defines the build number format. Build number is accessed via $(Build.BuildNumber) +name: $(BUILD.BUILDID) +trigger: none +pr: none + +variables: + BuildConfiguration: "Debug" + + ## Azure Resources (Define these variables in Azure) + # AzureSubscription: Service Connection Name to Manage Azure resources. + # ResourceGroup: (optional) Name of the Resource Group where the bots are deployed. + # ResourceSuffix: (optional) Suffix to add to the resources' name to avoid collitions. + + ## Bots Configuration (Define these variables in Azure) + # BffnEchoSkillBotComposerDotNetAppId: (optional) App Id for BffnEchoSkillBotComposerDotNet bot. + # BffnEchoSkillBotDotNet21AppId: (optional) App Id for BffnEchoSkillBotDotNet21 bot. + # BffnEchoSkillBotDotNetAppId: (optional) App Id for BffnEchoSkillBotDotNet bot. + # BffnEchoSkillBotDotNetV3AppId: (optional) App Id for BffnEchoSkillBotDotNetV3 bot. + # BffnEchoSkillBotJSAppId: (optional) App Id for BffnEchoSkillBotJS bot. + # BffnEchoSkillBotJSV3AppId: (optional) App Id for BffnEchoSkillBotJSV3 bot. + # BffnEchoSkillBotPythonAppId: (optional) App Id for BffnEchoSkillBotPython bot. + # BffnWaterfallSkillBotDotNetAppId: (optional) App Id for BffnWaterfallSkillBotDotNet bot. + # BffnWaterfallSkillBotJSAppId: (optional) App Id for BffnWaterfallSkillBotJS bot. + # BffnWaterfallSkillBotPythonAppId: (optional) App Id for BffnWaterfallSkillBotPython bot. + # DeployBotResourcesGuid: (optional) Deploy Bot Resources pipeline GUID. + + ## Internal variables + InternalKeyVaultName: "bffnbotkeyvault$(INTERNALRESOURCESUFFIX)" + InternalResourceGroupName: $[coalesce(variables['RESOURCEGROUP'], 'bffnbots')] + InternalResourceSuffix: $[coalesce(variables['RESOURCESUFFIX'], '')] + +pool: + vmImage: "windows-2019" + +stages: + - stage: "Download_Variables" + displayName: "Download Variables" + jobs: + - job: "Download_Variables" + displayName: "Download Variables" + steps: + - powershell: | + $pipelineGuid = if ([string]::IsNullOrEmpty("$env:DEPLOYBOTRESOURCESGUID")) { "02 - Deploy Bot Resources" } else { "$(DEPLOYBOTRESOURCESGUID)" } + Write-Host "Deploy Bot Resources Pipeline GUID: " $pipelineGuid + Write-Host "##vso[task.setvariable variable=PipelineGuid]$pipelineGuid" + displayName: "Set Deploy Bot Resources GUID" + + - task: DownloadPipelineArtifact@2 + displayName: "Download Variables artifact" + inputs: + source: "specific" + project: "$(SYSTEM.TEAMPROJECT)" + pipeline: "$(PIPELINEGUID)" + allowPartiallySucceededBuilds: true + allowFailedBuilds: true + artifact: "Variables" + path: "$(SYSTEM.DEFAULTWORKINGDIRECTORY)/Variables/" + + - powershell: | + $deploymentBuildSuffix = (Get-Content -Path "$(SYSTEM.DEFAULTWORKINGDIRECTORY)/Variables/variables.json" | ConvertFrom-Json).deploymentBuildSuffix + Write-Host "Deployment Build Suffix: " $deploymentBuildSuffix + Write-Host "##vso[task.setvariable variable=DeploymentBuildSuffix;isOutput=true]-$deploymentBuildSuffix" + displayName: "Set variables" + name: "Set_Variables" + + - template: runScenario.yml + parameters: + appIds: + EchoSkillBotComposerDotNet: "$(BFFNECHOSKILLBOTCOMPOSERDOTNETAPPID)" + EchoSkillBotDotNet: "$(BFFNECHOSKILLBOTDOTNETAPPID)" + EchoSkillBotDotNet21: "$(BFFNECHOSKILLBOTDOTNET21APPID)" + EchoSkillBotDotNetV3: "$(BFFNECHOSKILLBOTDOTNETV3APPID)" + EchoSkillBotJS: "$(BFFNECHOSKILLBOTJSAPPID)" + EchoSkillBotJSV3: "$(BFFNECHOSKILLBOTJSV3APPID)" + EchoSkillBotPython: "$(BFFNECHOSKILLBOTPYTHONAPPID)" + WaterfallSkillBotDotNet: "$(BFFNWATERFALLSKILLBOTDOTNETAPPID)" + WaterfallSkillBotJS: "$(BFFNWATERFALLSKILLBOTJSAPPID)" + WaterfallSkillBotPython: "$(BFFNWATERFALLSKILLBOTPYTHONAPPID)" + azureSubscription: "$(AZURESUBSCRIPTION)" + buildConfiguration: "$(BUILDCONFIGURATION)" + buildIdSuffix: $[stageDependencies.Download_Variables.Download_Variables.outputs['Set_Variables.DeploymentBuildSuffix']] + keyVault: "$(INTERNALKEYVAULTNAME)" + resourceGroup: "$(INTERNALRESOURCEGROUPNAME)" + resourceSuffix: "$(INTERNALRESOURCESUFFIX)" + scenarios: + - name: Waterfall + dependsOn: [Download_Variables] + testCategories: + - Attachments + - CardActions + - ProactiveMessages + - FileUpload + - SignIn + + - name: SingleTurn + dependsOn: [Download_Variables] + testCategories: + - SingleTurn diff --git a/tests/functional/package.json b/tests/functional/package.json new file mode 100644 index 0000000000..e42329bcdd --- /dev/null +++ b/tests/functional/package.json @@ -0,0 +1,15 @@ +{ + "name": "botframework-functional-tests", + "private": true, + "workspaces": { + "packages": [ + "Bots/JavaScript/*/*/*" + ] + }, + "devDependencies": { + "semistandard": "^16.0.0" + }, + "scripts": { + "lint": "semistandard" + } +} diff --git a/tests/functional/specs/TransciptTestRunner.md b/tests/functional/specs/TransciptTestRunner.md new file mode 100644 index 0000000000..595652c2b9 --- /dev/null +++ b/tests/functional/specs/TransciptTestRunner.md @@ -0,0 +1,59 @@ +# Transcript based test runner (DRAFT) + +## Summary + +Transcript based functional tests aim to allow us to test complex conversation flows against a bot and related skills end to end without having to worry about how the bot is implemented. + +## Contents + +- [Requirements](#requirements) +- [Design notes](#design-notes) +- [Implementation notes](#implementation-notes) +- [Other considerations and TODOs](#other-considerations-and-todos) + +## Requirements + +1. I can run functional tests from visual studio +2. I can run functional tests from the command line +3. I can run functional tests from a CI/CD pipeline in Azure DevOps +4. I can take a transcript created using the Emulator and run it against a deployed bot +5. I can emulate a channel from my tests (Emulator, Teams, WebChat) +6. I get clear messages describing where my test failed so I can debug it +7. I can debug a test step by step from the IDE +8. I should be able to use expressions in my expected bot responses to be able to deal with variable data +9. I should be able to run my tests against a bot running in localhost +10. We should write unit tests to make sure the runner classes and be easy to maintain + +## Design notes + +Here is a high level class diagram to get started + +![Class Diagram](media/TestRunnerClassDiagram2.png) + +- `TestRunner`: responsible for executing the `TestScript` using the desired `TestClientBase` +- `TranscriptConverter`: responsible for reading a transcript, converting it into a sequence of steps and returning the steps to be executed. Input: an emulator transcript file. Output: a "Test Script" file. +- `TestClientFactory`: creates an instance of a TestClient implementation. +- `TestClientBase`(abstract): base class for implementing channel specific test clients +- `_XYZ_Client`: specialized client that knows how to interact with a specific channel (it should be capable of generating channel OAuthTokens, handle responses coming from that specific channel, etc.) +- `ClientType` (enum): types are: DirectLine, Emulator, Teams + +## Implementation notes + +1. The first version of the runner will be in C# targeting DotNet Core 3.1 +2. We will rely on XUnit to write the tests but let's try to keep it out of the base classes (if possible) +3. The test runner should be able to load its settings from configuration using IConfiguration +4. The code should follow the SyleCop and FxCop ruleset used by the dotnet SDK +5. (Not a P0), we may be able to refactor some of the code in the test runner and make it part of the SDK testing package in the future + +## Other considerations and TODOs + +- Can we use Adaptive expressions to create asserts? +- Do we create a tool to convert a transcript into a test script that removes some of the noise in the transcript and makes test easier to read and write? +- Do we implement _XYZ_Options classes to configure the runner, the test script and the test client? +- Possible feature - chaining test scripts, consider we have a welcome part that we do over and over again and want to combine with the book a flight or get weather. The welcome portion and assertions can be written once and then we can append the other scenarios. + +## Test Script file + +It is generated by the TranscriptConverter from an Emulator transcript. The test script file contains the list of Activities found in its corresponding Emulator transcript with the following properties removed: +* All IDs +* All timestamps \ No newline at end of file diff --git a/tests/functional/specs/media/TestRunnerClassDiagram.png b/tests/functional/specs/media/TestRunnerClassDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..1f1f4a5d72bcfab3c7e38660ef83334626585199 GIT binary patch literal 30562 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

    7OcHYCS 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 HWYWI?&3*-= literal 0 HcmV?d00001 diff --git a/tests/functional/specs/media/TestRunnerClassDiagram2.png b/tests/functional/specs/media/TestRunnerClassDiagram2.png new file mode 100644 index 0000000000000000000000000000000000000000..627aaf21bc059c38d2aab300aebfc00f5ef8e5b4 GIT binary patch literal 35869 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 literal 0 HcmV?d00001 diff --git a/tests/functional/specs/media/src/TestRunnerDiagrams.vsdx b/tests/functional/specs/media/src/TestRunnerDiagrams.vsdx new file mode 100644 index 0000000000000000000000000000000000000000..9755494c792630eb1bd709f57379c609fe2ce5d0 GIT binary patch literal 35765 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 KybJorv;PG$dk=O1 literal 0 HcmV?d00001 diff --git a/tests/functional/yarn.lock b/tests/functional/yarn.lock new file mode 100644 index 0000000000..50dd5fb796 --- /dev/null +++ b/tests/functional/yarn.lock @@ -0,0 +1,2032 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 4 + cacheKey: 7 + +"@babel/code-frame@npm:^7.0.0": + version: 7.12.13 + resolution: "@babel/code-frame@npm:7.12.13" + dependencies: + "@babel/highlight": ^7.12.13 + checksum: 471532bb7cb4a300bd1a3201e75e7c0c83ebfb4e0e6610fdb53270521505d7efe0961258de61e7b1970ef3092a97ed675248ee1a44597912a1f61f903d85ef41 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.12.11": + version: 7.12.11 + resolution: "@babel/helper-validator-identifier@npm:7.12.11" + checksum: 18de432203264b501db2690b53370a4289dc56084f5a2c66de624b159ee28b8abaeb402b2b7584296d9261645d91ddb6bfd21125d3ffd9bf02e9262e77baf3d2 + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.12.13": + version: 7.13.10 + resolution: "@babel/highlight@npm:7.13.10" + dependencies: + "@babel/helper-validator-identifier": ^7.12.11 + chalk: ^2.0.0 + js-tokens: ^4.0.0 + checksum: 8f23d3b728422713bfab45bee1e7584f2a3d2e20c9c4d6153312b898c82e776bdc5b1b2afaf9433fddb21d70417f5b477c0bb1a48613324fd761117e19a5702b + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^0.2.1": + version: 0.2.2 + resolution: "@eslint/eslintrc@npm:0.2.2" + dependencies: + ajv: ^6.12.4 + debug: ^4.1.1 + espree: ^7.3.0 + globals: ^12.1.0 + ignore: ^4.0.6 + import-fresh: ^3.2.1 + js-yaml: ^3.13.1 + lodash: ^4.17.19 + minimatch: ^3.0.4 + strip-json-comments: ^3.1.1 + checksum: 049c98898934100aa5ad4912242ecbec136454787c00776a236e5321c73176dbc813917445a3d50d230a5a84531a99ec0e2885dd7a6838be68b46b6720fa1459 + languageName: node + linkType: hard + +"@types/json5@npm:^0.0.29": + version: 0.0.29 + resolution: "@types/json5@npm:0.0.29" + checksum: 66e9ac0143ec521522c7bb670301e9836ee886207eeed1aab6d4854a1b19b404ab3a54cd8d449f9b1f13acc357f540be96f8ac2d1e86e301eab52ae0f9a4066f + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.1": + version: 5.3.1 + resolution: "acorn-jsx@npm:5.3.1" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 5925bc5d79a2821a8f7250b6de2b02bb86c0470dcb78cf68a603855291c5e50602b9eaf294aba2efbf3ee7063c80a9074b520b2330cc1aef80b849bfc7a041c0 + languageName: node + linkType: hard + +"acorn@npm:^7.4.0": + version: 7.4.1 + resolution: "acorn@npm:7.4.1" + bin: + acorn: bin/acorn + checksum: 2bde98c28c1be9a08e41e581179b776b43396c9486ce52b2b9848d73c53df38c516b7edba4bacdc84cabc9d7a3299f3b46ef240ae261c38dbf8ddd89f635bd32 + languageName: node + linkType: hard + +"ajv@npm:^6.10.0, ajv@npm:^6.10.2, ajv@npm:^6.12.4": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: ^3.1.1 + fast-json-stable-stringify: ^2.0.0 + json-schema-traverse: ^0.4.1 + uri-js: ^4.2.2 + checksum: 19a8f3b0a06001eb68e6268f4f9f04424b32baadd5df6ba8292cd473e22e5f4019ed9ab17c3e3510394178ed8bef9b42ad0bdb5c675d65f042421a774780ce1a + languageName: node + linkType: hard + +"ansi-colors@npm:^4.1.1": + version: 4.1.1 + resolution: "ansi-colors@npm:4.1.1" + checksum: 50d8dfbce25602caea1b170ecf4c71c4c9c58d2d1e3186fb5712848c0610d05fe60b8bb6a9eaebd9b54f1db3baf6f603e04214cce597cc7799bc9f47fd9a797a + languageName: node + linkType: hard + +"ansi-regex@npm:^4.1.0": + version: 4.1.0 + resolution: "ansi-regex@npm:4.1.0" + checksum: 53b6fe447cf92ee59739379de637af6f86b3b8a9537fbfe36a66f946f1d9d34afc3efe664ac31bcc7c3af042d43eabcfcfd3f790316d474bbc7b19a4b1d132dd + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.0": + version: 5.0.0 + resolution: "ansi-regex@npm:5.0.0" + checksum: cbd9b5c9dbbb4a949c2a6e93f1c6cc19f0683d8a4724d08d2158627be6d373f0f3ba1f4ada01dce7ee141f2ba2628fbbd29932c7d49926e3b630c7f329f3178b + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.0, ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: ^1.9.0 + checksum: 456e1c23d9277512a47718da75e7fbb0a5ee215ef893c2f76d6b3efe8fceabc861121b80b0362146f5f995d21a1633f05a19bbf6283ae66ac11dc3b9c0bed779 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: ^2.0.1 + checksum: ea02c0179f3dd089a161f5fdd7ccd89dd84f31d82b68869f1134bf5c5b9e1313dadd2ff9edb02b44f46243f285ef5b785f6cb61c84a293694221417c42934407 + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: ~1.0.2 + checksum: 435adaef5f6671c3ef1478a22be6fd54bdb99fdbbce8f5561b9cbbb05068ccce87b7df3b9f3322ff52a6ebb9cab2b427cbedac47a07611690a9beaa5184093e2 + languageName: node + linkType: hard + +"array-includes@npm:^3.1.1, array-includes@npm:^3.1.2": + version: 3.1.3 + resolution: "array-includes@npm:3.1.3" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + es-abstract: ^1.18.0-next.2 + get-intrinsic: ^1.1.1 + is-string: ^1.0.5 + checksum: 0610b361162071ef8749827f3a6e171da03ac14a518d4d45a513b6c22a7c5017c55dcbea4d34d699ef006f1f148aa52e6d437e0101c93996da736d0055add173 + languageName: node + linkType: hard + +"array.prototype.flat@npm:^1.2.3": + version: 1.2.4 + resolution: "array.prototype.flat@npm:1.2.4" + dependencies: + call-bind: ^1.0.0 + define-properties: ^1.1.3 + es-abstract: ^1.18.0-next.1 + checksum: b4936e68f8bb4ed8d6bf12eff4e19e93f263ee6ff66b0e394be275c0b168e2a4889740f105799ec1d19631e93020fba528534ca34dd0538e24d2a90043ebc6b0 + languageName: node + linkType: hard + +"array.prototype.flatmap@npm:^1.2.3": + version: 1.2.4 + resolution: "array.prototype.flatmap@npm:1.2.4" + dependencies: + call-bind: ^1.0.0 + define-properties: ^1.1.3 + es-abstract: ^1.18.0-next.1 + function-bind: ^1.1.1 + checksum: 2718f73b91e5f377fb230765c1ab1a67063d11f7d14b1edfa6283ba4129f710b2d2416003dc8c9fc25595d921a76430ed8a379f66e58d237e5f1f300b6465ece + languageName: node + linkType: hard + +"astral-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "astral-regex@npm:1.0.0" + checksum: 08e37f599604eb3894af4ec5f9845caec7a45d10c1b57b04c4fc21cc669091803f8386efc52957ec3c7ae8c3af60b933018926aab156e5696a7aab393d6e0874 + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.0 + resolution: "balanced-match@npm:1.0.0" + checksum: f515a605fe1b59f476f7477c5e1d53ad55b4f42982fca1d57b6701906f4ad1f1ac90fd6587d92cc1af2edb43eecf979214dd847ee410a6de9db4ebf0dd128d62 + languageName: node + linkType: hard + +"botframework-functional-tests@workspace:.": + version: 0.0.0-use.local + resolution: "botframework-functional-tests@workspace:." + dependencies: + semistandard: ^16.0.0 + languageName: unknown + linkType: soft + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: ^1.0.0 + concat-map: 0.0.1 + checksum: 4c878e25e4858baf801945dfd63eb68feab2e502cf1122f25f3915c0e3bf397af3a93ff6bef0798db41c0d81ef28c08e55daac38058710f749a3b96eee6b8f40 + languageName: node + linkType: hard + +"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind@npm:1.0.2" + dependencies: + function-bind: ^1.1.1 + get-intrinsic: ^1.0.2 + checksum: 18cc6107a1f028247f2b505dae73ad1c63b737addfcd43ff75159f072c5c827300c1fb66f26ee0ec70fc2fdd005ce68d65c05a2a34b74bab08c3b1921954ada9 + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: f726bf10d752901174cae348e69c2e58206404d5eebcea485b3fedbcf7fcffdb397e10919fdf6ee2c8adb4be52a64eea2365d52583611939bfecd109260451c9 + languageName: node + linkType: hard + +"chalk@npm:^2.0.0": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: ^3.2.1 + escape-string-regexp: ^1.0.5 + supports-color: ^5.3.0 + checksum: 22c7b7b5bc761c882bb6516454a1a671923f1c53ff972860065aa0b28a195f230163c1d46ee88bcc7a03e5539177d896457d8bc727de7f244c6e87032743038e + languageName: node + linkType: hard + +"chalk@npm:^4.0.0": + version: 4.1.0 + resolution: "chalk@npm:4.1.0" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: f860285b419f9e925c2db0f45ffa88aa8794c14b80cc5d01ff30930bcfc384996606362706f0829cf557f6d36152a5fb2d227ad63c4bc90e2ec9e9dbed4a3c07 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: 1.1.3 + checksum: 5f244daa3d1fe1f216d48878c550465067d15268688308554e613b7640a068f96588096d51f0b98b68f15d6ff6bb8ad24e172582ac8c0ad43fa4d3da60fd1b79 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: ~1.1.4 + checksum: 3d5d8a011a43012ca11b6d739049ecf2055d95582fd16ec44bf1e685eb0baa5cc652002be8a1dc92b429c8d87418287d0528266a7595cb1ad8a7f4f1d3049df2 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: d8b91bb90aefc05b6ff568cf8889566dcc6269824df6f3c9b8ca842b18d7f4d089c07dc166808d33f22092d4a79167aa56a96a5ff0d21efab548bf44614db43b + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 3e1c9a4dee12eada307436f61614dd11fe300469db2b83f80c8b7a7cd8a1015f0f18dd13403f018927b249003777ff60baba4a03c65f12e6bddc0dfd9642021f + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 554e28d9ee5aa6e061795473ee092cb3d3a2cbdb76c35416e0bb6e03f136d7d07676da387b2ed0ec4106cedbb6534080d9abc48ecc4a92b76406cf2d0c3c0c4b + languageName: node + linkType: hard + +"contains-path@npm:^0.1.0": + version: 0.1.0 + resolution: "contains-path@npm:0.1.0" + checksum: 59920a59a0c7d1244235d76b8cfd2b2e7a8dcc463fa578ef9d4d5a5a73eeb14d75dada6b21188e0b35f2474ae9efd10c3698372e674db9c6a904b281998b97d6 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.2": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 51f10036f5f1de781be98f4738d58b50c6d44f4f471069b8ab075b21605893ba1548654880f7310a29a732d6fc7cd481da6026169b9f0831cab0148a62fb397a + languageName: node + linkType: hard + +"debug@npm:^2.6.9": + version: 2.6.9 + resolution: "debug@npm:2.6.9" + dependencies: + ms: 2.0.0 + checksum: 559f44f98cf25e2ee489022aec173afbff746564cb108c4493becb95bc3c017a67bdaa25a0ff64801fd32c35051d00af0e56cc7f762ae2c3bc089496e5a1c31b + languageName: node + linkType: hard + +"debug@npm:^4.0.1, debug@npm:^4.1.1": + version: 4.3.1 + resolution: "debug@npm:4.3.1" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 0d41ba5177510e8b388dfd7df143ab0f9312e4abdaba312595461511dac88e9ef8101939d33b4e6d37e10341af6a5301082e4d7d6f3deb4d57bc05fc7d296fad + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3": + version: 0.1.3 + resolution: "deep-is@npm:0.1.3" + checksum: 3de58f86af4dec86c8be531a5abaf2e6d8ea98fa2f1d81a3a778d0d8df920ee282043a6ef05bfb4eb699c8551df9ac1b808d4dc71d54cc40ab1efa5ce8792943 + languageName: node + linkType: hard + +"define-properties@npm:^1.1.3": + version: 1.1.3 + resolution: "define-properties@npm:1.1.3" + dependencies: + object-keys: ^1.0.12 + checksum: b69c48c1b1dacb61f0b1cea367707c3bb214e3c47818aff18e6f20a7f88cbfa33d4cbdfd9ff79e56faba95ddca3d78ff10fbf2f02ecfad6f3e13b256e76b1212 + languageName: node + linkType: hard + +"doctrine@npm:1.5.0": + version: 1.5.0 + resolution: "doctrine@npm:1.5.0" + dependencies: + esutils: ^2.0.2 + isarray: ^1.0.0 + checksum: aaffea02f963b8b07a78b1e27d7cef29be65d31be2c6681cb2872c2fb3781e14615bd05d4dff6036f75dcf3f191216058409fbfec805d3a7277a8647cd5bdee1 + languageName: node + linkType: hard + +"doctrine@npm:^2.1.0": + version: 2.1.0 + resolution: "doctrine@npm:2.1.0" + dependencies: + esutils: ^2.0.2 + checksum: 4aa55e46757cc11bff8efa67cdb679dd89e87c954ea9d88fad5a9198cfe0a73748085503d29bebcb143487d720a759a6bbe81d6848c94da46a55c7a366b9834e + languageName: node + linkType: hard + +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: ^2.0.2 + checksum: 2eae469bd2889ceee9892083a67340b3622568fe5290edce620e5d5ddab23d644b2a780e9a7c68ad9c8a62716a70c5e484402ac93a398fa78b54b7505592aa7f + languageName: node + linkType: hard + +"emoji-regex@npm:^7.0.1": + version: 7.0.3 + resolution: "emoji-regex@npm:7.0.3" + checksum: e3a504cf5242061d9b3c78a88ce787d6beee37a5d21287c6ccdddf1fe665d5ef3eddfdda663d0baf683df8e7d354210eeb1458a7d9afdf0d7a28d48cbb9975e1 + languageName: node + linkType: hard + +"enquirer@npm:^2.3.5": + version: 2.3.6 + resolution: "enquirer@npm:2.3.6" + dependencies: + ansi-colors: ^4.1.1 + checksum: e249bb97bf7d5a91d51081547ea5aa1d849604e5de74feff2c48f7174fc6c9dfcfeea42ef5536e9a3be58964a248c322d6897269ae7bba3e1b6d24f152d9d685 + languageName: node + linkType: hard + +"error-ex@npm:^1.2.0, error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: ^0.2.1 + checksum: 6c6c9187429ae867d145bc64c682c7c137b1f8373a406dc3b605c0d92f15b85bfcea02b461dc55ae11b10d013377e1eaf3d469d2861b2f94703c743620a9c08c + languageName: node + linkType: hard + +"es-abstract@npm:^1.18.0-next.1, es-abstract@npm:^1.18.0-next.2": + version: 1.18.0 + resolution: "es-abstract@npm:1.18.0" + dependencies: + call-bind: ^1.0.2 + es-to-primitive: ^1.2.1 + function-bind: ^1.1.1 + get-intrinsic: ^1.1.1 + has: ^1.0.3 + has-symbols: ^1.0.2 + is-callable: ^1.2.3 + is-negative-zero: ^2.0.1 + is-regex: ^1.1.2 + is-string: ^1.0.5 + object-inspect: ^1.9.0 + object-keys: ^1.1.1 + object.assign: ^4.1.2 + string.prototype.trimend: ^1.0.4 + string.prototype.trimstart: ^1.0.4 + unbox-primitive: ^1.0.0 + checksum: 019fa7c51e10532cd07ca3aa9b76e4c6ad6f421e15064205d144da08da54f8fc057edc262f6f95775e0b249ecbb753b497050dd75ab69a3c1c89cb9b734e42ca + languageName: node + linkType: hard + +"es-to-primitive@npm:^1.2.1": + version: 1.2.1 + resolution: "es-to-primitive@npm:1.2.1" + dependencies: + is-callable: ^1.1.4 + is-date-object: ^1.0.1 + is-symbol: ^1.0.2 + checksum: d20b7be268b84662469972ec7265a57d4d6a65b9bf2b73f040d75e14f9f6dbe266a1a88579162e11349f9cb70eaa17640efb515c90dab19745a904b680b14be3 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: f9484b8b4c8827d816e0fd905c25ed4b561376a9c220e1430403ea84619bf680c76a883a48cff8b8e091daf55d6a497e37479f9787b9f15f3c421b6054289744 + languageName: node + linkType: hard + +"eslint-config-semistandard@npm:15.0.1": + version: 15.0.1 + resolution: "eslint-config-semistandard@npm:15.0.1" + peerDependencies: + eslint: ">=6.0.1" + eslint-config-standard: ">=14.1.0" + eslint-plugin-import: ">=2.18.0" + eslint-plugin-node: ">=9.1.0" + eslint-plugin-promise: ">=4.2.1" + eslint-plugin-standard: ">=4.0.0" + checksum: 2550dfd3f9f4151f52cbbc072dc835d0fbc7582e83715f47f743d31bceabcaffd616dbb8facbcbe804181ea3c387511a4ad608efe109508867e05404a5fcd3c7 + languageName: node + linkType: hard + +"eslint-config-standard-jsx@npm:10.0.0": + version: 10.0.0 + resolution: "eslint-config-standard-jsx@npm:10.0.0" + peerDependencies: + eslint: ^7.12.1 + eslint-plugin-react: ^7.21.5 + checksum: 1808aa6f198b1fcebfc9590363e6c9cc6b00fb1c40a2f9eb66fe50ff4ab5fbc6b5f6ca070f7ea8e3afc15331a05c8e38b5f3fdb1c70949839eacd3da9a2237b8 + languageName: node + linkType: hard + +"eslint-config-standard@npm:16.0.0": + version: 16.0.0 + resolution: "eslint-config-standard@npm:16.0.0" + peerDependencies: + eslint: ^7.12.1 + eslint-plugin-import: ^2.22.1 + eslint-plugin-node: ^11.1.0 + eslint-plugin-promise: ^4.2.1 + checksum: 385e702d59929f4eeae471d47a51da138c25bb0a263adb935623ac0b9f25f54869e5eb2ea0a6f9658c4c52caeb6cfa282ac9335ff6eb39b8ff8e998997af73e8 + languageName: node + linkType: hard + +"eslint-import-resolver-node@npm:^0.3.4": + version: 0.3.4 + resolution: "eslint-import-resolver-node@npm:0.3.4" + dependencies: + debug: ^2.6.9 + resolve: ^1.13.1 + checksum: 825e34e662c988ece8229e6956a95f12d2fa19265b429e3e3db14e58bfe72e270c999cda0cfc690793ed6e6a3e49ffa8df0e0a8842d668a1f0f7de5ae1aa36f9 + languageName: node + linkType: hard + +"eslint-module-utils@npm:^2.6.0": + version: 2.6.0 + resolution: "eslint-module-utils@npm:2.6.0" + dependencies: + debug: ^2.6.9 + pkg-dir: ^2.0.0 + checksum: f584af176480a702eedcdb3f610797f8b8d1293c3835ed71fadb579ec28400b91ded5283729418f63d48dc27c6358bd66f2bd839614d565a1b78d3c3440ee8f7 + languageName: node + linkType: hard + +"eslint-plugin-es@npm:^3.0.0": + version: 3.0.1 + resolution: "eslint-plugin-es@npm:3.0.1" + dependencies: + eslint-utils: ^2.0.0 + regexpp: ^3.0.0 + peerDependencies: + eslint: ">=4.19.1" + checksum: 11b3229c3c7126d24dea1df90ec6b7966f8a269fc95fa24ae1b868fb676474cdb7e5144076aefca99cb1d3e9c89e6d0ae72d4874242d0987f210e0ee7e7f6896 + languageName: node + linkType: hard + +"eslint-plugin-import@npm:~2.22.1": + version: 2.22.1 + resolution: "eslint-plugin-import@npm:2.22.1" + dependencies: + array-includes: ^3.1.1 + array.prototype.flat: ^1.2.3 + contains-path: ^0.1.0 + debug: ^2.6.9 + doctrine: 1.5.0 + eslint-import-resolver-node: ^0.3.4 + eslint-module-utils: ^2.6.0 + has: ^1.0.3 + minimatch: ^3.0.4 + object.values: ^1.1.1 + read-pkg-up: ^2.0.0 + resolve: ^1.17.0 + tsconfig-paths: ^3.9.0 + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 + checksum: 35ae09ceae6f0fe239f6b72e134d58d74762ad1ed0f57aa989affb856354e46bc082bb6df9399b624989107efb9ab9af2c91c08f03c0c70c5cb46a37676591ec + languageName: node + linkType: hard + +"eslint-plugin-node@npm:~11.1.0": + version: 11.1.0 + resolution: "eslint-plugin-node@npm:11.1.0" + dependencies: + eslint-plugin-es: ^3.0.0 + eslint-utils: ^2.0.0 + ignore: ^5.1.1 + minimatch: ^3.0.4 + resolve: ^1.10.1 + semver: ^6.1.0 + peerDependencies: + eslint: ">=5.16.0" + checksum: 634e03613a4aa0ffd5ccf0807a375840a915797781a4e5d44fb1c4d331cd2a5e6b3da41924a0d6a2123c1a51626db032a038210153fbba6a0012e0b7c7f26499 + languageName: node + linkType: hard + +"eslint-plugin-promise@npm:~4.2.1": + version: 4.2.1 + resolution: "eslint-plugin-promise@npm:4.2.1" + checksum: 8c233a0b5f5646e08709e999aa75973481ee46c45255ec4b4d1577915f68d79ae52f6f84e361af5b761971294bdb38ec86021515fa4cff178f57c989226dd671 + languageName: node + linkType: hard + +"eslint-plugin-react@npm:~7.21.5": + version: 7.21.5 + resolution: "eslint-plugin-react@npm:7.21.5" + dependencies: + array-includes: ^3.1.1 + array.prototype.flatmap: ^1.2.3 + doctrine: ^2.1.0 + has: ^1.0.3 + jsx-ast-utils: ^2.4.1 || ^3.0.0 + object.entries: ^1.1.2 + object.fromentries: ^2.0.2 + object.values: ^1.1.1 + prop-types: ^15.7.2 + resolve: ^1.18.1 + string.prototype.matchall: ^4.0.2 + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 + checksum: a7123f6feb287ad7e15d36b1c9fda8f78a0f0d39b9ee2d6479a5f0ad0effb8f60f639ef7449cecabb711095060e487f0950b69478b22768547b909c0de4f3afd + languageName: node + linkType: hard + +"eslint-plugin-standard@npm:~4.0.2": + version: 4.0.2 + resolution: "eslint-plugin-standard@npm:4.0.2" + peerDependencies: + eslint: ">=5.0.0" + checksum: 1d1e4e5e25e39fd2e645e204d3c407d098b5d179730ed1bb9f156ecc8fa3828b11246b8eff03d4af95f33abdc91efa103255b3dacc311479edb585fea7d3b65b + languageName: node + linkType: hard + +"eslint-scope@npm:^5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^4.1.1 + checksum: 79465cf5082f4216176f6d49c7d088de89ee890f912eb87b831f23ee9a5e17ed0f3f2ab6108fb8fefa0474ba5ebeaa9bdefbe49ba704bd879b73f2445e23ee10 + languageName: node + linkType: hard + +"eslint-utils@npm:^2.0.0, eslint-utils@npm:^2.1.0": + version: 2.1.0 + resolution: "eslint-utils@npm:2.1.0" + dependencies: + eslint-visitor-keys: ^1.1.0 + checksum: a43892372a4205374982ac9d4c8edc5fe180cba76535ab9184c48f18a3d931b7ffdd6862cb2f8ca4305c47eface0e614e39884a75fbf169fcc55a6131af2ec48 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^1.1.0, eslint-visitor-keys@npm:^1.3.0": + version: 1.3.0 + resolution: "eslint-visitor-keys@npm:1.3.0" + checksum: 58ab7a0107621d8a0fe19142a5e1306fd527c0f36b65d5c79033639e80278d8060264804f42c56f68e5541c4cc83d9175f9143083774cec8222f6cd5a695306e + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^2.0.0": + version: 2.0.0 + resolution: "eslint-visitor-keys@npm:2.0.0" + checksum: 429dabdcab3c1cf5e65d44843afc513398d4ee32a37f93edc93bb5ba59a12b78fa67d87ff23c752c170b5e4f9085050f45b3c036cdfb23d40a724f2614048140 + languageName: node + linkType: hard + +"eslint@npm:~7.12.1": + version: 7.12.1 + resolution: "eslint@npm:7.12.1" + dependencies: + "@babel/code-frame": ^7.0.0 + "@eslint/eslintrc": ^0.2.1 + ajv: ^6.10.0 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.0.1 + doctrine: ^3.0.0 + enquirer: ^2.3.5 + eslint-scope: ^5.1.1 + eslint-utils: ^2.1.0 + eslint-visitor-keys: ^2.0.0 + espree: ^7.3.0 + esquery: ^1.2.0 + esutils: ^2.0.2 + file-entry-cache: ^5.0.1 + functional-red-black-tree: ^1.0.1 + glob-parent: ^5.0.0 + globals: ^12.1.0 + ignore: ^4.0.6 + import-fresh: ^3.0.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + js-yaml: ^3.13.1 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.4.1 + lodash: ^4.17.19 + minimatch: ^3.0.4 + natural-compare: ^1.4.0 + optionator: ^0.9.1 + progress: ^2.0.0 + regexpp: ^3.1.0 + semver: ^7.2.1 + strip-ansi: ^6.0.0 + strip-json-comments: ^3.1.0 + table: ^5.2.3 + text-table: ^0.2.0 + v8-compile-cache: ^2.0.3 + bin: + eslint: bin/eslint.js + checksum: b3d11ea516d2932db5854ea942a546b711e6ee8735306627042bb9e2539e96844cc62cdb5826039f5d0509202936045c2cd7b84b457004c891a326f8eccae333 + languageName: node + linkType: hard + +"espree@npm:^7.3.0": + version: 7.3.1 + resolution: "espree@npm:7.3.1" + dependencies: + acorn: ^7.4.0 + acorn-jsx: ^5.3.1 + eslint-visitor-keys: ^1.3.0 + checksum: ff8e0f73939e1e76529b630cba65b6128e4d18ed7bf0b16af62022cadc73ddb950c7e5aa629cca74e8abebdf76f6dcd1cf873dbc819f10599827c6019e2f8e91 + languageName: node + linkType: hard + +"esprima@npm:^4.0.0": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: 5df45a3d9c95c36800d028ba76d8d4e04e199932b58c2939f462f859fd583e7d39b4a12d3f97986cf272a28a5fe5948ee6e49e36ef63f67b5b48d82a635c5081 + languageName: node + linkType: hard + +"esquery@npm:^1.2.0": + version: 1.4.0 + resolution: "esquery@npm:1.4.0" + dependencies: + estraverse: ^5.1.0 + checksum: 3293ecc1507a8cec8d2da8a4707275c2ccf5413e7a3c771fe41c16cee603cacd193bb7383a6e219d1f7d2449156ef575ffd66c839073d4a8058f72856a15f622 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: ^5.2.0 + checksum: 2c96302dd5c4e6d07154d0ce6baee9e829ebf77e21c50c5ca4f24d6d0006fe4a4582364624a01f5667a3633b3e39bbce1a8191924f8419fb71584bb45bf7bb81 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: 1e4c627da9e9af07bf7b2817320f606841808fb2ec0cbd81097b30d5f90d8613288b3e523153babe04615d59b54ef876d98f0ca27488b6c0934dacd725a8d338 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.2.0 + resolution: "estraverse@npm:5.2.0" + checksum: 7dc1b027aebf937bab10c3254d9d73ed21672d7382518c9ddb9dc45560cb2f4e6548cc8ff1a07b7f431e94bd0fb0bf5da75b602e2473f966fea141c4c31b31d6 + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 590b04533177f8f6f0f352b3ac7da6c1c1e3d8375d8973972fba9c94558ca168685fd38319c3c6f4c37ba256df7494a7f15d8e761df1655af8a8f0027d988f8f + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 451526766b219503131d11e823eaadd1533080b0be4860e316670b039dcaf31cd1007c2fe036a9b922abba7c040dfad5e942ed79d21f2ff849e50049f36e0fb7 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: 7df3fabfe445d65953b2d9d9d3958bd895438b215a40fb87dae8b2165c5169a897785eb5d51e6cf0eb03523af756e3d82ea01083f6ac6341fe16db532fee3016 + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: a2d03af3088b0397633e007fb3010ecfa4f91cae2116d2385653c59396a1b31467641afa672a79e6f82218518670dc144128378124e711e35dbf90bc82846f22 + languageName: node + linkType: hard + +"file-entry-cache@npm:^5.0.1": + version: 5.0.1 + resolution: "file-entry-cache@npm:5.0.1" + dependencies: + flat-cache: ^2.0.1 + checksum: 7140588becf15f05ee956cfb359b5f23e0c73acbbd38ad14c7a76a0097342e6bfc0a8151cd2e481ea3cbb735190ba9a0df4b69055ebb5b0389c62339b1a2f86b + languageName: node + linkType: hard + +"find-up@npm:^2.0.0, find-up@npm:^2.1.0": + version: 2.1.0 + resolution: "find-up@npm:2.1.0" + dependencies: + locate-path: ^2.0.0 + checksum: 9dedb89f936b572f7c9fda3f66ebe146b0000fe9ef16fad94a77c25ce9585962e910bb32c1e08bab9b423985ff20221d2af4b7e4130b27c0f5f60c1aad3f6a7f + languageName: node + linkType: hard + +"find-up@npm:^3.0.0": + version: 3.0.0 + resolution: "find-up@npm:3.0.0" + dependencies: + locate-path: ^3.0.0 + checksum: c5422fc7231820421cff6f6e3a5d00a11a79fd16625f2af779c6aedfbaad66764fd149c1b84017aa44e85f86395eb25c31188ad273fc468a981b529eaa59a424 + languageName: node + linkType: hard + +"flat-cache@npm:^2.0.1": + version: 2.0.1 + resolution: "flat-cache@npm:2.0.1" + dependencies: + flatted: ^2.0.0 + rimraf: 2.6.3 + write: 1.0.3 + checksum: a36ba407553064be4a571cdee4021a50290f6179a0827df1d076a2e33cd84e543d0274cb15dbeb551c2ae6d53e611e3c02564a93f0d527563d0f560be7a14b0d + languageName: node + linkType: hard + +"flatted@npm:^2.0.0": + version: 2.0.2 + resolution: "flatted@npm:2.0.2" + checksum: a3e5fb71ad3c4f0661cd3899864812bcf3f64bdf6aa5f33f967c9c2a8a5f0c7219707e864c0602115fef40e093415f76a43e77afd0a86990904e2217ddb44eb4 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 698a91b1695e3926185c9e5b0dd57cf687dceb4eb73799af91e6b2ab741735e2962c366c5af6403ffddae2619914193bd339efa706fdc984d0ffc74b7a3603f4 + languageName: node + linkType: hard + +"function-bind@npm:^1.1.1": + version: 1.1.1 + resolution: "function-bind@npm:1.1.1" + checksum: ffad86e7d2010ba179aaa6a3987d2cc0ed48fa92d27f1ed84bfa06d14f77deeed5bfbae7f00bdebc0c54218392cab2b18ecc080e2c72f592431927b87a27d42b + languageName: node + linkType: hard + +"functional-red-black-tree@npm:^1.0.1": + version: 1.0.1 + resolution: "functional-red-black-tree@npm:1.0.1" + checksum: 477ecaf62d4f8d788876099b35ed4b97586b331e729d2d28d0df96b598863d21c18b8a45a6cbecb6c2bf7f5e5ef1e82a053570583ef9a0ff8336683ab42b8d14 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1": + version: 1.1.1 + resolution: "get-intrinsic@npm:1.1.1" + dependencies: + function-bind: ^1.1.1 + has: ^1.0.3 + has-symbols: ^1.0.1 + checksum: acf1506f25a32a194cfc5c19d33835756080d970eb6e29a8a3852380106df981acef7bb9ac2002689437235221f24bcbdc1e3532b9bcacd7ff3621091fafe607 + languageName: node + linkType: hard + +"get-stdin@npm:^8.0.0": + version: 8.0.0 + resolution: "get-stdin@npm:8.0.0" + checksum: 009a4c42484cc30fe0f353d0a8c593dda0cdef46f4fb8c1668860d8e2fd6ca53faa2a08a85fdf3a4a56dfbe38f940772fd8b66e0ecba333a8f055c56cda72537 + languageName: node + linkType: hard + +"glob-parent@npm:^5.0.0": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: ^4.0.1 + checksum: 82fcaa4ce102a0ae01370ed8fd5299ca32184af0418e1c1b613ed851240160558c0cc9712868eb9ca1924f687b07cd9c70c25f303f39f9f376d9a32f94f28e76 + languageName: node + linkType: hard + +"glob@npm:^7.1.3": + version: 7.1.6 + resolution: "glob@npm:7.1.6" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.0.4 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: 789977b52432865bd63846da5c75a6efc2c56abdc0cb5ffcdb8e91eeb67a58fa5594c1195d18b2b4aff99675b0739ed6bd61024b26562e0cca18c8f993efdc82 + languageName: node + linkType: hard + +"globals@npm:^12.1.0": + version: 12.4.0 + resolution: "globals@npm:12.4.0" + dependencies: + type-fest: ^0.8.1 + checksum: 0b9764bdeab0bc9762dea8954a0d4c5db029420bd8bf693df9098ce7e045ccaf9b2d259185396fd048b051d42fdc8dc7ab02af62e3dbeb2324a78a05aac8d33c + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2": + version: 4.2.6 + resolution: "graceful-fs@npm:4.2.6" + checksum: 84d39c7756892553da990a9db7e45f844b3309b37b5a00174cbb4748476f2250c54f24594d4d252f64f085c65c2fdac7c809419bf6d55f0e6e42eb07ac0f5bf2 + languageName: node + linkType: hard + +"has-bigints@npm:^1.0.0": + version: 1.0.1 + resolution: "has-bigints@npm:1.0.1" + checksum: 1074b644f5f2c319fc31af00fe2f81b6e21e204bb46da70ff7b970fe65c56f504e697fe6b41823ba679bd4111840482a83327d3432b8d670a684da4087ed074b + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 63aade480d27aeedb3b5b63a2e069d47d0006bf182338d662e7941cdc024e68a28418e0efa8dc5df30db9c4ee2407f39e6ea3f16cfbc6b83848b450826a28aa0 + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 2e5391139d3d287231ccb58659702392f6e3abeac3296fb4721afaff46493f3d9b99a9329ae015dfe973aa206ed5c75f43e86aec0267dce79aa5c2b6e811b3ad + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.0, has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.2": + version: 1.0.2 + resolution: "has-symbols@npm:1.0.2" + checksum: 1b73928752fa9ca993fa48f7b3832c95ea408c0ec635b2d6cbaf011b94a7e6a704a9254ae6d8ecc913d4dd92f2ff760dc43aad7c7e790ddb3f627005614d8e28 + languageName: node + linkType: hard + +"has@npm:^1.0.3": + version: 1.0.3 + resolution: "has@npm:1.0.3" + dependencies: + function-bind: ^1.1.1 + checksum: c686e15300d41364486c099a9259d9c418022c294244843dcd712c4c286ff839d4f23a25413baa28c4d2c1e828afc2aaab70f685400b391533980223c71fa1ca + languageName: node + linkType: hard + +"hosted-git-info@npm:^2.1.4": + version: 2.8.8 + resolution: "hosted-git-info@npm:2.8.8" + checksum: 3ecc389dc6ecbd5463fada7e04461e96f3c817fe2f989ca41e9dd3b503745a0bfa26fba405861b2831ca64edc1abc5d2fbc97ee977303f89650dac4fbfdc2d7a + languageName: node + linkType: hard + +"ignore@npm:^4.0.6": + version: 4.0.6 + resolution: "ignore@npm:4.0.6" + checksum: 8f7b7f7c261d110604aed4340771933b0a42ffd2075e87bf8b4229ceb679659c5384c99e25c059f53a2b0e16cebaa4c49f7e837d1f374d1abf91fea46ccddd1a + languageName: node + linkType: hard + +"ignore@npm:^5.1.1": + version: 5.1.8 + resolution: "ignore@npm:5.1.8" + checksum: b08e3d5b5d94eca13475f29a5d47d221060e9cdd7e38d7647088e29d90130669a970fecbc4cdb41b8fa295c6673740c729d3dc05dadc381f593efb42282cbf9f + languageName: node + linkType: hard + +"import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: ^1.0.0 + resolve-from: ^4.0.0 + checksum: 3ff624f00140850a2878eb7630d635daaad556cfa5a0e23191e9b65ab4fec8cc23f929f03bc9b3c4251b497a434f459bf3e7a8aa547a400ad140f431a1b0e4d6 + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 34d414d789286f6ef4d2b954c76c7df40dd7cabffef9b9959c8bd148677e98151f4fa5344aae2e3ad2b62308555ccbba3022e535a3e24288c9babb1308e35532 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: ^1.3.0 + wrappy: 1 + checksum: 17c53fc42cbe7f7f471d2bc41b97a0cde4b79a74d5ff59997d3f75210566fa278e17596da526d43de2bd07e222706240ce50e60097e54f2cde2e64cbbb372638 + languageName: node + linkType: hard + +"inherits@npm:2": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 98426da247ddfc3dcd7d7daedd90c3ca32d5b08deca08949726f12d49232aef94772a07b36cf4ff833e105ae2ef931777f6de4a6dd8245a216b9299ad4a50bea + languageName: node + linkType: hard + +"internal-slot@npm:^1.0.3": + version: 1.0.3 + resolution: "internal-slot@npm:1.0.3" + dependencies: + get-intrinsic: ^1.1.0 + has: ^1.0.3 + side-channel: ^1.0.4 + checksum: 2465f832aa80c3740f2cfc5c75e74c727b4a45b8d80e295bb66dbb59435de536b9951b7f4d1a8075d5bb90054bd30ff22a37356a247fba3608987c7765569345 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: fc2bbe14dbcb27b490e63b7fbf0e3b0aae843e5e1fa96d79450bb9617797615a575c78c454ffc8e027c3ad50d63d83e85a7387784979dcd46686d2eb5f412db0 + languageName: node + linkType: hard + +"is-bigint@npm:^1.0.1": + version: 1.0.1 + resolution: "is-bigint@npm:1.0.1" + checksum: dd132ab80f389d6968315d491706c5dbb3f6c4bf35b64085d74895e7f3516123ab1bcf6a9a83a63cfede688f44550a08713ed37f3ae9153afe8d0cf569a8b956 + languageName: node + linkType: hard + +"is-boolean-object@npm:^1.1.0": + version: 1.1.0 + resolution: "is-boolean-object@npm:1.1.0" + dependencies: + call-bind: ^1.0.0 + checksum: 1d6047a022aa49cdf8580ac8b3d6d25da0d33a65ae00142bec2ba95c6c889de84693a0ef5acc9eabb59ba9e66fb473f47fa589ec22dd8e7ef8d88b6774e3adc6 + languageName: node + linkType: hard + +"is-callable@npm:^1.1.4, is-callable@npm:^1.2.3": + version: 1.2.3 + resolution: "is-callable@npm:1.2.3" + checksum: 8180a1c4e227e204e199ff355c4f24a80f74536898e16716583aa6a09167f2cceecc188cea750a2f3ae3b163577691595ae8d22bf7bb94b4bbb9fbdfea1bc5c3 + languageName: node + linkType: hard + +"is-core-module@npm:^2.2.0": + version: 2.2.0 + resolution: "is-core-module@npm:2.2.0" + dependencies: + has: ^1.0.3 + checksum: 2344744de98a3bc22e2bb30895f307d7889f09e963f9bcb1cc321788f508c8b463f75e0a9ca009eeeb8eb9465181b5c15f1ec9299a6bb6921cfbb2423892e0ba + languageName: node + linkType: hard + +"is-date-object@npm:^1.0.1": + version: 1.0.2 + resolution: "is-date-object@npm:1.0.2" + checksum: 0e322699464a99da638c8a583b74dfb791732b6bc9c102bc0b7ac6303d83c86b9935f19b8d2ed4de52092241190c8826b099cb31972dea49a99b755293c0b1cf + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: ca623e2c56c893714a237aff645ec7caa8fea4d78868682af8d6803d7f0780323f8d566311e0dc6f942c886e81cbfa517597e48fcada7f3bf78a4d099eeecdd3 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^2.0.0": + version: 2.0.0 + resolution: "is-fullwidth-code-point@npm:2.0.0" + checksum: e1e5284f848ab6885665967cd768292a75022304d4401e78937a68f423047c29bfe87a43a9cdb67a3210fff7bcd5da51469122a0eff59b03261c379e58dbe921 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1": + version: 4.0.1 + resolution: "is-glob@npm:4.0.1" + dependencies: + is-extglob: ^2.1.1 + checksum: 98cd4f715f0fb81da34aa6c8be4a5ef02d8cfac3ebc885153012abc2a0410df5a572f9d0393134fcba9192c7a845da96142c5f74a3c02787efe178ed798615e6 + languageName: node + linkType: hard + +"is-negative-zero@npm:^2.0.1": + version: 2.0.1 + resolution: "is-negative-zero@npm:2.0.1" + checksum: e2160af9a6fad7027bbd513e1efe9a99c780bb6af688e61e6b71084b5893f976241ca081e1ed8c18222d391ea3c1c0771cd23ab322be107150b66faf03d6ecbd + languageName: node + linkType: hard + +"is-number-object@npm:^1.0.4": + version: 1.0.4 + resolution: "is-number-object@npm:1.0.4" + checksum: 5bae52129f0e097485da25cbe89307dd46cf5ce7640edb6fcf40350d59c9f909039713d35fbeb0f1de1df817da6ec6e88aceca41b01e5ac989f6fdfc15c438a7 + languageName: node + linkType: hard + +"is-regex@npm:^1.1.2": + version: 1.1.2 + resolution: "is-regex@npm:1.1.2" + dependencies: + call-bind: ^1.0.2 + has-symbols: ^1.0.1 + checksum: 5e2f80f495f5297d1295730820a4be31f3848ca92357cfef1b2a61c09fe0fcd3f68c34f3042a5b81885e249cd50eac8efac472ad6da7ecb497bb2d7bad402a9a + languageName: node + linkType: hard + +"is-string@npm:^1.0.5": + version: 1.0.5 + resolution: "is-string@npm:1.0.5" + checksum: c64c791eb75935db9055291bc598edc22f03d3879b8a050b2955ba8087642d006338a1dedf7ac414c95f985c77c2d6fce655498d33c0df248fa92228a9945720 + languageName: node + linkType: hard + +"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": + version: 1.0.3 + resolution: "is-symbol@npm:1.0.3" + dependencies: + has-symbols: ^1.0.1 + checksum: 753aa0cf95069387521b110c6646df4e0b5cce76cf604521c26b4f5d30a997a95036ed5930c0cca9e850ac6fccb04de551cc95aab71df471ee88e04ed1a96f21 + languageName: node + linkType: hard + +"isarray@npm:^1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: b0ff31a290e783f7b3fb73f2951ee7fc2946dc197b05f73577dc77f87dc3be2e0f66007bedf069123d4e5c4b691e7c89a241f6ca06f0c0f4765cdac5aa4b4047 + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 7b437980bb77881a146fba85cfbdf01edc2b148673e9c2722a1e49661fea73adf524430a80fdbfb8ce9f60d43224e682c657c45030482bd39e0c488fc29b4afe + languageName: node + linkType: hard + +"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 1fc4e4667ac2d972aba65148b9cbf9c17566b2394d3504238d8492bbd3e68f496c657eab06b26b40b17db5cac0a34d153a12130e2d2d2bb6dc2cdc8a4764eb1b + languageName: node + linkType: hard + +"js-yaml@npm:^3.13.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: ^1.0.7 + esprima: ^4.0.0 + bin: + js-yaml: bin/js-yaml.js + checksum: 46b61f889796a20d16b0b64580a01b6a02b2e45c1a2744906346da54d07e14cde764e887ab6d1512d8b2541c63711bd4b75859c28eb99605baf59fa173fc38c2 + languageName: node + linkType: hard + +"json-parse-better-errors@npm:^1.0.1": + version: 1.0.2 + resolution: "json-parse-better-errors@npm:1.0.2" + checksum: b4c4f0e43b43892af887db742b26f9aa6302b09cd5f6e655ead49fca9f47f3cdd300dcf98cf5218778262be51d7b29859221206fc98b87a1a61c5af7618dae89 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 6f71bddba38aa043cf9c05ff9cf37158a6657909f1dd37032ba164b76923da47a17bb4592ee4f7f9c029dfaf26965b821ac214c1f991bb3bd038c9cfea2da50b + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: a01b6c65413b2d0dd6797004ace6166bb6f8a0a2a77c742966021c74233cebe48de3c33223f003a9e8e4a241bb882fe92141e538e7e1dad58afd32649444e269 + languageName: node + linkType: hard + +"json5@npm:^1.0.1": + version: 1.0.1 + resolution: "json5@npm:1.0.1" + dependencies: + minimist: ^1.2.0 + bin: + json5: lib/cli.js + checksum: df41624f9f40bfacc546f779eef6d161a3312fbb6ec1dbd69f8c4388e9807af653b753371ab19b6d2bab22af2ca7dde62fe03c791596acf76915e1fc4ee6fd88 + languageName: node + linkType: hard + +"jsx-ast-utils@npm:^2.4.1 || ^3.0.0": + version: 3.2.0 + resolution: "jsx-ast-utils@npm:3.2.0" + dependencies: + array-includes: ^3.1.2 + object.assign: ^4.1.2 + checksum: 2a8033e63234d04e6ed77ac91222e2dff527f64cf70c10d2f26fda6f35dc9b78d5e3a43fc3d28df7fe0dab45294b94c9c90e58ab242ecf14e58cd39691ee0ed4 + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: ^1.2.1 + type-check: ~0.4.0 + checksum: 2f6ddfb0b956f2cb6b1608253a62b0c30e7392dd3c7b4cf284dfe2889b44d8385eaa81597646e253752c312a960ccb5e4d596968e476d5f6614f4ca60e5218e9 + languageName: node + linkType: hard + +"load-json-file@npm:^2.0.0": + version: 2.0.0 + resolution: "load-json-file@npm:2.0.0" + dependencies: + graceful-fs: ^4.1.2 + parse-json: ^2.2.0 + pify: ^2.0.0 + strip-bom: ^3.0.0 + checksum: c6ea93d36099dd6e778c6c018c9e184ad65d278a9538c2280f959b040b1a9a756d8856bdaf8a38c8f1454eca19bf4798ea59f79ccd8bb1c33aa8b7ecbe157f0c + languageName: node + linkType: hard + +"load-json-file@npm:^5.2.0": + version: 5.3.0 + resolution: "load-json-file@npm:5.3.0" + dependencies: + graceful-fs: ^4.1.15 + parse-json: ^4.0.0 + pify: ^4.0.1 + strip-bom: ^3.0.0 + type-fest: ^0.3.0 + checksum: c45b21cf66cb3a5948ef1ab12db94f9bf8d298c713014c8d9b6667062413916b57eb3c8ca365e1e84d422014c8c4d749ceb3e7335d2400e3e062e4009314eae7 + languageName: node + linkType: hard + +"locate-path@npm:^2.0.0": + version: 2.0.0 + resolution: "locate-path@npm:2.0.0" + dependencies: + p-locate: ^2.0.0 + path-exists: ^3.0.0 + checksum: ee5a888d686f8d555ebfa6c4f6f3b7c5cdfa5f382dee17e0b3fde7456fc68301ddb6a79790a412659d1e067f2f58fd74c683b203fc20368deaed45fb985b4fda + languageName: node + linkType: hard + +"locate-path@npm:^3.0.0": + version: 3.0.0 + resolution: "locate-path@npm:3.0.0" + dependencies: + p-locate: ^3.0.0 + path-exists: ^3.0.0 + checksum: 0b6bf0c1bb09021499f6198ed6a4ae367e8224e2493a74cc7bc5f4e6eca9ed880a5f7fdfb4d57b7e21d3e289c3abfe152cd510cacb1d03049f9d81d9a7d302ca + languageName: node + linkType: hard + +"lodash@npm:^4.17.14, lodash@npm:^4.17.19": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: 4983720b9abca930a4a46f18db163d7dad8dd00dbed6db0cc7b499b33b717cce69f80928b27bbb1ff2cbd3b19d251ee90669a8b5ea466072ca81c2ebe91e7468 + languageName: node + linkType: hard + +"loose-envify@npm:^1.4.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" + dependencies: + js-tokens: ^3.0.0 || ^4.0.0 + bin: + loose-envify: cli.js + checksum: 5c3b47bbe5f597a3889fb001a3a98aaea2a3fafa48089c19034de1e0121bf57dbee609d184478514d74d5c5a7e9cfa3d846343455e5123b060040d46c39e91dc + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: ^4.0.0 + checksum: b8b78353d2391c0f135cdc245c4744ad41c2efb1a6d98f31bc57a2cf48ebf02de96e4876657c3026673576bf1f1f61fc3fdd77ab00ad1ead737537bf17d8019d + languageName: node + linkType: hard + +"minimatch@npm:^3.0.4": + version: 3.0.4 + resolution: "minimatch@npm:3.0.4" + dependencies: + brace-expansion: ^1.1.7 + checksum: 47eab9263962cacd5733e274ecad2d8e54b0f8e124ba35ae69189e296058f634a4967b87a98954f86fa5c830ff177caf827ce0136d28717ed3232951fb4fae62 + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.5": + version: 1.2.5 + resolution: "minimist@npm:1.2.5" + checksum: b77b8590147a4e217ff34266236bc39de23b52e6e33054076991ff674c7397a1380a7bde11111916f16f003a94aaa7e4f3d92595a32189644ff607fabc65a5b6 + languageName: node + linkType: hard + +"mkdirp@npm:^0.5.1": + version: 0.5.5 + resolution: "mkdirp@npm:0.5.5" + dependencies: + minimist: ^1.2.5 + bin: + mkdirp: bin/cmd.js + checksum: 9dd9792e891927b14ca02226dbe1daeb717b9517a001620d5e2658bbc72c5e4f06887b6cbcbb60595fa5a56e701073cf250f1ed69c1988a6b89faf9fd6a4d049 + languageName: node + linkType: hard + +"ms@npm:2.0.0": + version: 2.0.0 + resolution: "ms@npm:2.0.0" + checksum: 1a230340cc7f322fbe916783d8c8d60455407c6b7fb7f901d6ee34eb272402302c5c7f070a97b8531245cbb4ca6a0a623f6a128d7e5a5440cefa2c669c0b35bb + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 9b65fb709bc30c0c07289dcbdb61ca032acbb9ea5698b55fa62e2cebb04c5953f1876a1f3f7f4bc2e91d4bf4d86003f3e207c3bc6ee2f716f99827e62389cd0e + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 2daf93d9bb516eddb06e2e80657a605af2e494d47c65d090ba43691aaffbc41f520840f1c9d3b7b641977af950217a4ab6ffb85bafcd5dfa8ba6fe4e68c43b53 + languageName: node + linkType: hard + +"normalize-package-data@npm:^2.3.2": + version: 2.5.0 + resolution: "normalize-package-data@npm:2.5.0" + dependencies: + hosted-git-info: ^2.1.4 + resolve: ^1.10.0 + semver: 2 || 3 || 4 || 5 + validate-npm-package-license: ^3.0.1 + checksum: 97d4d6b061cab51425ddb05c38d126d7a1a2a6f2c9949bef2b5ad7ef19c005df12099ea442e4cb09190929b7770008f94f87b10342a66f739acf92a7ebb9d9f2 + languageName: node + linkType: hard + +"object-assign@npm:^4.1.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: 66cf021898fc1b13ea573ea8635fbd5a76533f50cecbc2fcd5eee1e8029af41bcebe7023788b6d0e06cbe4401ecea075d972f78ec74467cdc571a0f1a4d1a081 + languageName: node + linkType: hard + +"object-inspect@npm:^1.9.0": + version: 1.9.0 + resolution: "object-inspect@npm:1.9.0" + checksum: 63b412167d716e332b3233090a9e8cc7951479a6971629fb8a3d00135a2329136c697fbd2f56e48bb132928f01bd0f8c5fe2d7386222f217228ca697b8c3932a + languageName: node + linkType: hard + +"object-keys@npm:^1.0.12, object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: 30d72d768b7f3f42144cee517b80e70c40cf39bb76f100557ffac42779613c591780135c54d8133894a78d2c0ae817e24a5891484722c6019a5cd5b58c745c66 + languageName: node + linkType: hard + +"object.assign@npm:^4.1.2": + version: 4.1.2 + resolution: "object.assign@npm:4.1.2" + dependencies: + call-bind: ^1.0.0 + define-properties: ^1.1.3 + has-symbols: ^1.0.1 + object-keys: ^1.1.1 + checksum: a5855cc6db3f64606c41ceb97cb9847e667d8240889d771d65638244be1d35c2e2ccb5762f437bb76abf4e98ab4634a9d302380398121cee288a44dce5028f54 + languageName: node + linkType: hard + +"object.entries@npm:^1.1.2": + version: 1.1.3 + resolution: "object.entries@npm:1.1.3" + dependencies: + call-bind: ^1.0.0 + define-properties: ^1.1.3 + es-abstract: ^1.18.0-next.1 + has: ^1.0.3 + checksum: 89eec6d43bf8440dfd800ad76486d76a900ff7e3e20b560abb4cba8494bdc8524af8cf49a897739da776fe434f8091569b2422333075378f9fd5a50d599601eb + languageName: node + linkType: hard + +"object.fromentries@npm:^2.0.2": + version: 2.0.4 + resolution: "object.fromentries@npm:2.0.4" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + es-abstract: ^1.18.0-next.2 + has: ^1.0.3 + checksum: 9e02d109f6f63dda78715e43fcbd80941491e56ee771a5d21da93e271859f43b0db15e26e0b945989a6a6ee0ba480ca57b047cd331a71e4c4251d44517e0649c + languageName: node + linkType: hard + +"object.values@npm:^1.1.1": + version: 1.1.3 + resolution: "object.values@npm:1.1.3" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + es-abstract: ^1.18.0-next.2 + has: ^1.0.3 + checksum: 31111fe8b8dfe7c3326ae8729eae542dc32d5705339b9b63d89d4a2f766641bfe8989744bd4771c65a7ca0dff281800e99640262c2e82daa97079143a86b3e0b + languageName: node + linkType: hard + +"once@npm:^1.3.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: 1 + checksum: 57afc246536cf6494437f982b26475f22bee860f8b77ce8eb1543f42a8bffe04b2c66ddfea9a16cb25ccb80943f8ee4fc639367ef97b7a6a4f2672eb573963f5 + languageName: node + linkType: hard + +"optionator@npm:^0.9.1": + version: 0.9.1 + resolution: "optionator@npm:0.9.1" + dependencies: + deep-is: ^0.1.3 + fast-levenshtein: ^2.0.6 + levn: ^0.4.1 + prelude-ls: ^1.2.1 + type-check: ^0.4.0 + word-wrap: ^1.2.3 + checksum: bdf5683f986d00e173e6034837b7b6a9e68c7e1a37d7684b240adf1758db9076cfb04c9f64be29327881bb06c5017afb8b65012c5f02d07b180e9f6f42595ffd + languageName: node + linkType: hard + +"p-limit@npm:^1.1.0": + version: 1.3.0 + resolution: "p-limit@npm:1.3.0" + dependencies: + p-try: ^1.0.0 + checksum: 579cbd3d6c606058aa624c464e2cb3c4b56d04ed4cbafdb705633cbe62ba36d77ba2c4289023335ba382f4fbf32c15709465eea18a0e1547c5ebc4b887f2a7da + languageName: node + linkType: hard + +"p-limit@npm:^2.0.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: ^2.0.0 + checksum: 5f20492a25c5f93fca2930dbbf41fa1bee46ef70eaa6b49ad1f7b963f309e599bc40507e0a3a531eee4bcd10fec4dd4a63291d0e3b2d84ac97d7403d43d271a9 + languageName: node + linkType: hard + +"p-locate@npm:^2.0.0": + version: 2.0.0 + resolution: "p-locate@npm:2.0.0" + dependencies: + p-limit: ^1.1.0 + checksum: b6dabbd855fba9bfa74b77882f96d0eac6c25d9966e61ab0ed7bf3d19f2e3b766f290ded1aada1ac4ce2627217b00342cf7a1d36482bada59ba6789be412dad7 + languageName: node + linkType: hard + +"p-locate@npm:^3.0.0": + version: 3.0.0 + resolution: "p-locate@npm:3.0.0" + dependencies: + p-limit: ^2.0.0 + checksum: 3ee9e3ed0b1b543f8148ef0981d33013d82a21c338b117a2d15650456f8dc888c19eb8a98484e7e159276c3ad9219c3e2a00b63228cab46bf29aeaaae096b1d6 + languageName: node + linkType: hard + +"p-try@npm:^1.0.0": + version: 1.0.0 + resolution: "p-try@npm:1.0.0" + checksum: 85739d77b3e9f6a52a8545f1adc53621fb5df4d6ef9b59a3f54f3f3159b45c4100d4e63128a1e790e9ff8ff8b86213ace314ff6d2d327c3edcceea18891baa42 + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: 20983f3765466c1ab617ed153cb53b70ac5df828d854a3334d185e20b37f436e9096f12bc1b7fc96d8908dc927a3685172d3d89e755774f57b7103460c54dcc5 + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: ^3.0.0 + checksum: 58714b9699f8e84340aaf0781b7cbd82f1c357f6ce9c035c151d0e8c1e9b869c51b95b680882f0d21b4751e817a6c936d4bb2952a1a1d9d9fb27e5a84baec2aa + languageName: node + linkType: hard + +"parse-json@npm:^2.2.0": + version: 2.2.0 + resolution: "parse-json@npm:2.2.0" + dependencies: + error-ex: ^1.2.0 + checksum: 920582196a8edebb3d3c4623b2f057987218272b35ae4d2d310c00bc1bd7e89b87c79358d7e009d54f047ca2eea82eab8d7e1b14e1f7cbbb345ef29fcda29731 + languageName: node + linkType: hard + +"parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-json@npm:4.0.0" + dependencies: + error-ex: ^1.3.1 + json-parse-better-errors: ^1.0.1 + checksum: fa9d23708f562c447f2077c6007938334a16e772c5a9b25a6eb1853d792bc34560b483bb6079143040bc89e5476288dd2edd5a60024722986e3e434d326218c9 + languageName: node + linkType: hard + +"path-exists@npm:^3.0.0": + version: 3.0.0 + resolution: "path-exists@npm:3.0.0" + checksum: 09683e92bafb5657838217cce04e4f2f0530c274bc357c995c3231461030566e9f322b9a8bcc1ea810996e250d9a293ca36dd78dbdd6bfbee42e85a94772d6d5 + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 907e1e3e6ac0aef6e65adffd75b3892191d76a5b94c5cf26b43667c4240531d11872ca6979c209b2e5e1609f7f579d02f64ba9936b48bb59d36cc529f0d965ed + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: e44aa3ca9faed0440994883050143b1214fffb907bf3a7bbdba15dc84f60821617c0d84e4cc74e1d84e9274003da50427f54d739b0b47636bcbaff4ec71b9b86 + languageName: node + linkType: hard + +"path-parse@npm:^1.0.6": + version: 1.0.6 + resolution: "path-parse@npm:1.0.6" + checksum: 2eee4b93fb3ae13600e3fca18390d9933bbbcf725a624f6b8df020d87515a74872ff6c58072190d6dc75a5584a683dc6ae5c385ad4e4f4efb6e66af040d56c67 + languageName: node + linkType: hard + +"path-type@npm:^2.0.0": + version: 2.0.0 + resolution: "path-type@npm:2.0.0" + dependencies: + pify: ^2.0.0 + checksum: d028f828dffe48a0062dc4370d5118a0c45f5fb075b013a1dfb13eadd1426eba0c8c2a13fa78f19fc4fd8771ef2012e9d062f8f970c8e56df36d4fbbe5073b26 + languageName: node + linkType: hard + +"pify@npm:^2.0.0": + version: 2.3.0 + resolution: "pify@npm:2.3.0" + checksum: d5758aa570bbd5969c62b5f745065006827ef4859b32af302e3df2bb5978e6c1e50c2360d7ffefa102e451084f4530115c84570c185ba5153ee9871c977fe278 + languageName: node + linkType: hard + +"pify@npm:^4.0.1": + version: 4.0.1 + resolution: "pify@npm:4.0.1" + checksum: 786486a8c94a7e1980ea56c59dcc05ebf0793740b71df9b9f273e48032e6301c5ecc5cc237c5a9ff45b13db27678b4d71aa37a2777bc11473c1310718b648e98 + languageName: node + linkType: hard + +"pkg-conf@npm:^3.1.0": + version: 3.1.0 + resolution: "pkg-conf@npm:3.1.0" + dependencies: + find-up: ^3.0.0 + load-json-file: ^5.2.0 + checksum: e0567c5b0f7d7abe3d9f87650436ee8f7175b6ed55027e72fc186fed124b05b2563233a5ad4d2f0468730439687c8e75128fa220b4ba0d05e186149b8788337e + languageName: node + linkType: hard + +"pkg-dir@npm:^2.0.0": + version: 2.0.0 + resolution: "pkg-dir@npm:2.0.0" + dependencies: + find-up: ^2.1.0 + checksum: f8ae3a151714c61283aeb24385b10355a238732fab822a560145c670c21350da2024f01918231222bcdfce53ec5d69056681be2c2cffe3f3a06e462b9ef2ac29 + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: bc1649f521e8928cde0e1b349b224de2e6f00b71361a4a44f2e4a615342b6e1ae30366c32d26412dabe74d999a40f79c0ae044ae6b17cf19af935e74d12ea4fa + languageName: node + linkType: hard + +"progress@npm:^2.0.0": + version: 2.0.3 + resolution: "progress@npm:2.0.3" + checksum: c46ef5a1de4d527dfd32fe56a7df0c1c8b420a4c02617196813bf7f10ac7c2a929afc265d44fdd68f5c439a7e7cb3d70d569716c82d6b4148ec72089860a1312 + languageName: node + linkType: hard + +"prop-types@npm:^15.7.2": + version: 15.7.2 + resolution: "prop-types@npm:15.7.2" + dependencies: + loose-envify: ^1.4.0 + object-assign: ^4.1.1 + react-is: ^16.8.1 + checksum: a440dd406c5cf53bf39f3e898d2c65178511d34ca3c8c789b30c177992408b9e4273969726b274719aa69ccce5ab34b2fd8caa60b90f23cd2e910cdcf682de52 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0": + version: 2.1.1 + resolution: "punycode@npm:2.1.1" + checksum: 0202dc191cb35bfd88870ac99a1e824b03486d4cee20b543ef337a6dee8d8b11017da32a3e4c40b69b19976e982c030b62bd72bba42884acb691bc5ef91354c8 + languageName: node + linkType: hard + +"react-is@npm:^16.8.1": + version: 16.13.1 + resolution: "react-is@npm:16.13.1" + checksum: 11bcf1267a314a522615f626f3ce3727a3a24cdbf61c4d452add3550a7875326669631326cfb1ba3e92b6f72244c32ffecf93ad21c0cad8455d3e169d0e3f060 + languageName: node + linkType: hard + +"read-pkg-up@npm:^2.0.0": + version: 2.0.0 + resolution: "read-pkg-up@npm:2.0.0" + dependencies: + find-up: ^2.0.0 + read-pkg: ^2.0.0 + checksum: f35e4cb4577b994fc9497886672c748de766ab034e24f029111b6bbbfe757b2e27b6d2b82a28a38f45d9d89ea8a9b1d3c04854e5f991d5deed48f4c9ff7baeb9 + languageName: node + linkType: hard + +"read-pkg@npm:^2.0.0": + version: 2.0.0 + resolution: "read-pkg@npm:2.0.0" + dependencies: + load-json-file: ^2.0.0 + normalize-package-data: ^2.3.2 + path-type: ^2.0.0 + checksum: ddf911317fba54abb447b1d76dd1785c37e1360f7b1e39d83201f6f3807572391ab7392f11727a9c4d90600ebc6616d22e72514d2291688c89ebd440148840b4 + languageName: node + linkType: hard + +"regexp.prototype.flags@npm:^1.3.1": + version: 1.3.1 + resolution: "regexp.prototype.flags@npm:1.3.1" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + checksum: 967e462a83cdfd6f226aa9337bda6f739e3fba72a49f3d3f4ed16b60d5a811ba576ef22f01e37b9230022ba715c6207c082ca117160b304b6503e4a6557628f5 + languageName: node + linkType: hard + +"regexpp@npm:^3.0.0, regexpp@npm:^3.1.0": + version: 3.1.0 + resolution: "regexpp@npm:3.1.0" + checksum: 69d0ce6b449cf35d3732d6341a1e70850360ffc619f8eef10629871c462e614853fffb80d3f00fc17cd0bb5b8f34b0cde5be4b434e72c0eb3fbba2360c8b5ac4 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: 87a4357c0c1c2d165012ec04a3b2aa58931c0c0be257890806760b627bad36c9bceb6f9b2a3726f8570c67f2c9ff3ecc9507fe65cc3ad8d45cdab015245c649f + languageName: node + linkType: hard + +"resolve@^1.10.0, resolve@^1.10.1, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.18.1": + version: 1.20.0 + resolution: "resolve@npm:1.20.0" + dependencies: + is-core-module: ^2.2.0 + path-parse: ^1.0.6 + checksum: 0f5206d454b30e74d9b2d575b5f8aedf443c4d8b90b84cdf79474ade29bb459075220da3127b682896872a16022ed65cc4db09e0f23849654144d3d75c65cd1b + languageName: node + linkType: hard + +"resolve@patch:resolve@^1.10.0#builtin, resolve@patch:resolve@^1.10.1#builtin, resolve@patch:resolve@^1.13.1#builtin, resolve@patch:resolve@^1.17.0#builtin, resolve@patch:resolve@^1.18.1#builtin": + version: 1.20.0 + resolution: "resolve@patch:resolve@npm%3A1.20.0#builtin::version=1.20.0&hash=3388aa" + dependencies: + is-core-module: ^2.2.0 + path-parse: ^1.0.6 + checksum: c4a515b76026806b5b26513fc7bdb80458c532bc91c02ef45ac928d1025585f93bec0b904be39c02131118a37ff7e3f9258f1526850b025d2ec0948bb5fd03d0 + languageName: node + linkType: hard + +"rimraf@npm:2.6.3": + version: 2.6.3 + resolution: "rimraf@npm:2.6.3" + dependencies: + glob: ^7.1.3 + bin: + rimraf: ./bin.js + checksum: c9ce1854f19327606934558f4729b0f7aa7b9f1a3e7ca292d56261cce1074e20b0a0b16689166da6d8ab24ed9c30f7c71fba0df38e1d37f0233b6f48307c5c7a + languageName: node + linkType: hard + +"semistandard@npm:^16.0.0": + version: 16.0.0 + resolution: "semistandard@npm:16.0.0" + dependencies: + eslint: ~7.12.1 + eslint-config-semistandard: 15.0.1 + eslint-config-standard: 16.0.0 + eslint-config-standard-jsx: 10.0.0 + eslint-plugin-import: ~2.22.1 + eslint-plugin-node: ~11.1.0 + eslint-plugin-promise: ~4.2.1 + eslint-plugin-react: ~7.21.5 + eslint-plugin-standard: ~4.0.2 + standard-engine: ^14.0.0 + bin: + semistandard: bin/cmd.js + checksum: a9b525a9747327561a1cf81cb4d0b9a9589753cf92c61e7086e420d985c1d6c2cf52ae2807c22f04477f9aeb8d7c0fd4f9e47bfd80ec329f12b5bec4feebc884 + languageName: node + linkType: hard + +"semver@npm:2 || 3 || 4 || 5": + version: 5.7.1 + resolution: "semver@npm:5.7.1" + bin: + semver: ./bin/semver + checksum: 06ff0ed753ebf741b7602be8faad620d6e160a2cb3f61019d00d919c8bca141638aa23c34da779b8595afdc9faa3678bfbb5f60366b6a4f65f98cf86605bbcdb + languageName: node + linkType: hard + +"semver@npm:^6.1.0": + version: 6.3.0 + resolution: "semver@npm:6.3.0" + bin: + semver: ./bin/semver.js + checksum: f0d155c06a67cc7e500c92d929339f1c6efd4ce9fe398aee6acc00a2333489cca0f5b4e76ee7292beba237fcca4b5a3d4a6153471f105f56299801bdab37289f + languageName: node + linkType: hard + +"semver@npm:^7.2.1": + version: 7.3.4 + resolution: "semver@npm:7.3.4" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: f2c7f9aeb976d1484b2f39aa7afc8332a1d21fd32ca4a6fbf650e1423455ebf3e7029f6e2e7ba0cd71935b85942521f1ec25b6cc2c031b953c8ca4ff2d7a823d + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: ^3.0.0 + checksum: 85aa394d8cedeedf2e03524d6defef67a2b07d3a17d7ee50d4281d62d3fca898f26ebe7aa7bf674d51b80f197aa1d346bc1a10e8efb04377b534f4322c621012 + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: ea18044ffaf18129ced5a246660a9171a7dff98999aaa9de8abb237d8a7711d8a1f76e16881399994ee429156717ce1c6a50c665bb18a4d55a7f80b9125b1f7d + languageName: node + linkType: hard + +"side-channel@npm:^1.0.4": + version: 1.0.4 + resolution: "side-channel@npm:1.0.4" + dependencies: + call-bind: ^1.0.0 + get-intrinsic: ^1.0.2 + object-inspect: ^1.9.0 + checksum: 84258ce3edb1ad35810ca17eccd52fd504b5d4da59447a6829cfd1ae8e3cff97b7df2a14f9a45b7aaa3b507ded95626cf20a500735d3b797e9ffb1eba3cfa9e7 + languageName: node + linkType: hard + +"slice-ansi@npm:^2.1.0": + version: 2.1.0 + resolution: "slice-ansi@npm:2.1.0" + dependencies: + ansi-styles: ^3.2.0 + astral-regex: ^1.0.0 + is-fullwidth-code-point: ^2.0.0 + checksum: 7578393cac91c28f8cb5fa5df36b826ad62c9e66313d2547770db8401570fa8f4aa20cd84ef9244fa054d8e9cc6bfc02578784bb89b238d384b99f2728a35a6d + languageName: node + linkType: hard + +"spdx-correct@npm:^3.0.0": + version: 3.1.1 + resolution: "spdx-correct@npm:3.1.1" + dependencies: + spdx-expression-parse: ^3.0.0 + spdx-license-ids: ^3.0.0 + checksum: f3413eb225ef9f13aa2ec05230ff7669bffad055a7f62ec85164dd27f00a9f1e19880554a8fa5350fc434764ff895836c207f98813511a0180b0e929581bfe01 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.3.0 + resolution: "spdx-exceptions@npm:2.3.0" + checksum: 3cbd2498897dc384158666a9dd7435e3b42ece5da42fd967b218b790e248381d001ec77a676d13d1f4e8da317d97b7bc0ebf4fff37bfbb95923d49b024030c96 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: ^2.1.0 + spdx-license-ids: ^3.0.0 + checksum: f0211cada3fa7cd9db2243143fb0e66e28a46d72d8268f38ad2196aac49408d87892cda6e5600d43d6b05ed2707cb2f4148deb27b092aafabc50a67038f4cbf5 + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.7 + resolution: "spdx-license-ids@npm:3.0.7" + checksum: 21e38ec5dd970643f78d37700b6c6ebd42d68c0e4618db914a56cabd2fe4cc1608404ce6abc7535d5165c6555560e821553d06edf6af6ae439617883cf932c0e + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 51df1bce9e577287f56822d79ac5bd94f6c634fccf193895f2a1d2db2e975b6aa7bc97afae9cf11d49b7c37fe4afc188ff5c4878be91f2c86eabd11c5df8b62c + languageName: node + linkType: hard + +"standard-engine@npm:^14.0.0": + version: 14.0.1 + resolution: "standard-engine@npm:14.0.1" + dependencies: + get-stdin: ^8.0.0 + minimist: ^1.2.5 + pkg-conf: ^3.1.0 + xdg-basedir: ^4.0.0 + checksum: 671824cd48a890936e2815757284c138da3aa49b9743f88726add53866b67fc97200e6a7f8ce72dfeb8111208feaefcdd05b6d3c5ddc1b38f4221589f9f8eb67 + languageName: node + linkType: hard + +"string-width@npm:^3.0.0": + version: 3.1.0 + resolution: "string-width@npm:3.1.0" + dependencies: + emoji-regex: ^7.0.1 + is-fullwidth-code-point: ^2.0.0 + strip-ansi: ^5.1.0 + checksum: 54c5d1842dc122d8e0251ad50e00e91c06368f1aca44f41a67cd5ce013c4ba8f5a26f1b7f72a3e1644f38c62092a82c86b646aff514073894faf84b9564a38a0 + languageName: node + linkType: hard + +"string.prototype.matchall@npm:^4.0.2": + version: 4.0.4 + resolution: "string.prototype.matchall@npm:4.0.4" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + es-abstract: ^1.18.0-next.2 + has-symbols: ^1.0.1 + internal-slot: ^1.0.3 + regexp.prototype.flags: ^1.3.1 + side-channel: ^1.0.4 + checksum: e19b26a14adc6f6957248ae0ce3a054ddfb5b783b7528a9dd7ee2635d95a977486805c7b2182dca17fd60e1a40e1be1e02f0a9fee32e19c29d2f1850564d96d1 + languageName: node + linkType: hard + +"string.prototype.trimend@npm:^1.0.4": + version: 1.0.4 + resolution: "string.prototype.trimend@npm:1.0.4" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + checksum: ea8793bee1104362587e6a0fab2cb48e76548423d8ac95847284f9f6ef6a11338cf47114e8ec1c2a9519cce55cfa8d19fc8e26413937c3e804a768ec43ebe38e + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.4": + version: 1.0.4 + resolution: "string.prototype.trimstart@npm:1.0.4" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + checksum: dd2c994af9b9194c7ce9d94e30b8f8bbe30ec95ada94534a71d63df2964a200c8d2264378252a5047a5f1cf805e8216911d78d16b22d5db7b0abcdbbb2d24b4a + languageName: node + linkType: hard + +"strip-ansi@npm:^5.1.0": + version: 5.2.0 + resolution: "strip-ansi@npm:5.2.0" + dependencies: + ansi-regex: ^4.1.0 + checksum: 44a0d0d354f5f7b15f83323879a9112ea746daae7bef0b68238a27626ee757d9a04ce6590433841e14b325e8e7c5d62b8442885e50497e21b7cbca6da40d54ea + languageName: node + linkType: hard + +"strip-ansi@npm:^6.0.0": + version: 6.0.0 + resolution: "strip-ansi@npm:6.0.0" + dependencies: + ansi-regex: ^5.0.0 + checksum: 10568c91cadbef182a807c38dfa718dce15a35b12fcc97b96b6b2029d0508ef66ca93fabddeb49482d9b027495d1e18591858e80f27ad26861c4967c60fd207f + languageName: node + linkType: hard + +"strip-bom@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-bom@npm:3.0.0" + checksum: 361dd1dd08ae626940061570d20bcf73909d0459734b8880eb3d14176aa28f41cf85d13af036c323ce739e04ef3930a71b516950c5985b318bae3757ecb2974c + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: f16719ce25abc58a55ef82b1c27f541dcfa5d544f17158f62d10be21ff9bd22fde45a53c592b29d80ad3c97ccb67b7451c4833913fdaeadb508a40f5e0a9c206 + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: ^3.0.0 + checksum: edacee6425498440744c418be94b0660181aad2a1828bcf2be85c42bd385da2fd8b2b358d9b62b0c5b03ff5cd3e992458d7b8f879d9fb42f2201fe05a4848a29 + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: ^4.0.0 + checksum: 8e57067c39216f3c2ffce7cc14ca934d54746192571203aa9c9922d97d2d55cc1bdaa9e41a11f91e620670b5a74ebdec6b548a885d8cc2dea7cab59e21416029 + languageName: node + linkType: hard + +"table@npm:^5.2.3": + version: 5.4.6 + resolution: "table@npm:5.4.6" + dependencies: + ajv: ^6.10.2 + lodash: ^4.17.14 + slice-ansi: ^2.1.0 + string-width: ^3.0.0 + checksum: 38877a196c0a57b955e4965fa3ff1cede38649b6e1f6286aa5435579dfd01663fdf8d19c87510e67a79474d75ae0144a0819f2054d654c45d7f525270aafe56b + languageName: node + linkType: hard + +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: 373904ce70524ba11ec7e1905c44fb92671132d5e0b0aba2fb48057161f8bf9cbf7f6178f0adf31810150cf44fb52c7b912dc722bff3fddf9688378596dbeb56 + languageName: node + linkType: hard + +"tsconfig-paths@npm:^3.9.0": + version: 3.9.0 + resolution: "tsconfig-paths@npm:3.9.0" + dependencies: + "@types/json5": ^0.0.29 + json5: ^1.0.1 + minimist: ^1.2.0 + strip-bom: ^3.0.0 + checksum: 5383ba626b3ac70e08094b9dfd1e30ce82878407b6c8db8cd84279cc7c7340d5f53f67dbeb8174a233c082a068322a6b00ec8514b96d9a80a453e0476dc116d2 + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: ^1.2.1 + checksum: 6c2e1ce339567e122504f0c729cfa35d877fb2da293b99110f0819eca81e6ed8d3ba9bb36c0bc0ee4904d5340dbe678f8642a395c1c67b1d0f69f081efb47f4a + languageName: node + linkType: hard + +"type-fest@npm:^0.3.0": + version: 0.3.1 + resolution: "type-fest@npm:0.3.1" + checksum: 508923061144ff7ebc69d4f49bc812c7b8a81c633d10e89191092efb5746531ee6c4dd912db1447e954a766186ed48eee0dcfa53047c55a7646076a76640ff43 + languageName: node + linkType: hard + +"type-fest@npm:^0.8.1": + version: 0.8.1 + resolution: "type-fest@npm:0.8.1" + checksum: f8c4b4249f52e8bea7a4fc55b3653c96c2d547240e4c772e001d02b7cc38b8c3eb493ab9fbe985a76a203cd1aa7044776b728a71ba12bf36e7131f989597885b + languageName: node + linkType: hard + +"unbox-primitive@npm:^1.0.0": + version: 1.0.0 + resolution: "unbox-primitive@npm:1.0.0" + dependencies: + function-bind: ^1.1.1 + has-bigints: ^1.0.0 + has-symbols: ^1.0.0 + which-boxed-primitive: ^1.0.1 + checksum: 25e82f99bb40981f30615644305c757ecefff43d2ef2ac1b80e24f304f3002cd637eecb672bdd07f5fb858a265d96a4b2e983c714cba65498715acf7af23e86b + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: ^2.1.0 + checksum: 7d8ae8e2d7b82480d7d337f3e53c9a89ffdc7ebb1c31f212da3df6349f2fd1e6a4361f5fb27369ecab33fa37aa85edc53aec6eb7c9a7c3207a9e0944e8c48802 + languageName: node + linkType: hard + +"v8-compile-cache@npm:^2.0.3": + version: 2.3.0 + resolution: "v8-compile-cache@npm:2.3.0" + checksum: b56f83d9ff14187562badc4955dadeef53ff3abde478ce60759539dd8d5472a91fce9db6083fc2450e54cef6f2110c1a28d8c12162dbf575a6cfcb846986904b + languageName: node + linkType: hard + +"validate-npm-package-license@npm:^3.0.1": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: ^3.0.0 + spdx-expression-parse: ^3.0.0 + checksum: 940899bd4eacfa012ceecb10a5814ba0e8103da5243aa74d0d62f1f8a405efcd23e034fb7193e2d05b392870c53aabcb1f66439b062075cdcb28bc5d562a8ff6 + languageName: node + linkType: hard + +"which-boxed-primitive@npm:^1.0.1": + version: 1.0.2 + resolution: "which-boxed-primitive@npm:1.0.2" + dependencies: + is-bigint: ^1.0.1 + is-boolean-object: ^1.1.0 + is-number-object: ^1.0.4 + is-string: ^1.0.5 + is-symbol: ^1.0.3 + checksum: 771ef43357afbba9febf2da4867b2971ada0a5126227f9b7926751525e3721f7f5f3722f8c60af67881714d9a82a98ed686f1768490cfb2cd40518df5f2e056e + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: ^2.0.0 + bin: + node-which: ./bin/node-which + checksum: ea9b1db1266b08f7880717cf70dd9012dd523e5a317f10fbe4d5e8c1a761c5fd237f88642f2ba33b23f973ff4002c9b26648d63084ab208d8ecef36497315f6e + languageName: node + linkType: hard + +"word-wrap@npm:^1.2.3": + version: 1.2.3 + resolution: "word-wrap@npm:1.2.3" + checksum: 6526abd75d4409c76d1989cf2fbf6080b903db29824be3d17d0a0b8f6221486c76a021174eda2616cf311199787983c34bae3c5e7b51d2ad7476f2066cddb75a + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 519fcda0fcdf0c16327be2de9d98646742307bc830277e8868529fcf7566f2b330a6453c233e0cdcb767d5838dd61a90984a02ecc983bcddebea5ad0833bbf98 + languageName: node + linkType: hard + +"write@npm:1.0.3": + version: 1.0.3 + resolution: "write@npm:1.0.3" + dependencies: + mkdirp: ^0.5.1 + checksum: e8f8fddefea3eaaf4c8bacf072161f82d5e05c5fb8f003e1bae52673b94b88a4954d97688c7403a20301d2f6e9f61363b1affe74286b499b39bc0c42f17a56cb + languageName: node + linkType: hard + +"xdg-basedir@npm:^4.0.0": + version: 4.0.0 + resolution: "xdg-basedir@npm:4.0.0" + checksum: 928953cb7dda8e2475932f748847a3aae751f44864a0067b03e5ca66820a36e1e9ffb647f9b06fb68ebcb0b9d06d5aee630717a1d2501be14cec99f82efa2fe6 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: a2960ef879af6ee67a76cae29bac9d8bffeb6e9e366c217dbd21464e7fce071933705544724f47e90ba5209cf9c83c17d5582dd04415d86747a826b2a231efb8 + languageName: node + linkType: hard diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/ActionTests.cs b/tests/packages/Microsoft.Bot.Components.Teams.Tests/ActionTests.cs deleted file mode 100644 index c4f5ff73f7..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/ActionTests.cs +++ /dev/null @@ -1,592 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Builder.Dialogs.Adaptive; -using Microsoft.Bot.Builder.Dialogs.Adaptive.Testing; -using Microsoft.Bot.Builder.Dialogs.Declarative; -using Microsoft.Bot.Builder.Dialogs.Declarative.Obsolete; -using Microsoft.Bot.Connector; -using Microsoft.Bot.Connector.Authentication; -using Microsoft.Bot.Schema; -using Microsoft.Bot.Schema.Teams; -using Newtonsoft.Json.Linq; -using Xunit; - -namespace Microsoft.Bot.Components.Teams.Tests -{ - [CollectionDefinition("Dialogs.Adaptive")] - public class ActionTests : IClassFixture - { - private readonly ResourceExplorerFixture _resourceExplorerFixture; - - public ActionTests(ResourceExplorerFixture resourceExplorerFixture) - { - ComponentRegistration.Add(new DeclarativeComponentRegistration()); - ComponentRegistration.Add(new DialogsComponentRegistration()); - ComponentRegistration.Add(new AdaptiveComponentRegistration()); - ComponentRegistration.Add(new LanguageGenerationComponentRegistration()); - ComponentRegistration.Add(new AdaptiveTestingComponentRegistration()); - ComponentRegistration.Add(new DeclarativeComponentRegistrationBridge()); - - _resourceExplorerFixture = resourceExplorerFixture.Initialize(nameof(ActionTests)); - } - - [Fact] - public async Task Action_GetMeetingParticipant() - { - var participantResult = GetParticipant().ToString(); - - var uriToContent = new Dictionary() - { - { "/v1/meetings/meeting-id-1/participants/participant-aad-id-1?tenantId=tenant-id-1", participantResult }, - { "/v1/meetings/customMeetingId/participants/customParticipantId?tenantId=customTenantId", participantResult } - }; - - var teamsMiddleware = GetTeamsMiddleware(uriToContent); - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, middleware: new[] { teamsMiddleware }); - } - - [Fact] - public async Task Action_GetMeetingParticipantError() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); - } - - [Fact] - public async Task Action_GetMeetingParticipantErrorWithAdapter() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); - } - - [Fact] - public async Task Action_GetMember() - { - var participantResult = GetParticipant().ToString(); - var uriToContent = new Dictionary() - { - { "/v3/conversations/Action_GetMember/members/member-id", participantResult }, - { "/v3/conversations/Action_GetMember/members/customMemberId", participantResult } - }; - - var teamsMiddleware = GetTeamsMiddleware(uriToContent); - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, middleware: new[] { teamsMiddleware }); - } - - [Fact] - public async Task Action_GetMemberError() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); - } - - [Fact] - public async Task Action_GetMemberErrorWithAdapter() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); - } - - [Fact] - public async Task Action_GetPagedMembers() - { - var threeMembers = GenerateTeamMembers(3); - threeMembers.ContinuationToken = "customToken"; - - var twoMembers = GenerateTeamMembers(2); - twoMembers.ContinuationToken = "token"; - - var uriToContent = new Dictionary() - { - { "/v3/conversations/Action_GetPagedMembers/pagedmembers", JObject.FromObject(threeMembers).ToString() }, - { "/v3/conversations/Action_GetPagedMembers/pagedmembers?pageSize=2&continuationToken=token", JObject.FromObject(twoMembers).ToString() } - }; - - var teamsMiddleware = GetTeamsMiddleware(uriToContent); - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, middleware: new[] { teamsMiddleware }); - } - - [Fact] - public async Task Action_GetPagedMembersError() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); - } - - [Fact] - public async Task Action_GetPagedTeamMembers() - { - var threeMembers = GenerateTeamMembers(3); - threeMembers.ContinuationToken = "token"; - - var twoMembers = GenerateTeamMembers(2); - twoMembers.ContinuationToken = "token"; - - var uriToContent = new Dictionary() - { - { "/v3/conversations/team-id-1/pagedmembers", JObject.FromObject(threeMembers).ToString() }, - { "/v3/conversations/team-id-1/pagedmembers?pageSize=2&continuationToken=token", JObject.FromObject(twoMembers).ToString() } - }; - - var teamsMiddleware = GetTeamsMiddleware(uriToContent); - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, middleware: new[] { teamsMiddleware }); - } - - [Fact] - public async Task Action_GetPagedTeamMembersError() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); - } - - [Fact] - public async Task Action_GetTeamChannels() - { - var conversations = JObject.FromObject(new ConversationList - { - Conversations = new List() - { - new ChannelInfo { Id = "19:ChannelIdgeneralChannelId@thread.skype", Name = "Testing0" }, - new ChannelInfo { Id = "19:somechannelId2e5ab3df9ae9b594bdb@thread.skype", Name = "Testing1" }, - new ChannelInfo { Id = "19:somechannelId388ade16aa4dd375e69@thread.skype", Name = "Testing2" }, - } - }).ToString(); - - var uriToContent = new Dictionary() - { - { "/v3/teams/team-id-1/conversations", conversations }, - { "/v3/teams/customTeamId/conversations", conversations } - }; - - var teamsMiddleware = GetTeamsMiddleware(uriToContent); - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, middleware: new[] { teamsMiddleware }); - } - - [Fact] - public async Task Action_GetTeamChannelsError() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); - } - - [Fact] - public async Task Action_GetTeamDetails() - { - var details = JObject.FromObject(new TeamDetails - { - Id = "19:generalChannelIdgeneralChannelId@thread.skype", - Name = "TeamName", - AadGroupId = "Team-aadGroupId" - }).ToString(); - - var uriToContent = new Dictionary() - { - { "/v3/teams/team-id-1/team-id-1", details }, - { "/v3/teams/customTeamId", details } - }; - - var teamsMiddleware = GetTeamsMiddleware(uriToContent); - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, middleware: new[] { teamsMiddleware }); - } - - [Fact] - public async Task Action_GetTeamDetailsError() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); - } - - [Fact] - public async Task Action_GetTeamMember() - { - var member = JObject.FromObject(GenerateTeamMembers(1).Members.First()).ToString(); - - var uriToContent = new Dictionary() - { - { "/v3/conversations/team-id-1/members/user1", member }, - { "/v3/conversations/customTeamId/members/customMemberId", member } - }; - - var teamsMiddleware = GetTeamsMiddleware(uriToContent); - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, middleware: new[] { teamsMiddleware }); - } - - [Fact] - public async Task Action_GetTeamMemberError() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); - } - - [Fact] - public async Task Action_GetTeamMemberErrorWithAdapter() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); - } - - [Fact] - public async Task Action_SendAppBasedLinkQueryResponse() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); - } - - [Fact] - public async Task Action_SendAppBasedLinkQueryResponseError() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); - } - - //[Fact] - //public async Task Action_SendMessageToTeamsChannel() - //{ - // NOTE: Current test adapter is not a BotFrameworkAdapter, - // and does not support mocking SendMessageToTeamsChannel - // var teamsMiddleware = GetTeamsMiddleware(new JObject(), "/v3/conversations"); - // await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, middleware: new[] { teamsMiddleware }); - //} - - [Fact] - public async Task Action_SendMessageToTeamsChannelError() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); - } - - [Fact] - public async Task Action_SendMEActionResponse() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); - } - - [Fact] - public async Task Action_SendMEActionResponseError() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); - } - - [Fact] - public async Task Action_SendMEAttachmentsResponse() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); - } - - [Fact] - public async Task Action_SendMEAttachmentsResponseError() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); - } - - [Fact] - public async Task Action_SendMEAuthResponse() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); - } - - //[Fact] - //public async Task Action_SendMEAuthResponseError() - //{ - // NOTE: Current test adapter is not a BotFrameworkAdapter, - // await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); - //} - - [Fact] - public async Task Action_SendMEAuthResponseErrorWithAdapter() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); - } - - [Fact] - public async Task Action_SendMEBotMessagePreviewResponse() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); - } - - [Fact] - public async Task Action_SendMEBotMessagePreviewResponseError() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); - } - - [Fact] - public async Task Action_SendMEConfigQuerySettingUrlResponse() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); - } - - [Fact] - public async Task Action_SendMEConfigQuerySettingUrlResponseError() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); - } - - [Fact] - public async Task Action_SendMEMessageResponse() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); - } - - [Fact] - public async Task Action_SendMEMessageResponseError() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); - } - - [Fact] - public async Task Action_SendMESelectItemResponse() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); - } - - [Fact] - public async Task Action_SendMESelectItemResponseError() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); - } - - [Fact] - public async Task Action_SendTaskModuleCardResponse() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); - } - - [Fact] - public async Task Action_SendTaskModuleCardResponseError() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); - } - - [Fact] - public async Task Action_SendTaskModuleMessageResponse() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); - } - - [Fact] - public async Task Action_SendTaskModuleUrlResponse() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); - } - - [Fact] - public async Task Action_SendTaskModuleUrlResponseError() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); - } - - [Fact] - public async Task Action_SendTabCardResponseError() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); - } - - [Fact] - public async Task Action_SendTabCardResponse() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); - } - - [Fact] - public async Task Action_SendTabAuthResponseErrorWithAdapter() - { - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); - } - - //[Fact] - //public async Task Action_SendTabAuthResponseError() - //{ - // NOTE: Current test adapter is not a BotFrameworkAdapter, - // await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); - //} - - private IMiddleware GetErrorTeamsMiddleware(string exception) - { - // Create a connector client, setup with a custom httpclient which will - // throw an exception when the connectorclient's outgoing pipeline's SendAsync - // is called - var messageHandler = new ErrorHttpMessageHandler(exception); - return GetTestConnectorClientMiddleware(messageHandler); - } - - private ConversationReference GetGroupConversation() - { - return new ConversationReference - { - ChannelId = Channels.Msteams, - User = new ChannelAccount - { - Id = "29:User-Id", - Name = "User Name", - AadObjectId = "participant-aad-id" - }, - Conversation = new ConversationAccount - { - ConversationType = "groupChat", - TenantId = "tenantId-Guid", - Name = "group", - IsGroup = true, - Id = "19:groupChatId@thread.v2" - } - }; - } - - private TeamsPagedMembersResult GenerateTeamMembers(int total) - { - var accounts = new List(); - - for (int count = 0; count < total; count++) - { - accounts.Add(new TeamsChannelAccount - { - Id = $"29:User-Id-{count}", - Name = $"User Name-{count}", - AadObjectId = $"User-{count}-Object-Id", - Surname = $"Surname-{count}", - Email = $"User.{count}@microsoft.com", - UserPrincipalName = $"user{count}@microsoft.com", - TenantId = "tenant-id-1", - GivenName = "User" - }); - } - - return new TeamsPagedMembersResult() { Members = accounts }; - } - - private JObject GetParticipant(bool groupConversation = false) - { - return JObject.FromObject(new - { - id = "29:User-Id-0", - objectId = "User-0-Object-Id", - name = "User Name-0", - meeting = new { role = "Organizer" }, - surname = "Surname-0", - tenantId = "tenant-id-1", - userPrincipalName = "user0@microsoft.com", - user = new - { - userPrincipalName = "userPrincipalName-1", - }, - email = "User.0@microsoft.com", - givenName = "User", - conversation = new - { - id = groupConversation ? "19:groupChatId@thread.v2" : "a:oneOnOneConversationId", - name = groupConversation ? "group" : "oneOnOne", - tenantId = "tenantId-Guid", - conversationType = groupConversation ? "groupChat" : "personal", - isGroup = groupConversation, - } - }); - } - - private IMiddleware GetTeamsMiddleware(JObject result, string path = null) - { - // Create a connector client, setup with a custom httpclient which will return - // the desired result through the TestHttpMessageHandler. - TestsHttpMessageHandler messageHandler; - if (!string.IsNullOrEmpty(path)) - { - messageHandler = new TestsHttpMessageHandler(path, result.ToString()); - } - else - { - messageHandler = new TestsHttpMessageHandler(result.ToString()); - } - - return GetTestConnectorClientMiddleware(messageHandler); - } - - private IMiddleware GetTeamsMiddleware(Dictionary results) - { - // Create a connector client, setup with a custom httpclient which will return - // the desired result through the TestHttpMessageHandler. - var messageHandler = new TestsHttpMessageHandler(results); - return GetTestConnectorClientMiddleware(messageHandler); - } - - private TestConnectorClientMiddleware GetTestConnectorClientMiddleware(HttpMessageHandler messageHandler) - { - var testHttpClient = new HttpClient(messageHandler); - testHttpClient.BaseAddress = new Uri("https://localhost.coffee"); - var testConnectorClient = new ConnectorClient(new Uri("http://localhost.coffee/"), new MicrosoftAppCredentials(string.Empty, string.Empty), testHttpClient); - return new TestConnectorClientMiddleware(testConnectorClient); - } - - // This middleware sets the turnstate's connector client, - // so it will be found by the adapter, and a new one not created. - private class TestConnectorClientMiddleware : IMiddleware - { - private IConnectorClient _connectorClient; - - public TestConnectorClientMiddleware(IConnectorClient connectorClient) - { - _connectorClient = connectorClient; - } - - public Task OnTurnAsync(ITurnContext turnContext, NextDelegate next, CancellationToken cancellationToken = default) - { - turnContext.TurnState.Add(_connectorClient); - return next(cancellationToken); - } - } - - private class ErrorHttpMessageHandler : HttpMessageHandler - { - private readonly string _error; - - public ErrorHttpMessageHandler(string error) - { - _error = error; - } - - protected override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) - { - throw new Exception(_error); - } - } - - // Message handler to mock returning a specific object when requested from a specified path. - private class TestsHttpMessageHandler : HttpMessageHandler - { - private Dictionary _uriToContent; - private string _content; - - public TestsHttpMessageHandler(string url, string content) - : this(new Dictionary() { { url, content } }) - { - } - - public TestsHttpMessageHandler(string content) - { - _content = content; - } - - public TestsHttpMessageHandler(Dictionary uriToContent) - { - _uriToContent = uriToContent; - } - - protected override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) - { - var response = new HttpResponseMessage(HttpStatusCode.OK); - if (!string.IsNullOrEmpty(_content)) - { - response.Content = new StringContent(_content); - } - else - { - var path = request.RequestUri.PathAndQuery; - foreach (var urlAndContent in _uriToContent) - { - if (urlAndContent.Key.Contains(path, System.StringComparison.OrdinalIgnoreCase)) - { - response.Content = new StringContent(urlAndContent.Value); - } - } - } - - return Task.FromResult(response); - } - } - } -} diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/ConditionalTests.cs b/tests/packages/Microsoft.Bot.Components.Teams.Tests/ConditionalTests.cs deleted file mode 100644 index 8c744a42d9..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/ConditionalTests.cs +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.IO; -using System.Threading.Tasks; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Builder.Dialogs.Adaptive; -using Microsoft.Bot.Builder.Dialogs.Adaptive.Testing; -using Microsoft.Bot.Builder.Dialogs.Declarative; -using Microsoft.Bot.Builder.Dialogs.Declarative.Obsolete; -using Microsoft.Bot.Builder.Dialogs.Declarative.Resources; -using Xunit; - -namespace Microsoft.Bot.Components.Teams.Tests -{ - public class ConditionalTests - { - public ConditionalTests() - { - ComponentRegistration.Add(new DeclarativeComponentRegistration()); - ComponentRegistration.Add(new DialogsComponentRegistration()); - ComponentRegistration.Add(new AdaptiveComponentRegistration()); - ComponentRegistration.Add(new LanguageGenerationComponentRegistration()); - ComponentRegistration.Add(new AdaptiveTestingComponentRegistration()); - ComponentRegistration.Add(new DeclarativeComponentRegistrationBridge()); - - ResourceExplorer = new ResourceExplorer() - .AddFolder(Path.Combine(TestUtils.GetProjectPath(), "Tests", nameof(ConditionalTests)), monitorChanges: false); - } - - public static ResourceExplorer ResourceExplorer { get; set; } - - [Fact] - public async Task ConditionalsTests_OnTeamsActivityTypes() - { - await TestUtils.RunTestScript(ResourceExplorer); - } - } -} diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Microsoft.Bot.Components.Teams.Tests.csproj b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Microsoft.Bot.Components.Teams.Tests.csproj deleted file mode 100644 index c49768951b..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Microsoft.Bot.Components.Teams.Tests.csproj +++ /dev/null @@ -1,35 +0,0 @@ - - - - netcoreapp2.1 - netcoreapp3.1 - netcoreapp2.1;netcoreapp3.1 - false - Debug;Release - latest - - - - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - Always - - - - diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/ResourceExplorerFixture.cs b/tests/packages/Microsoft.Bot.Components.Teams.Tests/ResourceExplorerFixture.cs deleted file mode 100644 index 7b2b192b71..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/ResourceExplorerFixture.cs +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.IO; -using Microsoft.Bot.Builder.Dialogs.Declarative.Resources; - -namespace Microsoft.Bot.Components.Teams.Tests -{ - public class ResourceExplorerFixture : IDisposable - { - private string _folderPath = string.Empty; - - public ResourceExplorerFixture() - { - ResourceExplorer = new ResourceExplorer(); - } - - public ResourceExplorer ResourceExplorer { get; private set; } - - public ResourceExplorerFixture Initialize(string resourceFolder) - { - if (_folderPath.Length == 0) - { - _folderPath = Path.Combine(TestUtils.GetProjectPath(), "Tests", resourceFolder); - ResourceExplorer = ResourceExplorer.AddFolder(_folderPath, monitorChanges: false); - } - - return this; - } - - public void Dispose() - { - _folderPath = string.Empty; - ResourceExplorer.Dispose(); - } - } -} diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/TestUtils.cs b/tests/packages/Microsoft.Bot.Components.Teams.Tests/TestUtils.cs deleted file mode 100644 index f8f136dc1b..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/TestUtils.cs +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.CompilerServices; -using System.Threading.Tasks; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Adapters; -using Microsoft.Bot.Builder.Dialogs.Adaptive.Testing; -using Microsoft.Bot.Builder.Dialogs.Declarative.Resources; -using Microsoft.Bot.Connector; -using Microsoft.Bot.Schema; -using Microsoft.Extensions.Configuration; - -namespace Microsoft.Bot.Components.Teams.Tests -{ - public class TestUtils - { - public static IConfiguration DefaultConfiguration { get; set; } = new ConfigurationBuilder().AddInMemoryCollection().Build(); - - public static string RootFolder { get; set; } = GetProjectPath(); - - public static IEnumerable GetTestScripts(string relativeFolder) - { - var testFolder = Path.GetFullPath(Path.Combine(RootFolder, PathUtils.NormalizePath(relativeFolder))); - return Directory.EnumerateFiles(testFolder, "*.test.dialog", SearchOption.AllDirectories).Select(s => new object[] { Path.GetFileName(s) }).ToArray(); - } - - public static async Task RunTestScript(ResourceExplorer resourceExplorer, string resourceId = null, IConfiguration configuration = null, [CallerMemberName] string testName = null, IEnumerable middleware = null, string adapterChannel = Channels.Msteams) - { - var storage = new MemoryStorage(); - var convoState = new ConversationState(storage); - var userState = new UserState(storage); - - var adapter = (TestAdapter)new TestAdapter(CreateConversation(adapterChannel, testName)); - - if (middleware != null) - { - foreach (var m in middleware) - { - adapter.Use(m); - } - } - - adapter.Use(new RegisterClassMiddleware(DefaultConfiguration)) - .UseStorage(storage) - .UseBotState(userState, convoState) - .Use(new TranscriptLoggerMiddleware(new TraceTranscriptLogger(traceActivity: false))); - - adapter.OnTurnError += async (context, err) => - { - if (err.Message.EndsWith("MemoryAssertion failed")) - { - throw err; - } - - await context.SendActivityAsync(err.Message); - }; - - var script = resourceExplorer.LoadType(resourceId ?? $"{testName}.test.dialog"); - script.Configuration = configuration ?? new ConfigurationBuilder().AddInMemoryCollection().Build(); - script.Description ??= resourceId; - await script.ExecuteAsync(adapter: adapter, testName: testName, resourceExplorer: resourceExplorer).ConfigureAwait(false); - } - - public static string GetProjectPath() - { - var parent = Environment.CurrentDirectory; - while (!string.IsNullOrEmpty(parent)) - { - if (Directory.EnumerateFiles(parent, "*proj").Any()) - { - break; - } - - parent = Path.GetDirectoryName(parent); - } - - return parent; - } - - public static ConversationReference CreateConversation(string channel, string conversationName) - { - return new ConversationReference - { - ChannelId = channel ?? Channels.Test, - ServiceUrl = "https://test.com", - User = new ChannelAccount("user1", "User1"), - Bot = new ChannelAccount("bot", "Bot"), - Conversation = new ConversationAccount(false, "personal", conversationName), - Locale = "en-US", - }; - } - } -} diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipant.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipant.test.dialog deleted file mode 100644 index a770c1cc0c..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipant.test.dialog +++ /dev/null @@ -1,66 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.GetMeetingParticipant", - "property": "conversation.result" - }, - { - "$kind": "Teams.GetMeetingParticipant", - "property": "conversation.resultWithCustomProperties", - "meetingId": "customMeetingId", - "participantId": "customParticipantId", - "tenantId": "customTenantId" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "from": { - "id": "participant-id", - "aadObjectId": "participant-aad-id-1" - }, - "channelData": { - "tenant": { - "id": "tenant-id-1" - }, - "meeting": { - "id": "meeting-id-1" - } - } - } - }, - { - "$kind": "Microsoft.Test.MemoryAssertions", - "assertions": [ - "conversation.result.conversation.conversationType == 'personal'", - "conversation.result.conversation.id == 'a:oneOnOneConversationId'", - "conversation.result.conversation.isGroup == false", - "conversation.result.conversation.name == 'oneOnOne'", - "conversation.result.conversation.tenantId == 'tenantId-Guid'", - "conversation.result.meeting.role == 'Organizer'", - "conversation.result.user.userPrincipalName == 'userPrincipalName-1'", - "conversation.resultWithCustomProperties.conversation.conversationType == 'personal'", - "conversation.resultWithCustomProperties.conversation.id == 'a:oneOnOneConversationId'", - "conversation.resultWithCustomProperties.conversation.isGroup == false", - "conversation.resultWithCustomProperties.conversation.name == 'oneOnOne'", - "conversation.resultWithCustomProperties.conversation.tenantId == 'tenantId-Guid'", - "conversation.resultWithCustomProperties.meeting.role == 'Organizer'", - "conversation.resultWithCustomProperties.user.userPrincipalName == 'userPrincipalName-1'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipantError.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipantError.test.dialog deleted file mode 100644 index e4d8551cdd..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipantError.test.dialog +++ /dev/null @@ -1,42 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.GetMeetingParticipant", - "property": "$result" - }, - { - "$kind": "Microsoft.SendActivity", - "activity": "${$result}" - } - ] - }, - { - "$kind": "Microsoft.OnError", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.dialogEvent.value.message}" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserSays", - "text": "hi" - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "Teams.GetMeetingParticipant works only on the Teams channel." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipantErrorWithAdapter.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipantErrorWithAdapter.test.dialog deleted file mode 100644 index eab01c2edc..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipantErrorWithAdapter.test.dialog +++ /dev/null @@ -1,43 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.GetMeetingParticipant", - "property": "$result", - "participantId": "=turn.channelData.doesNotExist" - }, - { - "$kind": "Microsoft.SendActivity", - "activity": "${$result}" - } - ] - }, - { - "$kind": "Microsoft.OnError", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.dialogEvent.value.message}" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserSays", - "text": "hi" - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "Teams.GetMeetingParticipant could not determine the participant id by expression value provided. participantId is required." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMember.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMember.test.dialog deleted file mode 100644 index 90d44b865c..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMember.test.dialog +++ /dev/null @@ -1,65 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.GetMember", - "property": "conversation.result" - }, - { - "$kind": "Teams.GetMember", - "property": "conversation.resultWithCustomProperties", - "memberId": "customMemberId" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "from": { - "id": "member-id" - }, - "channelData": { - "tenant": { - "id": "tenant-id-1" - }, - "meeting": { - "id": "meeting-id-1" - } - } - } - }, - { - "$kind": "Microsoft.Test.MemoryAssertions", - "assertions": [ - "conversation.result.email == 'User.0@microsoft.com'", - "conversation.result.givenName == 'User'", - "conversation.result.id == '29:User-Id-0'", - "conversation.result.name == 'User Name-0'", - "conversation.result.objectId == 'User-0-Object-Id'", - "conversation.result.surname == 'Surname-0'", - "conversation.result.tenantId == 'tenant-id-1'", - "conversation.result.userPrincipalName == 'user0@microsoft.com'", - "conversation.resultWithCustomProperties.email == 'User.0@microsoft.com'", - "conversation.resultWithCustomProperties.givenName == 'User'", - "conversation.resultWithCustomProperties.id == '29:User-Id-0'", - "conversation.resultWithCustomProperties.name == 'User Name-0'", - "conversation.resultWithCustomProperties.objectId == 'User-0-Object-Id'", - "conversation.resultWithCustomProperties.surname == 'Surname-0'", - "conversation.resultWithCustomProperties.tenantId == 'tenant-id-1'", - "conversation.resultWithCustomProperties.userPrincipalName == 'user0@microsoft.com'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMemberError.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMemberError.test.dialog deleted file mode 100644 index 03ed714e8c..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMemberError.test.dialog +++ /dev/null @@ -1,42 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.GetMember", - "property": "$result" - }, - { - "$kind": "Microsoft.SendActivity", - "activity": "${$result}" - } - ] - }, - { - "$kind": "Microsoft.OnError", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.dialogEvent.value.message}" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserSays", - "text": "hi" - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "Teams.GetMember works only on the Teams channel." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMemberErrorWithAdapter.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMemberErrorWithAdapter.test.dialog deleted file mode 100644 index 70b25fc571..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMemberErrorWithAdapter.test.dialog +++ /dev/null @@ -1,43 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.GetMember", - "property": "$result", - "memberId": "=turn.activity.channelData.doesNotExist" - }, - { - "$kind": "Microsoft.SendActivity", - "activity": "${$result}" - } - ] - }, - { - "$kind": "Microsoft.OnError", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.dialogEvent.value.message}" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserSays", - "text": "hi" - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "Missing MemberId in Teams.GetMember." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedMembers.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedMembers.test.dialog deleted file mode 100644 index 07dcae5c4f..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedMembers.test.dialog +++ /dev/null @@ -1,68 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.GetPagedMembers", - "property": "conversation.result" - }, - { - "$kind": "Teams.GetPagedMembers", - "property": "conversation.resultWithCustomProperties", - "continuationToken": "token", - "pageSize": 2 - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "from": { - "id": "member-id" - }, - "channelData": { - "tenant": { - "id": "tenant-id-1" - }, - "meeting": { - "id": "meeting-id-1" - } - } - } - }, - { - "$kind": "Microsoft.Test.MemoryAssertions", - "assertions": [ - "conversation.result.continuationToken == 'token'", - "conversation.result.members[0].email == 'User.0@microsoft.com'", - "conversation.result.members[0].id == '29:User-Id-0'", - "conversation.result.members[0].objectId == 'User-0-Object-Id'", - "conversation.result.members[1].email == 'User.1@microsoft.com'", - "conversation.result.members[1].id == '29:User-Id-1'", - "conversation.result.members[1].objectId == 'User-1-Object-Id'", - "conversation.result.members[2].email == 'User.2@microsoft.com'", - "conversation.result.members[2].id == '29:User-Id-2'", - "conversation.result.members[2].objectId == 'User-2-Object-Id'", - "conversation.resultWithCustomProperties.continuationToken == 'customToken'", - "conversation.resultWithCustomProperties.members[0].email == 'User.0@microsoft.com'", - "conversation.resultWithCustomProperties.members[0].id == '29:User-Id-0'", - "conversation.resultWithCustomProperties.members[0].objectId == 'User-0-Object-Id'", - "conversation.resultWithCustomProperties.members[1].email == 'User.1@microsoft.com'", - "conversation.resultWithCustomProperties.members[1].id == '29:User-Id-1'", - "conversation.resultWithCustomProperties.members[1].objectId == 'User-1-Object-Id'", - "not(exists(conversation.resultWithCustomProperties.members[2]))" - ] - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedMembersError.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedMembersError.test.dialog deleted file mode 100644 index 2f2f705eb2..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedMembersError.test.dialog +++ /dev/null @@ -1,42 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.GetPagedMembers", - "property": "$result" - }, - { - "$kind": "Microsoft.SendActivity", - "activity": "${$result}" - } - ] - }, - { - "$kind": "Microsoft.OnError", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.dialogEvent.value.message}" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserSays", - "text": "hi" - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "Teams.GetPagedMembers works only on the Teams channel." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedTeamMembers.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedTeamMembers.test.dialog deleted file mode 100644 index 559b99576c..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedTeamMembers.test.dialog +++ /dev/null @@ -1,65 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.GetPagedTeamMembers", - "property": "conversation.result" - }, - { - "$kind": "Teams.GetPagedTeamMembers", - "property": "conversation.resultWithCustomProperties", - "continuationToken": "token", - "pageSize": 2 - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "channelData": { - "tenant": { - "id": "tenant-id-1" - }, - "team": { - "id": "team-id-1" - } - } - } - }, - { - "$kind": "Microsoft.Test.MemoryAssertions", - "assertions": [ - "conversation.result.continuationToken == 'token'", - "conversation.result.members[0].email == 'User.0@microsoft.com'", - "conversation.result.members[0].id == '29:User-Id-0'", - "conversation.result.members[0].objectId == 'User-0-Object-Id'", - "conversation.result.members[1].email == 'User.1@microsoft.com'", - "conversation.result.members[1].id == '29:User-Id-1'", - "conversation.result.members[1].objectId == 'User-1-Object-Id'", - "conversation.result.members[2].email == 'User.2@microsoft.com'", - "conversation.result.members[2].id == '29:User-Id-2'", - "conversation.result.members[2].objectId == 'User-2-Object-Id'", - "conversation.resultWithCustomProperties.continuationToken == 'customToken'", - "conversation.resultWithCustomProperties.members[0].email == 'User.0@microsoft.com'", - "conversation.resultWithCustomProperties.members[0].id == '29:User-Id-0'", - "conversation.resultWithCustomProperties.members[0].objectId == 'User-0-Object-Id'", - "conversation.resultWithCustomProperties.members[1].email == 'User.1@microsoft.com'", - "conversation.resultWithCustomProperties.members[1].id == '29:User-Id-1'", - "conversation.resultWithCustomProperties.members[1].objectId == 'User-1-Object-Id'", - "not(exists(conversation.resultWithCustomProperties.members[2]))" - ] - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedTeamMembersError.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedTeamMembersError.test.dialog deleted file mode 100644 index f8b11b4486..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedTeamMembersError.test.dialog +++ /dev/null @@ -1,42 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.GetPagedTeamMembers", - "property": "$result" - }, - { - "$kind": "Microsoft.SendActivity", - "activity": "${$result}" - } - ] - }, - { - "$kind": "Microsoft.OnError", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.dialogEvent.value.message}" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserSays", - "text": "hi" - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "Teams.GetPagedTeamMembers works only on the Teams channel." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamChannels.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamChannels.test.dialog deleted file mode 100644 index a5e4697ba9..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamChannels.test.dialog +++ /dev/null @@ -1,58 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.GetTeamChannels", - "property": "conversation.result" - }, - { - "$kind": "Teams.GetTeamChannels", - "property": "conversation.resultWithCustomProperties", - "teamId": "customTeamId" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "channelData": { - "tenant": { - "id": "tenant-id-1" - }, - "team": { - "id": "team-id-1" - } - } - } - }, - { - "$kind": "Microsoft.Test.MemoryAssertions", - "assertions": [ - "conversation.result[0].id == '19:ChannelIdgeneralChannelId@thread.skype'", - "conversation.result[0].name == 'Testing0'", - "conversation.result[1].id == '19:somechannelId2e5ab3df9ae9b594bdb@thread.skype'", - "conversation.result[1].name == 'Testing1'", - "conversation.result[2].id == '19:somechannelId388ade16aa4dd375e69@thread.skype'", - "conversation.result[2].name == 'Testing2'", - "conversation.resultWithCustomProperties[0].id == '19:ChannelIdgeneralChannelId@thread.skype'", - "conversation.resultWithCustomProperties[0].name == 'Testing0'", - "conversation.resultWithCustomProperties[1].id == '19:somechannelId2e5ab3df9ae9b594bdb@thread.skype'", - "conversation.resultWithCustomProperties[1].name == 'Testing1'", - "conversation.resultWithCustomProperties[2].id == '19:somechannelId388ade16aa4dd375e69@thread.skype'", - "conversation.resultWithCustomProperties[2].name == 'Testing2'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamChannelsError.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamChannelsError.test.dialog deleted file mode 100644 index 7d6735ab0f..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamChannelsError.test.dialog +++ /dev/null @@ -1,42 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.GetTeamChannels", - "property": "$result" - }, - { - "$kind": "Microsoft.SendActivity", - "activity": "${$result}" - } - ] - }, - { - "$kind": "Microsoft.OnError", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.dialogEvent.value.message}" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserSays", - "text": "hi" - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "Teams.GetTeamChannels works only on the Teams channel." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamDetails.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamDetails.test.dialog deleted file mode 100644 index 49d9f9068e..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamDetails.test.dialog +++ /dev/null @@ -1,52 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.GetTeamDetails", - "property": "conversation.result" - }, - { - "$kind": "Teams.GetTeamDetails", - "property": "conversation.resultWithCustomProperties", - "teamId": "customTeamId" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "channelData": { - "tenant": { - "id": "tenant-id-1" - }, - "team": { - "id": "team-id-1" - } - } - } - }, - { - "$kind": "Microsoft.Test.MemoryAssertions", - "assertions": [ - "conversation.result.aadGroupId == 'Team-aadGroupId'", - "conversation.result.id == '19:generalChannelIdgeneralChannelId@thread.skype'", - "conversation.result.name == 'TeamName'", - "conversation.resultWithCustomProperties.aadGroupId == 'Team-aadGroupId'", - "conversation.resultWithCustomProperties.id == '19:generalChannelIdgeneralChannelId@thread.skype'", - "conversation.resultWithCustomProperties.name == 'TeamName'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamDetailsError.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamDetailsError.test.dialog deleted file mode 100644 index a501cfdbef..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamDetailsError.test.dialog +++ /dev/null @@ -1,42 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.GetTeamDetails", - "property": "$result" - }, - { - "$kind": "Microsoft.SendActivity", - "activity": "${$result}" - } - ] - }, - { - "$kind": "Microsoft.OnError", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.dialogEvent.value.message}" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserSays", - "text": "hi" - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "Teams.GetTeamDetails works only on the Teams channel." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMember.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMember.test.dialog deleted file mode 100644 index 4a45b57cf6..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMember.test.dialog +++ /dev/null @@ -1,64 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "enableTrace": true, - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.GetTeamMember", - "property": "conversation.result" - }, - { - "$kind": "Teams.GetTeamMember", - "property": "conversation.resultWithCustomProperties", - "memberId": "customMemberId", - "teamId": "customTeamId" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "channelData": { - "tenant": { - "id": "tenant-id-1" - }, - "team": { - "id": "team-id-1" - } - } - } - }, - { - "$kind": "Microsoft.Test.MemoryAssertions", - "assertions": [ - "conversation.result.email == 'User.0@microsoft.com'", - "conversation.result.givenName == 'User'", - "conversation.result.id == '29:User-Id-0'", - "conversation.result.name == 'User Name-0'", - "conversation.result.objectId == 'User-0-Object-Id'", - "conversation.result.surname == 'Surname-0'", - "conversation.result.tenantId == 'tenant-id-1'", - "conversation.result.userPrincipalName == 'user0@microsoft.com'", - "conversation.resultWithCustomProperties.email == 'User.0@microsoft.com'", - "conversation.resultWithCustomProperties.givenName == 'User'", - "conversation.resultWithCustomProperties.id == '29:User-Id-0'", - "conversation.resultWithCustomProperties.name == 'User Name-0'", - "conversation.resultWithCustomProperties.objectId == 'User-0-Object-Id'", - "conversation.resultWithCustomProperties.surname == 'Surname-0'", - "conversation.resultWithCustomProperties.tenantId == 'tenant-id-1'", - "conversation.resultWithCustomProperties.userPrincipalName == 'user0@microsoft.com'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMemberError.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMemberError.test.dialog deleted file mode 100644 index 6f97c8bc51..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMemberError.test.dialog +++ /dev/null @@ -1,42 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.GetTeamMember", - "property": "$result" - }, - { - "$kind": "Microsoft.SendActivity", - "activity": "${$result}" - } - ] - }, - { - "$kind": "Microsoft.OnError", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.dialogEvent.value.message}" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserSays", - "text": "hi" - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "Teams.GetTeamMember works only on the Teams channel." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMemberErrorWithAdapter.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMemberErrorWithAdapter.test.dialog deleted file mode 100644 index ad843a82c7..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMemberErrorWithAdapter.test.dialog +++ /dev/null @@ -1,43 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.GetTeamMember", - "property": "$result", - "memberId": "=turn.activity.channelData.doesNotExist" - }, - { - "$kind": "Microsoft.SendActivity", - "activity": "${$result}" - } - ] - }, - { - "$kind": "Microsoft.OnError", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.dialogEvent.value.message}" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserSays", - "text": "hi" - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "Missing MemberId in Teams.GetTeamMember." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendAppBasedLinkQueryResponse.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendAppBasedLinkQueryResponse.test.dialog deleted file mode 100644 index 188d548469..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendAppBasedLinkQueryResponse.test.dialog +++ /dev/null @@ -1,50 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.SendAppBasedLinkQueryResponse", - "card": { - "type": "message", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.thumbnail", - "content": { - "title": "card-title" - } - } - ] - } - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReplyActivity", - "assertions": [ - "type == 'invokeResponse'", - "conversation.id == 'Action_SendAppBasedLinkQueryResponse'", - "value.body.composeExtension.attachmentLayout == 'list'", - "value.body.composeExtension.type == 'result'", - "value.body.composeExtension.attachments[0].contentType == 'application/vnd.microsoft.card.thumbnail'", - "value.body.composeExtension.attachments[0].content.title == 'card-title'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendAppBasedLinkQueryResponseError.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendAppBasedLinkQueryResponseError.test.dialog deleted file mode 100644 index 2323a1cb05..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendAppBasedLinkQueryResponseError.test.dialog +++ /dev/null @@ -1,79 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "recognizer": { - "$kind": "Microsoft.RegexRecognizer", - "intents": [ - { - "intent": "NoCard", - "pattern": "NoCard" - }, - { - "intent": "NoAttachments", - "pattern": "NoAttachments" - } - ] - }, - "triggers": [ - { - "$kind": "Microsoft.OnIntent", - "intent": "NoCard", - "actions": [ - { - "$kind": "Teams.SendAppBasedLinkQueryResponse" - } - ] - }, - { - "$kind": "Microsoft.OnIntent", - "intent": "NoAttachments", - "actions": [ - { - "$kind": "Teams.SendAppBasedLinkQueryResponse", - "card": { - "type": "message" - } - } - ] - }, - { - "$kind": "Microsoft.OnError", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.dialogEvent.value.message}" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "NoCard", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "An activity with attachments is required for Teams.SendAppBasedLinkQueryResponse." - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "NoAttachments", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "Invalid activity. An attachment is required for Teams.SendAppBasedLinkQueryResponse." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEActionResponse.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEActionResponse.test.dialog deleted file mode 100644 index 4f83b08266..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEActionResponse.test.dialog +++ /dev/null @@ -1,56 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.SendMEActionResponse", - "title": "some title", - "height": 1, - "width": 2, - "completionBotId": "someBotId", - "card": { - "type": "message", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.thumbnail", - "content": { - "title": "card-title" - } - } - ] - } - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReplyActivity", - "assertions": [ - "type == 'invokeResponse'", - "conversation.id == 'Action_SendMEActionResponse'", - "value.body.task.value.completionBotId == 'someBotId'", - "value.body.task.value.height == 1", - "value.body.task.value.title == 'some title'", - "value.body.task.value.width == 2", - "value.body.task.value.card.contentType == 'application/vnd.microsoft.card.thumbnail'", - "value.body.task.value.card.content.title == 'card-title'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEActionResponseError.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEActionResponseError.test.dialog deleted file mode 100644 index 8fd4f9bb21..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEActionResponseError.test.dialog +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "recognizer": { - "$kind": "Microsoft.RegexRecognizer", - "intents": [ - { - "intent": "NoAttachments", - "pattern": "NoAttachments" - } - ] - }, - "triggers": [ - { - "$kind": "Microsoft.OnIntent", - "intent": "NoAttachments", - "actions": [ - { - "$kind": "Teams.SendMEActionResponse", - "card": { - "type": "message" - } - } - ] - }, - { - "$kind": "Microsoft.OnError", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.dialogEvent.value.message}" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "NoAttachments", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "Missing attachments in Teams.SendMEActionResponse." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAttachmentsResponse.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAttachmentsResponse.test.dialog deleted file mode 100644 index 5ae8adb325..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAttachmentsResponse.test.dialog +++ /dev/null @@ -1,50 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.SendMEAttachmentsResponse", - "attachments": { - "type": "message", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.thumbnail", - "content": { - "title": "card-title" - } - } - ] - } - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReplyActivity", - "assertions": [ - "type == 'invokeResponse'", - "conversation.id == 'Action_SendMEAttachmentsResponse'", - "value.body.composeExtension.attachmentLayout == 'list'", - "value.body.composeExtension.type == 'result'", - "value.body.composeExtension.attachments[0].contentType == 'application/vnd.microsoft.card.thumbnail'", - "value.body.composeExtension.attachments[0].content.title == 'card-title'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAttachmentsResponseError.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAttachmentsResponseError.test.dialog deleted file mode 100644 index ed4f18b0b0..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAttachmentsResponseError.test.dialog +++ /dev/null @@ -1,44 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.SendMEAttachmentsResponse", - "attachments": { - "type": "message" - } - } - ] - }, - { - "$kind": "Microsoft.OnError", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.dialogEvent.value.message}" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "Missing attachments in Teams.SendMEAttachmentsResponse." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponse.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponse.test.dialog deleted file mode 100644 index 6acfa74080..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponse.test.dialog +++ /dev/null @@ -1,41 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.SendMEAuthResponse", - "connectionName": "testConnection", - "title": "test title" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReplyActivity", - "assertions": [ - "type == 'invokeResponse'", - "conversation.id == 'Action_SendMEAuthResponse'", - "value.body.composeExtension.type == 'auth'", - "value.body.composeExtension.suggestedActions.actions[0].title == 'test title'", - "value.body.composeExtension.suggestedActions.actions[0].type == 'openUrl'", - "startsWith(value.body.composeExtension.suggestedActions.actions[0].value, 'https://fake.com/oauthsignin/testConnection')" - ] - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponseError.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponseError.test.dialog deleted file mode 100644 index b860a92226..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponseError.test.dialog +++ /dev/null @@ -1,43 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.SendMEAuthResponse", - "connectionName": "someConnection", - "title": "someTitle" - } - ] - }, - { - "$kind": "Microsoft.OnError", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.dialogEvent.value.message}" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "NoConnectionName", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "Teams.SendMEAuthResponse: not supported by the current adapter." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponseErrorWithAdapter.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponseErrorWithAdapter.test.dialog deleted file mode 100644 index 7d7425ba9b..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponseErrorWithAdapter.test.dialog +++ /dev/null @@ -1,88 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "recognizer": { - "$kind": "Microsoft.RegexRecognizer", - "intents": [ - { - "intent": "NoConnectionName", - "pattern": "NoConnectionName" - }, - { - "intent": "NoTitle", - "pattern": "NoTitle" - } - ] - }, - "triggers": [ - { - "$kind": "Microsoft.OnIntent", - "intent": "NoConnectionName", - "actions": [ - { - "$kind": "Teams.SendMEAuthResponse", - "connectionName": "=turn.channelData.DoesNotExist" - } - ] - }, - { - "$kind": "Microsoft.OnIntent", - "intent": "NoTitle", - "actions": [ - { - "$kind": "Teams.SendMEAuthResponse", - "connectionName": "testConnection", - "title": "=turn.channelData.doesNotExist" - } - ] - }, - { - "$kind": "Microsoft.OnIntent", - "intent": "NoAttachments", - "actions": [ - { - "$kind": "Teams.SendMEAuthResponse" - } - ] - }, - { - "$kind": "Microsoft.OnError", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.dialogEvent.value.message}" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "NoConnectionName", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "A valid ConnectionName is required for auth responses." - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "NoTitle", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "A valid Title is required for auth responses." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEBotMessagePreviewResponse.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEBotMessagePreviewResponse.test.dialog deleted file mode 100644 index 74343b9138..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEBotMessagePreviewResponse.test.dialog +++ /dev/null @@ -1,52 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.SendMEBotMessagePreviewResponse", - "card": { - "type": "message", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.thumbnail", - "content": { - "title": "card-title" - } - } - ] - } - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReplyActivity", - "assertions": [ - "type == 'invokeResponse'", - "conversation.id == 'Action_SendMEBotMessagePreviewResponse'", - "value.body.composeExtension.type == 'botMessagePreview'", - "value.body.composeExtension.activityPreview.attachmentLayout == 'list'", - "value.body.composeExtension.activityPreview.inputHint == 'acceptingInput'", - "value.body.composeExtension.activityPreview.type == 'message'", - "value.body.composeExtension.activityPreview.attachments[0].contentType == 'application/vnd.microsoft.card.thumbnail'", - "value.body.composeExtension.activityPreview.attachments[0].content.title == 'card-title'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEBotMessagePreviewResponseError.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEBotMessagePreviewResponseError.test.dialog deleted file mode 100644 index 3ef5fd3bac..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEBotMessagePreviewResponseError.test.dialog +++ /dev/null @@ -1,79 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "recognizer": { - "$kind": "Microsoft.RegexRecognizer", - "intents": [ - { - "intent": "NoCard", - "pattern": "NoCard" - }, - { - "intent": "NoAttachments", - "pattern": "NoAttachments" - } - ] - }, - "triggers": [ - { - "$kind": "Microsoft.OnIntent", - "intent": "NoCard", - "actions": [ - { - "$kind": "Teams.SendMEBotMessagePreviewResponse" - } - ] - }, - { - "$kind": "Microsoft.OnIntent", - "intent": "NoAttachments", - "actions": [ - { - "$kind": "Teams.SendMEBotMessagePreviewResponse", - "card": { - "type": "message" - } - } - ] - }, - { - "$kind": "Microsoft.OnError", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.dialogEvent.value.message}" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "NoCard", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "A valid Card is required for Teams.SendMEBotMessagePreviewResponse." - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "NoAttachments", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "Invalid activity. An attachment is required for Teams.SendMEBotMessagePreviewResponse." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponse.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponse.test.dialog deleted file mode 100644 index 65d8447602..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponse.test.dialog +++ /dev/null @@ -1,39 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.SendMEConfigQuerySettingUrlResponse", - "configUrl": "someBaseUrl.com/somePage.html" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReplyActivity", - "assertions": [ - "type == 'invokeResponse'", - "conversation.id == 'Action_SendMEConfigQuerySettingUrlResponse'", - "value.body.composeExtension.type == 'config'", - "value.body.composeExtension.suggestedActions.actions[0].type == 'openUrl'", - "value.body.composeExtension.suggestedActions.actions[0].value == 'someBaseUrl.com/somePage.html'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponseError.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponseError.test.dialog deleted file mode 100644 index 6245df449d..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponseError.test.dialog +++ /dev/null @@ -1,32 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.SendMEConfigQuerySettingUrlResponse" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "ConfigUrl is required for Teams.SendMEConfigQuerySettingUrlResponse." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEMessageResponse.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEMessageResponse.test.dialog deleted file mode 100644 index 0efa1dfde0..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEMessageResponse.test.dialog +++ /dev/null @@ -1,38 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.SendMEMessageResponse", - "message": "i want to send this to the user" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReplyActivity", - "assertions": [ - "type == 'invokeResponse'", - "conversation.id == 'Action_SendMEMessageResponse'", - "value.body.composeExtension.type == 'message'", - "value.body.composeExtension.text == 'i want to send this to the user'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEMessageResponseError.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEMessageResponseError.test.dialog deleted file mode 100644 index 6f4f595c4b..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEMessageResponseError.test.dialog +++ /dev/null @@ -1,32 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.SendMEMessageResponse" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "A Message is required for Teams.SendMEMessageResponse." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMESelectItemResponse.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMESelectItemResponse.test.dialog deleted file mode 100644 index b9a8f8ddb2..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMESelectItemResponse.test.dialog +++ /dev/null @@ -1,50 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.SendMESelectItemResponse", - "card": { - "type": "message", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.thumbnail", - "content": { - "title": "card-title" - } - } - ] - } - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReplyActivity", - "assertions": [ - "type == 'invokeResponse'", - "conversation.id == 'Action_SendMESelectItemResponse'", - "value.body.composeExtension.type == 'result'", - "value.body.composeExtension.attachmentLayout == 'list'", - "value.body.composeExtension.attachments[0].contentType == 'application/vnd.microsoft.card.thumbnail'", - "value.body.composeExtension.attachments[0].content.title == 'card-title'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMESelectItemResponseError.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMESelectItemResponseError.test.dialog deleted file mode 100644 index a78eb61c61..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMESelectItemResponseError.test.dialog +++ /dev/null @@ -1,79 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "recognizer": { - "$kind": "Microsoft.RegexRecognizer", - "intents": [ - { - "intent": "NoCard", - "pattern": "NoCard" - }, - { - "intent": "NoAttachments", - "pattern": "NoAttachments" - } - ] - }, - "triggers": [ - { - "$kind": "Microsoft.OnIntent", - "intent": "NoCard", - "actions": [ - { - "$kind": "Teams.SendMESelectItemResponse" - } - ] - }, - { - "$kind": "Microsoft.OnIntent", - "intent": "NoAttachments", - "actions": [ - { - "$kind": "Teams.SendMESelectItemResponse", - "card": { - "type": "message" - } - } - ] - }, - { - "$kind": "Microsoft.OnError", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.dialogEvent.value.message}" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "NoCard", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "A valid card is required for Teams.SendMESelectItemResponse." - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "NoAttachments", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "Invalid activity. An attachment is required for Teams.SendMESelectItemResponse." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMessageToTeamsChannel.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMessageToTeamsChannel.test.dialog deleted file mode 100644 index 6996effedb..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMessageToTeamsChannel.test.dialog +++ /dev/null @@ -1,63 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.SendMessageToTeamsChannel", - "conversationReferenceProperty": "conversation.result", - "activity": { - "type": "message", - "text": "This is a message to a Teams Channel" - } - }, - { - "$kind": "Teams.SendMessageToTeamsChannel", - "conversationReferenceProperty": "conversation.resultWithCustomProperties", - "activity": { - "type": "message", - "text": "This is a message to a Teams Channel with custom properties" - }, - "teamsChannelId": "customTeamsChannel" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "channelData": { - "channel": { - "id": "fakeTeamsChannelToSendTo" - } - } - } - }, - { - "$kind": "Microsoft.Test.MemoryAssertions", - "assertions": [ - "conversation.result.activityId == '0'", - "conversation.result.channelId == 'msteams'", - "conversation.result.conversation.conversationType == 'groupChat'", - "conversation.result.conversation.isGroup == true", - "conversation.result.conversation.name == 'group'", - "conversation.result.conversation.tenantId == 'tenantId-Guid'", - "conversation.resultWithCustomProperties.activityId == '0'", - "conversation.resultWithCustomProperties.channelId == 'msteams'", - "conversation.resultWithCustomProperties.conversation.conversationType == 'groupChat'", - "conversation.resultWithCustomProperties.conversation.isGroup == true", - "conversation.resultWithCustomProperties.conversation.name == 'group'", - "conversation.resultWithCustomProperties.conversation.tenantId == 'tenantId-Guid'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMessageToTeamsChannelError.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMessageToTeamsChannelError.test.dialog deleted file mode 100644 index 19419f3b1c..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMessageToTeamsChannelError.test.dialog +++ /dev/null @@ -1,37 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.SendMessageToTeamsChannel" - } - ] - }, - { - "$kind": "Microsoft.OnError", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.dialogEvent.value.message}" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserSays", - "text": "hi" - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "Teams.SendMessageToTeamsChannel works only on the Teams channel." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabAuthResponseError.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabAuthResponseError.test.dialog deleted file mode 100644 index b5e40d7263..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabAuthResponseError.test.dialog +++ /dev/null @@ -1,43 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.SendTabAuthResponse", - "connectionName": "someConnection", - "title": "someTitle" - } - ] - }, - { - "$kind": "Microsoft.OnError", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.dialogEvent.value.message}" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "NoConnectionName", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "Teams.SendTabAuthResponse: not supported by the current adapter." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabAuthResponseErrorWithAdapter.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabAuthResponseErrorWithAdapter.test.dialog deleted file mode 100644 index 8172f1d27c..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabAuthResponseErrorWithAdapter.test.dialog +++ /dev/null @@ -1,88 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "recognizer": { - "$kind": "Microsoft.RegexRecognizer", - "intents": [ - { - "intent": "NoConnectionName", - "pattern": "NoConnectionName" - }, - { - "intent": "NoTitle", - "pattern": "NoTitle" - } - ] - }, - "triggers": [ - { - "$kind": "Microsoft.OnIntent", - "intent": "NoConnectionName", - "actions": [ - { - "$kind": "Teams.SendTabAuthResponse", - "connectionName": "=turn.channelData.DoesNotExist" - } - ] - }, - { - "$kind": "Microsoft.OnIntent", - "intent": "NoTitle", - "actions": [ - { - "$kind": "Teams.SendTabAuthResponse", - "connectionName": "testConnection", - "title": "=turn.channelData.doesNotExist" - } - ] - }, - { - "$kind": "Microsoft.OnIntent", - "intent": "NoAttachments", - "actions": [ - { - "$kind": "Teams.SendTabAuthResponse" - } - ] - }, - { - "$kind": "Microsoft.OnError", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.dialogEvent.value.message}" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "NoConnectionName", - "name": "tab/fetch" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "A valid ConnectionName is required for auth responses." - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "NoTitle", - "name": "tab/fetch" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "A valid Title is required for auth responses." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabCardResponse.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabCardResponse.test.dialog deleted file mode 100644 index 7e06e3ecde..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabCardResponse.test.dialog +++ /dev/null @@ -1,66 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.SendTabCardResponse", - "cards": { - "type": "message", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.adaptive", - "content": { - "type": "AdaptiveCard", - "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", - "version": "1.2", - "body": [ - { - "type": "Container", - "items": [ - { - "type": "RichTextBlock", - "inlines": [ - { - "type": "TextRun", - "text": "Success!" - } - ] - } - ] - } - ] - } - } - ] - } - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "name": "tab/fetch" - } - }, - { - "$kind": "Microsoft.Test.AssertReplyActivity", - "assertions": [ - "type == 'invokeResponse'", - "conversation.id == 'Action_SendTabCardResponse'", - "value.body.tab.type == 'continue'", - "value.body.tab.value.cards[0].card.body[0].items[0].inlines[0].text == 'Success!'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabCardResponseError.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabCardResponseError.test.dialog deleted file mode 100644 index 1e8a6bdc8c..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabCardResponseError.test.dialog +++ /dev/null @@ -1,79 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "recognizer": { - "$kind": "Microsoft.RegexRecognizer", - "intents": [ - { - "intent": "NoCard", - "pattern": "NoCard" - }, - { - "intent": "NoAttachments", - "pattern": "NoAttachments" - } - ] - }, - "triggers": [ - { - "$kind": "Microsoft.OnIntent", - "intent": "NoCard", - "actions": [ - { - "$kind": "Teams.SendTabCardResponse" - } - ] - }, - { - "$kind": "Microsoft.OnIntent", - "intent": "NoAttachments", - "actions": [ - { - "$kind": "Teams.SendTabCardResponse", - "cards": { - - } - } - ] - }, - { - "$kind": "Microsoft.OnError", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.dialogEvent.value.message}" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "NoCard", - "name": "tab/fetch" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "Valid Cards are required for Teams.SendTabCardResponse." - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "NoAttachments", - "name": "tab/fetch" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "Invalid activity. Attachment(s) are required for Teams.SendTabCardResponse." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleCardResponse.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleCardResponse.test.dialog deleted file mode 100644 index d3c0c285fd..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleCardResponse.test.dialog +++ /dev/null @@ -1,56 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.SendTaskModuleCardResponse", - "title": "some title", - "height": 1, - "width": 2, - "completionBotId": "someBotId", - "card": { - "type": "message", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.thumbnail", - "content": { - "title": "card-title" - } - } - ] - } - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReplyActivity", - "assertions": [ - "type == 'invokeResponse'", - "conversation.id == 'Action_SendTaskModuleCardResponse'", - "value.body.task.value.completionBotId == 'someBotId'", - "value.body.task.value.height == 1", - "value.body.task.value.title == 'some title'", - "value.body.task.value.width == 2", - "value.body.task.value.card.contentType == 'application/vnd.microsoft.card.thumbnail'", - "value.body.task.value.card.content.title == 'card-title'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleCardResponseError.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleCardResponseError.test.dialog deleted file mode 100644 index 20e353e108..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleCardResponseError.test.dialog +++ /dev/null @@ -1,79 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "recognizer": { - "$kind": "Microsoft.RegexRecognizer", - "intents": [ - { - "intent": "NoCard", - "pattern": "NoCard" - }, - { - "intent": "NoAttachments", - "pattern": "NoAttachments" - } - ] - }, - "triggers": [ - { - "$kind": "Microsoft.OnIntent", - "intent": "NoCard", - "actions": [ - { - "$kind": "Teams.SendTaskModuleCardResponse" - } - ] - }, - { - "$kind": "Microsoft.OnIntent", - "intent": "NoAttachments", - "actions": [ - { - "$kind": "Teams.SendTaskModuleCardResponse", - "card": { - "type": "message" - } - } - ] - }, - { - "$kind": "Microsoft.OnError", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.dialogEvent.value.message}" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "NoCard", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "A valid Card is required for Teams.SendTaskModuleCardResponse." - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "NoAttachments", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "Invalid activity. An attachment is required for Teams.SendTaskModuleCardResponse." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleMessageResponse.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleMessageResponse.test.dialog deleted file mode 100644 index 5819cd6331..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleMessageResponse.test.dialog +++ /dev/null @@ -1,37 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.SendTaskModuleMessageResponse", - "message": "i want to send this to the user" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReplyActivity", - "assertions": [ - "type == 'invokeResponse'", - "conversation.id == 'Action_SendTaskModuleMessageResponse'", - "value.body.task.value == 'i want to send this to the user'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleUrlResponse.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleUrlResponse.test.dialog deleted file mode 100644 index 53a2d07eac..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleUrlResponse.test.dialog +++ /dev/null @@ -1,47 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.SendTaskModuleUrlResponse", - "title": "some title", - "height": 1, - "width": 2, - "completionBotId": "someBotId", - "url": "http://thisIsTheMainUrl.com", - "fallbackUrl": "http://thisIsTheFallbackUrl.net/okay/falling/back_now" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReplyActivity", - "assertions": [ - "type == 'invokeResponse'", - "conversation.id == 'Action_SendTaskModuleUrlResponse'", - "value.body.task.value.completionBotId == 'someBotId'", - "value.body.task.value.height == 1", - "value.body.task.value.title == 'some title'", - "value.body.task.value.width == 2", - "value.body.task.value.url == 'http://thisIsTheMainUrl.com'", - "value.body.task.value.fallbackUrl == 'http://thisIsTheFallbackUrl.net/okay/falling/back_now'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleUrlResponseError.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleUrlResponseError.test.dialog deleted file mode 100644 index e30217656b..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleUrlResponseError.test.dialog +++ /dev/null @@ -1,42 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnUnknownIntent", - "actions": [ - { - "$kind": "Teams.SendTaskModuleUrlResponse", - "url": "=turn.channelData.doesNotExist" - } - ] - }, - { - "$kind": "Microsoft.OnError", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.dialogEvent.value.message}" - } - ] - } - ] - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "message", - "text": "hi", - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "Missing Url for Teams.SendTaskModuleUrlResponse." - } - ] -} \ No newline at end of file diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ConditionalTests/ConditionalsTests_OnTeamsActivityTypes.test.dialog b/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ConditionalTests/ConditionalsTests_OnTeamsActivityTypes.test.dialog deleted file mode 100644 index ef348c61ac..0000000000 --- a/tests/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ConditionalTests/ConditionalsTests_OnTeamsActivityTypes.test.dialog +++ /dev/null @@ -1,616 +0,0 @@ -{ - "$schema": "../../../tests.schema", - "$kind": "Microsoft.Test.Script", - "dialog": { - "$kind": "Microsoft.AdaptiveDialog", - "id": "planningTest", - "triggers": [ - { - "$kind": "Microsoft.OnInvokeActivity", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.activity.text}" - } - ] - }, - { - "$kind": "Microsoft.OnConversationUpdateActivity", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "${turn.activity.text}" - } - ] - }, - { - "$kind": "Teams.OnAppBasedLinkQuery", - "condition": "turn.activity.text == 'OnAppBasedLinkQuery'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnAppBasedLinkQuery" - } - ] - }, - { - "$kind": "Teams.OnCardAction", - "condition": "turn.activity.text == 'OnCardAction'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnCardAction" - } - ] - }, - { - "$kind": "Teams.OnChannelCreated", - "condition": "turn.activity.text == 'OnChannelCreated'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnChannelCreated" - } - ] - }, - { - "$kind": "Teams.OnChannelDeleted", - "condition": "turn.activity.text == 'OnChannelDeleted'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnChannelDeleted" - } - ] - }, - { - "$kind": "Teams.OnChannelRenamed", - "condition": "turn.activity.text == 'OnChannelRenamed'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnChannelRenamed" - } - ] - }, - { - "$kind": "Teams.OnChannelRestored", - "condition": "turn.activity.text == 'OnChannelRestored'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnChannelRestored" - } - ] - }, - { - "$kind": "Teams.OnFileConsent", - "condition": "turn.activity.text == 'OnFileConsent'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnFileConsent" - } - ] - }, - { - "$kind": "Teams.OnMECardButtonClicked", - "condition": "turn.activity.text == 'OnCardButtonClicked'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnCardButtonClicked" - } - ] - }, - { - "$kind": "Teams.OnMEConfigQuerySettingUrl", - "condition": "turn.activity.text == 'OnConfigurationQuerySettingUrl'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnConfigurationQuerySettingUrl" - } - ] - }, - { - "$kind": "Teams.OnMEConfigSetting", - "condition": "turn.activity.text == 'OnConfigurationSetting'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnConfigurationSetting" - } - ] - }, - { - "$kind": "Teams.OnMEFetchTask", - "condition": "turn.activity.text == 'OnFetchTask'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnFetchTask" - } - ] - }, - { - "$kind": "Teams.OnMEQuery", - "condition": "turn.activity.text == 'OnQuery'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnQuery" - } - ] - }, - { - "$kind": "Teams.OnMESelectItem", - "condition": "turn.activity.text == 'OnSelectItem'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnSelectItem" - } - ] - }, - { - "$kind": "Teams.OnMESubmitAction", - "condition": "turn.activity.text == 'OnSubmitAction'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnSubmitAction" - } - ] - }, - { - "$kind": "Teams.OnO365ConnectorCardAction", - "condition": "turn.activity.text == 'OnO365ConnectorCardAction'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnO365ConnectorCardAction" - } - ] - }, - { - "$kind": "Teams.OnTaskModuleFetch", - "condition": "turn.activity.text == 'OnTaskModuleFetch'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnTaskModuleFetch" - } - ] - }, - { - "$kind": "Teams.OnTabFetch", - "condition": "turn.activity.text == 'OnTabFetch'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnTabFetch" - } - ] - }, - { - "$kind": "Teams.OnTaskModuleSubmit", - "condition": "turn.activity.text == 'OnTaskModuleSubmit'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnTaskModuleSubmit" - } - ] - }, - { - "$kind": "Teams.OnTabSubmit", - "condition": "turn.activity.text == 'OnTabSubmit'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnTabSubmit" - } - ] - }, - { - "$kind": "Teams.OnTeamArchived", - "condition": "turn.activity.text == 'OnTeamArchived'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnTeamArchived" - } - ] - }, - { - "$kind": "Teams.OnTeamDeleted", - "condition": "turn.activity.text == 'OnTeamDeleted'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnTeamDeleted" - } - ] - }, - { - "$kind": "Teams.OnTeamHardDeleted", - "condition": "turn.activity.text == 'OnTeamHardDeleted'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnTeamHardDeleted" - } - ] - }, - { - "$kind": "Teams.OnTeamRenamed", - "condition": "turn.activity.text == 'OnTeamRenamed'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnTeamRenamed" - } - ] - }, - { - "$kind": "Teams.OnTeamRestored", - "condition": "turn.activity.text == 'OnTeamRestored'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnTeamRestored" - } - ] - }, - { - "$kind": "Teams.OnTeamUnarchived", - "condition": "turn.activity.text == 'OnTeamUnarchived'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "activity": "OnTeamUnarchived" - } - ] - } - ], - "autoEndDialog": false, - "defaultResultProperty": "dialog.result" - }, - "script": [ - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "invoke", - "text": "OnAppBasedLinkQuery", - "value": {}, - "name": "composeExtension/queryLink" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnAppBasedLinkQuery" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "invoke", - "text": "OnCardAction", - "value": {} - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnCardAction" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "conversationUpdate", - "text": "OnChannelCreated", - "channelData": { - "eventType": "channelCreated" - } - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnChannelCreated" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "conversationUpdate", - "text": "OnChannelDeleted", - "channelData": { - "eventType": "channelDeleted" - } - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnChannelDeleted" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "conversationUpdate", - "text": "OnChannelRenamed", - "channelData": { - "eventType": "channelRenamed" - } - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnChannelRenamed" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "conversationUpdate", - "text": "OnChannelRestored", - "channelData": { - "eventType": "channelRestored" - } - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnChannelRestored" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "invoke", - "text": "OnFileConsent", - "value": {}, - "name": "fileConsent/invoke" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnFileConsent" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "invoke", - "text": "OnCardButtonClicked", - "value": {}, - "name": "composeExtension/onCardButtonClicked" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnCardButtonClicked" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "invoke", - "text": "OnConfigurationQuerySettingUrl", - "value": {}, - "name": "composeExtension/querySettingUrl" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnConfigurationQuerySettingUrl" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "invoke", - "text": "OnConfigurationSetting", - "value": {}, - "name": "composeExtension/setting" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnConfigurationSetting" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "invoke", - "text": "OnFetchTask", - "value": {}, - "name": "composeExtension/fetchTask" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnFetchTask" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "invoke", - "text": "OnQuery", - "value": {}, - "name": "composeExtension/query" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnQuery" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "invoke", - "text": "OnSelectItem", - "value": {}, - "name": "composeExtension/selectItem" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnSelectItem" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "invoke", - "text": "OnSubmitAction", - "value": {}, - "name": "composeExtension/submitAction" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnSubmitAction" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "invoke", - "text": "OnO365ConnectorCardAction", - "value": {}, - "name": "actionableMessage/executeAction" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnO365ConnectorCardAction" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "invoke", - "text": "OnTabFetch", - "value": {}, - "name": "tab/fetch" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnTabFetch" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "invoke", - "text": "OnTaskModuleFetch", - "value": {}, - "name": "task/fetch" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnTaskModuleFetch" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "invoke", - "text": "OnTabSubmit", - "value": {}, - "name": "tab/submit" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnTabSubmit" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "invoke", - "text": "OnTaskModuleSubmit", - "value": {}, - "name": "task/submit" - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnTaskModuleSubmit" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "conversationUpdate", - "text": "OnTeamArchived", - "channelData": { - "eventType": "teamArchived" - } - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnTeamArchived" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "conversationUpdate", - "text": "OnTeamDeleted", - "channelData": { - "eventType": "teamDeleted" - } - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnTeamDeleted" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "conversationUpdate", - "text": "OnTeamHardDeleted", - "channelData": { - "eventType": "teamHardDeleted" - } - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnTeamHardDeleted" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "conversationUpdate", - "text": "OnTeamRenamed", - "channelData": { - "eventType": "teamRenamed" - } - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnTeamRenamed" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "conversationUpdate", - "text": "OnTeamRestored", - "channelData": { - "eventType": "teamRestored" - } - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnTeamRestored" - }, - { - "$kind": "Microsoft.Test.UserActivity", - "activity": { - "type": "conversationUpdate", - "text": "OnTeamUnarchived", - "channelData": { - "eventType": "teamUnarchived" - } - } - }, - { - "$kind": "Microsoft.Test.AssertReply", - "text": "OnTeamUnarchived" - } - ] -} \ No newline at end of file diff --git a/tests/skills/common/NuGet.Config b/tests/skills/common/NuGet.Config deleted file mode 100644 index 16e6dfff88..0000000000 --- a/tests/skills/common/NuGet.Config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/tests/Microsoft.Bot.Components.Tests.sln b/tests/unit/Microsoft.Bot.Components.Tests.sln similarity index 94% rename from tests/Microsoft.Bot.Components.Tests.sln rename to tests/unit/Microsoft.Bot.Components.Tests.sln index c9ad6216f0..74801b67a6 100644 --- a/tests/Microsoft.Bot.Components.Tests.sln +++ b/tests/unit/Microsoft.Bot.Components.Tests.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.31112.23 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Bot.Components.Teams", "..\packages\Teams\dotnet\Microsoft.Bot.Components.Teams.csproj", "{1C09226C-3DE0-48BF-BEB7-68F0691908EA}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Bot.Components.Teams", "..\..\packages\Teams\dotnet\Microsoft.Bot.Components.Teams.csproj", "{1C09226C-3DE0-48BF-BEB7-68F0691908EA}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "skills", "skills", "{31CBAEDA-E319-49AE-A662-AA0739205C82}" EndProject @@ -19,7 +19,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "teams", "teams", "{61708441 EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Bot.Components.Teams.Tests", "packages\Microsoft.Bot.Components.Teams.Tests\Microsoft.Bot.Components.Teams.Tests.csproj", "{F6E872DE-52B7-4372-B546-B18B5A495C73}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Bot.Components.Graph", "..\packages\Graph\Microsoft.Bot.Components.Graph.csproj", "{9561BF32-D0EE-464F-981B-7E4298ACDDFB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Bot.Components.Graph", "..\..\packages\Graph\Microsoft.Bot.Components.Graph.csproj", "{9561BF32-D0EE-464F-981B-7E4298ACDDFB}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/tests/skills/calendar/AvailabilityTests.cs b/tests/unit/skills/calendar/AvailabilityTests.cs similarity index 100% rename from tests/skills/calendar/AvailabilityTests.cs rename to tests/unit/skills/calendar/AvailabilityTests.cs diff --git a/tests/skills/calendar/CalendarSkillTestBase.cs b/tests/unit/skills/calendar/CalendarSkillTestBase.cs similarity index 100% rename from tests/skills/calendar/CalendarSkillTestBase.cs rename to tests/unit/skills/calendar/CalendarSkillTestBase.cs diff --git a/tests/skills/calendar/CreateEventTests.cs b/tests/unit/skills/calendar/CreateEventTests.cs similarity index 100% rename from tests/skills/calendar/CreateEventTests.cs rename to tests/unit/skills/calendar/CreateEventTests.cs diff --git a/tests/skills/calendar/CustomActionTests.cs b/tests/unit/skills/calendar/CustomActionTests.cs similarity index 100% rename from tests/skills/calendar/CustomActionTests.cs rename to tests/unit/skills/calendar/CustomActionTests.cs diff --git a/tests/skills/calendar/GetEventTests.cs b/tests/unit/skills/calendar/GetEventTests.cs similarity index 100% rename from tests/skills/calendar/GetEventTests.cs rename to tests/unit/skills/calendar/GetEventTests.cs diff --git a/tests/skills/calendar/Microsoft.Bot.Dialogs.Tests.Skills.Calendar.csproj b/tests/unit/skills/calendar/Microsoft.Bot.Dialogs.Tests.Skills.Calendar.csproj similarity index 91% rename from tests/skills/calendar/Microsoft.Bot.Dialogs.Tests.Skills.Calendar.csproj rename to tests/unit/skills/calendar/Microsoft.Bot.Dialogs.Tests.Skills.Calendar.csproj index 2aa48c5aa1..e98d945c2c 100644 --- a/tests/skills/calendar/Microsoft.Bot.Dialogs.Tests.Skills.Calendar.csproj +++ b/tests/unit/skills/calendar/Microsoft.Bot.Dialogs.Tests.Skills.Calendar.csproj @@ -32,7 +32,7 @@ Always - + Always diff --git a/tests/packages/Microsoft.Bot.Components.Teams.Tests/NuGet.Config b/tests/unit/skills/calendar/NuGet.Config similarity index 100% rename from tests/packages/Microsoft.Bot.Components.Teams.Tests/NuGet.Config rename to tests/unit/skills/calendar/NuGet.Config diff --git a/tests/skills/calendar/RespondToEventTests.cs b/tests/unit/skills/calendar/RespondToEventTests.cs similarity index 100% rename from tests/skills/calendar/RespondToEventTests.cs rename to tests/unit/skills/calendar/RespondToEventTests.cs diff --git a/tests/skills/calendar/TestAssets/AvailabilityTests/GetAvailabilityBreaks.test.dialog b/tests/unit/skills/calendar/TestAssets/AvailabilityTests/GetAvailabilityBreaks.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/AvailabilityTests/GetAvailabilityBreaks.test.dialog rename to tests/unit/skills/calendar/TestAssets/AvailabilityTests/GetAvailabilityBreaks.test.dialog diff --git a/tests/skills/calendar/TestAssets/AvailabilityTests/GetAvailabilityFirst.test.dialog b/tests/unit/skills/calendar/TestAssets/AvailabilityTests/GetAvailabilityFirst.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/AvailabilityTests/GetAvailabilityFirst.test.dialog rename to tests/unit/skills/calendar/TestAssets/AvailabilityTests/GetAvailabilityFirst.test.dialog diff --git a/tests/skills/calendar/TestAssets/AvailabilityTests/GetAvailabilityLast.test.dialog b/tests/unit/skills/calendar/TestAssets/AvailabilityTests/GetAvailabilityLast.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/AvailabilityTests/GetAvailabilityLast.test.dialog rename to tests/unit/skills/calendar/TestAssets/AvailabilityTests/GetAvailabilityLast.test.dialog diff --git a/tests/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/findMeetingTimes.mock.dialog b/tests/unit/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/findMeetingTimes.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/findMeetingTimes.mock.dialog rename to tests/unit/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/findMeetingTimes.mock.dialog diff --git a/tests/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getContact.mock.dialog b/tests/unit/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getContact.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getContact.mock.dialog rename to tests/unit/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getContact.mock.dialog diff --git a/tests/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getEvent.mock.dialog b/tests/unit/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getEvent.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getEvent.mock.dialog rename to tests/unit/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getEvent.mock.dialog diff --git a/tests/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getEvents.mock.dialog b/tests/unit/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getEvents.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getEvents.mock.dialog rename to tests/unit/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getEvents.mock.dialog diff --git a/tests/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getPeople.mock.dialog b/tests/unit/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getPeople.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getPeople.mock.dialog rename to tests/unit/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getPeople.mock.dialog diff --git a/tests/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getProfile.mock.dialog b/tests/unit/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getProfile.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getProfile.mock.dialog rename to tests/unit/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getProfile.mock.dialog diff --git a/tests/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getWorkingHours.mock.dialog b/tests/unit/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getWorkingHours.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getWorkingHours.mock.dialog rename to tests/unit/skills/calendar/TestAssets/AvailabilityTests/HttpRequestMock/getWorkingHours.mock.dialog diff --git a/tests/skills/calendar/TestAssets/AvailabilityTests/UserTokenMock/nomagiccode.mock.dialog b/tests/unit/skills/calendar/TestAssets/AvailabilityTests/UserTokenMock/nomagiccode.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/AvailabilityTests/UserTokenMock/nomagiccode.mock.dialog rename to tests/unit/skills/calendar/TestAssets/AvailabilityTests/UserTokenMock/nomagiccode.mock.dialog diff --git a/tests/skills/calendar/TestAssets/AvailabilityTests/cachedResponses/Calendar_en_us_lu/1322656655.json b/tests/unit/skills/calendar/TestAssets/AvailabilityTests/cachedResponses/Calendar_en_us_lu/1322656655.json similarity index 100% rename from tests/skills/calendar/TestAssets/AvailabilityTests/cachedResponses/Calendar_en_us_lu/1322656655.json rename to tests/unit/skills/calendar/TestAssets/AvailabilityTests/cachedResponses/Calendar_en_us_lu/1322656655.json diff --git a/tests/skills/calendar/TestAssets/AvailabilityTests/cachedResponses/Calendar_en_us_lu/565125802.json b/tests/unit/skills/calendar/TestAssets/AvailabilityTests/cachedResponses/Calendar_en_us_lu/565125802.json similarity index 100% rename from tests/skills/calendar/TestAssets/AvailabilityTests/cachedResponses/Calendar_en_us_lu/565125802.json rename to tests/unit/skills/calendar/TestAssets/AvailabilityTests/cachedResponses/Calendar_en_us_lu/565125802.json diff --git a/tests/skills/calendar/TestAssets/AvailabilityTests/cachedResponses/Calendar_en_us_lu/686230913.json b/tests/unit/skills/calendar/TestAssets/AvailabilityTests/cachedResponses/Calendar_en_us_lu/686230913.json similarity index 100% rename from tests/skills/calendar/TestAssets/AvailabilityTests/cachedResponses/Calendar_en_us_lu/686230913.json rename to tests/unit/skills/calendar/TestAssets/AvailabilityTests/cachedResponses/Calendar_en_us_lu/686230913.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent.test.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent.test.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent.test.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_multiple.test.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_multiple.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_multiple.test.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_multiple.test.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setAttendeeAdd.test.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setAttendeeAdd.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setAttendeeAdd.test.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setAttendeeAdd.test.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setAttendeeRemove.test.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setAttendeeRemove.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setAttendeeRemove.test.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setAttendeeRemove.test.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setDateTime.test.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setDateTime.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setDateTime.test.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setDateTime.test.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setDescription.test.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setDescription.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setDescription.test.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setDescription.test.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setDuration.test.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setDuration.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setDuration.test.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setDuration.test.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setLocation.test.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setLocation.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setLocation.test.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setLocation.test.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setOnlineMeetingAdd.test.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setOnlineMeetingAdd.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setOnlineMeetingAdd.test.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setOnlineMeetingAdd.test.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setOnlineMeetingRemove.test.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setOnlineMeetingRemove.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setOnlineMeetingRemove.test.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setOnlineMeetingRemove.test.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setTitle.test.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setTitle.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setTitle.test.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_setTitle.test.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_skip.test.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_skip.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_skip.test.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_interruption_skip.test.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_noEntities.test.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_noEntities.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_noEntities.test.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_noEntities.test.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_contact.test.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_contact.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_contact.test.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_contact.test.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_datetime.test.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_datetime.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_datetime.test.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_datetime.test.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_location.test.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_location.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_location.test.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_location.test.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_title.test.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_title.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_title.test.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_title.test.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_title_contact.test.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_title_contact.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_title_contact.test.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_title_contact.test.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_title_contact_datetime.test.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_title_contact_datetime.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_title_contact_datetime.test.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/CreateEvent_withEntity_title_contact_datetime.test.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/createEvent.mock.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/createEvent.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/createEvent.mock.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/createEvent.mock.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/findMeetingTimes.mock.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/findMeetingTimes.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/findMeetingTimes.mock.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/findMeetingTimes.mock.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/getContact.mock.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/getContact.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/getContact.mock.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/getContact.mock.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/getPeople.mock.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/getPeople.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/getPeople.mock.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/getPeople.mock.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/getProfile.mock.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/getProfile.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/getProfile.mock.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/getProfile.mock.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/getWorkingHours.mock.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/getWorkingHours.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/getWorkingHours.mock.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/HttpRequestMock/getWorkingHours.mock.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/UserTokenMock/nomagiccode.mock.dialog b/tests/unit/skills/calendar/TestAssets/CreateEventTests/UserTokenMock/nomagiccode.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/UserTokenMock/nomagiccode.mock.dialog rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/UserTokenMock/nomagiccode.mock.dialog diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/1039170905.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/1039170905.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/1039170905.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/1039170905.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/1082755164.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/1082755164.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/1082755164.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/1082755164.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/1127709374.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/1127709374.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/1127709374.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/1127709374.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/2937641126.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/2937641126.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/2937641126.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/2937641126.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/3617381462.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/3617381462.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/3617381462.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/3617381462.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/3672480022.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/3672480022.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/3672480022.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/3672480022.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/3897990621.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/3897990621.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/3897990621.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/3897990621.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/4011733239.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/4011733239.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/4011733239.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/4011733239.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/4107782572.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/4107782572.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/4107782572.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/4107782572.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/503597261.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/503597261.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/503597261.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/503597261.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/565993014.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/565993014.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/565993014.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/565993014.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/641530942.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/641530942.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/641530942.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/Calendar_en_us_lu/641530942.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1039170905.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1039170905.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1039170905.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1039170905.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1134332707.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1134332707.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1134332707.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1134332707.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1413756758.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1413756758.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1413756758.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1413756758.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1556687899.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1556687899.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1556687899.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1556687899.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1695466276.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1695466276.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1695466276.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1695466276.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1847842841.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1847842841.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1847842841.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1847842841.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1869746525.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1869746525.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1869746525.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/1869746525.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2540704622.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2540704622.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2540704622.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2540704622.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2542755548.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2542755548.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2542755548.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2542755548.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2553583282.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2553583282.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2553583282.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2553583282.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2564825304.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2564825304.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2564825304.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2564825304.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2603715459.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2603715459.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2603715459.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2603715459.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2937641126.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2937641126.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2937641126.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/2937641126.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3081695755.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3081695755.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3081695755.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3081695755.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3430243042.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3430243042.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3430243042.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3430243042.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3665878675.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3665878675.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3665878675.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3665878675.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3672480022.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3672480022.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3672480022.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3672480022.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3886812449.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3886812449.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3886812449.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/3886812449.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/428143476.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/428143476.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/428143476.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/CreateEventDialog_en_us_lu/428143476.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/1392353970.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/1392353970.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/1392353970.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/1392353970.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/1484328397.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/1484328397.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/1484328397.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/1484328397.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/1542622736.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/1542622736.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/1542622736.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/1542622736.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/4085864143.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/4085864143.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/4085864143.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/4085864143.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/430240736.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/430240736.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/430240736.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/GetContactsDialog_en_us_lu/430240736.json diff --git a/tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/ListDialog_en_us_lu/3723765839.json b/tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/ListDialog_en_us_lu/3723765839.json similarity index 100% rename from tests/skills/calendar/TestAssets/CreateEventTests/cachedResponses/ListDialog_en_us_lu/3723765839.json rename to tests/unit/skills/calendar/TestAssets/CreateEventTests/cachedResponses/ListDialog_en_us_lu/3723765839.json diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_AcceptEvent.test.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_AcceptEvent.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_AcceptEvent.test.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_AcceptEvent.test.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_CreateEvent.test.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_CreateEvent.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_CreateEvent.test.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_CreateEvent.test.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_DeclineEvent.test.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_DeclineEvent.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_DeclineEvent.test.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_DeclineEvent.test.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_DeleteEvent.test.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_DeleteEvent.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_DeleteEvent.test.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_DeleteEvent.test.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_FindMeetingTimes.test.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_FindMeetingTimes.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_FindMeetingTimes.test.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_FindMeetingTimes.test.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_GetContacts.test.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_GetContacts.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_GetContacts.test.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_GetContacts.test.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_GetEvents.test.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_GetEvents.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_GetEvents.test.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_GetEvents.test.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_GetProfile.test.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_GetProfile.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_GetProfile.test.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_GetProfile.test.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_GetWorkingHours.test.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_GetWorkingHours.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_GetWorkingHours.test.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_GetWorkingHours.test.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_SettingsTest.test.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_SettingsTest.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_SettingsTest.test.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_SettingsTest.test.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_TentativelyAcceptEvent.test.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_TentativelyAcceptEvent.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_TentativelyAcceptEvent.test.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_TentativelyAcceptEvent.test.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_UpdateEvent.test.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_UpdateEvent.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_UpdateEvent.test.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/CalendarSkillTests_UpdateEvent.test.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/acceptEvent.mock.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/acceptEvent.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/acceptEvent.mock.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/acceptEvent.mock.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/createEvent.mock.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/createEvent.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/createEvent.mock.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/createEvent.mock.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/declineEvent.mock.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/declineEvent.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/declineEvent.mock.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/declineEvent.mock.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/deleteEvent.mock.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/deleteEvent.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/deleteEvent.mock.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/deleteEvent.mock.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/findMeetingTimes.mock.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/findMeetingTimes.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/findMeetingTimes.mock.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/findMeetingTimes.mock.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getContact.mock.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getContact.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getContact.mock.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getContact.mock.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getEvents.mock.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getEvents.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getEvents.mock.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getEvents.mock.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getPeople.mock.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getPeople.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getPeople.mock.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getPeople.mock.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getProfile.mock.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getProfile.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getProfile.mock.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getProfile.mock.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getWorkingHours.mock.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getWorkingHours.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getWorkingHours.mock.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/getWorkingHours.mock.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/tentativelyAcceptEvent.mock.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/tentativelyAcceptEvent.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/tentativelyAcceptEvent.mock.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/tentativelyAcceptEvent.mock.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/updateEvent.mock.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/updateEvent.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/updateEvent.mock.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/HttpRequestMock/updateEvent.mock.dialog diff --git a/tests/skills/calendar/TestAssets/CustomActionTests/UserTokenMock/nomagiccode.mock.dialog b/tests/unit/skills/calendar/TestAssets/CustomActionTests/UserTokenMock/nomagiccode.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/CustomActionTests/UserTokenMock/nomagiccode.mock.dialog rename to tests/unit/skills/calendar/TestAssets/CustomActionTests/UserTokenMock/nomagiccode.mock.dialog diff --git a/tests/skills/calendar/TestAssets/GetEventTests/GetEventAttendees.test.dialog b/tests/unit/skills/calendar/TestAssets/GetEventTests/GetEventAttendees.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/GetEventAttendees.test.dialog rename to tests/unit/skills/calendar/TestAssets/GetEventTests/GetEventAttendees.test.dialog diff --git a/tests/skills/calendar/TestAssets/GetEventTests/GetEventDateTime.test.dialog b/tests/unit/skills/calendar/TestAssets/GetEventTests/GetEventDateTime.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/GetEventDateTime.test.dialog rename to tests/unit/skills/calendar/TestAssets/GetEventTests/GetEventDateTime.test.dialog diff --git a/tests/skills/calendar/TestAssets/GetEventTests/GetEventLocation.test.dialog b/tests/unit/skills/calendar/TestAssets/GetEventTests/GetEventLocation.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/GetEventLocation.test.dialog rename to tests/unit/skills/calendar/TestAssets/GetEventTests/GetEventLocation.test.dialog diff --git a/tests/skills/calendar/TestAssets/GetEventTests/GetEvents_multipleResults.test.dialog b/tests/unit/skills/calendar/TestAssets/GetEventTests/GetEvents_multipleResults.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/GetEvents_multipleResults.test.dialog rename to tests/unit/skills/calendar/TestAssets/GetEventTests/GetEvents_multipleResults.test.dialog diff --git a/tests/skills/calendar/TestAssets/GetEventTests/GetEvents_noResults.test.dialog b/tests/unit/skills/calendar/TestAssets/GetEventTests/GetEvents_noResults.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/GetEvents_noResults.test.dialog rename to tests/unit/skills/calendar/TestAssets/GetEventTests/GetEvents_noResults.test.dialog diff --git a/tests/skills/calendar/TestAssets/GetEventTests/GetEvents_singleResult.test.dialog b/tests/unit/skills/calendar/TestAssets/GetEventTests/GetEvents_singleResult.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/GetEvents_singleResult.test.dialog rename to tests/unit/skills/calendar/TestAssets/GetEventTests/GetEvents_singleResult.test.dialog diff --git a/tests/skills/calendar/TestAssets/GetEventTests/GetEvents_withEntity_contact.test.dialog b/tests/unit/skills/calendar/TestAssets/GetEventTests/GetEvents_withEntity_contact.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/GetEvents_withEntity_contact.test.dialog rename to tests/unit/skills/calendar/TestAssets/GetEventTests/GetEvents_withEntity_contact.test.dialog diff --git a/tests/skills/calendar/TestAssets/GetEventTests/GetEvents_withEntity_datetime.test.dialog b/tests/unit/skills/calendar/TestAssets/GetEventTests/GetEvents_withEntity_datetime.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/GetEvents_withEntity_datetime.test.dialog rename to tests/unit/skills/calendar/TestAssets/GetEventTests/GetEvents_withEntity_datetime.test.dialog diff --git a/tests/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getContact.mock.dialog b/tests/unit/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getContact.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getContact.mock.dialog rename to tests/unit/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getContact.mock.dialog diff --git a/tests/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEvent.mock.dialog b/tests/unit/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEvent.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEvent.mock.dialog rename to tests/unit/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEvent.mock.dialog diff --git a/tests/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEvents.mock.dialog b/tests/unit/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEvents.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEvents.mock.dialog rename to tests/unit/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEvents.mock.dialog diff --git a/tests/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEventsNotOrganizer.mock.dialog b/tests/unit/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEventsNotOrganizer.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEventsNotOrganizer.mock.dialog rename to tests/unit/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEventsNotOrganizer.mock.dialog diff --git a/tests/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEventsOnlineMeeting.mock.dialog b/tests/unit/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEventsOnlineMeeting.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEventsOnlineMeeting.mock.dialog rename to tests/unit/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEventsOnlineMeeting.mock.dialog diff --git a/tests/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEvents_noResults.mock.dialog b/tests/unit/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEvents_noResults.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEvents_noResults.mock.dialog rename to tests/unit/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getEvents_noResults.mock.dialog diff --git a/tests/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getPeople.mock.dialog b/tests/unit/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getPeople.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getPeople.mock.dialog rename to tests/unit/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getPeople.mock.dialog diff --git a/tests/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getProfile.mock.dialog b/tests/unit/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getProfile.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getProfile.mock.dialog rename to tests/unit/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getProfile.mock.dialog diff --git a/tests/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getWorkingHours.mock.dialog b/tests/unit/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getWorkingHours.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getWorkingHours.mock.dialog rename to tests/unit/skills/calendar/TestAssets/GetEventTests/HttpRequestMock/getWorkingHours.mock.dialog diff --git a/tests/skills/calendar/TestAssets/GetEventTests/UserTokenMock/nomagiccode.mock.dialog b/tests/unit/skills/calendar/TestAssets/GetEventTests/UserTokenMock/nomagiccode.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/UserTokenMock/nomagiccode.mock.dialog rename to tests/unit/skills/calendar/TestAssets/GetEventTests/UserTokenMock/nomagiccode.mock.dialog diff --git a/tests/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/1526748840.json b/tests/unit/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/1526748840.json similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/1526748840.json rename to tests/unit/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/1526748840.json diff --git a/tests/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/1662191128.json b/tests/unit/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/1662191128.json similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/1662191128.json rename to tests/unit/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/1662191128.json diff --git a/tests/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/1938006685.json b/tests/unit/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/1938006685.json similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/1938006685.json rename to tests/unit/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/1938006685.json diff --git a/tests/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/2117736667.json b/tests/unit/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/2117736667.json similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/2117736667.json rename to tests/unit/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/2117736667.json diff --git a/tests/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/3989091574.json b/tests/unit/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/3989091574.json similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/3989091574.json rename to tests/unit/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/3989091574.json diff --git a/tests/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/904626561.json b/tests/unit/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/904626561.json similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/904626561.json rename to tests/unit/skills/calendar/TestAssets/GetEventTests/cachedResponses/Calendar_en_us_lu/904626561.json diff --git a/tests/skills/calendar/TestAssets/GetEventTests/cachedResponses/ListDialog_en_us_lu/3723765839.json b/tests/unit/skills/calendar/TestAssets/GetEventTests/cachedResponses/ListDialog_en_us_lu/3723765839.json similarity index 100% rename from tests/skills/calendar/TestAssets/GetEventTests/cachedResponses/ListDialog_en_us_lu/3723765839.json rename to tests/unit/skills/calendar/TestAssets/GetEventTests/cachedResponses/ListDialog_en_us_lu/3723765839.json diff --git a/tests/skills/calendar/TestAssets/RespondToEventTests/CancelEvent_asAttendee.test.dialog b/tests/unit/skills/calendar/TestAssets/RespondToEventTests/CancelEvent_asAttendee.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/RespondToEventTests/CancelEvent_asAttendee.test.dialog rename to tests/unit/skills/calendar/TestAssets/RespondToEventTests/CancelEvent_asAttendee.test.dialog diff --git a/tests/skills/calendar/TestAssets/RespondToEventTests/CancelEvent_asOrganizer.test.dialog b/tests/unit/skills/calendar/TestAssets/RespondToEventTests/CancelEvent_asOrganizer.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/RespondToEventTests/CancelEvent_asOrganizer.test.dialog rename to tests/unit/skills/calendar/TestAssets/RespondToEventTests/CancelEvent_asOrganizer.test.dialog diff --git a/tests/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/acceptEvent.mock.dialog b/tests/unit/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/acceptEvent.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/acceptEvent.mock.dialog rename to tests/unit/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/acceptEvent.mock.dialog diff --git a/tests/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/declineEvent.mock.dialog b/tests/unit/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/declineEvent.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/declineEvent.mock.dialog rename to tests/unit/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/declineEvent.mock.dialog diff --git a/tests/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/deleteEvent.mock.dialog b/tests/unit/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/deleteEvent.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/deleteEvent.mock.dialog rename to tests/unit/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/deleteEvent.mock.dialog diff --git a/tests/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getContact.mock.dialog b/tests/unit/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getContact.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getContact.mock.dialog rename to tests/unit/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getContact.mock.dialog diff --git a/tests/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getEvent.mock.dialog b/tests/unit/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getEvent.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getEvent.mock.dialog rename to tests/unit/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getEvent.mock.dialog diff --git a/tests/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getEvents.mock.dialog b/tests/unit/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getEvents.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getEvents.mock.dialog rename to tests/unit/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getEvents.mock.dialog diff --git a/tests/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getEventsNotOrganizer.mock.dialog b/tests/unit/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getEventsNotOrganizer.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getEventsNotOrganizer.mock.dialog rename to tests/unit/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getEventsNotOrganizer.mock.dialog diff --git a/tests/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getPeople.mock.dialog b/tests/unit/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getPeople.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getPeople.mock.dialog rename to tests/unit/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getPeople.mock.dialog diff --git a/tests/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getProfile.mock.dialog b/tests/unit/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getProfile.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getProfile.mock.dialog rename to tests/unit/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getProfile.mock.dialog diff --git a/tests/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getWorkingHours.mock.dialog b/tests/unit/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getWorkingHours.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getWorkingHours.mock.dialog rename to tests/unit/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/getWorkingHours.mock.dialog diff --git a/tests/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/tentativelyAcceptEvent.mock.dialog b/tests/unit/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/tentativelyAcceptEvent.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/tentativelyAcceptEvent.mock.dialog rename to tests/unit/skills/calendar/TestAssets/RespondToEventTests/HttpRequestMock/tentativelyAcceptEvent.mock.dialog diff --git a/tests/skills/calendar/TestAssets/RespondToEventTests/RespondToEvent_Accept.test.dialog b/tests/unit/skills/calendar/TestAssets/RespondToEventTests/RespondToEvent_Accept.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/RespondToEventTests/RespondToEvent_Accept.test.dialog rename to tests/unit/skills/calendar/TestAssets/RespondToEventTests/RespondToEvent_Accept.test.dialog diff --git a/tests/skills/calendar/TestAssets/RespondToEventTests/RespondToEvent_Decline.test.dialog b/tests/unit/skills/calendar/TestAssets/RespondToEventTests/RespondToEvent_Decline.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/RespondToEventTests/RespondToEvent_Decline.test.dialog rename to tests/unit/skills/calendar/TestAssets/RespondToEventTests/RespondToEvent_Decline.test.dialog diff --git a/tests/skills/calendar/TestAssets/RespondToEventTests/RespondToEvent_TentativelyAccept.test.dialog b/tests/unit/skills/calendar/TestAssets/RespondToEventTests/RespondToEvent_TentativelyAccept.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/RespondToEventTests/RespondToEvent_TentativelyAccept.test.dialog rename to tests/unit/skills/calendar/TestAssets/RespondToEventTests/RespondToEvent_TentativelyAccept.test.dialog diff --git a/tests/skills/calendar/TestAssets/RespondToEventTests/UserTokenMock/nomagiccode.mock.dialog b/tests/unit/skills/calendar/TestAssets/RespondToEventTests/UserTokenMock/nomagiccode.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/RespondToEventTests/UserTokenMock/nomagiccode.mock.dialog rename to tests/unit/skills/calendar/TestAssets/RespondToEventTests/UserTokenMock/nomagiccode.mock.dialog diff --git a/tests/skills/calendar/TestAssets/RespondToEventTests/cachedResponses/Calendar_en_us_lu/1290152274.json b/tests/unit/skills/calendar/TestAssets/RespondToEventTests/cachedResponses/Calendar_en_us_lu/1290152274.json similarity index 100% rename from tests/skills/calendar/TestAssets/RespondToEventTests/cachedResponses/Calendar_en_us_lu/1290152274.json rename to tests/unit/skills/calendar/TestAssets/RespondToEventTests/cachedResponses/Calendar_en_us_lu/1290152274.json diff --git a/tests/skills/calendar/TestAssets/RespondToEventTests/cachedResponses/Calendar_en_us_lu/2454555038.json b/tests/unit/skills/calendar/TestAssets/RespondToEventTests/cachedResponses/Calendar_en_us_lu/2454555038.json similarity index 100% rename from tests/skills/calendar/TestAssets/RespondToEventTests/cachedResponses/Calendar_en_us_lu/2454555038.json rename to tests/unit/skills/calendar/TestAssets/RespondToEventTests/cachedResponses/Calendar_en_us_lu/2454555038.json diff --git a/tests/skills/calendar/TestAssets/RespondToEventTests/cachedResponses/Calendar_en_us_lu/2818238401.json b/tests/unit/skills/calendar/TestAssets/RespondToEventTests/cachedResponses/Calendar_en_us_lu/2818238401.json similarity index 100% rename from tests/skills/calendar/TestAssets/RespondToEventTests/cachedResponses/Calendar_en_us_lu/2818238401.json rename to tests/unit/skills/calendar/TestAssets/RespondToEventTests/cachedResponses/Calendar_en_us_lu/2818238401.json diff --git a/tests/skills/calendar/TestAssets/RespondToEventTests/cachedResponses/Calendar_en_us_lu/3653033598.json b/tests/unit/skills/calendar/TestAssets/RespondToEventTests/cachedResponses/Calendar_en_us_lu/3653033598.json similarity index 100% rename from tests/skills/calendar/TestAssets/RespondToEventTests/cachedResponses/Calendar_en_us_lu/3653033598.json rename to tests/unit/skills/calendar/TestAssets/RespondToEventTests/cachedResponses/Calendar_en_us_lu/3653033598.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getContact.mock.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getContact.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getContact.mock.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getContact.mock.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getEvent.mock.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getEvent.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getEvent.mock.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getEvent.mock.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getEvents.mock.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getEvents.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getEvents.mock.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getEvents.mock.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getEventsNotOrganizer.mock.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getEventsNotOrganizer.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getEventsNotOrganizer.mock.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getEventsNotOrganizer.mock.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getEventsOnlineMeeting.mock.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getEventsOnlineMeeting.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getEventsOnlineMeeting.mock.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getEventsOnlineMeeting.mock.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getPeople.mock.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getPeople.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getPeople.mock.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getPeople.mock.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getProfile.mock.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getProfile.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getProfile.mock.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getProfile.mock.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getWorkingHours.mock.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getWorkingHours.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getWorkingHours.mock.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/getWorkingHours.mock.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/updateEvent.mock.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/updateEvent.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/updateEvent.mock.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/HttpRequestMock/updateEvent.mock.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_attendees.test.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_attendees.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_attendees.test.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_attendees.test.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_datetime.test.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_datetime.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_datetime.test.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_datetime.test.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_description.test.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_description.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_description.test.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_description.test.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_duration.test.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_duration.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_duration.test.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_duration.test.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_location.test.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_location.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_location.test.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_location.test.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_onlineMeeting.test.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_onlineMeeting.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_onlineMeeting.test.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_onlineMeeting.test.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_title.test.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_title.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_title.test.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_basic_title.test.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setAttendeesAdd.test.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setAttendeesAdd.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setAttendeesAdd.test.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setAttendeesAdd.test.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setAttendeesRemove.test.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setAttendeesRemove.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setAttendeesRemove.test.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setAttendeesRemove.test.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setDateTime.test.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setDateTime.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setDateTime.test.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setDateTime.test.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setDescription.test.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setDescription.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setDescription.test.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setDescription.test.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setDuration.test.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setDuration.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setDuration.test.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setDuration.test.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setLocation.test.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setLocation.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setLocation.test.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setLocation.test.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setOnlineMeeting.test.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setOnlineMeeting.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setOnlineMeeting.test.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setOnlineMeeting.test.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setTitle.test.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setTitle.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setTitle.test.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_interruption_setTitle.test.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setAttendeesAdd.test.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setAttendeesAdd.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setAttendeesAdd.test.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setAttendeesAdd.test.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setAttendeesRemove.test.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setAttendeesRemove.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setAttendeesRemove.test.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setAttendeesRemove.test.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setDateTime.test.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setDateTime.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setDateTime.test.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setDateTime.test.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setDescription.test.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setDescription.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setDescription.test.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setDescription.test.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setDuration.test.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setDuration.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setDuration.test.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setDuration.test.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setLocation.test.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setLocation.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setLocation.test.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setLocation.test.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setOnlineMeeting.test.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setOnlineMeeting.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setOnlineMeeting.test.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setOnlineMeeting.test.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setTitle.test.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setTitle.test.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setTitle.test.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UpdateEvent_trigger_setTitle.test.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/UserTokenMock/nomagiccode.mock.dialog b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/UserTokenMock/nomagiccode.mock.dialog similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/UserTokenMock/nomagiccode.mock.dialog rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/UserTokenMock/nomagiccode.mock.dialog diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/1145996603.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/1145996603.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/1145996603.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/1145996603.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/1544134286.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/1544134286.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/1544134286.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/1544134286.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/1664405117.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/1664405117.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/1664405117.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/1664405117.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2122886558.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2122886558.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2122886558.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2122886558.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2359587634.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2359587634.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2359587634.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2359587634.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2392124786.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2392124786.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2392124786.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2392124786.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/274526507.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/274526507.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/274526507.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/274526507.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2860054276.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2860054276.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2860054276.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2860054276.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2937641126.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2937641126.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2937641126.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/2937641126.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/4148905213.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/4148905213.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/4148905213.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/4148905213.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/463684775.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/463684775.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/463684775.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/463684775.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/493543230.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/493543230.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/493543230.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/493543230.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/717479241.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/717479241.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/717479241.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/Calendar_en_us_lu/717479241.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/GetContactsDialog_en_us_lu/1392353970.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/GetContactsDialog_en_us_lu/1392353970.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/GetContactsDialog_en_us_lu/1392353970.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/GetContactsDialog_en_us_lu/1392353970.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/GetContactsDialog_en_us_lu/4085864143.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/GetContactsDialog_en_us_lu/4085864143.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/GetContactsDialog_en_us_lu/4085864143.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/GetContactsDialog_en_us_lu/4085864143.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/GetEventsDialog_en_us_lu/2993157681.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/GetEventsDialog_en_us_lu/2993157681.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/GetEventsDialog_en_us_lu/2993157681.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/GetEventsDialog_en_us_lu/2993157681.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/ListDialog_en_us_lu/3723765839.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/ListDialog_en_us_lu/3723765839.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/ListDialog_en_us_lu/3723765839.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/ListDialog_en_us_lu/3723765839.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1145996603.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1145996603.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1145996603.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1145996603.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1392353970.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1392353970.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1392353970.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1392353970.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1490330477.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1490330477.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1490330477.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1490330477.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1544134286.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1544134286.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1544134286.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1544134286.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1639066482.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1639066482.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1639066482.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1639066482.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1704462493.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1704462493.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1704462493.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/1704462493.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2250432073.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2250432073.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2250432073.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2250432073.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2338442885.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2338442885.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2338442885.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2338442885.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2359587634.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2359587634.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2359587634.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2359587634.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2395873221.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2395873221.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2395873221.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2395873221.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2464902023.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2464902023.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2464902023.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2464902023.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2564825304.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2564825304.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2564825304.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2564825304.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2903480491.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2903480491.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2903480491.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2903480491.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2937641126.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2937641126.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2937641126.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/2937641126.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3216421296.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3216421296.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3216421296.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3216421296.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3255472636.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3255472636.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3255472636.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3255472636.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3386169890.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3386169890.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3386169890.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3386169890.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3558312640.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3558312640.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3558312640.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3558312640.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3857112431.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3857112431.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3857112431.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/3857112431.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/4278021066.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/4278021066.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/4278021066.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/4278021066.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/428143476.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/428143476.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/428143476.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/428143476.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/457420302.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/457420302.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/457420302.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/457420302.json diff --git a/tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/766092102.json b/tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/766092102.json similarity index 100% rename from tests/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/766092102.json rename to tests/unit/skills/calendar/TestAssets/UpdateEventTests/cachedResponses/UpdateEventDialog_en_us_lu/766092102.json diff --git a/tests/skills/calendar/UpdateEventTests.cs b/tests/unit/skills/calendar/UpdateEventTests.cs similarity index 100% rename from tests/skills/calendar/UpdateEventTests.cs rename to tests/unit/skills/calendar/UpdateEventTests.cs diff --git a/tests/skills/calendar/app.schema b/tests/unit/skills/calendar/app.schema similarity index 100% rename from tests/skills/calendar/app.schema rename to tests/unit/skills/calendar/app.schema diff --git a/tests/skills/calendar/testsettings.json b/tests/unit/skills/calendar/testsettings.json similarity index 100% rename from tests/skills/calendar/testsettings.json rename to tests/unit/skills/calendar/testsettings.json diff --git a/tests/skills/common/GraphComponentRegistration.cs b/tests/unit/skills/common/GraphComponentRegistration.cs similarity index 100% rename from tests/skills/common/GraphComponentRegistration.cs rename to tests/unit/skills/common/GraphComponentRegistration.cs diff --git a/tests/skills/common/Microsoft.Bot.Dialogs.Tests.Common.csproj b/tests/unit/skills/common/Microsoft.Bot.Dialogs.Tests.Common.csproj similarity index 90% rename from tests/skills/common/Microsoft.Bot.Dialogs.Tests.Common.csproj rename to tests/unit/skills/common/Microsoft.Bot.Dialogs.Tests.Common.csproj index d385a3800d..05c521c926 100644 --- a/tests/skills/common/Microsoft.Bot.Dialogs.Tests.Common.csproj +++ b/tests/unit/skills/common/Microsoft.Bot.Dialogs.Tests.Common.csproj @@ -17,7 +17,7 @@ - + diff --git a/tests/skills/calendar/NuGet.Config b/tests/unit/skills/common/NuGet.Config similarity index 100% rename from tests/skills/calendar/NuGet.Config rename to tests/unit/skills/common/NuGet.Config diff --git a/tests/skills/common/PbxDialogTestBase.cs b/tests/unit/skills/common/PbxDialogTestBase.cs similarity index 100% rename from tests/skills/common/PbxDialogTestBase.cs rename to tests/unit/skills/common/PbxDialogTestBase.cs diff --git a/tests/skills/people/GetCollaboratorsTests.cs b/tests/unit/skills/people/GetCollaboratorsTests.cs similarity index 100% rename from tests/skills/people/GetCollaboratorsTests.cs rename to tests/unit/skills/people/GetCollaboratorsTests.cs diff --git a/tests/skills/people/GetDirectReportsTests.cs b/tests/unit/skills/people/GetDirectReportsTests.cs similarity index 100% rename from tests/skills/people/GetDirectReportsTests.cs rename to tests/unit/skills/people/GetDirectReportsTests.cs diff --git a/tests/skills/people/GetManagerTests.cs b/tests/unit/skills/people/GetManagerTests.cs similarity index 100% rename from tests/skills/people/GetManagerTests.cs rename to tests/unit/skills/people/GetManagerTests.cs diff --git a/tests/skills/people/GetPeersTests.cs b/tests/unit/skills/people/GetPeersTests.cs similarity index 100% rename from tests/skills/people/GetPeersTests.cs rename to tests/unit/skills/people/GetPeersTests.cs diff --git a/tests/skills/people/GetProfileTests.cs b/tests/unit/skills/people/GetProfileTests.cs similarity index 100% rename from tests/skills/people/GetProfileTests.cs rename to tests/unit/skills/people/GetProfileTests.cs diff --git a/tests/skills/people/Microsoft.Bot.Dialogs.Tests.Skills.People.csproj b/tests/unit/skills/people/Microsoft.Bot.Dialogs.Tests.Skills.People.csproj similarity index 86% rename from tests/skills/people/Microsoft.Bot.Dialogs.Tests.Skills.People.csproj rename to tests/unit/skills/people/Microsoft.Bot.Dialogs.Tests.Skills.People.csproj index b0624527cf..02c6c2f4e2 100644 --- a/tests/skills/people/Microsoft.Bot.Dialogs.Tests.Skills.People.csproj +++ b/tests/unit/skills/people/Microsoft.Bot.Dialogs.Tests.Skills.People.csproj @@ -18,7 +18,7 @@ - + @@ -33,7 +33,7 @@ Always - + Always diff --git a/tests/skills/people/TestAssets/GetCollaboratorsTests/GetCollaborators_CollaboratorNotFound.test.dialog b/tests/unit/skills/people/TestAssets/GetCollaboratorsTests/GetCollaborators_CollaboratorNotFound.test.dialog similarity index 100% rename from tests/skills/people/TestAssets/GetCollaboratorsTests/GetCollaborators_CollaboratorNotFound.test.dialog rename to tests/unit/skills/people/TestAssets/GetCollaboratorsTests/GetCollaborators_CollaboratorNotFound.test.dialog diff --git a/tests/skills/people/TestAssets/GetCollaboratorsTests/GetCollaborators_MoreThanOneFound.test.dialog b/tests/unit/skills/people/TestAssets/GetCollaboratorsTests/GetCollaborators_MoreThanOneFound.test.dialog similarity index 100% rename from tests/skills/people/TestAssets/GetCollaboratorsTests/GetCollaborators_MoreThanOneFound.test.dialog rename to tests/unit/skills/people/TestAssets/GetCollaboratorsTests/GetCollaborators_MoreThanOneFound.test.dialog diff --git a/tests/skills/people/TestAssets/GetCollaboratorsTests/GetCollaborators_OneFound.test.dialog b/tests/unit/skills/people/TestAssets/GetCollaboratorsTests/GetCollaborators_OneFound.test.dialog similarity index 100% rename from tests/skills/people/TestAssets/GetCollaboratorsTests/GetCollaborators_OneFound.test.dialog rename to tests/unit/skills/people/TestAssets/GetCollaboratorsTests/GetCollaborators_OneFound.test.dialog diff --git a/tests/skills/people/TestAssets/GetCollaboratorsTests/UserTokenMock/nomagiccode.mock.dialog b/tests/unit/skills/people/TestAssets/GetCollaboratorsTests/UserTokenMock/nomagiccode.mock.dialog similarity index 100% rename from tests/skills/people/TestAssets/GetCollaboratorsTests/UserTokenMock/nomagiccode.mock.dialog rename to tests/unit/skills/people/TestAssets/GetCollaboratorsTests/UserTokenMock/nomagiccode.mock.dialog diff --git a/tests/skills/people/TestAssets/GetCollaboratorsTests/cachedResponses/ListDialog_en_us_lu/1176839528.json b/tests/unit/skills/people/TestAssets/GetCollaboratorsTests/cachedResponses/ListDialog_en_us_lu/1176839528.json similarity index 100% rename from tests/skills/people/TestAssets/GetCollaboratorsTests/cachedResponses/ListDialog_en_us_lu/1176839528.json rename to tests/unit/skills/people/TestAssets/GetCollaboratorsTests/cachedResponses/ListDialog_en_us_lu/1176839528.json diff --git a/tests/skills/people/TestAssets/GetCollaboratorsTests/cachedResponses/ListDialog_en_us_lu/3723765839.json b/tests/unit/skills/people/TestAssets/GetCollaboratorsTests/cachedResponses/ListDialog_en_us_lu/3723765839.json similarity index 100% rename from tests/skills/people/TestAssets/GetCollaboratorsTests/cachedResponses/ListDialog_en_us_lu/3723765839.json rename to tests/unit/skills/people/TestAssets/GetCollaboratorsTests/cachedResponses/ListDialog_en_us_lu/3723765839.json diff --git a/tests/skills/people/TestAssets/GetCollaboratorsTests/cachedResponses/people_en_us_lu/1916631299.json b/tests/unit/skills/people/TestAssets/GetCollaboratorsTests/cachedResponses/people_en_us_lu/1916631299.json similarity index 100% rename from tests/skills/people/TestAssets/GetCollaboratorsTests/cachedResponses/people_en_us_lu/1916631299.json rename to tests/unit/skills/people/TestAssets/GetCollaboratorsTests/cachedResponses/people_en_us_lu/1916631299.json diff --git a/tests/skills/people/TestAssets/GetDirectReportsTests/GetDirectReports_DirectReportsNotFound.test.dialog b/tests/unit/skills/people/TestAssets/GetDirectReportsTests/GetDirectReports_DirectReportsNotFound.test.dialog similarity index 100% rename from tests/skills/people/TestAssets/GetDirectReportsTests/GetDirectReports_DirectReportsNotFound.test.dialog rename to tests/unit/skills/people/TestAssets/GetDirectReportsTests/GetDirectReports_DirectReportsNotFound.test.dialog diff --git a/tests/skills/people/TestAssets/GetDirectReportsTests/GetDirectReports_MoreThanOneFound.test.dialog b/tests/unit/skills/people/TestAssets/GetDirectReportsTests/GetDirectReports_MoreThanOneFound.test.dialog similarity index 100% rename from tests/skills/people/TestAssets/GetDirectReportsTests/GetDirectReports_MoreThanOneFound.test.dialog rename to tests/unit/skills/people/TestAssets/GetDirectReportsTests/GetDirectReports_MoreThanOneFound.test.dialog diff --git a/tests/skills/people/TestAssets/GetDirectReportsTests/GetDirectReports_OneFound.test.dialog b/tests/unit/skills/people/TestAssets/GetDirectReportsTests/GetDirectReports_OneFound.test.dialog similarity index 100% rename from tests/skills/people/TestAssets/GetDirectReportsTests/GetDirectReports_OneFound.test.dialog rename to tests/unit/skills/people/TestAssets/GetDirectReportsTests/GetDirectReports_OneFound.test.dialog diff --git a/tests/skills/people/TestAssets/GetDirectReportsTests/GetDirectReports_UserNotFound.test.dialog b/tests/unit/skills/people/TestAssets/GetDirectReportsTests/GetDirectReports_UserNotFound.test.dialog similarity index 100% rename from tests/skills/people/TestAssets/GetDirectReportsTests/GetDirectReports_UserNotFound.test.dialog rename to tests/unit/skills/people/TestAssets/GetDirectReportsTests/GetDirectReports_UserNotFound.test.dialog diff --git a/tests/skills/people/TestAssets/GetDirectReportsTests/UserTokenMock/nomagiccode.mock.dialog b/tests/unit/skills/people/TestAssets/GetDirectReportsTests/UserTokenMock/nomagiccode.mock.dialog similarity index 100% rename from tests/skills/people/TestAssets/GetDirectReportsTests/UserTokenMock/nomagiccode.mock.dialog rename to tests/unit/skills/people/TestAssets/GetDirectReportsTests/UserTokenMock/nomagiccode.mock.dialog diff --git a/tests/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/ListDialog_en_us_lu/1221289675.json b/tests/unit/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/ListDialog_en_us_lu/1221289675.json similarity index 100% rename from tests/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/ListDialog_en_us_lu/1221289675.json rename to tests/unit/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/ListDialog_en_us_lu/1221289675.json diff --git a/tests/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/ListDialog_en_us_lu/3723765839.json b/tests/unit/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/ListDialog_en_us_lu/3723765839.json similarity index 100% rename from tests/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/ListDialog_en_us_lu/3723765839.json rename to tests/unit/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/ListDialog_en_us_lu/3723765839.json diff --git a/tests/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/people_en_us_lu/1541877400.json b/tests/unit/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/people_en_us_lu/1541877400.json similarity index 100% rename from tests/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/people_en_us_lu/1541877400.json rename to tests/unit/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/people_en_us_lu/1541877400.json diff --git a/tests/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/people_en_us_lu/1968135638.json b/tests/unit/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/people_en_us_lu/1968135638.json similarity index 100% rename from tests/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/people_en_us_lu/1968135638.json rename to tests/unit/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/people_en_us_lu/1968135638.json diff --git a/tests/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/people_en_us_lu/2599657509.json b/tests/unit/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/people_en_us_lu/2599657509.json similarity index 100% rename from tests/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/people_en_us_lu/2599657509.json rename to tests/unit/skills/people/TestAssets/GetDirectReportsTests/cachedResponses/people_en_us_lu/2599657509.json diff --git a/tests/skills/people/TestAssets/GetManagerTests/GetManager_HappyPath.test.dialog b/tests/unit/skills/people/TestAssets/GetManagerTests/GetManager_HappyPath.test.dialog similarity index 100% rename from tests/skills/people/TestAssets/GetManagerTests/GetManager_HappyPath.test.dialog rename to tests/unit/skills/people/TestAssets/GetManagerTests/GetManager_HappyPath.test.dialog diff --git a/tests/skills/people/TestAssets/GetManagerTests/GetManager_NoManager.test.dialog b/tests/unit/skills/people/TestAssets/GetManagerTests/GetManager_NoManager.test.dialog similarity index 100% rename from tests/skills/people/TestAssets/GetManagerTests/GetManager_NoManager.test.dialog rename to tests/unit/skills/people/TestAssets/GetManagerTests/GetManager_NoManager.test.dialog diff --git a/tests/skills/people/TestAssets/GetManagerTests/GetManager_UserNotFound.test.dialog b/tests/unit/skills/people/TestAssets/GetManagerTests/GetManager_UserNotFound.test.dialog similarity index 100% rename from tests/skills/people/TestAssets/GetManagerTests/GetManager_UserNotFound.test.dialog rename to tests/unit/skills/people/TestAssets/GetManagerTests/GetManager_UserNotFound.test.dialog diff --git a/tests/skills/people/TestAssets/GetManagerTests/UserTokenMock/nomagiccode.mock.dialog b/tests/unit/skills/people/TestAssets/GetManagerTests/UserTokenMock/nomagiccode.mock.dialog similarity index 100% rename from tests/skills/people/TestAssets/GetManagerTests/UserTokenMock/nomagiccode.mock.dialog rename to tests/unit/skills/people/TestAssets/GetManagerTests/UserTokenMock/nomagiccode.mock.dialog diff --git a/tests/skills/people/TestAssets/GetManagerTests/cachedResponses/people_en_us_lu/1541877400.json b/tests/unit/skills/people/TestAssets/GetManagerTests/cachedResponses/people_en_us_lu/1541877400.json similarity index 100% rename from tests/skills/people/TestAssets/GetManagerTests/cachedResponses/people_en_us_lu/1541877400.json rename to tests/unit/skills/people/TestAssets/GetManagerTests/cachedResponses/people_en_us_lu/1541877400.json diff --git a/tests/skills/people/TestAssets/GetManagerTests/cachedResponses/people_en_us_lu/2918515466.json b/tests/unit/skills/people/TestAssets/GetManagerTests/cachedResponses/people_en_us_lu/2918515466.json similarity index 100% rename from tests/skills/people/TestAssets/GetManagerTests/cachedResponses/people_en_us_lu/2918515466.json rename to tests/unit/skills/people/TestAssets/GetManagerTests/cachedResponses/people_en_us_lu/2918515466.json diff --git a/tests/skills/people/TestAssets/GetManagerTests/cachedResponses/people_en_us_lu/780636099.json b/tests/unit/skills/people/TestAssets/GetManagerTests/cachedResponses/people_en_us_lu/780636099.json similarity index 100% rename from tests/skills/people/TestAssets/GetManagerTests/cachedResponses/people_en_us_lu/780636099.json rename to tests/unit/skills/people/TestAssets/GetManagerTests/cachedResponses/people_en_us_lu/780636099.json diff --git a/tests/skills/people/TestAssets/GetPeersTests/GetPeers_MoreThanOneFound.test.dialog b/tests/unit/skills/people/TestAssets/GetPeersTests/GetPeers_MoreThanOneFound.test.dialog similarity index 100% rename from tests/skills/people/TestAssets/GetPeersTests/GetPeers_MoreThanOneFound.test.dialog rename to tests/unit/skills/people/TestAssets/GetPeersTests/GetPeers_MoreThanOneFound.test.dialog diff --git a/tests/skills/people/TestAssets/GetPeersTests/GetPeers_OneFound.test.dialog b/tests/unit/skills/people/TestAssets/GetPeersTests/GetPeers_OneFound.test.dialog similarity index 100% rename from tests/skills/people/TestAssets/GetPeersTests/GetPeers_OneFound.test.dialog rename to tests/unit/skills/people/TestAssets/GetPeersTests/GetPeers_OneFound.test.dialog diff --git a/tests/skills/people/TestAssets/GetPeersTests/GetPeers_PeersNotFound.test.dialog b/tests/unit/skills/people/TestAssets/GetPeersTests/GetPeers_PeersNotFound.test.dialog similarity index 100% rename from tests/skills/people/TestAssets/GetPeersTests/GetPeers_PeersNotFound.test.dialog rename to tests/unit/skills/people/TestAssets/GetPeersTests/GetPeers_PeersNotFound.test.dialog diff --git a/tests/skills/people/TestAssets/GetPeersTests/GetPeers_UserNotFound.test.dialog b/tests/unit/skills/people/TestAssets/GetPeersTests/GetPeers_UserNotFound.test.dialog similarity index 100% rename from tests/skills/people/TestAssets/GetPeersTests/GetPeers_UserNotFound.test.dialog rename to tests/unit/skills/people/TestAssets/GetPeersTests/GetPeers_UserNotFound.test.dialog diff --git a/tests/skills/people/TestAssets/GetPeersTests/UserTokenMock/nomagiccode.mock.dialog b/tests/unit/skills/people/TestAssets/GetPeersTests/UserTokenMock/nomagiccode.mock.dialog similarity index 100% rename from tests/skills/people/TestAssets/GetPeersTests/UserTokenMock/nomagiccode.mock.dialog rename to tests/unit/skills/people/TestAssets/GetPeersTests/UserTokenMock/nomagiccode.mock.dialog diff --git a/tests/skills/people/TestAssets/GetPeersTests/cachedResponses/ListDialog_en_us_lu/1221289675.json b/tests/unit/skills/people/TestAssets/GetPeersTests/cachedResponses/ListDialog_en_us_lu/1221289675.json similarity index 100% rename from tests/skills/people/TestAssets/GetPeersTests/cachedResponses/ListDialog_en_us_lu/1221289675.json rename to tests/unit/skills/people/TestAssets/GetPeersTests/cachedResponses/ListDialog_en_us_lu/1221289675.json diff --git a/tests/skills/people/TestAssets/GetPeersTests/cachedResponses/ListDialog_en_us_lu/3723765839.json b/tests/unit/skills/people/TestAssets/GetPeersTests/cachedResponses/ListDialog_en_us_lu/3723765839.json similarity index 100% rename from tests/skills/people/TestAssets/GetPeersTests/cachedResponses/ListDialog_en_us_lu/3723765839.json rename to tests/unit/skills/people/TestAssets/GetPeersTests/cachedResponses/ListDialog_en_us_lu/3723765839.json diff --git a/tests/skills/people/TestAssets/GetPeersTests/cachedResponses/people_en_us_lu/1175234241.json b/tests/unit/skills/people/TestAssets/GetPeersTests/cachedResponses/people_en_us_lu/1175234241.json similarity index 100% rename from tests/skills/people/TestAssets/GetPeersTests/cachedResponses/people_en_us_lu/1175234241.json rename to tests/unit/skills/people/TestAssets/GetPeersTests/cachedResponses/people_en_us_lu/1175234241.json diff --git a/tests/skills/people/TestAssets/GetPeersTests/cachedResponses/people_en_us_lu/2875849222.json b/tests/unit/skills/people/TestAssets/GetPeersTests/cachedResponses/people_en_us_lu/2875849222.json similarity index 100% rename from tests/skills/people/TestAssets/GetPeersTests/cachedResponses/people_en_us_lu/2875849222.json rename to tests/unit/skills/people/TestAssets/GetPeersTests/cachedResponses/people_en_us_lu/2875849222.json diff --git a/tests/skills/people/TestAssets/GetPeersTests/cachedResponses/people_en_us_lu/3817055125.json b/tests/unit/skills/people/TestAssets/GetPeersTests/cachedResponses/people_en_us_lu/3817055125.json similarity index 100% rename from tests/skills/people/TestAssets/GetPeersTests/cachedResponses/people_en_us_lu/3817055125.json rename to tests/unit/skills/people/TestAssets/GetPeersTests/cachedResponses/people_en_us_lu/3817055125.json diff --git a/tests/skills/people/TestAssets/GetProfileTests/GetProfile_HappyPath.test.dialog b/tests/unit/skills/people/TestAssets/GetProfileTests/GetProfile_HappyPath.test.dialog similarity index 100% rename from tests/skills/people/TestAssets/GetProfileTests/GetProfile_HappyPath.test.dialog rename to tests/unit/skills/people/TestAssets/GetProfileTests/GetProfile_HappyPath.test.dialog diff --git a/tests/skills/people/TestAssets/GetProfileTests/GetProfile_HappyPath_MultipleUsers.test.dialog b/tests/unit/skills/people/TestAssets/GetProfileTests/GetProfile_HappyPath_MultipleUsers.test.dialog similarity index 100% rename from tests/skills/people/TestAssets/GetProfileTests/GetProfile_HappyPath_MultipleUsers.test.dialog rename to tests/unit/skills/people/TestAssets/GetProfileTests/GetProfile_HappyPath_MultipleUsers.test.dialog diff --git a/tests/skills/people/TestAssets/GetProfileTests/GetProfile_UserNotFound.test.dialog b/tests/unit/skills/people/TestAssets/GetProfileTests/GetProfile_UserNotFound.test.dialog similarity index 100% rename from tests/skills/people/TestAssets/GetProfileTests/GetProfile_UserNotFound.test.dialog rename to tests/unit/skills/people/TestAssets/GetProfileTests/GetProfile_UserNotFound.test.dialog diff --git a/tests/skills/people/TestAssets/GetProfileTests/UserTokenMock/nomagiccode.mock.dialog b/tests/unit/skills/people/TestAssets/GetProfileTests/UserTokenMock/nomagiccode.mock.dialog similarity index 100% rename from tests/skills/people/TestAssets/GetProfileTests/UserTokenMock/nomagiccode.mock.dialog rename to tests/unit/skills/people/TestAssets/GetProfileTests/UserTokenMock/nomagiccode.mock.dialog diff --git a/tests/skills/people/TestAssets/GetProfileTests/cachedResponses/ListDialog_en_us_lu/3914016862.json b/tests/unit/skills/people/TestAssets/GetProfileTests/cachedResponses/ListDialog_en_us_lu/3914016862.json similarity index 100% rename from tests/skills/people/TestAssets/GetProfileTests/cachedResponses/ListDialog_en_us_lu/3914016862.json rename to tests/unit/skills/people/TestAssets/GetProfileTests/cachedResponses/ListDialog_en_us_lu/3914016862.json diff --git a/tests/skills/people/TestAssets/GetProfileTests/cachedResponses/people_en_us_lu/1667363801.json b/tests/unit/skills/people/TestAssets/GetProfileTests/cachedResponses/people_en_us_lu/1667363801.json similarity index 100% rename from tests/skills/people/TestAssets/GetProfileTests/cachedResponses/people_en_us_lu/1667363801.json rename to tests/unit/skills/people/TestAssets/GetProfileTests/cachedResponses/people_en_us_lu/1667363801.json diff --git a/tests/skills/people/TestAssets/GetProfileTests/cachedResponses/people_en_us_lu/2122046538.json b/tests/unit/skills/people/TestAssets/GetProfileTests/cachedResponses/people_en_us_lu/2122046538.json similarity index 100% rename from tests/skills/people/TestAssets/GetProfileTests/cachedResponses/people_en_us_lu/2122046538.json rename to tests/unit/skills/people/TestAssets/GetProfileTests/cachedResponses/people_en_us_lu/2122046538.json diff --git a/tests/skills/people/TestAssets/GetProfileTests/cachedResponses/people_en_us_lu/2126032743.json b/tests/unit/skills/people/TestAssets/GetProfileTests/cachedResponses/people_en_us_lu/2126032743.json similarity index 100% rename from tests/skills/people/TestAssets/GetProfileTests/cachedResponses/people_en_us_lu/2126032743.json rename to tests/unit/skills/people/TestAssets/GetProfileTests/cachedResponses/people_en_us_lu/2126032743.json diff --git a/tests/skills/people/WhoSkillTestBase.cs b/tests/unit/skills/people/WhoSkillTestBase.cs similarity index 100% rename from tests/skills/people/WhoSkillTestBase.cs rename to tests/unit/skills/people/WhoSkillTestBase.cs diff --git a/tests/skills/people/app.schema b/tests/unit/skills/people/app.schema similarity index 100% rename from tests/skills/people/app.schema rename to tests/unit/skills/people/app.schema diff --git a/tests/skills/people/testsettings.json b/tests/unit/skills/people/testsettings.json similarity index 100% rename from tests/skills/people/testsettings.json rename to tests/unit/skills/people/testsettings.json From afb76d8afe0aace7c9f7229aff02e02c96b2bd69 Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Tue, 8 Jun 2021 12:48:10 -0500 Subject: [PATCH 23/39] generator-bot-adaptive: Include *.model (#1140) --- .../generators/app/templates/dotnet/functions/botName.csproj | 2 +- .../generators/app/templates/dotnet/webapp/botName.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj b/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj index b1dea0166e..af41f374be 100644 --- a/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj +++ b/generators/generator-bot-adaptive/generators/app/templates/dotnet/functions/botName.csproj @@ -5,7 +5,7 @@ <_FunctionsSkipCleanOutput>true - PreserveNewest diff --git a/generators/generator-bot-adaptive/generators/app/templates/dotnet/webapp/botName.csproj b/generators/generator-bot-adaptive/generators/app/templates/dotnet/webapp/botName.csproj index d3ef64ca79..9b8bd10fe2 100644 --- a/generators/generator-bot-adaptive/generators/app/templates/dotnet/webapp/botName.csproj +++ b/generators/generator-bot-adaptive/generators/app/templates/dotnet/webapp/botName.csproj @@ -5,7 +5,7 @@ OutOfProcess - + PreserveNewest From ae4e7e8f15e7134aece188c30b1113787134969a Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Wed, 9 Jun 2021 12:09:19 -0500 Subject: [PATCH 24/39] generator-bot-adaptive: Updated default speak voice (#1147) --- .../generators/app/templates/assets/appsettings.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generators/generator-bot-adaptive/generators/app/templates/assets/appsettings.json b/generators/generator-bot-adaptive/generators/app/templates/assets/appsettings.json index bd93316c28..c26d7bc9b7 100644 --- a/generators/generator-bot-adaptive/generators/app/templates/assets/appsettings.json +++ b/generators/generator-bot-adaptive/generators/app/templates/assets/appsettings.json @@ -55,7 +55,7 @@ "traceTranscript": false, "useInspection": false, "setSpeak": { - "voiceFontName": "en-US-AriaNeural", + "voiceFontName": "en-US-JennyNeural", "fallbackToTextForSpeechIfEmpty": true } }, From 639e25a8cb16f16baac4064536b2da89085e6c90 Mon Sep 17 00:00:00 2001 From: Peter Innes <53846082+peterinnesmsft@users.noreply.github.com> Date: Wed, 9 Jun 2021 11:04:28 -0700 Subject: [PATCH 25/39] chore: Update package metadata (#1148) * Updating package metadata for generators and components to reflect 1.0.0 GA. * Updating component package versions to GA release versions. * Update yarn.lock. --- .../generators/app/index.js | 2 +- .../generator-bot-core-assistant/package.json | 2 +- .../generators/app/index.js | 4 ++-- .../generator-bot-core-language/package.json | 2 +- .../generator-bot-core-qna/package.json | 2 +- generators/generator-bot-empty/package.json | 2 +- .../package.json | 6 ++--- .../generators/app/index.js | 2 +- .../package.json | 2 +- .../generators/app/index.js | 2 +- .../package.json | 2 +- .../Microsoft.Bot.Components.Teams.csproj | 2 +- yarn.lock | 24 +++++++++---------- 13 files changed, 27 insertions(+), 27 deletions(-) diff --git a/generators/generator-bot-core-assistant/generators/app/index.js b/generators/generator-bot-core-assistant/generators/app/index.js index f7fc2ae882..2ec266b4e9 100644 --- a/generators/generator-bot-core-assistant/generators/app/index.js +++ b/generators/generator-bot-core-assistant/generators/app/index.js @@ -12,7 +12,7 @@ const packageReferences = { [platforms.dotnet]: [ { name: 'Microsoft.Bot.Components.HelpAndCancel', - version: '1.0.0-preview.20210331.a54d9f1', + version: '1.0.0', }, ], [platforms.js]: [ diff --git a/generators/generator-bot-core-assistant/package.json b/generators/generator-bot-core-assistant/package.json index ffc20d2ae4..22944a9a4b 100644 --- a/generators/generator-bot-core-assistant/package.json +++ b/generators/generator-bot-core-assistant/package.json @@ -24,7 +24,7 @@ "lint": "eslint -c ../../.eslintrc.json ." }, "dependencies": { - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0-preview", + "@microsoft/generator-bot-adaptive": "workspace:^1.0.0", "yeoman-generator": "^2.0.5", "yeoman-test": "^1.9.1" }, diff --git a/generators/generator-bot-core-language/generators/app/index.js b/generators/generator-bot-core-language/generators/app/index.js index 70230c7a53..1afaed5f05 100644 --- a/generators/generator-bot-core-language/generators/app/index.js +++ b/generators/generator-bot-core-language/generators/app/index.js @@ -12,11 +12,11 @@ const packageReferences = { [platforms.dotnet]: [ { name: 'Microsoft.Bot.Components.HelpAndCancel', - version: '1.0.0-preview.20210331.a54d9f1', + version: '1.0.0', }, { name: 'Microsoft.Bot.Components.Welcome', - version: '1.0.0-preview.20210331.a54d9f1', + version: '1.0.0', }, ], [platforms.js]: [ diff --git a/generators/generator-bot-core-language/package.json b/generators/generator-bot-core-language/package.json index 376df1fe86..5cecb71f13 100644 --- a/generators/generator-bot-core-language/package.json +++ b/generators/generator-bot-core-language/package.json @@ -26,7 +26,7 @@ "lint": "eslint -c ../../.eslintrc.json ." }, "dependencies": { - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0-preview", + "@microsoft/generator-bot-adaptive": "workspace:^1.0.0", "yeoman-generator": "^2.0.5", "yeoman-test": "^1.9.1" }, diff --git a/generators/generator-bot-core-qna/package.json b/generators/generator-bot-core-qna/package.json index 1241c6e1cd..9692356e3e 100644 --- a/generators/generator-bot-core-qna/package.json +++ b/generators/generator-bot-core-qna/package.json @@ -23,7 +23,7 @@ "lint": "eslint -c ../../.eslintrc.json ." }, "dependencies": { - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0-preview", + "@microsoft/generator-bot-adaptive": "workspace:^1.0.0", "yeoman-generator": "^2.0.5", "yeoman-test": "^1.9.1" }, diff --git a/generators/generator-bot-empty/package.json b/generators/generator-bot-empty/package.json index 2e8ef8e10b..a4cdb7f0ff 100644 --- a/generators/generator-bot-empty/package.json +++ b/generators/generator-bot-empty/package.json @@ -26,7 +26,7 @@ "lint": "eslint -c ../../.eslintrc.json ." }, "dependencies": { - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0-preview", + "@microsoft/generator-bot-adaptive": "workspace:^1.0.0", "yeoman-generator": "^2.0.5", "yeoman-test": "^1.9.1" }, diff --git a/generators/generator-bot-enterprise-assistant/package.json b/generators/generator-bot-enterprise-assistant/package.json index 41d6ce5c9f..c7f51f4dc0 100644 --- a/generators/generator-bot-enterprise-assistant/package.json +++ b/generators/generator-bot-enterprise-assistant/package.json @@ -25,9 +25,9 @@ "lint": "eslint -c ../../.eslintrc.json ." }, "dependencies": { - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0-preview", - "@microsoft/generator-bot-enterprise-calendar": "workspace:^1.0.0-preview", - "@microsoft/generator-bot-enterprise-people": "workspace:^1.0.0-preview", + "@microsoft/generator-bot-adaptive": "workspace:^1.0.0", + "@microsoft/generator-bot-enterprise-calendar": "workspace:^1.0.0", + "@microsoft/generator-bot-enterprise-people": "workspace:^1.0.0", "uuid": "^8.3.2", "yeoman-generator": "^2.0.5", "yeoman-test": "^1.9.1" diff --git a/generators/generator-bot-enterprise-calendar/generators/app/index.js b/generators/generator-bot-enterprise-calendar/generators/app/index.js index 5415cd1d5d..64202cef42 100644 --- a/generators/generator-bot-enterprise-calendar/generators/app/index.js +++ b/generators/generator-bot-enterprise-calendar/generators/app/index.js @@ -16,7 +16,7 @@ module.exports = class extends BaseGenerator { { isPlugin: true, name: 'Microsoft.Bot.Components.Graph', - version: '1.0.0-preview.20210331.a54d9f1', + version: '1.0.0', }, ], modifyApplicationSettings: (appSettings) => { diff --git a/generators/generator-bot-enterprise-calendar/package.json b/generators/generator-bot-enterprise-calendar/package.json index a47e739f9f..419f85cefa 100644 --- a/generators/generator-bot-enterprise-calendar/package.json +++ b/generators/generator-bot-enterprise-calendar/package.json @@ -24,7 +24,7 @@ "lint": "eslint ." }, "dependencies": { - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0-preview", + "@microsoft/generator-bot-adaptive": "workspace:^1.0.0", "yeoman-generator": "^2.0.5", "yeoman-test": "^1.9.1" }, diff --git a/generators/generator-bot-enterprise-people/generators/app/index.js b/generators/generator-bot-enterprise-people/generators/app/index.js index 76353a2bfe..d85abc8a14 100644 --- a/generators/generator-bot-enterprise-people/generators/app/index.js +++ b/generators/generator-bot-enterprise-people/generators/app/index.js @@ -16,7 +16,7 @@ module.exports = class extends BaseGenerator { { isPlugin: true, name: 'Microsoft.Bot.Components.Graph', - version: '1.0.0-preview.20210331.a54d9f1', + version: '1.0.0', }, ], modifyApplicationSettings: (appSettings) => { diff --git a/generators/generator-bot-enterprise-people/package.json b/generators/generator-bot-enterprise-people/package.json index cf338c0448..7e8b5bb1f8 100644 --- a/generators/generator-bot-enterprise-people/package.json +++ b/generators/generator-bot-enterprise-people/package.json @@ -24,7 +24,7 @@ "lint": "eslint -c ../../.eslintrc.json ." }, "dependencies": { - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0-preview", + "@microsoft/generator-bot-adaptive": "workspace:^1.0.0", "yeoman-generator": "^2.0.5", "yeoman-test": "^1.9.1" }, diff --git a/packages/Teams/dotnet/Microsoft.Bot.Components.Teams.csproj b/packages/Teams/dotnet/Microsoft.Bot.Components.Teams.csproj index 0edf95a100..d333f2f004 100644 --- a/packages/Teams/dotnet/Microsoft.Bot.Components.Teams.csproj +++ b/packages/Teams/dotnet/Microsoft.Bot.Components.Teams.csproj @@ -8,7 +8,7 @@

    This library implements .NET support for adaptive dialogs with Microsoft Teams https://github.com/Microsoft/botframework-components/tree/main/packages/Teams/dotnet content - bots;botframework;botbuilder;msbot-component;msbot-action;msbot-trigger;msbot-middleware + msbot-component;msbot-action;msbot-trigger true ..\..\..\build\35MSSharedLib1024.snk true diff --git a/yarn.lock b/yarn.lock index 961a711956..7ea6daa0be 100644 --- a/yarn.lock +++ b/yarn.lock @@ -134,7 +134,7 @@ __metadata: languageName: unknown linkType: soft -"@microsoft/generator-bot-adaptive@workspace:^1.0.0-preview, @microsoft/generator-bot-adaptive@workspace:generators/generator-bot-adaptive": +"@microsoft/generator-bot-adaptive@workspace:^1.0.0, @microsoft/generator-bot-adaptive@workspace:generators/generator-bot-adaptive": version: 0.0.0-use.local resolution: "@microsoft/generator-bot-adaptive@workspace:generators/generator-bot-adaptive" dependencies: @@ -154,7 +154,7 @@ __metadata: version: 0.0.0-use.local resolution: "@microsoft/generator-bot-core-assistant@workspace:generators/generator-bot-core-assistant" dependencies: - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0-preview" + "@microsoft/generator-bot-adaptive": "workspace:^1.0.0" eslint: latest eslint-config-prettier: latest eslint-plugin-prettier: latest @@ -168,7 +168,7 @@ __metadata: version: 0.0.0-use.local resolution: "@microsoft/generator-bot-core-language@workspace:generators/generator-bot-core-language" dependencies: - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0-preview" + "@microsoft/generator-bot-adaptive": "workspace:^1.0.0" eslint: latest eslint-config-prettier: latest eslint-plugin-prettier: latest @@ -182,7 +182,7 @@ __metadata: version: 0.0.0-use.local resolution: "@microsoft/generator-bot-core-qna@workspace:generators/generator-bot-core-qna" dependencies: - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0-preview" + "@microsoft/generator-bot-adaptive": "workspace:^1.0.0" eslint: latest eslint-config-prettier: latest eslint-plugin-prettier: latest @@ -196,7 +196,7 @@ __metadata: version: 0.0.0-use.local resolution: "@microsoft/generator-bot-empty@workspace:generators/generator-bot-empty" dependencies: - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0-preview" + "@microsoft/generator-bot-adaptive": "workspace:^1.0.0" eslint: latest eslint-config-prettier: latest eslint-plugin-prettier: latest @@ -210,9 +210,9 @@ __metadata: version: 0.0.0-use.local resolution: "@microsoft/generator-bot-enterprise-assistant@workspace:generators/generator-bot-enterprise-assistant" dependencies: - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0-preview" - "@microsoft/generator-bot-enterprise-calendar": "workspace:^1.0.0-preview" - "@microsoft/generator-bot-enterprise-people": "workspace:^1.0.0-preview" + "@microsoft/generator-bot-adaptive": "workspace:^1.0.0" + "@microsoft/generator-bot-enterprise-calendar": "workspace:^1.0.0" + "@microsoft/generator-bot-enterprise-people": "workspace:^1.0.0" eslint: latest eslint-config-prettier: latest eslint-plugin-prettier: latest @@ -223,11 +223,11 @@ __metadata: languageName: unknown linkType: soft -"@microsoft/generator-bot-enterprise-calendar@workspace:^1.0.0-preview, @microsoft/generator-bot-enterprise-calendar@workspace:generators/generator-bot-enterprise-calendar": +"@microsoft/generator-bot-enterprise-calendar@workspace:^1.0.0, @microsoft/generator-bot-enterprise-calendar@workspace:generators/generator-bot-enterprise-calendar": version: 0.0.0-use.local resolution: "@microsoft/generator-bot-enterprise-calendar@workspace:generators/generator-bot-enterprise-calendar" dependencies: - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0-preview" + "@microsoft/generator-bot-adaptive": "workspace:^1.0.0" eslint: latest eslint-config-prettier: latest eslint-plugin-prettier: latest @@ -237,11 +237,11 @@ __metadata: languageName: unknown linkType: soft -"@microsoft/generator-bot-enterprise-people@workspace:^1.0.0-preview, @microsoft/generator-bot-enterprise-people@workspace:generators/generator-bot-enterprise-people": +"@microsoft/generator-bot-enterprise-people@workspace:^1.0.0, @microsoft/generator-bot-enterprise-people@workspace:generators/generator-bot-enterprise-people": version: 0.0.0-use.local resolution: "@microsoft/generator-bot-enterprise-people@workspace:generators/generator-bot-enterprise-people" dependencies: - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0-preview" + "@microsoft/generator-bot-adaptive": "workspace:^1.0.0" eslint: latest eslint-config-prettier: latest eslint-plugin-prettier: latest From c5bb422940e0faf5a8e0bd687476ec2bdf5c4ff2 Mon Sep 17 00:00:00 2001 From: Ryan Lengel Isgrig <43043272+ryanlengel@users.noreply.github.com> Date: Fri, 11 Jun 2021 12:24:57 -0700 Subject: [PATCH 26/39] feat: Azure resource deployment for Components Functional Tests pipelines (Empty Bot placeholders) (#1149) * Update createSharedResources.yml Rename bffn instances to bfcfn to avoid overlap * Move /tests/functional/build/templates to /build/templates * Set up CI with Azure Pipelines [skip ci] * Remove DotnetComposer, JS, Python bots * Remove all DotNet bots except for Simple Host Bot * Remove additional other language references and rename variables to bfcfn * Replace bffn with bfcfn * Update directory of SimpleHostBot * Rename bot vars to empty bot * rename additional refs * remove duplicate app in variables * add functions to dotnet * add JS parameters and template for empty bot in webapp/functions * add prepare_jsgroup step * fix location to js simple host bot * Remove python refs * Add InternalAppSerivcePlanJSName var * Remove additional Python steps in shared resource creation, bot resource deployment and cleanup * Change default value of appinsights resource * Add blog storage deployment to shared resource creation * add parameter to cli call to deploy storage * fix casing --- .../template-app-insights-resources.json | 2 +- .../templates/template-bot-resources.json | 0 .../template-cosmosdb-resources.json | 0 .../template-key-vault-resources.json | 0 .../template-python-bot-resources.json | 0 ...template-service-plan-linux-resources.json | 0 ...mplate-service-plan-windows-resources.json | 0 .../templates/template-storage-resources.json | 70 +++ tests/functional/Bots/Python/.gitignore | 3 - .../Consumers/CodeFirst/SimpleHostBot/.env | 24 - .../adapter_with_error_handler.py | 141 ----- .../Consumers/CodeFirst/SimpleHostBot/app.py | 89 --- .../SimpleHostBot/authentication/__init__.py | 6 - .../allowed_skills_claims_validator.py | 44 -- .../CodeFirst/SimpleHostBot/bots/__init__.py | 7 - .../CodeFirst/SimpleHostBot/bots/host_bot.py | 186 ------ .../CodeFirst/SimpleHostBot/config.py | 71 --- .../SimpleHostBot/dialogs/__init__.py | 6 - .../SimpleHostBot/dialogs/setup_dialog.py | 129 ---- .../SimpleHostBot/helpers/dialog_helper.py | 19 - .../CodeFirst/SimpleHostBot/requirements.txt | 3 - .../skill_conversation_id_factory.py | 75 --- .../Consumers/CodeFirst/WaterfallHostBot/.env | 53 -- .../CodeFirst/WaterfallHostBot/.pylintrc | 590 ------------------ .../adapter_with_error_handler.py | 140 ----- .../CodeFirst/WaterfallHostBot/app.py | 101 --- .../authentication/__init__.py | 6 - .../allowed_skills_claims_validator.py | 33 - .../WaterfallHostBot/bots/__init__.py | 7 - .../WaterfallHostBot/bots/root_bot.py | 84 --- .../WaterfallHostBot/cards/welcomeCard.json | 29 - .../WaterfallHostBot/dialogs/__init__.py | 8 - .../WaterfallHostBot/dialogs/main_dialog.py | 456 -------------- .../WaterfallHostBot/dialogs/sso/__init__.py | 7 - .../dialogs/sso/sso_dialog.py | 137 ---- .../dialogs/sso/sso_signin_dialog.py | 57 -- .../dialogs/tangent_dialog.py | 51 -- .../WaterfallHostBot/helpers/dialog_helper.py | 19 - .../WaterfallHostBot/requirements.txt | 3 - .../skill_conversation_id_factory.py | 76 --- .../WaterfallHostBot/skills/echo_skill.py | 25 - .../skills/skill_definition.py | 25 - .../WaterfallHostBot/skills/teams_skill.py | 36 -- .../skills/waterfall_skill.py | 33 - .../WaterfallHostBot/skills_configuration.py | 88 --- .../token_exchange_skill_handler.py | 199 ------ .../Skills/CodeFirst/EchoSkillBot/app.py | 135 ---- .../EchoSkillBot/authentication/__init__.py | 6 - .../allowed_callers_claims_validator.py | 29 - .../CodeFirst/EchoSkillBot/bots/__init__.py | 6 - .../CodeFirst/EchoSkillBot/bots/echo_bot.py | 32 - .../Skills/CodeFirst/EchoSkillBot/config.py | 17 - .../manifests/echoskillbot-manifest-1.0.json | 23 - .../CodeFirst/EchoSkillBot/requirements.txt | 1 - .../Skills/CodeFirst/WaterfallSkillBot/.env | 11 - .../CodeFirst/WaterfallSkillBot/.pylintrc | 582 ----------------- .../Skills/CodeFirst/WaterfallSkillBot/app.py | 176 ------ .../authentication/__init__.py | 6 - .../allowed_callers_claims_validator.py | 50 -- .../WaterfallSkillBot/bots/__init__.py | 6 - .../WaterfallSkillBot/bots/skill_bot.py | 69 -- .../CodeFirst/WaterfallSkillBot/config.py | 34 - .../WaterfallSkillBot/dialogs/__init__.py | 6 - .../dialogs/activity_router_dialog.py | 166 ----- .../dialogs/auth/__init__.py | 6 - .../dialogs/auth/auth_dialog.py | 106 ---- .../dialogs/cards/__init__.py | 9 - .../dialogs/cards/card_dialog.py | 282 --------- .../dialogs/cards/card_options.py | 23 - .../dialogs/cards/card_sample_helper.py | 557 ----------------- .../dialogs/cards/channel_supported_cards.py | 33 - .../cards/files/buildreactionbotframework.jpg | Bin 65992 -> 0 bytes .../dialogs/cards/files/music.mp3 | Bin 647055 -> 0 bytes .../dialogs/cards/files/teams-logo.png | Bin 6412 -> 0 bytes .../dialogs/delete/__init__.py | 6 - .../dialogs/delete/delete_dialog.py | 44 -- .../dialogs/file_upload/__init__.py | 6 - .../dialogs/file_upload/file_upload_dialog.py | 86 --- .../message_with_attachment/__init__.py | 6 - .../message_with_attachment_dialog.py | 125 ---- .../dialogs/proactive/__init__.py | 7 - .../proactive/continuation_parameters.py | 16 - .../proactive/wait_for_proactive_dialog.py | 77 --- .../WaterfallSkillBot/dialogs/sso/__init__.py | 7 - .../dialogs/sso/sso_skill_dialog.py | 112 ---- .../dialogs/sso/sso_skill_signin_dialog.py | 56 -- .../dialogs/update/__init__.py | 6 - .../dialogs/update/update_dialog.py | 90 --- .../images/architecture-resize.png | Bin 137666 -> 0 bytes .../waterfallskillbot-manifest-1.0.json | 105 ---- .../WaterfallSkillBot/middleware/__init__.py | 6 - .../middleware/sso_save_state_middleware.py | 30 - .../WaterfallSkillBot/requirements.txt | 3 - .../skill_adapter_with_error_handler.py | 103 --- .../skill_conversation_id_factory.py | 75 --- .../cleanupResources/cleanupResources.yml | 64 +- .../deployBotResources/deployBotResources.yml | 395 ++---------- .../yaml/deployBotResources/python/deploy.yml | 183 ------ .../python/evaluateDependenciesVariables.yml | 110 ---- .../sharedResources/createSharedResources.yml | 40 +- .../yaml/testScenarios/runTestScenarios.yml | 24 +- 101 files changed, 146 insertions(+), 7145 deletions(-) rename {tests/functional/build => build}/templates/template-app-insights-resources.json (96%) rename {tests/functional/build => build}/templates/template-bot-resources.json (100%) rename {tests/functional/build => build}/templates/template-cosmosdb-resources.json (100%) rename {tests/functional/build => build}/templates/template-key-vault-resources.json (100%) rename {tests/functional/build => build}/templates/template-python-bot-resources.json (100%) rename {tests/functional/build => build}/templates/template-service-plan-linux-resources.json (100%) rename {tests/functional/build => build}/templates/template-service-plan-windows-resources.json (100%) create mode 100644 build/templates/template-storage-resources.json delete mode 100644 tests/functional/Bots/Python/.gitignore delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/.env delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/adapter_with_error_handler.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/app.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/authentication/__init__.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/authentication/allowed_skills_claims_validator.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/bots/__init__.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/bots/host_bot.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/config.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/dialogs/__init__.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/dialogs/setup_dialog.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/helpers/dialog_helper.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/requirements.txt delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/skill_conversation_id_factory.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/.env delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/.pylintrc delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/adapter_with_error_handler.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/app.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/authentication/__init__.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/authentication/allowed_skills_claims_validator.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/bots/__init__.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/bots/root_bot.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/cards/welcomeCard.json delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/__init__.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/main_dialog.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/__init__.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/sso_dialog.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/sso_signin_dialog.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/tangent_dialog.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/helpers/dialog_helper.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/requirements.txt delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skill_conversation_id_factory.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/echo_skill.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/skill_definition.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/teams_skill.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/waterfall_skill.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills_configuration.py delete mode 100644 tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/token_exchange_skill_handler.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/app.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/authentication/__init__.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/authentication/allowed_callers_claims_validator.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/bots/__init__.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/bots/echo_bot.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/config.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/manifests/echoskillbot-manifest-1.0.json delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/requirements.txt delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/.env delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/.pylintrc delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/app.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/authentication/__init__.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/authentication/allowed_callers_claims_validator.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/bots/__init__.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/bots/skill_bot.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/config.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/__init__.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/activity_router_dialog.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/auth/__init__.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/auth/auth_dialog.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/__init__.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_dialog.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_options.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_sample_helper.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/channel_supported_cards.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/files/buildreactionbotframework.jpg delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/files/music.mp3 delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/files/teams-logo.png delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/delete/__init__.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/delete/delete_dialog.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/file_upload/__init__.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/file_upload/file_upload_dialog.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/message_with_attachment/__init__.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/message_with_attachment/message_with_attachment_dialog.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/__init__.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/continuation_parameters.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/wait_for_proactive_dialog.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/__init__.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/sso_skill_dialog.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/sso_skill_signin_dialog.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/update/__init__.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/update/update_dialog.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/images/architecture-resize.png delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/manifests/waterfallskillbot-manifest-1.0.json delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/middleware/__init__.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/middleware/sso_save_state_middleware.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/requirements.txt delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/skill_adapter_with_error_handler.py delete mode 100644 tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/skill_conversation_id_factory.py delete mode 100644 tests/functional/build/yaml/deployBotResources/python/deploy.yml delete mode 100644 tests/functional/build/yaml/deployBotResources/python/evaluateDependenciesVariables.yml diff --git a/tests/functional/build/templates/template-app-insights-resources.json b/build/templates/template-app-insights-resources.json similarity index 96% rename from tests/functional/build/templates/template-app-insights-resources.json rename to build/templates/template-app-insights-resources.json index 640b82e924..0fa26fa2e3 100644 --- a/tests/functional/build/templates/template-app-insights-resources.json +++ b/build/templates/template-app-insights-resources.json @@ -4,7 +4,7 @@ "parameters": { "appInsightsName": { "type": "string", - "defaultValue": "bffnappinsights", + "defaultValue": "bfcfnappinsights", "metadata": { "description": "The name of the Application Insights instance." } diff --git a/tests/functional/build/templates/template-bot-resources.json b/build/templates/template-bot-resources.json similarity index 100% rename from tests/functional/build/templates/template-bot-resources.json rename to build/templates/template-bot-resources.json diff --git a/tests/functional/build/templates/template-cosmosdb-resources.json b/build/templates/template-cosmosdb-resources.json similarity index 100% rename from tests/functional/build/templates/template-cosmosdb-resources.json rename to build/templates/template-cosmosdb-resources.json diff --git a/tests/functional/build/templates/template-key-vault-resources.json b/build/templates/template-key-vault-resources.json similarity index 100% rename from tests/functional/build/templates/template-key-vault-resources.json rename to build/templates/template-key-vault-resources.json diff --git a/tests/functional/build/templates/template-python-bot-resources.json b/build/templates/template-python-bot-resources.json similarity index 100% rename from tests/functional/build/templates/template-python-bot-resources.json rename to build/templates/template-python-bot-resources.json diff --git a/tests/functional/build/templates/template-service-plan-linux-resources.json b/build/templates/template-service-plan-linux-resources.json similarity index 100% rename from tests/functional/build/templates/template-service-plan-linux-resources.json rename to build/templates/template-service-plan-linux-resources.json diff --git a/tests/functional/build/templates/template-service-plan-windows-resources.json b/build/templates/template-service-plan-windows-resources.json similarity index 100% rename from tests/functional/build/templates/template-service-plan-windows-resources.json rename to build/templates/template-service-plan-windows-resources.json diff --git a/build/templates/template-storage-resources.json b/build/templates/template-storage-resources.json new file mode 100644 index 0000000000..5991d5cd5e --- /dev/null +++ b/build/templates/template-storage-resources.json @@ -0,0 +1,70 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "storageAccountsName": { + "defaultValue": "bfcfnstorage", + "type": "String" + }, + "location": { + "type": "string", + "defaultValue": "[resourceGroup().location]", + "metadata": { + "description": "Specifies the Azure location where the storage account should be created." + } + } + }, + "variables": {}, + "resources": [ + { + "type": "Microsoft.Storage/storageAccounts", + "apiVersion": "2021-04-01", + "name": "[parameters('storageAccountsName')]", + "location": "[parameters('location')]", + "sku": { + "name": "Standard_LRS", + "tier": "Standard" + }, + "kind": "StorageV2", + "properties": { + "networkAcls": { + "bypass": "AzureServices", + "virtualNetworkRules": [], + "ipRules": [], + "defaultAction": "Allow" + }, + "supportsHttpsTrafficOnly": true, + "encryption": { + "services": { + "blob": { + "keyType": "Account", + "enabled": true + } + }, + "keySource": "Microsoft.Storage" + }, + "accessTier": "Hot" + } + }, + { + "type": "Microsoft.Storage/storageAccounts/blobServices", + "apiVersion": "2021-04-01", + "name": "[concat(parameters('storageAccountsName'), '/default')]", + "dependsOn": [ + "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountsName'))]" + ], + "sku": { + "name": "Standard_LRS", + "tier": "Standard" + }, + "properties": { + "cors": { + "corsRules": [] + }, + "deleteRetentionPolicy": { + "enabled": false + } + } + } + ] +} \ No newline at end of file diff --git a/tests/functional/Bots/Python/.gitignore b/tests/functional/Bots/Python/.gitignore deleted file mode 100644 index 01e8a341d5..0000000000 --- a/tests/functional/Bots/Python/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ - -# Ignore .deployment files generated to deploy Python to linux from VSCode -**/.deployment \ No newline at end of file diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/.env b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/.env deleted file mode 100644 index 11aabb20f4..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/.env +++ /dev/null @@ -1,24 +0,0 @@ -MicrosoftAppId= -MicrosoftAppPassword= -SkillHostEndpoint=http://localhost:37000/api/skills - -skill_EchoSkillBotComposerDotNet_appId= -skill_EchoSkillBotComposerDotNet_endpoint=http://localhost:35410/api/messages - -skill_EchoSkillBotDotNet_appId= -skill_EchoSkillBotDotNet_endpoint=http://localhost:35400/api/messages - -skill_EchoSkillBotDotNet21_appId= -skill_EchoSkillBotDotNet21_endpoint=http://localhost:35405/api/messages - -skill_EchoSkillBotDotNetV3_appId= -skill_EchoSkillBotDotNetV3_endpoint=http://localhost:35407/api/messages - -skill_EchoSkillBotJS_appId= -skill_EchoSkillBotJS_endpoint=http://localhost:36400/api/messages - -skill_EchoSkillBotJSV3_appId= -skill_EchoSkillBotJSV3_endpoint=http://localhost:36407/api/messages - -skill_EchoSkillBotPython_appId= -skill_EchoSkillBotPython_endpoint=http://localhost:37400/api/messages diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/adapter_with_error_handler.py b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/adapter_with_error_handler.py deleted file mode 100644 index f8271d257a..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/adapter_with_error_handler.py +++ /dev/null @@ -1,141 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. -import sys -import traceback - -from botbuilder.core import ( - BotFrameworkAdapter, - BotFrameworkAdapterSettings, - ConversationState, - MessageFactory, - TurnContext, -) -from botbuilder.integration.aiohttp.skills import SkillHttpClient -from botbuilder.schema import ActivityTypes, Activity, InputHints - -from config import DefaultConfig, SkillConfiguration -from bots.host_bot import ACTIVE_SKILL_PROPERTY_NAME - - -class AdapterWithErrorHandler(BotFrameworkAdapter): - def __init__( - self, - settings: BotFrameworkAdapterSettings, - config: DefaultConfig, - conversation_state: ConversationState, - skill_client: SkillHttpClient = None, - skill_config: SkillConfiguration = None, - ): - super().__init__(settings) - self._config = config - - if not conversation_state: - raise TypeError( - "AdapterWithErrorHandler: `conversation_state` argument cannot be None." - ) - self._conversation_state = conversation_state - self._skill_client = skill_client - self._skill_config = skill_config - - self.on_turn_error = self._handle_turn_error - - async def _handle_turn_error(self, turn_context: TurnContext, error: Exception): - # This check writes out errors to console log - # NOTE: In production environment, you should consider logging this to Azure - # application insights. - print(f"\n [on_turn_error] unhandled error: {error}", file=sys.stderr) - traceback.print_exc() - await self._send_error_message(turn_context, error) - await self._end_skill_conversation(turn_context, error) - await self._clear_conversation_state(turn_context) - - async def _send_error_message(self, turn_context: TurnContext, error: Exception): - if not self._skill_client or not self._skill_config: - return - try: - exc_info = sys.exc_info() - stack = traceback.format_exception(*exc_info) - - # Send a message to the user. - error_message_text = "The bot encountered an error or bug." - error_message = MessageFactory.text( - error_message_text, error_message_text, InputHints.ignoring_input - ) - error_message.value = {"message": error, "stack": stack} - await turn_context.send_activity(error_message) - - await turn_context.send_activity(f"Exception: {error}") - await turn_context.send_activity(traceback.format_exc()) - - error_message_text = ( - "To continue to run this bot, please fix the bot source code." - ) - error_message = MessageFactory.text( - error_message_text, error_message_text, InputHints.ignoring_input - ) - await turn_context.send_activity(error_message) - - # Send a trace activity, which will be displayed in Bot Framework Emulator. - await turn_context.send_trace_activity( - label="TurnError", - name="on_turn_error Trace", - value=f"{error}", - value_type="https://www.botframework.com/schemas/error", - ) - except Exception as exception: - print( - f"\n Exception caught on _send_error_message : {exception}", - file=sys.stderr, - ) - traceback.print_exc() - - async def _end_skill_conversation( - self, turn_context: TurnContext, error: Exception - ): - if not self._skill_client or not self._skill_config: - return - - try: - # Inform the active skill that the conversation is ended so that it has a chance to clean up. - # Note: the root bot manages the ActiveSkillPropertyName, which has a value while the root bot - # has an active conversation with a skill. - active_skill = await self._conversation_state.create_property( - ACTIVE_SKILL_PROPERTY_NAME - ).get(turn_context) - - if active_skill: - bot_id = self._config.APP_ID - end_of_conversation = Activity(type=ActivityTypes.end_of_conversation) - end_of_conversation.code = "RootSkillError" - TurnContext.apply_conversation_reference( - end_of_conversation, - TurnContext.get_conversation_reference(turn_context.activity), - True, - ) - - await self._conversation_state.save_changes(turn_context, True) - await self._skill_client.post_activity_to_skill( - bot_id, - active_skill, - self._skill_config.SKILL_HOST_ENDPOINT, - end_of_conversation, - ) - except Exception as exception: - print( - f"\n Exception caught on _end_skill_conversation : {exception}", - file=sys.stderr, - ) - traceback.print_exc() - - async def _clear_conversation_state(self, turn_context: TurnContext): - try: - # Delete the conversationState for the current conversation to prevent the - # bot from getting stuck in a error-loop caused by being in a bad state. - # ConversationState should be thought of as similar to "cookie-state" for a Web page. - await self._conversation_state.delete(turn_context) - except Exception as exception: - print( - f"\n Exception caught on _clear_conversation_state : {exception}", - file=sys.stderr, - ) - traceback.print_exc() diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/app.py b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/app.py deleted file mode 100644 index 283492ff41..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/app.py +++ /dev/null @@ -1,89 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from aiohttp import web -from aiohttp.web import Request, Response -from botbuilder.core import ( - BotFrameworkAdapterSettings, - ConversationState, - MemoryStorage, -) -from botbuilder.core.integration import ( - aiohttp_channel_service_routes, - aiohttp_error_middleware, -) -from botbuilder.core.skills import SkillHandler -from botbuilder.integration.aiohttp.skills import SkillHttpClient -from botbuilder.schema import Activity -from botframework.connector.auth import ( - AuthenticationConfiguration, - SimpleCredentialProvider, -) - -from dialogs import SetupDialog -from skill_conversation_id_factory import SkillConversationIdFactory -from authentication import AllowedSkillsClaimsValidator -from bots import HostBot -from config import DefaultConfig, SkillConfiguration -from adapter_with_error_handler import AdapterWithErrorHandler - -CONFIG = DefaultConfig() -SKILL_CONFIG = SkillConfiguration() - -# Whitelist skills from SKILL_CONFIG -AUTH_CONFIG = AuthenticationConfiguration( - claims_validator=AllowedSkillsClaimsValidator(CONFIG).claims_validator -) -# Create adapter. -# See https://aka.ms/about-bot-adapter to learn more about how bots work. -SETTINGS = BotFrameworkAdapterSettings( - app_id=CONFIG.APP_ID, - app_password=CONFIG.APP_PASSWORD, - auth_configuration=AUTH_CONFIG, -) - -STORAGE = MemoryStorage() -CONVERSATION_STATE = ConversationState(STORAGE) - -ID_FACTORY = SkillConversationIdFactory(STORAGE) -CREDENTIAL_PROVIDER = SimpleCredentialProvider(CONFIG.APP_ID, CONFIG.APP_PASSWORD) -CLIENT = SkillHttpClient(CREDENTIAL_PROVIDER, ID_FACTORY) - -ADAPTER = AdapterWithErrorHandler( - SETTINGS, CONFIG, CONVERSATION_STATE, CLIENT, SKILL_CONFIG -) - -# Create the Bot -DIALOG = SetupDialog(CONVERSATION_STATE, SKILL_CONFIG) -BOT = HostBot(CONVERSATION_STATE, SKILL_CONFIG, CLIENT, CONFIG, DIALOG) - -SKILL_HANDLER = SkillHandler(ADAPTER, BOT, ID_FACTORY, CREDENTIAL_PROVIDER, AUTH_CONFIG) - - -# Listen for incoming requests on /api/messages -async def messages(req: Request) -> Response: - # Main bot message handler. - if "application/json" in req.headers["Content-Type"]: - body = await req.json() - else: - return Response(status=415) - - activity = Activity().deserialize(body) - auth_header = req.headers["Authorization"] if "Authorization" in req.headers else "" - - try: - await ADAPTER.process_activity(activity, auth_header, BOT.on_turn) - return Response(status=201) - except Exception as exception: - raise exception - - -APP = web.Application(middlewares=[aiohttp_error_middleware]) -APP.router.add_post("/api/messages", messages) -APP.router.add_routes(aiohttp_channel_service_routes(SKILL_HANDLER, "/api/skills")) - -if __name__ == "__main__": - try: - web.run_app(APP, host="localhost", port=CONFIG.PORT) - except Exception as error: - raise error diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/authentication/__init__.py b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/authentication/__init__.py deleted file mode 100644 index 550f9b54b6..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/authentication/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from .allowed_skills_claims_validator import AllowedSkillsClaimsValidator - -__all__ = ["AllowedSkillsClaimsValidator"] diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/authentication/allowed_skills_claims_validator.py b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/authentication/allowed_skills_claims_validator.py deleted file mode 100644 index 7f0d26f087..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/authentication/allowed_skills_claims_validator.py +++ /dev/null @@ -1,44 +0,0 @@ -from typing import Awaitable, Callable, Dict, List - -from botframework.connector.auth import JwtTokenValidation, SkillValidation - -from config import DefaultConfig - - -class AllowedSkillsClaimsValidator: - - config_key = "ALLOWED_CALLERS" - - def __init__(self, config: DefaultConfig): - if not config: - raise TypeError( - "AllowedSkillsClaimsValidator: config object cannot be None." - ) - - # ALLOWED_CALLERS is the setting in config.py file - # that consists of the list of parent bot ids that are allowed to access the skill - # to add a new parent bot simply go to the AllowedCallers and add - # the parent bot's microsoft app id to the list - caller_list = getattr(config, self.config_key) - if caller_list is None: - raise TypeError(f'"{self.config_key}" not found in configuration.') - self._allowed_callers = caller_list - - @property - def claims_validator(self) -> Callable[[List[Dict]], Awaitable]: - async def allow_callers_claims_validator(claims: Dict[str, object]): - # if allowed_callers is None we allow all calls - if "*" not in self._allowed_callers and SkillValidation.is_skill_claim( - claims - ): - # Check that the appId claim in the skill request is in the list of skills configured for this bot. - app_id = JwtTokenValidation.get_app_id_from_claims(claims) - if app_id not in self._allowed_callers: - raise PermissionError( - f'Received a request from a bot with an app ID of "{app_id}".' - f" To enable requests from this caller, add the app ID to your configuration file." - ) - - return - - return allow_callers_claims_validator diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/bots/__init__.py b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/bots/__init__.py deleted file mode 100644 index acb6f75c35..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/bots/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from .host_bot import HostBot - - -__all__ = ["HostBot"] diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/bots/host_bot.py b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/bots/host_bot.py deleted file mode 100644 index ab1e383cc8..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/bots/host_bot.py +++ /dev/null @@ -1,186 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. -import copy -from typing import List -from botbuilder.core import ( - ActivityHandler, - ConversationState, - MessageFactory, - TurnContext, -) -from botbuilder.core.skills import BotFrameworkSkill -from botbuilder.dialogs import Dialog -from botbuilder.schema import ( - ActivityTypes, - ChannelAccount, - ExpectedReplies, - DeliveryModes, -) -from botbuilder.integration.aiohttp.skills import SkillHttpClient - -from config import DefaultConfig, SkillConfiguration -from helpers.dialog_helper import DialogHelper - -DELIVERY_MODE_PROPERTY_NAME = "deliveryModeProperty" -ACTIVE_SKILL_PROPERTY_NAME = "activeSkillProperty" - - -class HostBot(ActivityHandler): - def __init__( - self, - conversation_state: ConversationState, - skills_config: SkillConfiguration, - skill_client: SkillHttpClient, - config: DefaultConfig, - dialog: Dialog, - ): - self._bot_id = config.APP_ID - self._skill_client = skill_client - self._skills_config = skills_config - self._conversation_state = conversation_state - self._dialog = dialog - self._dialog_state_property = conversation_state.create_property("DialogState") - - # Create state property to track the delivery mode and active skill. - self._delivery_mode_property = conversation_state.create_property( - DELIVERY_MODE_PROPERTY_NAME - ) - self._active_skill_property = conversation_state.create_property( - ACTIVE_SKILL_PROPERTY_NAME - ) - - async def on_turn(self, turn_context): - # Forward all activities except EndOfConversation to the active skill. - if turn_context.activity.type != ActivityTypes.end_of_conversation: - # Try to get the active skill - active_skill: BotFrameworkSkill = await self._active_skill_property.get( - turn_context - ) - - if active_skill: - delivery_mode: str = await self._delivery_mode_property.get( - turn_context - ) - - # Send the activity to the skill - await self.__send_to_skill(turn_context, delivery_mode, active_skill) - return - - await super().on_turn(turn_context) - # Save any state changes that might have occurred during the turn. - await self._conversation_state.save_changes(turn_context) - - async def on_message_activity(self, turn_context: TurnContext): - if turn_context.activity.text in self._skills_config.SKILLS: - delivery_mode: str = await self._delivery_mode_property.get(turn_context) - selected_skill = self._skills_config.SKILLS[turn_context.activity.text] - v3_bots = ["EchoSkillBotDotNetV3", "EchoSkillBotJSV3"] - - if ( - selected_skill - and delivery_mode == DeliveryModes.expect_replies - and selected_skill.id.lower() in (id.lower() for id in v3_bots) - ): - message = MessageFactory.text( - "V3 Bots do not support 'expectReplies' delivery mode." - ) - await turn_context.send_activity(message) - - # Forget delivery mode and skill invocation. - await self._delivery_mode_property.delete(turn_context) - - # Restart setup dialog - await self._conversation_state.delete(turn_context) - - await DialogHelper.run_dialog( - self._dialog, - turn_context, - self._dialog_state_property, - ) - - async def on_end_of_conversation_activity(self, turn_context: TurnContext): - await self.end_conversation(turn_context.activity, turn_context) - - async def on_members_added_activity( - self, members_added: List[ChannelAccount], turn_context: TurnContext - ): - for member in members_added: - if member.id != turn_context.activity.recipient.id: - await turn_context.send_activity( - MessageFactory.text("Hello and welcome!") - ) - await DialogHelper.run_dialog( - self._dialog, - turn_context, - self._dialog_state_property, - ) - - async def end_conversation(self, activity, turn_context): - # Forget delivery mode and skill invocation. - await self._delivery_mode_property.delete(turn_context) - await self._active_skill_property.delete(turn_context) - - eoc_activity_message = ( - f"Received {ActivityTypes.end_of_conversation}.\n\nCode: {activity.code}." - ) - if activity.text: - eoc_activity_message = eoc_activity_message + f"\n\nText: {activity.text}" - if activity.value: - eoc_activity_message = eoc_activity_message + f"\n\nValue: {activity.value}" - await turn_context.send_activity(eoc_activity_message) - - # We are back - await turn_context.send_activity(MessageFactory.text("Back in the host bot.")) - - # Restart setup dialog. - await DialogHelper.run_dialog( - self._dialog, - turn_context, - self._dialog_state_property, - ) - - await self._conversation_state.save_changes(turn_context) - - async def __send_to_skill( - self, - turn_context: TurnContext, - delivery_mode: str, - target_skill: BotFrameworkSkill, - ): - # NOTE: Always SaveChanges() before calling a skill so that any activity generated by the skill - # will have access to current accurate state. - await self._conversation_state.save_changes(turn_context, force=True) - - if delivery_mode == "expectReplies": - # Clone activity and update its delivery mode. - activity = copy.copy(turn_context.activity) - activity.delivery_mode = delivery_mode - - # Route the activity to the skill. - expect_replies_response = await self._skill_client.post_activity_to_skill( - self._bot_id, - target_skill, - self._skills_config.SKILL_HOST_ENDPOINT, - activity, - ) - - # Route response activities back to the channel. - response_activities: ExpectedReplies = ( - ExpectedReplies().deserialize(expect_replies_response.body).activities - ) - - for response_activity in response_activities: - if response_activity.type == ActivityTypes.end_of_conversation: - await self.end_conversation(response_activity, turn_context) - - else: - await turn_context.send_activity(response_activity) - - else: - # Route the activity to the skill. - await self._skill_client.post_activity_to_skill( - self._bot_id, - target_skill, - self._skills_config.SKILL_HOST_ENDPOINT, - turn_context.activity, - ) diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/config.py b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/config.py deleted file mode 100644 index 6e4da1d2a4..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/config.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import os -from typing import Dict -from botbuilder.core.skills import BotFrameworkSkill -from dotenv import load_dotenv - -""" Bot Configuration """ - - -class DefaultConfig: - """ Bot Configuration """ - - load_dotenv() - - PORT = 37000 - APP_ID = os.getenv("MicrosoftAppId") - APP_PASSWORD = os.getenv("MicrosoftAppPassword") - SKILL_HOST_ENDPOINT = os.getenv("SkillHostEndpoint") - SKILLS = [] - - # Callers to only those specified, '*' allows any caller. - # Example: os.environ.get("AllowedCallers", ["54d3bb6a-3b6d-4ccd-bbfd-cad5c72fb53a"]) - ALLOWED_CALLERS = os.environ.get("AllowedCallers", ["*"]) - - @staticmethod - def configure_skills(): - skills = list() - env_skills = [x for x in os.environ if ((x.lower().startswith("skill_")) and ('group' not in x.lower()))] - - for envKey in env_skills: - keys = envKey.split("_") - bot_id = keys[1] - key = keys[2] - index = -1 - - for i, newSkill in enumerate(skills): - if newSkill["id"] == bot_id: - index = i - - if key.lower() == "appid": - attr = "app_id" - elif key.lower() == "endpoint": - attr = "skill_endpoint" - else: - raise ValueError( - f"[SkillsConfiguration]: Invalid environment variable declaration {key}" - ) - - env_val = os.getenv(envKey) - - if index == -1: - skill = {"id": bot_id, attr: env_val} - skills.append(skill) - else: - skills[index][attr] = env_val - pass - - DefaultConfig.SKILLS = skills - - -DefaultConfig.configure_skills() - - -class SkillConfiguration: - SKILL_HOST_ENDPOINT = DefaultConfig.SKILL_HOST_ENDPOINT - SKILLS: Dict[str, BotFrameworkSkill] = { - skill["id"]: BotFrameworkSkill(**skill) for skill in DefaultConfig.SKILLS - } diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/dialogs/__init__.py b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/dialogs/__init__.py deleted file mode 100644 index 0ea48d3bd7..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/dialogs/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from .setup_dialog import SetupDialog - -__all__ = ["SetupDialog"] diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/dialogs/setup_dialog.py b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/dialogs/setup_dialog.py deleted file mode 100644 index fe87c91941..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/dialogs/setup_dialog.py +++ /dev/null @@ -1,129 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from botbuilder.dialogs import ( - ComponentDialog, - WaterfallDialog, - WaterfallStepContext, - DialogTurnResult, -) -from botbuilder.dialogs.choices.list_style import ListStyle -from botbuilder.dialogs.prompts import ( - TextPrompt, - ChoicePrompt, - PromptOptions, -) -from botbuilder.dialogs.choices import Choice -from botbuilder.core import MessageFactory, ConversationState -from botbuilder.schema import InputHints, DeliveryModes - -from bots.host_bot import ACTIVE_SKILL_PROPERTY_NAME, DELIVERY_MODE_PROPERTY_NAME -from config import SkillConfiguration - - -class SetupDialog(ComponentDialog): - def __init__( - self, conversation_state: ConversationState, skills_config: SkillConfiguration - ): - super(SetupDialog, self).__init__(SetupDialog.__name__) - - self._delivery_mode_property = conversation_state.create_property( - DELIVERY_MODE_PROPERTY_NAME - ) - self._active_skill_property = conversation_state.create_property( - ACTIVE_SKILL_PROPERTY_NAME - ) - self._delivery_mode = "" - - self._skills_config = skills_config - - # Define the setup dialog and its related components. - # Add ChoicePrompt to render available skills. - self.add_dialog(ChoicePrompt(self.select_delivery_mode_step.__name__)) - self.add_dialog(ChoicePrompt(self.select_skill_step.__name__)) - self.add_dialog(TextPrompt(self.final_step.__name__)) - # Add main waterfall dialog for this bot. - self.add_dialog( - WaterfallDialog( - WaterfallDialog.__name__, - [ - self.select_delivery_mode_step, - self.select_skill_step, - self.final_step, - ], - ) - ) - self.initial_dialog_id = WaterfallDialog.__name__ - - # Render a prompt to select the delivery mode to use. - async def select_delivery_mode_step( - self, step_context: WaterfallStepContext - ) -> DialogTurnResult: - # Create the PromptOptions with the delivery modes supported. - message = "What delivery mode would you like to use?" - reprompt_message = ( - "That was not a valid choice, please select a valid delivery mode." - ) - options = PromptOptions( - prompt=MessageFactory.text(message, message, InputHints.expecting_input), - retry_prompt=MessageFactory.text( - reprompt_message, reprompt_message, InputHints.expecting_input - ), - choices=[Choice("normal"), Choice("expectReplies")], - ) - return await step_context.prompt( - self.select_delivery_mode_step.__name__, options - ) - - # Render a prompt to select the skill to call. - async def select_skill_step( - self, step_context: WaterfallStepContext - ) -> DialogTurnResult: - # Set delivery mode. - self._delivery_mode = step_context.result.value - await self._delivery_mode_property.set( - step_context.context, step_context.result.value - ) - - # Create the PromptOptions from the skill configuration which contains the list of configured skills. - message = "What skill would you like to call?" - reprompt_message = "That was not a valid choice, please select a valid skill." - options = PromptOptions( - prompt=MessageFactory.text(message, message, InputHints.expecting_input), - retry_prompt=MessageFactory.text(reprompt_message, reprompt_message), - choices=[ - Choice(value=skill.id) - for _, skill in sorted(self._skills_config.SKILLS.items()) - ], - style=ListStyle.suggested_action - ) - - return await step_context.prompt(self.select_skill_step.__name__, options) - - # The SetupDialog has ended, we go back to the HostBot to connect with the selected skill. - async def final_step(self, step_context: WaterfallStepContext) -> DialogTurnResult: - # Set active skill. - for i in self._skills_config.SKILLS.keys(): - if i.lower() == step_context.result.value.lower(): - selected_skill = self._skills_config.SKILLS.get(i) - - await self._active_skill_property.set(step_context.context, selected_skill) - - v3_bots = ['EchoSkillBotDotNetV3', 'EchoSkillBotJSV3'] - - if self._delivery_mode == DeliveryModes.expect_replies and selected_skill.id.lower() in (id.lower() for id in v3_bots): - message = MessageFactory.text("V3 Bots do not support 'expectReplies' delivery mode.") - await step_context.context.send_activity(message) - - # Forget delivery mode and skill invocation. - await self._delivery_mode_property.delete(step_context.context) - await self._active_skill_property.delete(step_context.context) - - # Restart setup dialog - return await step_context.replace_dialog(self.initial_dialog_id) - - await step_context.context.send_activity( - MessageFactory.text("Type anything to send to the skill.", "Type anything to send to the skill.", InputHints.expecting_input) - ) - - return await step_context.end_dialog() diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/helpers/dialog_helper.py b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/helpers/dialog_helper.py deleted file mode 100644 index 6b2646b0ba..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/helpers/dialog_helper.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from botbuilder.core import StatePropertyAccessor, TurnContext -from botbuilder.dialogs import Dialog, DialogSet, DialogTurnStatus - - -class DialogHelper: - @staticmethod - async def run_dialog( - dialog: Dialog, turn_context: TurnContext, accessor: StatePropertyAccessor - ): - dialog_set = DialogSet(accessor) - dialog_set.add(dialog) - - dialog_context = await dialog_set.create_context(turn_context) - results = await dialog_context.continue_dialog() - if results.status == DialogTurnStatus.Empty: - await dialog_context.begin_dialog(dialog.id) diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/requirements.txt b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/requirements.txt deleted file mode 100644 index 47a60840f5..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -botbuilder-integration-aiohttp>=4.13.0 -botbuilder-dialogs>=4.13.0 -python-dotenv diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/skill_conversation_id_factory.py b/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/skill_conversation_id_factory.py deleted file mode 100644 index 8b3ab86d14..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/SimpleHostBot/skill_conversation_id_factory.py +++ /dev/null @@ -1,75 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. -from typing import Union - -from botbuilder.core import Storage, TurnContext -from botbuilder.core.skills import ( - ConversationIdFactoryBase, - SkillConversationIdFactoryOptions, - SkillConversationReference, -) -from botbuilder.schema import ConversationReference - - -class SkillConversationIdFactory(ConversationIdFactoryBase): - def __init__(self, storage: Storage): - if not storage: - raise TypeError("storage can't be None") - - self._storage = storage - - async def create_skill_conversation_id( - self, - options_or_conversation_reference: Union[ - SkillConversationIdFactoryOptions, ConversationReference - ], - ) -> str: - if not options_or_conversation_reference: - raise TypeError("Need options or conversation reference") - - if not isinstance( - options_or_conversation_reference, SkillConversationIdFactoryOptions - ): - raise TypeError( - "This SkillConversationIdFactory can only handle SkillConversationIdFactoryOptions" - ) - - options = options_or_conversation_reference - - # Create the storage key based on the SkillConversationIdFactoryOptions. - conversation_reference = TurnContext.get_conversation_reference( - options.activity - ) - skill_conversation_id = ( - f"{conversation_reference.conversation.id}" - f"-{options.bot_framework_skill.id}" - f"-{conversation_reference.channel_id}" - f"-skillconvo" - ) - - # Create the SkillConversationReference instance. - skill_conversation_reference = SkillConversationReference( - conversation_reference=conversation_reference, - oauth_scope=options.from_bot_oauth_scope, - ) - - # Store the SkillConversationReference using the skill_conversation_id as a key. - skill_conversation_info = {skill_conversation_id: skill_conversation_reference} - await self._storage.write(skill_conversation_info) - - # Return the generated skill_conversation_id (that will be also used as the conversation ID to call the skill). - return skill_conversation_id - - async def get_conversation_reference( - self, skill_conversation_id: str - ) -> Union[SkillConversationReference, ConversationReference]: - if not skill_conversation_id: - raise TypeError("skill_conversation_id can't be None") - - # Get the SkillConversationReference from storage for the given skill_conversation_id. - skill_conversation_info = await self._storage.read([skill_conversation_id]) - - return skill_conversation_info.get(skill_conversation_id) - - async def delete_conversation_reference(self, skill_conversation_id: str): - await self._storage.delete([skill_conversation_id]) diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/.env b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/.env deleted file mode 100644 index 382c7b2790..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/.env +++ /dev/null @@ -1,53 +0,0 @@ -MicrosoftAppId= -MicrosoftAppPassword= -SkillHostEndpoint=http://localhost:37020/api/skills -SsoConnectionName= -SsoConnectionNameTeams= - -skill_EchoSkillBotDotNet_group=Echo -skill_EchoSkillBotDotNet_appId= -skill_EchoSkillBotDotNet_endpoint=http://localhost:35400/api/messages - -skill_EchoSkillBotDotNet21_group=Echo -skill_EchoSkillBotDotNet21_appId= -skill_EchoSkillBotDotNet21_endpoint=http://localhost:35405/api/messages - -skill_EchoSkillBotDotNetV3_group=Echo -skill_EchoSkillBotDotNetV3_appId= -skill_EchoSkillBotDotNetV3_endpoint=http://localhost:35407/api/messages - -skill_EchoSkillBotJS_group=Echo -skill_EchoSkillBotJS_appId= -skill_EchoSkillBotJS_endpoint=http://localhost:36400/api/messages - -skill_EchoSkillBotJSV3_group=Echo -skill_EchoSkillBotJSV3_appId= -skill_EchoSkillBotJSV3_endpoint=http://localhost:36407/api/messages - -skill_EchoSkillBotPython_group=Echo -skill_EchoSkillBotPython_appId= -skill_EchoSkillBotPython_endpoint=http://localhost:37400/api/messages - -skill_WaterfallSkillBotDotNet_group=Waterfall -skill_WaterfallSkillBotDotNet_appId= -skill_WaterfallSkillBotDotNet_endpoint=http://localhost:35420/api/messages - -skill_WaterfallSkillBotJS_group=Waterfall -skill_WaterfallSkillBotJS_appId= -skill_WaterfallSkillBotJS_endpoint=http://localhost:36420/api/messages - -skill_WaterfallSkillBotPython_group=Waterfall -skill_WaterfallSkillBotPython_appId= -skill_WaterfallSkillBotPython_endpoint=http://localhost:37420/api/messages - -skill_TeamsSkillBotDotNet_group=Teams -skill_TeamsSkillBotDotNet_appId= -skill_TeamsSkillBotDotNet_endpoint=http://localhost:35430/api/messages - -skill_TeamsSkillBotJS_group=Teams -skill_TeamsSkillBotJS_appId= -skill_TeamsSkillBotJS_endpoint=http://localhost:36430/api/messages - -skill_TeamsSkillBotPython_group=Teams -skill_TeamsSkillBotPython_appId= -skill_TeamsSkillBotPython_endpoint=http://localhost:37430/api/messages diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/.pylintrc b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/.pylintrc deleted file mode 100644 index 0eb8d1d4f6..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/.pylintrc +++ /dev/null @@ -1,590 +0,0 @@ -[MASTER] - -# A comma-separated list of package or module names from where C extensions may -# be loaded. Extensions are loading into the active Python interpreter and may -# run arbitrary code. -extension-pkg-whitelist= - -# Add files or directories to the blacklist. They should be base names, not -# paths. -ignore= - -# Add files or directories matching the regex patterns to the blacklist. The -# regex matches against base names, not paths. -ignore-patterns= - -# Python code to execute, usually for sys.path manipulation such as -# pygtk.require(). -#init-hook= - -# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the -# number of processors available to use. -jobs=1 - -# Control the amount of potential inferred values when inferring a single -# object. This can help the performance when dealing with large functions or -# complex, nested conditions. -limit-inference-results=100 - -# List of plugins (as comma separated values of python modules names) to load, -# usually to register additional checkers. -load-plugins= - -# Pickle collected data for later comparisons. -persistent=yes - -# Specify a configuration file. -#rcfile= - -# When enabled, pylint would attempt to guess common misconfiguration and emit -# user-friendly hints instead of false-positive error messages. -suggestion-mode=yes - -# Allow loading of arbitrary C extensions. Extensions are imported into the -# active Python interpreter and may run arbitrary code. -unsafe-load-any-extension=no - - -[MESSAGES CONTROL] - -# Only show warnings with the listed confidence levels. Leave empty to show -# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED. -confidence= - -# Disable the message, report, category or checker with the given id(s). You -# can either give multiple identifiers separated by comma (,) or put this -# option multiple times (only on the command line, not in the configuration -# file where it should appear only once). You can also use "--disable=all" to -# disable everything first and then reenable specific checks. For example, if -# you want to run only the similarities checker, you can use "--disable=all -# --enable=similarities". If you want to run only the classes checker, but have -# no Warning level messages displayed, use "--disable=all --enable=classes -# --disable=W". -disable=print-statement, - parameter-unpacking, - unpacking-in-except, - old-raise-syntax, - backtick, - long-suffix, - old-ne-operator, - old-octal-literal, - import-star-module-level, - non-ascii-bytes-literal, - raw-checker-failed, - bad-inline-option, - locally-disabled, - file-ignored, - suppressed-message, - useless-suppression, - deprecated-pragma, - use-symbolic-message-instead, - apply-builtin, - basestring-builtin, - buffer-builtin, - cmp-builtin, - coerce-builtin, - execfile-builtin, - file-builtin, - long-builtin, - raw_input-builtin, - reduce-builtin, - standarderror-builtin, - unicode-builtin, - xrange-builtin, - coerce-method, - delslice-method, - getslice-method, - setslice-method, - no-absolute-import, - old-division, - dict-iter-method, - dict-view-method, - next-method-called, - metaclass-assignment, - indexing-exception, - raising-string, - reload-builtin, - oct-method, - hex-method, - nonzero-method, - cmp-method, - input-builtin, - round-builtin, - intern-builtin, - unichr-builtin, - map-builtin-not-iterating, - zip-builtin-not-iterating, - range-builtin-not-iterating, - filter-builtin-not-iterating, - using-cmp-argument, - eq-without-hash, - div-method, - idiv-method, - rdiv-method, - exception-message-attribute, - invalid-str-codec, - sys-max-int, - bad-python3-import, - deprecated-string-function, - deprecated-str-translate-call, - deprecated-itertools-function, - deprecated-types-field, - next-method-defined, - dict-items-not-iterating, - dict-keys-not-iterating, - dict-values-not-iterating, - deprecated-operator-function, - deprecated-urllib-function, - xreadlines-attribute, - deprecated-sys-function, - exception-escape, - comprehension-escape, - bad-continuation, - duplicate-code, - redefined-outer-name, - missing-docstring, - too-many-instance-attributes, - too-few-public-methods, - redefined-builtin, - too-many-arguments, - no-self-use, - fixme, - broad-except, - bare-except, - too-many-public-methods, - cyclic-import, - too-many-locals, - too-many-function-args, - too-many-return-statements, - import-error, - no-name-in-module, - too-many-branches - -# Enable the message, report, category or checker with the given id(s). You can -# either give multiple identifier separated by comma (,) or put this option -# multiple time (only on the command line, not in the configuration file where -# it should appear only once). See also the "--disable" option for examples. -enable=c-extension-no-member - - -[REPORTS] - -# Python expression which should return a note less than 10 (10 is the highest -# note). You have access to the variables errors warning, statement which -# respectively contain the number of errors / warnings messages and the total -# number of statements analyzed. This is used by the global evaluation report -# (RP0004). -evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) - -# Template used to display messages. This is a python new-style format string -# used to format the message information. See doc for all details. -#msg-template= - -# Set the output format. Available formats are text, parseable, colorized, json -# and msvs (visual studio). You can also give a reporter class, e.g. -# mypackage.mymodule.MyReporterClass. -output-format=text - -# Tells whether to display a full report or only the messages. -reports=no - -# Activate the evaluation score. -score=yes - - -[REFACTORING] - -# Maximum number of nested blocks for function / method body -max-nested-blocks=5 - -# Complete name of functions that never returns. When checking for -# inconsistent-return-statements if a never returning function is called then -# it will be considered as an explicit return statement and no message will be -# printed. -never-returning-functions=sys.exit - - -[LOGGING] - -# Format style used to check logging format string. `old` means using % -# formatting, while `new` is for `{}` formatting. -logging-format-style=old - -# Logging modules to check that the string format arguments are in logging -# function parameter format. -logging-modules=logging - - -[SPELLING] - -# Limits count of emitted suggestions for spelling mistakes. -max-spelling-suggestions=4 - -# Spelling dictionary name. Available dictionaries: none. To make it working -# install python-enchant package.. -spelling-dict= - -# List of comma separated words that should not be checked. -spelling-ignore-words= - -# A path to a file that contains private dictionary; one word per line. -spelling-private-dict-file= - -# Tells whether to store unknown words to indicated private dictionary in -# --spelling-private-dict-file option instead of raising a message. -spelling-store-unknown-words=no - - -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=FIXME, - XXX, - TODO - - -[TYPECHECK] - -# List of decorators that produce context managers, such as -# contextlib.contextmanager. Add to this list to register other decorators that -# produce valid context managers. -contextmanager-decorators=contextlib.contextmanager - -# List of members which are set dynamically and missed by pylint inference -# system, and so shouldn't trigger E1101 when accessed. Python regular -# expressions are accepted. -generated-members= - -# Tells whether missing members accessed in mixin class should be ignored. A -# mixin class is detected if its name ends with "mixin" (case insensitive). -ignore-mixin-members=yes - -# Tells whether to warn about missing members when the owner of the attribute -# is inferred to be None. -ignore-none=yes - -# This flag controls whether pylint should warn about no-member and similar -# checks whenever an opaque object is returned when inferring. The inference -# can return multiple potential results while evaluating a Python object, but -# some branches might not be evaluated, which results in partial inference. In -# that case, it might be useful to still emit no-member and other checks for -# the rest of the inferred objects. -ignore-on-opaque-inference=yes - -# List of class names for which member attributes should not be checked (useful -# for classes with dynamically set attributes). This supports the use of -# qualified names. -ignored-classes=optparse.Values,thread._local,_thread._local - -# List of module names for which member attributes should not be checked -# (useful for modules/projects where namespaces are manipulated during runtime -# and thus existing member attributes cannot be deduced by static analysis. It -# supports qualified module names, as well as Unix pattern matching. -ignored-modules= - -# Show a hint with possible names when a member name was not found. The aspect -# of finding the hint is based on edit distance. -missing-member-hint=yes - -# The minimum edit distance a name should have in order to be considered a -# similar match for a missing member name. -missing-member-hint-distance=1 - -# The total number of similar names that should be taken in consideration when -# showing a hint for a missing member. -missing-member-max-choices=1 - - -[VARIABLES] - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid defining new builtins when possible. -additional-builtins= - -# Tells whether unused global variables should be treated as a violation. -allow-global-unused-variables=yes - -# List of strings which can identify a callback function by name. A callback -# name must start or end with one of those strings. -callbacks=cb_, - _cb - -# A regular expression matching the name of dummy variables (i.e. expected to -# not be used). -dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ - -# Argument names that match this expression will be ignored. Default to name -# with leading underscore. -ignored-argument-names=_.*|^ignored_|^unused_ - -# Tells whether we should check for unused import in __init__ files. -init-import=no - -# List of qualified module names which can have objects that can redefine -# builtins. -redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io - - -[FORMAT] - -# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. -expected-line-ending-format= - -# Regexp for a line that is allowed to be longer than the limit. -ignore-long-lines=^\s*(# )??$ - -# Number of spaces of indent required inside a hanging or continued line. -indent-after-paren=4 - -# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 -# tab). -indent-string=' ' - -# Maximum number of characters on a single line. -max-line-length=120 - -# Maximum number of lines in a module. -max-module-lines=1000 - -# List of optional constructs for which whitespace checking is disabled. `dict- -# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. -# `trailing-comma` allows a space between comma and closing bracket: (a, ). -# `empty-line` allows space-only lines. -no-space-check=trailing-comma, - dict-separator - -# Allow the body of a class to be on the same line as the declaration if body -# contains single statement. -single-line-class-stmt=no - -# Allow the body of an if to be on the same line as the test if there is no -# else. -single-line-if-stmt=no - - -[SIMILARITIES] - -# Ignore comments when computing similarities. -ignore-comments=yes - -# Ignore docstrings when computing similarities. -ignore-docstrings=yes - -# Ignore imports when computing similarities. -ignore-imports=no - -# Minimum lines number of a similarity. -min-similarity-lines=4 - - -[BASIC] - -# Naming style matching correct argument names. -argument-naming-style=snake_case - -# Regular expression matching correct argument names. Overrides argument- -# naming-style. -#argument-rgx= - -# Naming style matching correct attribute names. -attr-naming-style=snake_case - -# Regular expression matching correct attribute names. Overrides attr-naming- -# style. -#attr-rgx= - -# Bad variable names which should always be refused, separated by a comma. -bad-names=foo, - bar, - baz, - toto, - tutu, - tata - -# Naming style matching correct class attribute names. -class-attribute-naming-style=any - -# Regular expression matching correct class attribute names. Overrides class- -# attribute-naming-style. -#class-attribute-rgx= - -# Naming style matching correct class names. -class-naming-style=PascalCase - -# Regular expression matching correct class names. Overrides class-naming- -# style. -#class-rgx= - -# Naming style matching correct constant names. -const-naming-style=UPPER_CASE - -# Regular expression matching correct constant names. Overrides const-naming- -# style. -#const-rgx= - -# Minimum line length for functions/classes that require docstrings, shorter -# ones are exempt. -docstring-min-length=-1 - -# Naming style matching correct function names. -function-naming-style=snake_case - -# Regular expression matching correct function names. Overrides function- -# naming-style. -#function-rgx= - -# Good variable names which should always be accepted, separated by a comma. -good-names=i, - j, - k, - ex, - Run, - _ - -# Include a hint for the correct naming format with invalid-name. -include-naming-hint=no - -# Naming style matching correct inline iteration names. -inlinevar-naming-style=any - -# Regular expression matching correct inline iteration names. Overrides -# inlinevar-naming-style. -#inlinevar-rgx= - -# Naming style matching correct method names. -method-naming-style=snake_case - -# Regular expression matching correct method names. Overrides method-naming- -# style. -#method-rgx= - -# Naming style matching correct module names. -module-naming-style=snake_case - -# Regular expression matching correct module names. Overrides module-naming- -# style. -#module-rgx= - -# Colon-delimited sets of names that determine each other's naming style when -# the name regexes allow several styles. -name-group= - -# Regular expression which should only match function or class names that do -# not require a docstring. -no-docstring-rgx=^_ - -# List of decorators that produce properties, such as abc.abstractproperty. Add -# to this list to register other decorators that produce valid properties. -# These decorators are taken in consideration only for invalid-name. -property-classes=abc.abstractproperty - -# Naming style matching correct variable names. -variable-naming-style=snake_case - -# Regular expression matching correct variable names. Overrides variable- -# naming-style. -#variable-rgx= - - -[STRING] - -# This flag controls whether the implicit-str-concat-in-sequence should -# generate a warning on implicit string concatenation in sequences defined over -# several lines. -check-str-concat-over-line-jumps=no - - -[IMPORTS] - -# Allow wildcard imports from modules that define __all__. -allow-wildcard-with-all=no - -# Analyse import fallback blocks. This can be used to support both Python 2 and -# 3 compatible code, which means that the block might have code that exists -# only in one or another interpreter, leading to false positives when analysed. -analyse-fallback-blocks=no - -# Deprecated modules which should not be used, separated by a comma. -deprecated-modules=optparse,tkinter.tix - -# Create a graph of external dependencies in the given file (report RP0402 must -# not be disabled). -ext-import-graph= - -# Create a graph of every (i.e. internal and external) dependencies in the -# given file (report RP0402 must not be disabled). -import-graph= - -# Create a graph of internal dependencies in the given file (report RP0402 must -# not be disabled). -int-import-graph= - -# Force import order to recognize a module as part of the standard -# compatibility libraries. -known-standard-library= - -# Force import order to recognize a module as part of a third party library. -known-third-party=enchant - - -[CLASSES] - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__, - __new__, - setUp - -# List of member names, which should be excluded from the protected access -# warning. -exclude-protected=_asdict, - _fields, - _replace, - _source, - _make - -# List of valid names for the first argument in a class method. -valid-classmethod-first-arg=cls - -# List of valid names for the first argument in a metaclass class method. -valid-metaclass-classmethod-first-arg=cls - - -[DESIGN] - -# Maximum number of arguments for function / method. -max-args=5 - -# Maximum number of attributes for a class (see R0902). -max-attributes=7 - -# Maximum number of boolean expressions in an if statement. -max-bool-expr=5 - -# Maximum number of branch for function / method body. -max-branches=12 - -# Maximum number of locals for function / method body. -max-locals=15 - -# Maximum number of parents for a class (see R0901). -max-parents=7 - -# Maximum number of public methods for a class (see R0904). -max-public-methods=20 - -# Maximum number of return / yield for function / method body. -max-returns=6 - -# Maximum number of statements in function / method body. -max-statements=50 - -# Minimum number of public methods for a class (see R0903). -min-public-methods=2 - - -[EXCEPTIONS] - -# Exceptions that will emit a warning when being caught. Defaults to -# "BaseException, Exception". -overgeneral-exceptions=BaseException, - Exception diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/adapter_with_error_handler.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/adapter_with_error_handler.py deleted file mode 100644 index d2fc861c15..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/adapter_with_error_handler.py +++ /dev/null @@ -1,140 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import sys -import traceback - -from botbuilder.core import ( - BotFrameworkAdapter, - BotFrameworkAdapterSettings, - ConversationState, - MessageFactory, - TurnContext, -) -from botbuilder.integration.aiohttp.skills import SkillHttpClient -from botbuilder.schema import ActivityTypes, Activity, InputHints - -from skills_configuration import DefaultConfig, SkillsConfiguration -from bots.root_bot import ACTIVE_SKILL_PROPERTY_NAME - - -class AdapterWithErrorHandler(BotFrameworkAdapter): - def __init__( - self, - settings: BotFrameworkAdapterSettings, - config: DefaultConfig, - conversation_state: ConversationState, - skill_client: SkillHttpClient = None, - skill_config: SkillsConfiguration = None, - ): - super().__init__(settings) - self._config = config - - if not conversation_state: - raise TypeError( - "AdapterWithErrorHandler: `conversation_state` argument cannot be None." - ) - self._conversation_state = conversation_state - self._skill_client = skill_client - self._skill_config = skill_config - - self.on_turn_error = self._handle_turn_error - - async def _handle_turn_error(self, turn_context: TurnContext, error: Exception): - # This check writes out errors to console log - # NOTE: In production environment, you should consider logging this to Azure - # application insights. - print(f"\n [on_turn_error] unhandled error: {error}", file=sys.stderr) - traceback.print_exc() - await self._send_error_message(turn_context, error) - await self._end_skill_conversation(turn_context, error) - await self._clear_conversation_state(turn_context) - - async def _send_error_message(self, turn_context: TurnContext, error: Exception): - if not self._skill_client or not self._skill_config: - return - try: - exc_info = sys.exc_info() - stack = traceback.format_exception(*exc_info) - - # Send a message to the user. - error_message_text = "The bot encountered an error or bug." - error_message = MessageFactory.text( - error_message_text, error_message_text, InputHints.ignoring_input - ) - error_message.value = {"message": error, "stack": stack} - await turn_context.send_activity(error_message) - - await turn_context.send_activity(f"Exception: {error}") - await turn_context.send_activity(traceback.format_exc()) - - error_message_text = ( - "To continue to run this bot, please fix the bot source code." - ) - error_message = MessageFactory.text( - error_message_text, error_message_text, InputHints.ignoring_input - ) - await turn_context.send_activity(error_message) - - # Send a trace activity, which will be displayed in Bot Framework Emulator. - await turn_context.send_trace_activity( - label="TurnError", - name="on_turn_error Trace", - value=f"{error}", - value_type="https://www.botframework.com/schemas/error", - ) - except Exception as exception: - print( - f"\n Exception caught in _send_error_message : {exception}", - file=sys.stderr, - ) - traceback.print_exc() - - async def _end_skill_conversation(self, turn_context: TurnContext): - if not self._skill_client or not self._skill_config: - return - - try: - # Inform the active skill that the conversation is ended so that it has a chance to clean up. - # Note: the root bot manages the ActiveSkillPropertyName, which has a value while the root bot - # has an active conversation with a skill. - active_skill = await self._conversation_state.create_property( - ACTIVE_SKILL_PROPERTY_NAME - ).get(turn_context) - - if active_skill: - bot_id = self._config.APP_ID - end_of_conversation = Activity(type=ActivityTypes.end_of_conversation) - end_of_conversation.code = "RootSkillError" - TurnContext.apply_conversation_reference( - end_of_conversation, - TurnContext.get_conversation_reference(turn_context.activity), - True, - ) - - await self._conversation_state.save_changes(turn_context, True) - await self._skill_client.post_activity_to_skill( - bot_id, - active_skill, - self._skill_config.SKILL_HOST_ENDPOINT, - end_of_conversation, - ) - except Exception as exception: - print( - f"\n Exception caught on _end_skill_conversation : {exception}", - file=sys.stderr, - ) - traceback.print_exc() - - async def _clear_conversation_state(self, turn_context: TurnContext): - try: - # Delete the conversationState for the current conversation to prevent the - # bot from getting stuck in an error-loop caused by being in a bad state. - # ConversationState should be thought of as similar to "cookie-state" for a Web page. - await self._conversation_state.delete(turn_context) - except Exception as exception: - print( - f"\n Exception caught on _clear_conversation_state : {exception}", - file=sys.stderr, - ) - traceback.print_exc() diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/app.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/app.py deleted file mode 100644 index 63bdfd6db7..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/app.py +++ /dev/null @@ -1,101 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from http import HTTPStatus - -from aiohttp import web -from aiohttp.web import Request, Response -from aiohttp.web_response import json_response -from botbuilder.core import ( - BotFrameworkAdapterSettings, - ConversationState, - MemoryStorage, - UserState, -) -from botbuilder.core.integration import ( - aiohttp_channel_service_routes, - aiohttp_error_middleware, -) -from botbuilder.schema import Activity -from botbuilder.integration.aiohttp.skills import SkillHttpClient -from botframework.connector.auth import ( - AuthenticationConfiguration, - SimpleCredentialProvider, -) - -from authentication import AllowedSkillsClaimsValidator -from bots import RootBot -from dialogs import MainDialog -from skills_configuration import DefaultConfig, SkillsConfiguration -from adapter_with_error_handler import AdapterWithErrorHandler -from skill_conversation_id_factory import SkillConversationIdFactory -from token_exchange_skill_handler import TokenExchangeSkillHandler - -CONFIG = DefaultConfig() -SKILL_CONFIG = SkillsConfiguration() - -# Create MemoryStorage, UserState and ConversationState -MEMORY = MemoryStorage() -USER_STATE = UserState(MEMORY) -CONVERSATION_STATE = ConversationState(MEMORY) -ID_FACTORY = SkillConversationIdFactory(MEMORY) - -CREDENTIAL_PROVIDER = SimpleCredentialProvider(CONFIG.APP_ID, CONFIG.APP_PASSWORD) -CLIENT = SkillHttpClient(CREDENTIAL_PROVIDER, ID_FACTORY) - -# Whitelist skills from SKILLS_CONFIG -AUTH_CONFIG = AuthenticationConfiguration( - claims_validator=AllowedSkillsClaimsValidator(SKILL_CONFIG).claims_validator -) - -# Create adapter. -# See https://aka.ms/about-bot-adapter to learn more about how bots work. -SETTINGS = BotFrameworkAdapterSettings(CONFIG.APP_ID, CONFIG.APP_PASSWORD) -ADAPTER = AdapterWithErrorHandler( - SETTINGS, CONFIG, CONVERSATION_STATE, CLIENT, SKILL_CONFIG -) - -DIALOG = MainDialog(CONVERSATION_STATE, ID_FACTORY, CLIENT, SKILL_CONFIG, CONFIG) - -# Create the Bot -BOT = RootBot(CONVERSATION_STATE, DIALOG) - -SKILL_HANDLER = TokenExchangeSkillHandler( - ADAPTER, - BOT, - CONFIG, - ID_FACTORY, - SKILL_CONFIG, - CLIENT, - CREDENTIAL_PROVIDER, - AUTH_CONFIG, -) - - -# Listen for incoming requests on /api/messages -async def messages(req: Request) -> Response: - # Main bot message handler. - if "application/json" in req.headers["Content-Type"]: - body = await req.json() - else: - return Response(status=HTTPStatus.UNSUPPORTED_MEDIA_TYPE) - - activity = Activity().deserialize(body) - auth_header = req.headers["Authorization"] if "Authorization" in req.headers else "" - - invoke_response = await ADAPTER.process_activity(activity, auth_header, BOT.on_turn) - if invoke_response: - return json_response(data=invoke_response.body, status=invoke_response.status) - return Response(status=HTTPStatus.OK) - - -APP = web.Application(middlewares=[aiohttp_error_middleware]) -APP.router.add_post("/api/messages", messages) -APP.router.add_get("/api/messages", messages) -APP.router.add_routes(aiohttp_channel_service_routes(SKILL_HANDLER, "/api/skills")) - -if __name__ == "__main__": - try: - web.run_app(APP, host="localhost", port=CONFIG.PORT) - except Exception as error: - raise error diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/authentication/__init__.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/authentication/__init__.py deleted file mode 100644 index 550f9b54b6..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/authentication/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from .allowed_skills_claims_validator import AllowedSkillsClaimsValidator - -__all__ = ["AllowedSkillsClaimsValidator"] diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/authentication/allowed_skills_claims_validator.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/authentication/allowed_skills_claims_validator.py deleted file mode 100644 index 69bfddabc8..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/authentication/allowed_skills_claims_validator.py +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from typing import Awaitable, Callable, Dict, List -from botframework.connector.auth import JwtTokenValidation, SkillValidation -from skills_configuration import SkillsConfiguration - - -class AllowedSkillsClaimsValidator: - def __init__(self, skills_config: SkillsConfiguration): - if not skills_config: - raise TypeError( - "AllowedSkillsClaimsValidator: config object cannot be None." - ) - - skills_list = [skill.app_id for skill in skills_config.SKILLS.values()] - self._allowed_skills = frozenset(skills_list) - - @property - def claims_validator(self) -> Callable[[List[Dict]], Awaitable]: - async def allow_callers_claims_validator(claims: Dict[str, object]): - if SkillValidation.is_skill_claim(claims): - # Check that the appId claim in the skill request is in the list of skills configured for this bot. - app_id = JwtTokenValidation.get_app_id_from_claims(claims) - if app_id not in self._allowed_skills: - raise PermissionError( - f'Received a request from a bot with an app ID of "{app_id}".' - f" To enable requests from this caller, add the app ID to your configuration file." - ) - - return - - return allow_callers_claims_validator diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/bots/__init__.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/bots/__init__.py deleted file mode 100644 index 6a5060f62f..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/bots/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from .root_bot import RootBot - - -__all__ = ["RootBot"] diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/bots/root_bot.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/bots/root_bot.py deleted file mode 100644 index 3ad5213c8a..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/bots/root_bot.py +++ /dev/null @@ -1,84 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import json -import os.path -from typing import List -from botbuilder.core import ( - ActivityHandler, - ConversationState, - MessageFactory, - TurnContext, -) -from botbuilder.dialogs import Dialog, DialogExtensions -from botbuilder.schema import ActivityTypes, ChannelAccount, Attachment - -DELIVERY_MODE_PROPERTY_NAME = "deliveryModeProperty" -ACTIVE_SKILL_PROPERTY_NAME = "activeSkillProperty" - - -class RootBot(ActivityHandler): - def __init__( - self, - conversation_state: ConversationState, - main_dialog: Dialog, - ): - self._conversation_state = conversation_state - self._main_dialog = main_dialog - - self._dialog_state_property = conversation_state.create_property("DialogState") - - # Create state property to track the delivery mode and active skill. - self._delivery_mode_property = conversation_state.create_property( - DELIVERY_MODE_PROPERTY_NAME - ) - self._active_skill_property = conversation_state.create_property( - ACTIVE_SKILL_PROPERTY_NAME - ) - - async def on_turn(self, turn_context: TurnContext): - if turn_context.activity.type != ActivityTypes.conversation_update: - # Run the Dialog with the Activity. - await DialogExtensions.run_dialog( - self._main_dialog, - turn_context, - self._dialog_state_property, - ) - else: - # Let the base class handle the activity. - await super().on_turn(turn_context) - - # Save any state changes that might have occurred during the turn. - await self._conversation_state.save_changes(turn_context) - - async def on_members_added_activity( - self, members_added: List[ChannelAccount], turn_context: TurnContext - ): - # Greet anyone that was not the target (recipient) of this message. - # To learn more about Adaptive Cards, see https://aka.ms/msbot-adaptivecards. - for member in members_added: - if member.id != turn_context.activity.recipient.id: - welcome_card = self._create_adaptive_card_attachment() - activity = MessageFactory.attachment(welcome_card) - activity.speak = "Welcome to the waterfall host bot" - await turn_context.send_activity(activity) - await DialogExtensions.run_dialog( - self._main_dialog, - turn_context, - self._dialog_state_property, - ) - - @staticmethod - def _create_adaptive_card_attachment() -> Attachment: - """ - Load attachment from embedded resource. - """ - - relative_path = os.path.abspath(os.path.dirname(__file__)) - path = os.path.join(relative_path, "../cards/welcomeCard.json") - with open(path) as in_file: - card = json.load(in_file) - - return Attachment( - content_type="application/vnd.microsoft.card.adaptive", content=card - ) diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/cards/welcomeCard.json b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/cards/welcomeCard.json deleted file mode 100644 index 0cb25e2570..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/cards/welcomeCard.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", - "type": "AdaptiveCard", - "version": "1.0", - "body": [ - { - "type": "Image", - "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQtB3AwMUeNoq4gUBGe6Ocj8kyh3bXa9ZbV7u1fVKQoyKFHdkqU", - "size": "stretch" - }, - { - "type": "TextBlock", - "spacing": "Medium", - "size": "Medium", - "weight": "Bolder", - "text": "Welcome to the Skill Dialog Sample!", - "wrap": true, - "maxLines": 0, - "color": "Accent" - }, - { - "type": "TextBlock", - "size": "default", - "text": "This sample allows you to connect to a skill using a SkillDialog and invoke several actions.", - "wrap": true, - "maxLines": 0 - } - ] -} \ No newline at end of file diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/__init__.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/__init__.py deleted file mode 100644 index 3f3a5f6f9a..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from .main_dialog import MainDialog -from .tangent_dialog import TangentDialog -from .sso import SsoDialog, SsoSignInDialog - -__all__ = ["MainDialog", "TangentDialog", "SsoDialog", "SsoSignInDialog"] diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/main_dialog.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/main_dialog.py deleted file mode 100644 index 46981efa20..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/main_dialog.py +++ /dev/null @@ -1,456 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import copy -import json - -from botbuilder.dialogs import ( - ComponentDialog, - DialogContext, - WaterfallDialog, - WaterfallStepContext, - DialogTurnResult, - ListStyle, -) -from botbuilder.dialogs.choices import Choice, FoundChoice -from botbuilder.dialogs.prompts import ( - PromptOptions, - ChoicePrompt, -) -from botbuilder.dialogs.skills import ( - SkillDialogOptions, - SkillDialog, - BeginSkillDialogOptions, -) -from botbuilder.core import ConversationState, MessageFactory, TurnContext -from botbuilder.core.skills import ConversationIdFactoryBase -from botbuilder.schema import Activity, ActivityTypes, InputHints, DeliveryModes -from botbuilder.integration.aiohttp.skills import SkillHttpClient - -from skills_configuration import SkillsConfiguration, DefaultConfig - -from dialogs.tangent_dialog import TangentDialog -from dialogs.sso.sso_dialog import SsoDialog - -SSO_DIALOG_PREFIX = "Sso" -ACTIVE_SKILL_PROPERTY_NAME = "MainDialog.ActiveSkillProperty" -DELIVERY_MODE_NAME = "MainDialog.DeliveryMode" -SELECTED_SKILL_KEY_NAME = "MainDialog.SelectedSkillKey" -JUST_FORWARD_THE_ACTIVITY = "JustForwardTurnContext.Activity" - -DELIVERY_MODE_PROMPT = "DeliveryModePrompt" -SKILL_GROUP_PROMPT = "SkillGroupPrompt" -SKILL_PROMPT = "SkillPrompt" -SKILL_ACTION_PROMPT = "SkillActionPrompt" - - -class MainDialog(ComponentDialog): - def __init__( - self, - conversation_state: ConversationState, - conversation_id_factory: ConversationIdFactoryBase, - skill_client: SkillHttpClient, - skills_config: SkillsConfiguration, - configuration: DefaultConfig, - ): - super().__init__(MainDialog.__name__) - - self._configuration = configuration - if not self._configuration: - raise TypeError( - "[MainDialog]: Missing parameter. configuration is required" - ) - - bot_id = self._configuration.APP_ID - - self._skills_config = skills_config - if not self._skills_config: - raise TypeError( - "[MainDialog]: Missing parameter. skills_config is required" - ) - - if not skill_client: - raise TypeError("[MainDialog]: Missing parameter. skill_client is required") - - if not conversation_state: - raise TypeError( - "[MainDialog]: Missing parameter. conversation_state is required" - ) - - if not conversation_id_factory: - raise TypeError( - "[MainDialog]: Missing parameter. conversation_id_factory is required" - ) - - # Use helper method to add SkillDialog instances for the configured skills. - self._add_skill_dialogs( - conversation_state, - conversation_id_factory, - skill_client, - skills_config, - bot_id, - ) - - # Create state property to track the active skill. - self.active_skill_property = conversation_state.create_property( - ACTIVE_SKILL_PROPERTY_NAME - ) - - # Register the tangent dialog for testing tangents and resume. - self.add_dialog(TangentDialog()) - - # Add ChoicePrompt to render available delivery modes. - self.add_dialog(ChoicePrompt(DELIVERY_MODE_PROMPT)) - - # Add ChoicePrompt to render available types of skill. - self.add_dialog(ChoicePrompt(SKILL_GROUP_PROMPT)) - - # Add ChoicePrompt to render available skills. - self.add_dialog(ChoicePrompt(SKILL_PROMPT)) - - # Add ChoicePrompt to render skill actions. - self.add_dialog(ChoicePrompt(SKILL_ACTION_PROMPT)) - - # Special case: register SSO dialogs for skills that support SSO actions. - self._add_sso_dialogs(self._configuration) - - # Add main waterfall dialog for this bot. - self.add_dialog( - WaterfallDialog( - WaterfallDialog.__name__, - [ - self._select_delivery_mode_step, - self._select_skill_group_step, - self._select_skill_step, - self._select_skill_action_step, - self._call_skill_action_step, - self._final_step, - ], - ) - ) - - self.initial_dialog_id = WaterfallDialog.__name__ - - async def on_continue_dialog(self, inner_dc: DialogContext): - """ - This override is used to test the "abort" command to interrupt skills from the parent and - also to test the "tangent" command to start a tangent and resume a skill. - """ - - # This is an example on how to cancel a SkillDialog that is currently in progress from the parent bot. - active_skill = await self.active_skill_property.get(inner_dc.context) - activity = inner_dc.context.activity - - if ( - active_skill - and activity.type == ActivityTypes.message - and activity.text - and "abort" in activity.text.lower() - ): - # Cancel all dialogs when the user says abort. - # The SkillDialog automatically sends an EndOfConversation message to the skill to let the - # skill know that it needs to end its current dialogs, too. - await inner_dc.cancel_all_dialogs() - return await inner_dc.replace_dialog( - self.initial_dialog_id, - "Canceled! \n\n What delivery mode would you like to use?", - ) - - # Sample to test a tangent when in the middle of a skill conversation. - if ( - active_skill - and activity.type == ActivityTypes.message - and activity.text - and activity.text.lower() == "tangent" - ): - # Start tangent. - return await inner_dc.begin_dialog(TangentDialog.__name__) - - return await super().on_continue_dialog(inner_dc) - - async def _select_delivery_mode_step( - self, step_context: WaterfallStepContext - ) -> DialogTurnResult: - """ - Render a prompt to select the delivery mode to use. - """ - - # Create the PromptOptions with the delivery modes supported. - message_text = ( - str(step_context.options) - if step_context.options - else "What delivery mode would you like to use?" - ) - retry_message_text = ( - "That was not a valid choice, please select a valid delivery mode." - ) - - options = PromptOptions( - prompt=MessageFactory.text( - message_text, message_text, InputHints.expecting_input - ), - retry_prompt=MessageFactory.text( - retry_message_text, retry_message_text, InputHints.expecting_input - ), - choices=[ - Choice(DeliveryModes.normal.value), - Choice(DeliveryModes.expect_replies.value), - ], - ) - - # Prompt the user to select a delivery mode. - return await step_context.prompt(DELIVERY_MODE_PROMPT, options) - - async def _select_skill_group_step(self, step_context: WaterfallStepContext): - """ - Render a prompt to select the group of skills to use. - """ - - # Remember the delivery mode selected by the user. - step_context.values[DELIVERY_MODE_NAME] = step_context.result.value - - # Create the PromptOptions with the types of supported skills. - message_text = "What group of skills would you like to use?" - retry_message_text = ( - "That was not a valid choice, please select a valid skill group." - ) - - choices = [] - groups = [] - for skill in self._skills_config.SKILLS.values(): - if skill.group not in groups: - groups.append(skill.group) - choices.append(Choice(skill.group)) - - options = PromptOptions( - prompt=MessageFactory.text( - message_text, message_text, InputHints.expecting_input - ), - retry_prompt=MessageFactory.text( - retry_message_text, retry_message_text, InputHints.expecting_input - ), - choices=choices, - ) - - # Prompt the user to select a type of skill. - return await step_context.prompt(SKILL_GROUP_PROMPT, options) - - async def _select_skill_step( - self, step_context: WaterfallStepContext - ) -> DialogTurnResult: - """ - Render a prompt to select the skill to call. - """ - - skill_group = step_context.result.value - - # Create the PromptOptions from the skill configuration which contain the list of configured skills. - message_text = "What skill would you like to call?" - retry_message_text = "That was not a valid choice, please select a valid skill." - - options = PromptOptions( - prompt=MessageFactory.text( - message_text, message_text, InputHints.expecting_input - ), - retry_prompt=MessageFactory.text( - retry_message_text, retry_message_text, InputHints.expecting_input - ), - style=ListStyle.list_style, - choices=[ - Choice(skill.id) - for skill in self._skills_config.SKILLS.values() - if skill.group.lower().startswith(skill_group.lower()) - ], - ) - - # Prompt the user to select a skill. - return await step_context.prompt(SKILL_PROMPT, options) - - async def _select_skill_action_step(self, step_context: WaterfallStepContext): - """ - Render a prompt to select the begin action for the skill. - """ - - # Get the skill info based on the selected skill. - selected_skill_id = step_context.result.value - delivery_mode = str(step_context.values[DELIVERY_MODE_NAME]) - v3_bots = ["EchoSkillBotDotNetV3", "EchoSkillBotJSV3"] - - # Exclude v3 bots from ExpectReplies - if ( - delivery_mode == DeliveryModes.expect_replies - and selected_skill_id in v3_bots - ): - await step_context.context.send_activity( - MessageFactory.text( - "V3 Bots do not support 'expectReplies' delivery mode." - ) - ) - - # Restart setup dialog - return await step_context.replace_dialog(self.initial_dialog_id) - - selected_skill = next( - val - for key, val in self._skills_config.SKILLS.items() - if val.id == selected_skill_id - ) - - # Remember the skill selected by the user. - step_context.values[SELECTED_SKILL_KEY_NAME] = selected_skill - - skill_action_choices = [ - Choice(action) for action in selected_skill.get_actions() - ] - if len(skill_action_choices) == 1: - # The skill only supports one action (e.g. Echo), skip the prompt. - return await step_context.next( - FoundChoice(value=skill_action_choices[0].value, index=0, score=0) - ) - - # Create the PromptOptions with the actions supported by the selected skill. - message_text = f"Select an action to send to **{selected_skill.id}**." - - options = PromptOptions( - prompt=MessageFactory.text( - message_text, message_text, InputHints.expecting_input - ), - choices=skill_action_choices, - ) - - # Prompt the user to select a skill action. - return await step_context.prompt(SKILL_ACTION_PROMPT, options) - - async def _call_skill_action_step(self, step_context: WaterfallStepContext): - """ - Starts the SkillDialog based on the user's selections. - """ - - selected_skill = step_context.values[SELECTED_SKILL_KEY_NAME] - - # Save active skill in state. - await self.active_skill_property.set(step_context.context, selected_skill) - - # Create the initial activity to call the skill. - skill_activity = self._create_begin_activity( - step_context.context, selected_skill.id, step_context.result.value - ) - - if skill_activity.name == "Sso": - # Special case, we start the SSO dialog to prepare the host to call the skill. - return await step_context.begin_dialog( - f"{SSO_DIALOG_PREFIX}{selected_skill.id}" - ) - - # We are manually creating the activity to send to the skill; ensure we add the ChannelData and Properties - # from the original activity so the skill gets them. - # Note: this is not necessary if we are just forwarding the current activity from context. - skill_activity.channel_data = step_context.context.activity.channel_data - skill_activity.additional_properties = ( - step_context.context.activity.additional_properties - ) - - # Create the BeginSkillDialogOptions and assign the activity to send. - skill_dialog_args = BeginSkillDialogOptions(activity=skill_activity) - if str(step_context.values[DELIVERY_MODE_NAME]) == DeliveryModes.expect_replies: - skill_dialog_args.activity.delivery_mode = DeliveryModes.expect_replies - - # Start the skillDialog instance with the arguments. - return await step_context.begin_dialog(selected_skill.id, skill_dialog_args) - - async def _final_step(self, step_context: WaterfallStepContext): - """ - The SkillDialog has ended, render the results (if any) and restart MainDialog. - """ - - active_skill = await self.active_skill_property.get(step_context.context) - - # Check if the skill returned any results and display them. - if step_context.result: - message = f'Skill "{active_skill.id}" invocation complete.' - message += f" Result: {json.dumps(step_context.result)}" - await step_context.context.send_activity( - MessageFactory.text(message, message, InputHints.ignoring_input) - ) - - # Clear the delivery mode selected by the user. - step_context.values[DELIVERY_MODE_NAME] = None - - # Clear the skill selected by the user. - step_context.values[SELECTED_SKILL_KEY_NAME] = None - - # Clear active skill in state. - await self.active_skill_property.delete(step_context.context) - - # Restart the main dialog with a different message the second time around. - return await step_context.replace_dialog( - self.initial_dialog_id, - f'Done with "{active_skill.id}". \n\n What delivery mode would you ' - f"like to use?", - ) - - def _add_skill_dialogs( - self, - conversation_state: ConversationState, - conversation_id_factory: ConversationIdFactoryBase, - skill_client: SkillHttpClient, - skills_config: SkillsConfiguration, - bot_id: str, - ): - """ - Helper method that creates and adds SkillDialog instances for the configured skills. - """ - - for skill_info in self._skills_config.SKILLS.values(): - # Create the dialog options. - skill_dialog_options = SkillDialogOptions( - bot_id=bot_id, - conversation_id_factory=conversation_id_factory, - skill_client=skill_client, - skill_host_endpoint=skills_config.SKILL_HOST_ENDPOINT, - conversation_state=conversation_state, - skill=skill_info, - ) - - # Add a SkillDialog for the selected skill. - self.add_dialog(SkillDialog(skill_dialog_options, skill_info.id)) - - def _create_begin_activity( - self, context: TurnContext, skill_id: str, selected_option: str - ): - if selected_option.lower() == JUST_FORWARD_THE_ACTIVITY.lower(): - # Note message activities also support input parameters but we are not using them in this example. - # Return a deep clone of the activity so we don't risk altering the original one - return copy.deepcopy(context.activity) - - # Get the begin activity from the skill instance. - activity: Activity = self._skills_config.SKILLS[skill_id].create_begin_activity( - selected_option - ) - - # We are manually creating the activity to send to the skill; ensure we add the ChannelData and Properties - # from the original activity so the skill gets them. - # Note: this is not necessary if we are just forwarding the current activity from context. - activity.channel_data = context.activity.channel_data - activity.additional_properties = context.activity.additional_properties - - return activity - - # Special case. - # SSO needs a dialog in the host to allow the user to sign in. - # We create and several SsoDialog instances for each skill that supports SSO. - def _add_sso_dialogs(self, configuration: DefaultConfig): - connection_name = configuration.SSO_CONNECTION_NAME - - for sso_skill_dialog in [ - skill_dialog - for skill_dialog in self._dialogs._dialogs.values() # pylint: disable=W0212 - if skill_dialog.id.startswith("WATERFALLSKILL") - ]: - self.add_dialog( - SsoDialog( - f"{SSO_DIALOG_PREFIX}{sso_skill_dialog.id}", - sso_skill_dialog, - connection_name, - ) - ) diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/__init__.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/__init__.py deleted file mode 100644 index f489fd4fae..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from .sso_dialog import SsoDialog -from .sso_signin_dialog import SsoSignInDialog - -__all__ = ["SsoDialog", "SsoSignInDialog"] diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/sso_dialog.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/sso_dialog.py deleted file mode 100644 index 1145358a33..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/sso_dialog.py +++ /dev/null @@ -1,137 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from botbuilder.dialogs import ( - ComponentDialog, - WaterfallDialog, - WaterfallStepContext, - Choice, - ChoicePrompt, - PromptOptions, - Dialog, - BeginSkillDialogOptions, -) -from botbuilder.core import MessageFactory -from botbuilder.dialogs.dialog_turn_result import DialogTurnResult -from botbuilder.dialogs.dialog_turn_status import DialogTurnStatus -from botbuilder.schema import Activity, ActivityTypes, InputHints - -from .sso_signin_dialog import SsoSignInDialog - - -class SsoDialog(ComponentDialog): - """ - Helps prepare the host for SSO operations and provides helpers to check the status and invoke the skill. - """ - - def __init__(self, dialog_id: str, sso_skill_dialog: Dialog, connection_name): - super().__init__(dialog_id) - - self._connection_name = connection_name - self.skill_dialog_id = sso_skill_dialog.id - - self.add_dialog(ChoicePrompt(ChoicePrompt.__name__)) - self.add_dialog(SsoSignInDialog(self._connection_name)) - self.add_dialog(sso_skill_dialog) - - self.add_dialog( - WaterfallDialog( - WaterfallDialog.__name__, - [ - self.prompt_action_step, - self.handle_action_step, - self.prompt_final_step, - ], - ) - ) - - self.initial_dialog_id = WaterfallDialog.__name__ - - async def prompt_action_step(self, step_context: WaterfallStepContext): - message_text = "What SSO action do you want to perform?" - reprompt_message_text = ( - "That was not a valid choice, please select a valid choice." - ) - - options = PromptOptions( - prompt=MessageFactory.text( - message_text, message_text, InputHints.expecting_input - ), - retry_prompt=MessageFactory.text( - reprompt_message_text, reprompt_message_text, InputHints.expecting_input - ), - choices=await self.get_prompt_choices(step_context), - ) - - # Prompt the user to select an SSO action. - return await step_context.prompt(ChoicePrompt.__name__, options) - - async def get_prompt_choices(self, step_context: WaterfallStepContext): - """ - Create the prompt choices based on the current sign in status - """ - - prompt_choices = list() - token = await step_context.context.adapter.get_user_token( - step_context.context, self._connection_name - ) - - if token is None: - prompt_choices.append(Choice("Login")) - - # Token exchange will fail when the host is not logged on and the skill should - # show a regular OAuthPrompt - prompt_choices.append(Choice("Call Skill (without SSO)")) - else: - prompt_choices.append(Choice("Logout")) - prompt_choices.append(Choice("Show token")) - prompt_choices.append(Choice("Call Skill (with SSO)")) - - prompt_choices.append(Choice("Back")) - - return prompt_choices - - async def handle_action_step(self, step_context: WaterfallStepContext): - action = str(step_context.result.value).lower() - - if action == "login": - return await step_context.begin_dialog(SsoSignInDialog.__name__) - - if action == "logout": - await step_context.context.adapter.sign_out_user( - step_context.context, self._connection_name - ) - await step_context.context.send_activity("You have been signed out.") - return await step_context.next(step_context.result) - - if action == "show token": - token = await step_context.context.adapter.get_user_token( - step_context.context, self._connection_name - ) - - if token is None: - await step_context.context.send_activity("User has no cached token.") - else: - await step_context.context.send_activity( - f"Here is your current SSO token: { token.token }" - ) - - return await step_context.next(step_context.result) - - if action in ["call skill (with sso)", "call skill (without sso)"]: - begin_skill_activity = Activity(type=ActivityTypes.event, name="Sso") - - return await step_context.begin_dialog( - self.skill_dialog_id, - BeginSkillDialogOptions(activity=begin_skill_activity), - ) - - if action == "back": - return DialogTurnResult(DialogTurnStatus.Complete) - - # This should never be hit since the previous prompt validates the choice - raise Exception(f"Unrecognized action: {action}") - - async def prompt_final_step(self, step_context: WaterfallStepContext): - # Restart the dialog (we will exit when the user says end) - return await step_context.replace_dialog(self.initial_dialog_id) diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/sso_signin_dialog.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/sso_signin_dialog.py deleted file mode 100644 index 242679dc36..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/sso_signin_dialog.py +++ /dev/null @@ -1,57 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from botbuilder.dialogs import ( - ComponentDialog, - WaterfallDialog, - WaterfallStepContext, - OAuthPrompt, - OAuthPromptSettings, -) - - -class SsoSignInDialog(ComponentDialog): - def __init__(self, connection_name: str): - super().__init__(SsoSignInDialog.__name__) - - self.add_dialog( - OAuthPrompt( - OAuthPrompt.__name__, - OAuthPromptSettings( - connection_name=connection_name, - text=f"Sign in to the host bot using AAD for SSO and connection {connection_name}", - title="Sign In", - timeout=60000, - ), - ) - ) - - self.add_dialog( - WaterfallDialog( - WaterfallDialog.__name__, - [ - self.signin_step, - self.display_token, - ], - ) - ) - - self.initial_dialog_id = WaterfallDialog.__name__ - - async def signin_step(self, step_context: WaterfallStepContext): - return await step_context.begin_dialog(OAuthPrompt.__name__) - - async def display_token(self, step_context: WaterfallStepContext): - sso_token = step_context.result - if sso_token: - if isinstance(sso_token, dict): - token = sso_token.get("token") - else: - token = sso_token.token - - await step_context.context.send_activity(f"Here is your token: {token}") - - else: - await step_context.context.send_activity("No token was provided.") - - return await step_context.end_dialog() diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/tangent_dialog.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/tangent_dialog.py deleted file mode 100644 index 957aba021b..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/dialogs/tangent_dialog.py +++ /dev/null @@ -1,51 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from botbuilder.dialogs import ( - ComponentDialog, - WaterfallDialog, - WaterfallStepContext, - TextPrompt, - PromptOptions, -) -from botbuilder.core import MessageFactory -from botbuilder.schema import InputHints - - -class TangentDialog(ComponentDialog): - """ - A simple waterfall dialog used to test triggering tangents from "MainDialog". - """ - - def __init__(self): - super().__init__(TangentDialog.__name__) - - self.add_dialog(TextPrompt(TextPrompt.__name__)) - self.add_dialog( - WaterfallDialog( - WaterfallDialog.__name__, [self._step_1, self._step_2, self._end_step] - ) - ) - - self.initial_dialog_id = WaterfallDialog.__name__ - - async def _step_1(self, step_context: WaterfallStepContext): - message_text = "Tangent step 1 of 2, say something." - prompt_message = MessageFactory.text( - message_text, message_text, InputHints.expecting_input - ) - return await step_context.prompt( - TextPrompt.__name__, PromptOptions(prompt=prompt_message) - ) - - async def _step_2(self, step_context: WaterfallStepContext): - message_text = "Tangent step 2 of 2, say something." - prompt_message = MessageFactory.text( - message_text, message_text, InputHints.expecting_input - ) - return await step_context.prompt( - TextPrompt.__name__, PromptOptions(prompt=prompt_message) - ) - - async def _end_step(self, step_context: WaterfallStepContext): - return await step_context.end_dialog() diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/helpers/dialog_helper.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/helpers/dialog_helper.py deleted file mode 100644 index 6b2646b0ba..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/helpers/dialog_helper.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from botbuilder.core import StatePropertyAccessor, TurnContext -from botbuilder.dialogs import Dialog, DialogSet, DialogTurnStatus - - -class DialogHelper: - @staticmethod - async def run_dialog( - dialog: Dialog, turn_context: TurnContext, accessor: StatePropertyAccessor - ): - dialog_set = DialogSet(accessor) - dialog_set.add(dialog) - - dialog_context = await dialog_set.create_context(turn_context) - results = await dialog_context.continue_dialog() - if results.status == DialogTurnStatus.Empty: - await dialog_context.begin_dialog(dialog.id) diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/requirements.txt b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/requirements.txt deleted file mode 100644 index 02460b14f9..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -botbuilder-integration-aiohttp>=4.13.0 -botbuilder-dialogs>=4.13.0 -python-dotenv~=0.15.0 diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skill_conversation_id_factory.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skill_conversation_id_factory.py deleted file mode 100644 index 06c5e5a2f5..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skill_conversation_id_factory.py +++ /dev/null @@ -1,76 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from typing import Union - -from botbuilder.core import Storage, TurnContext -from botbuilder.core.skills import ( - ConversationIdFactoryBase, - SkillConversationIdFactoryOptions, - SkillConversationReference, -) -from botbuilder.schema import ConversationReference - - -class SkillConversationIdFactory(ConversationIdFactoryBase): - def __init__(self, storage: Storage): - if not storage: - raise TypeError("storage can't be None") - - self._storage = storage - - async def create_skill_conversation_id( - self, - options_or_conversation_reference: Union[ - SkillConversationIdFactoryOptions, ConversationReference - ], - ) -> str: - if not options_or_conversation_reference: - raise TypeError("Need options or conversation reference") - - if not isinstance( - options_or_conversation_reference, SkillConversationIdFactoryOptions - ): - raise TypeError( - "This SkillConversationIdFactory can only handle SkillConversationIdFactoryOptions" - ) - - options = options_or_conversation_reference - - # Create the storage key based on the SkillConversationIdFactoryOptions. - conversation_reference = TurnContext.get_conversation_reference( - options.activity - ) - skill_conversation_id = ( - f"{conversation_reference.conversation.id}" - f"-{options.bot_framework_skill.id}" - f"-{conversation_reference.channel_id}" - f"-skillconvo" - ) - - # Create the SkillConversationReference instance. - skill_conversation_reference = SkillConversationReference( - conversation_reference=conversation_reference, - oauth_scope=options.from_bot_oauth_scope, - ) - - # Store the SkillConversationReference using the skill_conversation_id as a key. - skill_conversation_info = {skill_conversation_id: skill_conversation_reference} - await self._storage.write(skill_conversation_info) - - # Return the generated skill_conversation_id (that will be also used as the conversation ID to call the skill). - return skill_conversation_id - - async def get_conversation_reference( - self, skill_conversation_id: str - ) -> Union[SkillConversationReference, ConversationReference]: - if not skill_conversation_id: - raise TypeError("skill_conversation_id can't be None") - - # Get the SkillConversationReference from storage for the given skill_conversation_id. - skill_conversation_info = await self._storage.read([skill_conversation_id]) - - return skill_conversation_info.get(skill_conversation_id) - - async def delete_conversation_reference(self, skill_conversation_id: str): - await self._storage.delete([skill_conversation_id]) diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/echo_skill.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/echo_skill.py deleted file mode 100644 index 560f0adb14..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/echo_skill.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from enum import Enum -from botbuilder.schema import Activity -from skills.skill_definition import SkillDefinition - - -class EchoSkill(SkillDefinition): - class SkillAction(str, Enum): - MESSAGE = "Message" - - def get_actions(self): - return self.SkillAction - - def create_begin_activity(self, action_id: str): - if action_id not in self.SkillAction: - raise Exception(f'Unable to create begin activity for "${action_id}".') - - # We only support one activity for Echo so no further checks are needed - activity = Activity.create_message_activity() - activity.name = self.SkillAction.MESSAGE.value - activity.text = "Begin the Echo Skill" - - return activity diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/skill_definition.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/skill_definition.py deleted file mode 100644 index 3e0d43e498..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/skill_definition.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from botbuilder.core.skills import BotFrameworkSkill - - -class SkillDefinition(BotFrameworkSkill): - """ - Extends BotFrameworkSkill and provides methods to return the actions and the begin activity - to start a skill. - This class also exposes a group property to render skill groups and narrow down the available - options. - Remarks: This is just a temporary implementation, ideally, this should be replaced by logic that - parses a manifest and creates what's needed. - """ - - def __init__(self, id: str = None, group: str = None): - super().__init__(id=id) - self.group = group - - def get_actions(self): - raise NotImplementedError("[SkillDefinition]: Method not implemented") - - def create_begin_activity(self, action_id: str): - raise NotImplementedError("[SkillDefinition]: Method not implemented") diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/teams_skill.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/teams_skill.py deleted file mode 100644 index 6631c869ea..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/teams_skill.py +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from enum import Enum -from botbuilder.schema import Activity -from skills.skill_definition import SkillDefinition - - -class TeamsSkill(SkillDefinition): - class SkillAction(str, Enum): - TEAMS_TASK_MODULE = "TeamsTaskModule" - TEAMS_CARD_ACTION = "TeamsCardAction" - TEAMS_CONVERSATION = "TeamsConversation" - CARDS = "Cards" - PROACTIVE = "Proactive" - ATTACHMENT = "Attachment" - AUTH = "Auth" - SSO = "Sso" - ECHO = "Echo" - FILE_UPLOAD = "FileUpload" - DELETE = "Delete" - UPDATE = "Update" - - def get_actions(self): - return self.SkillAction - - def create_begin_activity(self, action_id: str): - if action_id not in self.SkillAction: - raise Exception(f'Unable to create begin activity for "${action_id}".') - - # We don't support special parameters in these skills so a generic event with the - # right name will do in this case. - activity = Activity.create_event_activity() - activity.name = action_id - - return activity diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/waterfall_skill.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/waterfall_skill.py deleted file mode 100644 index 34db3b6abc..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills/waterfall_skill.py +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from enum import Enum -from botbuilder.schema import Activity -from skills.skill_definition import SkillDefinition - - -class WaterfallSkill(SkillDefinition): - class SkillAction(str, Enum): - CARDS = "Cards" - PROACTIVE = "Proactive" - AUTH = "Auth" - MESSAGE_WITH_ATTACHMENT = "MessageWithAttachment" - SSO = "Sso" - FILE_UPLOAD = "FileUpload" - ECHO = "Echo" - DELETE = "Delete" - UPDATE = "Update" - - def get_actions(self): - return self.SkillAction - - def create_begin_activity(self, action_id: str): - if action_id not in self.SkillAction: - raise Exception(f'Unable to create begin activity for "${action_id}".') - - # We don't support special parameters in these skills so a generic event with the - # right name will do in this case. - activity = Activity.create_event_activity() - activity.name = action_id - - return activity diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills_configuration.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills_configuration.py deleted file mode 100644 index 1b29374ffb..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/skills_configuration.py +++ /dev/null @@ -1,88 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import os -from typing import Dict - -from botbuilder.dialogs import ObjectPath -from dotenv import load_dotenv - -from skills.skill_definition import SkillDefinition -from skills.waterfall_skill import WaterfallSkill -from skills.echo_skill import EchoSkill -from skills.teams_skill import TeamsSkill - -load_dotenv() - - -class DefaultConfig: - """ - Bot Default Configuration - """ - - PORT = 37020 - APP_ID = os.getenv("MicrosoftAppId") - APP_PASSWORD = os.getenv("MicrosoftAppPassword") - SSO_CONNECTION_NAME = os.getenv("SsoConnectionName") - SSO_CONNECTION_NAME_TEAMS = os.getenv("SsoConnectionNameTeams") - - -class SkillsConfiguration: - """ - Bot Skills Configuration - A helper class that loads Skills information from configuration - Remarks: This class loads the skill settings from env and casts them into derived - types of SkillDefinition so we can render prompts with the skills and in their - groups. - """ - - SKILL_HOST_ENDPOINT = os.getenv("SkillHostEndpoint") - SKILLS: Dict[str, SkillDefinition] = dict() - - def __init__(self): - skills_data = dict() - skill_variable = [x for x in os.environ if x.lower().startswith("skill_")] - - for val in skill_variable: - names = val.split("_") - bot_id = names[1] - attr = names[2] - - if bot_id not in skills_data: - skills_data[bot_id] = dict() - - if attr.lower() == "appid": - skills_data[bot_id]["app_id"] = os.getenv(val) - elif attr.lower() == "endpoint": - skills_data[bot_id]["skill_endpoint"] = os.getenv(val) - elif attr.lower() == "group": - skills_data[bot_id]["group"] = os.getenv(val) - else: - raise ValueError( - f"[SkillsConfiguration]: Invalid environment variable declaration {attr}" - ) - - for skill_id, skill_value in skills_data.items(): - definition = SkillDefinition(id=skill_id, group=skill_value["group"]) - definition.app_id = skill_value["app_id"] - definition.skill_endpoint = skill_value["skill_endpoint"] - self.SKILLS[skill_id] = self.create_skill_definition(definition) - - # Note: we hard code this for now, we should dynamically create instances based on the manifests. - # For now, this code creates a strong typed version of the SkillDefinition based on the skill group - # and copies the info from env into it. - @staticmethod - def create_skill_definition(skill: SkillDefinition): - if skill.group.lower() == ("echo"): - skill_definition = ObjectPath.assign(EchoSkill(), skill) - - elif skill.group.lower() == ("waterfall"): - skill_definition = ObjectPath.assign(WaterfallSkill(), skill) - - elif skill.group.lower() == ("teams"): - skill_definition = ObjectPath.assign(TeamsSkill(), skill) - - else: - raise Exception(f"Unable to find definition class for {skill.id}.") - - return skill_definition diff --git a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/token_exchange_skill_handler.py b/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/token_exchange_skill_handler.py deleted file mode 100644 index 1da847ef5f..0000000000 --- a/tests/functional/Bots/Python/Consumers/CodeFirst/WaterfallHostBot/token_exchange_skill_handler.py +++ /dev/null @@ -1,199 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import traceback -from uuid import uuid4 -from typing import Union - -from botbuilder.core import Bot, TurnContext -from botbuilder.core.card_factory import ContentTypes -from botbuilder.core.skills import ( - SkillHandler, - BotFrameworkSkill, -) -from botbuilder.integration.aiohttp.skills import SkillHttpClient -from botbuilder.schema import ( - ResourceResponse, - ActivityTypes, - SignInConstants, - TokenExchangeInvokeRequest, -) -from botframework.connector.auth import ( - CredentialProvider, - AuthenticationConfiguration, - ClaimsIdentity, - Activity, - JwtTokenValidation, -) -from botframework.connector.token_api.models import TokenExchangeRequest - -from adapter_with_error_handler import AdapterWithErrorHandler -from skill_conversation_id_factory import SkillConversationIdFactory -from skills.skill_definition import SkillDefinition -from skills_configuration import SkillsConfiguration, DefaultConfig - - -class TokenExchangeSkillHandler(SkillHandler): - def __init__( - self, - adapter: AdapterWithErrorHandler, - bot: Bot, - configuration: DefaultConfig, - conversation_id_factory: SkillConversationIdFactory, - skills_config: SkillsConfiguration, - skill_client: SkillHttpClient, - credential_provider: CredentialProvider, - auth_configuration: AuthenticationConfiguration, - ): - super().__init__( - adapter, - bot, - conversation_id_factory, - credential_provider, - auth_configuration, - ) - self._token_exchange_provider = adapter - if not self._token_exchange_provider: - raise ValueError( - f"{self._token_exchange_provider} does not support token exchange" - ) - - self._configuration = configuration - self._skills_config = skills_config - self._skill_client = skill_client - self._conversation_id_factory = conversation_id_factory - self._bot_id = configuration.APP_ID - - async def on_send_to_conversation( - self, claims_identity: ClaimsIdentity, conversation_id: str, activity: Activity, - ) -> ResourceResponse: - if await self._intercept_oauth_cards(claims_identity, activity): - return ResourceResponse(id=str(uuid4())) - - return await super().on_send_to_conversation( - claims_identity, conversation_id, activity - ) - - async def on_reply_to_activity( - self, - claims_identity: ClaimsIdentity, - conversation_id: str, - activity_id: str, - activity: Activity, - ) -> ResourceResponse: - if await self._intercept_oauth_cards(claims_identity, activity): - return ResourceResponse(id=str(uuid4())) - - return await super().on_reply_to_activity( - claims_identity, conversation_id, activity_id, activity - ) - - def _get_calling_skill( - self, claims_identity: ClaimsIdentity - ) -> Union[SkillDefinition, None]: - app_id = JwtTokenValidation.get_app_id_from_claims(claims_identity.claims) - - if not app_id: - return None - - return next( - skill - for skill in self._skills_config.SKILLS.values() - if skill.app_id == app_id - ) - - async def _intercept_oauth_cards( - self, claims_identity: ClaimsIdentity, activity: Activity - ) -> bool: - if activity.attachments: - oauth_card_attachment = next( - ( - attachment - for attachment in activity.attachments - if attachment.content_type == ContentTypes.oauth_card - ), - None, - ) - - if oauth_card_attachment: - target_skill = self._get_calling_skill(claims_identity) - if target_skill: - oauth_card = oauth_card_attachment.content - token_exchange_resource = oauth_card.get( - "TokenExchangeResource" - ) or oauth_card.get("tokenExchangeResource") - if token_exchange_resource: - context = TurnContext(self._adapter, activity) - context.turn_state["BotIdentity"] = claims_identity - - # We need to know what connection name to use for the token exchange so we figure that out here - connection_name = ( - self._configuration.SSO_CONNECTION_NAME - if target_skill.group == "Waterfall" - else self._configuration.SSO_CONNECTION_NAME_TEAMS - ) - - if not connection_name: - raise ValueError("The SSO connection name cannot be null.") - - # AAD token exchange - try: - uri = token_exchange_resource.get("uri") - result = await self._token_exchange_provider.exchange_token( - context, - connection_name, - activity.recipient.id, - TokenExchangeRequest(uri=uri), - ) - - if result.token: - # If token above is null, then SSO has failed and hence we return false. - # If not, send an invoke to the skill with the token. - return await self._send_token_exchange_invoke_to_skill( - incoming_activity=activity, - connection_name=oauth_card.get("connectionName"), - resource_id=token_exchange_resource.get("id"), - token=result.token, - target_skill=target_skill, - ) - - except Exception as exception: - print(f"Unable to exchange token: {exception}") - traceback.print_exc() - return False - - return False - - async def _send_token_exchange_invoke_to_skill( - self, - incoming_activity: Activity, - resource_id: str, - token: str, - connection_name: str, - target_skill: BotFrameworkSkill, - ) -> bool: - activity = incoming_activity.create_reply() - activity.type = ActivityTypes.invoke - activity.name = SignInConstants.token_exchange_operation_name - activity.value = TokenExchangeInvokeRequest( - id=resource_id, token=token, connection_name=connection_name - ) - skill_conversation_reference = await self._conversation_id_factory.get_conversation_reference( - incoming_activity.conversation.id - ) - activity.conversation = ( - skill_conversation_reference.conversation_reference.conversation - ) - activity.service_url = ( - skill_conversation_reference.conversation_reference.service_url - ) - - # Route the activity to the skill - response = await self._skill_client.post_activity_to_skill( - from_bot_id=self._bot_id, - to_skill=target_skill, - service_url=self._skills_config.SKILL_HOST_ENDPOINT, - activity=activity, - ) - - return 200 <= response.status <= 299 diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/app.py b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/app.py deleted file mode 100644 index 5a87c33513..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/app.py +++ /dev/null @@ -1,135 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import json -import sys -import traceback -from datetime import datetime - -from aiohttp import web -from aiohttp.web import Request, Response -from botbuilder.core import ( - BotFrameworkAdapter, - BotFrameworkAdapterSettings, - TurnContext, - MessageFactory, -) -from botbuilder.schema import Activity, ActivityTypes, InputHints -from botframework.connector.auth import AuthenticationConfiguration - -from bots import EchoBot -from config import DefaultConfig -from authentication import AllowedCallersClaimsValidator -from http import HTTPStatus - -CONFIG = DefaultConfig() -CLAIMS_VALIDATOR = AllowedCallersClaimsValidator(frozenset(CONFIG.ALLOWED_CALLERS)) -AUTH_CONFIG = AuthenticationConfiguration( - claims_validator=CLAIMS_VALIDATOR.validate_claims -) -# Create adapter. -# See https://aka.ms/about-bot-adapter to learn more about how bots work. -SETTINGS = BotFrameworkAdapterSettings( - app_id=CONFIG.APP_ID, - app_password=CONFIG.APP_PASSWORD, - auth_configuration=AUTH_CONFIG, -) -ADAPTER = BotFrameworkAdapter(SETTINGS) - -# Catch-all for errors. -async def on_error(context: TurnContext, error: Exception): - # This check writes out errors to console log .vs. app insights. - # NOTE: In production environment, you should consider logging this to Azure - # application insights. - print(f"\n [on_turn_error] unhandled error: {error}", file=sys.stderr) - traceback.print_exc() - - try: - exc_info = sys.exc_info() - stack = traceback.format_exception(*exc_info) - - # Send a message to the user - error_message_text = "The skill encountered an error or bug." - error_message = MessageFactory.text( - f"{error_message_text}\r\n{error}\r\n{stack}", - error_message_text, - InputHints.ignoring_input, - ) - error_message.value = {"message": error, "stack": stack} - await context.send_activity(error_message) - - error_message_text = ( - "To continue to run this bot, please fix the bot source code." - ) - error_message = MessageFactory.text( - error_message_text, error_message_text, InputHints.expecting_input - ) - await context.send_activity(error_message) - - # Send a trace activity, which will be displayed in Bot Framework Emulator - if context.activity.channel_id == "emulator": - # Create a trace activity that contains the error object - trace_activity = Activity( - label="TurnError", - name="on_turn_error Trace", - timestamp=datetime.utcnow(), - type=ActivityTypes.trace, - value=f"{error}", - value_type="https://www.botframework.com/schemas/error", - ) - await context.send_activity(trace_activity) - - # Send and EndOfConversation activity to the skill caller with the error to end the conversation and let the - # caller decide what to do. Send a trace activity if we're talking to the Bot Framework Emulator - end_of_conversation = Activity( - type=ActivityTypes.end_of_conversation, code="SkillError", text=f"{error}" - ) - await context.send_activity(end_of_conversation) - except Exception as exception: - print( - f"\n Exception caught on on_error : {exception}", file=sys.stderr, - ) - traceback.print_exc() - - -ADAPTER.on_turn_error = on_error - -# Create Bot -BOT = EchoBot() - -# Listen for incoming requests on /api/messages -async def messages(req: Request) -> Response: - # Main bot message handler. - if "application/json" in req.headers["Content-Type"]: - body = await req.json() - else: - return Response(status=HTTPStatus.UNSUPPORTED_MEDIA_TYPE) - - activity = Activity().deserialize(body) - auth_header = req.headers["Authorization"] if "Authorization" in req.headers else "" - - try: - response = await ADAPTER.process_activity(activity, auth_header, BOT.on_turn) - # DeliveryMode => Expected Replies - if response: - body = json.dumps(response.body) - return Response(status=response.status, body=body) - - # DeliveryMode => Normal - return Response(status=HTTPStatus.CREATED) - except Exception as exception: - raise exception - - -APP = web.Application() -APP.router.add_post("/api/messages", messages) - -# simple way of exposing the manifest for dev purposes. -APP.router.add_static("/manifests", "./manifests/") - - -if __name__ == "__main__": - try: - web.run_app(APP, host="localhost", port=CONFIG.PORT) - except Exception as error: - raise error diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/authentication/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/authentication/__init__.py deleted file mode 100644 index b6383973c8..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/authentication/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from .allowed_callers_claims_validator import AllowedCallersClaimsValidator - -__all__ = ["AllowedCallersClaimsValidator"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/authentication/allowed_callers_claims_validator.py b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/authentication/allowed_callers_claims_validator.py deleted file mode 100644 index d790e36f34..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/authentication/allowed_callers_claims_validator.py +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from botframework.connector.auth import JwtTokenValidation, SkillValidation - - -class AllowedCallersClaimsValidator(): - """ - Sample claims validator that loads an allowed list from configuration if present and checks - that requests are coming from allowed parent bots. - """ - - def __init__(self, allowed_callers: frozenset): - self.allowed_callers = allowed_callers - - # Load the AppIds for the configured callers (we will only allow responses from parent bots we have configured). - # DefaultConfig.ALLOWED_CALLERS is the list of parent bot Ids that are allowed to access the skill. - # To add a new parent bot simply go to the config.py file and add - # the parent bot's Microsoft AppId to the array under AllowedCallers, e.g.: - # AllowedCallers=["195bd793-4319-4a84-a800-386770c058b2","38c74e7a-3d01-4295-8e66-43dd358920f8"] - async def validate_claims(self, claims: dict): - if SkillValidation.is_skill_claim(claims) and self.allowed_callers: - # Check that the appId claim in the skill request is in the list of skills configured for this bot. - app_id = JwtTokenValidation.get_app_id_from_claims(claims) - if app_id not in self.allowed_callers: - raise ValueError( - f'Received a request from an application with an appID of "{ app_id }". To enable requests' - ' from this bot, add the id to your configuration file.' - ) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/bots/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/bots/__init__.py deleted file mode 100644 index f95fbbbadd..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/bots/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from .echo_bot import EchoBot - -__all__ = ["EchoBot"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/bots/echo_bot.py b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/bots/echo_bot.py deleted file mode 100644 index 4c69deb366..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/bots/echo_bot.py +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from botbuilder.core import ActivityHandler, MessageFactory, TurnContext -from botbuilder.schema import Activity, ActivityTypes, EndOfConversationCodes - -class EchoBot(ActivityHandler): - async def on_message_activity(self, turn_context: TurnContext): - if "end" in turn_context.activity.text or "stop" in turn_context.activity.text: - # Send End of conversation at the end. - await turn_context.send_activity( - MessageFactory.text("Ending conversation from the skill...") - ) - - end_of_conversation = Activity(type=ActivityTypes.end_of_conversation) - end_of_conversation.code = EndOfConversationCodes.completed_successfully - await turn_context.send_activity(end_of_conversation) - else: - await turn_context.send_activity( - MessageFactory.text(f"Echo: {turn_context.activity.text}") - ) - await turn_context.send_activity( - MessageFactory.text( - f'Say "end" or "stop" and I\'ll end the conversation and back to the parent.' - ) - ) - - async def on_end_of_conversation_activity(self, turn_context: TurnContext): - # This will be called if the host bot is ending the conversation. Sending additional messages should be - # avoided as the conversation may have been deleted. - # Perform cleanup of resources if needed. - pass diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/config.py b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/config.py deleted file mode 100644 index 8de1e0a9b4..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/config.py +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import os - -""" Bot Configuration """ - -class DefaultConfig: - """ Bot Configuration """ - - PORT = 37400 - APP_ID = os.environ.get("MicrosoftAppId", "") - APP_PASSWORD = os.environ.get("MicrosoftAppPassword", "") - # If ALLOWED_CALLERS is empty, any bot can call this Skill. Add MicrosoftAppIds to restrict callers to only those specified. - # Example: os.environ.get("AllowedCallers", ["54d3bb6a-3b6d-4ccd-bbfd-cad5c72fb53a", "3851a47b-53ed-4d29-b878-6e941da61e98"]) - ALLOWED_CALLERS = os.environ.get("AllowedCallers", []) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/manifests/echoskillbot-manifest-1.0.json b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/manifests/echoskillbot-manifest-1.0.json deleted file mode 100644 index 9e995c0101..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/manifests/echoskillbot-manifest-1.0.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "https://schemas.botframework.com/schemas/skills/v2.1/skill-manifest.json", - "$id": "EchoSkillBotPython", - "name": "EchoSkillBotPython", - "version": "1.0", - "description": "This is a skill for echoing what the user sent to the bot (using Python).", - "publisherName": "Microsoft", - "privacyUrl": "https://microsoft.com/privacy", - "copyright": "Copyright (c) Microsoft Corporation. All rights reserved.", - "license": "https://github.com/microsoft/BotFramework-FunctionalTests/blob/main/LICENSE", - "tags": [ - "echo" - ], - "endpoints": [ - { - "name": "default", - "protocol": "BotFrameworkV3", - "description": "Localhost endpoint for the skill (on port 37400)", - "endpointUrl": "http://localhost:37400/api/messages", - "msAppId": "00000000-0000-0000-0000-000000000000" - } - ] -} diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/requirements.txt b/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/requirements.txt deleted file mode 100644 index 3658c09bb6..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/EchoSkillBot/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -botbuilder-integration-aiohttp>=4.13.0 diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/.env b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/.env deleted file mode 100644 index e83f3f1d74..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/.env +++ /dev/null @@ -1,11 +0,0 @@ -MicrosoftAppId= -MicrosoftAppPassword= -ConnectionName=TestOAuthProvider -SsoConnectionName= -ChannelService= -AllowedCallers=* -SkillHostEndpoint=http://localhost:37420/api/skills - -EchoSkillInfo_id=EchoSkillBot -EchoSkillInfo_appId= -EchoSkillInfo_skillEndpoint=http://localhost:37400/api/messages diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/.pylintrc b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/.pylintrc deleted file mode 100644 index 6e8d5976b6..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/.pylintrc +++ /dev/null @@ -1,582 +0,0 @@ -[MASTER] - -# A comma-separated list of package or module names from where C extensions may -# be loaded. Extensions are loading into the active Python interpreter and may -# run arbitrary code. -extension-pkg-whitelist= - -# Python code to execute, usually for sys.path manipulation such as -# pygtk.require(). -#init-hook= - -# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the -# number of processors available to use. -jobs=1 - -# Control the amount of potential inferred values when inferring a single -# object. This can help the performance when dealing with large functions or -# complex, nested conditions. -limit-inference-results=100 - -# List of plugins (as comma separated values of python modules names) to load, -# usually to register additional checkers. -load-plugins= - -# Pickle collected data for later comparisons. -persistent=yes - -# Specify a configuration file. -#rcfile= - -# When enabled, pylint would attempt to guess common misconfiguration and emit -# user-friendly hints instead of false-positive error messages. -suggestion-mode=yes - -# Allow loading of arbitrary C extensions. Extensions are imported into the -# active Python interpreter and may run arbitrary code. -unsafe-load-any-extension=no - - -[MESSAGES CONTROL] - -# Only show warnings with the listed confidence levels. Leave empty to show -# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED. -confidence= - -# Disable the message, report, category or checker with the given id(s). You -# can either give multiple identifiers separated by comma (,) or put this -# option multiple times (only on the command line, not in the configuration -# file where it should appear only once). You can also use "--disable=all" to -# disable everything first and then reenable specific checks. For example, if -# you want to run only the similarities checker, you can use "--disable=all -# --enable=similarities". If you want to run only the classes checker, but have -# no Warning level messages displayed, use "--disable=all --enable=classes -# --disable=W". -disable=print-statement, - parameter-unpacking, - unpacking-in-except, - old-raise-syntax, - backtick, - long-suffix, - old-ne-operator, - old-octal-literal, - import-star-module-level, - non-ascii-bytes-literal, - raw-checker-failed, - bad-inline-option, - locally-disabled, - file-ignored, - suppressed-message, - useless-suppression, - deprecated-pragma, - use-symbolic-message-instead, - apply-builtin, - basestring-builtin, - buffer-builtin, - cmp-builtin, - coerce-builtin, - execfile-builtin, - file-builtin, - long-builtin, - raw_input-builtin, - reduce-builtin, - standarderror-builtin, - unicode-builtin, - xrange-builtin, - coerce-method, - delslice-method, - getslice-method, - setslice-method, - no-absolute-import, - old-division, - dict-iter-method, - dict-view-method, - next-method-called, - metaclass-assignment, - indexing-exception, - raising-string, - reload-builtin, - oct-method, - hex-method, - nonzero-method, - cmp-method, - input-builtin, - round-builtin, - intern-builtin, - unichr-builtin, - map-builtin-not-iterating, - zip-builtin-not-iterating, - range-builtin-not-iterating, - filter-builtin-not-iterating, - using-cmp-argument, - eq-without-hash, - div-method, - idiv-method, - rdiv-method, - exception-message-attribute, - invalid-str-codec, - sys-max-int, - bad-python3-import, - deprecated-string-function, - deprecated-str-translate-call, - deprecated-itertools-function, - deprecated-types-field, - next-method-defined, - dict-items-not-iterating, - dict-keys-not-iterating, - dict-values-not-iterating, - deprecated-operator-function, - deprecated-urllib-function, - xreadlines-attribute, - deprecated-sys-function, - exception-escape, - comprehension-escape, - bad-continuation, - duplicate-code, - redefined-outer-name, - missing-docstring, - too-many-instance-attributes, - too-few-public-methods, - redefined-builtin, - too-many-arguments, - no-self-use, - fixme, - broad-except, - bare-except, - too-many-public-methods, - cyclic-import, - too-many-locals, - too-many-function-args, - too-many-return-statements, - import-error, - no-name-in-module, - too-many-branches - -# Enable the message, report, category or checker with the given id(s). You can -# either give multiple identifier separated by comma (,) or put this option -# multiple time (only on the command line, not in the configuration file where -# it should appear only once). See also the "--disable" option for examples. -enable=c-extension-no-member - - -[REPORTS] - -# Python expression which should return a note less than 10 (10 is the highest -# note). You have access to the variables errors warning, statement which -# respectively contain the number of errors / warnings messages and the total -# number of statements analyzed. This is used by the global evaluation report -# (RP0004). -evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) - -# Template used to display messages. This is a python new-style format string -# used to format the message information. See doc for all details. -#msg-template= - -# Set the output format. Available formats are text, parseable, colorized, json -# and msvs (visual studio). You can also give a reporter class, e.g. -# mypackage.mymodule.MyReporterClass. -output-format=text - -# Tells whether to display a full report or only the messages. -reports=no - -# Activate the evaluation score. -score=yes - - -[REFACTORING] - -# Maximum number of nested blocks for function / method body -max-nested-blocks=5 - -# Complete name of functions that never returns. When checking for -# inconsistent-return-statements if a never returning function is called then -# it will be considered as an explicit return statement and no message will be -# printed. -never-returning-functions=sys.exit - - -[LOGGING] - -# Format style used to check logging format string. `old` means using % -# formatting, while `new` is for `{}` formatting. -logging-format-style=old - -# Logging modules to check that the string format arguments are in logging -# function parameter format. -logging-modules=logging - - -[SPELLING] - -# Limits count of emitted suggestions for spelling mistakes. -max-spelling-suggestions=4 - -# Spelling dictionary name. Available dictionaries: none. To make it working -# install python-enchant package.. -spelling-dict= - -# List of comma separated words that should not be checked. -spelling-ignore-words= - -# A path to a file that contains private dictionary; one word per line. -spelling-private-dict-file= - -# Tells whether to store unknown words to indicated private dictionary in -# --spelling-private-dict-file option instead of raising a message. -spelling-store-unknown-words=no - - -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=FIXME, - XXX, - TODO - - -[TYPECHECK] - -# List of decorators that produce context managers, such as -# contextlib.contextmanager. Add to this list to register other decorators that -# produce valid context managers. -contextmanager-decorators=contextlib.contextmanager - -# List of members which are set dynamically and missed by pylint inference -# system, and so shouldn't trigger E1101 when accessed. Python regular -# expressions are accepted. -generated-members= - -# Tells whether missing members accessed in mixin class should be ignored. A -# mixin class is detected if its name ends with "mixin" (case insensitive). -ignore-mixin-members=yes - -# Tells whether to warn about missing members when the owner of the attribute -# is inferred to be None. -ignore-none=yes - -# This flag controls whether pylint should warn about no-member and similar -# checks whenever an opaque object is returned when inferring. The inference -# can return multiple potential results while evaluating a Python object, but -# some branches might not be evaluated, which results in partial inference. In -# that case, it might be useful to still emit no-member and other checks for -# the rest of the inferred objects. -ignore-on-opaque-inference=yes - -# List of class names for which member attributes should not be checked (useful -# for classes with dynamically set attributes). This supports the use of -# qualified names. -ignored-classes=optparse.Values,thread._local,_thread._local - -# List of module names for which member attributes should not be checked -# (useful for modules/projects where namespaces are manipulated during runtime -# and thus existing member attributes cannot be deduced by static analysis. It -# supports qualified module names, as well as Unix pattern matching. -ignored-modules= - -# Show a hint with possible names when a member name was not found. The aspect -# of finding the hint is based on edit distance. -missing-member-hint=yes - -# The minimum edit distance a name should have in order to be considered a -# similar match for a missing member name. -missing-member-hint-distance=1 - -# The total number of similar names that should be taken in consideration when -# showing a hint for a missing member. -missing-member-max-choices=1 - - -[VARIABLES] - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid defining new builtins when possible. -additional-builtins= - -# Tells whether unused global variables should be treated as a violation. -allow-global-unused-variables=yes - -# List of strings which can identify a callback function by name. A callback -# name must start or end with one of those strings. -callbacks=cb_, - _cb - -# A regular expression matching the name of dummy variables (i.e. expected to -# not be used). -dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ - -# Argument names that match this expression will be ignored. Default to name -# with leading underscore. -ignored-argument-names=_.*|^ignored_|^unused_ - -# Tells whether we should check for unused import in __init__ files. -init-import=no - -# List of qualified module names which can have objects that can redefine -# builtins. -redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io - - -[FORMAT] - -# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. -expected-line-ending-format= - -# Regexp for a line that is allowed to be longer than the limit. -ignore-long-lines=^\s*(# )??$ - -# Number of spaces of indent required inside a hanging or continued line. -indent-after-paren=4 - -# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 -# tab). -indent-string=' ' - -# Maximum number of characters on a single line. -max-line-length=120 - -# Maximum number of lines in a module. -max-module-lines=1000 - -# List of optional constructs for which whitespace checking is disabled. `dict- -# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. -# `trailing-comma` allows a space between comma and closing bracket: (a, ). -# `empty-line` allows space-only lines. -no-space-check=trailing-comma, - dict-separator - -# Allow the body of a class to be on the same line as the declaration if body -# contains single statement. -single-line-class-stmt=no - -# Allow the body of an if to be on the same line as the test if there is no -# else. -single-line-if-stmt=no - - -[SIMILARITIES] - -# Ignore comments when computing similarities. -ignore-comments=yes - -# Ignore docstrings when computing similarities. -ignore-docstrings=yes - -# Ignore imports when computing similarities. -ignore-imports=no - -# Minimum lines number of a similarity. -min-similarity-lines=4 - - -[BASIC] - -# Naming style matching correct argument names. -argument-naming-style=snake_case - -# Regular expression matching correct argument names. Overrides argument- -# naming-style. -#argument-rgx= - -# Naming style matching correct attribute names. -attr-naming-style=snake_case - -# Regular expression matching correct attribute names. Overrides attr-naming- -# style. -#attr-rgx= - -# Bad variable names which should always be refused, separated by a comma. -bad-names=foo, - bar, - baz, - toto, - tutu, - tata - -# Naming style matching correct class attribute names. -class-attribute-naming-style=any - -# Regular expression matching correct class attribute names. Overrides class- -# attribute-naming-style. -#class-attribute-rgx= - -# Naming style matching correct class names. -class-naming-style=PascalCase - -# Regular expression matching correct class names. Overrides class-naming- -# style. -#class-rgx= - -# Naming style matching correct constant names. -const-naming-style=UPPER_CASE - -# Regular expression matching correct constant names. Overrides const-naming- -# style. -#const-rgx= - -# Minimum line length for functions/classes that require docstrings, shorter -# ones are exempt. -docstring-min-length=-1 - -# Naming style matching correct function names. -function-naming-style=snake_case - -# Regular expression matching correct function names. Overrides function- -# naming-style. -#function-rgx= - -# Good variable names which should always be accepted, separated by a comma. -good-names=i, - j, - k, - ex, - Run, - _ - -# Include a hint for the correct naming format with invalid-name. -include-naming-hint=no - -# Naming style matching correct inline iteration names. -inlinevar-naming-style=any - -# Regular expression matching correct inline iteration names. Overrides -# inlinevar-naming-style. -#inlinevar-rgx= - -# Naming style matching correct method names. -method-naming-style=snake_case - -# Regular expression matching correct method names. Overrides method-naming- -# style. -#method-rgx= - -# Naming style matching correct module names. -module-naming-style=snake_case - -# Regular expression matching correct module names. Overrides module-naming- -# style. -#module-rgx= - -# Colon-delimited sets of names that determine each other's naming style when -# the name regexes allow several styles. -name-group= - -# Regular expression which should only match function or class names that do -# not require a docstring. -no-docstring-rgx=^_ - -# List of decorators that produce properties, such as abc.abstractproperty. Add -# to this list to register other decorators that produce valid properties. -# These decorators are taken in consideration only for invalid-name. -property-classes=abc.abstractproperty - -# Naming style matching correct variable names. -variable-naming-style=snake_case - -# Regular expression matching correct variable names. Overrides variable- -# naming-style. -#variable-rgx= - - -[STRING] - -# This flag controls whether the implicit-str-concat-in-sequence should -# generate a warning on implicit string concatenation in sequences defined over -# several lines. -check-str-concat-over-line-jumps=no - - -[IMPORTS] - -# Allow wildcard imports from modules that define __all__. -allow-wildcard-with-all=no - -# Analyse import fallback blocks. This can be used to support both Python 2 and -# 3 compatible code, which means that the block might have code that exists -# only in one or another interpreter, leading to false positives when analysed. -analyse-fallback-blocks=no - -# Deprecated modules which should not be used, separated by a comma. -deprecated-modules=optparse,tkinter.tix - -# Create a graph of external dependencies in the given file (report RP0402 must -# not be disabled). -ext-import-graph= - -# Create a graph of every (i.e. internal and external) dependencies in the -# given file (report RP0402 must not be disabled). -import-graph= - -# Create a graph of internal dependencies in the given file (report RP0402 must -# not be disabled). -int-import-graph= - -# Force import order to recognize a module as part of the standard -# compatibility libraries. -known-standard-library= - -# Force import order to recognize a module as part of a third party library. -known-third-party=enchant - - -[CLASSES] - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__, - __new__, - setUp - -# List of member names, which should be excluded from the protected access -# warning. -exclude-protected=_asdict, - _fields, - _replace, - _source, - _make - -# List of valid names for the first argument in a class method. -valid-classmethod-first-arg=cls - -# List of valid names for the first argument in a metaclass class method. -valid-metaclass-classmethod-first-arg=cls - - -[DESIGN] - -# Maximum number of arguments for function / method. -max-args=5 - -# Maximum number of attributes for a class (see R0902). -max-attributes=7 - -# Maximum number of boolean expressions in an if statement. -max-bool-expr=5 - -# Maximum number of branch for function / method body. -max-branches=12 - -# Maximum number of locals for function / method body. -max-locals=15 - -# Maximum number of parents for a class (see R0901). -max-parents=7 - -# Maximum number of public methods for a class (see R0904). -max-public-methods=20 - -# Maximum number of return / yield for function / method body. -max-returns=6 - -# Maximum number of statements in function / method body. -max-statements=50 - -# Minimum number of public methods for a class (see R0903). -min-public-methods=2 - - -[EXCEPTIONS] - -# Exceptions that will emit a warning when being caught. Defaults to -# "BaseException, Exception". -overgeneral-exceptions=BaseException, - Exception diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/app.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/app.py deleted file mode 100644 index 354fe400a8..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/app.py +++ /dev/null @@ -1,176 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import os -from datetime import datetime -from http import HTTPStatus -from typing import Dict -from aiohttp import web -from aiohttp.web import Request, Response, json_response -from botbuilder.core import ( - BotFrameworkAdapterSettings, - ConversationState, - MemoryStorage, - TurnContext, -) -from botbuilder.core.skills import SkillHandler -from botbuilder.core.integration import ( - aiohttp_channel_service_routes, - aiohttp_error_middleware, -) -from botbuilder.integration.aiohttp.skills import SkillHttpClient -from botbuilder.schema import Activity -from botframework.connector.auth import ( - AuthenticationConfiguration, - SimpleCredentialProvider, -) -from authentication import AllowedCallersClaimsValidator -from bots import SkillBot -from config import DefaultConfig -from dialogs import ActivityRouterDialog -from dialogs.proactive import ContinuationParameters -from middleware import SsoSaveStateMiddleware -from skill_conversation_id_factory import SkillConversationIdFactory -from skill_adapter_with_error_handler import AdapterWithErrorHandler - -CONFIG = DefaultConfig() - -# Create MemoryStorage and ConversationState. -MEMORY = MemoryStorage() -CONVERSATION_STATE = ConversationState(MEMORY) - -# Create the conversationIdFactory. -CONVERSATION_ID_FACTORY = SkillConversationIdFactory(MEMORY) - -# Create the credential provider. -CREDENTIAL_PROVIDER = SimpleCredentialProvider(CONFIG.APP_ID, CONFIG.APP_PASSWORD) - -VALIDATOR = AllowedCallersClaimsValidator(CONFIG).claims_validator -AUTH_CONFIG = AuthenticationConfiguration(claims_validator=VALIDATOR) - -# Create adapter. -# See https://aka.ms/about-bot-adapter to learn more about how bots work. -SETTINGS = BotFrameworkAdapterSettings( - app_id=CONFIG.APP_ID, - app_password=CONFIG.APP_PASSWORD, - auth_configuration=AUTH_CONFIG, -) -ADAPTER = AdapterWithErrorHandler(SETTINGS, CONVERSATION_STATE) - -ADAPTER.use(SsoSaveStateMiddleware(CONVERSATION_STATE)) - -# Create the skill client. -SKILL_CLIENT = SkillHttpClient(CREDENTIAL_PROVIDER, CONVERSATION_ID_FACTORY) - -CONTINUATION_PARAMETERS_STORE: Dict[str, ContinuationParameters] = dict() - -# Create the main dialog. -DIALOG = ActivityRouterDialog( - configuration=CONFIG, - conversation_state=CONVERSATION_STATE, - conversation_id_factory=CONVERSATION_ID_FACTORY, - skill_client=SKILL_CLIENT, - continuation_parameters_store=CONTINUATION_PARAMETERS_STORE, -) - -# Create the bot that will handle incoming messages. -BOT = SkillBot(CONFIG, CONVERSATION_STATE, DIALOG) -SKILL_HANDLER = SkillHandler( - ADAPTER, BOT, CONVERSATION_ID_FACTORY, CREDENTIAL_PROVIDER, AUTH_CONFIG -) - -# Listen for incoming requests on /api/messages -async def messages(req: Request) -> Response: - # Main bot message handler. - if "application/json" in req.headers["Content-Type"]: - body = await req.json() - else: - return Response(status=HTTPStatus.UNSUPPORTED_MEDIA_TYPE) - - activity = Activity().deserialize(body) - auth_header = req.headers["Authorization"] if "Authorization" in req.headers else "" - - try: - website_hostname = os.getenv("WEBSITE_HOSTNAME") - if website_hostname: - CONFIG.SERVER_URL = f"https://{website_hostname}" - else: - CONFIG.SERVER_URL = f"{req.scheme}://{req.host}" - - response = await ADAPTER.process_activity(activity, auth_header, BOT.on_turn) - # DeliveryMode => Expected Replies - if response: - return json_response(data=response.body, status=response.status) - - # DeliveryMode => Normal - return Response(status=HTTPStatus.CREATED) - except Exception as exception: - raise exception - - -# Listen for incoming requests on /api/notify -async def notify(req: Request) -> Response: - error = "" - user = req.query.get("user") - - continuation_parameters = CONTINUATION_PARAMETERS_STORE.get(user) - - if not continuation_parameters: - return Response( - content_type="text/html", - status=HTTPStatus.OK, - body=f"

    No messages sent

    " - f"
    There are no conversations registered to receive proactive messages for { user }.", - ) - - try: - - async def callback(context: TurnContext): - await context.send_activity(f"Got proactive message for user: { user }") - await BOT.on_turn(context) - - await ADAPTER.continue_conversation( - continuation_parameters.conversation_reference, - callback, - CONFIG.APP_ID, - continuation_parameters.claims_identity, - continuation_parameters.oauth_scope, - ) - except Exception as err: - error = err - - return Response( - content_type="text/html", - status=HTTPStatus.OK, - body=f"

    Proactive messages have been sent

    " - f"
    Timestamp: { datetime.utcnow() }
    Exception: { error }", - ) - - -# Listen for incoming requests on /api/music -async def music(req: Request) -> web.FileResponse: # pylint: disable=unused-argument - file_path = os.path.join(os.getcwd(), "dialogs/cards/files/music.mp3") - return web.FileResponse(file_path) - - -APP = web.Application(middlewares=[aiohttp_error_middleware]) -APP.router.add_post("/api/messages", messages) -APP.router.add_routes(aiohttp_channel_service_routes(SKILL_HANDLER, "/api/skills")) - -# Simple way of exposing the manifest for dev purposes. -APP.router.add_static("/manifests", "./manifests/") - -# Simple way of exposing images folder. -APP.router.add_static("/images", "./images/") - -# Listen for incoming requests. -APP.router.add_get("/api/music", music) - -# Listen for incoming notifications and send proactive messages to users. -APP.router.add_get("/api/notify", notify) - -if __name__ == "__main__": - try: - web.run_app(APP, host="localhost", port=CONFIG.PORT) - except Exception as error: - raise error diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/authentication/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/authentication/__init__.py deleted file mode 100644 index b6383973c8..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/authentication/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from .allowed_callers_claims_validator import AllowedCallersClaimsValidator - -__all__ = ["AllowedCallersClaimsValidator"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/authentication/allowed_callers_claims_validator.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/authentication/allowed_callers_claims_validator.py deleted file mode 100644 index b2ca42c61f..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/authentication/allowed_callers_claims_validator.py +++ /dev/null @@ -1,50 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from typing import Awaitable, Callable, Dict, List -from botframework.connector.auth import JwtTokenValidation, SkillValidation -from config import DefaultConfig - - -class AllowedCallersClaimsValidator: - """ - Sample claims validator that loads an allowed list from configuration if present - and checks that requests are coming from allowed parent bots. - """ - - config_key = "ALLOWED_CALLERS" - - def __init__(self, config: DefaultConfig): - if not config: - raise TypeError( - "AllowedCallersClaimsValidator: config object cannot be None." - ) - - # AllowedCallers is the setting in the appsettings.json file - # that consists of the list of parent bot IDs that are allowed to access the skill. - # To add a new parent bot, simply edit the AllowedCallers and add - # the parent bot's Microsoft app ID to the list. - # In this sample, we allow all callers if AllowedCallers contains an "*". - caller_list = getattr(config, self.config_key) - if caller_list is None: - raise TypeError(f'"{self.config_key}" not found in configuration.') - self._allowed_callers = frozenset(caller_list) - - @property - def claims_validator(self) -> Callable[[List[Dict]], Awaitable]: - async def allow_callers_claims_validator(claims: Dict[str, object]): - # If _allowed_callers contains an "*", we allow all callers. - if "*" not in self._allowed_callers and SkillValidation.is_skill_claim( - claims - ): - # Check that the appId claim in the skill request is in the list of callers configured for this bot. - app_id = JwtTokenValidation.get_app_id_from_claims(claims) - if app_id not in self._allowed_callers: - raise PermissionError( - f'Received a request from a bot with an app ID of "{app_id}".' - f" To enable requests from this caller, add the app ID to your configuration file." - ) - - return - - return allow_callers_claims_validator diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/bots/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/bots/__init__.py deleted file mode 100644 index b58a3b0653..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/bots/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from .skill_bot import SkillBot - -__all__ = ["SkillBot"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/bots/skill_bot.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/bots/skill_bot.py deleted file mode 100644 index 542423fd3a..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/bots/skill_bot.py +++ /dev/null @@ -1,69 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from typing import List -from botbuilder.core import ( - ActivityHandler, - TurnContext, - ConversationState, -) -from botbuilder.dialogs import Dialog, DialogExtensions -from botbuilder.schema import Activity, ActivityTypes, ChannelAccount -from config import DefaultConfig - - -class SkillBot(ActivityHandler): - def __init__( - self, - config: DefaultConfig, - conversation_state: ConversationState, - dialog: Dialog, - ): - if config is None: - raise Exception("[SkillBot]: Missing parameter. config is required") - if conversation_state is None: - raise Exception( - "[SkillBot]: Missing parameter. conversation_state is required" - ) - if dialog is None: - raise Exception("[SkillBot]: Missing parameter. dialog is required") - - self.config = config - self.conversation_state = conversation_state - self.dialog = dialog - - async def on_turn(self, turn_context: TurnContext): - if turn_context.activity.type == ActivityTypes.conversation_update: - await super().on_turn(turn_context) - - else: - await DialogExtensions.run_dialog( - self.dialog, - turn_context, - self.conversation_state.create_property("DialogState"), - ) - - # Save any state changes that might have occurred during the turn. - await self.conversation_state.save_changes(turn_context) - - async def on_members_added_activity( - self, members_added: List[ChannelAccount], turn_context: TurnContext - ): - text = ( - "Welcome to the waterfall skill bot. \n\n" - "This is a skill, you will need to call it from another bot to use it." - ) - - for member in members_added: - if member.id != turn_context.activity.recipient.id: - await turn_context.send_activity( - Activity( - type=ActivityTypes.message, - text=text, - speak=text.replace("\n\n", ""), - ) - ) - await turn_context.send_activity( - f"You can check the skill manifest to see what it supports here: " - f"{self.config.SERVER_URL}/manifests/waterfallskillbot-manifest-1.0.json" - ) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/config.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/config.py deleted file mode 100644 index c688cb431d..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/config.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import os -from botbuilder.core.skills import BotFrameworkSkill -from dotenv import load_dotenv - -load_dotenv() - - -class DefaultConfig: - """ - Bot Configuration - """ - - SERVER_URL = "" # pylint: disable=invalid-name - PORT = os.getenv("Port", "37420") - APP_ID = os.getenv("MicrosoftAppId") - APP_PASSWORD = os.getenv("MicrosoftAppPassword") - CONNECTION_NAME = os.getenv("ConnectionName") - SSO_CONNECTION_NAME = os.getenv("SsoConnectionName") - CHANNEL_SERVICE = os.getenv("ChannelService") - SKILL_HOST_ENDPOINT = os.getenv("SkillHostEndpoint") - # If ALLOWED_CALLERS is empty, any bot can call this Skill. - # Add MicrosoftAppIds to restrict callers to only those specified. - # Example: - # os.getenv("AllowedCallers", ["54d3bb6a-3b6d-4ccd-bbfd-cad5c72fb53a", "3851a47b-53ed-4d29-b878-6e941da61e98"]) - ALLOWED_CALLERS = os.getenv("AllowedCallers") - ECHO_SKILL_INFO = BotFrameworkSkill( - id=os.getenv("EchoSkillInfo_id"), - app_id=os.getenv("EchoSkillInfo_appId"), - skill_endpoint=os.getenv("EchoSkillInfo_skillEndpoint"), - ) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/__init__.py deleted file mode 100644 index 80d6165e54..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from .activity_router_dialog import ActivityRouterDialog - -__all__ = ["ActivityRouterDialog"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/activity_router_dialog.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/activity_router_dialog.py deleted file mode 100644 index 1c38f4d7f2..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/activity_router_dialog.py +++ /dev/null @@ -1,166 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import json -from typing import Dict -from datetime import datetime - -from botbuilder.core import MessageFactory, ConversationState -from botbuilder.dialogs import ( - WaterfallDialog, - WaterfallStepContext, - DialogTurnResult, - DialogTurnStatus, - ComponentDialog, -) -from botbuilder.dialogs.skills import ( - SkillDialogOptions, - SkillDialog, - BeginSkillDialogOptions, -) -from botbuilder.schema import Activity, ActivityTypes, InputHints -from botbuilder.integration.aiohttp.skills import SkillHttpClient -from config import DefaultConfig -from skill_conversation_id_factory import SkillConversationIdFactory -from dialogs.cards import CardDialog -from dialogs.delete import DeleteDialog -from dialogs.proactive import WaitForProactiveDialog -from dialogs.message_with_attachment import MessageWithAttachmentDialog -from dialogs.auth import AuthDialog -from dialogs.sso import SsoSkillDialog -from dialogs.file_upload import FileUploadDialog -from dialogs.update import UpdateDialog - -ECHO_SKILL = "EchoSkill" - - -class ActivityRouterDialog(ComponentDialog): - def __init__( - self, - configuration: DefaultConfig, - conversation_state: ConversationState, - conversation_id_factory: SkillConversationIdFactory, - skill_client: SkillHttpClient, - continuation_parameters_store: Dict, - ): - super().__init__(ActivityRouterDialog.__name__) - - self.add_dialog(CardDialog(configuration)) - self.add_dialog(MessageWithAttachmentDialog(configuration)) - - self.add_dialog( - WaitForProactiveDialog(configuration, continuation_parameters_store) - ) - - self.add_dialog(AuthDialog(configuration)) - self.add_dialog(SsoSkillDialog(configuration)) - self.add_dialog(FileUploadDialog()) - self.add_dialog(DeleteDialog()) - self.add_dialog(UpdateDialog()) - - self.add_dialog( - self.create_echo_skill_dialog( - configuration, conversation_state, conversation_id_factory, skill_client - ) - ) - self.add_dialog( - WaterfallDialog(WaterfallDialog.__name__, [self.process_activity]) - ) - - self.initial_dialog_id = WaterfallDialog.__name__ - - def create_echo_skill_dialog( - self, - configuration: DefaultConfig, - conversation_state: ConversationState, - conversation_id_factory: SkillConversationIdFactory, - skill_client: SkillHttpClient, - ) -> SkillDialog: - if configuration.SKILL_HOST_ENDPOINT is None: - raise Exception("SkillHostEndpoint is not in configuration") - - if configuration.ECHO_SKILL_INFO is None: - raise Exception("EchoSkillInfo is not set in configuration") - - options = SkillDialogOptions( - bot_id=configuration.APP_ID, - conversation_id_factory=conversation_id_factory, - skill_client=skill_client, - skill_host_endpoint=configuration.SKILL_HOST_ENDPOINT, - conversation_state=conversation_state, - skill=configuration.ECHO_SKILL_INFO, - ) - - return SkillDialog(options, ECHO_SKILL) - - async def process_activity(self, step_context: WaterfallStepContext): - # A skill can send trace activities, if needed. - await step_context.context.send_activity( - Activity( - type=ActivityTypes.trace, - timestamp=datetime.utcnow(), - name="ActivityRouterDialog.process_activity()", - label=f"Got ActivityType: {step_context.context.activity.type}", - ) - ) - - if step_context.context.activity.type == ActivityTypes.event: - return await self.on_event_activity(step_context) - - # We didn't get an activity type we can handle. - await step_context.context.send_activity( - activity_or_text=f'Unrecognized ActivityType: "{step_context.context.activity.type}".', - input_hint=InputHints.ignoring_input, - ) - return DialogTurnResult(DialogTurnStatus.Complete) - - async def on_event_activity(self, step_context: WaterfallStepContext): - activity = step_context.context.activity - await step_context.context.send_activity( - Activity( - type=ActivityTypes.trace, - timestamp=datetime.utcnow(), - name="ActivityRouterDialog.on_event_activity()", - label=f"Name: {activity.name}. Value: {json.dumps(activity.value)}", - ) - ) - - if activity.name == "Cards": - return await step_context.begin_dialog(CardDialog.__name__) - - if activity.name == "Proactive": - return await step_context.begin_dialog(WaitForProactiveDialog.__name__) - - if activity.name == "MessageWithAttachment": - return await step_context.begin_dialog(MessageWithAttachmentDialog.__name__) - - if activity.name == "Auth": - return await step_context.begin_dialog(AuthDialog.__name__) - - if activity.name == "Sso": - return await step_context.begin_dialog(SsoSkillDialog.__name__) - - if activity.name == "FileUpload": - return await step_context.begin_dialog(FileUploadDialog.__name__) - - if activity.name == "Echo": - # Start the EchoSkillBot - message_activity = MessageFactory.text("I'm the echo skill bot") - message_activity.delivery_mode = activity.delivery_mode - dialog = await self.find_dialog(ECHO_SKILL) - return await step_context.begin_dialog( - dialog.id, BeginSkillDialogOptions(activity=message_activity) - ) - - if activity.name == "Delete": - return await step_context.begin_dialog(DeleteDialog.__name__) - - if activity.name == "Update": - return await step_context.begin_dialog(UpdateDialog.__name__) - - # We didn't get an event name we can handle. - await step_context.context.send_activity( - activity_or_text=f'Unrecognized EventName: "{step_context.context.activity.name}".', - input_hint=InputHints.ignoring_input, - ) - return DialogTurnResult(DialogTurnStatus.Complete) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/auth/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/auth/__init__.py deleted file mode 100644 index 938f3d16ea..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/auth/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from .auth_dialog import AuthDialog - -__all__ = ["AuthDialog"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/auth/auth_dialog.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/auth/auth_dialog.py deleted file mode 100644 index 2957371462..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/auth/auth_dialog.py +++ /dev/null @@ -1,106 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from botbuilder.core import MessageFactory -from botbuilder.dialogs import ( - WaterfallDialog, - WaterfallStepContext, - PromptOptions, - ComponentDialog, -) -from botbuilder.dialogs.prompts import OAuthPrompt, OAuthPromptSettings, ConfirmPrompt -from botbuilder.schema import InputHints -from config import DefaultConfig - - -class AuthDialog(ComponentDialog): - def __init__(self, configuration: DefaultConfig): - super().__init__(AuthDialog.__name__) - - self.connection_name = configuration.CONNECTION_NAME - - self.add_dialog(ConfirmPrompt(ConfirmPrompt.__name__)) - self.add_dialog( - OAuthPrompt( - OAuthPrompt.__name__, - OAuthPromptSettings( - connection_name=self.connection_name, - text=f"Please Sign In to connection: '{self.connection_name}'", - title="Sign In", - timeout=300000, # User has 5 minutes to login (1000 * 60 * 5) - ), - ) - ) - - self.add_dialog( - WaterfallDialog( - WaterfallDialog.__name__, - [ - self.prompt_step, - self.login_step, - self.display_token, - ], - ) - ) - - # The initial child Dialog to run. - self.initial_dialog_id = WaterfallDialog.__name__ - - async def prompt_step(self, step_context: WaterfallStepContext): - return await step_context.begin_dialog(OAuthPrompt.__name__) - - async def login_step(self, step_context: WaterfallStepContext): - # Get the token from the previous step. - token_response = step_context.result - - if token_response: - # Workaround, step_context.result value using DirectLine returns a 'dict' instead of TokenResponse - if isinstance(token_response, dict): - step_context.values["token"] = token_response.get("token") - else: - step_context.values["token"] = token_response.token - - # Show the token - logged_in_message = "You are now logged in." - await step_context.context.send_activity( - MessageFactory.text( - logged_in_message, logged_in_message, InputHints.ignoring_input - ) - ) - - options = PromptOptions( - prompt=MessageFactory.text("Would you like to view your token?") - ) - return await step_context.prompt(ConfirmPrompt.__name__, options) - - try_again_message = "Login was not successful please try again." - await step_context.context.send_activity( - MessageFactory.text( - try_again_message, try_again_message, InputHints.ignoring_input - ) - ) - return await step_context.replace_dialog(self.initial_dialog_id) - - async def display_token(self, step_context: WaterfallStepContext): - if step_context.result: - show_token_message = "Here is your token:" - await step_context.context.send_activity( - MessageFactory.text( - f'{show_token_message} {step_context.values["token"]}', - show_token_message, - InputHints.ignoring_input, - ) - ) - - # Sign out - await step_context.context.adapter.sign_out_user( - step_context.context, self.connection_name - ) - sign_out_message = "I have signed you out." - await step_context.context.send_activity( - MessageFactory.text( - sign_out_message, sign_out_message, InputHints.ignoring_input - ) - ) - - return await step_context.end_dialog() diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/__init__.py deleted file mode 100644 index 465fe91fee..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from .card_dialog import CardDialog -from .card_options import CardOptions -from .card_sample_helper import CardSampleHelper -from .channel_supported_cards import ChannelSupportedCards - -__all__ = ["CardDialog", "CardOptions", "CardSampleHelper", "ChannelSupportedCards"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_dialog.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_dialog.py deleted file mode 100644 index 519bc77fb7..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_dialog.py +++ /dev/null @@ -1,282 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import json - -from botbuilder.core import MessageFactory, CardFactory -from botbuilder.dialogs import ( - ComponentDialog, - DialogTurnResult, - DialogTurnStatus, - WaterfallDialog, - WaterfallStepContext, - Choice, - ListStyle, -) -from botbuilder.dialogs.prompts import ( - ChoicePrompt, - PromptOptions, - PromptValidatorContext, -) -from botbuilder.schema import ( - InputHints, - HeroCard, - CardAction, - ActionTypes, -) -from config import DefaultConfig -from dialogs.cards.card_options import CardOptions -from dialogs.cards.channel_supported_cards import ChannelSupportedCards -from dialogs.cards.card_sample_helper import CardSampleHelper - - -CORGI_ON_CAROUSEL_VIDEO = "https://www.youtube.com/watch?v=LvqzubPZjHE" -MIND_BLOWN_GIF = ( - "https://media3.giphy.com/media/xT0xeJpnrWC4XWblEk/giphy.gif?" - "cid=ecf05e47mye7k75sup6tcmadoom8p1q8u03a7g2p3f76upp9&rid=giphy.gif" -) -MUSIC_API = "api/music" -TEAMS_LOGO_FILE_NAME = "teams-logo.png" - - -class CardDialog(ComponentDialog): - def __init__(self, configuration: DefaultConfig): - super().__init__(CardDialog.__name__) - self.configuration = configuration - - self.add_dialog(ChoicePrompt(ChoicePrompt.__name__, self.card_prompt_validator)) - self.add_dialog( - WaterfallDialog( - WaterfallDialog.__name__, - [self.select_card_step, self.display_card_step], - ) - ) - - self.initial_dialog_id = WaterfallDialog.__name__ - - def make_update_hero_card(self, step_context: WaterfallStepContext): - hero_card = HeroCard(title="Newly updated card.", buttons=[]) - - data = step_context.context.activity.value - data["count"] = data["count"].value + 1 - hero_card.text = f"Update count - {data['count'].value}" - - hero_card.buttons.push( - CardAction( - type=ActionTypes.message_back, - title="Update Card", - text="UpdateCardAction", - value=data, - ) - ) - - return CardFactory.hero_card(hero_card) - - async def select_card_step(self, step_context: WaterfallStepContext): - # Create the PromptOptions from the skill configuration which contain the list of configured skills. - message_text = "What card do you want?" - reprompt_message_text = "This message will be created in the validation code" - - options = PromptOptions( - prompt=MessageFactory.text( - message_text, message_text, InputHints.expecting_input - ), - retry_prompt=MessageFactory.text( - reprompt_message_text, reprompt_message_text, InputHints.expecting_input - ), - choices=[Choice(card.value) for card in CardOptions], - style=ListStyle.list_style, - ) - - return await step_context.prompt(ChoicePrompt.__name__, options) - - async def display_card_step(self, step_context: WaterfallStepContext): - if step_context.context.activity.value is not None: - await self.handle_special_activity(step_context) - else: - # Check to see if the activity is an adaptive card or a bot action response - card_type = CardOptions(step_context.result.value) - - if ChannelSupportedCards.is_card_supported( - step_context.context.activity.channel_id, card_type - ): - if card_type == CardOptions.ADAPTIVE_CARD_BOT_ACTION: - await step_context.context.send_activity( - MessageFactory.attachment( - CardSampleHelper.create_adaptive_card_bot_action() - ) - ) - - elif card_type == CardOptions.ADAPTIVE_CARD_TEAMS_TASK_MODULE: - await step_context.context.send_activity( - MessageFactory.attachment( - CardSampleHelper.create_adaptive_card_task_module() - ) - ) - - elif card_type == CardOptions.ADAPTIVE_CARD_SUBMIT_ACTION: - await step_context.context.send_activity( - MessageFactory.attachment( - CardSampleHelper.create_adaptive_card_submit() - ) - ) - - elif card_type == CardOptions.HERO: - await step_context.context.send_activity( - MessageFactory.attachment(CardSampleHelper.create_hero_card()) - ) - - elif card_type == CardOptions.THUMBNAIL: - await step_context.context.send_activity( - MessageFactory.attachment( - CardSampleHelper.create_thumbnail_card() - ) - ) - - elif card_type == CardOptions.RECEIPT: - await step_context.context.send_activity( - MessageFactory.attachment( - CardSampleHelper.create_receipt_card() - ) - ) - - elif card_type == CardOptions.SIGN_IN: - await step_context.context.send_activity( - MessageFactory.attachment(CardSampleHelper.create_signin_card()) - ) - - elif card_type == CardOptions.CAROUSEL: - # NOTE if cards are NOT the same height in a carousel, - # Teams will instead display as AttachmentLayoutTypes.List - await step_context.context.send_activity( - MessageFactory.carousel( - [ - CardSampleHelper.create_hero_card(), - CardSampleHelper.create_hero_card(), - CardSampleHelper.create_hero_card(), - ] - ) - ) - - elif card_type == CardOptions.LIST: - await step_context.context.send_activity( - MessageFactory.list( - [ - CardSampleHelper.create_hero_card(), - CardSampleHelper.create_hero_card(), - CardSampleHelper.create_hero_card(), - ] - ) - ) - - elif card_type == CardOptions.O365: - await step_context.context.send_activity( - MessageFactory.attachment( - CardSampleHelper.create_o365_connector_card() - ) - ) - - elif card_type == CardOptions.TEAMS_FILE_CONSENT: - await step_context.context.send_activity( - MessageFactory.attachment( - CardSampleHelper.create_teams_file_consent_card( - TEAMS_LOGO_FILE_NAME - ) - ) - ) - - elif card_type == CardOptions.ANIMATION: - await step_context.context.send_activity( - MessageFactory.attachment( - CardSampleHelper.create_animation_card(MIND_BLOWN_GIF) - ) - ) - - elif card_type == CardOptions.AUDIO: - await step_context.context.send_activity( - MessageFactory.attachment( - CardSampleHelper.create_audio_card( - f"{self.configuration.SERVER_URL}/{MUSIC_API}" - ) - ) - ) - - elif card_type == CardOptions.VIDEO: - await step_context.context.send_activity( - MessageFactory.attachment( - CardSampleHelper.create_video_card(CORGI_ON_CAROUSEL_VIDEO) - ) - ) - - elif card_type == CardOptions.ADAPTIVE_UPDATE: - await step_context.context.send_activity( - MessageFactory.attachment( - CardSampleHelper.create_adaptive_update_card() - ) - ) - - elif card_type == CardOptions.END: - return DialogTurnResult(DialogTurnStatus.Complete) - - else: - await step_context.context.send_activity( - f"{card_type.value} cards are not supported in the " - f"{step_context.context.activity.channel_id} channel." - ) - - return await step_context.replace_dialog( - self.initial_dialog_id, "What card would you want?" - ) - - async def handle_special_activity(self, step_context: WaterfallStepContext): - if step_context.context.activity.text is None: - await step_context.context.send_activity( - MessageFactory.text( - f"I received an activity with this data in the value field {step_context.context.activity.value}" - ) - ) - else: - if "update" in step_context.context.activity.text.lower(): - if step_context.context.activity.reply_to_id is None: - await step_context.context.send_activity( - MessageFactory.text( - f"Update activity is not supported in the " - f"{step_context.context.activity.channel_id} channel" - ) - ) - else: - hero_card = self.make_update_hero_card(step_context) - - activity = MessageFactory.attachment(hero_card) - activity.id = step_context.context.activity.reply_to_id - - await step_context.context.update_activity(activity) - - else: - await step_context.context.send_activity( - MessageFactory.text( - f"I received an activity with this data in the text field {step_context.context.activity.text} " - f"and this data in the value field {step_context.context.activity.value}" - ) - ) - - @staticmethod - async def card_prompt_validator(prompt_context: PromptValidatorContext) -> bool: - if not prompt_context.recognized.succeeded: - # This checks to see if this response is the user clicking the update button on the card - if prompt_context.context.activity.value is not None: - return True - - if prompt_context.context.activity.attachments: - return True - - # Render the activity so we can assert in tests. - # We may need to simplify the json if it gets too complicated to test. - activity_json = json.dumps( - prompt_context.context.activity.__dict__, indent=4, default=str - ).replace("\n", "\r\n") - prompt_context.options.retry_prompt.text = ( - f"Got {activity_json}\n\n{prompt_context.options.prompt.text}" - ) - return False - return True diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_options.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_options.py deleted file mode 100644 index 99b98e5b66..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_options.py +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from enum import Enum - - -class CardOptions(str, Enum): - ADAPTIVE_CARD_BOT_ACTION = "AdaptiveCardBotAction" - ADAPTIVE_CARD_TEAMS_TASK_MODULE = "AdaptiveCardTeamsTaskModule" - ADAPTIVE_CARD_SUBMIT_ACTION = "AdaptiveCardSubmitAction" - HERO = "Hero" - THUMBNAIL = "Thumbnail" - RECEIPT = "Receipt" - SIGN_IN = "Signin" - CAROUSEL = "Carousel" - LIST = "List" - O365 = "O365" - TEAMS_FILE_CONSENT = "TeamsFileConsent" - ANIMATION = "Animation" - AUDIO = "Audio" - VIDEO = "Video" - ADAPTIVE_UPDATE = "AdaptiveUpdate" - END = "End" diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_sample_helper.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_sample_helper.py deleted file mode 100644 index 8ef19fe7ae..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/card_sample_helper.py +++ /dev/null @@ -1,557 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import os -from botbuilder.core import CardFactory -from botbuilder.schema.teams import ( - FileConsentCard, - O365ConnectorCard, - O365ConnectorCardActionCard, - O365ConnectorCardDateInput, - O365ConnectorCardFact, - O365ConnectorCardHttpPOST, - O365ConnectorCardImage, - O365ConnectorCardMultichoiceInput, - O365ConnectorCardMultichoiceInputChoice, - O365ConnectorCardOpenUri, - O365ConnectorCardOpenUriTarget, - O365ConnectorCardSection, - O365ConnectorCardTextInput, - O365ConnectorCardViewAction, -) -from botbuilder.schema import ( - ActionTypes, - Attachment, - AnimationCard, - AudioCard, - HeroCard, - VideoCard, - ReceiptCard, - SigninCard, - ThumbnailCard, - MediaUrl, - CardAction, - CardImage, - Fact, - ReceiptItem, -) -from botbuilder.schema.teams.additional_properties import ContentType - - -class CardSampleHelper: - @staticmethod - def create_adaptive_card_bot_action(): - return CardFactory.adaptive_card( - { - "type": "AdaptiveCard", - "version": "1.2", - "body": [ - { - "text": "Bot Builder actions", - "type": "TextBlock", - } - ], - "actions": [ - { - "type": "Action.Submit", - "title": "imBack", - "data": { - "msteams": { - "type": ActionTypes.im_back.value, - "value": "text", - } - }, - }, - { - "type": "Action.Submit", - "title": "message back", - "data": { - "msteams": { - "type": ActionTypes.message_back.value, - "value": {"key": "value"}, - } - }, - }, - { - "type": "Action.Submit", - "title": "message back local echo", - "data": { - "msteams": { - "type": ActionTypes.message_back.value, - "text": "text received by bots", - "displayText": "display text message back", - "value": {"key": "value"}, - } - }, - }, - { - "type": "Action.Submit", - "title": "invoke", - "data": { - "msteams": {"type": "invoke", "value": {"key": "value"}} - }, - }, - ], - } - ) - - @staticmethod - def create_adaptive_card_task_module(): - return CardFactory.adaptive_card( - { - "type": "AdaptiveCard", - "version": "1.2", - "body": [ - { - "type": "TextBlock", - "text": "Task Module Adaptive Card", - } - ], - "actions": [ - { - "type": "Action.Submit", - "title": "Launch Task Module", - "data": { - "msteams": { - "type": "invoke", - "value": '{\r\n "hiddenKey": ' - '"hidden value from task module launcher",\r\n "type": "task/fetch"\r\n}', - } - }, - } - ], - } - ) - - @staticmethod - def create_adaptive_card_submit(): - return CardFactory.adaptive_card( - { - "type": "AdaptiveCard", - "version": "1.2", - "body": [ - { - "type": "TextBlock", - "text": "Bot Builder actions", - }, - { - "type": "Input.Text", - "id": "x", - }, - ], - "actions": [ - { - "type": "Action.Submit", - "title": "Action.Submit", - "data": { - "key": "value", - }, - } - ], - } - ) - - @staticmethod - def create_adaptive_update_card() -> Attachment: - card = HeroCard(title="Update card", text="Update Card Action", buttons=[]) - - action = CardAction( - type=ActionTypes.message_back, - title="Update card title", - text="Update card text", - value={"count": 0}, - ) - - card.buttons.push(action) - - return CardFactory.hero_card(card) - - @staticmethod - def create_hero_card() -> Attachment: - card = HeroCard( - title="BotFramework Hero Card", - subtitle="Microsoft Bot Framework", - text="Build and connect intelligent bots to interact with your users naturally wherever they are, " - "from text/sms to Skype, Slack, Office 365 mail and other popular services.", - images=[ - CardImage( - url="https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/" - "buildreactionbotframework_960.jpg", - ) - ], - buttons=[ - CardAction( - type=ActionTypes.open_url, - title="Get Started", - value="https://docs.microsoft.com/bot-framework", - ) - ], - ) - return CardFactory.hero_card(card) - - @staticmethod - def create_thumbnail_card() -> Attachment: - card = ThumbnailCard( - title="BotFramework Thumbnail Card", - subtitle="Microsoft Bot Framework", - text="Build and connect intelligent bots to interact with your users naturally wherever they are, " - "from text/sms to Skype, Slack, Office 365 mail and other popular services.", - images=[ - CardImage( - url="https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/" - "buildreactionbotframework_960.jpg", - ) - ], - buttons=[ - CardAction( - type=ActionTypes.open_url, - title="Get Started", - value="https://docs.microsoft.com/bot-framework", - ) - ], - ) - return CardFactory.thumbnail_card(card) - - @staticmethod - def create_receipt_card() -> Attachment: - card = ReceiptCard( - title="John Doe", - facts=[ - Fact( - key="Order Number", - value="1234", - ), - Fact( - key="Payment Method", - value="VISA 5555-****", - ), - ], - items=[ - ReceiptItem( - title="Data Transfer", - image=CardImage( - url="https://github.com/amido/azure-vector-icons/raw/master/renders/traffic-manager.png", - ), - price="$ 38.45", - quantity="368", - ), - ReceiptItem( - title="App Service", - image=CardImage( - url="https://github.com/amido/azure-vector-icons/raw/master/renders/cloud-service.png", - ), - price="$ 45.00", - quantity="720", - ), - ], - total="$ 90.95", - tax="$ 7.50", - buttons=[ - CardAction( - type=ActionTypes.open_url, - title="More information", - image="https://account.windowsazure.com/content/6.10.1.38-.8225.160809-1618/aux-pre/" - "images/offer-icon-freetrial.png", - value="https://azure.microsoft.com/en-us/pricing/", - ) - ], - ) - return CardFactory.receipt_card(card) - - @staticmethod - def create_signin_card() -> Attachment: - card = SigninCard( - text="BotFramework Sign-in Card", - buttons=[ - CardAction( - type=ActionTypes.signin, - title="Sign-in", - value="https://login.microsoftonline.com/", - ) - ], - ) - - return CardFactory.signin_card(card) - - @staticmethod - def create_o365_connector_card() -> Attachment: - section = O365ConnectorCardSection( - title="**section title**", - text="section text", - activity_title="activity title", - activity_subtitle="activity subtitle", - activity_text="activity text", - activity_image="http://connectorsdemo.azurewebsites.net/images/MSC12_Oscar_002.jpg", - activity_image_type="avatar", - markdown=True, - facts=[ - O365ConnectorCardFact(name="Fact name 1", value="Fact value 1"), - O365ConnectorCardFact(name="Fact name 2", value="Fact value 2"), - ], - images=[ - O365ConnectorCardImage( - image="http://connectorsdemo.azurewebsites.net/images/" - "MicrosoftSurface_024_Cafe_OH-06315_VS_R1c.jpg", - title="image 1", - ), - O365ConnectorCardImage( - image="http://connectorsdemo.azurewebsites.net/images/WIN12_Scene_01.jpg", - title="image 2", - ), - O365ConnectorCardImage( - image="http://connectorsdemo.azurewebsites.net/images/WIN12_Anthony_02.jpg", - title="image 3", - ), - ], - ) - - action_card1 = O365ConnectorCardActionCard( - type="ActionCard", - name="Multiple Choice", - id="card-1", - inputs=[ - O365ConnectorCardMultichoiceInput( - type="MultichoiceInput", - id="list-1", - is_required=True, - title="Pick multiple options", - choices=[ - O365ConnectorCardMultichoiceInputChoice( - display="Choice 1", value="1" - ), - O365ConnectorCardMultichoiceInputChoice( - display="Choice 2", value="2" - ), - O365ConnectorCardMultichoiceInputChoice( - display="Choice 3", value="3" - ), - ], - style="expanded", - is_multi_select=True, - ), - O365ConnectorCardMultichoiceInput( - type="MultichoiceInput", - id="list-2", - is_required=True, - title="Pick multiple options", - choices=[ - O365ConnectorCardMultichoiceInputChoice( - display="Choice 4", value="4" - ), - O365ConnectorCardMultichoiceInputChoice( - display="Choice 5", value="5" - ), - O365ConnectorCardMultichoiceInputChoice( - display="Choice 6", value="6" - ), - ], - style="compact", - is_multi_select=True, - ), - O365ConnectorCardMultichoiceInput( - type="MultichoiceInput", - id="list-3", - is_required=False, - title="Pick an option", - choices=[ - O365ConnectorCardMultichoiceInputChoice( - display="Choice a", value="a" - ), - O365ConnectorCardMultichoiceInputChoice( - display="Choice b", value="b" - ), - O365ConnectorCardMultichoiceInputChoice( - display="Choice c", value="c" - ), - ], - style="expanded", - is_multi_select=False, - ), - O365ConnectorCardMultichoiceInput( - type="MultichoiceInput", - id="list-4", - is_required=False, - title="Pick an option", - choices=[ - O365ConnectorCardMultichoiceInputChoice( - display="Choice x", value="x" - ), - O365ConnectorCardMultichoiceInputChoice( - display="Choice y", value="y" - ), - O365ConnectorCardMultichoiceInputChoice( - display="Choice z", value="z" - ), - ], - style="compact", - is_multi_select=False, - ), - ], - actions=[ - O365ConnectorCardHttpPOST( - type="HttpPOST", - name="Send", - id="card-1-btn-1", - body='{"list1":"{{list-1.value}}", "list2":"{{list-2.value}}", ' - '"list3":"{{list-3.value}}", "list4":"{{list-4.value}}"}', - ) - ], - ) - - action_card2 = O365ConnectorCardActionCard( - type="ActionCard", - name="Text Input", - id="card-2", - inputs=[ - O365ConnectorCardTextInput( - type="TextInput", - id="text-1", - is_required=False, - title="multiline, no maxLength", - is_multiline=True, - ), - O365ConnectorCardTextInput( - type="TextInput", - id="text-2", - is_required=False, - title="single line, no maxLength", - is_multiline=False, - ), - O365ConnectorCardTextInput( - type="TextInput", - id="text-3", - is_required=True, - title="multiline, max len = 10, isRequired", - is_multiline=True, - max_length=10, - ), - O365ConnectorCardTextInput( - type="TextInput", - id="text-4", - is_required=True, - title="single line, max len = 10, isRequired", - is_multiline=False, - max_length=10, - ), - ], - actions=[ - O365ConnectorCardHttpPOST( - type="HttpPOST", - name="Send", - id="card-2-btn-1", - body='{"text1":"{{text-1.value}}", "text2":"{{text-2.value}}", ' - '"text3":"{{text-3.value}}", "text4":"{{text-4.value}}"}', - ) - ], - ) - - action_card3 = O365ConnectorCardActionCard( - type="ActionCard", - name="Date Input", - id="card-3", - inputs=[ - O365ConnectorCardDateInput( - type="DateInput", - id="date-1", - is_required=True, - title="date with time", - include_time=True, - ), - O365ConnectorCardDateInput( - type="DateInput", - id="date-2", - is_required=False, - title="date only", - include_time=False, - ), - ], - actions=[ - O365ConnectorCardHttpPOST( - type="HttpPOST", - name="Send", - id="card-3-btn-1", - body='{"date1":"{{date-1.value}}", "date2":"{{date-2.value}}"}', - ) - ], - ) - - card = O365ConnectorCard( - summary="O365 card summary", - theme_color="#E67A9E", - title="card title", - text="card text", - sections=[section], - potential_action=[ - action_card1, - action_card2, - action_card3, - O365ConnectorCardViewAction( - type="ViewAction", - name="View Action", - target=["http://microsoft.com"], - ), - O365ConnectorCardOpenUri( - type="OpenUri", - name="Open Uri", - id="open-uri", - targets=[ - O365ConnectorCardOpenUriTarget( - os="default", uri="http://microsoft.com" - ), - O365ConnectorCardOpenUriTarget( - os="iOS", uri="http://microsoft.com" - ), - O365ConnectorCardOpenUriTarget( - os="android", uri="http://microsoft.com" - ), - O365ConnectorCardOpenUriTarget( - os="windows", uri="http://microsoft.com" - ), - ], - ), - ], - ) - - return Attachment(content=card, content_type=ContentType.O365_CONNECTOR_CARD) - - @staticmethod - def create_teams_file_consent_card(file_name: str): - file_path = os.path.join(os.getcwd(), "Dialogs/Cards/Files", file_name) - file_size = os.path.getsize(file_path) - - consent_context = {{"filename", file_name}} - - file_card = FileConsentCard( - description="This is the file I want to send you", - size_in_bytes=file_size, - accept_context=consent_context, - decline_context=consent_context, - ) - - return Attachment( - content=file_card, - content_type=ContentType.FILE_CONSENT_CARD, - name=file_name, - ) - - @staticmethod - def create_animation_card(url: str) -> Attachment: - card = AnimationCard( - title="Animation Card", - media=[MediaUrl(url=url)], - autostart=True, - ) - return CardFactory.animation_card(card) - - @staticmethod - def create_audio_card(url: str) -> Attachment: - card = AudioCard(title="Audio Card", media=[MediaUrl(url=url)], autoloop=True) - return CardFactory.audio_card(card) - - @staticmethod - def create_video_card(url: str) -> Attachment: - card = VideoCard( - title="Video Card", - media=[MediaUrl(url=url)], - ) - return CardFactory.video_card(card) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/channel_supported_cards.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/channel_supported_cards.py deleted file mode 100644 index 13cbffa194..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/channel_supported_cards.py +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from botframework.connector import Channels - -from dialogs.cards.card_options import CardOptions - - -UNSUPPORTED_CHANNEL_CARDS = { - Channels.emulator.value: [ - CardOptions.ADAPTIVE_CARD_TEAMS_TASK_MODULE, - CardOptions.ADAPTIVE_UPDATE, - CardOptions.O365, - CardOptions.TEAMS_FILE_CONSENT, - ], - Channels.direct_line.value: [CardOptions.ADAPTIVE_UPDATE], - Channels.telegram.value: [ - CardOptions.ADAPTIVE_CARD_BOT_ACTION, - CardOptions.ADAPTIVE_CARD_TEAMS_TASK_MODULE, - CardOptions.ADAPTIVE_CARD_SUBMIT_ACTION, - CardOptions.LIST, - CardOptions.TEAMS_FILE_CONSENT, - ], -} - - -class ChannelSupportedCards: - @staticmethod - def is_card_supported(channel: str, card_type: CardOptions): - if channel in UNSUPPORTED_CHANNEL_CARDS: - if card_type in UNSUPPORTED_CHANNEL_CARDS[channel]: - return False - return True diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/files/buildreactionbotframework.jpg b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/files/buildreactionbotframework.jpg deleted file mode 100644 index f410fc137e4d78ef6934f7a06f7b0e50b7b45267..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65992 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
    g&!070;qVGiM2~tPU?r5EUS(_U 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
  • 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%0D`!{J7<*jP93$p#* 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 b7On43EM4=dB^(`JDI-si{pp%v_$nOfp(Kaus+ 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 z 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

    paC55m_>ryRNvbU22jABe5< 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.13.0 -botbuilder-dialogs>=4.13.0 -python-dotenv diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/skill_adapter_with_error_handler.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/skill_adapter_with_error_handler.py deleted file mode 100644 index ab2e30a88e..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/skill_adapter_with_error_handler.py +++ /dev/null @@ -1,103 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import sys -import traceback -from botbuilder.core import ( - BotFrameworkAdapter, - BotFrameworkAdapterSettings, - ConversationState, - MessageFactory, - TurnContext, -) -from botbuilder.schema import Activity, ActivityTypes, InputHints - - -class AdapterWithErrorHandler(BotFrameworkAdapter): - def __init__( - self, - settings: BotFrameworkAdapterSettings, - conversation_state: ConversationState, - ): - super().__init__(settings) - self.conversation_state = conversation_state - self.on_turn_error = self._handle_turn_error - - async def _handle_turn_error(self, context: TurnContext, error: Exception): - # This check writes out errors to console log - # NOTE: In production environment, you should consider logging this to Azure - # application insights. - print(f"\n [on_turn_error] unhandled error: {error}", file=sys.stderr) - traceback.print_exc() - await self._send_error_message(context, error) - await self._send_eoc_to_parent(context, error) - await self._clear_conversation_state(context) - - async def _send_error_message(self, context: TurnContext, error: Exception): - try: - exc_info = sys.exc_info() - stack = traceback.format_exception(*exc_info) - - # Send a message to the user. - error_message_text = "The skill encountered an error or bug." - error_message = MessageFactory.text( - f"{error_message_text}\r\n{error}\r\n{stack}", - error_message_text, - InputHints.ignoring_input, - ) - error_message.value = { "message": error, "stack": stack } - await context.send_activity(error_message) - - error_message_text = ( - "To continue to run this bot, please fix the bot source code." - ) - error_message = MessageFactory.text( - error_message_text, error_message_text, InputHints.ignoring_input - ) - await context.send_activity(error_message) - - # Send a trace activity, which will be displayed in the BotFramework Emulator. - # Note: we return the entire exception in the value property to help the developer; - # this should not be done in production. - await context.send_trace_activity( - label="TurnError", - name="on_turn_error Trace", - value=f"{error}", - value_type="https://www.botframework.com/schemas/error", - ) - except Exception as exception: - print( - f"\n Exception caught on _send_error_message : {exception}", - file=sys.stderr, - ) - traceback.print_exc() - - async def _send_eoc_to_parent(self, context: TurnContext, error: Exception): - try: - # Send an EndOfConversation activity to the skill caller with the error to end the conversation, - # and let the caller decide what to do. - end_of_conversation = Activity(type=ActivityTypes.end_of_conversation) - end_of_conversation.code = "SkillError" - end_of_conversation.text = str(error) - - await context.send_activity(end_of_conversation) - except Exception as exception: - print( - f"\n Exception caught on _send_eoc_to_parent : {exception}", - file=sys.stderr, - ) - traceback.print_exc() - - async def _clear_conversation_state(self, context: TurnContext): - if self.conversation_state: - try: - # Delete the conversationState for the current conversation to prevent the - # bot from getting stuck in a error-loop caused by being in a bad state. - # ConversationState should be thought of as similar to "cookie-state" for a Web page. - await self.conversation_state.delete(context) - except Exception as exception: - print( - f"\n Exception caught on _clear_conversation_state : {exception}", - file=sys.stderr, - ) - traceback.print_exc() diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/skill_conversation_id_factory.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/skill_conversation_id_factory.py deleted file mode 100644 index e10942db14..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/skill_conversation_id_factory.py +++ /dev/null @@ -1,75 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from typing import Union -from botbuilder.core import Storage, TurnContext -from botbuilder.core.skills import ( - ConversationIdFactoryBase, - SkillConversationIdFactoryOptions, - SkillConversationReference, -) -from botbuilder.schema import ConversationReference - - -class SkillConversationIdFactory(ConversationIdFactoryBase): - def __init__(self, storage: Storage): - if not storage: - raise TypeError("storage can't be None") - - self._storage = storage - - async def create_skill_conversation_id( - self, - options_or_conversation_reference: Union[ - SkillConversationIdFactoryOptions, ConversationReference - ], - ) -> str: - if not options_or_conversation_reference: - raise TypeError("Need options or conversation reference") - - if not isinstance( - options_or_conversation_reference, SkillConversationIdFactoryOptions - ): - raise TypeError( - "This SkillConversationIdFactory can only handle SkillConversationIdFactoryOptions" - ) - - options = options_or_conversation_reference - - # Create the storage key based on the SkillConversationIdFactoryOptions. - conversation_reference = TurnContext.get_conversation_reference( - options.activity - ) - skill_conversation_id = ( - f"{conversation_reference.conversation.id}" - f"-{options.bot_framework_skill.id}" - f"-{conversation_reference.channel_id}" - f"-skillconvo" - ) - - # Create the SkillConversationReference instance. - skill_conversation_reference = SkillConversationReference( - conversation_reference=conversation_reference, - oauth_scope=options.from_bot_oauth_scope, - ) - - # Store the SkillConversationReference using the skill_conversation_id as a key. - skill_conversation_info = {skill_conversation_id: skill_conversation_reference} - await self._storage.write(skill_conversation_info) - - # Return the generated skill_conversation_id (that will be also used as the conversation ID to call the skill). - return skill_conversation_id - - async def get_conversation_reference( - self, skill_conversation_id: str - ) -> Union[SkillConversationReference, ConversationReference]: - if not skill_conversation_id: - raise TypeError("skill_conversation_id can't be None") - - # Get the SkillConversationReference from storage for the given skill_conversation_id. - skill_conversation_info = await self._storage.read([skill_conversation_id]) - - return skill_conversation_info.get(skill_conversation_id) - - async def delete_conversation_reference(self, skill_conversation_id: str): - await self._storage.delete([skill_conversation_id]) diff --git a/tests/functional/build/yaml/cleanupResources/cleanupResources.yml b/tests/functional/build/yaml/cleanupResources/cleanupResources.yml index fb0fd3d206..a3d581b8c2 100644 --- a/tests/functional/build/yaml/cleanupResources/cleanupResources.yml +++ b/tests/functional/build/yaml/cleanupResources/cleanupResources.yml @@ -14,14 +14,13 @@ variables: # SharedResourceGroup: (optional) Name of the Resource Group containing the shared resources. ## Internal variables - InternalAppInsightsName: "bffnappinsights$($env:RESOURCESUFFIX)" - InternalAppServicePlanDotNetName: "bffnbotsappservicedotnet$($env:RESOURCESUFFIX)" - InternalAppServicePlanJSName: "bffnbotsappservicejs$($env:RESOURCESUFFIX)" - InternalAppServicePlanPythonName: "bffnbotsappservicepython$($env:RESOURCESUFFIX)" - InternalCosmosDBName: "bffnbotstatedb$($env:RESOURCESUFFIX)" - InternalKeyVaultName: "bffnbotkeyvault$($env:RESOURCESUFFIX)" - InternalBotResourceGroupName: $[coalesce(variables['DEPLOYRESOURCEGROUP'], 'bffnbots')] - InternalSharedResourceGroupName: $[coalesce(variables['SHAREDRESOURCEGROUP'], 'bffnshared')] + InternalAppInsightsName: "bfcfnappinsights$($env:RESOURCESUFFIX)" + InternalAppServicePlanDotNetName: "bfcfnbotsappservicedotnet$($env:RESOURCESUFFIX)" + InternalAppServicePlanJSName: "bfcfnbotsappservicejs$($env:RESOURCESUFFIX)" + InternalCosmosDBName: "bfcfnbotstatedb$($env:RESOURCESUFFIX)" + InternalKeyVaultName: "bfcfnbotkeyvault$($env:RESOURCESUFFIX)" + InternalBotResourceGroupName: $[coalesce(variables['DEPLOYRESOURCEGROUP'], 'bfcfnbots')] + InternalSharedResourceGroupName: $[coalesce(variables['SHAREDRESOURCEGROUP'], 'bfcfnshared')] pool: vmImage: "windows-2019" @@ -51,18 +50,6 @@ stages: azureSubscription: $(AZURESUBSCRIPTION) name: "$(INTERNALBOTRESOURCEGROUPNAME)-JS" -- stage: "Delete_Python_Resource_Group" - displayName: "Delete Python's Resource Group" - dependsOn: [] - jobs: - - job: "Delete" - displayName: "Delete steps" - steps: - - template: ../common/deleteResourceGroup.yml - parameters: - azureSubscription: $(AZURESUBSCRIPTION) - name: "$(INTERNALBOTRESOURCEGROUPNAME)-Python" - - stage: "Delete_App_Service_Plan_DotNet" displayName: "Delete App Service Plan (DotNet)" dependsOn: @@ -111,30 +98,6 @@ stages: Write-Host "No pre-existing $(INTERNALAPPSERVICEPLANJSNAME) resource found." } -- stage: "Delete_App_Service_Plan_Python" - displayName: "Delete App Service Plan (Python)" - dependsOn: - - Delete_Python_Resource_Group - jobs: - - job: "Delete" - displayName: "Delete steps" - steps: - - task: AzureCLI@2 - displayName: "Delete App Service Plan (Python)" - inputs: - azureSubscription: $(AZURESUBSCRIPTION) - scriptType: pscore - scriptLocation: inlineScript - inlineScript: | - Write-Host "Looking for $(INTERNALAPPSERVICEPLANPYTHONNAME)..." - $exists = az appservice plan show --name "$(INTERNALAPPSERVICEPLANPYTHONNAME)" --resource-group "$(INTERNALSHAREDRESOURCEGROUPNAME)-linux" - if ($exists) { - Write-Host "Deleting $(INTERNALAPPSERVICEPLANPYTHONNAME)..." - az appservice plan delete --name "$(INTERNALAPPSERVICEPLANPYTHONNAME)" --resource-group "$(INTERNALSHAREDRESOURCEGROUPNAME)-linux" --yes - } else { - Write-Host "No pre-existing $(INTERNALAPPSERVICEPLANPYTHONNAME) resource found." - } - - stage: "Delete_App_Registrations" displayName: "Delete App Registrations" dependsOn: [] @@ -245,17 +208,4 @@ stages: azureSubscription: $(AZURESUBSCRIPTION) name: "$(INTERNALSHAREDRESOURCEGROUPNAME)" -- stage: "Delete_Resource_Group_Linux" - displayName: "Delete Resource Group (Linux)" - dependsOn: - - Delete_Python_Resource_Group - - Delete_App_Service_Plan_Python - jobs: - - job: "Delete" - displayName: "Delete Resource Group (Linux)" - steps: - - template: ../common/deleteResourceGroup.yml - parameters: - azureSubscription: $(AZURESUBSCRIPTION) - name: "$(INTERNALSHAREDRESOURCEGROUPNAME)-linux" diff --git a/tests/functional/build/yaml/deployBotResources/deployBotResources.yml b/tests/functional/build/yaml/deployBotResources/deployBotResources.yml index 61f31b8c58..6fd01cd5fa 100644 --- a/tests/functional/build/yaml/deployBotResources/deployBotResources.yml +++ b/tests/functional/build/yaml/deployBotResources/deployBotResources.yml @@ -24,33 +24,6 @@ parameters: - MyGet - NuGet - - name: dependenciesVersionDotNetSkills - displayName: DotNet Skills Version - type: string - default: $env:DEPENDENCIESVERSIONDOTNETSKILLS - - - name: dependenciesRegistryDotNetSkills - displayName: DotNet Skills Registry - type: string - default: Artifacts - values: - - Artifacts - - MyGet - - NuGet - - - name: dependenciesVersionDotNetSkillsV3 - displayName: DotNet Skills V3 Version - type: string - default: $env:DEPENDENCIESVERSIONDOTNETSKILLSV3 - - - name: dependenciesRegistryDotNetSkillsV3 - displayName: DotNet Skills V3 Registry - type: string - default: MyGet - values: - - MyGet - - NuGet - - name: dependenciesVersionJSHosts displayName: JS Hosts Version type: string @@ -64,60 +37,6 @@ parameters: - MyGet - Npm - - name: dependenciesVersionJSSkills - displayName: JS Skills Version - type: string - default: $env:DEPENDENCIESVERSIONJSSKILLS - - - name: dependenciesRegistryJSSkills - displayName: JS Skills Registry - type: string - default: MyGet - values: - - MyGet - - Npm - - - name: dependenciesVersionJSSkillsV3 - displayName: JS Skills V3 Version - type: string - default: $env:DEPENDENCIESVERSIONJSSKILLSV3 - - - name: dependenciesRegistryJSSkillsV3 - displayName: JS Skills V3 Registry - type: string - default: MyGet - values: - - MyGet - - Npm - - - name: dependenciesVersionPythonHosts - displayName: Python Hosts Version - type: string - default: $env:DEPENDENCIESVERSIONPYTHONHOSTS - - - name: dependenciesRegistryPythonHosts - displayName: Python Hosts Registry - type: string - default: Artifacts - values: - - Artifacts - - Pypi - - Test.Pypi - - - name: dependenciesVersionPythonSkills - displayName: Python Skills Version - type: string - default: $env:DEPENDENCIESVERSIONPYTHONSKILLS - - - name: dependenciesRegistryPythonSkills - displayName: Python Skills Registry - type: string - default: Artifacts - values: - - Artifacts - - Pypi - - Test.Pypi - variables: BuildConfiguration: "Debug" BuildPlatform: "AnyCPU" @@ -127,69 +46,32 @@ variables: # AppServicePlanGroupLinux: (optional) Name of the Resource Group where the Linux App Service Plan is located. # AppServicePlanDotNetName: (optional) Name of the DotNet App Service Plan. # AppServicePlanJSName: (optional) Name of the JavaScript App Service Plan. - # AppServicePlanPythonName: (optional) Name of the Python App Service Plan. # BotPricingTier: (optional) Pricing Tier for the bots, default F0. # ResourceGroup: (optional) Name of the Resource Group where the bots will be deployed. # ResourceSuffix: (optional) Suffix to add to the resources' name to avoid collitions. ## Bots Configuration (Define these variables in Azure) - # BffnEchoSkillBotComposerDotNetAppId: (optional) App Id for BffnEchoSkillBotComposerDotNet bot. - # BffnEchoSkillBotComposerDotNetAppSecret: (optional) App Secret for BffnEchoSkillBotComposerDotNet bot. - # BffnEchoSkillBotDotNet21AppId: (optional) App Id for BffnEchoSkillBotDotNet21 bot. - # BffnEchoSkillBotDotNet21AppSecret: (optional) App Secret for BffnEchoSkillBotDotNet21 bot. - # BffnEchoSkillBotDotNetAppId: (optional) App Id for BffnEchoSkillBotDotNet bot. - # BffnEchoSkillBotDotNetAppSecret: (optional) App Secret for BffnEchoSkillBotDotNet bot. - # BffnEchoSkillBotDotNetV3AppId: (optional) App Id for BffnEchoSkillBotDotNetV3 bot. - # BffnEchoSkillBotDotNetV3AppSecret: (optional) App Secret for BffnEchoSkillBotDotNetV3 bot. - # BffnEchoSkillBotJSAppId: (optional) App Id for BffnEchoSkillBotJS bot. - # BffnEchoSkillBotJSAppSecret: (optional) App Secret for BffnEchoSkillBotJS bot. - # BffnEchoSkillBotJSV3AppId: (optional) App Id for BffnEchoSkillBotJSV3 bot. - # BffnEchoSkillBotJSV3AppSecret: (optional) App Secret for BffnEchoSkillBotJSV3 bot. - # BffnEchoSkillBotPythonAppId: (optional) App Id for BffnEchoSkillBotPython bot. - # BffnEchoSkillBotPythonAppSecret: (optional) App Secret for BffnEchoSkillBotPython bot. - # BffnSimpleHostBotComposerDotNetAppId: (optional) App Id for BffnSimpleHostBotComposerDotNet bot. - # BffnSimpleHostBotComposerDotNetAppSecret: (optional) App Secret for BffnSimpleHostBotComposerDotNet bot. - # BffnSimpleHostBotDotNet21AppId: (optional) App Id for BffnSimpleHostBotDotNet21 bot. - # BffnSimpleHostBotDotNet21AppSecret: (optional) App Secret for BffnSimpleHostBotDotNet21 bot. - # BffnSimpleHostBotDotNetAppId: (optional) App Id for BffnSimpleHostBotDotNet bot. - # BffnSimpleHostBotDotNetAppSecret: (optional) App Secret for BffnSimpleHostBotDotNet bot. - # BffnSimpleHostBotJSAppId: (optional) App Id for BffnSimpleHostBotJS bot. - # BffnSimpleHostBotJSAppSecret: (optional) App Secret for BffnSimpleHostBotJS bot. - # BffnSimpleHostBotPythonAppId: (optional) App Id for BffnSimpleHostBotPython bot. - # BffnSimpleHostBotPythonAppSecret: (optional) App Secret for BffnSimpleHostBotPython bot. - # BffnWaterfallHostBotDotNetAppId: (optional) App Id for BffnWaterfallHostBotDotNet bot. - # BffnWaterfallHostBotDotNetAppSecret: (optional) App Secret for BffnWaterfallHostBotDotNet bot. - # BffnWaterfallSkillBotDotNetAppId: (optional) App Id for BffnWaterfallSkillBotDotNet bot. - # BffnWaterfallSkillBotDotNetAppSecret: (optional) App Secret for BffnWaterfallSkillBotDotNet bot. - # BffnWaterfallHostBotJSAppId: (optional) App Id for BffnWaterfallHostBotJS bot. - # BffnWaterfallHostBotJSAppSecret: (optional) App Secret for BffnWaterfallHostBotJS bot. - # BffnWaterfallSkillBotJSAppId: (optional) App Id for BffnWaterfallSkillBotJS bot. - # BffnWaterfallSkillBotJSAppSecret: (optional) App Secret for BffnWaterfallSkillBotJS bot. - # BffnWaterfallHostBotPythonAppId: (optional) App Id for BffnWaterfallHostBotPython bot. - # BffnWaterfallHostBotPythonAppSecret: (optional) App Secret for BffnWaterfallHostBotPython bot. - # BffnWaterfallSkillBotPythonAppId: (optional) App Id for BffnWaterfallSkillBotPython bot. - # BffnWaterfallSkillBotPythonAppSecret: (optional) App Secret for BffnWaterfallSkillBotPython bot. + # BfcfnEmptyBotDotNetWebAppId: (optional) App Id for BfcfnEmptyBotDotNetWebApp bot. + # BfcfnEmptyBotDotNetWebAppSecret: (optional) App Secret for BfcfnEmptyBotDotNetWebApp bot. + # BfcfnEmptyBotDotNetFunctionsId: (optional) App Id for BfcfnEmptyBotDotNetFunctions bot. + # BfcfnEmptyBotDotNetFunctionsSecret: (optional) App Secret for BfcfnEmptyBotDotNetFunctions bot. + # BfcfnEmptyBotJSWebAppId: (optional) App Id for BfcfnEmptyBotJSWebApp bot. + # BfcfnEmptyBotJSWebAppSecret: (optional) App Secret for BfcfnEmptyBotJSWebApp bot. + # BfcfnEmptyBotJSFunctionsId: (optional) App Id for BfcfnEmptyBotJSFunctions bot. + # BfcfnEmptyBotJSFunctionsSecret: (optional) App Secret for BfcfnEmptyBotJSFunctions bot. # ConnectionName: (optional) Name for the OAuth connection to use in the skill bots. ## DependenciesVersion (Define these variables in Azure) Possible values are: Latest (default), Stable, or specific version numbers. # DependenciesVersionDotNetHosts: (optional) Bot Builder dependency version to use for DotNet host bots. - # DependenciesVersionDotNetSkills: (optional) Bot Builder dependency version to use for DotNet skill bots. - # DependenciesVersionDotNetSkillsV3: (optional) Bot Builder dependency version to use for DotNet skill V3 bots. - # DependenciesVersionJSHosts: (optional) Bot Builder dependency version to use for JS host bots. - # DependenciesVersionJSSkills: (optional) Bot Builder dependency version to use for JS skill bots. - # DependenciesVersionJSSkillsV3: (optional) Bot Builder dependency version to use for JS skill V3 bots. - # DependenciesVersionPythonHosts: (optional) Bot Builder dependency version to use for Python host bots. - # DependenciesVersionPythonSkills: (optional) Bot Builder dependency version to use for Python skill bots. ## Internal variables - InternalAppInsightsName: 'bffnappinsights$(INTERNALRESOURCESUFFIX)' - InternalAppServicePlanWindowsResourceGroup: $[coalesce(variables['APPSERVICEPLANGROUP'], 'bffnshared')] - InternalAppServicePlanLinuxResourceGroup: $[coalesce(variables['APPSERVICEPLANGROUPLINUX'], 'bffnshared-linux')] - InternalAppServicePlanDotNetName: $[coalesce(variables['APPSERVICEPLANDOTNETNAME'], 'bffnbotsappservicedotnet$(INTERNALRESOURCESUFFIX)')] - InternalAppServicePlanJSName: $[coalesce(variables['APPSERVICEPLANJSNAME'], 'bffnbotsappservicejs$(INTERNALRESOURCESUFFIX)')] - InternalAppServicePlanPythonName: $[coalesce(variables['APPSERVICEPLANPYTHONNAME'], 'bffnbotsappservicepython$(INTERNALRESOURCESUFFIX)')] - InternalKeyVaultName: 'bffnbotkeyvault$(INTERNALRESOURCESUFFIX)' - InternalResourceGroupName: $[coalesce(variables['RESOURCEGROUP'], 'bffnbots')] + InternalAppInsightsName: 'bfcfnappinsights$(INTERNALRESOURCESUFFIX)' + InternalAppServicePlanWindowsResourceGroup: $[coalesce(variables['APPSERVICEPLANGROUP'], 'bfcfnshared')] + InternalAppServicePlanLinuxResourceGroup: $[coalesce(variables['APPSERVICEPLANGROUPLINUX'], 'bfcfnshared-linux')] + InternalAppServicePlanDotNetName: $[coalesce(variables['APPSERVICEPLANDOTNETNAME'], 'bfcfnbotsappservicedotnet$(INTERNALRESOURCESUFFIX)')] + InternalAppServicePlanJSName: $[coalesce(variables['APPSERVICEPLANJSNAME'], 'bfcfnbotsappservicejs$(INTERNALRESOURCESUFFIX)')] + InternalKeyVaultName: 'bfcfnbotkeyvault$(INTERNALRESOURCESUFFIX)' + InternalResourceGroupName: $[coalesce(variables['RESOURCEGROUP'], 'bfcfnbots')] InternalResourceSuffix: $[coalesce(variables['RESOURCESUFFIX'], '')] stages: @@ -204,11 +86,7 @@ stages: - id: "Prepare_JSGroup" name: "$(INTERNALRESOURCEGROUPNAME)-JS" - displayName: "Prepare JS's Resource Group" - - - id: "Prepare_PythonGroup" - name: "$(INTERNALRESOURCEGROUPNAME)-Python" - displayName: "Prepare Python's Resource Group" + displayName: "Prepare JS's Resource Group" # DotNet - template: dotnet/deploy.yml @@ -223,143 +101,34 @@ stages: resourceGroup: "$(INTERNALRESOURCEGROUPNAME)-DotNet" resourceSuffix: $(INTERNALRESOURCESUFFIX) bots: - - name: "bffnsimplehostbotdotnet" + - name: "bfcfnemptybotdotnetwebapp" dependsOn: "Prepare_DotNetGroup" type: "Host" - displayName: "DotNet Simple Host Bot" - appId: $(BFFNSIMPLEHOSTBOTDOTNETAPPID) - appSecret: $(BFFNSIMPLEHOSTBOTDOTNETAPPSECRET) + displayName: "DotNet Web App Empty Bot" + appId: $(BFCFNEMPTYBOTDOTNETWEBAPPID) + appSecret: $(BFCFNEMPTYBOTDOTNETWEBAPPSECRET) project: - directory: 'Bots/DotNet/Consumers/CodeFirst/SimpleHostBot' + directory: 'Tests/Functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot' name: "SimpleHostBot.csproj" netCoreVersion: "3.1.x" dependency: registry: ${{ parameters.dependenciesRegistryDotNetHosts }} version: ${{ parameters.dependenciesVersionDotNetHosts }} - - name: "bffnsimplehostbotdotnet21" - dependsOn: "Prepare_DotNetGroup" - type: "Host" - displayName: "DotNet Simple Host Bot 2.1" - appId: $(BFFNSIMPLEHOSTBOTDOTNET21APPID) - appSecret: $(BFFNSIMPLEHOSTBOTDOTNET21APPSECRET) - project: - directory: 'Bots/DotNet/Consumers/CodeFirst/SimpleHostBot-2.1' - name: "SimpleHostBot-2.1.csproj" - netCoreVersion: "2.1.x" - dependency: - registry: ${{ parameters.dependenciesRegistryDotNetHosts }} - version: ${{ parameters.dependenciesVersionDotNetHosts }} - - - name: "bffnechoskillbotdotnet" - dependsOn: "Prepare_DotNetGroup" - type: "Skill" - displayName: "DotNet Echo Skill Bot" - appId: $(BFFNECHOSKILLBOTDOTNETAPPID) - appSecret: $(BFFNECHOSKILLBOTDOTNETAPPSECRET) - project: - directory: 'Bots/DotNet/Skills/CodeFirst/EchoSkillBot' - name: "EchoSkillBot.csproj" - netCoreVersion: "3.1.x" - dependency: - registry: ${{ parameters.dependenciesRegistryDotNetSkills }} - version: ${{ parameters.dependenciesVersionDotNetSkills }} - - - name: "bffnechoskillbotdotnet21" + - name: "bfcfnemptybotdotnetfunctions" dependsOn: "Prepare_DotNetGroup" - type: "Skill" - displayName: "DotNet Echo Skill Bot 2.1" - appId: $(BFFNECHOSKILLBOTDOTNET21APPID) - appSecret: $(BFFNECHOSKILLBOTDOTNET21APPSECRET) - project: - directory: 'Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1' - name: "EchoSkillBot-2.1.csproj" - netCoreVersion: "2.1.x" - dependency: - registry: ${{ parameters.dependenciesRegistryDotNetSkills }} - version: ${{ parameters.dependenciesVersionDotNetSkills }} - - - name: "bffnechoskillbotdotnetv3" - dependsOn: "Prepare_DotNetGroup" - type: "SkillV3" - displayName: "DotNet Echo Skill Bot v3" - appId: $(BFFNECHOSKILLBOTDOTNETV3APPID) - appSecret: $(BFFNECHOSKILLBOTDOTNETV3APPSECRET) - project: - directory: 'Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3' - name: "EchoSkillBot-v3.csproj" - dependency: - registry: ${{ parameters.dependenciesRegistryDotNetSkillsV3 }} - version: ${{ parameters.dependenciesVersionDotNetSkillsV3 }} - - - name: "bffnwaterfallhostbotdotnet" - dependsOn: "Deploy_bffnsimplehostbotdotnet" type: "Host" - displayName: "DotNet Waterfall Host Bot" - appId: $(BFFNWATERFALLHOSTBOTDOTNETAPPID) - appSecret: $(BFFNWATERFALLHOSTBOTDOTNETAPPSECRET) + displayName: "DotNet Functions Empty Bot" + appId: $(BFCFNEMPTYBOTDOTNETFUNCTIONSID) + appSecret: $(BFCFNEMPTYBOTDOTNETFUNCTIONSSECRET) project: - directory: 'Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot' - name: "WaterfallHostBot.csproj" - netCoreVersion: "3.1.x" - dependency: - registry: ${{ parameters.dependenciesRegistryDotNetHosts }} - version: ${{ parameters.dependenciesVersionDotNetHosts }} - - - name: "bffnwaterfallskillbotdotnet" - dependsOn: "Deploy_bffnsimplehostbotdotnet21" - type: "Skill" - displayName: "DotNet Waterfall Skill Bot" - appId: $(BFFNWATERFALLSKILLBOTDOTNETAPPID) - appSecret: $(BFFNWATERFALLSKILLBOTDOTNETAPPSECRET) - project: - directory: 'Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot' - name: "WaterfallSkillBot.csproj" - netCoreVersion: "3.1.x" - dependency: - registry: ${{ parameters.dependenciesRegistryDotNetSkills }} - version: ${{ parameters.dependenciesVersionDotNetSkills }} - -# DotNet Composer - - template: dotnet/deployComposer.yml - parameters: - appInsight: "$(INTERNALAPPINSIGHTSNAME)" - appServicePlan: "$(INTERNALAPPSERVICEPLANDOTNETNAME)" - appServicePlanRG: "$(INTERNALAPPSERVICEPLANWINDOWSRESOURCEGROUP)" - azureSubscription: "$(AZURESUBSCRIPTION)" - botPricingTier: $env:BOTPRICINGTIER - keyVault: "$(INTERNALKEYVAULTNAME)" - resourceGroup: "$(INTERNALRESOURCEGROUPNAME)-DotNet" - resourceSuffix: $(INTERNALRESOURCESUFFIX) - bots: - - name: "bffnsimplehostbotcomposerdotnet" - dependsOn: "Deploy_bffnechoskillbotdotnet" - type: "Host" - displayName: "DotNet Simple Composer Host Bot" - appId: $(BFFNSIMPLEHOSTBOTCOMPOSERDOTNETAPPID) - appSecret: $(BFFNSIMPLEHOSTBOTCOMPOSERDOTNETAPPSECRET) - project: - directory: 'Bots/DotNet/Consumers/Composer/SimpleHostBotComposer' - name: "SimpleHostBotComposer.csproj" + directory: 'Tests/Functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot' + name: "SimpleHostBot.csproj" netCoreVersion: "3.1.x" dependency: registry: ${{ parameters.dependenciesRegistryDotNetHosts }} version: ${{ parameters.dependenciesVersionDotNetHosts }} - - name: "bffnechoskillbotcomposerdotnet" - dependsOn: "Deploy_bffnechoskillbotdotnet21" - type: "Skill" - displayName: "DotNet Echo Composer Skill Bot" - appId: $(BFFNECHOSKILLBOTCOMPOSERDOTNETAPPID) - appSecret: $(BFFNECHOSKILLBOTCOMPOSERDOTNETAPPSECRET) - project: - directory: 'Bots/DotNet/Skills/Composer/EchoSkillBotComposer' - name: "EchoSkillBotComposer.csproj" - netCoreVersion: "3.1.x" - dependency: - registry: ${{ parameters.dependenciesRegistryDotNetSkills }} - version: ${{ parameters.dependenciesVersionDotNetSkills }} - # JS - template: js/deploy.yml parameters: @@ -374,118 +143,28 @@ stages: resourceGroup: "$(INTERNALRESOURCEGROUPNAME)-JS" resourceSuffix: $(INTERNALRESOURCESUFFIX) bots: - - name: "bffnsimplehostbotjs" + - name: "bfcfnemptybotjswebapp" type: "Host" - displayName: "JS Simple Host Bot" - appId: $(BFFNSIMPLEHOSTBOTJSAPPID) - appSecret: $(BFFNSIMPLEHOSTBOTJSAPPSECRET) + displayName: "JS Web App Empty Bot" + appId: $(BFCFNEMPTYBOTJSWEBAPPID) + appSecret: $(BFCFNEMPTYBOTJSWEBAPPSECRET) project: - directory: 'Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot' + directory: 'Tests/Functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot' dependency: registry: ${{ parameters.dependenciesRegistryJSHosts }} version: ${{ parameters.dependenciesVersionJSHosts }} - - name: "bffnechoskillbotjs" - type: "Skill" - displayName: "JS Echo Skill Bot" - appId: $(BFFNECHOSKILLBOTJSAPPID) - appSecret: $(BFFNECHOSKILLBOTJSAPPSECRET) - project: - directory: 'Bots/JavaScript/Skills/CodeFirst/EchoSkillBot' - dependency: - registry: ${{ parameters.dependenciesRegistryJSSkills }} - version: ${{ parameters.dependenciesVersionJSSkills }} - - - name: "bffnechoskillbotjsv3" - type: "SkillV3" - displayName: "JS Echo Skill Bot v3" - appId: $(BFFNECHOSKILLBOTJSV3APPID) - appSecret: $(BFFNECHOSKILLBOTJSV3APPSECRET) - project: - directory: 'Bots/JavaScript/Skills/CodeFirst/EchoSkillBot-v3' - dependency: - registry: ${{ parameters.dependenciesRegistryJSSkillsV3 }} - version: ${{ parameters.dependenciesVersionJSSkillsV3 }} - - - name: "bffnwaterfallhostbotjs" + - name: "bfcfnemptybotjsfunctions" type: "Host" - displayName: "JS Waterfall Host Bot" - appId: $(BFFNWATERFALLHOSTBOTJSAPPID) - appSecret: $(BFFNWATERFALLHOSTBOTJSAPPSECRET) + displayName: "JS Functions Empty Bot" + appId: $(BFCFNEMPTYBOTJSFUNCTIONSID) + appSecret: $(BFCFNEMPTYBOTJSFUNCTIONSSECRET) project: - directory: 'Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot' + directory: 'Tests/Functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot' dependency: registry: ${{ parameters.dependenciesRegistryJSHosts }} version: ${{ parameters.dependenciesVersionJSHosts }} - - name: "bffnwaterfallskillbotjs" - type: "Skill" - displayName: "JS Waterfall Skill Bot" - appId: $(BFFNWATERFALLSKILLBOTJSAPPID) - appSecret: $(BFFNWATERFALLSKILLBOTJSAPPSECRET) - project: - directory: 'Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot' - dependency: - registry: ${{ parameters.dependenciesRegistryJSSkills }} - version: ${{ parameters.dependenciesVersionJSSkills }} - -# Python - - template: python/deploy.yml - parameters: - appServicePlan: "$(INTERNALAPPSERVICEPLANPYTHONNAME)" - appServicePlanRG: "$(INTERNALAPPSERVICEPLANLINUXRESOURCEGROUP)" - azureSubscription: "$(AZURESUBSCRIPTION)" - botPricingTier: $env:BOTPRICINGTIER - connectionName: $env:CONNECTIONNAME - dependsOn: "Prepare_PythonGroup" - keyVault: "$(INTERNALKEYVAULTNAME)" - resourceGroup: "$(INTERNALRESOURCEGROUPNAME)-Python" - resourceSuffix: "$(INTERNALRESOURCESUFFIX)" - bots: - - name: "bffnsimplehostbotpython" - type: "Host" - displayName: "Python Simple Host Bot" - appId: $(BFFNSIMPLEHOSTBOTPYTHONAPPID) - appSecret: $(BFFNSIMPLEHOSTBOTPYTHONAPPSECRET) - project: - directory: 'Bots/Python/Consumers/CodeFirst/SimpleHostBot' - dependency: - registry: ${{ parameters.dependenciesRegistryPythonHosts }} - version: ${{ parameters.dependenciesVersionPythonHosts }} - - - name: "bffnechoskillbotpython" - type: "Skill" - displayName: "Python Echo Skill Bot" - appId: $(BFFNECHOSKILLBOTPYTHONAPPID) - appSecret: $(BFFNECHOSKILLBOTPYTHONAPPSECRET) - project: - directory: 'Bots/Python/Skills/CodeFirst/EchoSkillBot' - dependency: - registry: ${{ parameters.dependenciesRegistryPythonSkills }} - version: ${{ parameters.dependenciesVersionPythonSkills }} - - - name: "bffnwaterfallhostbotpython" - type: "Host" - displayName: "Python Waterfall Host Bot" - appId: $(BFFNWATERFALLHOSTBOTPYTHONAPPID) - appSecret: $(BFFNWATERFALLHOSTBOTPYTHONAPPSECRET) - project: - directory: 'Bots/Python/Consumers/CodeFirst/WaterfallHostBot' - dependency: - registry: ${{ parameters.dependenciesRegistryPythonHosts }} - version: ${{ parameters.dependenciesVersionPythonHosts }} - - - name: "bffnwaterfallskillbotpython" - type: "Skill" - displayName: "Python Waterfall Skill Bot" - appId: $(BFFNWATERFALLSKILLBOTPYTHONAPPID) - appSecret: $(BFFNWATERFALLSKILLBOTPYTHONAPPSECRET) - project: - directory: 'Bots/Python/Skills/CodeFirst/WaterfallSkillBot' - dependency: - registry: ${{ parameters.dependenciesRegistryPythonSkills }} - version: ${{ parameters.dependenciesVersionPythonSkills }} - # Publish variables - stage: "Publish_Variables" displayName: "Publish Variables" diff --git a/tests/functional/build/yaml/deployBotResources/python/deploy.yml b/tests/functional/build/yaml/deployBotResources/python/deploy.yml deleted file mode 100644 index b0f721a61e..0000000000 --- a/tests/functional/build/yaml/deployBotResources/python/deploy.yml +++ /dev/null @@ -1,183 +0,0 @@ -parameters: - - name: appServicePlan - displayName: App Service Plan name - type: string - - - name: appServicePlanRG - displayName: App Service Plan Resource Group - type: string - - - name: azureSubscription - displayName: Azure Service Connection - type: string - - - name: bots - displayName: Bots - type: object - - - name: botPricingTier - displayName: Bot Pricing Tier - type: string - - - name: connectionName - displayName: OAuth Connection Name - type: string - - - name: dependsOn - displayName: Depends On - type: string - - - name: keyVault - displayName: Key Vault name - type: string - - - name: resourceGroup - displayName: Resource Group - type: string - - - name: resourceSuffix - displayName: Azure resources' name suffix - type: string - -stages: -- ${{ each bot in parameters.bots }}: - - stage: "Deploy_${{ bot.name }}" - ${{ if eq(bot.displayName, '') }}: - displayName: "${{ bot.name }}" - ${{ if ne(bot.displayName, '') }}: - displayName: "${{ bot.displayName }}" - dependsOn: "${{ parameters.dependsOn }}" - jobs: - - job: "Deploy" - pool: - vmImage: "ubuntu-latest" - displayName: "Deploy steps" - steps: - # Delete Bot Resources - - template: ../common/deleteResources.yml - parameters: - azureSubscription: "${{ parameters.azureSubscription }}" - resourceGroup: "${{ parameters.resourceGroup }}" - resourceName: "${{ bot.name }}" - resourceSuffix: "${{ parameters.resourceSuffix }}" - - # Gets Bot App Registration credentials from KeyVault or Pipeline Variables - - template: ../common/getAppRegistration.yml - parameters: - appId: ${{ bot.appId }} - appSecret: ${{ bot.appSecret }} - azureSubscription: "${{ parameters.azureSubscription }}" - botName: "${{ bot.name }}" - keyVault: "${{ parameters.keyVault }}" - - # Prepare .env file, deleting all the declared skills, so it uses only the settings define in Azure - - ${{ if eq(bot.type, 'Host') }}: - - task: PowerShell@2 - displayName: "Prepare .env file" - inputs: - targetType: inline - script: | - $file = "${{ bot.project.directory }}/.env" - $content = Get-Content $file - $content | ForEach-Object { - $line = $_ - if ($line.Trim().Length -gt 0 -and -not $line.Trim().ToLower().StartsWith("skill_")) { - $line - } - } | Set-Content $file - - # Evaluate dependencies source and version - - template: evaluateDependenciesVariables.yml - parameters: - botType: "${{ bot.type }}" - source: "${{ bot.project.directory }}" - registry: "${{ bot.dependency.registry }}" - version: "${{ bot.dependency.version }}" - - # Tag BotBuilder package version - - template: ../common/tagBotBuilderVersion.yml - parameters: - ${{ if eq(bot.displayName, '') }}: - botName: "${{ bot.name }}" - ${{ if ne(bot.displayName, '') }}: - botName: "${{ bot.displayName }}" - version: "$(DEPENDENCIESVERSIONNUMBER)" - - # Create App Service and Bot Channel Registration - - template: ../common/createAppService.yml - parameters: - appId: $(APPID) - appSecret: $(APPSECRET) - appServicePlan: "${{ parameters.appServicePlan }}" - appServicePlanRG: "${{ parameters.appServicePlanRG }}" - azureSubscription: "${{ parameters.azureSubscription }}" - botName: "${{ bot.name }}" - botGroup: "${{ parameters.resourceGroup }}" - botPricingTier: "${{ parameters.botPricingTier }}" - resourceSuffix: "${{ parameters.resourceSuffix }}" - templateFile: "build/templates/template-python-bot-resources.json" - - # Configure OAuth - - ${{ if eq(bot.type, 'Skill') }}: - - template: ../common/configureOAuth.yml - parameters: - appId: $(APPID) - appSecret: $(APPSECRET) - azureSubscription: "${{ parameters.azureSubscription }}" - botGroup: "${{ parameters.resourceGroup }}" - botName: "${{ bot.name }}" - connectionName: "${{ parameters.connectionName }}" - resourceSuffix: "${{ parameters.resourceSuffix }}" - - # Set Python version - - task: UsePythonVersion@0 - displayName: "Set python version to 3.8.x" - inputs: - versionSpec: "3.8.x" - - # Build Python app (linux only) - - script: | - python -m venv antenv - source antenv/bin/activate - python -m pip install --upgrade pip - pip install -r requirements.txt - workingDirectory: $(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ bot.project.directory }} - displayName: "Build Python app" - - # Zip bot - - task: ArchiveFiles@2 - displayName: "Zip bot" - inputs: - rootFolderOrFile: "$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ bot.project.directory }}" - includeRootFolder: false - archiveType: "zip" - archiveFile: "$(SYSTEM.DEFAULTWORKINGDIRECTORY)/build/${{ bot.name }}.zip" - replaceExistingArchive: true - verbose: true - - # Upload zip to artifacts in case we want to debug it - - task: PublishBuildArtifacts@1 - displayName: "Publish zip package" - inputs: - pathToPublish: "$(SYSTEM.DEFAULTWORKINGDIRECTORY)/build/${{ bot.name }}.zip" - artifactName: python-$(BUILD.BUILDID) - - # Deploy bot - - task: AzureWebApp@1 - displayName: "Deploy Azure Web App : ${{ bot.name }}-$(BUILD.BUILDID)" - inputs: - azureSubscription: "${{ parameters.azureSubscription }}" - appName: "${{ bot.name }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)" - appType: webAppLinux - resourceGroupName: "${{ parameters.resourceGroup }}" - package: "$(System.DefaultWorkingDirectory)/build/${{ bot.name }}.zip" - deploymentMethod: runFromPackage - - # Create DirectLine Channel Hosts - - ${{ if eq(bot.type, 'Host') }}: - - template: ../common/createDirectLine.yml - parameters: - azureSubscription: "${{ parameters.azureSubscription }}" - botGroup: "${{ parameters.resourceGroup }}" - botName: "${{ bot.name }}" - resourceSuffix: "${{ parameters.resourceSuffix }}" diff --git a/tests/functional/build/yaml/deployBotResources/python/evaluateDependenciesVariables.yml b/tests/functional/build/yaml/deployBotResources/python/evaluateDependenciesVariables.yml deleted file mode 100644 index aa8874fa4e..0000000000 --- a/tests/functional/build/yaml/deployBotResources/python/evaluateDependenciesVariables.yml +++ /dev/null @@ -1,110 +0,0 @@ -parameters: - - name: botType - displayName: Bot type - type: string - - - name: source - displayName: Bot Source Location - type: string - - - name: registry - displayName: Registry source - type: string - - - name: version - displayName: Version number - type: string - -steps: - - task: PowerShell@2 - displayName: "Evaluate source & version" - inputs: - targetType: inline - script: | - # Get Source - $sourcePypi = "https://pypi.org/simple/" - $sourceTestPypi = "https://test.pypi.org/simple/" - $sourceArtifacts = "https://pkgs.dev.azure.com/ConversationalAI/BotFramework/_packaging/SDK/pypi/simple/" - - switch -regex ("${{ parameters.registry }}") { - "^($null||Artifacts)$" { - $source = $sourceArtifacts - $extraSource = $sourcePypi - } - "Pypi" { - $source = $sourcePypi - $extraSource = $sourceArtifacts - } - "Test.Pypi" { - $source = $sourceTestPypi - $extraSource = $sourcePypi - } - default { - $source = "${{ parameters.registry }}" - $extraSource = $sourcePypi - } - } - - # Get Version Number - switch -regex ("${{ parameters.version }}") { - "^($null||LATEST)$" { - if ("${{ parameters.registry }}".ToUpper() -in "PYPI") { - [Console]::ForegroundColor = "red" - [Console]::Error.WriteLine("Preview versions of BotBuilder are not available for this source.") - [Console]::ResetColor() - exit 1 # Force exit - } - $versionNumber = "" - $preFag = "--pre" - } - STABLE { - $versionNumber = "" - } - default { - $versionNumber = "${{ parameters.version }}" - $condition = "==" - } - } - - #Add the $source source at the beginning of requirements - $file = "${{ parameters.source }}/requirements.txt" - $content = @(Get-Content $file) - $line = "$preFag --index-url $source --extra-index-url $extraSource".Trim() - Set-Content -Path $file -Value $line - Add-Content -Path $file -Value $content - - function UpdatePackageVersion($package) { - #Set Package version to empty value - $content = @(Get-Content $file) - $matchinfo = Select-String -Path $file -Pattern $package - - $script = "$package $condition $versionNumber" - - if ($matchinfo.LineNumber -gt 0) { - $content[$matchinfo.LineNumber - 1] = $script - Set-Content -Path $file -Value $content - } else { - Add-Content -Path $file -Value $script - } - } - - UpdatePackageVersion "botbuilder-dialogs" - UpdatePackageVersion "botbuilder-integration-aiohttp" - - if (-not $versionNumber) { - Invoke-Expression "pip install botbuilder-integration-aiohttp $line --quiet" - $packageVersion = pip show botbuilder-integration-aiohttp | Where-Object { $_ -match "^Version" } - $versionNumber = $packageVersion.Split(" ")[1] - } - - Write-Host "`nSource: $source" - Write-Host "Extra Source: $extraSource" - Write-Host "Version Number: $versionNumber" - - $content = @(Get-Content $file) - Write-Host "`nrequirements.txt file:" - $content - - # Set environment variables - Write-Host "##vso[task.setvariable variable=DependenciesSource]$source" - Write-Host "##vso[task.setvariable variable=DependenciesVersionNumber]$versionNumber" diff --git a/tests/functional/build/yaml/sharedResources/createSharedResources.yml b/tests/functional/build/yaml/sharedResources/createSharedResources.yml index cae6a936aa..f593314d46 100644 --- a/tests/functional/build/yaml/sharedResources/createSharedResources.yml +++ b/tests/functional/build/yaml/sharedResources/createSharedResources.yml @@ -18,13 +18,13 @@ variables: # ResourceSuffix: (optional) Suffix to add to the resources' name to avoid collitions. ## Internal variables - InternalAppInsightsName: "bffnappinsights$($env:RESOURCESUFFIX)" - InternalAppServicePlanDotNetName: "bffnbotsappservicedotnet$($env:RESOURCESUFFIX)" - InternalAppServicePlanJSName: "bffnbotsappservicejs$($env:RESOURCESUFFIX)" - InternalAppServicePlanPythonName: "bffnbotsappservicepython$($env:RESOURCESUFFIX)" - InternalCosmosDBName: "bffnbotstatedb$($env:RESOURCESUFFIX)" - InternalKeyVaultName: "bffnbotkeyvault$($env:RESOURCESUFFIX)" - InternalResourceGroupName: $[coalesce(variables['RESOURCEGROUPNAME'], 'bffnshared')] + InternalAppInsightsName: "bfcfnappinsights$($env:RESOURCESUFFIX)" + InternalAppServicePlanDotNetName: "bfcfnbotsappservicedotnet$($env:RESOURCESUFFIX)" + InternalAppServicePlanJSName: "bfcfnbotsappservicejs$($env:RESOURCESUFFIX)" + InternalCosmosDBName: "bfcfnbotstatedb$($env:RESOURCESUFFIX)" + InternalStorageName: "bfcfnbotstroage$($env:RESOURCESUFFIX)" + InternalKeyVaultName: "bfcfnbotkeyvault$($env:RESOURCESUFFIX)" + InternalResourceGroupName: $[coalesce(variables['RESOURCEGROUPNAME'], 'bfcfnshared')] stages: - stage: Create_Resource_Group_Windows @@ -139,34 +139,32 @@ stages: $appServicePlanPricingTier = if ($env:APPSERVICEPLANPRICINGTIER) { "newAppServicePlanSku=$env:APPSERVICEPLANPRICINGTIER" } az deployment group create --name "$(INTERNALAPPSERVICEPLANJSNAME)" --resource-group "$(INTERNALRESOURCEGROUPNAME)" --template-file build/templates/template-service-plan-windows-resources.json --parameters $appServicePlanPricingTier newAppServicePlanName="$(INTERNALAPPSERVICEPLANJSNAME)" -- stage: Create_App_Service_Plan_Python - displayName: "Create App Service Plan (Python)" - dependsOn: Create_Resource_Group_Linux +- stage: Create_App_Insights + displayName: "Create App Insights" + dependsOn: Create_Resource_Group_Windows jobs: - - job: Deploy_App_Service_Plan_Python + - job: Deploy_App_Insights displayName: "Deploy steps" steps: - task: AzureCLI@2 - displayName: "Deploy App Service Plan (Python)" + displayName: "Deploy App Insights" inputs: azureSubscription: $(AZURESUBSCRIPTION) scriptType: pscore scriptLocation: inlineScript - inlineScript: | - $appServicePlanPricingTier = if ($env:APPSERVICEPLANPRICINGTIER) { "newAppServicePlanSku=$env:APPSERVICEPLANPRICINGTIER" } - az deployment group create --name "$(INTERNALAPPSERVICEPLANPYTHONNAME)" --resource-group "$(INTERNALRESOURCEGROUPNAME)-linux" --template-file build/templates/template-service-plan-linux-resources.json --parameters $appServicePlanPricingTier newAppServicePlanName="$(INTERNALAPPSERVICEPLANPYTHONNAME)" - -- stage: Create_App_Insights - displayName: "Create App Insights" + inlineScript: "az deployment group create --name $(INTERNALAPPINSIGHTSNAME) --resource-group $(INTERNALRESOURCEGROUPNAME) --template-file build/templates/template-app-insights-resources.json --parameters appInsightsName=$(INTERNALAPPINSIGHTSNAME)" + +- stage: Create_Blob_Storage + displayName: "Create Blob Storage" dependsOn: Create_Resource_Group_Windows jobs: - - job: Deploy_App_Insights + - job: Deploy_Blob_Storage displayName: "Deploy steps" steps: - task: AzureCLI@2 - displayName: "Deploy App Insights" + displayName: "Deploy Blob Storage" inputs: azureSubscription: $(AZURESUBSCRIPTION) scriptType: pscore scriptLocation: inlineScript - inlineScript: "az deployment group create --name $(INTERNALAPPINSIGHTSNAME) --resource-group $(INTERNALRESOURCEGROUPNAME) --template-file build/templates/template-app-insights-resources.json --parameters appInsightsName=$(INTERNALAPPINSIGHTSNAME)" + inlineScript: "az deployment group create --name $(INTERNALSTORAGENAME) --resource-group $(INTERNALRESOURCEGROUPNAME) --template-file build/templates/template-storage-resources.json --parameters storageAccountsName=$(INTERNALSTORAGENAME)" diff --git a/tests/functional/build/yaml/testScenarios/runTestScenarios.yml b/tests/functional/build/yaml/testScenarios/runTestScenarios.yml index ebb6a14b2d..6fac3d47ca 100644 --- a/tests/functional/build/yaml/testScenarios/runTestScenarios.yml +++ b/tests/functional/build/yaml/testScenarios/runTestScenarios.yml @@ -16,21 +16,21 @@ variables: # ResourceSuffix: (optional) Suffix to add to the resources' name to avoid collitions. ## Bots Configuration (Define these variables in Azure) - # BffnEchoSkillBotComposerDotNetAppId: (optional) App Id for BffnEchoSkillBotComposerDotNet bot. - # BffnEchoSkillBotDotNet21AppId: (optional) App Id for BffnEchoSkillBotDotNet21 bot. - # BffnEchoSkillBotDotNetAppId: (optional) App Id for BffnEchoSkillBotDotNet bot. - # BffnEchoSkillBotDotNetV3AppId: (optional) App Id for BffnEchoSkillBotDotNetV3 bot. - # BffnEchoSkillBotJSAppId: (optional) App Id for BffnEchoSkillBotJS bot. - # BffnEchoSkillBotJSV3AppId: (optional) App Id for BffnEchoSkillBotJSV3 bot. - # BffnEchoSkillBotPythonAppId: (optional) App Id for BffnEchoSkillBotPython bot. - # BffnWaterfallSkillBotDotNetAppId: (optional) App Id for BffnWaterfallSkillBotDotNet bot. - # BffnWaterfallSkillBotJSAppId: (optional) App Id for BffnWaterfallSkillBotJS bot. - # BffnWaterfallSkillBotPythonAppId: (optional) App Id for BffnWaterfallSkillBotPython bot. + # BfcfnEchoSkillBotComposerDotNetAppId: (optional) App Id for BfcfnEchoSkillBotComposerDotNet bot. + # BfcfnEchoSkillBotDotNet21AppId: (optional) App Id for BfcfnEchoSkillBotDotNet21 bot. + # BfcfnEchoSkillBotDotNetAppId: (optional) App Id for BfcfnEchoSkillBotDotNet bot. + # BfcfnEchoSkillBotDotNetV3AppId: (optional) App Id for BfcfnEchoSkillBotDotNetV3 bot. + # BfcfnEchoSkillBotJSAppId: (optional) App Id for BfcfnEchoSkillBotJS bot. + # BfcfnEchoSkillBotJSV3AppId: (optional) App Id for BfcfnEchoSkillBotJSV3 bot. + # BfcfnEchoSkillBotPythonAppId: (optional) App Id for BfcfnEchoSkillBotPython bot. + # BfcfnWaterfallSkillBotDotNetAppId: (optional) App Id for BfcfnWaterfallSkillBotDotNet bot. + # BfcfnWaterfallSkillBotJSAppId: (optional) App Id for BfcfnWaterfallSkillBotJS bot. + # BfcfnWaterfallSkillBotPythonAppId: (optional) App Id for BfcfnWaterfallSkillBotPython bot. # DeployBotResourcesGuid: (optional) Deploy Bot Resources pipeline GUID. ## Internal variables - InternalKeyVaultName: "bffnbotkeyvault$(INTERNALRESOURCESUFFIX)" - InternalResourceGroupName: $[coalesce(variables['RESOURCEGROUP'], 'bffnbots')] + InternalKeyVaultName: "bfcfnbotkeyvault$(INTERNALRESOURCESUFFIX)" + InternalResourceGroupName: $[coalesce(variables['RESOURCEGROUP'], 'bfcfnbots')] InternalResourceSuffix: $[coalesce(variables['RESOURCESUFFIX'], '')] pool: From 2ca9d4121f6f14bc3240f050034c6fe2073de24f Mon Sep 17 00:00:00 2001 From: Peter Innes <53846082+peterinnesmsft@users.noreply.github.com> Date: Mon, 14 Jun 2021 10:19:57 -0700 Subject: [PATCH 27/39] chore: @microsoft/generator-bot-adaptive happy path unit tests (#1091) * Adding Mocha unit test support to generator-bot-adaptive; implemented simple test for .NET Web App generation, as well as empty stubs for other variations. * Further progress on .NET Web App generator unit tests for generator-bot-adaptive. * Implementing basic happy path unit tests for generator-bot-adaptive for all permutations of platform and integration. * Addressing majority of eslint errors except for escape char errors in dotnet-webapp.test.js and dotnet-functions.test.js; addressing in next commit. * Fixing remaining eslint issues around regular expressions in dotnet-webapp.test.js and dotnet-functions.test.js. * Renaming tests dir to test. * Addressing PR feedback from Josh. * Fixing references to platform in child generators to correctly use name property. --- .eslintrc.json | 3 +- .../generator-bot-adaptive/.mocharc.json | 7 + .../generator-bot-adaptive/package.json | 10 +- .../test/dotnet-functions.test.js | 308 +++++ .../test/dotnet-webapp.test.js | 253 ++++ .../test/js-functions.test.js | 210 ++++ .../test/js-webapp.test.js | 159 +++ .../test/templateFileReader.js | 26 + .../generators/app/index.js | 4 +- .../generators/app/index.js | 4 +- yarn.lock | 1094 ++++++++++------- 11 files changed, 1614 insertions(+), 464 deletions(-) create mode 100644 generators/generator-bot-adaptive/.mocharc.json create mode 100644 generators/generator-bot-adaptive/test/dotnet-functions.test.js create mode 100644 generators/generator-bot-adaptive/test/dotnet-webapp.test.js create mode 100644 generators/generator-bot-adaptive/test/js-functions.test.js create mode 100644 generators/generator-bot-adaptive/test/js-webapp.test.js create mode 100644 generators/generator-bot-adaptive/test/templateFileReader.js diff --git a/.eslintrc.json b/.eslintrc.json index 42fdf78bd6..d21952753f 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,6 +1,7 @@ { "env": { - "es6": true, + "es2017": true, + "mocha": true, "node": true }, "extends": ["eslint:recommended"], diff --git a/generators/generator-bot-adaptive/.mocharc.json b/generators/generator-bot-adaptive/.mocharc.json new file mode 100644 index 0000000000..860b7e7f60 --- /dev/null +++ b/generators/generator-bot-adaptive/.mocharc.json @@ -0,0 +1,7 @@ +{ + "checkLeaks": true, + "exit": true, + "forbidOnly": true, + "forbidPending": true, + "recursive": true +} diff --git a/generators/generator-bot-adaptive/package.json b/generators/generator-bot-adaptive/package.json index 3bbd646400..98ca42a60a 100644 --- a/generators/generator-bot-adaptive/package.json +++ b/generators/generator-bot-adaptive/package.json @@ -20,19 +20,23 @@ "url": "https://github.com/Microsoft/botframework-components.git" }, "scripts": { - "lint": "eslint -c .eslintrc.json ." + "lint": "eslint -c .eslintrc.json .", + "test": "mocha" }, "dependencies": { "globby": "^11.0.2", "normalize-path": "^3.0.0", "runtypes": "~5.1.0", "uuid": "^8.3.1", - "yeoman-generator": "^1.1.1" + "yeoman-generator": "^2.0.5" }, "devDependencies": { + "ejs": "^3.1.6", "eslint": "latest", "eslint-config-prettier": "latest", "eslint-plugin-prettier": "latest", - "prettier": "latest" + "mocha": "^8.3.2", + "prettier": "latest", + "yeoman-test": "^6.0.0" } } diff --git a/generators/generator-bot-adaptive/test/dotnet-functions.test.js b/generators/generator-bot-adaptive/test/dotnet-functions.test.js new file mode 100644 index 0000000000..04cb7cd664 --- /dev/null +++ b/generators/generator-bot-adaptive/test/dotnet-functions.test.js @@ -0,0 +1,308 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +const fs = require('fs'); +const helpers = require('yeoman-test'); +const path = require('path'); +const TemplateFileReader = require('./templateFileReader'); + +const botName = 'DotNetFunctions'; +const generatorPath = path.join(__dirname, '..', 'generators', 'app'); +const integration = 'functions'; +const platform = 'dotnet'; +const reader = new TemplateFileReader(path.join(generatorPath, 'templates')); + +describe(`generator-bot-adaptive --platform ${platform} --integration ${integration}`, function () { + let runResult; + + before(async function () { + runResult = await helpers + .create(generatorPath) + .withArguments([botName]) + .withOptions({ platform, integration }) + .run(); + }); + + after(function () { + if (runResult) { + runResult.restore(); + } + }); + + it(`should create file ${botName}.sln`, function () { + const filePath = path.join(`${botName}.sln`); + + const actualContent = fs.readFileSync(filePath).toString('utf8'); + const projectType = 'FAE04EC0-301F-11D3-BF4B-00C04F79EFBC'; + + const botProjectGuidExpression = new RegExp( + `Project\\(\\"\\{${projectType}\\}\\"\\) = \\"${botName}\\", ` + + `\\"${botName}\\\\${botName}.csproj\\", ` + + `\\"\\{(.+)\\}\\"`, + 'gi' + ); + + const botProjectGuid = botProjectGuidExpression.exec(actualContent)[1]; + + const solutionGuidExpression = /SolutionGuid = \{(.+)\}/gi; + const solutionGuid = solutionGuidExpression.exec(actualContent)[1]; + + const content = reader.getTemplateFileContent( + path.join('dotnet', 'botName.sln'), + { + botName, + botProjectGuid, + projectType, + solutionGuid, + } + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'ActivitySerializationSettings.cs' + )}`, function () { + const filePath = path.join(botName, 'ActivitySerializationSettings.cs'); + const content = reader.getTemplateFileContent( + path.join('dotnet', 'functions', 'ActivitySerializationSettings.cs'), + { + botName, + } + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'appsettings.json' + )}`, function () { + const filePath = path.join(botName, 'appsettings.json'); + const content = reader.getJsonFileContent( + path.join('assets', 'appsettings.json'), + { + luis: { + name: botName, + }, + runtime: { + command: `func start --script-root ${path.join( + 'bin', + 'Debug', + 'netcoreapp3.1' + )}`, + key: `adaptive-runtime-${platform}-${integration}`, + }, + } + ); + + runResult.assertJsonFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + `${botName}.botproj` + )}`, function () { + const filePath = path.join(botName, `${botName}.botproj`); + const content = reader.getJsonFileContent( + path.join('assets', 'botName.botproj'), + { + name: botName, + } + ); + + runResult.assertJsonFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + `${botName}.csproj` + )}`, function () { + const filePath = path.join(botName, `${botName}.csproj`); + const content = reader.getTemplateFileContent( + path.join('dotnet', 'functions', 'botName.csproj'), + { + botName, + packageReferences: '', + sdkVersion: '4.13.2', + } + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join(botName, 'host.json')}`, function () { + const filePath = path.join(botName, 'host.json'); + const content = reader.getFileContent( + path.join('dotnet', 'functions', 'host.json') + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'local.settings.json' + )}`, function () { + const filePath = path.join(botName, 'local.settings.json'); + const content = reader.getFileContent( + path.join('dotnet', 'functions', 'local.settings.json') + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join(botName, 'Startup.cs')}`, function () { + const filePath = path.join(botName, 'Startup.cs'); + const content = reader.getTemplateFileContent( + path.join('dotnet', 'functions', 'Startup.cs'), + { + botName, + settingsDirectory: 'string.Empty', + } + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'Properties', + 'serviceDependencies.json' + )}`, function () { + const filePath = path.join( + botName, + 'Properties', + 'serviceDependencies.json' + ); + const content = reader.getFileContent( + path.join('dotnet', 'functions', 'Properties', 'serviceDependencies.json') + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'Properties', + 'serviceDependencies.local.json' + )}`, function () { + const filePath = path.join( + botName, + 'Properties', + 'serviceDependencies.local.json' + ); + + const content = reader.getFileContent( + path.join( + 'dotnet', + 'functions', + 'Properties', + 'serviceDependencies.local.json' + ) + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'Triggers', + 'MessagesTrigger.cs' + )}`, function () { + const filePath = path.join(botName, 'Triggers', 'MessagesTrigger.cs'); + const content = reader.getTemplateFileContent( + path.join('dotnet', 'functions', 'Triggers', 'MessagesTrigger.cs'), + { + botName, + } + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'Triggers', + 'SkillsTrigger.cs' + )}`, function () { + const filePath = path.join(botName, 'Triggers', 'SkillsTrigger.cs'); + const content = reader.getTemplateFileContent( + path.join('dotnet', 'functions', 'Triggers', 'SkillsTrigger.cs'), + { + botName, + } + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'Triggers', + 'StaticFilesTrigger.cs' + )}`, function () { + const filePath = path.join(botName, 'Triggers', 'StaticFilesTrigger.cs'); + const content = reader.getTemplateFileContent( + path.join('dotnet', 'functions', 'Triggers', 'StaticFilesTrigger.cs'), + { + botName, + } + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'schemas', + 'sdk.schema' + )}`, function () { + const filePath = path.join(botName, 'schemas', 'sdk.schema'); + const content = reader.getFileContent( + path.join('assets', 'schemas', 'sdk.schema') + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'schemas', + 'sdk.uischema' + )}`, function () { + const filePath = path.join(botName, 'schemas', 'sdk.uischema'); + const content = reader.getFileContent( + path.join('assets', 'schemas', 'sdk.uischema') + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'schemas', + 'update-schema.ps1' + )}`, function () { + const filePath = path.join(botName, 'schemas', 'update-schema.ps1'); + const content = reader.getFileContent( + path.join('assets', 'schemas', 'update-schema.ps1') + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'schemas', + 'update-schema.sh' + )}`, function () { + const filePath = path.join(botName, 'schemas', 'update-schema.sh'); + const content = reader.getFileContent( + path.join('assets', 'schemas', 'update-schema.sh') + ); + + runResult.assertFileContent(filePath, content); + }); +}); diff --git a/generators/generator-bot-adaptive/test/dotnet-webapp.test.js b/generators/generator-bot-adaptive/test/dotnet-webapp.test.js new file mode 100644 index 0000000000..b3a99461ab --- /dev/null +++ b/generators/generator-bot-adaptive/test/dotnet-webapp.test.js @@ -0,0 +1,253 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +const fs = require('fs'); +const helpers = require('yeoman-test'); +const path = require('path'); +const TemplateFileReader = require('./templateFileReader'); + +const botName = 'DotNetWebApp'; +const generatorPath = path.join(__dirname, '..', 'generators', 'app'); +const integration = 'webapp'; +const platform = 'dotnet'; +const reader = new TemplateFileReader(path.join(generatorPath, 'templates')); + +describe(`generator-bot-adaptive --platform ${platform} --integration ${integration}`, function () { + let runResult; + + before(async function () { + runResult = await helpers + .create(generatorPath) + .withArguments([botName]) + .withOptions({ platform, integration }) + .run(); + }); + + after(function () { + if (runResult) { + runResult.restore(); + } + }); + + it(`should create file ${botName}.sln`, function () { + const filePath = path.join(`${botName}.sln`); + + const actualContent = fs.readFileSync(filePath).toString('utf8'); + const projectType = '9A19103F-16F7-4668-BE54-9A1E7A4F7556'; + + const botProjectGuidExpression = new RegExp( + `Project\\(\\"\\{${projectType}\\}\\"\\) = \\"${botName}\\", ` + + `\\"${botName}\\\\${botName}.csproj\\", ` + + `\\"\\{(.+)\\}\\"`, + 'gi' + ); + + const botProjectGuid = botProjectGuidExpression.exec(actualContent)[1]; + + const solutionGuidExpression = /SolutionGuid = \{(.+)\}/gi; + const solutionGuid = solutionGuidExpression.exec(actualContent)[1]; + + const content = reader.getTemplateFileContent( + path.join('dotnet', 'botName.sln'), + { + botName, + botProjectGuid, + projectType, + solutionGuid, + } + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'appsettings.json' + )}`, function () { + const filePath = path.join(botName, 'appsettings.json'); + const content = reader.getJsonFileContent( + path.join('assets', 'appsettings.json'), + { + luis: { + name: botName, + }, + runtime: { + command: `dotnet run --project ${botName}.csproj`, + key: `adaptive-runtime-${platform}-${integration}`, + }, + } + ); + + runResult.assertJsonFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + `${botName}.botproj` + )}`, function () { + const filePath = path.join(botName, `${botName}.botproj`); + const content = reader.getJsonFileContent( + path.join('assets', 'botName.botproj'), + { + name: botName, + } + ); + + runResult.assertJsonFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + `${botName}.csproj` + )}`, function () { + const filePath = path.join(botName, `${botName}.csproj`); + const content = reader.getTemplateFileContent( + path.join('dotnet', 'webapp', 'botName.csproj'), + { + botName, + packageReferences: '', + sdkVersion: '4.13.2', + } + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join(botName, 'Program.cs')}`, function () { + const filePath = path.join(botName, 'Program.cs'); + const content = reader.getTemplateFileContent( + path.join('dotnet', 'webapp', 'Program.cs'), + { + botName, + settingsDirectory: 'string.Empty', + } + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join(botName, 'Startup.cs')}`, function () { + const filePath = path.join(botName, 'Startup.cs'); + const content = reader.getTemplateFileContent( + path.join('dotnet', 'webapp', 'Startup.cs'), + { + botName, + } + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'Controllers', + 'BotController.cs' + )}`, function () { + const filePath = path.join(botName, 'Controllers', 'BotController.cs'); + const content = reader.getTemplateFileContent( + path.join('dotnet', 'webapp', 'Controllers', 'BotController.cs'), + { + botName, + } + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'Controllers', + 'SkillController.cs' + )}`, function () { + const filePath = path.join(botName, 'Controllers', 'SkillController.cs'); + const content = reader.getTemplateFileContent( + path.join('dotnet', 'webapp', 'Controllers', 'SkillController.cs'), + { + botName, + } + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'Properties', + 'launchSettings.json' + )}`, function () { + const filePath = path.join(botName, 'Properties', 'launchSettings.json'); + const content = reader.getFileContent( + path.join('dotnet', 'webapp', 'Properties', 'launchSettings.json') + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'schemas', + 'sdk.schema' + )}`, function () { + const filePath = path.join(botName, 'schemas', 'sdk.schema'); + const content = reader.getFileContent( + path.join('assets', 'schemas', 'sdk.schema') + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'schemas', + 'sdk.uischema' + )}`, function () { + const filePath = path.join(botName, 'schemas', 'sdk.uischema'); + const content = reader.getFileContent( + path.join('assets', 'schemas', 'sdk.uischema') + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'schemas', + 'update-schema.ps1' + )}`, function () { + const filePath = path.join(botName, 'schemas', 'update-schema.ps1'); + const content = reader.getFileContent( + path.join('assets', 'schemas', 'update-schema.ps1') + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'schemas', + 'update-schema.sh' + )}`, function () { + const filePath = path.join(botName, 'schemas', 'update-schema.sh'); + const content = reader.getFileContent( + path.join('assets', 'schemas', 'update-schema.sh') + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'wwwroot', + 'default.htm' + )}`, function () { + const filePath = path.join(botName, 'wwwroot', 'default.htm'); + const content = reader.getTemplateFileContent( + path.join('dotnet', 'webapp', 'wwwroot', 'default.htm'), + { + botName, + } + ); + + runResult.assertFileContent(filePath, content); + }); +}); diff --git a/generators/generator-bot-adaptive/test/js-functions.test.js b/generators/generator-bot-adaptive/test/js-functions.test.js new file mode 100644 index 0000000000..c3c990981a --- /dev/null +++ b/generators/generator-bot-adaptive/test/js-functions.test.js @@ -0,0 +1,210 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +const helpers = require('yeoman-test'); +const path = require('path'); +const TemplateFileReader = require('./templateFileReader'); + +const botName = 'JavaScriptFunctions'; +const generatorPath = path.join(__dirname, '..', 'generators', 'app'); +const integration = 'functions'; +const platform = 'js'; +const reader = new TemplateFileReader(path.join(generatorPath, 'templates')); + +describe(`generator-bot-adaptive --platform ${platform} --integration ${integration}`, function () { + let runResult; + + before(async function () { + runResult = await helpers + .create(generatorPath) + .withArguments([botName]) + .withOptions({ platform, integration }) + .run(); + }); + + after(function () { + if (runResult) { + runResult.restore(); + } + }); + + it(`should create file ${path.join( + botName, + 'appsettings.json' + )}`, function () { + const filePath = path.join(botName, 'appsettings.json'); + const content = reader.getJsonFileContent( + path.join('assets', 'appsettings.json'), + { + luis: { + name: botName, + }, + runtime: { + command: `npm run dev --`, + key: `adaptive-runtime-${platform}-${integration}`, + }, + } + ); + + runResult.assertJsonFileContent(filePath, content); + }); + + it(`should create file ${path.join(botName, 'host.json')}`, function () { + const filePath = path.join(botName, 'host.json'); + const content = reader.getFileContent( + path.join('js', 'functions', 'host.json') + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join(botName, 'index.js')}`, function () { + const filePath = path.join(botName, 'index.js'); + const content = reader.getTemplateFileContent( + path.join('js', 'functions', 'index.js'), + { + settingsDirectory: 'process.cwd()', + } + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + `${botName}.botproj` + )}`, function () { + const filePath = path.join(botName, `${botName}.botproj`); + const content = reader.getJsonFileContent( + path.join('assets', 'botName.botproj'), + { + name: botName, + } + ); + + runResult.assertJsonFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'local.settings.json' + )}`, function () { + const filePath = path.join(botName, 'local.settings.json'); + const content = reader.getFileContent( + path.join('js', 'functions', 'local.settings.json') + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join(botName, 'package.json')}`, function () { + const filePath = path.join(botName, 'package.json'); + const content = { + name: botName, + private: true, + scripts: { + dev: 'cross-env NODE_ENV=dev func start', + }, + dependencies: { + 'cross-env': 'latest', + 'botbuilder-ai-luis': '4.13.4-preview', + 'botbuilder-ai-qna': '4.13.4-preview', + 'botbuilder-dialogs-adaptive-runtime-integration-azure-functions': + '4.13.4-preview', + }, + }; + + runResult.assertJsonFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'messages', + 'function.json' + )}`, function () { + const filePath = path.join(botName, 'messages', 'function.json'); + const content = reader.getFileContent( + path.join('js', 'functions', 'messages', 'function.json') + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'schemas', + 'sdk.schema' + )}`, function () { + const filePath = path.join(botName, 'schemas', 'sdk.schema'); + const content = reader.getFileContent( + path.join('assets', 'schemas', 'sdk.schema') + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'schemas', + 'sdk.uischema' + )}`, function () { + const filePath = path.join(botName, 'schemas', 'sdk.uischema'); + const content = reader.getFileContent( + path.join('assets', 'schemas', 'sdk.uischema') + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'schemas', + 'update-schema.ps1' + )}`, function () { + const filePath = path.join(botName, 'schemas', 'update-schema.ps1'); + const content = reader.getFileContent( + path.join('assets', 'schemas', 'update-schema.ps1') + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'schemas', + 'update-schema.sh' + )}`, function () { + const filePath = path.join(botName, 'schemas', 'update-schema.sh'); + const content = reader.getFileContent( + path.join('assets', 'schemas', 'update-schema.sh') + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'skills', + 'function.json' + )}`, function () { + const filePath = path.join(botName, 'skills', 'function.json'); + const content = reader.getFileContent( + path.join('js', 'functions', 'skills', 'function.json') + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'static', + 'function.json' + )}`, function () { + const filePath = path.join(botName, 'static', 'function.json'); + const content = reader.getFileContent( + path.join('js', 'functions', 'static', 'function.json') + ); + + runResult.assertFileContent(filePath, content); + }); +}); diff --git a/generators/generator-bot-adaptive/test/js-webapp.test.js b/generators/generator-bot-adaptive/test/js-webapp.test.js new file mode 100644 index 0000000000..2028572509 --- /dev/null +++ b/generators/generator-bot-adaptive/test/js-webapp.test.js @@ -0,0 +1,159 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +const helpers = require('yeoman-test'); +const path = require('path'); +const TemplateFileReader = require('./templateFileReader'); + +const botName = 'JavaScriptWebApp'; +const generatorPath = path.join(__dirname, '..', 'generators', 'app'); +const integration = 'webapp'; +const platform = 'js'; +const reader = new TemplateFileReader(path.join(generatorPath, 'templates')); + +describe(`generator-bot-adaptive --platform ${platform} --integration ${integration}`, function () { + let runResult; + + before(async function () { + runResult = await helpers + .create(generatorPath) + .withArguments([botName]) + .withOptions({ platform, integration }) + .run(); + }); + + after(function () { + if (runResult) { + runResult.restore(); + } + }); + + it(`should create file ${path.join( + botName, + 'appsettings.json' + )}`, function () { + const filePath = path.join(botName, 'appsettings.json'); + const content = reader.getJsonFileContent( + path.join('assets', 'appsettings.json'), + { + luis: { + name: botName, + }, + runtime: { + command: `npm run dev --`, + key: `adaptive-runtime-${platform}-${integration}`, + }, + } + ); + + runResult.assertJsonFileContent(filePath, content); + }); + + it(`should create file ${path.join(botName, 'index.js')}`, function () { + const filePath = path.join(botName, 'index.js'); + const content = reader.getTemplateFileContent( + path.join('js', 'webapp', 'index.js'), + { + settingsDirectory: 'process.cwd()', + } + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + `${botName}.botproj` + )}`, function () { + const filePath = path.join(botName, `${botName}.botproj`); + const content = reader.getJsonFileContent( + path.join('assets', 'botName.botproj'), + { + name: botName, + } + ); + + runResult.assertJsonFileContent(filePath, content); + }); + + it(`should create file ${path.join(botName, 'package.json')}`, function () { + const filePath = path.join(botName, 'package.json'); + const content = { + name: botName, + private: true, + scripts: { + dev: 'cross-env NODE_ENV=dev node index.js', + }, + dependencies: { + 'cross-env': 'latest', + 'botbuilder-ai-luis': '4.13.4-preview', + 'botbuilder-ai-qna': '4.13.4-preview', + 'botbuilder-dialogs-adaptive-runtime-integration-express': + '4.13.4-preview', + }, + }; + + runResult.assertJsonFileContent(filePath, content); + }); + + it(`should create file ${path.join(botName, 'web.config')}`, function () { + const filePath = path.join(botName, 'web.config'); + const content = reader.getFileContent( + path.join('js', 'webapp', 'web.config') + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'schemas', + 'sdk.schema' + )}`, function () { + const filePath = path.join(botName, 'schemas', 'sdk.schema'); + const content = reader.getFileContent( + path.join('assets', 'schemas', 'sdk.schema') + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'schemas', + 'sdk.uischema' + )}`, function () { + const filePath = path.join(botName, 'schemas', 'sdk.uischema'); + const content = reader.getFileContent( + path.join('assets', 'schemas', 'sdk.uischema') + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'schemas', + 'update-schema.ps1' + )}`, function () { + const filePath = path.join(botName, 'schemas', 'update-schema.ps1'); + const content = reader.getFileContent( + path.join('assets', 'schemas', 'update-schema.ps1') + ); + + runResult.assertFileContent(filePath, content); + }); + + it(`should create file ${path.join( + botName, + 'schemas', + 'update-schema.sh' + )}`, function () { + const filePath = path.join(botName, 'schemas', 'update-schema.sh'); + const content = reader.getFileContent( + path.join('assets', 'schemas', 'update-schema.sh') + ); + + runResult.assertFileContent(filePath, content); + }); +}); diff --git a/generators/generator-bot-adaptive/test/templateFileReader.js b/generators/generator-bot-adaptive/test/templateFileReader.js new file mode 100644 index 0000000000..45f8da7b7f --- /dev/null +++ b/generators/generator-bot-adaptive/test/templateFileReader.js @@ -0,0 +1,26 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +const ejs = require('ejs'); +const fs = require('fs'); +const path = require('path'); + +module.exports = class { + constructor(templatesRoot) { + this.templatesRoot = templatesRoot; + } + + getFileContent(relativePath) { + return fs + .readFileSync(path.join(this.templatesRoot, relativePath), 'utf8') + .trim(); + } + + getJsonFileContent(relativePath, data) { + return Object.assign(JSON.parse(this.getFileContent(relativePath)), data); + } + + getTemplateFileContent(relativePath, data) { + return ejs.render(this.getFileContent(relativePath), data); + } +}; diff --git a/generators/generator-bot-core-assistant/generators/app/index.js b/generators/generator-bot-core-assistant/generators/app/index.js index 2ec266b4e9..b19b308c8c 100644 --- a/generators/generator-bot-core-assistant/generators/app/index.js +++ b/generators/generator-bot-core-assistant/generators/app/index.js @@ -9,13 +9,13 @@ const { } = require('@microsoft/generator-bot-adaptive'); const packageReferences = { - [platforms.dotnet]: [ + [platforms.dotnet.name]: [ { name: 'Microsoft.Bot.Components.HelpAndCancel', version: '1.0.0', }, ], - [platforms.js]: [ + [platforms.js.name]: [ { name: '@microsoft/bot-components-helpandcancel', version: 'latest' }, ], }; diff --git a/generators/generator-bot-core-language/generators/app/index.js b/generators/generator-bot-core-language/generators/app/index.js index 1afaed5f05..e831c00de2 100644 --- a/generators/generator-bot-core-language/generators/app/index.js +++ b/generators/generator-bot-core-language/generators/app/index.js @@ -9,7 +9,7 @@ const { } = require('@microsoft/generator-bot-adaptive'); const packageReferences = { - [platforms.dotnet]: [ + [platforms.dotnet.name]: [ { name: 'Microsoft.Bot.Components.HelpAndCancel', version: '1.0.0', @@ -19,7 +19,7 @@ const packageReferences = { version: '1.0.0', }, ], - [platforms.js]: [ + [platforms.js.name]: [ { name: '@microsoft/bot-components-helpandcancel', version: 'latest' }, { name: '@microsoft/bot-components-welcome', version: 'latest' }, ], diff --git a/yarn.lock b/yarn.lock index 7ea6daa0be..faed4e0a0e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -138,15 +138,18 @@ __metadata: version: 0.0.0-use.local resolution: "@microsoft/generator-bot-adaptive@workspace:generators/generator-bot-adaptive" dependencies: + ejs: ^3.1.6 eslint: latest eslint-config-prettier: latest eslint-plugin-prettier: latest globby: ^11.0.2 + mocha: ^8.3.2 normalize-path: ^3.0.0 prettier: latest runtypes: ~5.1.0 uuid: ^8.3.1 - yeoman-generator: ^1.1.1 + yeoman-generator: ^2.0.5 + yeoman-test: ^6.0.0 languageName: unknown linkType: soft @@ -398,6 +401,24 @@ __metadata: languageName: node linkType: hard +"@sinonjs/commons@npm:^1.6.0, @sinonjs/commons@npm:^1.8.1": + version: 1.8.3 + resolution: "@sinonjs/commons@npm:1.8.3" + dependencies: + type-detect: 4.0.8 + checksum: a7f3181512f67bbb9059dc9247febfda6dea58fc2a918360b208c6fde193b0c2cbe628650b0d13b4ba69f144470788eb6c2ef8a84e050dce4808be8511da4316 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^6.0.0, @sinonjs/fake-timers@npm:^6.0.1": + version: 6.0.1 + resolution: "@sinonjs/fake-timers@npm:6.0.1" + dependencies: + "@sinonjs/commons": ^1.7.0 + checksum: 64458b908773638dda08b555a00e6fbbbc679735348291dc1b7f437ada2f60242537fdc48e4ee82d2573d86984ec87e755b66a96c0ed9ebf0f46b4c6687ccde2 + languageName: node + linkType: hard + "@sinonjs/formatio@npm:^2.0.0": version: 2.0.0 resolution: "@sinonjs/formatio@npm:2.0.0" @@ -428,6 +449,17 @@ __metadata: languageName: node linkType: hard +"@sinonjs/samsam@npm:^5.3.1": + version: 5.3.1 + resolution: "@sinonjs/samsam@npm:5.3.1" + dependencies: + "@sinonjs/commons": ^1.6.0 + lodash.get: ^4.4.2 + type-detect: ^4.0.8 + checksum: 0277cd0b71146efed3d243edddc98362adcc25c13e0067b91500fd990792194be64b0ace6f4ba9f98cdec60ee46749e24aad44b46193cfa73096c5ef309b00a1 + languageName: node + linkType: hard + "@sinonjs/text-encoding@npm:^0.7.1": version: 0.7.1 resolution: "@sinonjs/text-encoding@npm:0.7.1" @@ -674,6 +706,13 @@ __metadata: languageName: node linkType: hard +"@ungap/promise-all-settled@npm:1.1.2": + version: 1.1.2 + resolution: "@ungap/promise-all-settled@npm:1.1.2" + checksum: be6c80a2fcea2fc4ed9ccf707da9837c2f501ba21312bf9b39f8b0c4ac7e581ed37909f4f64f8dab0c51c0ae5bdf2a45b59d9a215050876b3f27e6844dba30b6 + languageName: node + linkType: hard + "JSONStream@npm:^1.2.1, JSONStream@npm:^1.3.5": version: 1.3.5 resolution: "JSONStream@npm:1.3.5" @@ -820,20 +859,13 @@ __metadata: languageName: node linkType: hard -"ansi-colors@npm:^4.1.1": +"ansi-colors@npm:4.1.1, ansi-colors@npm:^4.1.1": version: 4.1.1 resolution: "ansi-colors@npm:4.1.1" checksum: 50d8dfbce25602caea1b170ecf4c71c4c9c58d2d1e3186fb5712848c0610d05fe60b8bb6a9eaebd9b54f1db3baf6f603e04214cce597cc7799bc9f47fd9a797a languageName: node linkType: hard -"ansi-escapes@npm:^1.1.0": - version: 1.4.0 - resolution: "ansi-escapes@npm:1.4.0" - checksum: c0e83fa29b2776150b2acc04340a6028a98e8aa11485b2356e09b87d85961b74127a1187cd1a4946e05e17f758cda6e7ec7086945f4f1c3bec3dab9d6ab0d986 - languageName: node - linkType: hard - "ansi-escapes@npm:^3.0.0": version: 3.2.0 resolution: "ansi-escapes@npm:3.2.0" @@ -958,6 +990,13 @@ __metadata: languageName: node linkType: hard +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 160b7a25d2a7097fd5fdf25eb8a99e037340078f70e6c7cfdef305837ed14d54570b2b13261bcae26c8cd44ad6e9a7136a0110d815ac65a7891c69c7bf2f4afd + languageName: node + linkType: hard + "arr-diff@npm:^2.0.0": version: 2.0.0 resolution: "arr-diff@npm:2.0.0" @@ -1128,7 +1167,7 @@ __metadata: languageName: node linkType: hard -"async@npm:^2.0.0, async@npm:^2.1.4, async@npm:^2.6.0, async@npm:^2.6.2, async@npm:^2.6.3": +"async@npm:^2.1.4, async@npm:^2.6.0, async@npm:^2.6.2, async@npm:^2.6.3": version: 2.6.3 resolution: "async@npm:2.6.3" dependencies: @@ -1387,6 +1426,13 @@ __metadata: languageName: node linkType: hard +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: c1b41a26ddc6620eb7f1ee6c29c812f5942a4e328e74263f995872cfb8ca3aee08542beb25cd10fd7ef16e4f16603e25c35a26e776c01fd55277e5035e829e0e + languageName: node + linkType: hard + "base64url@npm:^3.0.0": version: 3.0.1 resolution: "base64url@npm:3.0.1" @@ -1446,6 +1492,13 @@ __metadata: languageName: node linkType: hard +"binaryextensions@npm:^4.15.0": + version: 4.15.0 + resolution: "binaryextensions@npm:4.15.0" + checksum: c594a31c1699460a9786cd3fa57cef73eab9635dc6eba586738ea7f012dcc92d10d00f4ce60c42d2de21b0931b4fdb6b560d8095e515f69e3ebe757f8dd60be1 + languageName: node + linkType: hard + "bindings@npm:^1.5.0": version: 1.5.0 resolution: "bindings@npm:1.5.0" @@ -1455,6 +1508,17 @@ __metadata: languageName: node linkType: hard +"bl@npm:^4.1.0": + version: 4.1.0 + resolution: "bl@npm:4.1.0" + dependencies: + buffer: ^5.5.0 + inherits: ^2.0.4 + readable-stream: ^3.4.0 + checksum: 15d009339c2eeaedb9dab39c48f910a2fd6a9ba11400e61990917ebf3b25fa32cd9b80c7531a95467078258f6a59bd3f5d93323565423a7843855a16a1794261 + languageName: node + linkType: hard + "botbuilder-core@npm:4.13.4": version: 4.13.4 resolution: "botbuilder-core@npm:4.13.4" @@ -1672,6 +1736,13 @@ __metadata: languageName: node linkType: hard +"browser-stdout@npm:1.3.1": + version: 1.3.1 + resolution: "browser-stdout@npm:1.3.1" + checksum: 2f91b1ad26f3401ae68801d901754331811e257aeed4ee0eb287cc2ff375c8fffadb2d14a16654eeb0729e3b1ae6d84642ba7a3119880843d774ee1db2b898b3 + languageName: node + linkType: hard + "bser@npm:2.1.1": version: 2.1.1 resolution: "bser@npm:2.1.1" @@ -1726,6 +1797,16 @@ __metadata: languageName: node linkType: hard +"buffer@npm:^5.5.0": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: ^1.3.1 + ieee754: ^1.1.13 + checksum: 1750ac396eb36e0157ff5299509723ac0681338ef6cd40b039bc86d59c8b9a9494e99db992836eb6d637de0b270b53ec1a62d4a1c9faeaa51468cc340e553984 + languageName: node + linkType: hard + "builtins@npm:^1.0.3": version: 1.0.3 resolution: "builtins@npm:1.0.3" @@ -1803,6 +1884,13 @@ __metadata: languageName: node linkType: hard +"camelcase@npm:^6.0.0": + version: 6.2.0 + resolution: "camelcase@npm:6.2.0" + checksum: 654700600a80cb1f06ab85b3e2fe80333f94b441884d40826becdac549774f51b0317c6dcb6040416df26241fa9481eb58d0c1659d4d6d5627dcd4259be61beb + languageName: node + linkType: hard + "capture-exit@npm:^1.2.0": version: 1.2.0 resolution: "capture-exit@npm:1.2.0" @@ -1826,7 +1914,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^1.0.0, chalk@npm:^1.1.3": +"chalk@npm:^1.1.3": version: 1.1.3 resolution: "chalk@npm:1.1.3" dependencies: @@ -1860,6 +1948,16 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^4.1.1": + version: 4.1.1 + resolution: "chalk@npm:4.1.1" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: 445c12db7aeed0046500a1e4184d31209a77d165654c885a789c41c8598a6a95bd2392180987cac572c967b93a2a730dda778bb7f87fa06ca63fd8592f8cc59f + languageName: node + linkType: hard + "chardet@npm:^0.4.0": version: 0.4.2 resolution: "chardet@npm:0.4.2" @@ -1874,7 +1972,7 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:^3.4.0": +"chokidar@npm:3.5.1, chokidar@npm:^3.4.0": version: 3.5.1 resolution: "chokidar@npm:3.5.1" dependencies: @@ -1907,15 +2005,6 @@ __metadata: languageName: node linkType: hard -"class-extend@npm:^0.1.0": - version: 0.1.2 - resolution: "class-extend@npm:0.1.2" - dependencies: - object-assign: ^2.0.0 - checksum: 094a230862fefb3b1e4b59b55f7b53c8bc00213d9518deaef1baba2d05220644f4fbb20f108012f15eefa4e1fb37ba786c00621aa3c76823461f221198bbdd43 - languageName: node - linkType: hard - "class-utils@npm:^0.3.5": version: 0.3.6 resolution: "class-utils@npm:0.3.6" @@ -1935,15 +2024,6 @@ __metadata: languageName: node linkType: hard -"cli-cursor@npm:^1.0.1": - version: 1.0.2 - resolution: "cli-cursor@npm:1.0.2" - dependencies: - restore-cursor: ^1.0.1 - checksum: 72cd1457558c76665a26b37e539f01f59266274a90ff101719231ce3ebed9d10eb5426942bc2b4b477203e6b3829f88970532347ad168928a99314de90c0d8de - languageName: node - linkType: hard - "cli-cursor@npm:^2.1.0": version: 2.1.0 resolution: "cli-cursor@npm:2.1.0" @@ -1962,6 +2042,13 @@ __metadata: languageName: node linkType: hard +"cli-spinners@npm:^2.5.0": + version: 2.6.0 + resolution: "cli-spinners@npm:2.6.0" + checksum: 653ba6818e0091d4ad7aa052022f6c6a0df0d4674ff6069f6ae366e6130c1eb91a6c332ddfdd2029d234411632ff6428950aa3311872daf515ce54da498c1357 + languageName: node + linkType: hard + "cli-table@npm:^0.3.1": version: 0.3.5 resolution: "cli-table@npm:0.3.5" @@ -1996,6 +2083,17 @@ __metadata: languageName: node linkType: hard +"cliui@npm:^7.0.2": + version: 7.0.4 + resolution: "cliui@npm:7.0.4" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.0 + wrap-ansi: ^7.0.0 + checksum: c49ac1d13f6dda4beaa11b26f62867e0e9892eb985951187d7c691793e0fe08b9bc15cedfaf4dc6d2e9a4d1516704c0c9dcb671ebcd758dbabb18b5d757fbdb5 + languageName: node + linkType: hard + "clone-buffer@npm:^1.0.0": version: 1.0.0 resolution: "clone-buffer@npm:1.0.0" @@ -2030,6 +2128,13 @@ __metadata: languageName: node linkType: hard +"clone@npm:^1.0.2": + version: 1.0.4 + resolution: "clone@npm:1.0.4" + checksum: aaaa58f9906002d9c07630682536cb00581ee02d7a76cfa8573ad59784add4d5d6d4afe894c21899b974044f153f8c5c6419ffc8b1cdde61bf104ad52e3a185d + languageName: node + linkType: hard + "clone@npm:^2.1.1": version: 2.1.2 resolution: "clone@npm:2.1.2" @@ -2141,18 +2246,6 @@ __metadata: languageName: node linkType: hard -"concat-stream@npm:^1.4.7": - version: 1.6.2 - resolution: "concat-stream@npm:1.6.2" - dependencies: - buffer-from: ^1.0.0 - inherits: ^2.0.3 - readable-stream: ^2.2.2 - typedarray: ^0.0.6 - checksum: 7a97b7a7d0938e36800bdb6f5caf938bac8c523a6ec15df1f2ac41d3785541be30a6671c9f4c0d1ac9609e6ab29dcab8f54d1c84035e3e3b7b24f9336da68ab0 - languageName: node - linkType: hard - "console-control-strings@npm:^1.0.0, console-control-strings@npm:~1.1.0": version: 1.1.0 resolution: "console-control-strings@npm:1.1.0" @@ -2208,17 +2301,6 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^5.0.1": - version: 5.1.0 - resolution: "cross-spawn@npm:5.1.0" - dependencies: - lru-cache: ^4.0.1 - shebang-command: ^1.2.0 - which: ^1.2.9 - checksum: 96018c42a94a2f69e27c11688db638c343109e4eda5cc6586a83a1d2f102ef2ef4d184919593036748d386ddb67cc3e66658fefec85a4659958cde792f1a9ddc - languageName: node - linkType: hard - "cross-spawn@npm:^6.0.0, cross-spawn@npm:^6.0.5": version: 6.0.5 resolution: "cross-spawn@npm:6.0.5" @@ -2307,13 +2389,6 @@ __metadata: languageName: node linkType: hard -"dateformat@npm:^2.0.0": - version: 2.2.0 - resolution: "dateformat@npm:2.2.0" - checksum: 8715d47401cc7ed3c16dcfd7f9d7fdb2d514c4f74976030b31679d1ef1f3c97f8da4abb4328ec390a0fa093ffe27a4d20f1267b55128ddcac862466fa9416f1f - languageName: node - linkType: hard - "dateformat@npm:^3.0.3": version: 3.0.3 resolution: "dateformat@npm:3.0.3" @@ -2328,7 +2403,19 @@ __metadata: languageName: node linkType: hard -"debug@npm:^2.0.0, debug@npm:^2.1.0, debug@npm:^2.2.0, debug@npm:^2.3.3, debug@npm:^2.6.8, debug@npm:^2.6.9": +"debug@npm:4.3.1, debug@npm:^4.1.1": + version: 4.3.1 + resolution: "debug@npm:4.3.1" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 0d41ba5177510e8b388dfd7df143ab0f9312e4abdaba312595461511dac88e9ef8101939d33b4e6d37e10341af6a5301082e4d7d6f3deb4d57bc05fc7d296fad + languageName: node + linkType: hard + +"debug@npm:^2.2.0, debug@npm:^2.3.3, debug@npm:^2.6.8, debug@npm:^2.6.9": version: 2.6.9 resolution: "debug@npm:2.6.9" dependencies: @@ -2358,18 +2445,6 @@ __metadata: languageName: node linkType: hard -"debug@npm:^4.1.1": - version: 4.3.1 - resolution: "debug@npm:4.3.1" - dependencies: - ms: 2.1.2 - peerDependenciesMeta: - supports-color: - optional: true - checksum: 0d41ba5177510e8b388dfd7df143ab0f9312e4abdaba312595461511dac88e9ef8101939d33b4e6d37e10341af6a5301082e4d7d6f3deb4d57bc05fc7d296fad - languageName: node - linkType: hard - "decamelize@npm:^1.1.1": version: 1.2.0 resolution: "decamelize@npm:1.2.0" @@ -2377,6 +2452,13 @@ __metadata: languageName: node linkType: hard +"decamelize@npm:^4.0.0": + version: 4.0.0 + resolution: "decamelize@npm:4.0.0" + checksum: 3846161a3b6ba7043dd0e8cb8101676fcbd92a60bd228e63fe17116ebfaddff8d730e33c9e93a9e02c049c53e0e37013174225f27b95bb21d703359999a4aab9 + languageName: node + linkType: hard + "decode-uri-component@npm:^0.2.0": version: 0.2.0 resolution: "decode-uri-component@npm:0.2.0" @@ -2393,13 +2475,6 @@ __metadata: languageName: node linkType: hard -"deep-extend@npm:^0.4.0": - version: 0.4.2 - resolution: "deep-extend@npm:0.4.2" - checksum: fc6df90e4e29ff70090a4b28a85eec1b87a65a8dfa731cc1b298d41fd6a3e18fa643e1ee80cc9089401c427eb4d9fbe687f2a895d6676a3a86668e6daa517297 - languageName: node - linkType: hard - "deep-extend@npm:^0.6.0": version: 0.6.0 resolution: "deep-extend@npm:0.6.0" @@ -2423,6 +2498,15 @@ __metadata: languageName: node linkType: hard +"defaults@npm:^1.0.3": + version: 1.0.3 + resolution: "defaults@npm:1.0.3" + dependencies: + clone: ^1.0.2 + checksum: 974f63dd0acb79d14e94ac0f2ea69a880ab2a6e4b341bb9bdc2409b4091b928abe2709a4e140528948d02f29c286efdef22851d1dc972636eed2ce8e1c5b7465 + languageName: node + linkType: hard + "define-properties@npm:^1.1.3": version: 1.1.3 resolution: "define-properties@npm:1.1.3" @@ -2504,10 +2588,10 @@ __metadata: languageName: node linkType: hard -"diff@npm:^2.1.2": - version: 2.2.3 - resolution: "diff@npm:2.2.3" - checksum: 42660ec943d924b90d212843432e4788bfbbbda4b32ee5e6873dd4e9490fe9f080c9555c0e9accb4865ea2d42f14297c399292aa141c92d05d868692e032c69b +"diff@npm:5.0.0": + version: 5.0.0 + resolution: "diff@npm:5.0.0" + checksum: ef241d3b20017b8a1a6f20d184035b836de662203638e16eb57267653a56392ea82e1f9c12b28836e6e22aa25c28c59847aaeb35dd65e77e75c822c7e848e7e8 languageName: node linkType: hard @@ -2518,7 +2602,7 @@ __metadata: languageName: node linkType: hard -"diff@npm:^4.0.1": +"diff@npm:^4.0.1, diff@npm:^4.0.2": version: 4.0.2 resolution: "diff@npm:4.0.2" checksum: 81b5cd7ddde6f0ba2a532d434cfdca365aedd6cc62bb133e851e66e071d40382a30924a07c1034bd3d5a2e332146f64514b73c06fe2ebc0490a67f0c98da79fb @@ -2656,14 +2740,14 @@ __metadata: languageName: node linkType: hard -"ejs@npm:^2.3.1, ejs@npm:^2.5.9, ejs@npm:^2.6.1": +"ejs@npm:^2.5.9, ejs@npm:^2.6.1": version: 2.7.4 resolution: "ejs@npm:2.7.4" checksum: f066d9a932fb921bdb6e87133d747d5e3408a1c1303f9a15e5a7a3973afdf444a672c98c2f6d97b9a1a76363bd8ae6d05286f26c6b6b7b9674dfc5802fc8546d languageName: node linkType: hard -"ejs@npm:^3.1.5": +"ejs@npm:^3.1.5, ejs@npm:^3.1.6": version: 3.1.6 resolution: "ejs@npm:3.1.6" dependencies: @@ -2773,6 +2857,20 @@ __metadata: languageName: node linkType: hard +"escalade@npm:^3.1.1": + version: 3.1.1 + resolution: "escalade@npm:3.1.1" + checksum: 1e31ff50d66f47cd0dfffa702061127116ccf9886d1f54a802a7b3bc95b94cab0cbf5b145cc5ac199036df6fd9d1bb24af1fa1bfed87c94879e950fbee5f86d1 + languageName: node + linkType: hard + +"escape-string-regexp@npm:4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: c747be8d5ff7873127e3e0cffe7d2206a37208077fa9c30a3c1bb4f26bebd081c8c24d5fba7a99449f9d20670bea3dc5e1b6098b0f074b099bd38766271a272f + languageName: node + linkType: hard + "escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" @@ -3013,13 +3111,6 @@ __metadata: languageName: node linkType: hard -"exit-hook@npm:^1.0.0": - version: 1.1.1 - resolution: "exit-hook@npm:1.1.1" - checksum: 4f89f35c225f6e28e86e85770185a02d650162e93e671a1040315a86f42fdf851f837152b2c38ded703eaae8e9934cb0f8db217a2896ff01d8125879cad1101a - languageName: node - linkType: hard - "exit@npm:^0.1.2": version: 0.1.2 resolution: "exit@npm:0.1.2" @@ -3093,24 +3184,13 @@ __metadata: languageName: node linkType: hard -"extend@npm:^3.0.0, extend@npm:~3.0.2": +"extend@npm:~3.0.2": version: 3.0.2 resolution: "extend@npm:3.0.2" checksum: 1406da1f0c4b00b839497e4cdd0ec4303ce2ae349144b7c28064a5073c93ce8c08da4e8fb1bc5cb459ffcdff30a35fc0fe54344eb88320e70100c1baea6f195c languageName: node linkType: hard -"external-editor@npm:^1.1.0": - version: 1.1.1 - resolution: "external-editor@npm:1.1.1" - dependencies: - extend: ^3.0.0 - spawn-sync: ^1.0.15 - tmp: ^0.0.29 - checksum: 0c682c3322e3eb5d4ac1776a7a912c5810893cdbbd0801605e6140e4125e6d85ff9ca7775e05202341ab4f516a780c58fd31b9e6ba2291e8531e9c501f9c19e0 - languageName: node - linkType: hard - "external-editor@npm:^2.1.0": version: 2.2.0 resolution: "external-editor@npm:2.2.0" @@ -3246,16 +3326,6 @@ __metadata: languageName: node linkType: hard -"figures@npm:^1.3.5": - version: 1.7.0 - resolution: "figures@npm:1.7.0" - dependencies: - escape-string-regexp: ^1.0.5 - object-assign: ^4.1.0 - checksum: 17f76820de5201632650d0ea10b5485111677df96423a2401158e85eeb277344551fea908d4ca7407f4fa99ac2e7a70839ece89ce6185e7fa6787245aeb7fd87 - languageName: node - linkType: hard - "figures@npm:^2.0.0": version: 2.0.0 resolution: "figures@npm:2.0.0" @@ -3368,6 +3438,16 @@ __metadata: languageName: node linkType: hard +"find-up@npm:5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: ^6.0.0 + path-exists: ^4.0.0 + checksum: cd0b77415bc59e5af31e4e1b29c6ff8d965d9ca3c60a4b74161f8f116c0d1ad8d35bc6e53bf8f92c69e704e98183f1628a363ed7d519eb28eff54378b8f167a7 + languageName: node + linkType: hard + "find-up@npm:^1.0.0": version: 1.1.2 resolution: "find-up@npm:1.1.2" @@ -3415,6 +3495,15 @@ __metadata: languageName: node linkType: hard +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" + bin: + flat: cli.js + checksum: 549b3012e9c8e90da9eab25c283443a39a6c5b0a35a6d382827e4bfc5e88161d1dac5faf667f6255571a42edc58e679b432a1452b9bdbd7ab16718a740bef556 + languageName: node + linkType: hard + "flatted@npm:^3.1.0": version: 3.1.1 resolution: "flatted@npm:3.1.1" @@ -3626,6 +3715,13 @@ fsevents@~2.3.1: languageName: node linkType: hard +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: 9dd9e1e2591039ee4c38c897365b904f66f1e650a8c1cb7b7db8ce667fa63e88cc8b13282b74df9d93de481114b3304a0487880d31cd926dfda6efe71455855d + languageName: node + linkType: hard + "get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1": version: 1.1.1 resolution: "get-intrinsic@npm:1.1.1" @@ -3761,20 +3857,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"glob@npm:^6.0.1": - version: 6.0.4 - resolution: "glob@npm:6.0.4" - dependencies: - inflight: ^1.0.4 - inherits: 2 - minimatch: 2 || 3 - once: ^1.3.0 - path-is-absolute: ^1.0.0 - checksum: 83f9fcdca06df4a40cbf99f20877dbadc0def23fab197303a9a96f726e2f003d6c442b8d455b93745c0d05e6dd574929526db47852f12b762bc93023ba7e84db - languageName: node - linkType: hard - -"glob@npm:^7.0.0, glob@npm:^7.0.3, glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4": +"glob@npm:7.1.6, glob@npm:^7.0.0, glob@npm:^7.0.3, glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4": version: 7.1.6 resolution: "glob@npm:7.1.6" dependencies: @@ -3813,7 +3896,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"globby@npm:^11.0.1": +"globby@npm:^11.0.1, globby@npm:^11.0.3": version: 11.0.3 resolution: "globby@npm:11.0.3" dependencies: @@ -3841,33 +3924,6 @@ fsevents@~2.3.1: languageName: node linkType: hard -"globby@npm:^4.0.0": - version: 4.1.0 - resolution: "globby@npm:4.1.0" - dependencies: - array-union: ^1.0.1 - arrify: ^1.0.0 - glob: ^6.0.1 - object-assign: ^4.0.1 - pify: ^2.0.0 - pinkie-promise: ^2.0.0 - checksum: 2d974923450c9fade708c93ff28b17c0bc307fad677d2646564a3c034e69da7f67c50035ffc5cc0eea5660f029e1a49cd0967183809a54d10bacf73b2f8faed4 - languageName: node - linkType: hard - -"globby@npm:^6.1.0": - version: 6.1.0 - resolution: "globby@npm:6.1.0" - dependencies: - array-union: ^1.0.1 - glob: ^7.0.3 - object-assign: ^4.0.1 - pify: ^2.0.0 - pinkie-promise: ^2.0.0 - checksum: 7acac933247f203624c502e6db54995d355ae2ce618be40a6a125c73bac9fa1bb775cf2b0959d92807605534f7b29cf711bc354febb8a6dc2ecbaa1cbf59efa5 - languageName: node - linkType: hard - "globby@npm:^7.1.1": version: 7.1.1 resolution: "globby@npm:7.1.1" @@ -3993,15 +4049,6 @@ fsevents@~2.3.1: languageName: node linkType: hard -"grouped-queue@npm:^0.3.0": - version: 0.3.3 - resolution: "grouped-queue@npm:0.3.3" - dependencies: - lodash: ^4.17.2 - checksum: ed0952865c6e33bad91fbffaa8169a3e15850b9eee9fcd381cd96930f6c9be2074f1c731f785470d316d26bde896efc0df692e65c267cd779fe63c107cf27d18 - languageName: node - linkType: hard - "grouped-queue@npm:^1.1.0": version: 1.1.0 resolution: "grouped-queue@npm:1.1.0" @@ -4011,6 +4058,13 @@ fsevents@~2.3.1: languageName: node linkType: hard +"growl@npm:1.10.5": + version: 1.10.5 + resolution: "growl@npm:1.10.5" + checksum: e1dae8dde6e43aa7e18c864094f4690b3a48cf45779b9302a18c24b90a7038084ecffb931f89b52ce76fffd72123ae46755c0b5abca541de5eef75879e610257 + languageName: node + linkType: hard + "growly@npm:^1.3.0": version: 1.3.0 resolution: "growly@npm:1.3.0" @@ -4168,6 +4222,15 @@ fsevents@~2.3.1: languageName: node linkType: hard +"he@npm:1.2.0": + version: 1.2.0 + resolution: "he@npm:1.2.0" + bin: + he: bin/he + checksum: 212122003c20c8c17ac0c83a419b4c8e835411ff6ab9195d053ea6e4a0597cc005b5b8eabcbd57b0b0c0fe676f0049e09315845fff4e051198845491cbba260e + languageName: node + linkType: hard + "home-or-tmp@npm:^2.0.0": version: 2.0.0 resolution: "home-or-tmp@npm:2.0.0" @@ -4240,6 +4303,13 @@ fsevents@~2.3.1: languageName: node linkType: hard +"ieee754@npm:^1.1.13": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 6c1cfab995ecab3b0dbb6cfb7e192686eb02f0f8e788f2d962e1fc02e2d5ab38a85e06d417221f136bd029663a77cdb920d99605d68d3730a05597dd7910426a + languageName: node + linkType: hard + "ignore@npm:^3.3.5": version: 3.3.10 resolution: "ignore@npm:3.3.10" @@ -4339,28 +4409,6 @@ fsevents@~2.3.1: languageName: node linkType: hard -"inquirer@npm:^1.0.2": - version: 1.2.3 - resolution: "inquirer@npm:1.2.3" - dependencies: - ansi-escapes: ^1.1.0 - chalk: ^1.0.0 - cli-cursor: ^1.0.1 - cli-width: ^2.0.0 - external-editor: ^1.1.0 - figures: ^1.3.5 - lodash: ^4.3.0 - mute-stream: 0.0.6 - pinkie-promise: ^2.0.0 - run-async: ^2.2.0 - rx: ^4.1.0 - string-width: ^1.0.1 - strip-ansi: ^3.0.0 - through: ^2.3.6 - checksum: 189a0fb7c7c27075c79103240ccaaa50d614f12f0150378059c3eaf510b82a7594543fd6f1d8fda12eac0db07f6e6c4d120dac3f62e4f03ad13ed39a458e7f06 - languageName: node - linkType: hard - "inquirer@npm:^5.2.0": version: 5.2.0 resolution: "inquirer@npm:5.2.0" @@ -4403,6 +4451,28 @@ fsevents@~2.3.1: languageName: node linkType: hard +"inquirer@npm:^8.0.0": + version: 8.1.0 + resolution: "inquirer@npm:8.1.0" + dependencies: + ansi-escapes: ^4.2.1 + chalk: ^4.1.1 + cli-cursor: ^3.1.0 + cli-width: ^3.0.0 + external-editor: ^3.0.3 + figures: ^3.0.0 + lodash: ^4.17.21 + mute-stream: 0.0.8 + ora: ^5.3.0 + run-async: ^2.4.0 + rxjs: ^6.6.6 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + through: ^2.3.6 + checksum: 386a465a5045d2968a7eaae8d84fed3c4fcec7cbf8bfd030541e8ea82b8f7a2132f98935b1321a3d0af39c196a09f38bb3cfd3105d7812799062235e45839b11 + languageName: node + linkType: hard + "interpret@npm:^1.0.0": version: 1.4.0 resolution: "interpret@npm:1.4.0" @@ -4677,6 +4747,13 @@ fsevents@~2.3.1: languageName: node linkType: hard +"is-interactive@npm:^1.0.0": + version: 1.0.0 + resolution: "is-interactive@npm:1.0.0" + checksum: d79b435e5134ccd60dfe035117b1cddd5c5100e90b2d33428adfe1667e26f0114cc1bc7b3ff84a1b107de8ef27f155e3ecc3bb08c0e502a15c66300b4a45d9e5 + languageName: node + linkType: hard + "is-negative-zero@npm:^2.0.1": version: 2.0.1 resolution: "is-negative-zero@npm:2.0.1" @@ -4737,7 +4814,14 @@ fsevents@~2.3.1: languageName: node linkType: hard -"is-plain-object@npm:^2.0.3, is-plain-object@npm:^2.0.4": +"is-plain-obj@npm:^2.1.0": + version: 2.1.0 + resolution: "is-plain-obj@npm:2.1.0" + checksum: 2314302f9140d1e9607731d523f207d8000281aebbabe0083210342c0758976f75f0f5db405e55910bd4dc9a04baddbeab9d476290642b5a0d31431cc9bda4b3 + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.3, is-plain-object@npm:^2.0.4": version: 2.0.4 resolution: "is-plain-object@npm:2.0.4" dependencies: @@ -4830,6 +4914,13 @@ fsevents@~2.3.1: languageName: node linkType: hard +"is-unicode-supported@npm:^0.1.0": + version: 0.1.0 + resolution: "is-unicode-supported@npm:0.1.0" + checksum: 00ca6f5581b81d55c567d259175cb1af08c60ae95f6aad69adadfdfbe098c60ef5617ad440770d821f1710773987c0b13ed6dd375cd9ab1bd7b7dd8f9a42625c + languageName: node + linkType: hard + "is-utf8@npm:^0.2.0, is-utf8@npm:^0.2.1": version: 0.2.1 resolution: "is-utf8@npm:0.2.1" @@ -4881,6 +4972,13 @@ fsevents@~2.3.1: languageName: node linkType: hard +"isbinaryfile@npm:^4.0.8": + version: 4.0.8 + resolution: "isbinaryfile@npm:4.0.8" + checksum: 414258852a8962a0e1c6dcbebfc0422489cc7684488fcde6f08de2378596d4888696b3593b40df5f9c7897538891d006fd3edc35994cc75473d71e4012aa2263 + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -4995,7 +5093,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"istextorbinary@npm:^2.1.0, istextorbinary@npm:^2.2.1, istextorbinary@npm:^2.5.1": +"istextorbinary@npm:^2.2.1, istextorbinary@npm:^2.5.1": version: 2.6.0 resolution: "istextorbinary@npm:2.6.0" dependencies: @@ -5421,6 +5519,17 @@ fsevents@~2.3.1: languageName: node linkType: hard +"js-yaml@npm:4.0.0": + version: 4.0.0 + resolution: "js-yaml@npm:4.0.0" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: ee9b16cdbba690ec70f46d61737b28b35e26e6d51606c466de7fa876d3517de0cfdffd2e1ef21263d5ca3b32659d2e4c65255f50d6e236f022305bce72242d46 + languageName: node + linkType: hard + "js-yaml@npm:^3.13.1, js-yaml@npm:^3.7.0": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" @@ -5752,18 +5861,6 @@ fsevents@~2.3.1: languageName: node linkType: hard -"load-json-file@npm:^2.0.0": - version: 2.0.0 - resolution: "load-json-file@npm:2.0.0" - dependencies: - graceful-fs: ^4.1.2 - parse-json: ^2.2.0 - pify: ^2.0.0 - strip-bom: ^3.0.0 - checksum: c6ea93d36099dd6e778c6c018c9e184ad65d278a9538c2280f959b040b1a9a756d8856bdaf8a38c8f1454eca19bf4798ea59f79ccd8bb1c33aa8b7ecbe157f0c - languageName: node - linkType: hard - "load-json-file@npm:^4.0.0": version: 4.0.0 resolution: "load-json-file@npm:4.0.0" @@ -5796,6 +5893,15 @@ fsevents@~2.3.1: languageName: node linkType: hard +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: ^5.0.0 + checksum: 4c379638152e0e5fda9a8cc07005702f81fcb9899db0f66d691ac1e64193dea670af14e96c50f14d82d45959daa4c400cb712c158cffe22ae265bfc1b1e3a221 + languageName: node + linkType: hard + "lodash.escaperegexp@npm:^4.1.2": version: 4.1.2 resolution: "lodash.escaperegexp@npm:4.1.2" @@ -5908,19 +6014,19 @@ fsevents@~2.3.1: languageName: node linkType: hard -"lodash@npm:^4.11.1, lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.2, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.3.0": +"lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.3.0": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: 4983720b9abca930a4a46f18db163d7dad8dd00dbed6db0cc7b499b33b717cce69f80928b27bbb1ff2cbd3b19d251ee90669a8b5ea466072ca81c2ebe91e7468 languageName: node linkType: hard -"log-symbols@npm:^1.0.1": - version: 1.0.2 - resolution: "log-symbols@npm:1.0.2" +"log-symbols@npm:4.0.0": + version: 4.0.0 + resolution: "log-symbols@npm:4.0.0" dependencies: - chalk: ^1.0.0 - checksum: 69ba19d52b32bdcc659752321bc89e21d697088b7dce8ed1fed9582e3e37eef6a859502eeb721d8b7d08f0b5cb3d92b16a4321e01393ba8bace23f2a834be077 + chalk: ^4.0.0 + checksum: 2cbdb0427d1853f2bd36645bff42aaca200902284f28aadacb3c0fa4c8c43fe6bfb71b5d61ab08b67063d066d7c55b8bf5fbb43b03e4a150dbcdd643e9cd1dbf languageName: node linkType: hard @@ -5933,6 +6039,16 @@ fsevents@~2.3.1: languageName: node linkType: hard +"log-symbols@npm:^4.1.0": + version: 4.1.0 + resolution: "log-symbols@npm:4.1.0" + dependencies: + chalk: ^4.1.0 + is-unicode-supported: ^0.1.0 + checksum: 57be4aeb6a6ecb81d8267600836f81928da1d846ad13384a9a22d179e27590fdb680946edbd15642a31735183adaa3dc6aae2d20e619a19fa0d54e1aee945915 + languageName: node + linkType: hard + "lolex@npm:^2.4.2": version: 2.7.5 resolution: "lolex@npm:2.7.5" @@ -5974,16 +6090,6 @@ fsevents@~2.3.1: languageName: node linkType: hard -"lru-cache@npm:^4.0.1": - version: 4.1.5 - resolution: "lru-cache@npm:4.1.5" - dependencies: - pseudomap: ^1.0.2 - yallist: ^2.1.2 - checksum: 6a098d23629357451d4324e1e4fefccdd6df316df29e25571c6148220ced923258381ebeafdf919f90e28c780b650427390582618c1d5fe097873e656d062511 - languageName: node - linkType: hard - "lru-cache@npm:^5.1.1": version: 5.1.1 resolution: "lru-cache@npm:5.1.1" @@ -6061,24 +6167,6 @@ fsevents@~2.3.1: languageName: node linkType: hard -"mem-fs-editor@npm:^3.0.0": - version: 3.0.2 - resolution: "mem-fs-editor@npm:3.0.2" - dependencies: - commondir: ^1.0.1 - deep-extend: ^0.4.0 - ejs: ^2.3.1 - glob: ^7.0.3 - globby: ^6.1.0 - mkdirp: ^0.5.0 - multimatch: ^2.0.0 - rimraf: ^2.2.8 - through2: ^2.0.0 - vinyl: ^2.0.1 - checksum: 8d601d09082ff1d152ab90278eea3eb7170631dbfaa351b5b79a479f4e04207ed99569773f8b4afe18045e86826b55ac5526f18a40c863e97cbbb8011d04eb5e - languageName: node - linkType: hard - "mem-fs-editor@npm:^4.0.0": version: 4.0.3 resolution: "mem-fs-editor@npm:4.0.3" @@ -6155,6 +6243,28 @@ fsevents@~2.3.1: languageName: node linkType: hard +"mem-fs-editor@npm:^9.0.0": + version: 9.0.1 + resolution: "mem-fs-editor@npm:9.0.1" + dependencies: + binaryextensions: ^4.15.0 + commondir: ^1.0.1 + deep-extend: ^0.6.0 + ejs: ^3.1.6 + globby: ^11.0.3 + isbinaryfile: ^4.0.8 + multimatch: ^5.0.0 + normalize-path: ^3.0.0 + textextensions: ^5.12.0 + peerDependencies: + mem-fs: ^2.1.0 + peerDependenciesMeta: + mem-fs: + optional: true + checksum: 09a4115d1447795e03d7e26dab0c283137465deeb444c9966311001012135a967596447c8dd2e14ff86064d2688fbf0d6ef6ba598054a01aec702b57f4bffaaf + languageName: node + linkType: hard + "mem-fs@npm:^1.1.0": version: 1.2.0 resolution: "mem-fs@npm:1.2.0" @@ -6296,7 +6406,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"minimatch@npm:2 || 3, minimatch@npm:^3.0.0, minimatch@npm:^3.0.3, minimatch@npm:^3.0.4": +"minimatch@npm:3.0.4, minimatch@npm:^3.0.0, minimatch@npm:^3.0.3, minimatch@npm:^3.0.4": version: 3.0.4 resolution: "minimatch@npm:3.0.4" dependencies: @@ -6361,6 +6471,42 @@ fsevents@~2.3.1: languageName: node linkType: hard +"mocha@npm:^8.3.2": + version: 8.3.2 + resolution: "mocha@npm:8.3.2" + dependencies: + "@ungap/promise-all-settled": 1.1.2 + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.1 + debug: 4.3.1 + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.1.6 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 4.0.0 + log-symbols: 4.0.0 + minimatch: 3.0.4 + ms: 2.1.3 + nanoid: 3.1.20 + serialize-javascript: 5.0.1 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + which: 2.0.2 + wide-align: 1.1.3 + workerpool: 6.1.0 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + bin: + _mocha: bin/_mocha + mocha: bin/mocha + checksum: ac4f359cf4dbd3a01202d0a5ef06533b9513ae293a411b3c0743dbeff03ffcfe444636127cc103634e07c932ec2eda104c2e1e8e259d16efd7e07a0a900eb2f4 + languageName: node + linkType: hard + "moment@npm:^2.15.1, moment@npm:^2.24.0": version: 2.29.1 resolution: "moment@npm:2.29.1" @@ -6382,7 +6528,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"ms@npm:^2.0.0, ms@npm:^2.1.1": +"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: 6e721e648a544154d5de4c114b32f573d8027ca8ec505cf6c1105e505986d6ac46934a1256735aa0eece8eb2f5b2a1230503b2dddd3b100f9f016fd8a4f15f33 @@ -6414,10 +6560,16 @@ fsevents@~2.3.1: languageName: node linkType: hard -"mute-stream@npm:0.0.6": - version: 0.0.6 - resolution: "mute-stream@npm:0.0.6" - checksum: 0fab9c5a25c6a7fa21be1414b1c8226227e543fbcbfc8f72a8755adc933364152878bf0875f4b8cfff417471d390a0cdbe725aea722e58007e66f965991ee260 +"multimatch@npm:^5.0.0": + version: 5.0.0 + resolution: "multimatch@npm:5.0.0" + dependencies: + "@types/minimatch": ^3.0.3 + array-differ: ^3.0.0 + array-union: ^2.1.0 + arrify: ^2.0.1 + minimatch: ^3.0.4 + checksum: 93fcf94313d5a62c9eac21cda21201651af7ad4fdb89c3e35d8b6031568d656f0a7a79c7275bdb2e3446994e9b7ee317b8a8cdf81c74d30e52dc8d92a2aba48b languageName: node linkType: hard @@ -6444,6 +6596,15 @@ fsevents@~2.3.1: languageName: node linkType: hard +"nanoid@npm:3.1.20": + version: 3.1.20 + resolution: "nanoid@npm:3.1.20" + bin: + nanoid: bin/nanoid.cjs + checksum: 4788d36edcfec7bb32ddf33ed8f1f46df2867f70e9b1993bb131f7677e04ead2b621e5d614d2736308be18db1d54208d8ab207b4586bd5b052f71fb9d4c0ebea + languageName: node + linkType: hard + "nanomatch@npm:^1.2.9": version: 1.2.13 resolution: "nanomatch@npm:1.2.13" @@ -6497,6 +6658,19 @@ fsevents@~2.3.1: languageName: node linkType: hard +"nise@npm:^4.1.0": + version: 4.1.0 + resolution: "nise@npm:4.1.0" + dependencies: + "@sinonjs/commons": ^1.7.0 + "@sinonjs/fake-timers": ^6.0.0 + "@sinonjs/text-encoding": ^0.7.1 + just-extend: ^4.0.2 + path-to-regexp: ^1.7.0 + checksum: 87b37725d9e0e6dc951caa40685f8726d028ac48ca87e71773cbb705e2736e084cc3087530a92b9ebe87163212ee477d37318875984b1093f79bae600ce6d7c4 + languageName: node + linkType: hard + "node-fetch@npm:2.6.1, node-fetch@npm:^2.6.0": version: 2.6.1 resolution: "node-fetch@npm:2.6.1" @@ -6671,14 +6845,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"object-assign@npm:^2.0.0": - version: 2.1.1 - resolution: "object-assign@npm:2.1.1" - checksum: d164bf221d0bfdc70bf1c153a2a172ea328d1de83c9f5b9f81523ff77d951f84ed4a41d4b3b106d91a0f8b588e4281050b8d9b44dc1edb304ce9b8af70d91297 - languageName: node - linkType: hard - -"object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": +"object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: 66cf021898fc1b13ea573ea8635fbd5a76533f50cecbc2fcd5eee1e8029af41bcebe7023788b6d0e06cbe4401ecea075d972f78ec74467cdc571a0f1a4d1a081 @@ -6770,13 +6937,6 @@ fsevents@~2.3.1: languageName: node linkType: hard -"onetime@npm:^1.0.0": - version: 1.1.0 - resolution: "onetime@npm:1.1.0" - checksum: ddf13ecba8d11048dfd3a8b99c30a509ec0f629cc46b5bbfcfc78442f39385aa7512e92ac8d1fd980c2649bde515ffede5c14223767f7f6f96b1aab33d11f6b3 - languageName: node - linkType: hard - "onetime@npm:^2.0.0": version: 2.0.1 resolution: "onetime@npm:2.0.1" @@ -6823,6 +6983,23 @@ fsevents@~2.3.1: languageName: node linkType: hard +"ora@npm:^5.3.0": + version: 5.4.1 + resolution: "ora@npm:5.4.1" + dependencies: + bl: ^4.1.0 + chalk: ^4.1.0 + cli-cursor: ^3.1.0 + cli-spinners: ^2.5.0 + is-interactive: ^1.0.0 + is-unicode-supported: ^0.1.0 + log-symbols: ^4.1.0 + strip-ansi: ^6.0.0 + wcwidth: ^1.0.1 + checksum: 589ac687d6dfbac970f1bf4ec94f3e1cfc9e2a4dd4727a0c60dfcdef138f59b5de5694447881fa5a2793a91f0b2619a96bdd3d5425be30d155540abbe1df95b9 + languageName: node + linkType: hard + "os-homedir@npm:^1.0.0": version: 1.0.2 resolution: "os-homedir@npm:1.0.2" @@ -6841,14 +7018,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"os-shim@npm:^0.1.2": - version: 0.1.3 - resolution: "os-shim@npm:0.1.3" - checksum: 47bee41866f6b8d758aec783297075c16f383c6f1cc8d2566aa0398948d9a8ffaa02642462482e3b3f38e1f8a5a628dafccf2dc81e8860eb8fcbaec0b20cf20d - languageName: node - linkType: hard - -"os-tmpdir@npm:^1.0.1, os-tmpdir@npm:~1.0.1, os-tmpdir@npm:~1.0.2": +"os-tmpdir@npm:^1.0.1, os-tmpdir@npm:~1.0.2": version: 1.0.2 resolution: "os-tmpdir@npm:1.0.2" checksum: ca158a3c2e48748adc7736cdbe4c593723f8ed8581d2aae2f2a30fdb9417d4ba14bed1cd487d47561898a7b1ece88bce69745e9ce0303e1dea9ea7d22d1f1082 @@ -6915,6 +7085,15 @@ fsevents@~2.3.1: languageName: node linkType: hard +"p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 5301db6a34fc1fe3714ae562c100a0567d8c16ce9db800f547bbe75efc045c40cd74c4a4c893279975dcf15afc1217c8d2c93fe957a156a3a43d7cce98eaad2e + languageName: node + linkType: hard + "p-locate@npm:^2.0.0": version: 2.0.0 resolution: "p-locate@npm:2.0.0" @@ -6933,6 +7112,15 @@ fsevents@~2.3.1: languageName: node linkType: hard +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: ^3.0.2 + checksum: a233d775c870e00c734adabd29f66f93824df076683c0d5a2dc16e5285b02d80c1bf3bab43b9881e4a5b16b37bb86f1922aebb094674703d30a4973041d5c0f6 + languageName: node + linkType: hard + "p-timeout@npm:^1.1.1": version: 1.2.1 resolution: "p-timeout@npm:1.2.1" @@ -7063,6 +7251,13 @@ fsevents@~2.3.1: languageName: node linkType: hard +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 6ab15000c5bea4f3e6e6b651983276e27ee42907ea29f5bd68f0d5c425c22f1664ab53c355099723f59b0bfd31aa52d29ea499e1843bf62543e045698f4c77b2 + languageName: node + linkType: hard + "path-is-absolute@npm:^1.0.0, path-is-absolute@npm:^1.0.1": version: 1.0.1 resolution: "path-is-absolute@npm:1.0.1" @@ -7111,15 +7306,6 @@ fsevents@~2.3.1: languageName: node linkType: hard -"path-type@npm:^2.0.0": - version: 2.0.0 - resolution: "path-type@npm:2.0.0" - dependencies: - pify: ^2.0.0 - checksum: d028f828dffe48a0062dc4370d5118a0c45f5fb075b013a1dfb13eadd1426eba0c8c2a13fa78f19fc4fd8771ef2012e9d062f8f970c8e56df36d4fbbe5073b26 - languageName: node - linkType: hard - "path-type@npm:^3.0.0": version: 3.0.0 resolution: "path-type@npm:3.0.0" @@ -7342,13 +7528,6 @@ fsevents@~2.3.1: languageName: node linkType: hard -"pseudomap@npm:^1.0.2": - version: 1.0.2 - resolution: "pseudomap@npm:1.0.2" - checksum: 1ad1802645e830d99f9c1db97efc6902d2316b660454633229f636dd59e751d00498dd325d3b18d49f2be990a2c9d28f8bfe6f9b544a8220a5faa2bfb4694bb7 - languageName: node - linkType: hard - "psl@npm:^1.1.28": version: 1.8.0 resolution: "psl@npm:1.8.0" @@ -7409,6 +7588,15 @@ fsevents@~2.3.1: languageName: node linkType: hard +"randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: ^5.1.0 + checksum: ede2693af09732ceab1c273dd70db787f34a7b8d95bab13f1aca763483c0113452a78e53d61ff18d393dcea586d388e01f198a5132a4a85cebba31ec54164b75 + languageName: node + linkType: hard + "rc@npm:^1.0.1": version: 1.2.8 resolution: "rc@npm:1.2.8" @@ -7423,7 +7611,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"read-chunk@npm:^2.0.0, read-chunk@npm:^2.1.0": +"read-chunk@npm:^2.1.0": version: 2.1.0 resolution: "read-chunk@npm:2.1.0" dependencies: @@ -7453,16 +7641,6 @@ fsevents@~2.3.1: languageName: node linkType: hard -"read-pkg-up@npm:^2.0.0": - version: 2.0.0 - resolution: "read-pkg-up@npm:2.0.0" - dependencies: - find-up: ^2.0.0 - read-pkg: ^2.0.0 - checksum: f35e4cb4577b994fc9497886672c748de766ab034e24f029111b6bbbfe757b2e27b6d2b82a28a38f45d9d89ea8a9b1d3c04854e5f991d5deed48f4c9ff7baeb9 - languageName: node - linkType: hard - "read-pkg-up@npm:^3.0.0": version: 3.0.0 resolution: "read-pkg-up@npm:3.0.0" @@ -7504,17 +7682,6 @@ fsevents@~2.3.1: languageName: node linkType: hard -"read-pkg@npm:^2.0.0": - version: 2.0.0 - resolution: "read-pkg@npm:2.0.0" - dependencies: - load-json-file: ^2.0.0 - normalize-package-data: ^2.3.2 - path-type: ^2.0.0 - checksum: ddf911317fba54abb447b1d76dd1785c37e1360f7b1e39d83201f6f3807572391ab7392f11727a9c4d90600ebc6616d22e72514d2291688c89ebd440148840b4 - languageName: node - linkType: hard - "read-pkg@npm:^3.0.0": version: 3.0.0 resolution: "read-pkg@npm:3.0.0" @@ -7538,7 +7705,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"readable-stream@npm:2 || 3": +"readable-stream@npm:2 || 3, readable-stream@npm:^3.4.0": version: 3.6.0 resolution: "readable-stream@npm:3.6.0" dependencies: @@ -7549,7 +7716,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.6, readable-stream@npm:^2.2.2, readable-stream@npm:^2.3.5, readable-stream@npm:~2.3.6": +"readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.6, readable-stream@npm:^2.3.5, readable-stream@npm:~2.3.6": version: 2.3.7 resolution: "readable-stream@npm:2.3.7" dependencies: @@ -7816,16 +7983,6 @@ resolve@1.1.7: languageName: node linkType: hard -"restore-cursor@npm:^1.0.1": - version: 1.0.1 - resolution: "restore-cursor@npm:1.0.1" - dependencies: - exit-hook: ^1.0.0 - onetime: ^1.0.0 - checksum: 07ab5114eb6fe69e931f0df88ae28a3dd0018360622d3bb72bbf3b4cdbac5b6bc45e4bb502190c688484240bba3f02231d1f0a6ae68cab453c4aca168e3fccae - languageName: node - linkType: hard - "restore-cursor@npm:^2.0.0": version: 2.0.0 resolution: "restore-cursor@npm:2.0.0" @@ -7860,7 +8017,7 @@ resolve@1.1.7: languageName: node linkType: hard -"rimraf@npm:^2.2.0, rimraf@npm:^2.2.8, rimraf@npm:^2.4.4, rimraf@npm:^2.5.4, rimraf@npm:^2.6.1, rimraf@npm:^2.6.2, rimraf@npm:^2.6.3": +"rimraf@npm:^2.2.8, rimraf@npm:^2.4.4, rimraf@npm:^2.5.4, rimraf@npm:^2.6.1, rimraf@npm:^2.6.2, rimraf@npm:^2.6.3": version: 2.7.1 resolution: "rimraf@npm:2.7.1" dependencies: @@ -7919,13 +8076,6 @@ resolve@1.1.7: languageName: node linkType: hard -"rx@npm:^4.1.0": - version: 4.1.0 - resolution: "rx@npm:4.1.0" - checksum: 2f8818608864d0a3fcaf8210f4dcc9a8acef2ad041c6b9478bbf2059d1b1efe289226d436a05dfb9038996b833529c28e69eab0f10f26baf3fadc1e5fb8f24bd - languageName: node - linkType: hard - "rxjs@npm:^5.5.2": version: 5.5.12 resolution: "rxjs@npm:5.5.12" @@ -7944,7 +8094,16 @@ resolve@1.1.7: languageName: node linkType: hard -"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.2.0": +"rxjs@npm:^6.6.6": + version: 6.6.7 + resolution: "rxjs@npm:6.6.7" + dependencies: + tslib: ^1.9.0 + checksum: 1146975cbd5388ee5e61450235dc5670931e43cce71813f567977d334acc4d75c6e8d9d293df67e1fb31510b99fc8957943d4a9b550d109e4dc69967a8471543 + languageName: node + linkType: hard + +"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: 0bb57f0d8f9d1fa4fe35ad8a2db1f83a027d48f2822d59ede88fd5cd4ddad83c0b497213feb7a70fbf90597a70c5217f735b0eb1850df40ce9b4ae81dd22b3f9 @@ -8046,6 +8205,15 @@ resolve@1.1.7: languageName: node linkType: hard +"serialize-javascript@npm:5.0.1": + version: 5.0.1 + resolution: "serialize-javascript@npm:5.0.1" + dependencies: + randombytes: ^2.1.0 + checksum: 97eef70a33c75e690b0c6aa2ffe622ecdfc888d3f181a5cf129e5778228dcd100febabc0f41ff793199ee79acd14cbbad0c69f1348a3893580fe424c4718889b + languageName: node + linkType: hard + "set-blocking@npm:^2.0.0, set-blocking@npm:~2.0.0": version: 2.0.0 resolution: "set-blocking@npm:2.0.0" @@ -8115,19 +8283,6 @@ resolve@1.1.7: languageName: node linkType: hard -"shelljs@npm:^0.7.0": - version: 0.7.8 - resolution: "shelljs@npm:0.7.8" - dependencies: - glob: ^7.0.0 - interpret: ^1.0.0 - rechoir: ^0.6.2 - bin: - shjs: ./bin/shjs - checksum: 6eedffec68b3c32f6b8b95c7925785bfc0cc0ce16b4263e37df1d30ba3332b234ee2588bf35336502227689bbc46667da31e7b1b420cc49d5b380de3b534d5ba - languageName: node - linkType: hard - "shelljs@npm:^0.8.0, shelljs@npm:^0.8.4": version: 0.8.4 resolution: "shelljs@npm:0.8.4" @@ -8155,6 +8310,20 @@ resolve@1.1.7: languageName: node linkType: hard +"sinon@npm:^10.0.0": + version: 10.0.0 + resolution: "sinon@npm:10.0.0" + dependencies: + "@sinonjs/commons": ^1.8.1 + "@sinonjs/fake-timers": ^6.0.1 + "@sinonjs/samsam": ^5.3.1 + diff: ^4.0.2 + nise: ^4.1.0 + supports-color: ^7.1.0 + checksum: 75996724f971b015956b34b331fe2ed1af313404b7d44985468f8145e1eed3a8400a94c117857b550f79ad86be69349621ae07e06331c3b7ea9063b34687f540 + languageName: node + linkType: hard + "sinon@npm:^5.0.7": version: 5.1.1 resolution: "sinon@npm:5.1.1" @@ -8307,16 +8476,6 @@ resolve@1.1.7: languageName: node linkType: hard -"spawn-sync@npm:^1.0.15": - version: 1.0.15 - resolution: "spawn-sync@npm:1.0.15" - dependencies: - concat-stream: ^1.4.7 - os-shim: ^0.1.2 - checksum: c31c84dd8b676d9aa87522572da4b6fa9ea9fcf97b8d29bc82be1eba7126836ccfd298831c7577b1866a3698567908b7de34f387b44b52dea972d28683045b64 - languageName: node - linkType: hard - "spdx-correct@npm:^3.0.0": version: 3.1.1 resolution: "spdx-correct@npm:3.1.1" @@ -8584,7 +8743,7 @@ resolve@1.1.7: languageName: node linkType: hard -"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": +"strip-json-comments@npm:3.1.1, strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" checksum: f16719ce25abc58a55ef82b1c27f541dcfa5d544f17158f62d10be21ff9bd22fde45a53c592b29d80ad3c97ccb67b7451c4833913fdaeadb508a40f5e0a9c206 @@ -8607,6 +8766,15 @@ resolve@1.1.7: languageName: node linkType: hard +"supports-color@npm:8.1.1": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: ^4.0.0 + checksum: 0219f5c91753fea8dc8046cd4b18d39458b5dc0c6421c67c1072209faae9ba93b89283252e3b05d5c18901fd9f8b95001e3247fb93e2265f66d584a676522c75 + languageName: node + linkType: hard + "supports-color@npm:^2.0.0": version: 2.0.0 resolution: "supports-color@npm:2.0.0" @@ -8681,6 +8849,13 @@ resolve@1.1.7: languageName: node linkType: hard +"temp-dir@npm:^2.0.0": + version: 2.0.0 + resolution: "temp-dir@npm:2.0.0" + checksum: d7816d1ce5ea605ffe79f5692c96eef7e14b3dd01799be5462233046db9a169e2bee927c4391f577528137318198f5a18540c174cb6b054768213e7bffd5cb25 + languageName: node + linkType: hard + "test-exclude@npm:^4.2.1": version: 4.2.3 resolution: "test-exclude@npm:4.2.3" @@ -8708,6 +8883,13 @@ resolve@1.1.7: languageName: node linkType: hard +"textextensions@npm:^5.12.0": + version: 5.12.0 + resolution: "textextensions@npm:5.12.0" + checksum: fca9fed6c8a0d338f6300e368070883ef73004c013bbb056d56f7f00f19133016d6ccfe094b1126b66fc942c32c81f53531a4122f7a6abeab870079b8c1e857f + languageName: node + linkType: hard + "throat@npm:^4.0.0": version: 4.1.0 resolution: "throat@npm:4.1.0" @@ -8749,15 +8931,6 @@ resolve@1.1.7: languageName: node linkType: hard -"tmp@npm:^0.0.29": - version: 0.0.29 - resolution: "tmp@npm:0.0.29" - dependencies: - os-tmpdir: ~1.0.1 - checksum: 91667c7a2e3a96ce8573bc9fcb80f65f5b49372b0e9ce483e74f390a8842851bdd3c293707c8950f93306b818f0d121b1cb23174a67d7b7079099b117973e283 - languageName: node - linkType: hard - "tmp@npm:^0.0.33": version: 0.0.33 resolution: "tmp@npm:0.0.33" @@ -8943,13 +9116,6 @@ resolve@1.1.7: languageName: node linkType: hard -"typedarray@npm:^0.0.6": - version: 0.0.6 - resolution: "typedarray@npm:0.0.6" - checksum: c9ef0176aaf32593514c31e5c6edc1db970847aff6e1f0a0570a6ac0cc996335792f394c2fcec59cc76691d22a01888ea073a2f3c6930cfcf7c519addf4e2ad7 - languageName: node - linkType: hard - typescript@^4.0.5: version: 4.2.4 resolution: "typescript@npm:4.2.4" @@ -9027,15 +9193,6 @@ typescript@^4.0.5: languageName: node linkType: hard -"untildify@npm:^2.0.0": - version: 2.1.0 - resolution: "untildify@npm:2.1.0" - dependencies: - os-homedir: ^1.0.0 - checksum: 63ee08321c38ed162bef9fef6d3f64df3632fb5e150bb29930c5378a093468fc6ddd7659f60ee5123924e202a8e3639df8d365d1d9f9aa40e8d3051407caf1cf - languageName: node - linkType: hard - "untildify@npm:^3.0.3": version: 3.0.3 resolution: "untildify@npm:3.0.3" @@ -9114,15 +9271,6 @@ typescript@^4.0.5: languageName: node linkType: hard -"user-home@npm:^2.0.0": - version: 2.0.0 - resolution: "user-home@npm:2.0.0" - dependencies: - os-homedir: ^1.0.0 - checksum: ba2791a65d3b4b506d0494fc08188be8cf66e29a43e80820845f531607d14638168828eda650a2e8edbf8327476cb8802091a8ac389567d9e88e9d1406b623fe - languageName: node - linkType: hard - "util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" @@ -9273,6 +9421,15 @@ typescript@^4.0.5: languageName: node linkType: hard +"wcwidth@npm:^1.0.1": + version: 1.0.1 + resolution: "wcwidth@npm:1.0.1" + dependencies: + defaults: ^1.0.3 + checksum: abf8ba432dd19a95af63895de6af932900a9451e175745551aeca0fd2d46604bc72ff80aa83adc3f67fb8389191329340e2864aefcf20655ffe91f0dbee5d953 + languageName: node + linkType: hard + "webidl-conversions@npm:^4.0.2": version: 4.0.2 resolution: "webidl-conversions@npm:4.0.2" @@ -9338,29 +9495,29 @@ typescript@^4.0.5: languageName: node linkType: hard -"which@npm:^1.2.12, which@npm:^1.2.9, which@npm:^1.3.0": - version: 1.3.1 - resolution: "which@npm:1.3.1" +"which@npm:2.0.2, which@npm:^2.0.1, which@npm:^2.0.2": + version: 2.0.2 + resolution: "which@npm:2.0.2" dependencies: isexe: ^2.0.0 bin: - which: ./bin/which - checksum: 298d95f9c185c4da22c1bfb1fdfa37c2ba56df8a6b98706ab361bf31a7d3a4845afaecfc48d4de7a259048842b5f2977f51b56f5c06c1f6a83dcf5a9e3de634a + node-which: ./bin/node-which + checksum: ea9b1db1266b08f7880717cf70dd9012dd523e5a317f10fbe4d5e8c1a761c5fd237f88642f2ba33b23f973ff4002c9b26648d63084ab208d8ecef36497315f6e languageName: node linkType: hard -"which@npm:^2.0.1, which@npm:^2.0.2": - version: 2.0.2 - resolution: "which@npm:2.0.2" +"which@npm:^1.2.12, which@npm:^1.2.9, which@npm:^1.3.0": + version: 1.3.1 + resolution: "which@npm:1.3.1" dependencies: isexe: ^2.0.0 bin: - node-which: ./bin/node-which - checksum: ea9b1db1266b08f7880717cf70dd9012dd523e5a317f10fbe4d5e8c1a761c5fd237f88642f2ba33b23f973ff4002c9b26648d63084ab208d8ecef36497315f6e + which: ./bin/which + checksum: 298d95f9c185c4da22c1bfb1fdfa37c2ba56df8a6b98706ab361bf31a7d3a4845afaecfc48d4de7a259048842b5f2977f51b56f5c06c1f6a83dcf5a9e3de634a languageName: node linkType: hard -"wide-align@npm:^1.1.0": +"wide-align@npm:1.1.3, wide-align@npm:^1.1.0": version: 1.1.3 resolution: "wide-align@npm:1.1.3" dependencies: @@ -9394,6 +9551,13 @@ typescript@^4.0.5: languageName: node linkType: hard +"workerpool@npm:6.1.0": + version: 6.1.0 + resolution: "workerpool@npm:6.1.0" + checksum: c4295cacc2c8e4b19c608499fb61d9f831052b141b2bef5515c4862712a3fdc4110606beeaaacf3c48b00d930a5b396757bda3490694a7683fc3cb5142537d12 + languageName: node + linkType: hard + "wrap-ansi@npm:^2.0.0": version: 2.1.0 resolution: "wrap-ansi@npm:2.1.0" @@ -9404,6 +9568,17 @@ typescript@^4.0.5: languageName: node linkType: hard +"wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: 09939dd775ae565bb99a25a6c072fe3775a95fa71751b5533c94265fe986ba3e3ab071a027ab76cf26876bd9afd10ac3c2d06d7c4bcce148bf7d2d9514e3a0df + languageName: node + linkType: hard + "wrappy@npm:1": version: 1.0.2 resolution: "wrappy@npm:1.0.2" @@ -9521,10 +9696,10 @@ typescript@^4.0.5: languageName: node linkType: hard -"yallist@npm:^2.1.2": - version: 2.1.2 - resolution: "yallist@npm:2.1.2" - checksum: f83e3d18eeba68a0276be2ab09260be3f2a300307e84b1565c620ef71f03f106c3df9bec4c3a91e5fa621a038f8826c19b3786804d3795dd4f999e5b6be66ea3 +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 56275bfa72a8a585c4d2905b086862fb881dfe7871adcefe4ecf4c1a6a78c6389b459b427c0a8672ccdb09731a78143acc71f0bcc8dc8d8427869fafe7f18b95 languageName: node linkType: hard @@ -9542,6 +9717,20 @@ typescript@^4.0.5: languageName: node linkType: hard +"yargs-parser@npm:20.2.4": + version: 20.2.4 + resolution: "yargs-parser@npm:20.2.4" + checksum: 00dd0f23b608aa16962f1b73ac6c461ae6c97e8e85ad24b0c9adfeb5ef20a93a484ba858a6a3200f487478427db27d555d7772463d793d6c27b1b8b614cf3d7e + languageName: node + linkType: hard + +"yargs-parser@npm:^20.2.2": + version: 20.2.7 + resolution: "yargs-parser@npm:20.2.7" + checksum: 124e7f1c24c9609d5d1c343f14b83289634e19bb43770708ebb6a19852647aaa0f89edcbf0e5b18a21bee77f54513ab5051518b2950cda69eb607a7c6251aa4f + languageName: node + linkType: hard + "yargs-parser@npm:^9.0.2": version: 9.0.2 resolution: "yargs-parser@npm:9.0.2" @@ -9551,6 +9740,33 @@ typescript@^4.0.5: languageName: node linkType: hard +"yargs-unparser@npm:2.0.0": + version: 2.0.0 + resolution: "yargs-unparser@npm:2.0.0" + dependencies: + camelcase: ^6.0.0 + decamelize: ^4.0.0 + flat: ^5.0.2 + is-plain-obj: ^2.1.0 + checksum: afa83ec3fe1b32db279a3e928074697d9ee62907cd421bcea76a47ae5d92648bc046e04bc2198324c2ff8b2f631b907660209c5d9a7fa5160dbd5105d3eb2838 + languageName: node + linkType: hard + +"yargs@npm:16.2.0": + version: 16.2.0 + resolution: "yargs@npm:16.2.0" + dependencies: + cliui: ^7.0.2 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.0 + y18n: ^5.0.5 + yargs-parser: ^20.2.2 + checksum: a79ce1f043021cd645de1ffebb6149541d382ba68f4a6b5eca5d2ad65af51893371bbd78e240dc3b6cf0cbb419511ba5bda715dec992e4266e6863ea49f14feb + languageName: node + linkType: hard + "yargs@npm:^11.0.0": version: 11.1.1 resolution: "yargs@npm:11.1.1" @@ -9578,26 +9794,6 @@ typescript@^4.0.5: languageName: node linkType: hard -"yeoman-environment@npm:^1.1.0": - version: 1.6.6 - resolution: "yeoman-environment@npm:1.6.6" - dependencies: - chalk: ^1.0.0 - debug: ^2.0.0 - diff: ^2.1.2 - escape-string-regexp: ^1.0.2 - globby: ^4.0.0 - grouped-queue: ^0.3.0 - inquirer: ^1.0.2 - lodash: ^4.11.1 - log-symbols: ^1.0.1 - mem-fs: ^1.1.0 - text-table: ^0.2.0 - untildify: ^2.0.0 - checksum: 64cb6ef8ec58f90c9fcefb3d6593b5999607cedf0766c53bc97ac4ab2e991103f5a94fd30293ef4e3bcd162bff2a8c84be5f4676cebdf254e9cdb6a6067a869f - languageName: node - linkType: hard - "yeoman-environment@npm:^2.0.5, yeoman-environment@npm:^2.3.0, yeoman-environment@npm:^2.9.5": version: 2.10.3 resolution: "yeoman-environment@npm:2.10.3" @@ -9625,44 +9821,6 @@ typescript@^4.0.5: languageName: node linkType: hard -"yeoman-generator@npm:^1.1.1": - version: 1.1.1 - resolution: "yeoman-generator@npm:1.1.1" - dependencies: - async: ^2.0.0 - chalk: ^1.0.0 - class-extend: ^0.1.0 - cli-table: ^0.3.1 - cross-spawn: ^5.0.1 - dargs: ^5.1.0 - dateformat: ^2.0.0 - debug: ^2.1.0 - detect-conflict: ^1.0.0 - error: ^7.0.2 - find-up: ^2.1.0 - github-username: ^3.0.0 - glob: ^7.0.3 - istextorbinary: ^2.1.0 - lodash: ^4.11.1 - mem-fs-editor: ^3.0.0 - minimist: ^1.2.0 - mkdirp: ^0.5.0 - path-exists: ^3.0.0 - path-is-absolute: ^1.0.0 - pretty-bytes: ^4.0.2 - read-chunk: ^2.0.0 - read-pkg-up: ^2.0.0 - rimraf: ^2.2.0 - run-async: ^2.0.0 - shelljs: ^0.7.0 - text-table: ^0.2.0 - through2: ^2.0.0 - user-home: ^2.0.0 - yeoman-environment: ^1.1.0 - checksum: a03468f769127ffe93140974f0bf4dc8a67c04fe3bdb6b7850ddb29f876c2176b8f6e8367da1819cebdcda4b50deb416983a2a95ef24ef1fdbc306f9e664b382 - languageName: node - linkType: hard - "yeoman-generator@npm:^2.0.5": version: 2.0.5 resolution: "yeoman-generator@npm:2.0.5" @@ -9784,3 +9942,27 @@ typescript@^4.0.5: checksum: 220b7ba41c774b11eed02a88a265136b9f1775cc63e8292a3938921f38ebc45a6b65de94ad088325d0354af8716b125ed841e16fc2d9b9e1306bcb0b3c1274be languageName: node linkType: hard + +"yeoman-test@npm:^6.0.0": + version: 6.1.0 + resolution: "yeoman-test@npm:6.1.0" + dependencies: + inquirer: ^8.0.0 + lodash: ^4.17.21 + mem-fs-editor: ^9.0.0 + sinon: ^10.0.0 + temp-dir: ^2.0.0 + peerDependencies: + mem-fs: ^2.1.0 + yeoman-environment: ^3.3.0 + yeoman-generator: "*" + checksum: 42f9a7ece653cb48985bb3d76994c287d6b52dea5b7143f639ed8c5ff22ec7689400e246935cb3ba0c4f6561bf156e58762df6e6c835ede0510fdd1e0e261def + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: 096c3b40beb2804659539be1605a35c58eb0c85285f94b77b3e924f42ee265c1a40bf9f4153770039517146b469a964d51742395f35ca8135fc9f7e4982b785d + languageName: node + linkType: hard From e65cf7ee446506bd0004686d2c0869f9b80e6ccd Mon Sep 17 00:00:00 2001 From: Peter Innes <53846082+peterinnesmsft@users.noreply.github.com> Date: Mon, 14 Jun 2021 14:18:24 -0700 Subject: [PATCH 28/39] chore: Wire up yeoman unit tests in CI/CD pipelines (#1152) * Adding npm test step to CI/CD pipeline templates. * Add comment to generator-bot-adaptive to trigger pipeline. * Restoring dependencies in npm-test-steps.yml. * Updating npm-test-steps.yml to simply run 'yarn run test' due to difference in yarn package restoration location. * Updating npm-test-steps.yml to manually check for presence of test script in package.json, and conditionally only run 'yarn run test' if a test script is defined. * Removing comment from generator-bot-adaptive; update step name for determining if test script is present. --- build/yaml/templates/component-template.yml | 2 ++ build/yaml/templates/npm-test-steps.yml | 26 +++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 build/yaml/templates/npm-test-steps.yml diff --git a/build/yaml/templates/component-template.yml b/build/yaml/templates/component-template.yml index 95bd8ca858..bd27ea611e 100644 --- a/build/yaml/templates/component-template.yml +++ b/build/yaml/templates/component-template.yml @@ -9,6 +9,7 @@ stages: displayName: Build Node project steps: - template: npm-build-steps.yml + - template: npm-test-steps.yml - stage: stage_package_node displayName: 'Node: Build, Version & Pack' @@ -18,6 +19,7 @@ stages: displayName: 'Build & Pack Node project' steps: - template: npm-build-steps.yml + - template: npm-test-steps.yml - template: npm-versioning-steps.yml - template: npm-package-steps.yml diff --git a/build/yaml/templates/npm-test-steps.yml b/build/yaml/templates/npm-test-steps.yml new file mode 100644 index 0000000000..06c8a40a15 --- /dev/null +++ b/build/yaml/templates/npm-test-steps.yml @@ -0,0 +1,26 @@ +steps: +# You are probably wondering "Why not just run 'yarn exec npm run --if-present test'?". +# On Azure Pipelines, yarn install by default restores modules to a global node_modules cache +# instead of a local package cache. When running the npm CLI, it is unable to resolve required +# dependencies as a result, whereas yarn run - - - -

    -
    -
    -
    SimpleRootBotDotNet21 Bot
    -
    -
    -
    -
    -
    Your bot is ready!
    -
    You can test your bot in the Bot Framework Emulator
    - by connecting to http://localhost:3978/api/messages.
    -
    -
    Visit Azure - Bot Service to register your bot and add it to
    - various channels. The bot's endpoint URL typically looks - like this:
    -
    https://your_bots_hostname/api/messages
    -
    -
    -
    -
    - -
    - - - diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/AdapterWithErrorHandler.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/AdapterWithErrorHandler.cs deleted file mode 100644 index a358155fed..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/AdapterWithErrorHandler.cs +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.Bot.Builder.Integration.AspNet.Core.Skills; -using Microsoft.Bot.Builder.Skills; -using Microsoft.Bot.Builder.TraceExtensions; -using Microsoft.Bot.Connector.Authentication; -using Microsoft.Bot.Schema; -using Microsoft.BotFrameworkFunctionalTests.SimpleHostBot.Bots; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Logging; - -namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot -{ - public class AdapterWithErrorHandler : BotFrameworkHttpAdapter - { - private readonly ConversationState _conversationState; - private readonly IConfiguration _configuration; - private readonly ILogger _logger; - private readonly SkillHttpClient _skillClient; - private readonly SkillsConfiguration _skillsConfig; - - /// - /// Initializes a new instance of the class to handle errors. - /// - /// The configuration properties. - /// An instance of a logger. - /// A state management object for the conversation. - /// The HTTP client for the skills. - /// The skills configuration. - public AdapterWithErrorHandler(IConfiguration configuration, ILogger logger, ConversationState conversationState = null, SkillHttpClient skillClient = null, SkillsConfiguration skillsConfig = null) - : base(configuration, logger) - { - _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration)); - _conversationState = conversationState; - _logger = logger ?? throw new ArgumentNullException(nameof(logger)); - _skillClient = skillClient; - _skillsConfig = skillsConfig; - - OnTurnError = HandleTurnErrorAsync; - } - - /// - /// Handles the error by sending a message to the user and ending the conversation with the skill. - /// - /// Context for the current turn of conversation. - /// The handled exception. - /// A representing the result of the asynchronous operation. - private async Task HandleTurnErrorAsync(ITurnContext turnContext, Exception exception) - { - // Log any leaked exception from the application. - _logger.LogError(exception, $"[OnTurnError] unhandled error : {exception.Message}"); - - await SendErrorMessageAsync(turnContext, exception, default); - await EndSkillConversationAsync(turnContext, default); - await ClearConversationStateAsync(turnContext, default); - } - - /// - /// Sends an error message to the user and a trace activity to be displayed in the Bot Framework Emulator. - /// - /// Context for the current turn of conversation. - /// The exception to be sent in the message. - /// CancellationToken propagates notifications that operations should be cancelled. - /// A representing the result of the asynchronous operation. - private async Task SendErrorMessageAsync(ITurnContext turnContext, Exception exception, CancellationToken cancellationToken) - { - try - { - // Send a message to the user - var errorMessageText = "The bot encountered an error or bug."; - var errorMessage = MessageFactory.Text(errorMessageText, errorMessageText, InputHints.IgnoringInput); - errorMessage.Value = exception; - await turnContext.SendActivityAsync(errorMessage, cancellationToken); - - await turnContext.SendActivityAsync($"Exception: {exception.Message}"); - await turnContext.SendActivityAsync(exception.ToString()); - - errorMessageText = "To continue to run this bot, please fix the bot source code."; - errorMessage = MessageFactory.Text(errorMessageText, errorMessageText, InputHints.ExpectingInput); - await turnContext.SendActivityAsync(errorMessage, cancellationToken); - - // Send a trace activity, which will be displayed in the Bot Framework Emulator - await turnContext.TraceActivityAsync("OnTurnError Trace", exception.ToString(), "https://www.botframework.com/schemas/error", "TurnError", cancellationToken); - } - catch (Exception ex) - { - _logger.LogError(ex, $"Exception caught in SendErrorMessageAsync : {ex}"); - } - } - - /// - /// Informs to the active skill that the conversation is ended so that it has a chance to clean up. - /// - /// Context for the current turn of conversation. - /// CancellationToken propagates notifications that operations should be cancelled. - /// A representing the result of the asynchronous operation. - private async Task EndSkillConversationAsync(ITurnContext turnContext, CancellationToken cancellationToken) - { - if (_conversationState == null || _skillClient == null || _skillsConfig == null) - { - return; - } - - try - { - // Note: ActiveSkillPropertyName is set by the HostBot while messages are being - // forwarded to a Skill. - var activeSkill = await _conversationState.CreateProperty(HostBot.ActiveSkillPropertyName).GetAsync(turnContext, () => null, cancellationToken); - if (activeSkill != null) - { - var botId = _configuration.GetSection(MicrosoftAppCredentials.MicrosoftAppIdKey)?.Value; - - var endOfConversation = Activity.CreateEndOfConversationActivity(); - endOfConversation.Code = "HostSkillError"; - endOfConversation.ApplyConversationReference(turnContext.Activity.GetConversationReference(), true); - - await _conversationState.SaveChangesAsync(turnContext, true, cancellationToken); - await _skillClient.PostActivityAsync(botId, activeSkill, _skillsConfig.SkillHostEndpoint, (Activity)endOfConversation, cancellationToken); - } - } - catch (Exception ex) - { - _logger.LogError(ex, $"Exception caught on attempting to send EndOfConversation : {ex}"); - } - } - - /// - /// Deletes the conversationState for the current conversation to prevent the bot from getting stuck in an error-loop caused by being in a bad state. - /// ConversationState should be thought of as similar to "cookie-state" in a Web pages. - /// - /// Context for the current turn of conversation. - /// CancellationToken propagates notifications that operations should be cancelled. - /// A representing the result of the asynchronous operation. - private async Task ClearConversationStateAsync(ITurnContext turnContext, CancellationToken cancellationToken) - { - if (_conversationState != null) - { - try - { - await _conversationState.DeleteAsync(turnContext, cancellationToken); - } - catch (Exception ex) - { - _logger.LogError(ex, $"Exception caught on attempting to Delete ConversationState : {ex}"); - } - } - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Authentication/AllowedSkillsClaimsValidator.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Authentication/AllowedSkillsClaimsValidator.cs deleted file mode 100644 index 178a1c0a47..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Authentication/AllowedSkillsClaimsValidator.cs +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Security.Claims; -using System.Threading.Tasks; -using Microsoft.Bot.Connector.Authentication; - -namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot.Authentication -{ - /// - /// Sample claims validator that loads an allowed list from configuration if present - /// and checks that responses are coming from configured skills. - /// - public class AllowedSkillsClaimsValidator : ClaimsValidator - { - private readonly List _allowedSkills; - - /// - /// Initializes a new instance of the class. - /// Loads the appIds for the configured skills. Only allows responses from skills it has configured. - /// - /// The list of configured skills. - public AllowedSkillsClaimsValidator(SkillsConfiguration skillsConfig) - { - if (skillsConfig == null) - { - throw new ArgumentNullException(nameof(skillsConfig)); - } - - _allowedSkills = (from skill in skillsConfig.Skills.Values select skill.AppId).ToList(); - } - - /// - /// Checks that the appId claim in the skill request is in the list of skills configured for this bot. - /// - /// The list of claims to validate. - /// A task that represents the work queued to execute. - public override Task ValidateClaimsAsync(IList claims) - { - if (SkillValidation.IsSkillClaim(claims)) - { - var appId = JwtTokenValidation.GetAppIdFromClaims(claims); - if (!_allowedSkills.Contains(appId)) - { - throw new UnauthorizedAccessException($"Received a request from an application with an appID of \"{appId}\". To enable requests from this skill, add the skill to your configuration file."); - } - } - - return Task.CompletedTask; - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Bots/HostBot.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Bots/HostBot.cs deleted file mode 100644 index 566610aed0..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Bots/HostBot.cs +++ /dev/null @@ -1,242 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Builder.Integration.AspNet.Core.Skills; -using Microsoft.Bot.Builder.Skills; -using Microsoft.Bot.Connector.Authentication; -using Microsoft.Bot.Schema; -using Microsoft.BotFrameworkFunctionalTests.SimpleHostBot.Dialogs; -using Microsoft.Extensions.Configuration; -using Newtonsoft.Json; - -namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot.Bots -{ - public class HostBot : ActivityHandler - { - public const string DeliveryModePropertyName = "deliveryModeProperty"; - public const string ActiveSkillPropertyName = "activeSkillProperty"; - - private readonly IStatePropertyAccessor _deliveryModeProperty; - private readonly IStatePropertyAccessor _activeSkillProperty; - private readonly IStatePropertyAccessor _dialogStateProperty; - private readonly string _botId; - private readonly ConversationState _conversationState; - private readonly SkillHttpClient _skillClient; - private readonly SkillsConfiguration _skillsConfig; - private readonly Dialog _dialog; - - /// - /// Initializes a new instance of the class. - /// - /// A state management object for the conversation. - /// The skills configuration. - /// The HTTP client for the skills. - /// The configuration properties. - /// The dialog to use. - public HostBot(ConversationState conversationState, SkillsConfiguration skillsConfig, SkillHttpClient skillClient, IConfiguration configuration, SetupDialog dialog) - { - _conversationState = conversationState ?? throw new ArgumentNullException(nameof(conversationState)); - _skillsConfig = skillsConfig ?? throw new ArgumentNullException(nameof(skillsConfig)); - _skillClient = skillClient ?? throw new ArgumentNullException(nameof(skillClient)); - _dialog = dialog ?? throw new ArgumentNullException(nameof(dialog)); - _dialogStateProperty = _conversationState.CreateProperty("DialogState"); - if (configuration == null) - { - throw new ArgumentNullException(nameof(configuration)); - } - - _botId = configuration.GetSection(MicrosoftAppCredentials.MicrosoftAppIdKey)?.Value; - - // Create state properties to track the delivery mode and active skill. - _deliveryModeProperty = conversationState.CreateProperty(DeliveryModePropertyName); - _activeSkillProperty = conversationState.CreateProperty(ActiveSkillPropertyName); - } - - /// - public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default) - { - // Forward all activities except EndOfConversation to the active skill. - if (turnContext.Activity.Type != ActivityTypes.EndOfConversation) - { - // Try to get the active skill - var activeSkill = await _activeSkillProperty.GetAsync(turnContext, () => null, cancellationToken); - - if (activeSkill != null) - { - var deliveryMode = await _deliveryModeProperty.GetAsync(turnContext, () => null, cancellationToken); - - // Send the activity to the skill - await SendToSkillAsync(turnContext, deliveryMode, activeSkill, cancellationToken); - return; - } - } - - await base.OnTurnAsync(turnContext, cancellationToken); - - // Save any state changes that might have occurred during the turn. - await _conversationState.SaveChangesAsync(turnContext, false, cancellationToken); - } - - /// - /// Processes a message activity. - /// - /// Context for the current turn of conversation. - /// CancellationToken propagates notifications that operations should be cancelled. - /// A representing the result of the asynchronous operation. - protected override async Task OnMessageActivityAsync(ITurnContext turnContext, CancellationToken cancellationToken) - { - if (_skillsConfig.Skills.ContainsKey(turnContext.Activity.Text)) - { - var deliveryMode = await _deliveryModeProperty.GetAsync(turnContext, () => null, cancellationToken); - var selectedSkill = _skillsConfig.Skills[turnContext.Activity.Text]; - var v3Bots = new List { "EchoSkillBotDotNetV3", "EchoSkillBotJSV3" }; - - if (selectedSkill != null && deliveryMode == DeliveryModes.ExpectReplies && v3Bots.Contains(selectedSkill.Id)) - { - var message = MessageFactory.Text("V3 Bots do not support 'expectReplies' delivery mode."); - await turnContext.SendActivityAsync(message, cancellationToken); - - // Forget delivery mode and skill invocation. - await _deliveryModeProperty.DeleteAsync(turnContext, cancellationToken); - await _activeSkillProperty.DeleteAsync(turnContext, cancellationToken); - - // Restart setup dialog - await _conversationState.DeleteAsync(turnContext, cancellationToken); - } - } - - await _dialog.RunAsync(turnContext, _dialogStateProperty, cancellationToken); - } - - /// - /// Processes an end of conversation activity. - /// - /// Context for the current turn of conversation. - /// CancellationToken propagates notifications that operations should be cancelled. - /// A representing the result of the asynchronous operation. - protected override async Task OnEndOfConversationActivityAsync(ITurnContext turnContext, CancellationToken cancellationToken) - { - await EndConversation((Activity)turnContext.Activity, turnContext, cancellationToken); - } - - /// - /// Processes a member added event. - /// - /// The list of members added to the conversation. - /// Context for the current turn of conversation. - /// CancellationToken propagates notifications that operations should be cancelled. - /// A representing the result of the asynchronous operation. - protected override async Task OnMembersAddedAsync(IList membersAdded, ITurnContext turnContext, CancellationToken cancellationToken) - { - foreach (var member in membersAdded) - { - if (member.Id != turnContext.Activity.Recipient.Id) - { - await turnContext.SendActivityAsync(MessageFactory.Text("Hello and welcome!"), cancellationToken); - await _dialog.RunAsync(turnContext, _dialogStateProperty, cancellationToken); - } - } - } - - /// - /// Clears storage variables and sends the end of conversation activities. - /// - /// End of conversation activity. - /// Context for the current turn of conversation. - /// CancellationToken propagates notifications that operations should be cancelled. - /// A representing the result of the asynchronous operation. - private async Task EndConversation(Activity activity, ITurnContext turnContext, CancellationToken cancellationToken) - { - // Forget delivery mode and skill invocation. - await _deliveryModeProperty.DeleteAsync(turnContext, cancellationToken); - await _activeSkillProperty.DeleteAsync(turnContext, cancellationToken); - - // Show status message, text and value returned by the skill - var eocActivityMessage = $"Received {ActivityTypes.EndOfConversation}.\n\nCode: {activity.Code}."; - if (!string.IsNullOrWhiteSpace(activity.Text)) - { - eocActivityMessage += $"\n\nText: {activity.Text}"; - } - - if (activity.Value != null) - { - eocActivityMessage += $"\n\nValue: {JsonConvert.SerializeObject(activity.Value)}"; - } - - await turnContext.SendActivityAsync(MessageFactory.Text(eocActivityMessage), cancellationToken); - - // We are back at the host. - await turnContext.SendActivityAsync(MessageFactory.Text("Back in the host bot."), cancellationToken); - - // Restart setup dialog. - await _dialog.RunAsync(turnContext, _dialogStateProperty, cancellationToken); - - await _conversationState.SaveChangesAsync(turnContext, false, cancellationToken); - } - - /// - /// Sends an activity to the skill bot. - /// - /// Context for the current turn of conversation. - /// The delivery mode to use when communicating to the skill. - /// The skill that will receive the activity. - /// CancellationToken propagates notifications that operations should be cancelled. - /// A representing the result of the asynchronous operation. - private async Task SendToSkillAsync(ITurnContext turnContext, string deliveryMode, BotFrameworkSkill targetSkill, CancellationToken cancellationToken) - { - // NOTE: Always SaveChanges() before calling a skill so that any activity generated by the skill - // will have access to current accurate state. - await _conversationState.SaveChangesAsync(turnContext, force: true, cancellationToken: cancellationToken); - - if (deliveryMode == DeliveryModes.ExpectReplies) - { - // Clone activity and update its delivery mode. - var activity = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(turnContext.Activity)); - activity.DeliveryMode = deliveryMode; - - // Route the activity to the skill. - var expectRepliesResponse = await _skillClient.PostActivityAsync(_botId, targetSkill, _skillsConfig.SkillHostEndpoint, activity, cancellationToken); - - // Check response status. - if (!expectRepliesResponse.IsSuccessStatusCode()) - { - throw new HttpRequestException($"Error invoking the skill id: \"{targetSkill.Id}\" at \"{targetSkill.SkillEndpoint}\" (status is {expectRepliesResponse.Status}). \r\n {expectRepliesResponse.Body}"); - } - - // Route response activities back to the channel. - var responseActivities = expectRepliesResponse.Body?.Activities; - - foreach (var responseActivity in responseActivities) - { - if (responseActivity.Type == ActivityTypes.EndOfConversation) - { - await EndConversation(responseActivity, turnContext, cancellationToken); - } - else - { - await turnContext.SendActivityAsync(responseActivity, cancellationToken); - } - } - } - else - { - // Route the activity to the skill. - var response = await _skillClient.PostActivityAsync(_botId, targetSkill, _skillsConfig.SkillHostEndpoint, (Activity)turnContext.Activity, cancellationToken); - - // Check response status - if (!response.IsSuccessStatusCode()) - { - throw new HttpRequestException($"Error invoking the skill id: \"{targetSkill.Id}\" at \"{targetSkill.SkillEndpoint}\" (status is {response.Status}). \r\n {response.Body}"); - } - } - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Controllers/BotController.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Controllers/BotController.cs deleted file mode 100644 index e0a80d0dc0..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Controllers/BotController.cs +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Integration.AspNet.Core; - -namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot.Controllers -{ - /// - /// This ASP Controller is created to handle a request. Dependency Injection will provide the Adapter and IBot implementation at runtime. - /// - [Route("api/messages")] - [ApiController] - public class BotController : ControllerBase - { - private readonly BotFrameworkHttpAdapter _adapter; - private readonly IBot _bot; - - /// - /// Initializes a new instance of the class. - /// - /// Adapter for the BotController. - /// Bot for the BotController. - public BotController(BotFrameworkHttpAdapter adapter, IBot bot) - { - _adapter = adapter; - _bot = bot; - } - - /// - /// Processes an HttpPost request. - /// - /// A representing the result of the asynchronous operation. - [HttpPost] - public async Task PostAsync() - { - await _adapter.ProcessAsync(Request, Response, _bot); - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Controllers/SkillController.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Controllers/SkillController.cs deleted file mode 100644 index 9f270318f6..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Controllers/SkillController.cs +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using Microsoft.AspNetCore.Mvc; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.Bot.Builder.Skills; - -namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot.Controllers -{ - /// - /// A controller that handles skill replies to the bot. - /// This example uses the that is registered as a in startup.cs. - /// - [ApiController] - [Route("api/skills")] - public class SkillController : ChannelServiceController - { - /// - /// Initializes a new instance of the class. - /// - /// The skill handler registered as ChannelServiceHandler. - public SkillController(ChannelServiceHandler handler) - : base(handler) - { - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Dialogs/SetupDialog.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Dialogs/SetupDialog.cs deleted file mode 100644 index 86b6c6787c..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Dialogs/SetupDialog.cs +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Builder.Dialogs.Choices; -using Microsoft.Bot.Builder.Skills; -using Microsoft.Bot.Schema; -using Microsoft.BotFrameworkFunctionalTests.SimpleHostBot.Bots; - -namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot.Dialogs -{ - /// - /// The setup dialog for this bot. - /// - public class SetupDialog : ComponentDialog - { - private readonly IStatePropertyAccessor _deliveryModeProperty; - private readonly IStatePropertyAccessor _activeSkillProperty; - private readonly SkillsConfiguration _skillsConfig; - private string _deliveryMode; - - public SetupDialog(ConversationState conversationState, SkillsConfiguration skillsConfig) - : base(nameof(SetupDialog)) - { - _skillsConfig = skillsConfig ?? throw new ArgumentNullException(nameof(skillsConfig)); - - _deliveryModeProperty = conversationState.CreateProperty(HostBot.DeliveryModePropertyName); - _activeSkillProperty = conversationState.CreateProperty(HostBot.ActiveSkillPropertyName); - - // Define the setup dialog and its related components. - // Add ChoicePrompt to render available skills. - AddDialog(new ChoicePrompt(nameof(ChoicePrompt))); - - // Add main waterfall dialog for this bot. - var waterfallSteps = new WaterfallStep[] - { - SelectDeliveryModeStepAsync, - SelectSkillStepAsync, - FinalStepAsync - }; - AddDialog(new WaterfallDialog(nameof(WaterfallDialog), waterfallSteps)); - - InitialDialogId = nameof(WaterfallDialog); - } - - // Render a prompt to select the delivery mode to use. - private async Task SelectDeliveryModeStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - // Create the PromptOptions with the delivery modes supported. - const string messageText = "What delivery mode would you like to use?"; - const string repromptMessageText = "That was not a valid choice, please select a valid delivery mode."; - var choices = new List(); - choices.Add(new Choice(DeliveryModes.Normal)); - choices.Add(new Choice(DeliveryModes.ExpectReplies)); - var options = new PromptOptions - { - Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), - RetryPrompt = MessageFactory.Text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput), - Choices = choices - }; - - // Prompt the user to select a delivery mode. - return await stepContext.PromptAsync(nameof(ChoicePrompt), options, cancellationToken); - } - - // Render a prompt to select the skill to call. - private async Task SelectSkillStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - // Set delivery mode. - _deliveryMode = ((FoundChoice)stepContext.Result).Value; - await _deliveryModeProperty.SetAsync(stepContext.Context, ((FoundChoice)stepContext.Result).Value, cancellationToken); - - // Create the PromptOptions from the skill configuration which contains the list of configured skills. - const string messageText = "What skill would you like to call?"; - const string repromptMessageText = "That was not a valid choice, please select a valid skill."; - var options = new PromptOptions - { - Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), - RetryPrompt = MessageFactory.Text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput), - Choices = _skillsConfig.Skills.Select(skill => new Choice(skill.Key)).ToList(), - Style = ListStyle.SuggestedAction - }; - - // Prompt the user to select a skill. - return await stepContext.PromptAsync(nameof(ChoicePrompt), options, cancellationToken); - } - - // The SetupDialog has ended, we go back to the HostBot to connect with the selected skill. - private async Task FinalStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - var selectedSkillKey = ((FoundChoice)stepContext.Result).Value; - var selectedSkill = _skillsConfig.Skills.FirstOrDefault(skill => skill.Key == selectedSkillKey); - - var v3Bots = new List { "EchoSkillBotDotNetV3", "EchoSkillBotJSV3" }; - - if (_deliveryMode == DeliveryModes.ExpectReplies && v3Bots.Contains(selectedSkillKey)) - { - await stepContext.Context.SendActivityAsync(MessageFactory.Text("V3 Bots do not support 'expectReplies' delivery mode."), cancellationToken); - - // Restart setup dialog - return await stepContext.ReplaceDialogAsync(InitialDialogId, null, cancellationToken); - } - - // Set active skill - await _activeSkillProperty.SetAsync(stepContext.Context, selectedSkill.Value, cancellationToken); - - var message = MessageFactory.Text("Type anything to send to the skill.", "Type anything to send to the skill.", InputHints.ExpectingInput); - await stepContext.Context.SendActivityAsync(message, cancellationToken); - - return await stepContext.EndDialogAsync(stepContext.Values, cancellationToken); - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Program.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Program.cs deleted file mode 100644 index fb92b18353..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Program.cs +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Hosting; - -namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot -{ - public class Program - { - /// - /// The entry point of the application. - /// - /// The command line args. - public static void Main(string[] args) - { - CreateHostBuilder(args).Build().Run(); - } - - /// - /// Creates a new instance of the class with pre-configured defaults. - /// - /// The command line args. - /// The initialized . - public static IHostBuilder CreateHostBuilder(string[] args) => - Host.CreateDefaultBuilder(args) - .ConfigureWebHostDefaults(webBuilder => - { - webBuilder.UseStartup(); - }); - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Properties/launchSettings.json b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Properties/launchSettings.json deleted file mode 100644 index e660cda730..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Properties/launchSettings.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "$schema": "http://json.schemastore.org/launchsettings.json", - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:35000", - "sslPort": 0 - } - }, - "profiles": { - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "SimpleHostBotDotNet": { - "commandName": "Project", - "launchBrowser": true, - "applicationUrl": "http://localhost:35000", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/SimpleHostBot.csproj b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/SimpleHostBot.csproj deleted file mode 100644 index 5f112edd07..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/SimpleHostBot.csproj +++ /dev/null @@ -1,29 +0,0 @@ - - - - netcoreapp3.1 - latest - Microsoft.BotFrameworkFunctionalTests.SimpleHostBot - Microsoft.BotFrameworkFunctionalTests.SimpleHostBot - - - - DEBUG;TRACE - - - - - - - - - - - Always - - - Always - - - - \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/SkillsConfiguration.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/SkillsConfiguration.cs deleted file mode 100644 index aa1989900b..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/SkillsConfiguration.cs +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using Microsoft.Bot.Builder.Skills; -using Microsoft.Extensions.Configuration; - -namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot -{ - /// - /// A helper class that loads Skills information from configuration. - /// - public class SkillsConfiguration - { - /// - /// Initializes a new instance of the class to load skills information from configuration. - /// - /// The configuration properties. - public SkillsConfiguration(IConfiguration configuration) - { - var section = configuration?.GetSection("BotFrameworkSkills"); - var skills = section?.Get(); - if (skills != null) - { - foreach (var skill in skills) - { - Skills.Add(skill.Id, skill); - } - } - - var skillHostEndpoint = configuration?.GetValue(nameof(SkillHostEndpoint)); - if (!string.IsNullOrWhiteSpace(skillHostEndpoint)) - { - SkillHostEndpoint = new Uri(skillHostEndpoint); - } - } - - /// - /// Gets the URI representing the endpoint of the host bot. - /// - /// - /// The URI representing the endpoint of the host bot. - /// - public Uri SkillHostEndpoint { get; } - - /// - /// Gets the key-value pairs with the skills bots. - /// - /// - /// The key-value pairs with the skills bots. - /// - public Dictionary Skills { get; } = new Dictionary(StringComparer.OrdinalIgnoreCase); - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Startup.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Startup.cs deleted file mode 100644 index 42879f11f9..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/Startup.cs +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.BotFramework; -using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.Bot.Builder.Integration.AspNet.Core.Skills; -using Microsoft.Bot.Builder.Skills; -using Microsoft.Bot.Connector.Authentication; -using Microsoft.BotFrameworkFunctionalTests.SimpleHostBot.Authentication; -using Microsoft.BotFrameworkFunctionalTests.SimpleHostBot.Bots; -using Microsoft.BotFrameworkFunctionalTests.SimpleHostBot.Dialogs; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; - -namespace Microsoft.BotFrameworkFunctionalTests.SimpleHostBot -{ - public class Startup - { - public Startup(IConfiguration config) - { - Configuration = config; - } - - public IConfiguration Configuration { get; } - - /// - /// This method gets called by the runtime. Use this method to add services to the container. - /// - /// The collection of services to add to the container. - public void ConfigureServices(IServiceCollection services) - { - services.AddControllers().AddNewtonsoftJson(); - - // Configure credentials - services.AddSingleton(); - - // Register the skills configuration class - services.AddSingleton(); - - // Register AuthConfiguration to enable custom claim validation. - services.AddSingleton(sp => new AuthenticationConfiguration { ClaimsValidator = new AllowedSkillsClaimsValidator(sp.GetService()) }); - - // Register the Bot Framework Adapter with error handling enabled. - // Note: some classes use the base BotAdapter so we add an extra registration that pulls the same instance. - services.AddSingleton(); - services.AddSingleton(sp => sp.GetService()); - - // Register the skills client and skills request handler. - services.AddSingleton(); - services.AddHttpClient(); - services.AddSingleton(); - - // Register the storage we'll be using for User and Conversation state. (Memory is great for testing purposes.) - services.AddSingleton(); - - // Register Conversation state (used by the Dialog system itself). - services.AddSingleton(); - - // Create SetupDialog - services.AddSingleton(); - - // Register the bot as a transient. In this case the ASP Controller is expecting an IBot. - services.AddTransient(); - - if (!string.IsNullOrEmpty(Configuration["ChannelService"])) - { - // Register a ConfigurationChannelProvider -- this is only for Azure Gov. - services.AddSingleton(); - } - } - - /// - /// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - /// - /// The application request pipeline to be configured. - /// The web hosting environment. - public void Configure(IApplicationBuilder app, IWebHostEnvironment env) - { - if (env.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); - } - - app.UseDefaultFiles() - .UseStaticFiles() - .UseRouting() - .UseAuthorization() - .UseEndpoints(endpoints => - { - endpoints.MapControllers(); - }); - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/appsettings.json b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/appsettings.json deleted file mode 100644 index ba463c7c36..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/appsettings.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "MicrosoftAppId": "", - "MicrosoftAppPassword": "", - "ChannelService": "", - "SkillHostEndpoint": "http://localhost:35000/api/skills/", - "BotFrameworkSkills": [ - { - "Id": "EchoSkillBotComposerDotNet", - "AppId": "", - "SkillEndpoint": "http://localhost:35410/api/messages" - }, - { - "Id": "EchoSkillBotDotNet", - "AppId": "", - "SkillEndpoint": "http://localhost:35400/api/messages" - }, - { - "Id": "EchoSkillBotDotNet21", - "AppId": "", - "SkillEndpoint": "http://localhost:35405/api/messages" - }, - { - "Id": "EchoSkillBotDotNetV3", - "AppId": "", - "SkillEndpoint": "http://localhost:35407/api/messages" - }, - { - "Id": "EchoSkillBotJS", - "AppId": "", - "SkillEndpoint": "http://localhost:36400/api/messages" - }, - { - "Id": "EchoSkillBotJSV3", - "AppId": "", - "SkillEndpoint": "http://localhost:36407/api/messages" - }, - { - "Id": "EchoSkillBotPython", - "AppId": "", - "SkillEndpoint": "http://localhost:37400/api/messages" - } - ] -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/wwwroot/default.htm b/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/wwwroot/default.htm deleted file mode 100644 index 8d163da5a0..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot/wwwroot/default.htm +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - - SimpleHostBotDotNet - - - - - -
    -
    -
    -
    SimpleRootBotDotNet Bot
    -
    -
    -
    -
    -
    Your bot is ready!
    -
    You can test your bot in the Bot Framework Emulator
    - by connecting to http://localhost:3978/api/messages.
    - -
    Visit Azure - Bot Service to register your bot and add it to
    - various channels. The bot's endpoint URL typically looks - like this:
    -
    https://your_bots_hostname/api/messages
    -
    -
    -
    -
    - -
    - - - \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/AdapterWithErrorHandler.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/AdapterWithErrorHandler.cs deleted file mode 100644 index 1658551aea..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/AdapterWithErrorHandler.cs +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.Bot.Builder.Integration.AspNet.Core.Skills; -using Microsoft.Bot.Builder.Skills; -using Microsoft.Bot.Builder.TraceExtensions; -using Microsoft.Bot.Connector.Authentication; -using Microsoft.Bot.Schema; -using Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Dialogs; -using Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Middleware; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Logging; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot -{ - public class AdapterWithErrorHandler : BotFrameworkHttpAdapter - { - private readonly IConfiguration _configuration; - private readonly ConversationState _conversationState; - private readonly ILogger _logger; - private readonly SkillHttpClient _skillClient; - private readonly SkillsConfiguration _skillsConfig; - - public AdapterWithErrorHandler(IConfiguration configuration, ILogger logger, ConversationState conversationState, SkillHttpClient skillClient = null, SkillsConfiguration skillsConfig = null) - : base(configuration, logger) - { - _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration)); - _conversationState = conversationState ?? throw new ArgumentNullException(nameof(conversationState)); - _logger = logger ?? throw new ArgumentNullException(nameof(logger)); - _skillClient = skillClient; - _skillsConfig = skillsConfig; - - OnTurnError = HandleTurnError; - Use(new LoggerMiddleware(logger)); - } - - private async Task HandleTurnError(ITurnContext turnContext, Exception exception) - { - // Log any leaked exception from the application. - _logger.LogError(exception, $"[OnTurnError] unhandled error : {exception.Message}"); - - await SendErrorMessageAsync(turnContext, exception); - await EndSkillConversationAsync(turnContext); - await ClearConversationStateAsync(turnContext); - } - - private async Task SendErrorMessageAsync(ITurnContext turnContext, Exception exception) - { - try - { - // Send a message to the user. - var errorMessageText = "The bot encountered an error or bug."; - var errorMessage = MessageFactory.Text(errorMessageText, errorMessageText, InputHints.IgnoringInput); - errorMessage.Value = exception; - await turnContext.SendActivityAsync(errorMessage); - - await turnContext.SendActivityAsync($"Exception: {exception.Message}"); - await turnContext.SendActivityAsync(exception.ToString()); - - errorMessageText = "To continue to run this bot, please fix the bot source code."; - errorMessage = MessageFactory.Text(errorMessageText, errorMessageText, InputHints.ExpectingInput); - await turnContext.SendActivityAsync(errorMessage); - - // Send a trace activity, which will be displayed in the Bot Framework Emulator. - await turnContext.TraceActivityAsync("OnTurnError Trace", exception.ToString(), "https://www.botframework.com/schemas/error", "TurnError"); - } - catch (Exception ex) - { - _logger.LogError(ex, $"Exception caught in SendErrorMessageAsync : {ex}"); - } - } - - private async Task EndSkillConversationAsync(ITurnContext turnContext) - { - if (_skillClient == null || _skillsConfig == null) - { - return; - } - - try - { - // Inform the active skill that the conversation is ended so that it has a chance to clean up. - // Note: the root bot manages the ActiveSkillPropertyName, which has a value while the root bot - // has an active conversation with a skill. - var activeSkill = await _conversationState.CreateProperty(MainDialog.ActiveSkillPropertyName).GetAsync(turnContext, () => null); - if (activeSkill != null) - { - var botId = _configuration.GetSection(MicrosoftAppCredentials.MicrosoftAppIdKey)?.Value; - - var endOfConversation = Activity.CreateEndOfConversationActivity(); - endOfConversation.Code = "RootSkillError"; - endOfConversation.ApplyConversationReference(turnContext.Activity.GetConversationReference(), true); - - await _conversationState.SaveChangesAsync(turnContext, true); - await _skillClient.PostActivityAsync(botId, activeSkill, _skillsConfig.SkillHostEndpoint, (Activity)endOfConversation, CancellationToken.None); - } - } - catch (Exception ex) - { - _logger.LogError(ex, $"Exception caught on attempting to send EndOfConversation : {ex}"); - } - } - - private async Task ClearConversationStateAsync(ITurnContext turnContext) - { - try - { - // Delete the conversationState for the current conversation to prevent the - // bot from getting stuck in a error-loop caused by being in a bad state. - // ConversationState should be thought of as similar to "cookie-state" for a Web page. - await _conversationState.DeleteAsync(turnContext); - } - catch (Exception ex) - { - _logger.LogError(ex, $"Exception caught on attempting to Delete ConversationState : {ex}"); - } - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Authentication/AllowedSkillsClaimsValidator.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Authentication/AllowedSkillsClaimsValidator.cs deleted file mode 100644 index 42594c3c85..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Authentication/AllowedSkillsClaimsValidator.cs +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Security.Claims; -using System.Threading.Tasks; -using Microsoft.Bot.Connector.Authentication; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Authentication -{ - /// - /// Sample claims validator that loads an allowed list from configuration if present - /// and checks that responses are coming from configured skills. - /// - public class AllowedSkillsClaimsValidator : ClaimsValidator - { - private readonly List _allowedSkills; - - public AllowedSkillsClaimsValidator(SkillsConfiguration skillsConfig) - { - if (skillsConfig == null) - { - throw new ArgumentNullException(nameof(skillsConfig)); - } - - // Load the appIds for the configured skills (we will only allow responses from skills we have configured). - _allowedSkills = (from skill in skillsConfig.Skills.Values select skill.AppId).ToList(); - } - - public override Task ValidateClaimsAsync(IList claims) - { - if (SkillValidation.IsSkillClaim(claims)) - { - // Check that the appId claim in the skill request is in the list of skills configured for this bot. - var appId = JwtTokenValidation.GetAppIdFromClaims(claims); - if (!_allowedSkills.Contains(appId)) - { - throw new UnauthorizedAccessException($"Received a request from an application with an appID of \"{appId}\". To enable requests from this skill, add the skill to your configuration file."); - } - } - - return Task.CompletedTask; - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Bots/RootBot.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Bots/RootBot.cs deleted file mode 100644 index 75b20d5c30..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Bots/RootBot.cs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Collections.Generic; -using System.IO; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Schema; -using Newtonsoft.Json; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Bots -{ - public class RootBot : ActivityHandler - where T : Dialog - { - private readonly ConversationState _conversationState; - private readonly Dialog _mainDialog; - - public RootBot(ConversationState conversationState, T mainDialog) - { - _conversationState = conversationState; - _mainDialog = mainDialog; - } - - public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default) - { - if (turnContext.Activity.Type == ActivityTypes.ConversationUpdate) - { - // Let the base class handle the activity (this will trigger OnMembersAdded). - await base.OnTurnAsync(turnContext, cancellationToken); - } - else - { - // Run the Dialog with the Activity. - await _mainDialog.RunAsync(turnContext, _conversationState.CreateProperty("DialogState"), cancellationToken); - } - - // Save any state changes that might have occurred during the turn. - await _conversationState.SaveChangesAsync(turnContext, false, cancellationToken); - } - - protected override async Task OnMembersAddedAsync(IList membersAdded, ITurnContext turnContext, CancellationToken cancellationToken) - { - foreach (var member in membersAdded) - { - // Greet anyone that was not the target (recipient) of this message. - // To learn more about Adaptive Cards, see https://aka.ms/msbot-adaptivecards. - if (member.Id != turnContext.Activity.Recipient.Id) - { - var welcomeCard = CreateAdaptiveCardAttachment(); - var activity = MessageFactory.Attachment(welcomeCard); - activity.Speak = "Welcome to the waterfall host bot"; - await turnContext.SendActivityAsync(activity, cancellationToken); - await _mainDialog.RunAsync(turnContext, _conversationState.CreateProperty("DialogState"), cancellationToken); - } - } - } - - // Load attachment from embedded resource. - private Attachment CreateAdaptiveCardAttachment() - { - var cardResourcePath = "Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Cards.welcomeCard.json"; - - using (var stream = GetType().Assembly.GetManifestResourceStream(cardResourcePath)) - { - using (var reader = new StreamReader(stream)) - { - var adaptiveCard = reader.ReadToEnd(); - return new Attachment - { - ContentType = "application/vnd.microsoft.card.adaptive", - Content = JsonConvert.DeserializeObject(adaptiveCard) - }; - } - } - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Cards/welcomeCard.json b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Cards/welcomeCard.json deleted file mode 100644 index 1fc98a2237..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Cards/welcomeCard.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", - "type": "AdaptiveCard", - "version": "1.0", - "body": [ - { - "type": "Image", - "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQtB3AwMUeNoq4gUBGe6Ocj8kyh3bXa9ZbV7u1fVKQoyKFHdkqU", - "size": "stretch" - }, - { - "type": "TextBlock", - "spacing": "Medium", - "size": "Medium", - "weight": "Bolder", - "text": "Welcome to the Skill Dialog Sample!", - "wrap": true, - "maxLines": 0, - "color": "Accent" - }, - { - "type": "TextBlock", - "size": "default", - "text": "This sample allows you to connect to a skill using a SkillDialog and invoke several actions.", - "wrap": true, - "maxLines": 0 - } - ] -} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Controllers/BotController.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Controllers/BotController.cs deleted file mode 100644 index dcf63dabd6..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Controllers/BotController.cs +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.Extensions.Logging; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Controllers -{ - // This ASP Controller is created to handle a request. Dependency injection will provide the Adapter and IBot - // implementation at runtime. Multiple different IBot implementations running at different endpoints can be - // achieved by specifying a more specific type for the bot constructor argument. - [Route("api/messages")] - [ApiController] - public class BotController : ControllerBase - { - private readonly IBotFrameworkHttpAdapter _adapter; - private readonly IBot _bot; - private readonly ILogger _logger; - - public BotController(BotFrameworkHttpAdapter adapter, IBot bot, ILogger logger) - { - _adapter = adapter; - _bot = bot; - _logger = logger; - } - - [HttpPost] - [HttpGet] - public async Task PostAsync() - { - try - { - // Delegate the processing of the HTTP POST to the adapter. - // The adapter will invoke the bot. - await _adapter.ProcessAsync(Request, Response, _bot); - } - catch (Exception ex) - { - _logger.LogError(ex, "Error processing request"); - throw; - } - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Controllers/SkillController.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Controllers/SkillController.cs deleted file mode 100644 index 82e404550b..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Controllers/SkillController.cs +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.Bot.Builder.Skills; -using Microsoft.Bot.Schema; -using Microsoft.Extensions.Logging; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Controllers -{ - /// - /// A controller that handles skill replies to the bot. - /// This example uses the that is registered as a in startup.cs. - /// - [ApiController] - [Route("api/skills")] - public class SkillController : ChannelServiceController - { - private readonly ILogger _logger; - - public SkillController(ChannelServiceHandler handler, ILogger logger) - : base(handler) - { - _logger = logger; - } - - public override Task ReplyToActivityAsync(string conversationId, string activityId, Activity activity) - { - try - { - return base.ReplyToActivityAsync(conversationId, activityId, activity); - } - catch (Exception ex) - { - _logger.LogError(ex, "Error processing request"); - throw; - } - } - - public override Task SendToConversationAsync(string conversationId, Activity activity) - { - try - { - return base.SendToConversationAsync(conversationId, activity); - } - catch (Exception ex) - { - _logger.LogError(ex, "Error processing request"); - throw; - } - } - - public override Task UpdateActivityAsync(string conversationId, string activityId, Activity activity) - { - try - { - return base.UpdateActivityAsync(conversationId, activityId, activity); - } - catch (Exception ex) - { - _logger.LogError(ex, "Error processing request"); - throw; - } - } - - public override Task DeleteActivityAsync(string conversationId, string activityId) - { - try - { - return base.DeleteActivityAsync(conversationId, activityId); - } - catch (Exception ex) - { - _logger.LogError(ex, "Error processing request"); - throw; - } - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/MainDialog.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/MainDialog.cs deleted file mode 100644 index 17b08d3f58..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/MainDialog.cs +++ /dev/null @@ -1,345 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Builder.Dialogs.Choices; -using Microsoft.Bot.Builder.Integration.AspNet.Core.Skills; -using Microsoft.Bot.Builder.Skills; -using Microsoft.Bot.Connector.Authentication; -using Microsoft.Bot.Schema; -using Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Dialogs.Sso; -using Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Skills; -using Microsoft.Extensions.Configuration; -using Newtonsoft.Json; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Dialogs -{ - /// - /// The main dialog for this bot. It uses a to call skills. - /// - public class MainDialog : ComponentDialog - { - // State property key that stores the active skill (used in AdapterWithErrorHandler to terminate the skills on error). - public static readonly string ActiveSkillPropertyName = $"{typeof(MainDialog).FullName}.ActiveSkillProperty"; - - private const string SsoDialogPrefix = "Sso"; - private readonly IStatePropertyAccessor _activeSkillProperty; - private readonly string _deliveryMode = $"{typeof(MainDialog).FullName}.DeliveryMode"; - private readonly string _selectedSkillKey = $"{typeof(MainDialog).FullName}.SelectedSkillKey"; - private readonly SkillsConfiguration _skillsConfig; - private readonly IConfiguration _configuration; - - // Dependency injection uses this constructor to instantiate MainDialog. - public MainDialog(ConversationState conversationState, SkillConversationIdFactoryBase conversationIdFactory, SkillHttpClient skillClient, SkillsConfiguration skillsConfig, IConfiguration configuration) - : base(nameof(MainDialog)) - { - _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration)); - - var botId = configuration.GetSection(MicrosoftAppCredentials.MicrosoftAppIdKey)?.Value; - - _skillsConfig = skillsConfig ?? throw new ArgumentNullException(nameof(skillsConfig)); - - if (skillClient == null) - { - throw new ArgumentNullException(nameof(skillClient)); - } - - if (conversationState == null) - { - throw new ArgumentNullException(nameof(conversationState)); - } - - // Create state property to track the active skill. - _activeSkillProperty = conversationState.CreateProperty(ActiveSkillPropertyName); - - // Register the tangent dialog for testing tangents and resume - AddDialog(new TangentDialog()); - - // Create and add SkillDialog instances for the configured skills. - AddSkillDialogs(conversationState, conversationIdFactory, skillClient, skillsConfig, botId); - - // Add ChoicePrompt to render available delivery modes. - AddDialog(new ChoicePrompt("DeliveryModePrompt")); - - // Add ChoicePrompt to render available groups of skills. - AddDialog(new ChoicePrompt("SkillGroupPrompt")); - - // Add ChoicePrompt to render available skills. - AddDialog(new ChoicePrompt("SkillPrompt")); - - // Add ChoicePrompt to render skill actions. - AddDialog(new ChoicePrompt("SkillActionPrompt")); - - // Special case: register SSO dialogs for skills that support SSO actions. - AddSsoDialogs(configuration); - - // Add main waterfall dialog for this bot. - var waterfallSteps = new WaterfallStep[] - { - SelectDeliveryModeStepAsync, - SelectSkillGroupStepAsync, - SelectSkillStepAsync, - SelectSkillActionStepAsync, - CallSkillActionStepAsync, - FinalStepAsync - }; - AddDialog(new WaterfallDialog(nameof(WaterfallDialog), waterfallSteps)); - - // The initial child Dialog to run. - InitialDialogId = nameof(WaterfallDialog); - } - - /// - /// This override is used to test the "abort" command to interrupt skills from the parent and - /// also to test the "tangent" command to start a tangent and resume a skill. - /// - /// The inner for the current turn of conversation. - /// A cancellation token that can be used by other objects - /// or threads to receive notice of cancellation. - /// A representing the asynchronous operation. - protected override async Task OnContinueDialogAsync(DialogContext innerDc, CancellationToken cancellationToken = default) - { - // This is an example on how to cancel a SkillDialog that is currently in progress from the parent bot. - var activeSkill = await _activeSkillProperty.GetAsync(innerDc.Context, () => null, cancellationToken); - var activity = innerDc.Context.Activity; - if (activeSkill != null && activity.Type == ActivityTypes.Message && !string.IsNullOrWhiteSpace(activity.Text) && activity.Text.Equals("abort", StringComparison.CurrentCultureIgnoreCase)) - { - // Cancel all dialogs when the user says abort. - // The SkillDialog automatically sends an EndOfConversation message to the skill to let the - // skill know that it needs to end its current dialogs, too. - await innerDc.CancelAllDialogsAsync(cancellationToken); - return await innerDc.ReplaceDialogAsync(InitialDialogId, "Canceled! \n\n What delivery mode would you like to use?", cancellationToken); - } - - // Sample to test a tangent when in the middle of a skill conversation. - if (activeSkill != null && activity.Type == ActivityTypes.Message && !string.IsNullOrWhiteSpace(activity.Text) && activity.Text.Equals("tangent", StringComparison.CurrentCultureIgnoreCase)) - { - // Start tangent. - return await innerDc.BeginDialogAsync(nameof(TangentDialog), cancellationToken: cancellationToken); - } - - return await base.OnContinueDialogAsync(innerDc, cancellationToken); - } - - // Render a prompt to select the delivery mode to use. - private async Task SelectDeliveryModeStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - // Create the PromptOptions with the delivery modes supported. - var messageText = stepContext.Options?.ToString() ?? "What delivery mode would you like to use?"; - const string retryMessageText = "That was not a valid choice, please select a valid delivery mode."; - var choices = new List - { - new Choice(DeliveryModes.Normal), - new Choice(DeliveryModes.ExpectReplies) - }; - var options = new PromptOptions - { - Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), - RetryPrompt = MessageFactory.Text(retryMessageText, retryMessageText, InputHints.ExpectingInput), - Choices = choices - }; - - // Prompt the user to select a delivery mode. - return await stepContext.PromptAsync("DeliveryModePrompt", options, cancellationToken); - } - - // Render a prompt to select the group of skills to use. - private async Task SelectSkillGroupStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - // Remember the delivery mode selected by the user. - stepContext.Values[_deliveryMode] = ((FoundChoice)stepContext.Result).Value; - - // Create the PromptOptions with the types of supported skills. - const string messageText = "What group of skills would you like to use?"; - const string retryMessageText = "That was not a valid choice, please select a valid skill group."; - - // Use linq to get a list of the groups for the skills in skillsConfig. - var choices = _skillsConfig.Skills - .GroupBy(skill => skill.Value.Group) - .Select(skillGroup => new Choice(skillGroup.First().Value.Group)) - .ToList(); - - var options = new PromptOptions - { - Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), - RetryPrompt = MessageFactory.Text(retryMessageText, retryMessageText, InputHints.ExpectingInput), - Choices = choices - }; - - // Prompt the user to select a type of skill. - return await stepContext.PromptAsync("SkillGroupPrompt", options, cancellationToken); - } - - // Render a prompt to select the skill to call. - private async Task SelectSkillStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - var skillGroup = ((FoundChoice)stepContext.Result).Value; - - // Create the PromptOptions from the skill configuration which contain the list of configured skills. - const string messageText = "What skill would you like to call?"; - const string retryMessageText = "That was not a valid choice, please select a valid skill."; - - // Use linq to return the skills for the selected group. - var choices = _skillsConfig.Skills - .Where(skill => skill.Value.Group == skillGroup) - .Select(skill => new Choice(skill.Value.Id)) - .ToList(); - - var options = new PromptOptions - { - Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), - RetryPrompt = MessageFactory.Text(retryMessageText, retryMessageText, InputHints.ExpectingInput), - Choices = choices - }; - - // Prompt the user to select a skill. - return await stepContext.PromptAsync("SkillPrompt", options, cancellationToken); - } - - // Render a prompt to select the begin action for the skill. - private async Task SelectSkillActionStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - // Get the skill info based on the selected skill. - var selectedSkillId = ((FoundChoice)stepContext.Result).Value; - var deliveryMode = stepContext.Values[_deliveryMode].ToString(); - var v3Bots = new List { "EchoSkillBotDotNetV3", "EchoSkillBotJSV3" }; - - // Exclude v3 bots from ExpectReplies - if (deliveryMode == DeliveryModes.ExpectReplies && v3Bots.Contains(selectedSkillId)) - { - await stepContext.Context.SendActivityAsync(MessageFactory.Text("V3 Bots do not support 'expectReplies' delivery mode."), cancellationToken); - - // Restart setup dialog - return await stepContext.ReplaceDialogAsync(InitialDialogId, null, cancellationToken); - } - - var selectedSkill = _skillsConfig.Skills.FirstOrDefault(keyValuePair => keyValuePair.Value.Id == selectedSkillId).Value; - - // Remember the skill selected by the user. - stepContext.Values[_selectedSkillKey] = selectedSkill; - - var skillActionChoices = selectedSkill.GetActions().Select(action => new Choice(action)).ToList(); - if (skillActionChoices.Count == 1) - { - // The skill only supports one action (e.g. Echo), skip the prompt. - return await stepContext.NextAsync(new FoundChoice { Value = skillActionChoices[0].Value }, cancellationToken); - } - - // Create the PromptOptions with the actions supported by the selected skill. - var messageText = $"Select an action to send to **{selectedSkill.Id}**."; - var options = new PromptOptions - { - Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), - Choices = skillActionChoices - }; - - // Prompt the user to select a skill action. - return await stepContext.PromptAsync("SkillActionPrompt", options, cancellationToken); - } - - // Starts the SkillDialog based on the user's selections. - private async Task CallSkillActionStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - var selectedSkill = (SkillDefinition)stepContext.Values[_selectedSkillKey]; - - // Save active skill in state. - await _activeSkillProperty.SetAsync(stepContext.Context, selectedSkill, cancellationToken); - - // Create the initial activity to call the skill. - var skillActivity = selectedSkill.CreateBeginActivity(((FoundChoice)stepContext.Result).Value); - if (skillActivity.Name == "Sso") - { - // Special case, we start the SSO dialog to prepare the host to call the skill. - return await stepContext.BeginDialogAsync($"{SsoDialogPrefix}{selectedSkill.Id}", cancellationToken: cancellationToken); - } - - // We are manually creating the activity to send to the skill; ensure we add the ChannelData and Properties - // from the original activity so the skill gets them. - // Note: this is not necessary if we are just forwarding the current activity from context. - skillActivity.ChannelData = stepContext.Context.Activity.ChannelData; - skillActivity.Properties = stepContext.Context.Activity.Properties; - - // Create the BeginSkillDialogOptions and assign the activity to send. - var skillDialogArgs = new BeginSkillDialogOptions { Activity = skillActivity }; - - if (stepContext.Values[_deliveryMode].ToString() == DeliveryModes.ExpectReplies) - { - skillDialogArgs.Activity.DeliveryMode = DeliveryModes.ExpectReplies; - } - - // Start the skillDialog instance with the arguments. - return await stepContext.BeginDialogAsync(selectedSkill.Id, skillDialogArgs, cancellationToken); - } - - // The SkillDialog has ended, render the results (if any) and restart MainDialog. - private async Task FinalStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - var activeSkill = await _activeSkillProperty.GetAsync(stepContext.Context, () => null, cancellationToken); - - // Check if the skill returned any results and display them. - if (stepContext.Result != null) - { - var message = $"Skill \"{activeSkill.Id}\" invocation complete."; - message += $" Result: {JsonConvert.SerializeObject(stepContext.Result)}"; - await stepContext.Context.SendActivityAsync(MessageFactory.Text(message, message, inputHint: InputHints.IgnoringInput), cancellationToken: cancellationToken); - } - - // Clear the delivery mode selected by the user. - stepContext.Values[_deliveryMode] = null; - - // Clear the skill selected by the user. - stepContext.Values[_selectedSkillKey] = null; - - // Clear active skill in state. - await _activeSkillProperty.DeleteAsync(stepContext.Context, cancellationToken); - - // Restart the main dialog with a different message the second time around. - return await stepContext.ReplaceDialogAsync(InitialDialogId, $"Done with \"{activeSkill.Id}\". \n\n What delivery mode would you like to use?", cancellationToken); - } - - // Helper method that creates and adds SkillDialog instances for the configured skills. - private void AddSkillDialogs(ConversationState conversationState, SkillConversationIdFactoryBase conversationIdFactory, SkillHttpClient skillClient, SkillsConfiguration skillsConfig, string botId) - { - foreach (var skillInfo in _skillsConfig.Skills.Values) - { - // Create the dialog options. - var skillDialogOptions = new SkillDialogOptions - { - BotId = botId, - ConversationIdFactory = conversationIdFactory, - SkillClient = skillClient, - SkillHostEndpoint = skillsConfig.SkillHostEndpoint, - ConversationState = conversationState, - Skill = skillInfo - }; - - // Add a SkillDialog for the selected skill. - AddDialog(new SkillDialog(skillDialogOptions, skillInfo.Id)); - } - } - - // Special case. - // SSO needs a dialog in the host to allow the user to sign in. - // We create and several SsoDialog instances for each skill that supports SSO. - private void AddSsoDialogs(IConfiguration configuration) - { - var connectionName = configuration.GetSection("SsoConnectionName")?.Value; - foreach (var ssoSkillDialog in Dialogs.GetDialogs().Where(dialog => dialog.Id.StartsWith("WaterfallSkillBot")).ToList()) - { - AddDialog(new SsoDialog($"{SsoDialogPrefix}{ssoSkillDialog.Id}", ssoSkillDialog, connectionName)); - } - - connectionName = configuration.GetSection("SsoConnectionNameTeams")?.Value; - foreach (var ssoSkillDialog in Dialogs.GetDialogs().Where(dialog => dialog.Id.StartsWith("TeamsSkillBot")).ToList()) - { - AddDialog(new SsoDialog($"{SsoDialogPrefix}{ssoSkillDialog.Id}", ssoSkillDialog, connectionName)); - } - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/Sso/SsoDialog.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/Sso/SsoDialog.cs deleted file mode 100644 index 9e88adc417..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/Sso/SsoDialog.cs +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Builder.Dialogs.Choices; -using Microsoft.Bot.Schema; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Dialogs.Sso -{ - /// - /// Helps prepare the host for SSO operations and provides helpers to check the status and invoke the skill. - /// - public class SsoDialog : ComponentDialog - { - private readonly string _connectionName; - private readonly string _skillDialogId; - - public SsoDialog(string dialogId, Dialog ssoSkillDialog, string connectionName) - : base(dialogId) - { - _connectionName = connectionName; - _skillDialogId = ssoSkillDialog.Id; - - AddDialog(new ChoicePrompt("ActionStepPrompt")); - AddDialog(new SsoSignInDialog(_connectionName)); - AddDialog(ssoSkillDialog); - - var waterfallSteps = new WaterfallStep[] - { - PromptActionStepAsync, - HandleActionStepAsync, - PromptFinalStepAsync, - }; - - AddDialog(new WaterfallDialog(nameof(WaterfallDialog), waterfallSteps)); - - InitialDialogId = nameof(WaterfallDialog); - } - - private async Task PromptActionStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - var messageText = "What SSO action do you want to perform?"; - var repromptMessageText = "That was not a valid choice, please select a valid choice."; - var options = new PromptOptions - { - Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), - RetryPrompt = MessageFactory.Text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput), - Choices = await GetPromptChoicesAsync(stepContext, cancellationToken) - }; - - // Prompt the user to select a skill. - return await stepContext.PromptAsync("ActionStepPrompt", options, cancellationToken); - } - - // Create the prompt choices based on the current sign in status - private async Task> GetPromptChoicesAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - var promptChoices = new List(); - var adapter = (IUserTokenProvider)stepContext.Context.Adapter; - var token = await adapter.GetUserTokenAsync(stepContext.Context, _connectionName, null, cancellationToken); - - if (token == null) - { - promptChoices.Add(new Choice("Login")); - - // Token exchange will fail when the host is not logged on and the skill should - // show a regular OAuthPrompt - promptChoices.Add(new Choice("Call Skill (without SSO)")); - } - else - { - promptChoices.Add(new Choice("Logout")); - promptChoices.Add(new Choice("Show token")); - promptChoices.Add(new Choice("Call Skill (with SSO)")); - } - - promptChoices.Add(new Choice("Back")); - - return promptChoices; - } - - private async Task HandleActionStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - var action = ((FoundChoice)stepContext.Result).Value.ToLowerInvariant(); - - switch (action) - { - case "login": - return await stepContext.BeginDialogAsync(nameof(SsoSignInDialog), null, cancellationToken); - - case "logout": - var adapter = (IUserTokenProvider)stepContext.Context.Adapter; - await adapter.SignOutUserAsync(stepContext.Context, _connectionName, cancellationToken: cancellationToken); - await stepContext.Context.SendActivityAsync("You have been signed out.", cancellationToken: cancellationToken); - return await stepContext.NextAsync(cancellationToken: cancellationToken); - - case "show token": - var tokenProvider = (IUserTokenProvider)stepContext.Context.Adapter; - var token = await tokenProvider.GetUserTokenAsync(stepContext.Context, _connectionName, null, cancellationToken); - if (token == null) - { - await stepContext.Context.SendActivityAsync("User has no cached token.", cancellationToken: cancellationToken); - } - else - { - await stepContext.Context.SendActivityAsync($"Here is your current SSO token: {token.Token}", cancellationToken: cancellationToken); - } - - return await stepContext.NextAsync(cancellationToken: cancellationToken); - - case "call skill (with sso)": - case "call skill (without sso)": - var beginSkillActivity = new Activity - { - Type = ActivityTypes.Event, - Name = "Sso" - }; - - return await stepContext.BeginDialogAsync(_skillDialogId, new BeginSkillDialogOptions { Activity = beginSkillActivity }, cancellationToken); - - case "back": - return new DialogTurnResult(DialogTurnStatus.Complete); - - default: - // This should never be hit since the previous prompt validates the choice - throw new InvalidOperationException($"Unrecognized action: {action}"); - } - } - - private async Task PromptFinalStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - // Restart the dialog (we will exit when the user says end) - return await stepContext.ReplaceDialogAsync(InitialDialogId, null, cancellationToken); - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/Sso/SsoSignInDialog.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/Sso/SsoSignInDialog.cs deleted file mode 100644 index 9529a192d5..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/Sso/SsoSignInDialog.cs +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Schema; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Dialogs.Sso -{ - public class SsoSignInDialog : ComponentDialog - { - public SsoSignInDialog(string connectionName) - : base(nameof(SsoSignInDialog)) - { - AddDialog(new OAuthPrompt( - nameof(OAuthPrompt), - new OAuthPromptSettings - { - ConnectionName = connectionName, - Text = $"Sign in to the host bot using AAD for SSO and connection {connectionName}", - Title = "Sign In", - Timeout = 60000 - })); - AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[] { SignInStepAsync, DisplayTokenAsync })); - InitialDialogId = nameof(WaterfallDialog); - } - - private async Task SignInStepAsync(WaterfallStepContext context, CancellationToken cancellationToken) - { - return await context.BeginDialogAsync(nameof(OAuthPrompt), null, cancellationToken); - } - - private async Task DisplayTokenAsync(WaterfallStepContext context, CancellationToken cancellationToken) - { - if (!(context.Result is TokenResponse result)) - { - await context.Context.SendActivityAsync("No token was provided.", cancellationToken: cancellationToken); - } - else - { - await context.Context.SendActivityAsync($"Here is your token: {result.Token}", cancellationToken: cancellationToken); - } - - return await context.EndDialogAsync(null, cancellationToken); - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/TangentDialog.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/TangentDialog.cs deleted file mode 100644 index 1962319bab..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Dialogs/TangentDialog.cs +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Schema; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Dialogs -{ - /// - /// A simple waterfall dialog used to test triggering tangents from . - /// - public class TangentDialog : ComponentDialog - { - public TangentDialog(string dialogId = nameof(TangentDialog)) - : base(dialogId) - { - AddDialog(new TextPrompt(nameof(TextPrompt))); - var waterfallSteps = new WaterfallStep[] - { - Step1Async, - Step2Async, - EndStepAsync - }; - AddDialog(new WaterfallDialog(nameof(WaterfallDialog), waterfallSteps)); - - InitialDialogId = nameof(WaterfallDialog); - } - - private async Task Step1Async(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - var messageText = "Tangent step 1 of 2, say something."; - var promptMessage = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput); - return await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions { Prompt = promptMessage }, cancellationToken); - } - - private async Task Step2Async(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - var messageText = "Tangent step 2 of 2, say something."; - var promptMessage = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput); - return await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions { Prompt = promptMessage }, cancellationToken); - } - - private async Task EndStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - return await stepContext.EndDialogAsync(cancellationToken: cancellationToken); - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Middleware/LoggerMiddleware.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Middleware/LoggerMiddleware.cs deleted file mode 100644 index 9485dffbda..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Middleware/LoggerMiddleware.cs +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.Bot.Schema; -using Microsoft.Extensions.Logging; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Middleware -{ - /// - /// Uses an ILogger instance to log user and bot messages. It filters out ContinueConversation events coming from skill responses. - /// - public class LoggerMiddleware : IMiddleware - { - private readonly ILogger _logger; - - public LoggerMiddleware(ILogger logger) - { - _logger = logger ?? throw new ArgumentNullException(nameof(logger)); - } - - public async Task OnTurnAsync(ITurnContext turnContext, NextDelegate next, CancellationToken cancellationToken = default) - { - // Note: skill responses will show as ContinueConversation events; we don't log those. - // We only log incoming messages from users. - if (!(turnContext.Activity.Type == ActivityTypes.Event && turnContext.Activity.Name == ActivityEventNames.ContinueConversation)) - { - var message = $"User said: {turnContext.Activity.Text} Type: \"{turnContext.Activity.Type}\" Name: \"{turnContext.Activity.Name}\""; - _logger.LogInformation(message); - } - - // Register outgoing handler. - turnContext.OnSendActivities(OutgoingHandler); - - // Continue processing messages. - await next(cancellationToken); - } - - private async Task OutgoingHandler(ITurnContext turnContext, List activities, Func> next) - { - foreach (var activity in activities) - { - var message = $"Bot said: {activity.Text} Type: \"{activity.Type}\" Name: \"{activity.Name}\""; - _logger.LogInformation(message); - } - - return await next(); - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Program.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Program.cs deleted file mode 100644 index 306d8a19a4..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Program.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Hosting; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot -{ - public class Program - { - public static void Main(string[] args) - { - CreateHostBuilder(args).Build().Run(); - } - - public static IHostBuilder CreateHostBuilder(string[] args) => - Host.CreateDefaultBuilder(args) - .ConfigureWebHostDefaults(webBuilder => - { - webBuilder.UseStartup(); - }); - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Properties/launchSettings.json b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Properties/launchSettings.json deleted file mode 100644 index dafa6f0bc2..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Properties/launchSettings.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "$schema": "http://json.schemastore.org/launchsettings.json", - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:35020", - "sslPort": 0 - } - }, - "profiles": { - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "WaterfallHostBot": { - "commandName": "Project", - "launchBrowser": true, - "applicationUrl": "http://localhost:35020", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/EchoSkill.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/EchoSkill.cs deleted file mode 100644 index 7ff87fa16c..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/EchoSkill.cs +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using Microsoft.Bot.Schema; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Skills -{ - public class EchoSkill : SkillDefinition - { - private enum SkillAction - { - Message - } - - public override IList GetActions() - { - return new List { SkillAction.Message.ToString() }; - } - - public override Activity CreateBeginActivity(string actionId) - { - if (!Enum.TryParse(actionId, true, out _)) - { - throw new InvalidOperationException($"Unable to create begin activity for \"{actionId}\"."); - } - - // We only support one activity for Echo so no further checks are needed - return new Activity(ActivityTypes.Message) - { - Name = SkillAction.Message.ToString(), - Text = "Begin the Echo Skill." - }; - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/SkillDefinition.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/SkillDefinition.cs deleted file mode 100644 index e150259058..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/SkillDefinition.cs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using Microsoft.Bot.Builder.Skills; -using Microsoft.Bot.Schema; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Skills -{ - /// - /// Extends and provides methods to return the actions and the begin activity to start a skill. - /// This class also exposes a group property to render skill groups and narrow down the available options. - /// - /// - /// This is just a temporary implementation, ideally, this should be replaced by logic that parses a manifest and creates - /// what's needed. - /// - public class SkillDefinition : BotFrameworkSkill - { - public string Group { get; set; } - - public virtual IList GetActions() - { - throw new NotImplementedException(); - } - - public virtual Activity CreateBeginActivity(string actionId) - { - throw new NotImplementedException(); - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/TeamsSkill.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/TeamsSkill.cs deleted file mode 100644 index 3975757a47..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/TeamsSkill.cs +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using Microsoft.Bot.Schema; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Skills -{ - public class TeamsSkill : SkillDefinition - { - private enum SkillAction - { - TeamsTaskModule, - TeamsCardAction, - TeamsConversation, - Cards, - Proactive, - Attachment, - Auth, - Sso, - Echo, - FileUpload, - Delete, - Update, - } - - public override IList GetActions() - { - return Enum.GetNames(typeof(SkillAction)); - } - - public override Activity CreateBeginActivity(string actionId) - { - if (!Enum.TryParse(actionId, true, out var skillAction)) - { - throw new InvalidOperationException($"Unable to create begin activity for \"{actionId}\"."); - } - - // We don't support special parameters in these skills so a generic event with the right name - // will do in this case. - return new Activity(ActivityTypes.Event) { Name = skillAction.ToString() }; - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/WaterfallSkill.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/WaterfallSkill.cs deleted file mode 100644 index 9725c05217..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Skills/WaterfallSkill.cs +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using Microsoft.Bot.Schema; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Skills -{ - public class WaterfallSkill : SkillDefinition - { - private enum SkillAction - { - Cards, - Proactive, - Auth, - MessageWithAttachment, - Sso, - FileUpload, - Echo, - Delete, - Update - } - - public override IList GetActions() - { - return Enum.GetNames(typeof(SkillAction)); - } - - public override Activity CreateBeginActivity(string actionId) - { - if (!Enum.TryParse(actionId, true, out var skillAction)) - { - throw new InvalidOperationException($"Unable to create begin activity for \"{actionId}\"."); - } - - // We don't support special parameters in these skills so a generic event with the right name - // will do in this case. - return new Activity(ActivityTypes.Event) { Name = skillAction.ToString() }; - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/SkillsConfiguration.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/SkillsConfiguration.cs deleted file mode 100644 index 2c80655e23..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/SkillsConfiguration.cs +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Skills; -using Microsoft.Extensions.Configuration; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot -{ - /// - /// A helper class that loads Skills information from configuration. - /// - /// - /// This class loads the skill settings from config and casts them into derived types of - /// so we can render prompts with the skills and in their groups. - /// - public class SkillsConfiguration - { - public SkillsConfiguration(IConfiguration configuration) - { - var section = configuration?.GetSection("BotFrameworkSkills"); - var skills = section?.Get(); - if (skills != null) - { - foreach (var skill in skills) - { - Skills.Add(skill.Id, CreateSkillDefinition(skill)); - } - } - - var skillHostEndpoint = configuration?.GetValue(nameof(SkillHostEndpoint)); - if (!string.IsNullOrWhiteSpace(skillHostEndpoint)) - { - SkillHostEndpoint = new Uri(skillHostEndpoint); - } - } - - public Uri SkillHostEndpoint { get; } - - public Dictionary Skills { get; } = new Dictionary(); - - private static SkillDefinition CreateSkillDefinition(SkillDefinition skill) - { - // Note: we hard code this for now, we should dynamically create instances based on the manifests. - // For now, this code creates a strong typed version of the SkillDefinition based on the skill group - // and copies the info from settings into it. - SkillDefinition skillDefinition; - switch (skill.Group) - { - case "Echo": - skillDefinition = ObjectPath.Assign(new EchoSkill(), skill); - break; - case "Waterfall": - skillDefinition = ObjectPath.Assign(new WaterfallSkill(), skill); - break; - case "Teams": - skillDefinition = ObjectPath.Assign(new TeamsSkill(), skill); - break; - default: - throw new Exception($"Unable to find definition class for {skill.Id}."); - } - - return skillDefinition; - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Startup.cs b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Startup.cs deleted file mode 100644 index 3795f176d8..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/Startup.cs +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.BotFramework; -using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.Bot.Builder.Integration.AspNet.Core.Skills; -using Microsoft.Bot.Builder.Skills; -using Microsoft.Bot.Connector.Authentication; -using Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Authentication; -using Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Bots; -using Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot.Dialogs; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot -{ - public class Startup - { - public Startup(IConfiguration configuration) - { - Configuration = configuration; - } - - public IConfiguration Configuration { get; } - - // This method gets called by the runtime. Use this method to add services to the container. - public void ConfigureServices(IServiceCollection services) - { - services.AddControllers() - .AddNewtonsoftJson(); - - // Register credential provider. - services.AddSingleton(); - - // Register the skills configuration class. - services.AddSingleton(); - - // Register AuthConfiguration to enable custom claim validation. - services.AddSingleton(sp => new AuthenticationConfiguration { ClaimsValidator = new AllowedSkillsClaimsValidator(sp.GetService()) }); - - // Register the Bot Framework Adapter with error handling enabled. - // Note: some classes expect a BotAdapter and some expect a BotFrameworkHttpAdapter, so - // register the same adapter instance for both types. - services.AddSingleton(); - services.AddSingleton(sp => sp.GetService()); - - // Register the skills conversation ID factory, the client and the request handler. - services.AddSingleton(); - services.AddHttpClient(); - - //services.AddSingleton(); - services.AddSingleton(); - - // Register the storage we'll be using for User and Conversation state. (Memory is great for testing purposes.) - services.AddSingleton(); - - // Register Conversation state (used by the Dialog system itself). - services.AddSingleton(); - services.AddSingleton(); - - // Register the MainDialog that will be run by the bot. - services.AddSingleton(); - - // Register the bot as a transient. In this case the ASP Controller is expecting an IBot. - services.AddTransient>(); - } - - // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IWebHostEnvironment env) - { - if (env.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); - } - - app.UseDefaultFiles(); - app.UseStaticFiles(); - - // Uncomment this to support HTTPS. - // app.UseHttpsRedirection(); - - app.UseRouting(); - - app.UseWebSockets(); - - app.UseAuthorization(); - - app.UseEndpoints(endpoints => - { - endpoints.MapControllers(); - }); - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/TeamsAppManifest/icon-color.png b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/TeamsAppManifest/icon-color.png deleted file mode 100644 index 48a2de13303e1e8a25f76391f4a34c7c4700fd3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1229 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCe1|JzX3_D&pSWuFnWfl{x;g|9jrEYf8Vqrkk2Ba|%ol3OT){=#|7ID~|e{ zODQ{kU&ME#@`*-tm%Tukt_gFr+`F?$dx9wg-jad`^gsMn2_%Kh%WH91&SjKq5 zgkdI|!exdOVgw@>>=!Tjnk6q)zV*T8$FdgRFYC{kQ7``NOcl@R(_%_8e5e0E;>v0G zEM9kb)2itgOTSfH7M=b3-S61B?PiazMdwXZwrS)^5UUS#HQjaoua5h_{Gx*_Zz|XK z$tf0mZ&=tpf2!!Q)!A_l&o_$g*|JM$VZa~F^0{x1T{=QFu*x$`=V%~jUW=G`iqqp=lquB-`P{Qjw`=zEu3cMc_x7m2f#9m}uoFBMMQ^+%cOL)F_)N@JZ}Axoxi1y= zeebq`y==e!nl+?cK-PhOec!3%|IupShHrcjW8sSt)F1>NW*{ zW%ljk2)nk%-}+F&?gi=7^$L#VeX3@kp%f{n}fR z`}uZPx$IY~r8R5%gMlrc`jP!L3IloKFoq~sFFH5|cdklX=R08T)}71BhaN8$`AsNf0_ zq>WNhAtCd|-nBlTU=y5zl_vXlXZ~bkuaYENMp>3QSQ_#zuYZ+eQh*OIHRxP~s(}ic zN2J4$u=AQcPt)|>F3zZLsjtP;Tajkugx;NcYED2~JVBlVO>{`uAY?Q4O|AA z=16}CJieK^5P_TKnou!zGR`$!PUC)DqtkO;?!`p!+9v3lP_mu=%Vt3BkoWsq%;FN1sp58w*zfr-z^7tIb*q>!yncCjrzLuOk3N+d&~^Cxd| z - /// A specialized to support SSO Token exchanges. - /// - public class TokenExchangeSkillHandler : SkillHandler - { - private const string WaterfallSkillBot = "WaterfallSkillBot"; - - private readonly BotAdapter _adapter; - private readonly SkillsConfiguration _skillsConfig; - private readonly SkillHttpClient _skillClient; - private readonly string _botId; - private readonly SkillConversationIdFactoryBase _conversationIdFactory; - private readonly ILogger _logger; - private readonly IExtendedUserTokenProvider _tokenExchangeProvider; - private readonly IConfiguration _configuration; - - public TokenExchangeSkillHandler( - BotAdapter adapter, - IBot bot, - IConfiguration configuration, - SkillConversationIdFactoryBase conversationIdFactory, - SkillsConfiguration skillsConfig, - SkillHttpClient skillClient, - ICredentialProvider credentialProvider, - AuthenticationConfiguration authConfig, - IChannelProvider channelProvider = null, - ILogger logger = null) - : base(adapter, bot, conversationIdFactory, credentialProvider, authConfig, channelProvider, logger) - { - _adapter = adapter; - _tokenExchangeProvider = adapter as IExtendedUserTokenProvider; - if (_tokenExchangeProvider == null) - { - throw new ArgumentException($"{nameof(adapter)} does not support token exchange"); - } - - _configuration = configuration; - _skillsConfig = skillsConfig; - _skillClient = skillClient; - _conversationIdFactory = conversationIdFactory; - _logger = logger ?? NullLogger.Instance; - _botId = configuration.GetSection(MicrosoftAppCredentials.MicrosoftAppIdKey)?.Value; - } - - protected override async Task OnSendToConversationAsync(ClaimsIdentity claimsIdentity, string conversationId, Activity activity, CancellationToken cancellationToken = default(CancellationToken)) - { - if (await InterceptOAuthCards(claimsIdentity, activity).ConfigureAwait(false)) - { - return new ResourceResponse(Guid.NewGuid().ToString("N", CultureInfo.InvariantCulture)); - } - - return await base.OnSendToConversationAsync(claimsIdentity, conversationId, activity, cancellationToken).ConfigureAwait(false); - } - - protected override async Task OnReplyToActivityAsync(ClaimsIdentity claimsIdentity, string conversationId, string activityId, Activity activity, CancellationToken cancellationToken = default(CancellationToken)) - { - if (await InterceptOAuthCards(claimsIdentity, activity).ConfigureAwait(false)) - { - return new ResourceResponse(Guid.NewGuid().ToString("N", CultureInfo.InvariantCulture)); - } - - return await base.OnReplyToActivityAsync(claimsIdentity, conversationId, activityId, activity, cancellationToken).ConfigureAwait(false); - } - - private BotFrameworkSkill GetCallingSkill(ClaimsIdentity claimsIdentity) - { - var appId = JwtTokenValidation.GetAppIdFromClaims(claimsIdentity.Claims); - - if (string.IsNullOrWhiteSpace(appId)) - { - return null; - } - - return _skillsConfig.Skills.Values.FirstOrDefault(s => string.Equals(s.AppId, appId, StringComparison.InvariantCultureIgnoreCase)); - } - - private async Task InterceptOAuthCards(ClaimsIdentity claimsIdentity, Activity activity) - { - var oauthCardAttachment = activity.Attachments?.FirstOrDefault(a => a?.ContentType == OAuthCard.ContentType); - if (oauthCardAttachment != null) - { - var targetSkill = GetCallingSkill(claimsIdentity); - if (targetSkill != null) - { - var oauthCard = ((JObject)oauthCardAttachment.Content).ToObject(); - - if (!string.IsNullOrWhiteSpace(oauthCard?.TokenExchangeResource?.Uri)) - { - using (var context = new TurnContext(_adapter, activity)) - { - context.TurnState.Add("BotIdentity", claimsIdentity); - - // We need to know what connection name to use for the token exchange so we figure that out here - var connectionName = targetSkill.Id.Contains(WaterfallSkillBot) ? _configuration.GetSection("SsoConnectionName").Value : _configuration.GetSection("SsoConnectionNameTeams").Value; - - if (string.IsNullOrEmpty(connectionName)) - { - throw new ArgumentNullException("The connection name cannot be null."); - } - - // AAD token exchange - try - { - var result = await _tokenExchangeProvider.ExchangeTokenAsync( - context, - connectionName, - activity.Recipient.Id, - new TokenExchangeRequest() { Uri = oauthCard.TokenExchangeResource.Uri }).ConfigureAwait(false); - - if (!string.IsNullOrEmpty(result?.Token)) - { - // If token above is null, then SSO has failed and hence we return false. - // If not, send an invoke to the skill with the token. - return await SendTokenExchangeInvokeToSkillAsync(activity, oauthCard.TokenExchangeResource.Id, result.Token, oauthCard.ConnectionName, targetSkill, default).ConfigureAwait(false); - } - } - catch (Exception ex) - { - // Show oauth card if token exchange fails. - _logger.LogWarning("Unable to exchange token.", ex); - return false; - } - - return false; - } - } - } - } - - return false; - } - - private async Task SendTokenExchangeInvokeToSkillAsync(Activity incomingActivity, string id, string token, string connectionName, BotFrameworkSkill targetSkill, CancellationToken cancellationToken) - { - var activity = incomingActivity.CreateReply(); - activity.Type = ActivityTypes.Invoke; - activity.Name = SignInConstants.TokenExchangeOperationName; - activity.Value = new TokenExchangeInvokeRequest() - { - Id = id, - Token = token, - ConnectionName = connectionName, - }; - - var skillConversationReference = await _conversationIdFactory.GetSkillConversationReferenceAsync(incomingActivity.Conversation.Id, cancellationToken).ConfigureAwait(false); - activity.Conversation = skillConversationReference.ConversationReference.Conversation; - activity.ServiceUrl = skillConversationReference.ConversationReference.ServiceUrl; - - // route the activity to the skill - var response = await _skillClient.PostActivityAsync(_botId, targetSkill, _skillsConfig.SkillHostEndpoint, activity, cancellationToken); - - // Check response status: true if success, false if failure - return response.Status >= 200 && response.Status <= 299; - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/WaterfallHostBot.csproj b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/WaterfallHostBot.csproj deleted file mode 100644 index e1954961e8..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/WaterfallHostBot.csproj +++ /dev/null @@ -1,24 +0,0 @@ - - - - netcoreapp3.1 - latest - Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot - Microsoft.BotFrameworkFunctionalTests.WaterfallHostBot - - - - - - - - - - - - - - - - - diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/appsettings.json b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/appsettings.json deleted file mode 100644 index da8a447b35..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/appsettings.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft": "Warning", - "Microsoft.Hosting.Lifetime": "Information" - } - }, - "AllowedHosts": "*", - - "MicrosoftAppId": "", - "MicrosoftAppPassword": "", - "SsoConnectionName": "", - "SsoConnectionNameTeams": "", - "SkillHostEndpoint": "http://localhost:35020/api/skills/", - "BotFrameworkSkills": [ - { - "Id": "EchoSkillBotDotNet", - "Group": "Echo", - "AppId": "", - "SkillEndpoint": "http://localhost:35400/api/messages" - }, - { - "Id": "EchoSkillBotDotNet21", - "Group": "Echo", - "AppId": "", - "SkillEndpoint": "http://localhost:35405/api/messages" - }, - { - "Id": "EchoSkillBotDotNetV3", - "Group": "Echo", - "AppId": "", - "SkillEndpoint": "http://localhost:35407/api/messages" - }, - { - "Id": "EchoSkillBotJS", - "Group": "Echo", - "AppId": "", - "SkillEndpoint": "http://localhost:36400/api/messages" - }, - { - "Id": "EchoSkillBotJSV3", - "Group": "Echo", - "AppId": "", - "SkillEndpoint": "http://localhost:36407/api/messages" - }, - { - "Id": "EchoSkillBotPython", - "Group": "Echo", - "AppId": "", - "SkillEndpoint": "http://localhost:37400/api/messages" - }, - { - "Id": "WaterfallSkillBotDotNet", - "Group": "Waterfall", - "AppId": "", - "SkillEndpoint": "http://localhost:35420/api/messages" - }, - { - "Id": "WaterfallSkillBotJS", - "Group": "Waterfall", - "AppId": "", - "SkillEndpoint": "http://localhost:36420/api/messages" - }, - { - "Id": "WaterfallSkillBotPython", - "Group": "Waterfall", - "AppId": "", - "SkillEndpoint": "http://localhost:37420/api/messages" - }, - { - "Id": "TeamsSkillBotDotNet", - "Group": "Teams", - "AppId": "", - "SkillEndpoint": "http://localhost:35430/api/messages" - }, - { - "Id": "TeamsSkillBotJS", - "Group": "Teams", - "AppId": "", - "SkillEndpoint": "http://localhost:36430/api/messages" - }, - { - "Id": "TeamsSkillBotPython", - "Group": "Teams", - "AppId": "", - "SkillEndpoint": "http://localhost:37430/api/messages" - } - ] -} diff --git a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/wwwroot/default.htm b/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/wwwroot/default.htm deleted file mode 100644 index 4f00a9a6d4..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/CodeFirst/WaterfallHostBot/wwwroot/default.htm +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - - WaterfallHostBot - - - - - -
    -
    -
    -
    WaterfallHostBot Bot
    -
    -
    -
    -
    -
    Your bot is ready!
    -
    You can test your bot in the Bot Framework Emulator
    - by connecting to http://localhost:3978/api/messages.
    - -
    Visit Azure - Bot Service to register your bot and add it to
    - various channels. The bot's endpoint URL typically looks - like this:
    -
    https://your_bots_hostname/api/messages
    -
    -
    -
    -
    - -
    - - - \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/Directory.Build.props b/tests/functional/Bots/DotNet/Consumers/Composer/Directory.Build.props deleted file mode 100644 index d4378dfc87..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/Composer/Directory.Build.props +++ /dev/null @@ -1,15 +0,0 @@ - - - - true - - - - - $(NoWarn);SA1412;NU1701 - - - - - - \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/.gitignore b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/.gitignore deleted file mode 100644 index eaa9cf70cc..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# files generated during the lubuild process -# IMPORTANT: In regular composer bots the generated folder should be excluded and regenerated on the build server -# or by the dev running composer locally. But in this case we include it so we don't have to run bf luis:cross-train -# in the build server -# generated/ diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Controllers/BotController.cs b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Controllers/BotController.cs deleted file mode 100644 index c87f3cba5e..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Controllers/BotController.cs +++ /dev/null @@ -1,76 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime.Settings; -using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Logging; - -namespace SimpleHostBotComposer.Controllers -{ - // This ASP Controller is created to handle a request. Dependency Injection will provide the Adapter and IBot - // implementation at runtime. Multiple different IBot implementations running at different endpoints can be - // achieved by specifying a more specific type for the bot constructor argument. - [ApiController] - public class BotController : ControllerBase - { - private readonly Dictionary _adapters = new Dictionary(); - private readonly IBot _bot; - private readonly ILogger _logger; - - public BotController( - IConfiguration configuration, - IEnumerable adapters, - IBot bot, - ILogger logger) - { - _bot = bot ?? throw new ArgumentNullException(nameof(bot)); - _logger = logger; - - var adapterSettings = configuration.GetSection(AdapterSettings.AdapterSettingsKey).Get>() ?? new List(); - adapterSettings.Add(AdapterSettings.CoreBotAdapterSettings); - - foreach (var adapter in adapters ?? throw new ArgumentNullException(nameof(adapters))) - { - var settings = adapterSettings.FirstOrDefault(s => s.Enabled && s.Type == adapter.GetType().FullName); - - if (settings != null) - { - _adapters.Add(settings.Route, adapter); - } - } - } - - [HttpPost] - [HttpGet] - [Route("api/{route}")] - public async Task PostAsync(string route) - { - if (string.IsNullOrEmpty(route)) - { - _logger.LogError($"PostAsync: No route provided."); - throw new ArgumentNullException(nameof(route)); - } - - if (_adapters.TryGetValue(route, out IBotFrameworkHttpAdapter adapter)) - { - if (_logger.IsEnabled(LogLevel.Debug)) - { - _logger.LogInformation($"PostAsync: routed '{route}' to {adapter.GetType().Name}"); - } - - // Delegate the processing of the HTTP POST to the appropriate adapter. - // The adapter will invoke the bot. - await adapter.ProcessAsync(Request, Response, _bot).ConfigureAwait(false); - } - else - { - _logger.LogError($"PostAsync: No adapter registered and enabled for route {route}."); - throw new KeyNotFoundException($"No adapter registered and enabled for route {route}."); - } - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Controllers/SkillController.cs b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Controllers/SkillController.cs deleted file mode 100644 index 4f90bad170..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Controllers/SkillController.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.Bot.Schema; -using Microsoft.Extensions.Logging; - -namespace SimpleHostBotComposer.Controllers -{ - /// - /// A controller that handles skill replies to the bot. - /// - [ApiController] - [Route("api/skills")] - public class SkillController : ChannelServiceController - { - private readonly ILogger _logger; - - public SkillController(ChannelServiceHandlerBase handler, ILogger logger) - : base(handler) - { - _logger = logger; - } - - public override Task ReplyToActivityAsync(string conversationId, string activityId, Activity activity) - { - try - { - if (_logger.IsEnabled(LogLevel.Debug)) - { - _logger.LogDebug($"ReplyToActivityAsync: conversationId={conversationId}, activityId={activityId}"); - } - - return base.ReplyToActivityAsync(conversationId, activityId, activity); - } - catch (Exception ex) - { - _logger.LogError(ex, $"ReplyToActivityAsync: {ex}"); - throw; - } - } - - public override Task SendToConversationAsync(string conversationId, Activity activity) - { - try - { - if (_logger.IsEnabled(LogLevel.Debug)) - { - _logger.LogDebug($"SendToConversationAsync: conversationId={conversationId}"); - } - - return base.SendToConversationAsync(conversationId, activity); - } - catch (Exception ex) - { - _logger.LogError(ex, $"SendToConversationAsync: {ex}"); - throw; - } - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Program.cs b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Program.cs deleted file mode 100644 index 2fd91a9203..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Program.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime.Extensions; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Hosting; - -namespace SimpleHostBotComposer -{ - public class Program - { - public static void Main(string[] args) - { - CreateHostBuilder(args).Build().Run(); - } - - public static IHostBuilder CreateHostBuilder(string[] args) => - Host.CreateDefaultBuilder(args) - .ConfigureAppConfiguration((hostingContext, builder) => - { - var applicationRoot = AppDomain.CurrentDomain.BaseDirectory; - var environmentName = hostingContext.HostingEnvironment.EnvironmentName; - var settingsDirectory = "settings"; - - builder.AddBotRuntimeConfiguration(applicationRoot, settingsDirectory, environmentName); - - builder.AddCommandLine(args); - }) - .ConfigureWebHostDefaults(webBuilder => - { - webBuilder.UseStartup(); - }); - } -} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Properties/launchSettings.json b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Properties/launchSettings.json deleted file mode 100644 index a9a6d4673c..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Properties/launchSettings.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:35010/", - "sslPort": 0 - } - }, - "profiles": { - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "SimpleHostBotComposerDotNet": { - "commandName": "Project", - "launchBrowser": true, - "applicationUrl": "http://localhost:35010", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/README.md b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/README.md deleted file mode 100644 index b48822a762..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Welcome to your new bot - -This bot project was created using the Empty Bot template, and contains a minimal set of files necessary to have a working bot. - -## Next steps - -### Start building your bot - -Composer can help guide you through getting started building your bot. From your bot settings page (the wrench icon on the left navigation rail), click on the rocket-ship icon on the top right for some quick navigation links. - -Another great resource if you're just getting started is the **[guided tutorial](https://docs.microsoft.com/en-us/composer/tutorial/tutorial-introduction)** in our documentation. - -### Connect with your users - -Your bot comes pre-configured to connect to our Web Chat and DirectLine channels, but there are many more places you can connect your bot to - including Microsoft Teams, Telephony, DirectLine Speech, Slack, Facebook, Outlook and more. Check out all of the places you can connect to on the bot settings page. - -### Publish your bot to Azure from Composer - -Composer can help you provision the Azure resources necessary for your bot, and publish your bot to them. To get started, create a publishing profile from your bot settings page in Composer (the wrench icon on the left navigation rail). Make sure you only provision the optional Azure resources you need! - -### Extend your bot with packages - -From Package Manager in Composer you can find useful packages to help add additional pre-built functionality you can add to your bot - everything from simple dialogs & custom actions for working with specific scenarios to custom adapters for connecting your bot to users on clients like Facebook or Slack. - -### Extend your bot with code - -You can also extend your bot with code - simply open up the folder that was generated for you in the location you chose during the creation process with your favorite IDE (like Visual Studio). You can do things like create custom actions that can be used during dialog flows, create custom middleware to pre-process (or post-process) messages, and more. See [our documentation](https://aka.ms/bf-extend-with-code) for more information. diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/SimpleHostBotComposer.botproj b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/SimpleHostBotComposer.botproj deleted file mode 100644 index 12ebc0273a..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/SimpleHostBotComposer.botproj +++ /dev/null @@ -1,41 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/main/Composer/packages/server/schemas/botproject.schema", - "name": "SimpleHostBotComposer", - "skills": { - "echoSkillBotComposerDotNet": { - "manifest": "http://localhost:35410/manifests/echoskillbotcomposer-manifest.json", - "remote": true, - "endpointName": "default" - }, - "echoSkillBotDotNet": { - "manifest": "http://localhost:35400/manifests/echoskillbot-manifest-1.0.json", - "remote": true, - "endpointName": "default" - }, - "echoSkillBotDotNet21": { - "manifest": "http://localhost:35405/manifests/echoskillbot-manifest-1.0.json", - "remote": true, - "endpointName": "default" - }, - "echoSkillBotDotNetV3": { - "manifest": "http://localhost:35407/manifests/echoskillbotv3-manifest-1.0.json", - "remote": true, - "endpointName": "default" - }, - "echoSkillBotJs": { - "manifest": "http://localhost:36400/manifests/echoskillbot-manifest-1.0.json", - "remote": true, - "endpointName": "default" - }, - "echoSkillBotJsv3": { - "manifest": "http://localhost:36407/manifests/echoskillbotv3-manifest-1.0.json", - "remote": true, - "endpointName": "default" - }, - "echoSkillBotPython": { - "manifest": "http://localhost:37400/manifests/echoskillbot-manifest-1.0.json", - "remote": true, - "endpointName": "default" - } - } -} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/SimpleHostBotComposer.csproj b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/SimpleHostBotComposer.csproj deleted file mode 100644 index 796e4f6f76..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/SimpleHostBotComposer.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - - netcoreapp3.1 - OutOfProcess - c7eabc4e-9c9c-4b56-82d5-23e24f20ee24 - - - - PreserveNewest - - - - - - - - - \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Startup.cs b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Startup.cs deleted file mode 100644 index f9c021bb07..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/Startup.cs +++ /dev/null @@ -1,56 +0,0 @@ -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.StaticFiles; -using Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime.Extensions; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; - -namespace SimpleHostBotComposer -{ - public class Startup - { - public Startup(IConfiguration configuration) - { - Configuration = configuration; - } - - public IConfiguration Configuration { get; } - - // This method gets called by the runtime. Use this method to add services to the container. - public void ConfigureServices(IServiceCollection services) - { - services.AddControllers().AddNewtonsoftJson(); - services.AddBotRuntime(Configuration); - } - - // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IWebHostEnvironment env) - { - if (env.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); - } - - app.UseDefaultFiles(); - - // Set up custom content types - associating file extension to MIME type. - var provider = new FileExtensionContentTypeProvider(); - provider.Mappings[".lu"] = "application/vnd.microsoft.lu"; - provider.Mappings[".qna"] = "application/vnd.microsoft.qna"; - - // Expose static files in manifests folder for skill scenarios. - app.UseStaticFiles(new StaticFileOptions - { - ContentTypeProvider = provider - }); - app.UseWebSockets(); - app.UseRouting(); - app.UseAuthorization(); - app.UseEndpoints(endpoints => - { - endpoints.MapControllers(); - }); - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/CallEchoSkill.dialog b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/CallEchoSkill.dialog deleted file mode 100644 index 2967ebdbc8..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/CallEchoSkill.dialog +++ /dev/null @@ -1,244 +0,0 @@ -{ - "$kind": "Microsoft.AdaptiveDialog", - "$designer": { - "id": "950uG3", - "name": "CallEchoSkill", - "description": "" - }, - "autoEndDialog": true, - "defaultResultProperty": "dialog.result", - "triggers": [ - { - "$kind": "Microsoft.OnBeginDialog", - "$designer": { - "name": "BeginDialog", - "description": "", - "id": "XuIGWc" - }, - "actions": [ - { - "$kind": "Microsoft.ChoiceInput", - "$designer": { - "id": "AtuOWj" - }, - "defaultLocale": "en-us", - "disabled": false, - "maxTurnCount": 3, - "alwaysPrompt": false, - "allowInterruptions": false, - "unrecognizedPrompt": "", - "invalidPrompt": "", - "defaultValueResponse": "", - "prompt": "${ChoiceInput_Prompt_AtuOWj()}", - "choiceOptions": { - "includeNumbers": true - }, - "property": "dialog.deliveryMode", - "style": "suggestedAction", - "choices": [ - "normal", - "expectReplies" - ] - }, - { - "$kind": "Microsoft.ChoiceInput", - "$designer": { - "id": "DIABs2" - }, - "defaultLocale": "en-us", - "disabled": false, - "maxTurnCount": 3, - "alwaysPrompt": false, - "allowInterruptions": false, - "unrecognizedPrompt": "", - "invalidPrompt": "", - "defaultValueResponse": "", - "prompt": "${ChoiceInput_Prompt_DIABs2()}", - "choiceOptions": { - "includeNumbers": true - }, - "style": "suggestedAction", - "property": "dialog.selectedSkill", - "choices": [ - "EchoSkillBotComposerDotNet", - "EchoSkillBotDotNet", - "EchoSkillBotDotNet21", - "EchoSkillBotDotNetV3", - "EchoSkillBotJS", - "EchoSkillBotJSV3", - "EchoSkillBotPython" - ] - }, - { - "$kind": "Microsoft.TextInput", - "$designer": { - "id": "nJf5rj" - }, - "disabled": false, - "maxTurnCount": 3, - "alwaysPrompt": false, - "allowInterruptions": false, - "unrecognizedPrompt": "", - "invalidPrompt": "", - "defaultValueResponse": "", - "prompt": "${TextInput_Prompt_nJf5rj()}", - "property": "dialog.firstUtterance" - }, - { - "$kind": "Microsoft.SwitchCondition", - "$designer": { - "id": "b3M6yt" - }, - "condition": "dialog.selectedSkill", - "cases": [ - { - "value": "EchoSkillBotComposerDotNet", - "actions": [ - { - "$kind": "Microsoft.BeginSkill", - "$designer": { - "id": "KKS0wY" - }, - "activityProcessed": true, - "botId": "=settings.MicrosoftAppId", - "skillHostEndpoint": "=settings.skillHostEndpoint", - "connectionName": "=settings.connectionName", - "allowInterruptions": true, - "skillEndpoint": "=settings.skill['echoSkillBotComposerDotNet'].endpointUrl", - "skillAppId": "=settings.skill['echoSkillBotComposerDotNet'].msAppId", - "activity": "${BeginSkill_Activity_KKS0wY()}" - } - ] - }, - { - "value": "EchoSkillBotDotNet", - "actions": [ - { - "$kind": "Microsoft.BeginSkill", - "$designer": { - "id": "92WLGJ" - }, - "activityProcessed": true, - "botId": "=settings.MicrosoftAppId", - "skillHostEndpoint": "=settings.skillHostEndpoint", - "connectionName": "=settings.connectionName", - "allowInterruptions": true, - "skillEndpoint": "=settings.skill['echoSkillBotDotNet'].endpointUrl", - "skillAppId": "=settings.skill['echoSkillBotDotNet'].msAppId", - "activity": "${BeginSkill_Activity_92WLGJ()}" - } - ] - }, - { - "value": "EchoSkillBotDotNet21", - "actions": [ - { - "$kind": "Microsoft.BeginSkill", - "$designer": { - "id": "9zIod8" - }, - "activityProcessed": true, - "botId": "=settings.MicrosoftAppId", - "skillHostEndpoint": "=settings.skillHostEndpoint", - "connectionName": "=settings.connectionName", - "allowInterruptions": true, - "skillEndpoint": "=settings.skill['echoSkillBotDotNet21'].endpointUrl", - "skillAppId": "=settings.skill['echoSkillBotDotNet21'].msAppId", - "activity": "${BeginSkill_Activity_9zIod8()}" - } - ] - }, - { - "value": "EchoSkillBotDotNetV3", - "actions": [ - { - "$kind": "Microsoft.BeginSkill", - "$designer": { - "id": "GHbR47" - }, - "activityProcessed": true, - "botId": "=settings.MicrosoftAppId", - "skillHostEndpoint": "=settings.skillHostEndpoint", - "connectionName": "=settings.connectionName", - "allowInterruptions": true, - "skillEndpoint": "=settings.skill['echoSkillBotDotNetV3'].endpointUrl", - "skillAppId": "=settings.skill['echoSkillBotDotNetV3'].msAppId", - "activity": "${BeginSkill_Activity_GHbR47()}" - } - ] - }, - { - "value": "EchoSkillBotJS", - "actions": [ - { - "$kind": "Microsoft.BeginSkill", - "$designer": { - "id": "fXOB92" - }, - "activityProcessed": true, - "botId": "=settings.MicrosoftAppId", - "skillHostEndpoint": "=settings.skillHostEndpoint", - "connectionName": "=settings.connectionName", - "allowInterruptions": true, - "skillEndpoint": "=settings.skill['echoSkillBotJs'].endpointUrl", - "skillAppId": "=settings.skill['echoSkillBotJs'].msAppId", - "activity": "${BeginSkill_Activity_fXOB92()}" - } - ] - }, - { - "value": "EchoSkillBotJSV3", - "actions": [ - { - "$kind": "Microsoft.BeginSkill", - "$designer": { - "id": "aEVlOJ" - }, - "activityProcessed": true, - "botId": "=settings.MicrosoftAppId", - "skillHostEndpoint": "=settings.skillHostEndpoint", - "connectionName": "=settings.connectionName", - "allowInterruptions": true, - "skillEndpoint": "=settings.skill['echoSkillBotJsv3'].endpointUrl", - "skillAppId": "=settings.skill['echoSkillBotJsv3'].msAppId", - "activity": "${BeginSkill_Activity_aEVlOJ()}" - } - ] - }, - { - "value": "EchoSkillBotPython", - "actions": [ - { - "$kind": "Microsoft.BeginSkill", - "$designer": { - "id": "WnhW7c" - }, - "activityProcessed": true, - "botId": "=settings.MicrosoftAppId", - "skillHostEndpoint": "=settings.skillHostEndpoint", - "connectionName": "=settings.connectionName", - "allowInterruptions": true, - "skillEndpoint": "=settings.skill['echoSkillBotPython'].endpointUrl", - "skillAppId": "=settings.skill['echoSkillBotPython'].msAppId", - "activity": "${BeginSkill_Activity_WnhW7c()}" - } - ] - } - ], - "default": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "3NY1Ax" - }, - "activity": "${SendActivity_3NY1Ax()}" - } - ] - } - ] - } - ], - "generator": "CallEchoSkill.lg", - "recognizer": "CallEchoSkill.lu.qna", - "id": "CallEchoSkill" -} diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/knowledge-base/en-us/CallEchoSkill.en-us.qna b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/knowledge-base/en-us/CallEchoSkill.en-us.qna deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/language-generation/en-us/CallEchoSkill.en-us.lg b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/language-generation/en-us/CallEchoSkill.en-us.lg deleted file mode 100644 index 8b5225cfbc..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/language-generation/en-us/CallEchoSkill.en-us.lg +++ /dev/null @@ -1,56 +0,0 @@ -[import](common.lg) - -# ChoiceInput_Prompt_AtuOWj() -[Activity - Text = What delivery mode would you like to use? -] - -# ChoiceInput_Prompt_DIABs2() -[Activity - Text = What skill would you like to call? -] - -# SendActivity_3NY1Ax() -[Activity - Text = We shouldn't hit this because we have validation in the prompt -] - -# BeginSkill_Activity_KKS0wY() -[Activity - Text = ${dialog.firstUtterance} -] - -# TextInput_Prompt_nJf5rj() -[Activity - Text = Type anything to send to the skill. -] - -# BeginSkill_Activity_92WLGJ() -[Activity - Text = ${dialog.firstUtterance} -] - -# BeginSkill_Activity_9zIod8() -[Activity - Text = ${dialog.firstUtterance} -] - -# BeginSkill_Activity_GHbR47() -[Activity - Text = ${dialog.firstUtterance} -] - -# BeginSkill_Activity_fXOB92() -[Activity - Text = ${dialog.firstUtterance} -] - -# BeginSkill_Activity_aEVlOJ() -[Activity - Text = ${dialog.firstUtterance} -] - -# BeginSkill_Activity_WnhW7c() -[Activity - Text = ${dialog.firstUtterance} -] diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/language-understanding/en-us/CallEchoSkill.en-us.lu b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/language-understanding/en-us/CallEchoSkill.en-us.lu deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/recognizers/CallEchoSkill.en-us.lu.dialog b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/recognizers/CallEchoSkill.en-us.lu.dialog deleted file mode 100644 index 9980d2dd76..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/recognizers/CallEchoSkill.en-us.lu.dialog +++ /dev/null @@ -1,8 +0,0 @@ -{ - "$kind": "Microsoft.LuisRecognizer", - "id": "LUIS_CallEchoSkill", - "applicationId": "=settings.luis.CallEchoSkill_en_us_lu.appId", - "version": "=settings.luis.CallEchoSkill_en_us_lu.version", - "endpoint": "=settings.luis.endpoint", - "endpointKey": "=settings.luis.endpointKey" -} diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/recognizers/CallEchoSkill.lu.dialog b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/recognizers/CallEchoSkill.lu.dialog deleted file mode 100644 index e07dee15ef..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/recognizers/CallEchoSkill.lu.dialog +++ /dev/null @@ -1,5 +0,0 @@ -{ - "$kind": "Microsoft.MultiLanguageRecognizer", - "id": "LUIS_CallEchoSkill", - "recognizers": {} -} diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/recognizers/CallEchoSkill.lu.qna.dialog b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/recognizers/CallEchoSkill.lu.qna.dialog deleted file mode 100644 index 80b77f0d0d..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/CallEchoSkill/recognizers/CallEchoSkill.lu.qna.dialog +++ /dev/null @@ -1,4 +0,0 @@ -{ - "$kind": "Microsoft.CrossTrainedRecognizerSet", - "recognizers": [] -} diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/emptyBot/knowledge-base/en-us/emptyBot.en-us.qna b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/dialogs/emptyBot/knowledge-base/en-us/emptyBot.en-us.qna deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/generated/interruption/CallEchoSkill.en-us.lu b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/generated/interruption/CallEchoSkill.en-us.lu deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/generated/interruption/CallEchoSkill.en-us.qna b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/generated/interruption/CallEchoSkill.en-us.qna deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/generated/interruption/SimpleHostBotComposer.en-us.lu b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/generated/interruption/SimpleHostBotComposer.en-us.lu deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/generated/interruption/SimpleHostBotComposer.en-us.qna b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/generated/interruption/SimpleHostBotComposer.en-us.qna deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/knowledge-base/en-us/simplehostbotcomposer.en-us.qna b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/knowledge-base/en-us/simplehostbotcomposer.en-us.qna deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/language-generation/en-us/common.en-us.lg b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/language-generation/en-us/common.en-us.lg deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/language-generation/en-us/simplehostbotcomposer.en-us.lg b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/language-generation/en-us/simplehostbotcomposer.en-us.lg deleted file mode 100644 index 333bea8b5e..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/language-generation/en-us/simplehostbotcomposer.en-us.lg +++ /dev/null @@ -1,26 +0,0 @@ -[import](common.lg) - -# SendActivity_Greeting() -[Activity - Text = Hello and welcome! - InputHint = acceptingInput -] - -# SendActivity_DidNotUnderstand() -[Activity - Text = ${SendActivity_DidNotUnderstand_text()} -] - -# SendActivity_DidNotUnderstand_text() -- Sorry, I didn't get that. -# SendActivity_M2LqJr() -[Activity - Text = Received endOfConversation.\n\nCode: ${turn.activity.code}. - InputHint = acceptingInput -] - -# SendActivity_bgTcyn() -[Activity - Text = Back in the host bot. - InputHint = acceptingInput -] diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/language-understanding/en-us/simplehostbotcomposer.en-us.lu b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/language-understanding/en-us/simplehostbotcomposer.en-us.lu deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/media/create-azure-resource-command-line.png b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/media/create-azure-resource-command-line.png deleted file mode 100644 index 497eb8e649d4f1d2d456d337246d01805132ac86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13842 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 VJv|35z<=2CX{u{u@3nB{{{s`&K;i%Z diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/media/publish-az-login.png b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/media/publish-az-login.png deleted file mode 100644 index 4e721354bccb6d4a83aa70ca55da1b571c2886db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16726 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 13" - ] - }, - "integerExpression": { - "$role": "expression", - "title": "Integer or expression", - "description": "Integer constant or expression to evaluate.", - "oneOf": [ - { - "type": "integer", - "title": "Integer", - "description": "Integer constant.", - "default": 0, - "examples": [ - 15 - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=user.age" - ] - } - ] - }, - "Microsoft.ActivityTemplate": { - "$role": "implements(Microsoft.IActivityTemplate)", - "title": "Microsoft activity template", - "type": "object", - "required": [ - "template", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "template": { - "title": "Template", - "description": "Language Generator template to use to create the activity", - "type": "string" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ActivityTemplate" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.AdaptiveDialog": { - "$role": "implements(Microsoft.IDialog)", - "title": "Adaptive dialog", - "description": "Flexible, data driven dialog that can adapt to the conversation.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "pattern": "^(?!(=)).*", - "title": "Id", - "description": "Optional dialog ID." - }, - "autoEndDialog": { - "$ref": "#/definitions/booleanExpression", - "title": "Auto end dialog", - "description": "If set to true the dialog will automatically end when there are no further actions. If set to false, remember to manually end the dialog using EndDialog action.", - "default": true - }, - "defaultResultProperty": { - "type": "string", - "title": "Default result property", - "description": "Value that will be passed back to the parent dialog.", - "default": "dialog.result" - }, - "dialogs": { - "type": "array", - "title": "Dialogs", - "description": "Dialogs added to DialogSet.", - "items": { - "$kind": "Microsoft.IDialog", - "title": "Dialog", - "description": "Dialog to add to DialogSet.", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "recognizer": { - "$kind": "Microsoft.IRecognizer", - "title": "Recognizer", - "description": "Input recognizer that interprets user input into intent and entities.", - "$ref": "#/definitions/Microsoft.IRecognizer" - }, - "generator": { - "$kind": "Microsoft.ILanguageGenerator", - "title": "Language generator", - "description": "Language generator that generates bot responses.", - "$ref": "#/definitions/Microsoft.ILanguageGenerator" - }, - "selector": { - "$kind": "Microsoft.ITriggerSelector", - "title": "Selector", - "description": "Policy to determine which trigger is executed. Defaults to a 'best match' selector (optional).", - "$ref": "#/definitions/Microsoft.ITriggerSelector" - }, - "triggers": { - "type": "array", - "description": "List of triggers defined for this dialog.", - "title": "Triggers", - "items": { - "$kind": "Microsoft.ITrigger", - "title": "Event triggers", - "description": "Event triggers for handling events.", - "$ref": "#/definitions/Microsoft.ITrigger" - } - }, - "schema": { - "title": "Schema", - "description": "Schema to fill in.", - "anyOf": [ - { - "$ref": "#/definitions/schema" - }, - { - "type": "string", - "title": "Reference to JSON schema", - "description": "Reference to JSON schema .dialog file." - } - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.AdaptiveDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.AgeEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Age entity recognizer", - "description": "Recognizer which recognizes age.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.AgeEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.Ask": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.SendActivity)" - ], - "title": "Send activity to ask a question", - "description": "This is an action which sends an activity to the user when a response is expected", - "type": "object", - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "expectedProperties": { - "$ref": "#/definitions/arrayExpression", - "title": "Expected properties", - "description": "Properties expected from the user.", - "examples": [ - [ - "age", - "name" - ] - ], - "items": { - "type": "string", - "title": "Name", - "description": "Name of the property" - } - }, - "defaultOperation": { - "$ref": "#/definitions/stringExpression", - "title": "Default operation", - "description": "Sets the default operation that will be used when no operation is recognized in the response to this Ask.", - "examples": [ - "Add()", - "Remove()" - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action." - }, - "activity": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Activity", - "description": "Activity to send.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.Ask" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.AttachmentInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "title": "Attachment input dialog", - "description": "Collect information - Ask for a file or image.", - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "type": "object", - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "defaultValue": { - "$role": "expression", - "title": "Default value", - "description": "'Property' will be set to the object or the result of this expression when max turn count is exceeded.", - "oneOf": [ - { - "$ref": "#/definitions/botframework.json/definitions/Attachment", - "title": "Object", - "description": "Attachment object." - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "value": { - "$role": "expression", - "title": "Value", - "description": "'Property' will be set to the object or the result of this expression unless it evaluates to null.", - "oneOf": [ - { - "$ref": "#/definitions/botframework.json/definitions/Attachment", - "title": "Object", - "description": "Attachment object." - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "outputFormat": { - "$role": "expression", - "title": "Output format", - "description": "Attachment output format.", - "oneOf": [ - { - "type": "string", - "title": "Standard format", - "description": "Standard output formats.", - "enum": [ - "all", - "first" - ], - "default": "first" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "minimum": 0, - "maximum": 2147483647, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.AttachmentInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.BeginDialog": { - "$role": "implements(Microsoft.IDialog)", - "title": "Begin a dialog", - "description": "Begin another dialog.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "dialog": { - "oneOf": [ - { - "$kind": "Microsoft.IDialog", - "pattern": "^(?!(=)).*", - "title": "Dialog", - "$ref": "#/definitions/Microsoft.IDialog" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ], - "title": "Dialog name", - "description": "Name of the dialog to call." - }, - "options": { - "$ref": "#/definitions/objectExpression", - "title": "Options", - "description": "One or more options that are passed to the dialog that is called.", - "examples": [ - { - "arg1": "=expression" - } - ], - "additionalProperties": { - "type": "string", - "title": "Options", - "description": "Options for dialog." - } - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the dialog that is called can process the current activity.", - "default": true - }, - "resultProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store any value returned by the dialog that is called.", - "examples": [ - "dialog.userName" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.BeginDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.BeginSkill": { - "$role": "implements(Microsoft.IDialog)", - "title": "Begin a skill", - "description": "Begin a remote skill.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the skill dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=f(x)" - ] - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the skill will be started using the activity in the current turn context instead of the activity in the Activity property.", - "default": true, - "examples": [ - true, - "=f(x)" - ] - }, - "resultProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store any value returned by the dialog that is called.", - "examples": [ - "dialog.userName" - ] - }, - "botId": { - "$ref": "#/definitions/stringExpression", - "title": "Skill host bot ID", - "description": "The Microsoft App ID that will be calling the skill.", - "default": "=settings.MicrosoftAppId" - }, - "skillHostEndpoint": { - "$ref": "#/definitions/stringExpression", - "title": "Skill host", - "description": "The callback Url for the skill host.", - "default": "=settings.skillHostEndpoint", - "examples": [ - "https://mybot.contoso.com/api/skills/" - ] - }, - "connectionName": { - "$ref": "#/definitions/stringExpression", - "title": "OAuth connection name (SSO)", - "description": "The OAuth Connection Name, that would be used to perform Single SignOn with a skill.", - "default": "=settings.connectionName" - }, - "skillAppId": { - "$ref": "#/definitions/stringExpression", - "title": "Skill App Id", - "description": "The Microsoft App ID for the skill." - }, - "skillEndpoint": { - "$ref": "#/definitions/stringExpression", - "title": "Skill endpoint ", - "description": "The /api/messages endpoint for the skill.", - "examples": [ - "https://myskill.contoso.com/api/messages/" - ] - }, - "activity": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Activity", - "description": "The activity to send to the skill.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the skill.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.BeginSkill" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.BreakLoop": { - "$role": "implements(Microsoft.IDialog)", - "title": "Break loop", - "description": "Stop executing this loop", - "type": "object", - "required": [ - "$kind" - ], - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.BreakLoop" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.CancelAllDialogs": { - "$role": "implements(Microsoft.IDialog)", - "title": "Cancel all dialogs", - "description": "Cancel all active dialogs. All dialogs in the dialog chain will need a trigger to capture the event configured in this action.", - "type": "object", - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the caller dialog is told it should process the current activity.", - "default": true - }, - "eventName": { - "$ref": "#/definitions/stringExpression", - "title": "Event name", - "description": "Name of the event to emit." - }, - "eventValue": { - "$ref": "#/definitions/valueExpression", - "title": "Event value", - "description": "Value to emit with the event (optional).", - "additionalProperties": true - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.CancelAllDialogs" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.CancelDialog": { - "$role": "implements(Microsoft.IDialog)", - "title": "Cancel all dialogs", - "description": "Cancel all active dialogs. All dialogs in the dialog chain will need a trigger to capture the event configured in this action.", - "type": "object", - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the caller dialog is told it should process the current activity.", - "default": true - }, - "eventName": { - "$ref": "#/definitions/stringExpression", - "title": "Event name", - "description": "Name of the event to emit." - }, - "eventValue": { - "$ref": "#/definitions/valueExpression", - "title": "Event value", - "description": "Value to emit with the event (optional).", - "additionalProperties": true - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.CancelDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ChannelMentionEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)" - ], - "title": "Channel mention entity recognizer", - "description": "Promotes mention entities passed by a channel via the activity.entities into recognizer result.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ChannelMentionEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ChoiceInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "title": "Choice input dialog", - "description": "Collect information - Pick from a list of choices", - "type": "object", - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "defaultValue": { - "$ref": "#/definitions/stringExpression", - "title": "Default value", - "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", - "examples": [ - "hello world", - "Hello ${user.name}", - "=concat(user.firstname, user.lastName)" - ] - }, - "value": { - "$ref": "#/definitions/stringExpression", - "title": "Value", - "description": "'Property' will be set to the value of this expression unless it evaluates to null.", - "examples": [ - "hello world", - "Hello ${user.name}", - "=concat(user.firstname, user.lastName)" - ] - }, - "outputFormat": { - "$role": "expression", - "title": "Output format", - "description": "Sets the desired choice output format (either value or index into choices).", - "oneOf": [ - { - "type": "string", - "title": "Standard", - "description": "Standard output format.", - "enum": [ - "value", - "index" - ], - "default": "value" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "choices": { - "$role": "expression", - "title": "Array of choices", - "description": "Choices to choose from.", - "oneOf": [ - { - "type": "array", - "title": "Simple choices", - "description": "Simple choices to choose from.", - "items": [ - { - "type": "string", - "title": "Simple choice", - "description": "One choice for choice input." - } - ] - }, - { - "type": "array", - "title": "Structured choices", - "description": "Choices that allow full control.", - "items": [ - { - "type": "object", - "title": "Structured choice", - "description": "Structured choice to choose from.", - "properties": { - "value": { - "type": "string", - "title": "Value", - "description": "Value to return when this choice is selected." - }, - "action": { - "$ref": "#/definitions/botframework.json/definitions/CardAction", - "title": "Action", - "description": "Card action for the choice." - }, - "synonyms": { - "type": "array", - "title": "Synonyms", - "description": "List of synonyms to recognize in addition to the value (optional).", - "items": { - "type": "string", - "title": "Synonym", - "description": "Synonym for value." - } - } - } - } - ] - }, - { - "$ref": "#/definitions/stringExpression" - } - ] - }, - "defaultLocale": { - "$ref": "#/definitions/stringExpression", - "title": "Default locale", - "description": "The default locale to use to parse confirmation choices if there is not one passed by the caller.", - "default": "en-us", - "examples": [ - "en-us" - ] - }, - "style": { - "$role": "expression", - "title": "List style", - "description": "Sets the ListStyle to control how choices are rendered.", - "oneOf": [ - { - "type": "string", - "title": "List style", - "description": "Standard list style.", - "enum": [ - "none", - "auto", - "inline", - "list", - "suggestedAction", - "heroCard" - ], - "default": "auto" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "choiceOptions": { - "title": "Choice options", - "description": "Sets the choice options used for controlling how choices are combined.", - "oneOf": [ - { - "type": "object", - "title": "Object", - "description": "Choice options object.", - "properties": { - "inlineSeparator": { - "type": "string", - "title": "Inline separator", - "description": "Character used to separate individual choices when there are more than 2 choices", - "default": ", " - }, - "inlineOr": { - "type": "string", - "title": "Inline or", - "description": "Separator inserted between the choices when there are only 2 choices", - "default": " or " - }, - "inlineOrMore": { - "type": "string", - "title": "Inline or more", - "description": "Separator inserted between the last 2 choices when their are more than 2 choices.", - "default": ", or " - }, - "includeNumbers": { - "type": "boolean", - "title": "Include numbers", - "description": "If true, 'inline' and 'list' list style will be prefixed with the index of the choice.", - "default": true - } - } - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "recognizerOptions": { - "title": "Recognizer options", - "description": "Sets how to recognize choices in the response", - "oneOf": [ - { - "type": "object", - "title": "Object", - "description": "Options for recognizer.", - "properties": { - "noValue": { - "type": "boolean", - "title": "No value", - "description": "If true, the choices value field will NOT be search over", - "default": false - }, - "noAction": { - "type": "boolean", - "title": "No action", - "description": "If true, the choices action.title field will NOT be searched over", - "default": false - }, - "recognizeNumbers": { - "type": "boolean", - "title": "Recognize numbers", - "description": "If true, the number recognizer will be used to recognize an index response (1,2,3...) to the prompt.", - "default": true - }, - "recognizeOrdinals": { - "type": "boolean", - "title": "Recognize ordinals", - "description": "If true, the ordinal recognizer will be used to recognize ordinal response (first/second/...) to the prompt.", - "default": true - } - } - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "minimum": 0, - "maximum": 2147483647, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ChoiceInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ConditionalSelector": { - "$role": "implements(Microsoft.ITriggerSelector)", - "title": "Conditional trigger selector", - "description": "Use a rule selector based on a condition", - "type": "object", - "required": [ - "condition", - "ifTrue", - "ifFalse", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression to evaluate" - }, - "ifTrue": { - "$kind": "Microsoft.ITriggerSelector", - "$ref": "#/definitions/Microsoft.ITriggerSelector" - }, - "ifFalse": { - "$kind": "Microsoft.ITriggerSelector", - "$ref": "#/definitions/Microsoft.ITriggerSelector" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ConditionalSelector" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ConfirmationEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Confirmation entity recognizer", - "description": "Recognizer which recognizes confirmation choices (yes/no).", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ConfirmationEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ConfirmInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "title": "Confirm input dialog", - "description": "Collect information - Ask for confirmation (yes or no).", - "type": "object", - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "outputFormat": { - "$ref": "#/definitions/valueExpression", - "title": "Output format", - "description": "Optional expression to use to format the output.", - "examples": [ - "=concat('confirmation:', this.value)" - ] - }, - "defaultLocale": { - "$ref": "#/definitions/stringExpression", - "title": "Default locale", - "description": "The Default locale or an expression which provides the default locale to use as default if not found in the activity.", - "default": "en-us", - "examples": [ - "en-us" - ] - }, - "style": { - "$role": "expression", - "title": "List style", - "description": "Sets the ListStyle to control how choices are rendered.", - "oneOf": [ - { - "type": "string", - "title": "Standard style", - "description": "Standard style for rendering choices.", - "enum": [ - "none", - "auto", - "inline", - "list", - "suggestedAction", - "heroCard" - ], - "default": "auto" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "choiceOptions": { - "title": "Choice options", - "description": "Choice Options or expression which provides Choice Options to control display choices to the user.", - "oneOf": [ - { - "type": "object", - "title": "Choice options", - "description": "Choice options.", - "properties": { - "inlineSeparator": { - "type": "string", - "title": "Inline separator", - "description": "Text to separate individual choices when there are more than 2 choices", - "default": ", " - }, - "inlineOr": { - "type": "string", - "title": "Inline or", - "description": "Text to be inserted between the choices when their are only 2 choices", - "default": " or " - }, - "inlineOrMore": { - "type": "string", - "title": "Inline or more", - "description": "Text to be inserted between the last 2 choices when their are more than 2 choices.", - "default": ", or " - }, - "includeNumbers": { - "type": "boolean", - "title": "Include numbers", - "description": "If true, inline and list style choices will be prefixed with the index of the choice.", - "default": true - } - } - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "defaultValue": { - "$ref": "#/definitions/booleanExpression", - "title": "Default value", - "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "value": { - "$ref": "#/definitions/booleanExpression", - "title": "Value", - "description": "'Property' will be set to the value of this expression unless it evaluates to null.", - "examples": [ - true, - "=user.isVip" - ] - }, - "confirmChoices": { - "$role": "expression", - "title": "Array of choice objects", - "description": "Array of simple or structured choices.", - "oneOf": [ - { - "type": "array", - "title": "Simple choices", - "description": "Simple choices to confirm from.", - "items": [ - { - "type": "string", - "title": "Simple choice", - "description": "Simple choice to confirm." - } - ] - }, - { - "type": "array", - "title": "Structured choices", - "description": "Structured choices for confirmations.", - "items": [ - { - "type": "object", - "title": "Choice", - "description": "Choice to confirm.", - "properties": { - "value": { - "type": "string", - "title": "Value", - "description": "Value to return when this choice is selected." - }, - "action": { - "$ref": "#/definitions/botframework.json/definitions/CardAction", - "title": "Action", - "description": "Card action for the choice." - }, - "synonyms": { - "type": "array", - "title": "Synonyms", - "description": "List of synonyms to recognize in addition to the value (optional).", - "items": { - "type": "string", - "title": "Synonym", - "description": "Synonym for choice." - } - } - } - } - ] - }, - { - "$ref": "#/definitions/stringExpression" - } - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "minimum": 0, - "maximum": 2147483647, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ConfirmInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ContinueConversation": { - "$role": "implements(Microsoft.IDialog)", - "title": "Continue conversation (Queue)", - "description": "Continue a specific conversation (via StorageQueue implementation).", - "type": "object", - "required": [ - "conversationReference", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "conversationReference": { - "$ref": "#/definitions/objectExpression", - "title": "Conversation Reference", - "description": "A conversation reference. (NOTE: Minimum required values or channelId, conversation).", - "examples": [ - { - "channelId": "skype", - "serviceUrl": "http://smba.skype.com", - "conversation": { - "id": "11111" - }, - "bot": { - "id": "22222" - }, - "user": { - "id": "33333" - }, - "locale": "en-us" - } - ] - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "Value to send in the activity.value." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ContinueConversation" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ContinueConversationLater": { - "$role": "implements(Microsoft.IDialog)", - "title": "Continue conversation later (Queue)", - "description": "Continue conversation at later time (via StorageQueue implementation).", - "type": "object", - "required": [ - "date", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "date": { - "$ref": "#/definitions/stringExpression", - "title": "Date", - "description": "Date in the future as a ISO string when the conversation should continue.", - "examples": [ - "=addHours(utcNow(), 1)" - ] - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "Value to send in the activity.value." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ContinueConversationLater" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ContinueLoop": { - "$role": "implements(Microsoft.IDialog)", - "title": "Continue loop", - "description": "Stop executing this template and continue with the next iteration of the loop.", - "type": "object", - "required": [ - "$kind" - ], - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ContinueLoop" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.CrossTrainedRecognizerSet": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "Cross-trained recognizer set", - "description": "Recognizer for selecting between cross trained recognizers.", - "type": "object", - "required": [ - "recognizers", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet." - }, - "recognizers": { - "type": "array", - "title": "Recognizers", - "description": "List of Recognizers defined for this set.", - "items": { - "$kind": "Microsoft.IRecognizer", - "$ref": "#/definitions/Microsoft.IRecognizer" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.CrossTrainedRecognizerSet" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.CurrencyEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Currency entity recognizer", - "description": "Recognizer which recognizes currency.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.CurrencyEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DateTimeEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Date and time entity recognizer", - "description": "Recognizer which recognizes dates and time fragments.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DateTimeEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DateTimeInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "title": "Date/time input dialog", - "description": "Collect information - Ask for date and/ or time", - "type": "object", - "defaultLocale": { - "$ref": "#/definitions/stringExpression", - "title": "Default locale", - "description": "Default locale.", - "default": "en-us" - }, - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "defaultValue": { - "$ref": "#/definitions/stringExpression", - "format": "date-time", - "title": "Default date", - "description": "'Property' will be set to the value or the result of the expression when max turn count is exceeded.", - "examples": [ - "=user.birthday" - ] - }, - "value": { - "$ref": "#/definitions/stringExpression", - "format": "date-time", - "title": "Value", - "description": "'Property' will be set to the value or the result of the expression unless it evaluates to null.", - "examples": [ - "=user.birthday" - ] - }, - "outputFormat": { - "$ref": "#/definitions/expression", - "title": "Output format", - "description": "Expression to use for formatting the output.", - "examples": [ - "=this.value[0].Value" - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "minimum": 0, - "maximum": 2147483647, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DateTimeInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DebugBreak": { - "$role": "implements(Microsoft.IDialog)", - "title": "Debugger break", - "description": "If debugger is attached, stop the execution at this point in the conversation.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DebugBreak" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DeleteActivity": { - "$role": "implements(Microsoft.IDialog)", - "title": "Delete Activity", - "description": "Delete an activity that was previously sent.", - "type": "object", - "required": [ - "activityId", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "activityId": { - "$ref": "#/definitions/stringExpression", - "title": "ActivityId", - "description": "expression to an activityId to delete", - "examples": [ - "=turn.lastresult.id" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DeleteActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DeleteProperties": { - "$role": "implements(Microsoft.IDialog)", - "title": "Delete Properties", - "description": "Delete multiple properties and any value it holds.", - "type": "object", - "required": [ - "properties", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "properties": { - "type": "array", - "title": "Properties", - "description": "Properties to delete.", - "items": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to delete." - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DeleteProperties" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DeleteProperty": { - "$role": "implements(Microsoft.IDialog)", - "title": "Delete property", - "description": "Delete a property and any value it holds.", - "type": "object", - "required": [ - "property", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to delete." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DeleteProperty" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DimensionEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Dimension entity recognizer", - "description": "Recognizer which recognizes dimension.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DimensionEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EditActions": { - "$role": "implements(Microsoft.IDialog)", - "title": "Edit actions.", - "description": "Edit the current list of actions.", - "type": "object", - "required": [ - "changeType", - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "changeType": { - "title": "Type of change", - "description": "Type of change to apply to the current actions.", - "oneOf": [ - { - "type": "string", - "title": "Standard change", - "description": "Standard change types.", - "enum": [ - "insertActions", - "insertActionsBeforeTags", - "appendActions", - "endSequence", - "replaceSequence" - ] - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to apply.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EditActions" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EditArray": { - "$role": "implements(Microsoft.IDialog)", - "title": "Edit array", - "description": "Modify an array in memory", - "type": "object", - "required": [ - "itemsProperty", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "changeType": { - "title": "Type of change", - "description": "Type of change to the array in memory.", - "oneOf": [ - { - "type": "string", - "title": "Change type", - "description": "Standard change type.", - "enum": [ - "push", - "pop", - "take", - "remove", - "clear" - ] - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "itemsProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Items property", - "description": "Property that holds the array to update." - }, - "resultProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Result property", - "description": "Property to store the result of this action." - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "New value or expression.", - "examples": [ - "milk", - "=dialog.favColor", - "=dialog.favColor == 'red'" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EditArray" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EmailEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Email entity recognizer", - "description": "Recognizer which recognizes email.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EmailEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EmitEvent": { - "$role": "implements(Microsoft.IDialog)", - "title": "Emit a custom event", - "description": "Emit an event. Capture this event with a trigger.", - "type": "object", - "required": [ - "eventName", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "eventName": { - "$role": "expression", - "title": "Event name", - "description": "Name of the event to emit.", - "oneOf": [ - { - "type": "string", - "title": "Built-in event", - "description": "Standard event type.", - "enum": [ - "beginDialog", - "resumeDialog", - "repromptDialog", - "cancelDialog", - "endDialog", - "activityReceived", - "recognizedIntent", - "unknownIntent", - "actionsStarted", - "actionsSaved", - "actionsEnded", - "actionsResumed" - ] - }, - { - "type": "string", - "title": "Custom event", - "description": "Custom event type", - "pattern": "^(?!(beginDialog$|resumeDialog$|repromptDialog$|cancelDialog$|endDialog$|activityReceived$|recognizedIntent$|unknownIntent$|actionsStarted$|actionsSaved$|actionsEnded$|actionsResumed))(\\S){1}.*" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "eventValue": { - "$ref": "#/definitions/valueExpression", - "title": "Event value", - "description": "Value to emit with the event (optional)." - }, - "bubbleEvent": { - "$ref": "#/definitions/booleanExpression", - "title": "Bubble event", - "description": "If true this event is passed on to parent dialogs." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EmitEvent" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EndDialog": { - "$role": "implements(Microsoft.IDialog)", - "title": "End dialog", - "description": "End this dialog.", - "type": "object", - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "Result value returned to the parent dialog.", - "examples": [ - "=dialog.userName", - "='tomato'" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EndDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EndTurn": { - "$role": "implements(Microsoft.IDialog)", - "title": "End turn", - "description": "End the current turn without ending the dialog.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EndTurn" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.FirstSelector": { - "$role": "implements(Microsoft.ITriggerSelector)", - "title": "First trigger selector", - "description": "Selector for first true rule", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.FirstSelector" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.Foreach": { - "$role": "implements(Microsoft.IDialog)", - "title": "For each item", - "description": "Execute actions on each item in an a collection.", - "type": "object", - "required": [ - "itemsProperty", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "itemsProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Items property", - "description": "Property that holds the array.", - "examples": [ - "user.todoList" - ] - }, - "index": { - "$ref": "#/definitions/stringExpression", - "title": "Index property", - "description": "Property that holds the index of the item.", - "default": "dialog.foreach.index" - }, - "value": { - "$ref": "#/definitions/stringExpression", - "title": "Value property", - "description": "Property that holds the value of the item.", - "default": "dialog.foreach.value" - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to execute for each item. Use '$foreach.value' to access the value of each item. Use '$foreach.index' to access the index of each item.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.Foreach" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ForeachPage": { - "$role": "implements(Microsoft.IDialog)", - "title": "For each page", - "description": "Execute actions on each page (collection of items) in an array.", - "type": "object", - "required": [ - "itemsProperty", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "itemsProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Items property", - "description": "Property that holds the array.", - "examples": [ - "user.todoList" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to execute for each page. Use '$foreach.page' to access each page.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "pageIndex": { - "$ref": "#/definitions/stringExpression", - "title": "Index property", - "description": "Property that holds the index of the page.", - "default": "dialog.foreach.pageindex" - }, - "page": { - "$ref": "#/definitions/stringExpression", - "title": "Page property", - "description": "Property that holds the value of the page.", - "default": "dialog.foreach.page" - }, - "pageSize": { - "$ref": "#/definitions/integerExpression", - "title": "Page size", - "description": "Number of items in each page.", - "default": 10 - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ForeachPage" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.GetActivityMembers": { - "$role": "implements(Microsoft.IDialog)", - "title": "Get activity members", - "description": "Get the members who are participating in an activity. (BotFrameworkAdapter only)", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property (named location to store information).", - "examples": [ - "user.age" - ] - }, - "activityId": { - "$ref": "#/definitions/stringExpression", - "title": "Activity Id", - "description": "Activity ID or expression to an activityId to use to get the members. If none is defined then the current activity id will be used.", - "examples": [ - "turn.lastresult.id" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.GetActivityMembers" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.GetConversationMembers": { - "$role": "implements(Microsoft.IDialog)", - "title": "Get conversation members", - "description": "Get the members who are participating in an conversation. (BotFrameworkAdapter only)", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property (named location to store information).", - "examples": [ - "user.age" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.GetConversationMembers" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.GetConversationReference": { - "$role": "implements(Microsoft.IDialog)", - "title": "Get ConversationReference", - "description": "Gets the ConversationReference from current context and stores it in property so it can be used to with ContinueConversation action.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property (named location to store information).", - "examples": [ - "user.age" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.GetConversationReference" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.GotoAction": { - "$role": "implements(Microsoft.IDialog)", - "title": "Go to action", - "description": "Go to an an action by id.", - "type": "object", - "required": [ - "actionId", - "$kind" - ], - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "actionId": { - "$ref": "#/definitions/stringExpression", - "title": "Action Id", - "description": "Action Id to execute next" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.GotoAction" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.GuidEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Guid entity recognizer", - "description": "Recognizer which recognizes guids.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.GuidEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.HashtagEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Hashtag entity recognizer", - "description": "Recognizer which recognizes Hashtags.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.HashtagEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.HttpRequest": { - "$role": "implements(Microsoft.IDialog)", - "type": "object", - "title": "HTTP request", - "description": "Make a HTTP request.", - "required": [ - "url", - "method", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "method": { - "type": "string", - "title": "HTTP method", - "description": "HTTP method to use.", - "enum": [ - "GET", - "POST", - "PATCH", - "PUT", - "DELETE" - ], - "examples": [ - "GET", - "POST" - ] - }, - "url": { - "$ref": "#/definitions/stringExpression", - "title": "Url", - "description": "URL to call (supports data binding).", - "examples": [ - "https://contoso.com" - ] - }, - "body": { - "$ref": "#/definitions/valueExpression", - "title": "Body", - "description": "Body to include in the HTTP call (supports data binding).", - "additionalProperties": true - }, - "resultProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Result property", - "description": "A property to store the result of this action. The result can include any of the 4 properties from the HTTP response: statusCode, reasonPhrase, content, and headers. If the content is JSON it will be a deserialized object. The values can be accessed via .content for example.", - "default": "turn.results", - "examples": [ - "dialog.contosodata" - ] - }, - "contentType": { - "$ref": "#/definitions/stringExpression", - "title": "Content type", - "description": "Content media type for the body.", - "examples": [ - "application/json", - "text/plain" - ] - }, - "headers": { - "type": "object", - "title": "Headers", - "description": "One or more headers to include in the request (supports data binding).", - "additionalProperties": { - "$ref": "#/definitions/stringExpression" - } - }, - "responseType": { - "$ref": "#/definitions/stringExpression", - "title": "Response type", - "description": "Defines the type of HTTP response. Automatically calls the 'Send a response' action if set to 'Activity' or 'Activities'.", - "oneOf": [ - { - "type": "string", - "title": "Standard response", - "description": "Standard response type.", - "enum": [ - "none", - "json", - "activity", - "activities", - "binary" - ], - "default": "json" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.HttpRequest" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.IActivityTemplate": { - "title": "Microsoft ActivityTemplates", - "description": "Components which are ActivityTemplate, which is string template, an activity, or a implementation of ActivityTemplate", - "$role": "interface", - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.ActivityTemplate" - }, - { - "$ref": "#/definitions/Microsoft.StaticActivityTemplate" - }, - { - "$ref": "#/definitions/botframework.json/definitions/Activity", - "required": [ - "type" - ] - }, - { - "type": "string" - } - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.2" - } - }, - "Microsoft.IAdapter": { - "$role": "interface", - "title": "Bot adapter", - "description": "Component that enables connecting bots to chat clients and applications.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime", - "version": "4.13.2" - }, - "properties": { - "route": { - "type": "string", - "title": "Adapter http route", - "description": "Route where to expose the adapter." - }, - "type": { - "type": "string", - "title": "Adapter type name", - "description": "Adapter type name" - } - } - }, - "Microsoft.IDialog": { - "title": "Microsoft dialogs", - "description": "Components which derive from Dialog", - "$role": "interface", - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog" - }, - { - "$ref": "#/definitions/Microsoft.Ask" - }, - { - "$ref": "#/definitions/Microsoft.AttachmentInput" - }, - { - "$ref": "#/definitions/Microsoft.BeginDialog" - }, - { - "$ref": "#/definitions/Microsoft.BeginSkill" - }, - { - "$ref": "#/definitions/Microsoft.BreakLoop" - }, - { - "$ref": "#/definitions/Microsoft.CancelAllDialogs" - }, - { - "$ref": "#/definitions/Microsoft.CancelDialog" - }, - { - "$ref": "#/definitions/Microsoft.ChoiceInput" - }, - { - "$ref": "#/definitions/Microsoft.ConfirmInput" - }, - { - "$ref": "#/definitions/Microsoft.ContinueConversation" - }, - { - "$ref": "#/definitions/Microsoft.ContinueConversationLater" - }, - { - "$ref": "#/definitions/Microsoft.ContinueLoop" - }, - { - "$ref": "#/definitions/Microsoft.DateTimeInput" - }, - { - "$ref": "#/definitions/Microsoft.DebugBreak" - }, - { - "$ref": "#/definitions/Microsoft.DeleteActivity" - }, - { - "$ref": "#/definitions/Microsoft.DeleteProperties" - }, - { - "$ref": "#/definitions/Microsoft.DeleteProperty" - }, - { - "$ref": "#/definitions/Microsoft.EditActions" - }, - { - "$ref": "#/definitions/Microsoft.EditArray" - }, - { - "$ref": "#/definitions/Microsoft.EmitEvent" - }, - { - "$ref": "#/definitions/Microsoft.EndDialog" - }, - { - "$ref": "#/definitions/Microsoft.EndTurn" - }, - { - "$ref": "#/definitions/Microsoft.Foreach" - }, - { - "$ref": "#/definitions/Microsoft.ForeachPage" - }, - { - "$ref": "#/definitions/Microsoft.GetActivityMembers" - }, - { - "$ref": "#/definitions/Microsoft.GetConversationMembers" - }, - { - "$ref": "#/definitions/Microsoft.GetConversationReference" - }, - { - "$ref": "#/definitions/Microsoft.GotoAction" - }, - { - "$ref": "#/definitions/Microsoft.HttpRequest" - }, - { - "$ref": "#/definitions/Microsoft.IfCondition" - }, - { - "$ref": "#/definitions/Microsoft.LogAction" - }, - { - "$ref": "#/definitions/Microsoft.NumberInput" - }, - { - "$ref": "#/definitions/Microsoft.OAuthInput" - }, - { - "$ref": "#/definitions/Microsoft.QnAMakerDialog" - }, - { - "$ref": "#/definitions/Microsoft.RepeatDialog" - }, - { - "$ref": "#/definitions/Microsoft.ReplaceDialog" - }, - { - "$ref": "#/definitions/Microsoft.SendActivity" - }, - { - "$ref": "#/definitions/Microsoft.SendHandoffActivity" - }, - { - "$ref": "#/definitions/Microsoft.SetProperties" - }, - { - "$ref": "#/definitions/Microsoft.SetProperty" - }, - { - "$ref": "#/definitions/Microsoft.SignOutUser" - }, - { - "$ref": "#/definitions/Microsoft.SwitchCondition" - }, - { - "$ref": "#/definitions/Microsoft.TelemetryTrackEventAction" - }, - { - "$ref": "#/definitions/Microsoft.TextInput" - }, - { - "$ref": "#/definitions/Microsoft.ThrowException" - }, - { - "$ref": "#/definitions/Microsoft.TraceActivity" - }, - { - "$ref": "#/definitions/Microsoft.UpdateActivity" - }, - { - "type": "string", - "pattern": "^(?!(=)).*" - } - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.2" - } - }, - "Microsoft.IEntityRecognizer": { - "$role": "interface", - "title": "Entity recognizers", - "description": "Components which derive from EntityRecognizer.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.AgeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.ConfirmationEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.CurrencyEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.DateTimeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.DimensionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.EmailEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.GuidEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.HashtagEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.IpEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.MentionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.NumberEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.NumberRangeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.OrdinalEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.PercentageEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.PhoneNumberEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.RegexEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.TemperatureEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.UrlEntityRecognizer" - }, - { - "type": "string", - "title": "Reference to Microsoft.IEntityRecognizer", - "description": "Reference to Microsoft.IEntityRecognizer .dialog file." - } - ] - }, - "Microsoft.IfCondition": { - "$role": "implements(Microsoft.IDialog)", - "title": "If condition", - "description": "Two-way branch the conversation flow based on a condition.", - "type": "object", - "required": [ - "condition", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression to evaluate.", - "examples": [ - "user.age > 3" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to execute if condition is true.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "elseActions": { - "type": "array", - "title": "Else", - "description": "Actions to execute if condition is false.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.IfCondition" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ILanguageGenerator": { - "title": "Microsoft LanguageGenerator", - "description": "Components which dervie from the LanguageGenerator class", - "$role": "interface", - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.ResourceMultiLanguageGenerator" - }, - { - "$ref": "#/definitions/Microsoft.TemplateEngineLanguageGenerator" - }, - { - "type": "string" - } - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - } - }, - "Microsoft.InputDialog": { - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "minimum": 0, - "maximum": 2147483647, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.InputDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.IpEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "IP entity recognizer", - "description": "Recognizer which recognizes internet IP patterns (like 192.1.1.1).", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.IpEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.IRecognizer": { - "title": "Microsoft recognizer", - "description": "Components which derive from Recognizer class", - "$role": "interface", - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.AgeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.ChannelMentionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.ConfirmationEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.CrossTrainedRecognizerSet" - }, - { - "$ref": "#/definitions/Microsoft.CurrencyEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.DateTimeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.DimensionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.EmailEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.GuidEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.HashtagEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.IpEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.LuisRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.MentionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.MultiLanguageRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.NumberEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.NumberRangeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.OrdinalEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.PercentageEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.PhoneNumberEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.QnAMakerRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.RecognizerSet" - }, - { - "$ref": "#/definitions/Microsoft.RegexEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.RegexRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.TemperatureEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.UrlEntityRecognizer" - }, - { - "type": "string" - } - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.2" - } - }, - "Microsoft.ITextTemplate": { - "title": "Microsoft TextTemplate", - "description": "Components which derive from TextTemplate class", - "$role": "interface", - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.TextTemplate" - }, - { - "type": "string" - } - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.2" - } - }, - "Microsoft.ITrigger": { - "$role": "interface", - "title": "Microsoft Triggers", - "description": "Components which derive from OnCondition class.", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.OnActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnAssignEntity" - }, - { - "$ref": "#/definitions/Microsoft.OnBeginDialog" - }, - { - "$ref": "#/definitions/Microsoft.OnCancelDialog" - }, - { - "$ref": "#/definitions/Microsoft.OnChooseEntity" - }, - { - "$ref": "#/definitions/Microsoft.OnChooseIntent" - }, - { - "$ref": "#/definitions/Microsoft.OnChooseProperty" - }, - { - "$ref": "#/definitions/Microsoft.OnCommandActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnCommandResultActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnCondition" - }, - { - "$ref": "#/definitions/Microsoft.OnContinueConversation" - }, - { - "$ref": "#/definitions/Microsoft.OnConversationUpdateActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnDialogEvent" - }, - { - "$ref": "#/definitions/Microsoft.OnEndOfActions" - }, - { - "$ref": "#/definitions/Microsoft.OnEndOfConversationActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnError" - }, - { - "$ref": "#/definitions/Microsoft.OnEventActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnHandoffActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnInstallationUpdateActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnIntent" - }, - { - "$ref": "#/definitions/Microsoft.OnInvokeActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageDeleteActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageReactionActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageUpdateActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnQnAMatch" - }, - { - "$ref": "#/definitions/Microsoft.OnRepromptDialog" - }, - { - "$ref": "#/definitions/Microsoft.OnTypingActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnUnknownIntent" - }, - { - "type": "string", - "title": "Reference to Microsoft.ITrigger", - "description": "Reference to Microsoft.ITrigger .dialog file." - } - ] - }, - "Microsoft.ITriggerSelector": { - "$role": "interface", - "title": "Selectors", - "description": "Components which derive from TriggerSelector class.", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.ConditionalSelector" - }, - { - "$ref": "#/definitions/Microsoft.FirstSelector" - }, - { - "$ref": "#/definitions/Microsoft.MostSpecificSelector" - }, - { - "$ref": "#/definitions/Microsoft.RandomSelector" - }, - { - "$ref": "#/definitions/Microsoft.TrueSelector" - }, - { - "type": "string", - "title": "Reference to Microsoft.ITriggerSelector", - "description": "Reference to Microsoft.ITriggerSelector .dialog file." - } - ] - }, - "Microsoft.LanguagePolicy": { - "title": "Language policy", - "description": "This represents a policy map for locales lookups to use for language", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": { - "type": "array", - "title": "Per-locale policy", - "description": "Language policy per locale.", - "items": { - "type": "string", - "title": "Locale", - "description": "Locale like en-us." - } - }, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.LanguagePolicy" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.LogAction": { - "$role": "implements(Microsoft.IDialog)", - "title": "Log to console", - "description": "Log a message to the host application. Send a TraceActivity to Bot Framework Emulator (optional).", - "type": "object", - "required": [ - "text", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "text": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Text", - "description": "Information to log.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "label": { - "$ref": "#/definitions/stringExpression", - "title": "Label", - "description": "Label for the trace activity (used to identify it in a list of trace activities.)" - }, - "traceActivity": { - "$ref": "#/definitions/booleanExpression", - "title": "Send trace activity", - "description": "If true, automatically sends a TraceActivity (view in Bot Framework Emulator)." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.LogAction" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.LuisRecognizer": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "LUIS Recognizer", - "description": "LUIS recognizer.", - "type": "object", - "required": [ - "applicationId", - "endpoint", - "endpointKey", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.AI.Luis", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." - }, - "applicationId": { - "$ref": "#/definitions/stringExpression", - "title": "LUIS application id", - "description": "Application ID for your model from the LUIS service." - }, - "version": { - "$ref": "#/definitions/stringExpression", - "title": "LUIS version", - "description": "Optional version to target. If null then predictionOptions.Slot is used." - }, - "endpoint": { - "$ref": "#/definitions/stringExpression", - "title": "LUIS endpoint", - "description": "Endpoint to use for LUIS service like https://westus.api.cognitive.microsoft.com." - }, - "endpointKey": { - "$ref": "#/definitions/stringExpression", - "title": "LUIS prediction key", - "description": "LUIS prediction key used to call endpoint." - }, - "externalEntityRecognizer": { - "$kind": "Microsoft.IRecognizer", - "title": "External entity recognizer", - "description": "Entities recognized by this recognizer will be passed to LUIS as external entities.", - "$ref": "#/definitions/Microsoft.IRecognizer" - }, - "dynamicLists": { - "$ref": "#/definitions/arrayExpression", - "title": "Dynamic lists", - "description": "Runtime defined entity lists.", - "items": { - "title": "Entity list", - "description": "Lists of canonical values and synonyms for an entity.", - "type": "object", - "properties": { - "entity": { - "title": "Entity", - "description": "Entity to extend with a dynamic list.", - "type": "string" - }, - "list": { - "title": "Dynamic list", - "description": "List of canonical forms and synonyms.", - "type": "array", - "items": { - "type": "object", - "title": "List entry", - "description": "Canonical form and synonynms.", - "properties": { - "canonicalForm": { - "title": "Canonical form", - "description": "Resolution if any synonym matches.", - "type": "string" - }, - "synonyms": { - "title": "Synonyms", - "description": "List of synonyms for a canonical form.", - "type": "array", - "items": { - "title": "Synonym", - "description": "Synonym for canonical form.", - "type": "string" - } - } - } - } - } - } - } - }, - "predictionOptions": { - "type": "object", - "title": "Prediction options", - "description": "Options to control LUIS prediction behavior.", - "properties": { - "includeAllIntents": { - "$ref": "#/definitions/booleanExpression", - "title": "Include all intents", - "description": "True for all intents, false for only top intent." - }, - "includeInstanceData": { - "$ref": "#/definitions/booleanExpression", - "title": "Include $instance", - "description": "True to include $instance metadata in the LUIS response." - }, - "log": { - "$ref": "#/definitions/booleanExpression", - "title": "Log utterances", - "description": "True to log utterances on LUIS service." - }, - "preferExternalEntities": { - "$ref": "#/definitions/booleanExpression", - "title": "Prefer external entities", - "description": "True to prefer external entities to those generated by LUIS models." - }, - "slot": { - "$ref": "#/definitions/stringExpression", - "title": "Slot", - "description": "Slot to use for talking to LUIS service like production or staging." - } - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.LuisRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.MentionEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Mentions entity recognizer", - "description": "Recognizer which recognizes @Mentions", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.MentionEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.MostSpecificSelector": { - "$role": "implements(Microsoft.ITriggerSelector)", - "title": "Most specific trigger selector", - "description": "Select most specific true events with optional additional selector", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "selector": { - "$kind": "Microsoft.ITriggerSelector", - "$ref": "#/definitions/Microsoft.ITriggerSelector" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.MostSpecificSelector" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.MultiLanguageRecognizer": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "Multi-language recognizer", - "description": "Configure one recognizer per language and the specify the language fallback policy.", - "type": "object", - "required": [ - "recognizers", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." - }, - "languagePolicy": { - "$kind": "Microsoft.LanguagePolicy", - "type": "object", - "title": "Language policy", - "description": "Defines fall back languages to try per user input language.", - "$ref": "#/definitions/Microsoft.LanguagePolicy" - }, - "recognizers": { - "type": "object", - "title": "Recognizers", - "description": "Map of language -> Recognizer", - "additionalProperties": { - "$kind": "Microsoft.IRecognizer", - "$ref": "#/definitions/Microsoft.IRecognizer" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.MultiLanguageRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.NumberEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Number entity recognizer", - "description": "Recognizer which recognizes numbers.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.NumberEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.NumberInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "title": "Number input dialog", - "description": "Collect information - Ask for a number.", - "type": "object", - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "defaultValue": { - "$ref": "#/definitions/numberExpression", - "title": "Default value", - "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", - "examples": [ - 13, - "=user.age" - ] - }, - "value": { - "$ref": "#/definitions/numberExpression", - "title": "Value", - "description": "'Property' will be set to the value of this expression unless it evaluates to null.", - "examples": [ - 13, - "=user.age" - ] - }, - "outputFormat": { - "$ref": "#/definitions/expression", - "title": "Output format", - "description": "Expression to format the number output.", - "examples": [ - "=this.value", - "=int(this.text)" - ] - }, - "defaultLocale": { - "$ref": "#/definitions/stringExpression", - "title": "Default locale", - "description": "Default locale to use if there is no locale available..", - "default": "en-us" - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "minimum": 0, - "maximum": 2147483647, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.NumberInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.NumberRangeEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Number range entity recognizer", - "description": "Recognizer which recognizes ranges of numbers (Example:2 to 5).", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.NumberRangeEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OAuthInput": { - "$role": "implements(Microsoft.IDialog)", - "title": "OAuthInput Dialog", - "description": "Collect login information before each request.", - "type": "object", - "required": [ - "connectionName", - "$kind" - ], - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "connectionName": { - "$ref": "#/definitions/stringExpression", - "title": "Connection name", - "description": "The connection name configured in Azure Web App Bot OAuth settings.", - "examples": [ - "msgraphOAuthConnection" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "text": { - "$ref": "#/definitions/stringExpression", - "title": "Text", - "description": "Text shown in the OAuth signin card.", - "examples": [ - "Please sign in. ", - "=concat(x,y,z)" - ] - }, - "title": { - "$ref": "#/definitions/stringExpression", - "title": "Title", - "description": "Title shown in the OAuth signin card.", - "examples": [ - "Login" - ] - }, - "timeout": { - "$ref": "#/definitions/integerExpression", - "title": "Timeout", - "description": "Time out setting for the OAuth signin card.", - "default": 900000 - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Token property", - "description": "Property to store the OAuth token result. WARNING: Changing this location is not recommended as you should call OAuthInput immediately before each use of the token.", - "default": "turn.token", - "examples": [ - "dialog.token" - ] - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send if user response is invalid.", - "examples": [ - "Sorry, the login info you provided is not valid." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Login failed." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "examples": [ - 3 - ] - }, - "defaultValue": { - "$ref": "#/definitions/expression", - "title": "Default value", - "description": "Expression to examine on each turn of the conversation as possible value to the property.", - "examples": [ - "@token" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OAuthInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On activity", - "description": "Actions to perform on receipt of a generic activity.", - "type": "object", - "required": [ - "type", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "type": { - "type": "string", - "title": "Activity type", - "description": "The Activity.Type to match" - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnAssignEntity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On entity assignment", - "description": "Actions to apply an operation on a property and value.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "operation": { - "type": "string", - "title": "Operation", - "description": "Operation filter on event." - }, - "property": { - "type": "string", - "title": "Property", - "description": "Property filter on event." - }, - "value": { - "type": "string", - "title": "Value", - "description": "Value filter on event." - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnAssignEntity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnBeginDialog": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On begin dialog", - "description": "Actions to perform when this dialog begins.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnBeginDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnCancelDialog": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On cancel dialog", - "description": "Actions to perform on cancel dialog event.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnCancelDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnChooseEntity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On choose entity", - "description": "Actions to be performed when value is ambiguous for operator and property.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "operation": { - "type": "string", - "title": "Operation", - "description": "Operation filter on event." - }, - "property": { - "type": "string", - "title": "Property", - "description": "Property filter on event." - }, - "value": { - "type": "string", - "title": "Ambiguous value", - "description": "Ambiguous value filter on event." - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnChooseEntity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnChooseIntent": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On ambiguous intent", - "description": "Actions to perform on when an intent is ambiguous.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "intents": { - "type": "array", - "title": "Intents", - "description": "Intents that must be in the ChooseIntent result for this condition to trigger.", - "items": { - "title": "Intent", - "description": "Intent name to trigger on.", - "type": "string" - } - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnChooseIntent" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnChooseProperty": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On choose property", - "description": "Actions to take when there are multiple possible mappings of entities to properties and operations.", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "type": "object", - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnChooseProperty" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnCommandActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Command activity", - "description": "Actions to perform on receipt of an activity with type 'Command'. Overrides Intent trigger.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnCommandActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnCommandResultActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Command Result activity", - "description": "Actions to perform on receipt of an activity with type 'CommandResult'. Overrides Intent trigger.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnCommandResultActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnCondition": { - "$role": "implements(Microsoft.ITrigger)", - "title": "On condition", - "description": "Actions to perform when specified condition is true.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnCondition" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnContinueConversation": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On continue conversation", - "description": "Actions to perform when a conversation is started up again from a ContinueConversationLater action.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnContinueConversation" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnConversationUpdateActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On ConversationUpdate activity", - "description": "Actions to perform on receipt of an activity with type 'ConversationUpdate'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnConversationUpdateActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnDialogEvent": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On dialog event", - "description": "Actions to perform when a specific dialog event occurs.", - "type": "object", - "required": [ - "event", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "event": { - "type": "string", - "title": "Dialog event name", - "description": "Name of dialog event." - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnDialogEvent" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnEndOfActions": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On end of actions", - "description": "Actions to take when there are no more actions in the current dialog.", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "type": "object", - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnEndOfActions" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnEndOfConversationActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On EndOfConversation activity", - "description": "Actions to perform on receipt of an activity with type 'EndOfConversation'.", - "type": "object", - "required": [ - "$kind" - ], - "$policies": { - "nonInteractive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnEndOfConversationActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnError": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On error", - "description": "Action to perform when an 'Error' dialog event occurs.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnError" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnEventActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Event activity", - "description": "Actions to perform on receipt of an activity with type 'Event'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnEventActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnHandoffActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Handoff activity", - "description": "Actions to perform on receipt of an activity with type 'HandOff'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnHandoffActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnInstallationUpdateActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On InstallationUpdate activity", - "description": "Actions to perform on receipt of an activity with type 'InstallationUpdate'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnInstallationUpdateActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnIntent": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On intent recognition", - "description": "Actions to perform when specified intent is recognized.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "intent": { - "type": "string", - "title": "Intent", - "description": "Name of intent." - }, - "entities": { - "type": "array", - "title": "Entities", - "description": "Required entities.", - "items": { - "type": "string", - "title": "Entity", - "description": "Entity that must be present." - } - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnIntent" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnInvokeActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Invoke activity", - "description": "Actions to perform on receipt of an activity with type 'Invoke'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnInvokeActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnMessageActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Message activity", - "description": "Actions to perform on receipt of an activity with type 'Message'. Overrides Intent trigger.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnMessageActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnMessageDeleteActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On MessageDelete activity", - "description": "Actions to perform on receipt of an activity with type 'MessageDelete'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnMessageDeleteActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnMessageReactionActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On MessageReaction activity", - "description": "Actions to perform on receipt of an activity with type 'MessageReaction'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnMessageReactionActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnMessageUpdateActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On MessageUpdate activity", - "description": "Actions to perform on receipt of an activity with type 'MessageUpdate'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnMessageUpdateActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnQnAMatch": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On QnAMaker match", - "description": "Actions to perform on when an match from QnAMaker is found.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnQnAMatch" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnRepromptDialog": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On RepromptDialog", - "description": "Actions to perform when 'RepromptDialog' event occurs.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnRepromptDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnTypingActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Typing activity", - "description": "Actions to perform on receipt of an activity with type 'Typing'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnTypingActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnUnknownIntent": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On unknown intent", - "description": "Action to perform when user input is unrecognized or if none of the 'on intent recognition' triggers match recognized intent.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnUnknownIntent" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OrdinalEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Ordinal entity recognizer", - "description": "Recognizer which recognizes ordinals (example: first, second, 3rd).", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OrdinalEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.PercentageEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Percentage entity recognizer", - "description": "Recognizer which recognizes percentages.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.PercentageEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.PhoneNumberEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Phone number entity recognizer", - "description": "Recognizer which recognizes phone numbers.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.PhoneNumberEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.QnAMakerDialog": { - "$role": "implements(Microsoft.IDialog)", - "title": "QnAMaker dialog", - "description": "Dialog which uses QnAMAker knowledge base to answer questions.", - "type": "object", - "required": [ - "knowledgeBaseId", - "endpointKey", - "hostname", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.AI.QnA", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "knowledgeBaseId": { - "$ref": "#/definitions/stringExpression", - "title": "KnowledgeBase Id", - "description": "KnowledgeBase Id of your QnA Maker KnowledgeBase.", - "default": "=settings.qna.knowledgebaseid" - }, - "endpointKey": { - "$ref": "#/definitions/stringExpression", - "title": "Endpoint key", - "description": "Endpoint key for the QnA Maker KB.", - "default": "=settings.qna.endpointkey" - }, - "hostname": { - "$ref": "#/definitions/stringExpression", - "title": "Hostname", - "description": "Hostname for your QnA Maker service.", - "default": "=settings.qna.hostname", - "examples": [ - "https://yourserver.azurewebsites.net/qnamaker" - ] - }, - "noAnswer": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Fallback answer", - "description": "Default answer to return when none found in KB.", - "default": "Sorry, I did not find an answer.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "threshold": { - "$ref": "#/definitions/numberExpression", - "title": "Threshold", - "description": "Threshold score to filter results.", - "default": 0.3 - }, - "activeLearningCardTitle": { - "$ref": "#/definitions/stringExpression", - "title": "Active learning card title", - "description": "Title for active learning suggestions card.", - "default": "Did you mean:" - }, - "cardNoMatchText": { - "$ref": "#/definitions/stringExpression", - "title": "Card no match text", - "description": "Text for no match option.", - "default": "None of the above." - }, - "cardNoMatchResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Card no match response", - "description": "Custom response when no match option was selected.", - "default": "Thanks for the feedback.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "strictFilters": { - "$ref": "#/definitions/arrayExpression", - "title": "Strict filters", - "description": "Metadata filters to use when calling the QnA Maker KB.", - "items": { - "type": "object", - "title": "Metadata filter", - "description": "Metadata filter.", - "properties": { - "name": { - "type": "string", - "title": "Name", - "description": "Name of filter property.", - "maximum": 100 - }, - "value": { - "type": "string", - "title": "Value", - "description": "Value to filter on.", - "maximum": 100 - } - } - } - }, - "top": { - "$ref": "#/definitions/numberExpression", - "title": "Top", - "description": "The number of answers you want to retrieve.", - "default": 3 - }, - "isTest": { - "type": "boolean", - "title": "IsTest", - "description": "True, if pointing to Test environment, else false.", - "default": false - }, - "rankerType": { - "$ref": "#/definitions/stringExpression", - "title": "Ranker type", - "description": "Type of Ranker.", - "oneOf": [ - { - "title": "Standard ranker", - "description": "Standard ranker types.", - "enum": [ - "default", - "questionOnly", - "autoSuggestQuestion" - ], - "default": "default" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "strictFiltersJoinOperator": { - "$ref": "#/definitions/stringExpression", - "title": "StrictFiltersJoinOperator", - "description": "Join operator for Strict Filters.", - "oneOf": [ - { - "title": "Join operator", - "description": "Value of Join Operator to be used as conjunction with Strict Filter values.", - "enum": [ - "AND", - "OR" - ], - "default": "AND" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.QnAMakerDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.QnAMakerRecognizer": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "QnAMaker recognizer", - "description": "Recognizer for generating QnAMatch intents from a KB.", - "type": "object", - "required": [ - "knowledgeBaseId", - "endpointKey", - "hostname", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.AI.QnA", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet." - }, - "knowledgeBaseId": { - "$ref": "#/definitions/stringExpression", - "title": "KnowledgeBase Id", - "description": "Knowledge base Id of your QnA Maker knowledge base.", - "default": "=settings.qna.knowledgebaseid" - }, - "endpointKey": { - "$ref": "#/definitions/stringExpression", - "title": "Endpoint key", - "description": "Endpoint key for the QnA Maker KB.", - "default": "=settings.qna.endpointkey" - }, - "hostname": { - "$ref": "#/definitions/stringExpression", - "title": "Hostname", - "description": "Hostname for your QnA Maker service.", - "default": "=settings.qna.hostname", - "examples": [ - "https://yourserver.azurewebsites.net/qnamaker" - ] - }, - "threshold": { - "$ref": "#/definitions/numberExpression", - "title": "Threshold", - "description": "Threshold score to filter results.", - "default": 0.3 - }, - "strictFilters": { - "$ref": "#/definitions/arrayExpression", - "title": "Strict filters", - "description": "Metadata filters to use when calling the QnA Maker KB.", - "items": { - "type": "object", - "title": "Metadata filters", - "description": "Metadata filters to use when querying QnA Maker KB.", - "properties": { - "name": { - "type": "string", - "title": "Name", - "description": "Name to filter on.", - "maximum": 100 - }, - "value": { - "type": "string", - "title": "Value", - "description": "Value to restrict filter.", - "maximum": 100 - } - } - } - }, - "top": { - "$ref": "#/definitions/numberExpression", - "title": "Top", - "description": "The number of answers you want to retrieve.", - "default": 3 - }, - "isTest": { - "$ref": "#/definitions/booleanExpression", - "title": "Use test environment", - "description": "True, if pointing to Test environment, else false.", - "examples": [ - true, - "=f(x)" - ] - }, - "rankerType": { - "title": "Ranker type", - "description": "Type of Ranker.", - "oneOf": [ - { - "type": "string", - "title": "Ranker type", - "description": "Type of Ranker.", - "enum": [ - "default", - "questionOnly", - "autoSuggestQuestion" - ], - "default": "default" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "strictFiltersJoinOperator": { - "$ref": "#/definitions/stringExpression", - "title": "StrictFiltersJoinOperator", - "description": "Join operator for Strict Filters.", - "oneOf": [ - { - "title": "Join operator", - "description": "Value of Join Operator to be used as onjuction with Strict Filter values.", - "enum": [ - "AND", - "OR" - ], - "default": "AND" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "includeDialogNameInMetadata": { - "$ref": "#/definitions/booleanExpression", - "title": "Include dialog name", - "description": "When set to false, the dialog name will not be passed to QnAMaker. (default) is true", - "default": true, - "examples": [ - true, - "=f(x)" - ] - }, - "metadata": { - "$ref": "#/definitions/arrayExpression", - "title": "Metadata filters", - "description": "Metadata filters to use when calling the QnA Maker KB.", - "items": { - "type": "object", - "title": "Metadata filter", - "description": "Metadata filter to use when calling the QnA Maker KB.", - "properties": { - "name": { - "type": "string", - "title": "Name", - "description": "Name of value to test." - }, - "value": { - "type": "string", - "title": "Value", - "description": "Value to filter against." - } - } - } - }, - "context": { - "$ref": "#/definitions/objectExpression", - "title": "QnA request context", - "description": "Context to use for ranking." - }, - "qnaId": { - "$ref": "#/definitions/integerExpression", - "title": "QnA Id", - "description": "A number or expression which is the QnAId to paass to QnAMaker API." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.QnAMakerRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.RandomSelector": { - "$role": "implements(Microsoft.ITriggerSelector)", - "title": "Random rule selector", - "description": "Select most specific true rule.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "seed": { - "type": "integer", - "title": "Random seed", - "description": "Random seed to start random number generation." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RandomSelector" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.RecognizerSet": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "Recognizer set", - "description": "Creates the union of the intents and entities of the recognizers in the set.", - "type": "object", - "required": [ - "recognizers", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." - }, - "recognizers": { - "type": "array", - "title": "Recognizers", - "description": "List of Recognizers defined for this set.", - "items": { - "$kind": "Microsoft.IRecognizer", - "$ref": "#/definitions/Microsoft.IRecognizer" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RecognizerSet" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.RegexEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Regex entity recognizer", - "description": "Recognizer which recognizes patterns of input based on regex.", - "type": "object", - "required": [ - "name", - "pattern", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "name": { - "type": "string", - "title": "Name", - "description": "Name of the entity" - }, - "pattern": { - "type": "string", - "title": "Pattern", - "description": "Pattern expressed as regular expression." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RegexEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.RegexRecognizer": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "Regex recognizer", - "description": "Use regular expressions to recognize intents and entities from user input.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." - }, - "intents": { - "type": "array", - "title": "RegEx patterns to intents", - "description": "Collection of patterns to match for an intent.", - "items": { - "type": "object", - "title": "Pattern", - "description": "Intent and regex pattern.", - "properties": { - "intent": { - "type": "string", - "title": "Intent", - "description": "The intent name." - }, - "pattern": { - "type": "string", - "title": "Pattern", - "description": "The regular expression pattern." - } - } - } - }, - "entities": { - "type": "array", - "title": "Entity recognizers", - "description": "Collection of entity recognizers to use.", - "items": { - "$kind": "Microsoft.IEntityRecognizer", - "$ref": "#/definitions/Microsoft.IEntityRecognizer" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RegexRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.RepeatDialog": { - "$role": "implements(Microsoft.IDialog)", - "type": "object", - "title": "Repeat dialog", - "description": "Repeat current dialog.", - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "allowLoop": { - "$ref": "#/definitions/booleanExpression", - "title": "AllowLoop", - "description": "Optional condition which if true will allow loop of the repeated dialog.", - "examples": [ - "user.age > 3" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "options": { - "$ref": "#/definitions/objectExpression", - "title": "Options", - "description": "One or more options that are passed to the dialog that is called.", - "additionalProperties": { - "type": "string", - "title": "Options", - "description": "Options for repeating dialog." - } - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the dialog that is called can process the current activity.", - "default": true - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RepeatDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ReplaceDialog": { - "$role": "implements(Microsoft.IDialog)", - "type": "object", - "title": "Replace dialog", - "description": "Replace current dialog with another dialog.", - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "dialog": { - "oneOf": [ - { - "$kind": "Microsoft.IDialog", - "pattern": "^(?!(=)).*", - "title": "Dialog", - "$ref": "#/definitions/Microsoft.IDialog" - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=settings.dialogId" - ] - } - ], - "title": "Dialog name", - "description": "Name of the dialog to call." - }, - "options": { - "$ref": "#/definitions/objectExpression", - "title": "Options", - "description": "One or more options that are passed to the dialog that is called.", - "additionalProperties": { - "type": "string", - "title": "Options", - "description": "Options for replacing dialog." - } - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the dialog that is called can process the current activity.", - "default": true - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ReplaceDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ResourceMultiLanguageGenerator": { - "$role": "implements(Microsoft.ILanguageGenerator)", - "title": "Resource multi-language generator", - "description": "MultiLanguage Generator which is bound to resource by resource Id.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional generator ID." - }, - "resourceId": { - "type": "string", - "title": "Resource Id", - "description": "Resource which is the root language generator. Other generaters with the same name and language suffix will be loaded into this generator and used based on the Language Policy.", - "default": "dialog.result" - }, - "languagePolicy": { - "type": "object", - "title": "Language policy", - "description": "Set alternate language policy for this generator. If not set, the global language policy will be used." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ResourceMultiLanguageGenerator" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.SendActivity": { - "$role": "implements(Microsoft.IDialog)", - "title": "Send an activity", - "description": "Respond with an activity.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action." - }, - "activity": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Activity", - "description": "Activity to send.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SendActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.SendHandoffActivity": { - "$role": "implements(Microsoft.IDialog)", - "title": "Send a handoff activity", - "description": "Sends a handoff activity to trigger a handoff request.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "context": { - "$ref": "#/definitions/objectExpression", - "title": "Context", - "description": "Context to send with the handoff request" - }, - "transcript": { - "$ref": "#/definitions/objectExpression", - "title": "transcript", - "description": "Transcript to send with the handoff request" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SendHandoffActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.SetProperties": { - "$role": "implements(Microsoft.IDialog)", - "title": "Set property", - "description": "Set one or more property values.", - "type": "object", - "required": [ - "assignments", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "assignments": { - "type": "array", - "title": "Assignments", - "description": "Property value assignments to set.", - "items": { - "type": "object", - "title": "Assignment", - "description": "Property assignment.", - "properties": { - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property (named location to store information).", - "examples": [ - "user.age" - ] - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "New value or expression.", - "examples": [ - "='milk'", - "=dialog.favColor", - "=dialog.favColor == 'red'" - ] - } - } - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SetProperties" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.SetProperty": { - "$role": "implements(Microsoft.IDialog)", - "title": "Set property", - "description": "Set property to a value.", - "type": "object", - "required": [ - "property", - "value", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property (named location to store information).", - "examples": [ - "user.age" - ] - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "New value or expression.", - "examples": [ - "='milk'", - "=dialog.favColor", - "=dialog.favColor == 'red'" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SetProperty" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.SignOutUser": { - "$role": "implements(Microsoft.IDialog)", - "title": "Sign out user", - "description": "Sign a user out that was logged in previously using OAuthInput.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "userId": { - "$ref": "#/definitions/stringExpression", - "title": "UserId", - "description": "Expression to an user to signout. Default is user.id.", - "default": "=user.id" - }, - "connectionName": { - "$ref": "#/definitions/stringExpression", - "title": "Connection name", - "description": "Connection name that was used with OAuthInput to log a user in." - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SignOutUser" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.StaticActivityTemplate": { - "$role": "implements(Microsoft.IActivityTemplate)", - "title": "Microsoft static activity template", - "description": "This allows you to define a static Activity object", - "type": "object", - "required": [ - "activity", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "activity": { - "$ref": "#/definitions/botframework.json/definitions/Activity", - "title": "Activity", - "description": "A static Activity to used.", - "required": [ - "type" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.StaticActivityTemplate" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.SwitchCondition": { - "$role": "implements(Microsoft.IDialog)", - "title": "Switch condition", - "description": "Execute different actions based on the value of a property.", - "type": "object", - "required": [ - "condition", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "condition": { - "$ref": "#/definitions/stringExpression", - "title": "Condition", - "description": "Property to evaluate.", - "examples": [ - "user.favColor" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "cases": { - "type": "array", - "title": "Cases", - "description": "Actions for each possible condition.", - "items": { - "type": "object", - "title": "Case", - "description": "Case and actions.", - "required": [ - "value" - ], - "properties": { - "value": { - "type": [ - "number", - "integer", - "boolean", - "string" - ], - "title": "Value", - "description": "The value to compare the condition with.", - "examples": [ - "red", - "true", - "13" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - } - } - }, - "default": { - "type": "array", - "title": "Default", - "description": "Actions to execute if none of the cases meet the condition.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SwitchCondition" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TelemetryTrackEventAction": { - "$role": "implements(Microsoft.IDialog)", - "type": "object", - "title": "Telemetry - track event", - "description": "Track a custom event using the registered Telemetry Client.", - "required": [ - "url", - "method", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "eventName": { - "$ref": "#/definitions/stringExpression", - "title": "Event name", - "description": "The name of the event to track.", - "examples": [ - "MyEventStarted", - "MyEventCompleted" - ] - }, - "properties": { - "type": "object", - "title": "Properties", - "description": "One or more properties to attach to the event being tracked.", - "additionalProperties": { - "$ref": "#/definitions/stringExpression" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TelemetryTrackEventAction" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TemperatureEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Temperature recognizer", - "description": "Recognizer which recognizes temperatures.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TemperatureEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TemplateEngineLanguageGenerator": { - "$role": "implements(Microsoft.ILanguageGenerator)", - "title": "Template multi-language generator", - "description": "Template Generator which allows only inline evaluation of templates.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional generator ID." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TemplateEngineLanguageGenerator" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TextInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "type": "object", - "title": "Text input dialog", - "description": "Collection information - Ask for a word or sentence.", - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "defaultValue": { - "$ref": "#/definitions/stringExpression", - "title": "Default value", - "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", - "examples": [ - "hello world", - "Hello ${user.name}", - "=concat(user.firstname, user.lastName)" - ] - }, - "value": { - "$ref": "#/definitions/stringExpression", - "title": "Value", - "description": "'Property' will be set to the value of this expression unless it evaluates to null.", - "examples": [ - "hello world", - "Hello ${user.name}", - "=concat(user.firstname, user.lastName)" - ] - }, - "outputFormat": { - "$ref": "#/definitions/stringExpression", - "title": "Output format", - "description": "Expression to format the output.", - "examples": [ - "=toUpper(this.value)", - "${toUpper(this.value)}" - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "minimum": 0, - "maximum": 2147483647, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TextInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TextTemplate": { - "$role": "implements(Microsoft.ITextTemplate)", - "title": "Microsoft TextTemplate", - "description": "Use LG Templates to create text", - "type": "object", - "required": [ - "template", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "template": { - "title": "Template", - "description": "Language Generator template to evaluate to create the text.", - "type": "string" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TextTemplate" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ThrowException": { - "$role": "implements(Microsoft.IDialog)", - "title": "Throw an exception", - "description": "Throw an exception. Capture this exception with OnError trigger.", - "type": "object", - "required": [ - "errorValue", - "$kind" - ], - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "errorValue": { - "$ref": "#/definitions/valueExpression", - "title": "Error value", - "description": "Error value to throw." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ThrowException" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TraceActivity": { - "$role": "implements(Microsoft.IDialog)", - "title": "Send a TraceActivity", - "description": "Send a trace activity to the transcript logger and/ or Bot Framework Emulator.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "name": { - "$ref": "#/definitions/stringExpression", - "title": "Name", - "description": "Name of the trace activity" - }, - "label": { - "$ref": "#/definitions/stringExpression", - "title": "Label", - "description": "Label for the trace activity (used to identify it in a list of trace activities.)" - }, - "valueType": { - "$ref": "#/definitions/stringExpression", - "title": "Value type", - "description": "Type of value" - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "Property that holds the value to send as trace activity." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TraceActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TrueSelector": { - "$role": "implements(Microsoft.ITriggerSelector)", - "title": "True trigger selector", - "description": "Selector for all true events", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TrueSelector" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.UpdateActivity": { - "$role": "implements(Microsoft.IDialog)", - "title": "Update an activity", - "description": "Respond with an activity.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "activityId": { - "$ref": "#/definitions/stringExpression", - "title": "Activity Id", - "description": "An string expression with the activity id to update.", - "examples": [ - "=turn.lastresult.id" - ] - }, - "activity": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Activity", - "description": "Activity to send.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.UpdateActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.UrlEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Url recognizer", - "description": "Recognizer which recognizes urls.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.UrlEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "numberExpression": { - "$role": "expression", - "title": "Number or expression", - "description": "Number constant or expression to evaluate.", - "oneOf": [ - { - "type": "number", - "title": "Number", - "description": "Number constant.", - "default": 0, - "examples": [ - 15.5 - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=dialog.quantity" - ] - } - ] - }, - "objectExpression": { - "$role": "expression", - "title": "Object or expression", - "description": "Object or expression to evaluate.", - "oneOf": [ - { - "type": "object", - "title": "Object", - "description": "Object constant." - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "role": { - "title": "$role", - "description": "Defines the role played in the dialog schema from [expression|interface|implements($kind)|extends($kind)].", - "type": "string", - "pattern": "^((expression)|(interface)|(implements\\([a-zA-Z][a-zA-Z0-9.]*\\))|(extends\\([a-zA-Z][a-zA-Z0-9.]*\\)))$" - }, - "stringExpression": { - "$role": "expression", - "title": "String or expression", - "description": "Interpolated string or expression to evaluate.", - "oneOf": [ - { - "type": "string", - "title": "String", - "description": "Interpolated string", - "pattern": "^(?!(=)).*", - "examples": [ - "Hello ${user.name}" - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=concat('x','y','z')" - ] - } - ] - }, - "valueExpression": { - "$role": "expression", - "title": "Any or expression", - "description": "Any constant or expression to evaluate.", - "oneOf": [ - { - "type": "object", - "title": "Object", - "description": "Object constant." - }, - { - "type": "array", - "title": "Array", - "description": "Array constant." - }, - { - "type": "string", - "title": "String", - "description": "Interpolated string.", - "pattern": "^(?!(=)).*", - "examples": [ - "Hello ${user.name}" - ] - }, - { - "type": "boolean", - "title": "Boolean", - "description": "Boolean constant", - "examples": [ - false - ] - }, - { - "type": "number", - "title": "Number", - "description": "Number constant.", - "examples": [ - 15.5 - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=..." - ] - } - ] - }, - "schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Core schema meta-schema", - "definitions": { - "schemaArray": { - "type": "array", - "minItems": 1, - "items": { - "$ref": "#/definitions/schema" - } - }, - "nonNegativeInteger": { - "type": "integer", - "minimum": 0 - }, - "nonNegativeIntegerDefault0": { - "type": "integer", - "minimum": 0, - "default": 0 - }, - "simpleTypes": { - "enum": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ] - }, - "stringArray": { - "type": "array", - "uniqueItems": true, - "default": [], - "items": { - "type": "string" - } - } - }, - "type": [ - "object", - "boolean" - ], - "default": true, - "properties": { - "$schema": { - "type": "string", - "format": "uri" - }, - "$ref": { - "type": "string", - "format": "uri-reference" - }, - "$comment": { - "type": "string" - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "default": true, - "readOnly": { - "type": "boolean", - "default": false - }, - "writeOnly": { - "type": "boolean", - "default": false - }, - "examples": { - "type": "array", - "items": true - }, - "multipleOf": { - "type": "number", - "exclusiveMinimum": 0 - }, - "maximum": { - "type": "number" - }, - "exclusiveMaximum": { - "type": "number" - }, - "minimum": { - "type": "number" - }, - "exclusiveMinimum": { - "type": "number" - }, - "maxLength": { - "$ref": "#/definitions/schema/definitions/nonNegativeInteger" - }, - "minLength": { - "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" - }, - "pattern": { - "type": "string", - "format": "regex" - }, - "additionalItems": { - "$ref": "#/definitions/schema" - }, - "items": { - "anyOf": [ - { - "$ref": "#/definitions/schema" - }, - { - "$ref": "#/definitions/schema/definitions/schemaArray" - } - ], - "default": true - }, - "maxItems": { - "$ref": "#/definitions/schema/definitions/nonNegativeInteger" - }, - "minItems": { - "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" - }, - "uniqueItems": { - "type": "boolean", - "default": false - }, - "contains": { - "$ref": "#/definitions/schema" - }, - "maxProperties": { - "$ref": "#/definitions/schema/definitions/nonNegativeInteger" - }, - "minProperties": { - "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" - }, - "required": { - "$ref": "#/definitions/schema/definitions/stringArray" - }, - "additionalProperties": { - "$ref": "#/definitions/schema" - }, - "definitions": { - "type": "object", - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/schema" - } - }, - "properties": { - "type": "object", - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/schema" - } - }, - "patternProperties": { - "type": "object", - "propertyNames": { - "format": "regex" - }, - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/schema" - } - }, - "dependencies": { - "type": "object", - "additionalProperties": { - "anyOf": [ - { - "$ref": "#/definitions/schema" - }, - { - "$ref": "#/definitions/schema/definitions/stringArray" - } - ] - } - }, - "propertyNames": { - "$ref": "#/definitions/schema" - }, - "const": true, - "enum": { - "type": "array", - "minItems": 1, - "uniqueItems": true, - "items": true - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/schema/definitions/simpleTypes" - }, - { - "type": "array", - "items": { - "$ref": "#/definitions/schema/definitions/simpleTypes" - }, - "minItems": 1, - "uniqueItems": true - } - ] - }, - "format": { - "type": "string" - }, - "contentMediaType": { - "type": "string" - }, - "contentEncoding": { - "type": "string" - }, - "if": { - "$ref": "#/definitions/schema" - }, - "then": { - "$ref": "#/definitions/schema" - }, - "else": { - "$ref": "#/definitions/schema" - }, - "allOf": { - "$ref": "#/definitions/schema/definitions/schemaArray" - }, - "anyOf": { - "$ref": "#/definitions/schema/definitions/schemaArray" - }, - "oneOf": { - "$ref": "#/definitions/schema/definitions/schemaArray" - }, - "not": { - "$ref": "#/definitions/schema" - } - } - }, - "botframework.json": { - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "ChannelAccount": { - "description": "Channel account information needed to route a message", - "title": "ChannelAccount", - "type": "object", - "required": [ - "id", - "name" - ], - "properties": { - "id": { - "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", - "type": "string", - "title": "id" - }, - "name": { - "description": "Display friendly name", - "type": "string", - "title": "name" - }, - "aadObjectId": { - "description": "This account's object ID within Azure Active Directory (AAD)", - "type": "string", - "title": "aadObjectId" - }, - "role": { - "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", - "type": "string", - "title": "role" - } - } - }, - "ConversationAccount": { - "description": "Channel account information for a conversation", - "title": "ConversationAccount", - "type": "object", - "required": [ - "conversationType", - "id", - "isGroup", - "name" - ], - "properties": { - "isGroup": { - "description": "Indicates whether the conversation contains more than two participants at the time the\nactivity was generated", - "type": "boolean", - "title": "isGroup" - }, - "conversationType": { - "description": "Indicates the type of the conversation in channels that distinguish between conversation types", - "type": "string", - "title": "conversationType" - }, - "id": { - "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", - "type": "string", - "title": "id" - }, - "name": { - "description": "Display friendly name", - "type": "string", - "title": "name" - }, - "aadObjectId": { - "description": "This account's object ID within Azure Active Directory (AAD)", - "type": "string", - "title": "aadObjectId" - }, - "role": { - "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", - "enum": [ - "bot", - "user" - ], - "type": "string", - "title": "role" - } - } - }, - "MessageReaction": { - "description": "Message reaction object", - "title": "MessageReaction", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "description": "Message reaction type. Possible values include: 'like', 'plusOne'", - "type": "string", - "title": "type" - } - } - }, - "CardAction": { - "description": "A clickable action", - "title": "CardAction", - "type": "object", - "required": [ - "title", - "type", - "value" - ], - "properties": { - "type": { - "description": "The type of action implemented by this button. Possible values include: 'openUrl', 'imBack',\n'postBack', 'playAudio', 'playVideo', 'showImage', 'downloadFile', 'signin', 'call',\n'payment', 'messageBack'", - "type": "string", - "title": "type" - }, - "title": { - "description": "Text description which appears on the button", - "type": "string", - "title": "title" - }, - "image": { - "description": "Image URL which will appear on the button, next to text label", - "type": "string", - "title": "image" - }, - "text": { - "description": "Text for this action", - "type": "string", - "title": "text" - }, - "displayText": { - "description": "(Optional) text to display in the chat feed if the button is clicked", - "type": "string", - "title": "displayText" - }, - "value": { - "description": "Supplementary parameter for action. Content of this property depends on the ActionType", - "title": "value" - }, - "channelData": { - "description": "Channel-specific data associated with this action", - "title": "channelData" - } - } - }, - "SuggestedActions": { - "description": "SuggestedActions that can be performed", - "title": "SuggestedActions", - "type": "object", - "required": [ - "actions", - "to" - ], - "properties": { - "to": { - "description": "Ids of the recipients that the actions should be shown to. These Ids are relative to the\nchannelId and a subset of all recipients of the activity", - "type": "array", - "title": "to", - "items": { - "title": "Id", - "description": "Id of recipient.", - "type": "string" - } - }, - "actions": { - "description": "Actions that can be shown to the user", - "type": "array", - "title": "actions", - "items": { - "$ref": "#/definitions/botframework.json/definitions/CardAction" - } - } - } - }, - "Attachment": { - "description": "An attachment within an activity", - "title": "Attachment", - "type": "object", - "required": [ - "contentType" - ], - "properties": { - "contentType": { - "description": "mimetype/Contenttype for the file", - "type": "string", - "title": "contentType" - }, - "contentUrl": { - "description": "Content Url", - "type": "string", - "title": "contentUrl" - }, - "content": { - "type": "object", - "description": "Embedded content", - "title": "content" - }, - "name": { - "description": "(OPTIONAL) The name of the attachment", - "type": "string", - "title": "name" - }, - "thumbnailUrl": { - "description": "(OPTIONAL) Thumbnail associated with attachment", - "type": "string", - "title": "thumbnailUrl" - } - } - }, - "Entity": { - "description": "Metadata object pertaining to an activity", - "title": "Entity", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "description": "Type of this entity (RFC 3987 IRI)", - "type": "string", - "title": "type" - } - } - }, - "ConversationReference": { - "description": "An object relating to a particular point in a conversation", - "title": "ConversationReference", - "type": "object", - "required": [ - "bot", - "channelId", - "conversation", - "serviceUrl" - ], - "properties": { - "activityId": { - "description": "(Optional) ID of the activity to refer to", - "type": "string", - "title": "activityId" - }, - "user": { - "description": "(Optional) User participating in this conversation", - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "title": "user" - }, - "bot": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "description": "Bot participating in this conversation", - "title": "bot" - }, - "conversation": { - "$ref": "#/definitions/botframework.json/definitions/ConversationAccount", - "description": "Conversation reference", - "title": "conversation" - }, - "channelId": { - "description": "Channel ID", - "type": "string", - "title": "channelId" - }, - "serviceUrl": { - "description": "Service endpoint where operations concerning the referenced conversation may be performed", - "type": "string", - "title": "serviceUrl" - } - } - }, - "TextHighlight": { - "description": "Refers to a substring of content within another field", - "title": "TextHighlight", - "type": "object", - "required": [ - "occurrence", - "text" - ], - "properties": { - "text": { - "description": "Defines the snippet of text to highlight", - "type": "string", - "title": "text" - }, - "occurrence": { - "description": "Occurrence of the text field within the referenced text, if multiple exist.", - "type": "number", - "title": "occurrence" - } - } - }, - "SemanticAction": { - "description": "Represents a reference to a programmatic action", - "title": "SemanticAction", - "type": "object", - "required": [ - "entities", - "id" - ], - "properties": { - "id": { - "description": "ID of this action", - "type": "string", - "title": "id" - }, - "entities": { - "description": "Entities associated with this action", - "type": "object", - "title": "entities", - "additionalProperties": { - "$ref": "#/definitions/botframework.json/definitions/Entity" - } - } - } - }, - "Activity": { - "description": "An Activity is the basic communication type for the Bot Framework 3.0 protocol.", - "title": "Activity", - "type": "object", - "properties": { - "type": { - "description": "Contains the activity type. Possible values include: 'message', 'contactRelationUpdate',\n'conversationUpdate', 'typing', 'endOfConversation', 'event', 'invoke', 'deleteUserData',\n'messageUpdate', 'messageDelete', 'installationUpdate', 'messageReaction', 'suggestion',\n'trace', 'handoff'", - "type": "string", - "title": "type" - }, - "id": { - "description": "Contains an ID that uniquely identifies the activity on the channel.", - "type": "string", - "title": "id" - }, - "timestamp": { - "description": "Contains the date and time that the message was sent, in UTC, expressed in ISO-8601 format.", - "type": "string", - "format": "date-time", - "title": "timestamp" - }, - "localTimestamp": { - "description": "Contains the date and time that the message was sent, in local time, expressed in ISO-8601\nformat.\nFor example, 2016-09-23T13:07:49.4714686-07:00.", - "type": "string", - "format": "date-time", - "title": "localTimestamp" - }, - "localTimezone": { - "description": "Contains the name of the timezone in which the message, in local time, expressed in IANA Time\nZone database format.\nFor example, America/Los_Angeles.", - "type": "string", - "title": "localTimezone" - }, - "serviceUrl": { - "description": "Contains the URL that specifies the channel's service endpoint. Set by the channel.", - "type": "string", - "title": "serviceUrl" - }, - "channelId": { - "description": "Contains an ID that uniquely identifies the channel. Set by the channel.", - "type": "string", - "title": "channelId" - }, - "from": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "description": "Identifies the sender of the message.", - "title": "from" - }, - "conversation": { - "$ref": "#/definitions/botframework.json/definitions/ConversationAccount", - "description": "Identifies the conversation to which the activity belongs.", - "title": "conversation" - }, - "recipient": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "description": "Identifies the recipient of the message.", - "title": "recipient" - }, - "textFormat": { - "description": "Format of text fields Default:markdown. Possible values include: 'markdown', 'plain', 'xml'", - "type": "string", - "title": "textFormat" - }, - "attachmentLayout": { - "description": "The layout hint for multiple attachments. Default: list. Possible values include: 'list',\n'carousel'", - "type": "string", - "title": "attachmentLayout" - }, - "membersAdded": { - "description": "The collection of members added to the conversation.", - "type": "array", - "title": "membersAdded", - "items": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount" - } - }, - "membersRemoved": { - "description": "The collection of members removed from the conversation.", - "type": "array", - "title": "membersRemoved", - "items": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount" - } - }, - "reactionsAdded": { - "description": "The collection of reactions added to the conversation.", - "type": "array", - "title": "reactionsAdded", - "items": { - "$ref": "#/definitions/botframework.json/definitions/MessageReaction" - } - }, - "reactionsRemoved": { - "description": "The collection of reactions removed from the conversation.", - "type": "array", - "title": "reactionsRemoved", - "items": { - "$ref": "#/definitions/botframework.json/definitions/MessageReaction" - } - }, - "topicName": { - "description": "The updated topic name of the conversation.", - "type": "string", - "title": "topicName" - }, - "historyDisclosed": { - "description": "Indicates whether the prior history of the channel is disclosed.", - "type": "boolean", - "title": "historyDisclosed" - }, - "locale": { - "description": "A locale name for the contents of the text field.\nThe locale name is a combination of an ISO 639 two- or three-letter culture code associated\nwith a language\nand an ISO 3166 two-letter subculture code associated with a country or region.\nThe locale name can also correspond to a valid BCP-47 language tag.", - "type": "string", - "title": "locale" - }, - "text": { - "description": "The text content of the message.", - "type": "string", - "title": "text" - }, - "speak": { - "description": "The text to speak.", - "type": "string", - "title": "speak" - }, - "inputHint": { - "description": "Indicates whether your bot is accepting,\nexpecting, or ignoring user input after the message is delivered to the client. Possible\nvalues include: 'acceptingInput', 'ignoringInput', 'expectingInput'", - "type": "string", - "title": "inputHint" - }, - "summary": { - "description": "The text to display if the channel cannot render cards.", - "type": "string", - "title": "summary" - }, - "suggestedActions": { - "description": "The suggested actions for the activity.", - "$ref": "#/definitions/botframework.json/definitions/SuggestedActions", - "title": "suggestedActions" - }, - "attachments": { - "description": "Attachments", - "type": "array", - "title": "attachments", - "items": { - "$ref": "#/definitions/botframework.json/definitions/Attachment" - } - }, - "entities": { - "description": "Represents the entities that were mentioned in the message.", - "type": "array", - "title": "entities", - "items": { - "$ref": "#/definitions/botframework.json/definitions/Entity" - } - }, - "channelData": { - "description": "Contains channel-specific content.", - "title": "channelData" - }, - "action": { - "description": "Indicates whether the recipient of a contactRelationUpdate was added or removed from the\nsender's contact list.", - "type": "string", - "title": "action" - }, - "replyToId": { - "description": "Contains the ID of the message to which this message is a reply.", - "type": "string", - "title": "replyToId" - }, - "label": { - "description": "A descriptive label for the activity.", - "type": "string", - "title": "label" - }, - "valueType": { - "description": "The type of the activity's value object.", - "type": "string", - "title": "valueType" - }, - "value": { - "description": "A value that is associated with the activity.", - "title": "value" - }, - "name": { - "description": "The name of the operation associated with an invoke or event activity.", - "type": "string", - "title": "name" - }, - "relatesTo": { - "description": "A reference to another conversation or activity.", - "$ref": "#/definitions/botframework.json/definitions/ConversationReference", - "title": "relatesTo" - }, - "code": { - "description": "The a code for endOfConversation activities that indicates why the conversation ended.\nPossible values include: 'unknown', 'completedSuccessfully', 'userCancelled', 'botTimedOut',\n'botIssuedInvalidMessage', 'channelFailed'", - "type": "string", - "title": "code" - }, - "expiration": { - "description": "The time at which the activity should be considered to be \"expired\" and should not be\npresented to the recipient.", - "type": "string", - "format": "date-time", - "title": "expiration" - }, - "importance": { - "description": "The importance of the activity. Possible values include: 'low', 'normal', 'high'", - "type": "string", - "title": "importance" - }, - "deliveryMode": { - "description": "A delivery hint to signal to the recipient alternate delivery paths for the activity.\nThe default delivery mode is \"default\". Possible values include: 'normal', 'notification'", - "type": "string", - "title": "deliveryMode" - }, - "listenFor": { - "description": "List of phrases and references that speech and language priming systems should listen for", - "type": "array", - "title": "listenFor", - "items": { - "type": "string", - "title": "Phrase", - "description": "Phrase to listen for." - } - }, - "textHighlights": { - "description": "The collection of text fragments to highlight when the activity contains a ReplyToId value.", - "type": "array", - "title": "textHighlights", - "items": { - "$ref": "#/definitions/botframework.json/definitions/TextHighlight" - } - }, - "semanticAction": { - "$ref": "#/definitions/botframework.json/definitions/SemanticAction", - "description": "An optional programmatic action accompanying this request", - "title": "semanticAction" - } - } - } - } - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/schemas/sdk.uischema b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/schemas/sdk.uischema deleted file mode 100644 index 9cf19c6919..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/schemas/sdk.uischema +++ /dev/null @@ -1,1409 +0,0 @@ -{ - "$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema", - "Microsoft.AdaptiveDialog": { - "form": { - "description": "This configures a data driven dialog via a collection of events and actions.", - "helpLink": "https://aka.ms/bf-composer-docs-dialog", - "hidden": [ - "triggers", - "generator", - "selector", - "schema" - ], - "label": "Adaptive dialog", - "order": [ - "recognizer", - "*" - ], - "properties": { - "recognizer": { - "description": "To understand what the user says, your dialog needs a \"Recognizer\"; that includes example words and sentences that users may use.", - "label": "Language Understanding" - } - } - } - }, - "Microsoft.Ask": { - "flow": { - "body": { - "field": "activity", - "widget": "LgWidget" - }, - "footer": { - "description": "= Default operation", - "property": "=action.defaultOperation", - "widget": "PropertyDescription" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "hideFooter": "=!action.defaultOperation", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-send-activity", - "label": "Send a response to ask a question", - "order": [ - "activity", - "*" - ], - "subtitle": "Ask Activity" - } - }, - "Microsoft.AttachmentInput": { - "flow": { - "body": "=action.prompt", - "botAsks": { - "body": { - "defaultContent": "", - "field": "prompt", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "nowrap": true, - "userInput": { - "header": { - "colors": { - "icon": "#0078D4", - "theme": "#E5F0FF" - }, - "disableSDKTitle": true, - "icon": "User", - "menu": "none", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "widget": "PromptWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for a file or an attachment", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Attachment Input" - } - }, - "Microsoft.BeginDialog": { - "flow": { - "body": { - "dialog": "=action.dialog", - "widget": "DialogRef" - }, - "footer": { - "description": "= Return value", - "property": "=action.resultProperty", - "widget": "PropertyDescription" - }, - "hideFooter": "=!action.resultProperty", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "Begin a new dialog", - "order": [ - "dialog", - "options", - "resultProperty", - "*" - ], - "properties": { - "resultProperty": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Begin Dialog" - } - }, - "Microsoft.BeginSkill": { - "flow": { - "body": { - "operation": "Host", - "resource": "=coalesce(action.skillEndpoint, \"?\")", - "singleline": true, - "widget": "ResourceOperation" - }, - "colors": { - "color": "#FFFFFF", - "icon": "#FFFFFF", - "theme": "#004578" - }, - "footer": { - "description": "= Result", - "property": "=action.resultProperty", - "widget": "PropertyDescription" - }, - "hideFooter": "=!action.resultProperty", - "icon": "Library", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bf-composer-docs-connect-skill", - "label": "Connect to a skill", - "properties": { - "resultProperty": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Skill Dialog" - } - }, - "Microsoft.BreakLoop": { - "form": { - "label": "Break out of loop", - "subtitle": "Break out of loop" - } - }, - "Microsoft.CancelAllDialogs": { - "flow": { - "body": { - "description": "(Event)", - "property": "=coalesce(action.eventName, \"?\")", - "widget": "PropertyDescription" - }, - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "Cancel all active dialogs", - "subtitle": "Cancel All Dialogs" - } - }, - "Microsoft.ChoiceInput": { - "flow": { - "body": "=action.prompt", - "botAsks": { - "body": { - "defaultContent": "", - "field": "prompt", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "nowrap": true, - "userInput": { - "header": { - "colors": { - "icon": "#0078D4", - "theme": "#E5F0FF" - }, - "disableSDKTitle": true, - "icon": "User", - "menu": "none", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "widget": "PromptWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt with multi-choice", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Choice Input" - } - }, - "Microsoft.ConfirmInput": { - "flow": { - "body": "=action.prompt", - "botAsks": { - "body": { - "defaultContent": "", - "field": "prompt", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "nowrap": true, - "userInput": { - "header": { - "colors": { - "icon": "#0078D4", - "theme": "#E5F0FF" - }, - "disableSDKTitle": true, - "icon": "User", - "menu": "none", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "widget": "PromptWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for confirmation", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Confirm Input" - } - }, - "Microsoft.ContinueLoop": { - "form": { - "label": "Continue loop", - "subtitle": "Continue loop" - } - }, - "Microsoft.DateTimeInput": { - "flow": { - "body": "=action.prompt", - "botAsks": { - "body": { - "defaultContent": "", - "field": "prompt", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "nowrap": true, - "userInput": { - "header": { - "colors": { - "icon": "#0078D4", - "theme": "#E5F0FF" - }, - "disableSDKTitle": true, - "icon": "User", - "menu": "none", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "widget": "PromptWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for a date or a time", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Date Time Input" - } - }, - "Microsoft.DebugBreak": { - "form": { - "label": "Debug Break" - } - }, - "Microsoft.DeleteProperties": { - "flow": { - "body": { - "items": "=action.properties", - "widget": "ListOverview" - }, - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-using-memory", - "label": "Delete properties", - "properties": { - "properties": { - "intellisenseScopes": [ - "user-variables" - ] - } - }, - "subtitle": "Delete Properties" - } - }, - "Microsoft.DeleteProperty": { - "flow": { - "body": "=action.property", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-using-memory", - "label": "Delete a property", - "properties": { - "property": { - "intellisenseScopes": [ - "user-variables" - ] - } - }, - "subtitle": "Delete Property" - } - }, - "Microsoft.EditActions": { - "flow": { - "body": "=action.changeType", - "widget": "ActionCard" - }, - "form": { - "label": "Modify active dialog", - "subtitle": "Edit Actions" - } - }, - "Microsoft.EditArray": { - "flow": { - "body": { - "operation": "=coalesce(action.changeType, \"?\")", - "resource": "=coalesce(action.itemsProperty, \"?\")", - "widget": "ResourceOperation" - }, - "footer": { - "description": "= Result", - "property": "=action.resultProperty", - "widget": "PropertyDescription" - }, - "hideFooter": "=!action.resultProperty", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-using-memory", - "label": "Edit an array property", - "properties": { - "itemsProperty": { - "intellisenseScopes": [ - "user-variables" - ] - }, - "resultProperty": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Edit Array" - } - }, - "Microsoft.EmitEvent": { - "flow": { - "body": { - "description": "(Event)", - "property": "=coalesce(action.eventName, \"?\")", - "widget": "PropertyDescription" - }, - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-custom-events", - "label": "Emit a custom event", - "subtitle": "Emit Event" - } - }, - "Microsoft.EndDialog": { - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "End this dialog", - "subtitle": "End Dialog" - } - }, - "Microsoft.EndTurn": { - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "End turn", - "subtitle": "End Turn" - } - }, - "Microsoft.Foreach": { - "flow": { - "loop": { - "body": "=concat(\"Each value in \", coalesce(action.itemsProperty, \"?\"))", - "widget": "ActionCard" - }, - "nowrap": true, - "widget": "ForeachWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", - "hidden": [ - "actions" - ], - "label": "Loop: For each item", - "order": [ - "itemsProperty", - "*" - ], - "properties": { - "index": { - "intellisenseScopes": [ - "variable-scopes" - ] - }, - "itemsProperty": { - "intellisenseScopes": [ - "user-variables" - ] - }, - "value": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "For Each" - } - }, - "Microsoft.ForeachPage": { - "flow": { - "loop": { - "body": "=concat(\"Each page of \", coalesce(action.pageSize, \"?\"), \" in \", coalesce(action.page, \"?\"))", - "widget": "ActionCard" - }, - "nowrap": true, - "widget": "ForeachWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", - "hidden": [ - "actions" - ], - "label": "Loop: For each page (multiple items)", - "order": [ - "itemsProperty", - "pageSize", - "*" - ], - "properties": { - "itemsProperty": { - "intellisenseScopes": [ - "user-variables" - ] - }, - "page": { - "intellisenseScopes": [ - "variable-scopes" - ] - }, - "pageIndex": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "For Each Page" - } - }, - "Microsoft.GetActivityMembers": { - "flow": { - "body": { - "description": "= ActivityId", - "property": "=coalesce(action.activityId, \"?\")", - "widget": "PropertyDescription" - }, - "footer": { - "description": "= Result property", - "property": "=coalesce(action.property, \"?\")", - "widget": "PropertyDescription" - }, - "widget": "ActionCard" - } - }, - "Microsoft.GetConversationMembers": { - "flow": { - "footer": { - "description": "= Result property", - "property": "=action.property", - "widget": "PropertyDescription" - }, - "widget": "ActionCard" - } - }, - "Microsoft.HttpRequest": { - "flow": { - "body": { - "operation": "=action.method", - "resource": "=action.url", - "singleline": true, - "widget": "ResourceOperation" - }, - "footer": { - "description": "= Result property", - "property": "=action.resultProperty", - "widget": "PropertyDescription" - }, - "hideFooter": "=!action.resultProperty", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-using-http", - "label": "Send an HTTP request", - "order": [ - "method", - "url", - "body", - "headers", - "*" - ], - "properties": { - "resultProperty": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "HTTP Request" - } - }, - "Microsoft.IfCondition": { - "flow": { - "judgement": { - "body": "=coalesce(action.condition, \"\")", - "widget": "ActionCard" - }, - "nowrap": true, - "widget": "IfConditionWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", - "hidden": [ - "actions", - "elseActions" - ], - "label": "Branch: If/Else", - "subtitle": "If Condition" - } - }, - "Microsoft.LogAction": { - "form": { - "helpLink": "https://aka.ms/composer-telemetry", - "label": "Log to console", - "subtitle": "Log Action" - } - }, - "Microsoft.NumberInput": { - "flow": { - "body": "=action.prompt", - "botAsks": { - "body": { - "defaultContent": "", - "field": "prompt", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "nowrap": true, - "userInput": { - "header": { - "colors": { - "icon": "#0078D4", - "theme": "#E5F0FF" - }, - "disableSDKTitle": true, - "icon": "User", - "menu": "none", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "widget": "PromptWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for a number", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Number Input" - } - }, - "Microsoft.OAuthInput": { - "flow": { - "body": { - "operation": "Connection", - "resource": "=coalesce(action.connectionName, \"?\")", - "singleline": true, - "widget": "ResourceOperation" - }, - "footer": { - "description": "= Token property", - "property": "=action.property", - "widget": "PropertyDescription" - }, - "hideFooter": "=!action.property", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-using-oauth", - "label": "OAuth login", - "order": [ - "connectionName", - "*" - ], - "subtitle": "OAuth Input" - } - }, - "Microsoft.OnActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Activities", - "order": [ - "condition", - "*" - ], - "subtitle": "Activity received" - }, - "trigger": { - "label": "Activities (Activity received)", - "order": 5.1, - "submenu": { - "label": "Activities", - "placeholder": "Select an activity type", - "prompt": "Which activity type?" - } - } - }, - "Microsoft.OnAssignEntity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Handle a condition when an entity is assigned", - "order": [ - "condition", - "*" - ], - "subtitle": "EntityAssigned activity" - } - }, - "Microsoft.OnBeginDialog": { - "form": { - "hidden": [ - "actions" - ], - "label": "Dialog started", - "order": [ - "condition", - "*" - ], - "subtitle": "Begin dialog event" - }, - "trigger": { - "label": "Dialog started (Begin dialog event)", - "order": 4.1, - "submenu": { - "label": "Dialog events", - "placeholder": "Select an event type", - "prompt": "Which event?" - } - } - }, - "Microsoft.OnCancelDialog": { - "form": { - "hidden": [ - "actions" - ], - "label": "Dialog cancelled", - "order": [ - "condition", - "*" - ], - "subtitle": "Cancel dialog event" - }, - "trigger": { - "label": "Dialog cancelled (Cancel dialog event)", - "order": 4.2, - "submenu": "Dialog events" - } - }, - "Microsoft.OnChooseEntity": { - "form": { - "hidden": [ - "actions" - ], - "order": [ - "condition", - "*" - ] - } - }, - "Microsoft.OnChooseIntent": { - "form": { - "hidden": [ - "actions" - ], - "order": [ - "condition", - "*" - ] - }, - "trigger": { - "label": "Duplicated intents recognized", - "order": 6 - } - }, - "Microsoft.OnCommandActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Command received", - "order": [ - "condition", - "*" - ], - "subtitle": "Command activity received" - }, - "trigger": { - "label": "Command received (Command activity received)", - "order": 5.81, - "submenu": "Activities" - } - }, - "Microsoft.OnCommandResultActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Command Result received", - "order": [ - "condition", - "*" - ], - "subtitle": "Command Result activity received" - }, - "trigger": { - "label": "Command Result received (Command Result activity received)", - "order": 5.81, - "submenu": "Activities" - } - }, - "Microsoft.OnCondition": { - "form": { - "hidden": [ - "actions" - ], - "label": "Handle a condition", - "order": [ - "condition", - "*" - ], - "subtitle": "Condition" - } - }, - "Microsoft.OnConversationUpdateActivity": { - "form": { - "description": "Handle the events fired when a user begins a new conversation with the bot.", - "helpLink": "https://aka.ms/bf-composer-docs-conversation-update-activity", - "hidden": [ - "actions" - ], - "label": "Greeting", - "order": [ - "condition", - "*" - ], - "subtitle": "ConversationUpdate activity" - }, - "trigger": { - "label": "Greeting (ConversationUpdate activity)", - "order": 5.2, - "submenu": "Activities" - } - }, - "Microsoft.OnDialogEvent": { - "form": { - "hidden": [ - "actions" - ], - "label": "Dialog events", - "order": [ - "condition", - "*" - ], - "subtitle": "Dialog event" - }, - "trigger": { - "label": "Custom events", - "order": 7 - } - }, - "Microsoft.OnEndOfActions": { - "form": { - "hidden": [ - "actions" - ], - "label": "Handle a condition when actions have ended", - "order": [ - "condition", - "*" - ], - "subtitle": "EndOfActions activity" - } - }, - "Microsoft.OnEndOfConversationActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Conversation ended", - "order": [ - "condition", - "*" - ], - "subtitle": "EndOfConversation activity" - }, - "trigger": { - "label": "Conversation ended (EndOfConversation activity)", - "order": 5.3, - "submenu": "Activities" - } - }, - "Microsoft.OnError": { - "form": { - "hidden": [ - "actions" - ], - "label": "Error occurred", - "order": [ - "condition", - "*" - ], - "subtitle": "Error event" - }, - "trigger": { - "label": "Error occurred (Error event)", - "order": 4.3, - "submenu": "Dialog events" - } - }, - "Microsoft.OnEventActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Event received", - "order": [ - "condition", - "*" - ], - "subtitle": "Event activity" - }, - "trigger": { - "label": "Event received (Event activity)", - "order": 5.4, - "submenu": "Activities" - } - }, - "Microsoft.OnHandoffActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Handover to human", - "order": [ - "condition", - "*" - ], - "subtitle": "Handoff activity" - }, - "trigger": { - "label": "Handover to human (Handoff activity)", - "order": 5.5, - "submenu": "Activities" - } - }, - "Microsoft.OnInstallationUpdateActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Installation updated", - "order": [ - "condition", - "*" - ], - "subtitle": "Installation updated activity" - } - }, - "Microsoft.OnIntent": { - "form": { - "hidden": [ - "actions" - ], - "label": "Intent recognized", - "order": [ - "intent", - "condition", - "entities", - "*" - ], - "subtitle": "Intent recognized" - }, - "trigger": { - "label": "Intent recognized", - "order": 1 - } - }, - "Microsoft.OnInvokeActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Conversation invoked", - "order": [ - "condition", - "*" - ], - "subtitle": "Invoke activity" - }, - "trigger": { - "label": "Conversation invoked (Invoke activity)", - "order": 5.6, - "submenu": "Activities" - } - }, - "Microsoft.OnMessageActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Message received", - "order": [ - "condition", - "*" - ], - "subtitle": "Message activity received" - }, - "trigger": { - "label": "Message received (Message activity received)", - "order": 5.81, - "submenu": "Activities" - } - }, - "Microsoft.OnMessageDeleteActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Message deleted", - "order": [ - "condition", - "*" - ], - "subtitle": "Message deleted activity" - }, - "trigger": { - "label": "Message deleted (Message deleted activity)", - "order": 5.82, - "submenu": "Activities" - } - }, - "Microsoft.OnMessageReactionActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Message reaction", - "order": [ - "condition", - "*" - ], - "subtitle": "Message reaction activity" - }, - "trigger": { - "label": "Message reaction (Message reaction activity)", - "order": 5.83, - "submenu": "Activities" - } - }, - "Microsoft.OnMessageUpdateActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Message updated", - "order": [ - "condition", - "*" - ], - "subtitle": "Message updated activity" - }, - "trigger": { - "label": "Message updated (Message updated activity)", - "order": 5.84, - "submenu": "Activities" - } - }, - "Microsoft.OnQnAMatch": { - "trigger": { - "label": "QnA Intent recognized", - "order": 2 - } - }, - "Microsoft.OnRepromptDialog": { - "form": { - "hidden": [ - "actions" - ], - "label": "Re-prompt for input", - "order": [ - "condition", - "*" - ], - "subtitle": "Reprompt dialog event" - }, - "trigger": { - "label": "Re-prompt for input (Reprompt dialog event)", - "order": 4.4, - "submenu": "Dialog events" - } - }, - "Microsoft.OnTypingActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "User is typing", - "order": [ - "condition", - "*" - ], - "subtitle": "Typing activity" - }, - "trigger": { - "label": "User is typing (Typing activity)", - "order": 5.7, - "submenu": "Activities" - } - }, - "Microsoft.OnUnknownIntent": { - "form": { - "hidden": [ - "actions" - ], - "label": "Unknown intent", - "order": [ - "condition", - "*" - ], - "subtitle": "Unknown intent recognized" - }, - "trigger": { - "label": "Unknown intent", - "order": 3 - } - }, - "Microsoft.QnAMakerDialog": { - "flow": { - "body": "=action.hostname", - "widget": "ActionCard" - } - }, - "Microsoft.RegexRecognizer": { - "form": { - "hidden": [ - "entities" - ] - } - }, - "Microsoft.RepeatDialog": { - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "Repeat this dialog", - "order": [ - "options", - "*" - ], - "subtitle": "Repeat Dialog" - } - }, - "Microsoft.ReplaceDialog": { - "flow": { - "body": { - "dialog": "=action.dialog", - "widget": "DialogRef" - }, - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "Replace this dialog", - "order": [ - "dialog", - "options", - "*" - ], - "subtitle": "Replace Dialog" - } - }, - "Microsoft.SendActivity": { - "flow": { - "body": { - "field": "activity", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-send-activity", - "label": "Send a response", - "order": [ - "activity", - "*" - ], - "subtitle": "Send Activity" - } - }, - "Microsoft.SendHandoffActivity": { - "flow": { - "widget": "ActionHeader" - }, - "form": { - "helpLink": "https://aka.ms/bfc-send-handoff-activity", - "label": "Send a handoff request", - "subtitle": "Send Handoff Activity" - }, - "menu": { - "label": "Send Handoff Event", - "submenu": [ - "Access external resources" - ] - } - }, - "Microsoft.SetProperties": { - "flow": { - "body": { - "items": "=foreach(action.assignments, x => concat(coalesce(x.property, \"?\"), \" : \", coalesce(x.value, \"?\")))", - "widget": "ListOverview" - }, - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-using-memory", - "label": "Set properties", - "properties": { - "assignments": { - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - } - } - }, - "subtitle": "Set Properties" - } - }, - "Microsoft.SetProperty": { - "flow": { - "body": "${coalesce(action.property, \"?\")} : ${coalesce(action.value, \"?\")}", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-using-memory", - "label": "Set a property", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Set Property" - } - }, - "Microsoft.SignOutUser": { - "form": { - "label": "Sign out user", - "subtitle": "Signout User" - } - }, - "Microsoft.SwitchCondition": { - "flow": { - "judgement": { - "body": "=coalesce(action.condition, \"\")", - "widget": "ActionCard" - }, - "nowrap": true, - "widget": "SwitchConditionWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", - "hidden": [ - "default" - ], - "label": "Branch: Switch (multiple options)", - "properties": { - "cases": { - "hidden": [ - "actions" - ] - }, - "condition": { - "intellisenseScopes": [ - "user-variables" - ] - } - }, - "subtitle": "Switch Condition" - } - }, - "Microsoft.TextInput": { - "flow": { - "body": "=action.prompt", - "botAsks": { - "body": { - "defaultContent": "", - "field": "prompt", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "nowrap": true, - "userInput": { - "header": { - "colors": { - "icon": "#0078D4", - "theme": "#E5F0FF" - }, - "disableSDKTitle": true, - "icon": "User", - "menu": "none", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "widget": "PromptWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for text", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Text Input" - } - }, - "Microsoft.ThrowException": { - "flow": { - "body": { - "description": "= ErrorValue", - "property": "=coalesce(action.errorValue, \"?\")", - "widget": "PropertyDescription" - }, - "widget": "ActionCard" - }, - "form": { - "label": "Throw an exception", - "subtitle": "Throw an exception" - } - }, - "Microsoft.TraceActivity": { - "form": { - "helpLink": "https://aka.ms/composer-telemetry", - "label": "Emit a trace event", - "subtitle": "Trace Activity" - } - }, - "Microsoft.UpdateActivity": { - "flow": { - "body": { - "field": "activity", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#656565", - "theme": "#D7D7D7" - }, - "icon": "MessageBot", - "title": "Update activity", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "form": { - "label": "Update an activity", - "subtitle": "Update Activity" - } - } -} diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/schemas/update-schema.ps1 b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/schemas/update-schema.ps1 deleted file mode 100644 index 67715586e4..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/schemas/update-schema.ps1 +++ /dev/null @@ -1,27 +0,0 @@ -$SCHEMA_FILE="sdk.schema" -$UISCHEMA_FILE="sdk.uischema" -$BACKUP_SCHEMA_FILE="sdk-backup.schema" -$BACKUP_UISCHEMA_FILE="sdk-backup.uischema" - -Write-Host "Running schema merge." - -if (Test-Path $SCHEMA_FILE -PathType leaf) { Move-Item -Force -Path $SCHEMA_FILE -Destination $BACKUP_SCHEMA_FILE } -if (Test-Path $UISCHEMA_FILE -PathType leaf) { Move-Item -Force -Path $UISCHEMA_FILE -Destination $BACKUP_UISCHEMA_FILE } - -bf dialog:merge "*.schema" "!**/sdk-backup.schema" "*.uischema" "!**/sdk-backup.uischema" "!**/sdk.override.uischema" "!**/generated" "../*.csproj" "../package.json" -o $SCHEMA_FILE - -if (Test-Path $SCHEMA_FILE -PathType leaf) -{ - if (Test-Path $BACKUP_SCHEMA_FILE -PathType leaf) { Remove-Item -Force -Path $BACKUP_SCHEMA_FILE } - if (Test-Path $BACKUP_UISCHEMA_FILE -PathType leaf) { Remove-Item -Force -Path $BACKUP_UISCHEMA_FILE } - - Write-Host "Schema merged succesfully." - if (Test-Path $SCHEMA_FILE -PathType leaf) { Write-Host " Schema: $SCHEMA_FILE" } - if (Test-Path $UISCHEMA_FILE -PathType leaf) { Write-Host " UI Schema: $UISCHEMA_FILE" } -} -else -{ - Write-Host "Schema merge failed. Restoring previous versions." - if (Test-Path $BACKUP_SCHEMA_FILE -PathType leaf) { Move-Item -Force -Path $BACKUP_SCHEMA_FILE -Destination $SCHEMA_FILE } - if (Test-Path $BACKUP_UISCHEMA_FILE -PathType leaf) { Move-Item -Force -Path $BACKUP_UISCHEMA_FILE -Destination $UISCHEMA_FILE } -} diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/schemas/update-schema.sh b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/schemas/update-schema.sh deleted file mode 100644 index 50beec9c4c..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/schemas/update-schema.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -SCHEMA_FILE=sdk.schema -UISCHEMA_FILE=sdk.uischema -BACKUP_SCHEMA_FILE=sdk-backup.schema -BACKUP_UISCHEMA_FILE=sdk-backup.uischema - -while [ $# -gt 0 ]; do - if [[ $1 == *"-"* ]]; then - param="${1/-/}" - declare $param="$2" - fi - shift -done - -echo "Running schema merge." -[ -f "$SCHEMA_FILE" ] && mv "./$SCHEMA_FILE" "./$BACKUP_SCHEMA_FILE" -[ -f "$UISCHEMA_FILE" ] && mv "./$UISCHEMA_FILE" "./$BACKUP_UISCHEMA_FILE" - -bf dialog:merge "*.schema" "!**/sdk-backup.schema" "*.uischema" "!**/sdk-backup.uischema" "!**/sdk.override.uischema" "!**/generated" "../*.csproj" "../package.json" -o $SCHEMA_FILE - -if [ -f "$SCHEMA_FILE" ]; then - rm -rf "./$BACKUP_SCHEMA_FILE" - rm -rf "./$BACKUP_UISCHEMA_FILE" - echo "Schema merged succesfully." - [ -f "$SCHEMA_FILE" ] && echo " Schema: $SCHEMA_FILE" - [ -f "$UISCHEMA_FILE" ] && echo " UI Schema: $UISCHEMA_FILE" -else - echo "Schema merge failed. Restoring previous versions." - [ -f "$BACKUP_SCHEMA_FILE" ] && mv "./$BACKUP_SCHEMA_FILE" "./$SCHEMA_FILE" - [ -f "$BACKUP_UISCHEMA_FILE" ] && mv "./$BACKUP_UISCHEMA_FILE" "./$UISCHEMA_FILE" -fi diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/settings/appsettings.json b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/settings/appsettings.json deleted file mode 100644 index 5743912bbc..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/settings/appsettings.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "customFunctions": [], - "defaultLanguage": "en-us", - "defaultLocale": "en-us", - "importedLibraries": [], - "languages": [ - "en-us" - ], - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft": "Warning", - "Microsoft.Hosting.Lifetime": "Information" - } - }, - "luFeatures": { - "enableCompositeEntities": true, - "enableListEntities": true, - "enableMLEntities": true, - "enablePattern": true, - "enablePhraseLists": true, - "enablePrebuiltEntities": true, - "enableRegexEntities": true - }, - "luis": { - "authoringEndpoint": "", - "authoringRegion": "", - "defaultLanguage": "en-us", - "endpoint": "", - "environment": "composer", - "name": "SimpleHostBotComposer" - }, - "MicrosoftAppId": "", - "MicrosoftAppPassword": "", - "publishTargets": [], - "qna": { - "hostname": "", - "knowledgebaseid": "", - "qnaRegion": "westus" - }, - "runtime": { - "command": "dotnet run --project SimpleHostBotComposer.csproj", - "customRuntime": true, - "key": "adaptive-runtime-dotnet-webapp", - "path": "../" - }, - "runtimeSettings": { - "adapters": [], - "features": { - "removeRecipientMentions": false, - "showTyping": false, - "traceTranscript": false, - "useInspection": false, - "setSpeak": { - "voiceFontName": "en-US-AriaNeural", - "fallbackToTextForSpeechIfEmpty": true - } - }, - "components": [], - "skills": { - "allowedCallers": [ - "*" - ] - }, - "storage": "", - "telemetry": { - "logActivities": true, - "logPersonalInformation": false, - "options": { - "connectionString": "" - } - } - }, - "downsampling": { - "maxImbalanceRatio": -1 - }, - "skillConfiguration": {}, - "skillHostEndpoint": "http://localhost:35010/api/skills", - "skill": { - "echoSkillBotComposerDotNet": { - "endpointUrl": "http://localhost:35410/api/messages", - "msAppId": "00000000-0000-0000-0000-000000000000" - }, - "echoSkillBotDotNet": { - "endpointUrl": "http://localhost:35400/api/messages", - "msAppId": "00000000-0000-0000-0000-000000000000" - }, - "echoSkillBotDotNet21": { - "endpointUrl": "http://localhost:35405/api/messages", - "msAppId": "00000000-0000-0000-0000-000000000000" - }, - "echoSkillBotDotNetV3": { - "endpointUrl": "http://localhost:35407/api/messages", - "msAppId": "00000000-0000-0000-0000-000000000000" - }, - "echoSkillBotJs": { - "endpointUrl": "http://localhost:36400/api/messages", - "msAppId": "00000000-0000-0000-0000-000000000000" - }, - "echoSkillBotJsv3": { - "endpointUrl": "http://localhost:36407/api/messages", - "msAppId": "00000000-0000-0000-0000-000000000000" - }, - "echoSkillBotPython": { - "endpointUrl": "http://localhost:37400/api/messages", - "msAppId": "00000000-0000-0000-0000-000000000000" - } - } -} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/simplehostbotcomposer.dialog b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/simplehostbotcomposer.dialog deleted file mode 100644 index d72a4dcbd3..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/simplehostbotcomposer.dialog +++ /dev/null @@ -1,104 +0,0 @@ -{ - "$kind": "Microsoft.AdaptiveDialog", - "$designer": { - "name": "SimpleHostBotComposer", - "description": "", - "id": "A79tBe" - }, - "autoEndDialog": true, - "defaultResultProperty": "dialog.result", - "triggers": [ - { - "$kind": "Microsoft.OnConversationUpdateActivity", - "$designer": { - "id": "376720" - }, - "actions": [ - { - "$kind": "Microsoft.Foreach", - "$designer": { - "id": "518944", - "name": "Loop: for each item" - }, - "itemsProperty": "turn.Activity.membersAdded", - "actions": [ - { - "$kind": "Microsoft.IfCondition", - "$designer": { - "id": "641773", - "name": "Branch: if/else" - }, - "condition": "string(dialog.foreach.value.id) != string(turn.Activity.Recipient.id)", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "859266", - "name": "Send a response" - }, - "activity": "${SendActivity_Greeting()}" - }, - { - "$kind": "Microsoft.BeginDialog", - "$designer": { - "id": "fTvoh5" - }, - "activityProcessed": true, - "dialog": "CallEchoSkill" - } - ] - } - ] - } - ] - }, - { - "$kind": "Microsoft.OnUnknownIntent", - "$designer": { - "id": "mb2n1u" - }, - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "kMjqz1" - }, - "activity": "${SendActivity_DidNotUnderstand()}" - } - ] - }, - { - "$kind": "Microsoft.OnEndOfConversationActivity", - "$designer": { - "id": "xPU1pB" - }, - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "M2LqJr" - }, - "activity": "${SendActivity_M2LqJr()}" - }, - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "bgTcyn" - }, - "activity": "${SendActivity_bgTcyn()}" - }, - { - "$kind": "Microsoft.BeginDialog", - "$designer": { - "id": "s9BrZr" - }, - "activityProcessed": true, - "dialog": "CallEchoSkill" - } - ] - } - ], - "generator": "SimpleHostBotComposer.lg", - "id": "SimpleHostBotComposer", - "recognizer": "SimpleHostBotComposer.lu.qna" -} diff --git a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/wwwroot/default.htm b/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/wwwroot/default.htm deleted file mode 100644 index 8ddd3ef885..0000000000 --- a/tests/functional/Bots/DotNet/Consumers/Composer/SimpleHostBotComposer/wwwroot/default.htm +++ /dev/null @@ -1,364 +0,0 @@ - - - - - - - SimpleHostBotComposer - - - - - -
    -
    -
    -
    SimpleHostBotComposer
    -
    -
    -
    -
    -
    Your bot is ready!
    -
    You can test your bot in the Bot Framework Emulator
    - by connecting to http://localhost:3978/api/messages.
    -
    -
    Visit Azure - Bot Service to register your bot and add it to
    - various channels. The bot's endpoint URL typically looks - like this:
    -
    https://your_bots_hostname/api/messages
    -
    -
    -
    -
    - -
    - - - \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/FunctionalTestsBots.sln b/tests/functional/Bots/DotNet/FunctionalTestsBots.sln deleted file mode 100644 index ea5591067b..0000000000 --- a/tests/functional/Bots/DotNet/FunctionalTestsBots.sln +++ /dev/null @@ -1,106 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.30621.155 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Consumers", "Consumers", "{12088D79-235C-4387-9DA8-69AB93D52A8E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Skills", "Skills", "{39117C87-FD02-40CD-A9A9-9A4C0A630521}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CodeFirst", "CodeFirst", "{C7A60083-78C8-4CEF-A358-4E53CBF0D12A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleHostBot", "Consumers\CodeFirst\SimpleHostBot\SimpleHostBot.csproj", "{AAE978F8-D22B-41E8-B445-872FF4194713}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleHostBot-2.1", "Consumers\CodeFirst\SimpleHostBot-2.1\SimpleHostBot-2.1.csproj", "{0443C38C-A0DF-4A1A-8931-4A4BFFEEB386}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CodeFirst", "CodeFirst", "{6EF38D8C-7953-4D54-BA31-FFF055B7B217}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EchoSkillBot-2.1", "Skills\CodeFirst\EchoSkillBot-2.1\EchoSkillBot-2.1.csproj", "{56864219-785B-4600-9849-43CAF90F37E9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EchoSkillBot", "Skills\CodeFirst\EchoSkillBot\EchoSkillBot.csproj", "{692F26DD-F7BA-49F3-AC6D-73047C1E5D61}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Composer", "Composer", "{33FA275E-9E5D-4582-BFF7-24B2C5DB2962}" - ProjectSection(SolutionItems) = preProject - Consumers\Composer\Directory.Build.props = Consumers\Composer\Directory.Build.props - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Composer", "Composer", "{33E2281F-C6A7-40EC-961A-FF9FF254FDDC}" - ProjectSection(SolutionItems) = preProject - Skills\Composer\Directory.Build.props = Skills\Composer\Directory.Build.props - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WaterfallHostBot", "Consumers\CodeFirst\WaterfallHostBot\WaterfallHostBot.csproj", "{15A946BE-39F9-4945-9895-0019ED3392FC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WaterfallSkillBot", "Skills\CodeFirst\WaterfallSkillBot\WaterfallSkillBot.csproj", "{E3BECBEF-E41F-48D1-9EEB-A4D7E1CD34E3}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EchoSkillBot-v3", "Skills\CodeFirst\EchoSkillBot-v3\EchoSkillBot-v3.csproj", "{41BC9547-FD9E-40E1-B1D9-C3F25BC9A2F3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleHostBotComposer", "Consumers\Composer\SimpleHostBotComposer\SimpleHostBotComposer.csproj", "{FDC53B3A-0E15-4FDF-A587-05C8F90BC2B6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EchoSkillBotComposer", "Skills\Composer\EchoSkillBotComposer\EchoSkillBotComposer.csproj", "{9BA47CF9-7D90-4B5C-A9FA-01797A435D53}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {AAE978F8-D22B-41E8-B445-872FF4194713}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AAE978F8-D22B-41E8-B445-872FF4194713}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AAE978F8-D22B-41E8-B445-872FF4194713}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AAE978F8-D22B-41E8-B445-872FF4194713}.Release|Any CPU.Build.0 = Release|Any CPU - {0443C38C-A0DF-4A1A-8931-4A4BFFEEB386}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0443C38C-A0DF-4A1A-8931-4A4BFFEEB386}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0443C38C-A0DF-4A1A-8931-4A4BFFEEB386}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0443C38C-A0DF-4A1A-8931-4A4BFFEEB386}.Release|Any CPU.Build.0 = Release|Any CPU - {56864219-785B-4600-9849-43CAF90F37E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {56864219-785B-4600-9849-43CAF90F37E9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {56864219-785B-4600-9849-43CAF90F37E9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {56864219-785B-4600-9849-43CAF90F37E9}.Release|Any CPU.Build.0 = Release|Any CPU - {692F26DD-F7BA-49F3-AC6D-73047C1E5D61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {692F26DD-F7BA-49F3-AC6D-73047C1E5D61}.Debug|Any CPU.Build.0 = Debug|Any CPU - {692F26DD-F7BA-49F3-AC6D-73047C1E5D61}.Release|Any CPU.ActiveCfg = Release|Any CPU - {692F26DD-F7BA-49F3-AC6D-73047C1E5D61}.Release|Any CPU.Build.0 = Release|Any CPU - {15A946BE-39F9-4945-9895-0019ED3392FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {15A946BE-39F9-4945-9895-0019ED3392FC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {15A946BE-39F9-4945-9895-0019ED3392FC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {15A946BE-39F9-4945-9895-0019ED3392FC}.Release|Any CPU.Build.0 = Release|Any CPU - {E3BECBEF-E41F-48D1-9EEB-A4D7E1CD34E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E3BECBEF-E41F-48D1-9EEB-A4D7E1CD34E3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E3BECBEF-E41F-48D1-9EEB-A4D7E1CD34E3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E3BECBEF-E41F-48D1-9EEB-A4D7E1CD34E3}.Release|Any CPU.Build.0 = Release|Any CPU - {41BC9547-FD9E-40E1-B1D9-C3F25BC9A2F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {41BC9547-FD9E-40E1-B1D9-C3F25BC9A2F3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {41BC9547-FD9E-40E1-B1D9-C3F25BC9A2F3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {41BC9547-FD9E-40E1-B1D9-C3F25BC9A2F3}.Release|Any CPU.Build.0 = Release|Any CPU - {FDC53B3A-0E15-4FDF-A587-05C8F90BC2B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FDC53B3A-0E15-4FDF-A587-05C8F90BC2B6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FDC53B3A-0E15-4FDF-A587-05C8F90BC2B6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FDC53B3A-0E15-4FDF-A587-05C8F90BC2B6}.Release|Any CPU.Build.0 = Release|Any CPU - {9BA47CF9-7D90-4B5C-A9FA-01797A435D53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9BA47CF9-7D90-4B5C-A9FA-01797A435D53}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9BA47CF9-7D90-4B5C-A9FA-01797A435D53}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9BA47CF9-7D90-4B5C-A9FA-01797A435D53}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {C7A60083-78C8-4CEF-A358-4E53CBF0D12A} = {12088D79-235C-4387-9DA8-69AB93D52A8E} - {AAE978F8-D22B-41E8-B445-872FF4194713} = {C7A60083-78C8-4CEF-A358-4E53CBF0D12A} - {0443C38C-A0DF-4A1A-8931-4A4BFFEEB386} = {C7A60083-78C8-4CEF-A358-4E53CBF0D12A} - {6EF38D8C-7953-4D54-BA31-FFF055B7B217} = {39117C87-FD02-40CD-A9A9-9A4C0A630521} - {56864219-785B-4600-9849-43CAF90F37E9} = {6EF38D8C-7953-4D54-BA31-FFF055B7B217} - {692F26DD-F7BA-49F3-AC6D-73047C1E5D61} = {6EF38D8C-7953-4D54-BA31-FFF055B7B217} - {33FA275E-9E5D-4582-BFF7-24B2C5DB2962} = {12088D79-235C-4387-9DA8-69AB93D52A8E} - {33E2281F-C6A7-40EC-961A-FF9FF254FDDC} = {39117C87-FD02-40CD-A9A9-9A4C0A630521} - {15A946BE-39F9-4945-9895-0019ED3392FC} = {C7A60083-78C8-4CEF-A358-4E53CBF0D12A} - {E3BECBEF-E41F-48D1-9EEB-A4D7E1CD34E3} = {6EF38D8C-7953-4D54-BA31-FFF055B7B217} - {41BC9547-FD9E-40E1-B1D9-C3F25BC9A2F3} = {6EF38D8C-7953-4D54-BA31-FFF055B7B217} - {FDC53B3A-0E15-4FDF-A587-05C8F90BC2B6} = {33FA275E-9E5D-4582-BFF7-24B2C5DB2962} - {9BA47CF9-7D90-4B5C-A9FA-01797A435D53} = {33E2281F-C6A7-40EC-961A-FF9FF254FDDC} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {2B77A921-EEA6-4006-ABD2-159C92F9F874} - EndGlobalSection -EndGlobal diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Authentication/AllowedCallersClaimsValidator.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Authentication/AllowedCallersClaimsValidator.cs deleted file mode 100644 index 5b0b053639..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Authentication/AllowedCallersClaimsValidator.cs +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using System.Security.Claims; -using System.Threading.Tasks; -using Microsoft.Bot.Connector.Authentication; -using Microsoft.Extensions.Configuration; - -namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot21.Authentication -{ - /// - /// Sample claims validator that loads an allowed list from configuration if present - /// and checks that requests are coming from allowed parent bots. - /// - public class AllowedCallersClaimsValidator : ClaimsValidator - { - private const string ConfigKey = "AllowedCallers"; - private readonly List _allowedCallers; - - /// - /// Initializes a new instance of the class. - /// Loads the appIds for the configured callers. Only allows access to callers it has configured. - /// - /// The list of configured callers. - public AllowedCallersClaimsValidator(IConfiguration config) - { - if (config == null) - { - throw new ArgumentNullException(nameof(config)); - } - - // AllowedCallers is the setting in the appsettings.json file - // that consists of the list of parent bot IDs that are allowed to access the skill. - // To add a new parent bot, simply edit the AllowedCallers and add - // the parent bot's Microsoft app ID to the list. - // In this sample, we allow all callers if AllowedCallers contains an "*". - var section = config.GetSection(ConfigKey); - var appsList = section.Get(); - if (appsList == null) - { - throw new ArgumentNullException($"\"{ConfigKey}\" not found in configuration."); - } - - _allowedCallers = new List(appsList); - } - - /// - /// Checks that the appId claim in the skill request is in the list of callers configured for this bot. - /// - /// The list of claims to validate. - /// A task that represents the work queued to execute. - public override Task ValidateClaimsAsync(IList claims) - { - // If _allowedCallers contains an "*", we allow all callers. - if (SkillValidation.IsSkillClaim(claims) && !_allowedCallers.Contains("*")) - { - // Check that the appId claim in the skill request is in the list of callers configured for this bot. - var appId = JwtTokenValidation.GetAppIdFromClaims(claims); - if (!_allowedCallers.Contains(appId)) - { - throw new UnauthorizedAccessException($"Received a request from a bot with an app ID of \"{appId}\". To enable requests from this caller, add the app ID to your configuration file."); - } - } - - return Task.CompletedTask; - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Bots/EchoBot.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Bots/EchoBot.cs deleted file mode 100644 index 14cccdbc7a..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Bots/EchoBot.cs +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Schema; - -namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot21.Bots -{ - public class EchoBot : ActivityHandler - { - /// - /// Processes a message activity. - /// - /// Context for the current turn of conversation. - /// CancellationToken propagates notifications that operations should be cancelled. - /// A representing the result of the asynchronous operation. - protected override async Task OnMessageActivityAsync(ITurnContext turnContext, CancellationToken cancellationToken) - { - if (turnContext.Activity.Text.Contains("end") || turnContext.Activity.Text.Contains("stop")) - { - // Send End of conversation at the end. - await turnContext.SendActivityAsync(MessageFactory.Text($"Ending conversation from the skill..."), cancellationToken); - var endOfConversation = Activity.CreateEndOfConversationActivity(); - endOfConversation.Code = EndOfConversationCodes.CompletedSuccessfully; - await turnContext.SendActivityAsync(endOfConversation, cancellationToken); - } - else - { - await turnContext.SendActivityAsync(MessageFactory.Text($"Echo: {turnContext.Activity.Text}"), cancellationToken); - await turnContext.SendActivityAsync(MessageFactory.Text("Say \"end\" or \"stop\" and I'll end the conversation and back to the parent."), cancellationToken); - } - } - - /// - /// Processes an end of conversation activity. - /// - /// Context for the current turn of conversation. - /// CancellationToken propagates notifications that operations should be cancelled. - /// A representing the result of the asynchronous operation. - protected override Task OnEndOfConversationActivityAsync(ITurnContext turnContext, CancellationToken cancellationToken) - { - // This will be called if the host bot is ending the conversation. Sending additional messages should be - // avoided as the conversation may have been deleted. - // Perform cleanup of resources if needed. - return Task.CompletedTask; - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Controllers/BotController.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Controllers/BotController.cs deleted file mode 100644 index c2fe9a198a..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Controllers/BotController.cs +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Integration.AspNet.Core; - -namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot21.Controllers -{ - /// - /// This ASP Controller is created to handle a request. Dependency Injection will provide the Adapter and IBot implementation at runtime. - /// Multiple different IBot implementations running at different endpoints can be achieved by specifying a more specific type for the bot constructor argument. - /// - [Route("api/messages")] - [ApiController] - public class BotController : ControllerBase - { - private readonly IBotFrameworkHttpAdapter _adapter; - private readonly IBot _bot; - - /// - /// Initializes a new instance of the class. - /// - /// Adapter for the BotController. - /// Bot for the BotController. - public BotController(IBotFrameworkHttpAdapter adapter, IBot bot) - { - _adapter = adapter; - _bot = bot; - } - - /// - /// Processes an HttpPost request. - /// - /// A representing the result of the asynchronous operation. - [HttpPost] - public async Task PostAsync() - { - await _adapter.ProcessAsync(Request, Response, _bot); - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/EchoSkillBot-2.1.csproj b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/EchoSkillBot-2.1.csproj deleted file mode 100644 index 2df857a613..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/EchoSkillBot-2.1.csproj +++ /dev/null @@ -1,25 +0,0 @@ - - - - netcoreapp2.1 - latest - Microsoft.BotFrameworkFunctionalTests.EchoSkillBot21 - Microsoft.BotFrameworkFunctionalTests.EchoSkillBot21 - - - - DEBUG;TRACE - - - - - - - - - - Always - - - - \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Program.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Program.cs deleted file mode 100644 index bdfda7669a..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Program.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using Microsoft.AspNetCore; -using Microsoft.AspNetCore.Hosting; - -namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot21 -{ - public class Program - { - /// - /// The entry point of the application. - /// - /// The command line args. - public static void Main(string[] args) - { - CreateWebHostBuilder(args).Build().Run(); - } - - /// - /// Creates a new instance of the class with pre-configured defaults. - /// - /// The command line args. - /// The initialized . - public static IWebHostBuilder CreateWebHostBuilder(string[] args) => - WebHost.CreateDefaultBuilder(args) - .UseStartup(); - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Properties/launchSettings.json b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Properties/launchSettings.json deleted file mode 100644 index 791f7e6a3b..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Properties/launchSettings.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "$schema": "http://json.schemastore.org/launchsettings.json", - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:35405/", - "sslPort": 0 - } - }, - "profiles": { - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": false, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "EchoSkillBotDotNet21": { - "commandName": "Project", - "launchBrowser": true, - "applicationUrl": "http://localhost:35405/", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/SkillAdapterWithErrorHandler.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/SkillAdapterWithErrorHandler.cs deleted file mode 100644 index 76ef40f872..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/SkillAdapterWithErrorHandler.cs +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.Bot.Builder.TraceExtensions; -using Microsoft.Bot.Connector.Authentication; -using Microsoft.Bot.Schema; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Logging; - -namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot21 -{ - public class SkillAdapterWithErrorHandler : BotFrameworkHttpAdapter - { - /// - /// Initializes a new instance of the class to handle errors. - /// - /// The configuration properties. - /// An implementation of the bots credentials. - /// The configuration setting for the authentication. - /// An instance of a logger. - /// A state management object for the conversation. - public SkillAdapterWithErrorHandler(IConfiguration configuration, ICredentialProvider credentialProvider, AuthenticationConfiguration authConfig, ILogger logger) - : base(configuration, credentialProvider, authConfig, logger: logger) - { - OnTurnError = async (turnContext, exception) => - { - try - { - // Log any leaked exception from the application. - logger.LogError(exception, $"[OnTurnError] unhandled error : {exception.Message}"); - - // Send a message to the user - var errorMessageText = "The skill encountered an error or bug."; - var errorMessage = MessageFactory.Text(errorMessageText + Environment.NewLine + exception, errorMessageText, InputHints.IgnoringInput); - errorMessage.Value = exception; - await turnContext.SendActivityAsync(errorMessage); - - errorMessageText = "To continue to run this bot, please fix the bot source code."; - errorMessage = MessageFactory.Text(errorMessageText, errorMessageText, InputHints.ExpectingInput); - await turnContext.SendActivityAsync(errorMessage); - - // Send a trace activity, which will be displayed in the Bot Framework Emulator - // Note: we return the entire exception in the value property to help the developer, this should not be done in prod. - await turnContext.TraceActivityAsync("OnTurnError Trace", exception.ToString(), "https://www.botframework.com/schemas/error", "TurnError"); - - // Send and EndOfConversation activity to the skill caller with the error to end the conversation - // and let the caller decide what to do. - var endOfConversation = Activity.CreateEndOfConversationActivity(); - endOfConversation.Code = "SkillError"; - endOfConversation.Text = exception.Message; - await turnContext.SendActivityAsync(endOfConversation); - } - catch (Exception ex) - { - logger.LogError(ex, $"Exception caught in SkillAdapterWithErrorHandler : {ex}"); - } - }; - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Startup.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Startup.cs deleted file mode 100644 index 1c0bacc9bd..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/Startup.cs +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.BotFramework; -using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.Bot.Connector.Authentication; -using Microsoft.BotFrameworkFunctionalTests.EchoSkillBot21.Bots; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; - -namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot21 -{ - public class Startup - { - public Startup(IConfiguration config) - { - Configuration = config; - } - - public IConfiguration Configuration { get; } - - /// - /// This method gets called by the runtime. Use this method to add services to the container. - /// - /// Method to add services to the container. - public void ConfigureServices(IServiceCollection services) - { - services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); - - // Configure credentials - services.AddSingleton(); - - // Register AuthConfiguration to enable custom claim validation. - services.AddSingleton(sp => new AuthenticationConfiguration { ClaimsValidator = new Authentication.AllowedCallersClaimsValidator(sp.GetService()) }); - - // Create the Bot Framework Adapter with error handling enabled. - services.AddSingleton(); - - // Create the bot as a transient. In this case the ASP Controller is expecting an IBot. - services.AddTransient(); - - if (!string.IsNullOrEmpty(Configuration["ChannelService"])) - { - // Register a ConfigurationChannelProvider -- this is only for Azure Gov. - services.AddSingleton(); - } - } - - /// - /// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - /// - /// The application request pipeline to be configured. - /// The web hosting environment. - public void Configure(IApplicationBuilder app, IHostingEnvironment env) - { - if (env.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); - } - else - { - app.UseHsts(); - } - - app.UseDefaultFiles(); - app.UseStaticFiles(); - - // app.UseHttpsRedirection(); - app.UseMvc(); - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/appsettings.json b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/appsettings.json deleted file mode 100644 index c61cdb4d79..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/appsettings.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "MicrosoftAppId": "", - "MicrosoftAppPassword": "", - "ChannelService": "", - // This is a comma separate list with the App IDs that will have access to the skill. - // This setting is used in AllowedCallersClaimsValidator. - // Examples: - // [ "*" ] allows all callers. - // [ "AppId1", "AppId2" ] only allows access to parent bots with "AppId1" and "AppId2". - "AllowedCallers": [ "*" ] -} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/wwwroot/default.htm b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/wwwroot/default.htm deleted file mode 100644 index 56d1b43377..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/wwwroot/default.htm +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - - EchoSkillBot-2.1DotNet - - - - - -
    -
    -
    -
    EchoSkillBot-2.1DotNet Bot
    -
    -
    -
    -
    -
    Your bot is ready!
    -
    You can test your bot in the Bot Framework Emulator
    - by connecting to http://localhost:3978/api/messages.
    - -
    Visit Azure - Bot Service to register your bot and add it to
    - various channels. The bot's endpoint URL typically looks - like this:
    -
    https://your_bots_hostname/api/messages
    -
    -
    -
    -
    - -
    - - - \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/wwwroot/manifests/echoskillbot-manifest-1.0.json b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/wwwroot/manifests/echoskillbot-manifest-1.0.json deleted file mode 100644 index 68b6a165ff..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-2.1/wwwroot/manifests/echoskillbot-manifest-1.0.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "https://schemas.botframework.com/schemas/skills/v2.1/skill-manifest.json", - "$id": "EchoSkillBotDotNet21", - "name": "EchoSkillBotDotNet21", - "version": "1.0", - "description": "This is a skill for echoing what the user sent to the bot (using .netcore 2.1).", - "publisherName": "Microsoft", - "privacyUrl": "https://microsoft.com/privacy", - "copyright": "Copyright (c) Microsoft Corporation. All rights reserved.", - "license": "https://github.com/microsoft/BotFramework-FunctionalTests/blob/main/LICENSE", - "tags": [ - "echo" - ], - "endpoints": [ - { - "name": "default", - "protocol": "BotFrameworkV3", - "description": "Localhost endpoint for the skill (on port 35405)", - "endpointUrl": "http://localhost:35405/api/messages", - "msAppId": "00000000-0000-0000-0000-000000000000" - } - ] -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/ApiControllerActionInvokerWithErrorHandler.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/ApiControllerActionInvokerWithErrorHandler.cs deleted file mode 100644 index 4ad82c1409..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/ApiControllerActionInvokerWithErrorHandler.cs +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Connector; -using Newtonsoft.Json; -using System.IO; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; -using System.Web.Http.Controllers; - -namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBotv3 -{ - /// - /// Web Api Controller to intersect HTTP operations when the Action Invoker is triggered to capture exceptions and send it to the bot as an Activity. - /// - internal class ApiControllerActionInvokerWithErrorHandler : ApiControllerActionInvoker - { - public async override Task InvokeActionAsync(HttpActionContext actionContext, CancellationToken cancellationToken) - { - var result = base.InvokeActionAsync(actionContext, cancellationToken); - - if (result.Exception != null && result.Exception.GetBaseException() != null) - { - var stream = new StreamReader(actionContext.Request.Content.ReadAsStreamAsync().Result); - stream.BaseStream.Position = 0; - var rawRequest = stream.ReadToEnd(); - var activity = JsonConvert.DeserializeObject(rawRequest); - - activity.Type = "exception"; - activity.Text = result.Exception.ToString(); - activity.Value = result.Exception; - - await Conversation.SendAsync(activity, () => new Dialogs.RootDialog()); - } - - return await result; - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/App_Start/WebApiConfig.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/App_Start/WebApiConfig.cs deleted file mode 100644 index 97fc72a901..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/App_Start/WebApiConfig.cs +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using Newtonsoft.Json; -using Newtonsoft.Json.Serialization; -using System.Web.Http; -using System.Web.Http.Controllers; - -namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBotv3 -{ - public static class WebApiConfig - { - public static void Register(HttpConfiguration config) - { - // Json settings - config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; - config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); - config.Formatters.JsonFormatter.SerializerSettings.Formatting = Formatting.Indented; - JsonConvert.DefaultSettings = () => new JsonSerializerSettings() - { - ContractResolver = new CamelCasePropertyNamesContractResolver(), - Formatting = Newtonsoft.Json.Formatting.Indented, - NullValueHandling = NullValueHandling.Ignore, - }; - - // Web API configuration and services - - // Web API routes - config.MapHttpAttributeRoutes(); - - config.Routes.MapHttpRoute( - name: "DefaultApi", - routeTemplate: "api/{controller}/{id}", - defaults: new { id = RouteParameter.Optional } - ); - config.Services.Replace(typeof(IHttpActionInvoker), new ApiControllerActionInvokerWithErrorHandler()); - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Authentication/CustomAllowedCallersClaimsValidator.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Authentication/CustomAllowedCallersClaimsValidator.cs deleted file mode 100644 index 7d3de967b2..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Authentication/CustomAllowedCallersClaimsValidator.cs +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using Microsoft.Bot.Connector.SkillAuthentication; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Security.Claims; -using System.Threading.Tasks; - -namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBotv3.Authentication -{ - /// - /// Sample claims validator that loads an allowed list from configuration if present - /// and checks that requests are coming from allowed parent bots. - /// - public class CustomAllowedCallersClaimsValidator : ClaimsValidator - { - private readonly IList _allowedCallers; - - public CustomAllowedCallersClaimsValidator(IList allowedCallers) - { - // AllowedCallers is the setting in web.config file - // that consists of the list of parent bot IDs that are allowed to access the skill. - // To add a new parent bot simply go to the AllowedCallers and add - // the parent bot's Microsoft app ID to the list. - - _allowedCallers = allowedCallers ?? throw new ArgumentNullException(nameof(allowedCallers)); - if (!_allowedCallers.Any()) - { - throw new ArgumentNullException(nameof(allowedCallers), "AllowedCallers must contain at least one element of '*' or valid MicrosoftAppId(s)."); - } - } - - /// - /// This method is called from JwtTokenValidation.ValidateClaimsAsync - /// - /// - public override Task ValidateClaimsAsync(IList claims) - { - if (claims == null) - { - throw new ArgumentNullException(nameof(claims)); - } - - if (!claims.Any()) - { - throw new UnauthorizedAccessException("ValidateClaimsAsync.claims parameter must contain at least one element."); - } - - if (SkillValidation.IsSkillClaim(claims)) - { - // if _allowedCallers has one item of '*', allow all parent bot calls and do not validate the appid from claims - if (_allowedCallers.Count == 1 && _allowedCallers[0] == "*") - { - return Task.CompletedTask; - } - - // Check that the appId claim in the skill request is in the list of skills configured for this bot. - var appId = JwtTokenValidation.GetAppIdFromClaims(claims).ToUpperInvariant(); - if (_allowedCallers.Contains(appId)) - { - return Task.CompletedTask; - } - - throw new UnauthorizedAccessException($"Received a request from a bot with an app ID of \"{appId}\". To enable requests from this caller, add the app ID to your configuration file."); - } - - throw new UnauthorizedAccessException($"ValidateClaimsAsync called without a Skill claim in claims."); - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Authentication/CustomSkillAuthenticationConfiguration.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Authentication/CustomSkillAuthenticationConfiguration.cs deleted file mode 100644 index 2d01093e67..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Authentication/CustomSkillAuthenticationConfiguration.cs +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using Microsoft.Bot.Connector.SkillAuthentication; -using System.Configuration; -using System.Linq; - -namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBotv3.Authentication -{ - public class CustomSkillAuthenticationConfiguration : AuthenticationConfiguration - { - private const string AllowedCallersConfigKey = "EchoBotAllowedCallers"; - public CustomSkillAuthenticationConfiguration() - { - // Could pull this list from a DB or anywhere. - var allowedCallers = ConfigurationManager.AppSettings[AllowedCallersConfigKey].Split(',').Select(s => s.Trim().ToUpperInvariant()).ToList(); - ClaimsValidator = new CustomAllowedCallersClaimsValidator(allowedCallers); - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Controllers/MessagesController.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Controllers/MessagesController.cs deleted file mode 100644 index 55cc612cd5..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Controllers/MessagesController.cs +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Diagnostics; -using System.Net; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; -using System.Web.Http; -using Autofac; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Builder.Dialogs.Internals; -using Microsoft.Bot.Connector; -using Microsoft.Bot.Connector.SkillAuthentication; -using Microsoft.BotFrameworkFunctionalTests.EchoSkillBotv3.Authentication; - -namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBotv3 -{ - // Specify which type provides the authentication configuration to allow for validation for skills. - [SkillBotAuthentication(AuthenticationConfigurationProviderType = typeof(CustomSkillAuthenticationConfiguration))] - public class MessagesController : ApiController - { - /// - /// POST: api/Messages - /// Receive a message from a user and reply to it - /// - public async Task Post([FromBody]Activity activity) - { - if (activity.GetActivityType() == ActivityTypes.Message) - { - await Conversation.SendAsync(activity, () => new Dialogs.RootDialog()); - } - else - { - await HandleSystemMessage(activity); - } - var response = Request.CreateResponse(HttpStatusCode.OK); - return response; - } - - private async Task HandleSystemMessage(Activity message) - { - string messageType = message.GetActivityType(); - - if (messageType == ActivityTypes.EndOfConversation) - { - Trace.TraceInformation($"EndOfConversation: {message}"); - - // This Recipient null check is required for PVA manifest validation. - // PVA will send an EOC activity with null Recipient. - if (message.Recipient != null) - { - // Clear the dialog stack if the root bot has ended the conversation. - using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, message)) - { - var botData = scope.Resolve(); - await botData.LoadAsync(default(CancellationToken)); - - var stack = scope.Resolve(); - stack.Reset(); - - await botData.FlushAsync(default(CancellationToken)); - } - } - } - else if (messageType == ActivityTypes.DeleteUserData) - { - // Implement user deletion here - // If we handle user deletion, return a real message - } - else if (messageType == ActivityTypes.ConversationUpdate) - { - // Handle conversation state changes, like members being added and removed - // Use Activity.MembersAdded and Activity.MembersRemoved and Activity.Action for info - // Not available in all channels - } - else if (messageType == ActivityTypes.ContactRelationUpdate) - { - // Handle add/remove from contact lists - // Activity.From + Activity.Action represent what happened - } - else if (messageType == ActivityTypes.Typing) - { - // Handle knowing that the user is typing - } - else if (messageType == ActivityTypes.Ping) - { - } - - return null; - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Dialogs/RootDialog.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Dialogs/RootDialog.cs deleted file mode 100644 index 1ae1313a31..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Dialogs/RootDialog.cs +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Threading.Tasks; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Connector; - -namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBotv3.Dialogs -{ - [Serializable] - public class RootDialog : IDialog - { - public Task StartAsync(IDialogContext context) - { - context.Wait(MessageReceivedAsync); - - return Task.CompletedTask; - } - - private async Task MessageReceivedAsync(IDialogContext context, IAwaitable result) - { - var activity = await result as Activity; - - var options = new MessageOptions - { - InputHint = InputHints.AcceptingInput - }; - - try - { - if (activity.Type == "exception") - { - await PostExceptionAsync(context, activity, activity.Value as Exception); - } - else if (activity.Text.ToLower().Contains("end") || activity.Text.ToLower().Contains("stop")) - { - // Send an `endOfconversation` activity if the user cancels the skill. - await context.SayAsync($"Ending conversation from the skill...", options: options); - var endOfConversation = activity.CreateReply(); - endOfConversation.Type = ActivityTypes.EndOfConversation; - endOfConversation.Code = EndOfConversationCodes.CompletedSuccessfully; - endOfConversation.InputHint = InputHints.AcceptingInput; - await context.PostAsync(endOfConversation); - } - else - { - await context.SayAsync($"Echo: {activity.Text}", options: options); - await context.SayAsync($"Say \"end\" or \"stop\" and I'll end the conversation and back to the parent.", options: options); - } - } - catch (Exception exception) - { - await PostExceptionAsync(context, activity, exception); - } - - context.Wait(MessageReceivedAsync); - } - - //Send exception message and trace - private static async Task PostExceptionAsync(IDialogContext context, Activity reply, Exception exception) - { - // Send a message to the user - var errorMessageText = "The skill encountered an error or bug."; - var activity = reply.CreateReply(); - activity.Text = errorMessageText + Environment.NewLine + exception; - activity.Speak = errorMessageText; - activity.InputHint = InputHints.IgnoringInput; - activity.Value = exception; - await context.PostAsync(activity); - - errorMessageText = "To continue to run this bot, please fix the bot source code."; - activity = reply.CreateReply(); - activity.Text = errorMessageText; - activity.Speak = errorMessageText; - activity.InputHint = InputHints.ExpectingInput; - await context.PostAsync(activity); - - // Send and EndOfConversation activity to the skill caller with the error to end the conversation - // and let the caller decide what to do. - activity = reply.CreateReply(); - activity.Type = ActivityTypes.EndOfConversation; - activity.Code = "SkillError"; - activity.Text = exception.Message; - await context.PostAsync(activity); - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/EchoSkillBot-v3.csproj b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/EchoSkillBot-v3.csproj deleted file mode 100644 index 4f5be44f73..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/EchoSkillBot-v3.csproj +++ /dev/null @@ -1,232 +0,0 @@ - - - - - Debug - AnyCPU - - - 2.0 - {41BC9547-FD9E-40E1-B1D9-C3F25BC9A2F3} - {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} - Library - Properties - Microsoft.BotFrameworkFunctionalTests.EchoSkillBot - Microsoft.BotFrameworkFunctionalTests.EchoSkillBot - - v4.7.2 - 512 - true - 3979 - enabled - disabled - false - - - - - - - - true - full - false - bin\ - DEBUG;TRACE - prompt - 4 - MSB3276 - - - pdbonly - true - bin\ - TRACE - prompt - 4 - - - - $(SolutionDir)packages\Autofac.4.6.0\lib\net45\Autofac.dll - - - $(SolutionDir)packages\Chronic.Signed.0.3.2\lib\net40\Chronic.dll - - - $(SolutionDir)packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll - - - $(SolutionDir)packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll - - - $(SolutionDir)packages\Microsoft.Azure.DocumentDB.1.22.0\lib\net45\Microsoft.Azure.Documents.Client.dll - - - $(SolutionDir)packages\Microsoft.Azure.KeyVault.Core.1.0.0\lib\net40\Microsoft.Azure.KeyVault.Core.dll - - - $(SolutionDir)packages\Microsoft.Bot.Builder.3.30.0\lib\net46\Microsoft.Bot.Builder.dll - True - - - $(SolutionDir)packages\Microsoft.Bot.Builder.3.30.0\lib\net46\Microsoft.Bot.Builder.Autofac.dll - True - - - $(SolutionDir)packages\Microsoft.Bot.Builder.Azure.3.16.3.40383\lib\net46\Microsoft.Bot.Builder.Azure.dll - - - $(SolutionDir)packages\Microsoft.Bot.Builder.History.3.30.0\lib\net46\Microsoft.Bot.Builder.History.dll - True - - - $(SolutionDir)packages\Microsoft.Bot.Connector.3.30.0\lib\net46\Microsoft.Bot.Connector.dll - True - - - - ..\..\..\packages\Microsoft.Data.Edm.5.8.4\lib\net40\Microsoft.Data.Edm.dll - - - ..\..\..\packages\Microsoft.Data.OData.5.8.4\lib\net40\Microsoft.Data.OData.dll - - - ..\..\..\packages\Microsoft.Data.Services.Client.5.8.4\lib\net40\Microsoft.Data.Services.Client.dll - - - $(SolutionDir)packages\Microsoft.IdentityModel.Clients.ActiveDirectory.4.4.0\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.dll - - - $(SolutionDir)packages\Microsoft.IdentityModel.Logging.1.1.4\lib\net451\Microsoft.IdentityModel.Logging.dll - - - $(SolutionDir)packages\Microsoft.IdentityModel.Protocol.Extensions.1.0.4.403061554\lib\net45\Microsoft.IdentityModel.Protocol.Extensions.dll - - - $(SolutionDir)packages\Microsoft.IdentityModel.Protocols.2.1.4\lib\net451\Microsoft.IdentityModel.Protocols.dll - - - $(SolutionDir)packages\Microsoft.IdentityModel.Protocols.OpenIdConnect.2.1.4\lib\net451\Microsoft.IdentityModel.Protocols.OpenIdConnect.dll - - - $(SolutionDir)packages\Microsoft.IdentityModel.Tokens.5.1.4\lib\net451\Microsoft.IdentityModel.Tokens.dll - - - $(SolutionDir)packages\Microsoft.Rest.ClientRuntime.2.3.8\lib\net452\Microsoft.Rest.ClientRuntime.dll - - - $(SolutionDir)packages\Microsoft.WindowsAzure.ConfigurationManager.3.2.3\lib\net40\Microsoft.WindowsAzure.Configuration.dll - - - $(SolutionDir)packages\WindowsAzure.Storage.7.2.1\lib\net40\Microsoft.WindowsAzure.Storage.dll - - - $(SolutionDir)packages\Newtonsoft.Json.10.0.2\lib\net45\Newtonsoft.Json.dll - - - - - - - - - - $(SolutionDir)packages\System.IdentityModel.Tokens.Jwt.5.1.4\lib\net451\System.IdentityModel.Tokens.Jwt.dll - - - - $(SolutionDir)packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll - - - ..\..\..\packages\System.Spatial.5.8.4\lib\net40\System.Spatial.dll - - - - - - - - $(SolutionDir)packages\Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll - - - $(SolutionDir)packages\Microsoft.AspNet.WebApi.WebHost.5.2.3\lib\net45\System.Web.Http.WebHost.dll - - - - - - - - - - Designer - - - - - - - - - - Global.asax - - - - - - - Designer - - - Web.config - - - Web.config - - - - - - - - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - - - true - - - true - true - - - - - - - - - True - True - 3978 - / - http://localhost:35407 - False - False - - - False - - - - - - - - - \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Global.asax b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Global.asax deleted file mode 100644 index 745e35c7cc..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Global.asax +++ /dev/null @@ -1 +0,0 @@ -<%@ Application Codebehind="Global.asax.cs" Inherits="Microsoft.BotFrameworkFunctionalTests.EchoSkillBotv3.WebApiApplication" Language="C#" %> diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Global.asax.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Global.asax.cs deleted file mode 100644 index 29c3e1e36f..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Global.asax.cs +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Web.Http; -using Microsoft.Bot.Builder.Azure; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Builder.Dialogs.Internals; -using Autofac; -using Microsoft.Bot.Connector; -using System.Reflection; - -namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBotv3 -{ - public class WebApiApplication : System.Web.HttpApplication - { - protected void Application_Start() - { - GlobalConfiguration.Configure(WebApiConfig.Register); - - Conversation.UpdateContainer( - builder => - { - builder.RegisterModule(new AzureModule(Assembly.GetExecutingAssembly())); - - // Bot Storage: Here we register the state storage for your bot. - // Default store: volatile in-memory store - Only for prototyping! - // We provide adapters for Azure Table, CosmosDb, SQL Azure, or you can implement your own! - // For samples and documentation, see: [https://github.com/Microsoft/BotBuilder-Azure](https://github.com/Microsoft/BotBuilder-Azure) - var store = new InMemoryDataStore(); - - // Other storage options - // var store = new TableBotDataStore("...DataStorageConnectionString..."); // requires Microsoft.BotBuilder.Azure Nuget package - // var store = new DocumentDbBotDataStore("cosmos db uri", "cosmos db key"); // requires Microsoft.BotBuilder.Azure Nuget package - - builder.Register(c => store) - .Keyed>(AzureModule.Key_DataStore) - .AsSelf() - .SingleInstance(); - }); - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Properties/AssemblyInfo.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Properties/AssemblyInfo.cs deleted file mode 100644 index 450505c46b..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("BotApplication")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyProduct("BotApplication")] -[assembly: AssemblyCopyright("Copyright © Microsoft 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("287d6db1-a34e-44db-bbf5-e1312cd4737f")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.1")] -[assembly: AssemblyFileVersion("1.0.0.1")] diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Web.Debug.config b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Web.Debug.config deleted file mode 100644 index fae9cfefa9..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Web.Debug.config +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Web.Release.config b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Web.Release.config deleted file mode 100644 index da6e960b8d..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Web.Release.config +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Web.config b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Web.config deleted file mode 100644 index e9f3490f0e..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/Web.config +++ /dev/null @@ -1,57 +0,0 @@ - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/default.htm b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/default.htm deleted file mode 100644 index 46acb6def1..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/default.htm +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - -

    Echo Skill bot

    - This bot demonstrates a Bot Builder V3 bot as a Skill. - - - diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/manifests/echoskillbotv3-manifest-1.0.json b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/manifests/echoskillbotv3-manifest-1.0.json deleted file mode 100644 index c45e0fe08c..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/manifests/echoskillbotv3-manifest-1.0.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "$schema": "https://schemas.botframework.com/schemas/skills/v2.1/skill-manifest.json", - "$id": "EchoSkillBotDotNetV3", - "name": "EchoSkillBotDotNetV3", - "version": "1.0", - "description": "This is a skill for echoing what the user sent to the bot (using BF V3).", - "publisherName": "Microsoft", - "privacyUrl": "https://microsoft.com/privacy", - "copyright": "Copyright (c) Microsoft Corporation. All rights reserved.", - "license": "https://github.com/microsoft/BotFramework-FunctionalTests/blob/main/LICENSE", - "tags": [ - "echo" - ], - "endpoints": [ - { - "name": "default", - "protocol": "BotFrameworkV3", - "description": "Localhost endpoint for the skill (on port 35407)", - "endpointUrl": "http://localhost:35407/api/messages", - "msAppId": "00000000-0000-0000-0000-000000000000" - } - ], - "activities": { - "EchoDotNetV3": { - "description": "Echo user responses", - "type": "message", - "name": "V3Echo" - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/packages.config b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/packages.config deleted file mode 100644 index dcb3d850a1..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot-v3/packages.config +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Authentication/AllowedCallersClaimsValidator.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Authentication/AllowedCallersClaimsValidator.cs deleted file mode 100644 index 0f5a4e3152..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Authentication/AllowedCallersClaimsValidator.cs +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using System.Security.Claims; -using System.Threading.Tasks; -using Microsoft.Bot.Connector.Authentication; -using Microsoft.Extensions.Configuration; - -namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot.Authentication -{ - /// - /// Sample claims validator that loads an allowed list from configuration if present - /// and checks that requests are coming from allowed parent bots. - /// - public class AllowedCallersClaimsValidator : ClaimsValidator - { - private const string ConfigKey = "AllowedCallers"; - private readonly List _allowedCallers; - - /// - /// Initializes a new instance of the class. - /// Loads the appIds for the configured callers. Only allows access to callers it has configured. - /// - /// The list of configured callers. - public AllowedCallersClaimsValidator(IConfiguration config) - { - if (config == null) - { - throw new ArgumentNullException(nameof(config)); - } - - // AllowedCallers is the setting in the appsettings.json file - // that consists of the list of parent bot IDs that are allowed to access the skill. - // To add a new parent bot, simply edit the AllowedCallers and add - // the parent bot's Microsoft app ID to the list. - // In this sample, we allow all callers if AllowedCallers contains an "*". - var section = config.GetSection(ConfigKey); - var appsList = section.Get(); - if (appsList == null) - { - throw new ArgumentNullException($"\"{ConfigKey}\" not found in configuration."); - } - - _allowedCallers = new List(appsList); - } - - /// - /// Checks that the appId claim in the skill request is in the list of callers configured for this bot. - /// - /// The list of claims to validate. - /// A task that represents the work queued to execute. - public override Task ValidateClaimsAsync(IList claims) - { - // If _allowedCallers contains an "*", we allow all callers. - if (SkillValidation.IsSkillClaim(claims) && !_allowedCallers.Contains("*")) - { - // Check that the appId claim in the skill request is in the list of callers configured for this bot. - var appId = JwtTokenValidation.GetAppIdFromClaims(claims); - if (!_allowedCallers.Contains(appId)) - { - throw new UnauthorizedAccessException($"Received a request from a bot with an app ID of \"{appId}\". To enable requests from this caller, add the app ID to your configuration file."); - } - } - - return Task.CompletedTask; - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Bots/EchoBot.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Bots/EchoBot.cs deleted file mode 100644 index 1e740b419c..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Bots/EchoBot.cs +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Schema; - -namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot.Bots -{ - public class EchoBot : ActivityHandler - { - /// - /// Processes a message activity. - /// - /// Context for the current turn of conversation. - /// CancellationToken propagates notifications that operations should be cancelled. - /// A representing the result of the asynchronous operation. - protected override async Task OnMessageActivityAsync(ITurnContext turnContext, CancellationToken cancellationToken) - { - if (turnContext.Activity.Text.Contains("end") || turnContext.Activity.Text.Contains("stop")) - { - // Send End of conversation at the end. - await turnContext.SendActivityAsync(MessageFactory.Text($"Ending conversation from the skill..."), cancellationToken); - var endOfConversation = Activity.CreateEndOfConversationActivity(); - endOfConversation.Code = EndOfConversationCodes.CompletedSuccessfully; - await turnContext.SendActivityAsync(endOfConversation, cancellationToken); - } - else - { - await turnContext.SendActivityAsync(MessageFactory.Text($"Echo: {turnContext.Activity.Text}"), cancellationToken); - await turnContext.SendActivityAsync(MessageFactory.Text("Say \"end\" or \"stop\" and I'll end the conversation and back to the parent."), cancellationToken); - } - } - - /// - /// Processes an end of conversation activity. - /// - /// Context for the current turn of conversation. - /// CancellationToken propagates notifications that operations should be cancelled. - /// A representing the result of the asynchronous operation. - protected override Task OnEndOfConversationActivityAsync(ITurnContext turnContext, CancellationToken cancellationToken) - { - // This will be called if the host bot is ending the conversation. Sending additional messages should be - // avoided as the conversation may have been deleted. - // Perform cleanup of resources if needed. - return Task.CompletedTask; - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Controllers/BotController.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Controllers/BotController.cs deleted file mode 100644 index 3877bc87f3..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Controllers/BotController.cs +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Integration.AspNet.Core; - -namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot.Controllers -{ - /// - /// This ASP Controller is created to handle a request. Dependency Injection will provide the Adapter and IBot implementation at runtime. - /// Multiple different IBot implementations running at different endpoints can be achieved by specifying a more specific type for the bot constructor argument. - /// - [Route("api/messages")] - [ApiController] - public class BotController : ControllerBase - { - private readonly IBotFrameworkHttpAdapter _adapter; - private readonly IBot _bot; - - /// - /// Initializes a new instance of the class. - /// - /// Adapter for the BotController. - /// Bot for the BotController. - public BotController(IBotFrameworkHttpAdapter adapter, IBot bot) - { - _adapter = adapter; - _bot = bot; - } - - /// - /// Processes an HttpPost request. - /// - /// A representing the result of the asynchronous operation. - [HttpPost] - public async Task PostAsync() - { - await _adapter.ProcessAsync(Request, Response, _bot); - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/EchoSkillBot.csproj b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/EchoSkillBot.csproj deleted file mode 100644 index 75badf2f19..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/EchoSkillBot.csproj +++ /dev/null @@ -1,25 +0,0 @@ - - - - netcoreapp3.1 - latest - Microsoft.BotFrameworkFunctionalTests.EchoSkillBot - Microsoft.BotFrameworkFunctionalTests.EchoSkillBot - - - - DEBUG;TRACE - - - - - - - - - - Always - - - - diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Program.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Program.cs deleted file mode 100644 index 5a43557181..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Program.cs +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Hosting; - -namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot -{ - public class Program - { - /// - /// The entry point of the application. - /// - /// The command line args. - public static void Main(string[] args) - { - CreateHostBuilder(args).Build().Run(); - } - - /// - /// Creates a new instance of the class with pre-configured defaults. - /// - /// The command line args. - /// The initialized . - public static IHostBuilder CreateHostBuilder(string[] args) => - Host.CreateDefaultBuilder(args) - .ConfigureWebHostDefaults(webBuilder => - { - webBuilder.UseStartup(); - }); - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Properties/launchSettings.json b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Properties/launchSettings.json deleted file mode 100644 index 547cc9c69d..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Properties/launchSettings.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "$schema": "http://json.schemastore.org/launchsettings.json", - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:35400/", - "sslPort": 0 - } - }, - "profiles": { - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": false, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "EchoSkillBotDotNet": { - "commandName": "Project", - "launchBrowser": true, - "applicationUrl": "http://localhost:35400/", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/SkillAdapterWithErrorHandler.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/SkillAdapterWithErrorHandler.cs deleted file mode 100644 index 340e8a68ea..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/SkillAdapterWithErrorHandler.cs +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.Bot.Builder.TraceExtensions; -using Microsoft.Bot.Connector.Authentication; -using Microsoft.Bot.Schema; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Logging; - -namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot -{ - public class SkillAdapterWithErrorHandler : BotFrameworkHttpAdapter - { - /// - /// Initializes a new instance of the class to handle errors. - /// - /// The configuration properties. - /// An implementation of the bots credentials. - /// The configuration setting for the authentication. - /// An instance of a logger. - public SkillAdapterWithErrorHandler(IConfiguration configuration, ICredentialProvider credentialProvider, AuthenticationConfiguration authConfig, ILogger logger) - : base(configuration, credentialProvider, authConfig, logger: logger) - { - OnTurnError = async (turnContext, exception) => - { - try - { - // Log any leaked exception from the application. - logger.LogError(exception, $"[OnTurnError] unhandled error : {exception.Message}"); - - // Send a message to the user - var errorMessageText = "The skill encountered an error or bug."; - var errorMessage = MessageFactory.Text(errorMessageText + Environment.NewLine + exception, errorMessageText, InputHints.IgnoringInput); - errorMessage.Value = exception; - await turnContext.SendActivityAsync(errorMessage); - - errorMessageText = "To continue to run this bot, please fix the bot source code."; - errorMessage = MessageFactory.Text(errorMessageText, errorMessageText, InputHints.ExpectingInput); - await turnContext.SendActivityAsync(errorMessage); - - // Send a trace activity, which will be displayed in the Bot Framework Emulator - // Note: we return the entire exception in the value property to help the developer, this should not be done in prod. - await turnContext.TraceActivityAsync("OnTurnError Trace", exception.ToString(), "https://www.botframework.com/schemas/error", "TurnError"); - - // Send and EndOfConversation activity to the skill caller with the error to end the conversation - // and let the caller decide what to do. - var endOfConversation = Activity.CreateEndOfConversationActivity(); - endOfConversation.Code = "SkillError"; - endOfConversation.Text = exception.Message; - await turnContext.SendActivityAsync(endOfConversation); - } - catch (Exception ex) - { - logger.LogError(ex, $"Exception caught in SkillAdapterWithErrorHandler : {ex}"); - } - }; - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Startup.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Startup.cs deleted file mode 100644 index 9af686442b..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/Startup.cs +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.BotFramework; -using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.Bot.Connector.Authentication; -using Microsoft.BotFrameworkFunctionalTests.EchoSkillBot.Bots; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; - -namespace Microsoft.BotFrameworkFunctionalTests.EchoSkillBot -{ - public class Startup - { - public Startup(IConfiguration config) - { - Configuration = config; - } - - public IConfiguration Configuration { get; } - - /// - /// This method gets called by the runtime. Use this method to add services to the container. - /// - /// Method to add services to the container. - public void ConfigureServices(IServiceCollection services) - { - services.AddControllers().AddNewtonsoftJson(); - - // Configure credentials - services.AddSingleton(); - - // Register AuthConfiguration to enable custom claim validation. - services.AddSingleton(sp => new AuthenticationConfiguration { ClaimsValidator = new Authentication.AllowedCallersClaimsValidator(sp.GetService()) }); - - // Create the Bot Framework Adapter with error handling enabled. - services.AddSingleton(); - - // Create the bot as a transient. In this case the ASP Controller is expecting an IBot. - services.AddTransient(); - - if (!string.IsNullOrEmpty(Configuration["ChannelService"])) - { - // Register a ConfigurationChannelProvider -- this is only for Azure Gov. - services.AddSingleton(); - } - } - - /// - /// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - /// - /// The application request pipeline to be configured. - /// The web hosting environment. - public void Configure(IApplicationBuilder app, IWebHostEnvironment env) - { - if (env.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); - } - - app.UseDefaultFiles() - .UseStaticFiles() - .UseRouting() - .UseAuthorization() - .UseEndpoints(endpoints => - { - endpoints.MapControllers(); - }); - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/appsettings.json b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/appsettings.json deleted file mode 100644 index c61cdb4d79..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/appsettings.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "MicrosoftAppId": "", - "MicrosoftAppPassword": "", - "ChannelService": "", - // This is a comma separate list with the App IDs that will have access to the skill. - // This setting is used in AllowedCallersClaimsValidator. - // Examples: - // [ "*" ] allows all callers. - // [ "AppId1", "AppId2" ] only allows access to parent bots with "AppId1" and "AppId2". - "AllowedCallers": [ "*" ] -} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/wwwroot/default.htm b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/wwwroot/default.htm deleted file mode 100644 index 416365e6bc..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/wwwroot/default.htm +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - - EchoSkillBotDotNet - - - - - -
    -
    -
    -
    EchoSkillBotDotNet Bot
    -
    -
    -
    -
    -
    Your bot is ready!
    -
    You can test your bot in the Bot Framework Emulator
    - by connecting to http://localhost:3978/api/messages.
    - -
    Visit Azure - Bot Service to register your bot and add it to
    - various channels. The bot's endpoint URL typically looks - like this:
    -
    https://your_bots_hostname/api/messages
    -
    -
    -
    -
    - -
    - - - \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/wwwroot/manifests/echoskillbot-manifest-1.0.json b/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/wwwroot/manifests/echoskillbot-manifest-1.0.json deleted file mode 100644 index 974de692e4..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/EchoSkillBot/wwwroot/manifests/echoskillbot-manifest-1.0.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "https://schemas.botframework.com/schemas/skills/v2.1/skill-manifest.json", - "$id": "EchoSkillBotDotNet", - "name": "EchoSkillBotDotNet", - "version": "1.0", - "description": "This is a skill for echoing what the user sent to the bot (using .netcore 3.1).", - "publisherName": "Microsoft", - "privacyUrl": "https://microsoft.com/privacy", - "copyright": "Copyright (c) Microsoft Corporation. All rights reserved.", - "license": "https://github.com/microsoft/BotFramework-FunctionalTests/blob/main/LICENSE", - "tags": [ - "echo" - ], - "endpoints": [ - { - "name": "default", - "protocol": "BotFrameworkV3", - "description": "Localhost endpoint for the skill (on port 35400)", - "endpointUrl": "http://localhost:35400/api/messages", - "msAppId": "00000000-0000-0000-0000-000000000000" - } - ] -} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Authentication/AllowedCallersClaimsValidator.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Authentication/AllowedCallersClaimsValidator.cs deleted file mode 100644 index cc811d5d82..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Authentication/AllowedCallersClaimsValidator.cs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using System.Security.Claims; -using System.Threading.Tasks; -using Microsoft.Bot.Connector.Authentication; -using Microsoft.Extensions.Configuration; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Authentication -{ - /// - /// Sample claims validator that loads an allowed list from configuration if present - /// and checks that requests are coming from allowed parent bots. - /// - public class AllowedCallersClaimsValidator : ClaimsValidator - { - private const string ConfigKey = "AllowedCallers"; - private readonly List _allowedCallers; - - public AllowedCallersClaimsValidator(IConfiguration config) - { - if (config == null) - { - throw new ArgumentNullException(nameof(config)); - } - - // AllowedCallers is the setting in the appsettings.json file - // that consists of the list of parent bot IDs that are allowed to access the skill. - // To add a new parent bot, simply edit the AllowedCallers and add - // the parent bot's Microsoft app ID to the list. - // In this sample, we allow all callers if AllowedCallers contains an "*". - var section = config.GetSection(ConfigKey); - var appsList = section.Get(); - if (appsList == null) - { - throw new ArgumentNullException($"\"{ConfigKey}\" not found in configuration."); - } - - _allowedCallers = new List(appsList); - } - - public override Task ValidateClaimsAsync(IList claims) - { - // If _allowedCallers contains an "*", we allow all callers. - if (SkillValidation.IsSkillClaim(claims) && !_allowedCallers.Contains("*")) - { - // Check that the appId claim in the skill request is in the list of callers configured for this bot. - var appId = JwtTokenValidation.GetAppIdFromClaims(claims); - if (!_allowedCallers.Contains(appId)) - { - throw new UnauthorizedAccessException($"Received a request from a bot with an app ID of \"{appId}\". To enable requests from this caller, add the app ID to your configuration file."); - } - } - - return Task.CompletedTask; - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Bots/SkillBot.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Bots/SkillBot.cs deleted file mode 100644 index ffad563104..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Bots/SkillBot.cs +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Schema; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Bots -{ - public class SkillBot : ActivityHandler - where T : Dialog - { - private readonly ConversationState _conversationState; - private readonly Dialog _mainDialog; - private readonly Uri _serverUrl; - - public SkillBot(ConversationState conversationState, T mainDialog, IHttpContextAccessor httpContextAccessor) - { - _conversationState = conversationState; - _mainDialog = mainDialog; - _serverUrl = new Uri($"{httpContextAccessor.HttpContext.Request.Scheme}://{httpContextAccessor.HttpContext.Request.Host.Value}"); - } - - public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default) - { - if (turnContext.Activity.Type == ActivityTypes.ConversationUpdate) - { - // Let the base class handle the activity (this will trigger OnMembersAddedAsync). - await base.OnTurnAsync(turnContext, cancellationToken); - } - else - { - // Run the Dialog with the Activity. - await _mainDialog.RunAsync(turnContext, _conversationState.CreateProperty("DialogState"), cancellationToken); - } - - // Save any state changes that might have occurred during the turn. - await _conversationState.SaveChangesAsync(turnContext, false, cancellationToken); - } - - protected override async Task OnMembersAddedAsync(IList membersAdded, ITurnContext turnContext, CancellationToken cancellationToken) - { - foreach (var member in membersAdded) - { - if (member.Id != turnContext.Activity.Recipient.Id) - { - var activity = MessageFactory.Text("Welcome to the waterfall skill bot. \n\nThis is a skill, you will need to call it from another bot to use it."); - activity.Speak = "Welcome to the waterfall skill bot. This is a skill, you will need to call it from another bot to use it."; - await turnContext.SendActivityAsync(activity, cancellationToken); - - await turnContext.SendActivityAsync($"You can check the skill manifest to see what it supports here: {_serverUrl}manifests/waterfallskillbot-manifest-1.0.json", cancellationToken: cancellationToken); - } - } - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/BotController.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/BotController.cs deleted file mode 100644 index eff768c82a..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/BotController.cs +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.Extensions.Logging; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Controllers -{ - // This ASP Controller is created to handle a request. Dependency Injection will provide the Adapter and IBot - // implementation at runtime. Multiple different IBot implementations running at different endpoints can be - // achieved by specifying a more specific type for the bot constructor argument. - [ApiController] - public class BotController : ControllerBase - { - private readonly IBotFrameworkHttpAdapter _adapter; - private readonly IBot _bot; - private readonly ILogger _logger; - - public BotController(BotFrameworkHttpAdapter adapter, IBot bot, ILogger logger) - { - _adapter = adapter; - _bot = bot; - _logger = logger; - } - - [Route("api/messages")] - [HttpGet] - [HttpPost] - public async Task PostAsync() - { - try - { - // Delegate the processing of the HTTP POST to the adapter. - // The adapter will invoke the bot. - await _adapter.ProcessAsync(Request, Response, _bot); - } - catch (Exception ex) - { - _logger.LogError(ex, "Error processing request"); - throw; - } - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/CardsController.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/CardsController.cs deleted file mode 100644 index 817c197758..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/CardsController.cs +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.IO; -using Microsoft.AspNetCore.Mvc; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Controllers -{ - // This ASP Controller is created to handle a request. Dependency Injection will provide the Adapter and IBot - // implementation at runtime. Multiple different IBot implementations running at different endpoints can be - // achieved by specifying a more specific type for the bot constructor argument. - [ApiController] - public class CardsController : ControllerBase - { - private static readonly string Music = "music.mp3"; - - [Route("api/music")] - [HttpGet] - public ActionResult ReturnFile() - { - var filename = Music; - var filePath = Path.Combine(Directory.GetCurrentDirectory(), "Dialogs/Cards/Files", filename); - var fileData = System.IO.File.ReadAllBytes(filePath); - - return File(fileData, "audio/mp3"); - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/ProactiveController.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/ProactiveController.cs deleted file mode 100644 index ae96c51bbb..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/ProactiveController.cs +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Concurrent; -using System.Net; -using System.Security.Claims; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs; -using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Proactive; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Controllers -{ - [Route("api/notify")] - [ApiController] - public class ProactiveController : ControllerBase - { - private readonly IBotFrameworkHttpAdapter _adapter; - private readonly ConcurrentDictionary _continuationParametersStore; - private readonly ConversationState _conversationState; - private readonly ActivityRouterDialog _mainDialog; - - public ProactiveController(ConversationState conversationState, ActivityRouterDialog mainDialog, BotFrameworkHttpAdapter adapter, ConcurrentDictionary continuationParametersStore) - { - _conversationState = conversationState; - _adapter = adapter; - _continuationParametersStore = continuationParametersStore; - _mainDialog = mainDialog; - } - - // Note: in production scenarios, this controller should be secured. - public async Task Get(string user) - { - _continuationParametersStore.TryGetValue(user, out var continuationParameters); - - if (continuationParameters == null) - { - // Let the caller know a proactive messages have been sent - return new ContentResult - { - Content = $"

    No messages sent


    There are no conversations registered to receive proactive messages for {user}.", - ContentType = "text/html", - StatusCode = (int)HttpStatusCode.OK, - }; - } - - Exception exception = null; - try - { - async Task ContinuationBotCallback(ITurnContext context, CancellationToken cancellationToken) - { - await context.SendActivityAsync($"Got proactive message for user: {user}", cancellationToken: cancellationToken); - - // If we didn't have dialogs we could remove the code below, but we want to continue the dialog to clear the - // dialog stack. - // Run the main dialog to continue WaitForProactiveDialog and send an EndOfConversation when that one is done. - // ContinueDialogAsync in WaitForProactiveDialog will get a ContinueConversation event when this is called. - await _mainDialog.RunAsync(context, _conversationState.CreateProperty("DialogState"), cancellationToken); - - // Save any state changes so the dialog stack is persisted. - await _conversationState.SaveChangesAsync(context, false, cancellationToken); - } - - // Continue the conversation with the proactive message - await ((BotFrameworkAdapter)_adapter).ContinueConversationAsync((ClaimsIdentity)continuationParameters.ClaimsIdentity, continuationParameters.ConversationReference, continuationParameters.OAuthScope, ContinuationBotCallback, default); - } - catch (Exception ex) - { - exception = ex; - } - - // Let the caller know a proactive messages have been sent - return new ContentResult - { - Content = $"

    Proactive messages have been sent


    Timestamp: {DateTime.Now}
    Exception: {exception}", - ContentType = "text/html", - StatusCode = (int)HttpStatusCode.OK, - }; - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/SkillController.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/SkillController.cs deleted file mode 100644 index ea90b07c02..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Controllers/SkillController.cs +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.Bot.Builder.Skills; -using Microsoft.Bot.Schema; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Controllers -{ - /// - /// A controller that handles skill replies to the bot. - /// This example uses the that is registered as a in startup.cs. - /// - [ApiController] - [Route("api/skills")] - public class SkillController : ChannelServiceController - { - public SkillController(ChannelServiceHandler handler) - : base(handler) - { - } - - public override Task ReplyToActivityAsync(string conversationId, string activityId, Activity activity) - { - try - { - return base.ReplyToActivityAsync(conversationId, activityId, activity); - } - catch (Exception ex) - { - Console.WriteLine(ex); - throw; - } - } - - public override Task SendToConversationAsync(string conversationId, Activity activity) - { - try - { - return base.SendToConversationAsync(conversationId, activity); - } - catch (Exception ex) - { - Console.WriteLine(ex); - throw; - } - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/ActivityRouterDialog.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/ActivityRouterDialog.cs deleted file mode 100644 index 11acef467c..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/ActivityRouterDialog.cs +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Concurrent; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Builder.Integration.AspNet.Core.Skills; -using Microsoft.Bot.Builder.Skills; -using Microsoft.Bot.Builder.TraceExtensions; -using Microsoft.Bot.Connector.Authentication; -using Microsoft.Bot.Schema; -using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Auth; -using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Cards; -using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Delete; -using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.FileUpload; -using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.MessageWithAttachment; -using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Proactive; -using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Sso; -using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Update; -using Microsoft.Extensions.Configuration; -using Newtonsoft.Json; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs -{ - /// - /// A root dialog that can route activities sent to the skill to different sub-dialogs. - /// - public class ActivityRouterDialog : ComponentDialog - { - private static readonly string _echoSkill = "EchoSkill"; - - public ActivityRouterDialog(IConfiguration configuration, IHttpContextAccessor httpContextAccessor, ConversationState conversationState, SkillConversationIdFactoryBase conversationIdFactory, SkillHttpClient skillClient, ConcurrentDictionary continuationParametersStore) - : base(nameof(ActivityRouterDialog)) - { - AddDialog(new CardDialog(httpContextAccessor)); - AddDialog(new MessageWithAttachmentDialog(new Uri($"{httpContextAccessor.HttpContext.Request.Scheme}://{httpContextAccessor.HttpContext.Request.Host.Value}"))); - AddDialog(new WaitForProactiveDialog(httpContextAccessor, continuationParametersStore)); - AddDialog(new AuthDialog(configuration)); - AddDialog(new SsoSkillDialog(configuration)); - AddDialog(new FileUploadDialog()); - AddDialog(new DeleteDialog()); - AddDialog(new UpdateDialog()); - - AddDialog(CreateEchoSkillDialog(conversationState, conversationIdFactory, skillClient, configuration)); - - AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[] { ProcessActivityAsync })); - - // The initial child Dialog to run. - InitialDialogId = nameof(WaterfallDialog); - } - - private static SkillDialog CreateEchoSkillDialog(ConversationState conversationState, SkillConversationIdFactoryBase conversationIdFactory, SkillHttpClient skillClient, IConfiguration configuration) - { - var botId = configuration.GetSection(MicrosoftAppCredentials.MicrosoftAppIdKey)?.Value; - - var skillHostEndpoint = configuration.GetSection("SkillHostEndpoint")?.Value; - if (string.IsNullOrWhiteSpace(skillHostEndpoint)) - { - throw new ArgumentException("SkillHostEndpoint is not in configuration"); - } - - var skillInfo = configuration.GetSection("EchoSkillInfo").Get() ?? throw new ArgumentException("EchoSkillInfo is not set in configuration"); - - var skillDialogOptions = new SkillDialogOptions - { - BotId = botId, - ConversationIdFactory = conversationIdFactory, - SkillClient = skillClient, - SkillHostEndpoint = new Uri(skillHostEndpoint), - ConversationState = conversationState, - Skill = skillInfo - }; - var echoSkillDialog = new SkillDialog(skillDialogOptions); - - echoSkillDialog.Id = _echoSkill; - return echoSkillDialog; - } - - private async Task ProcessActivityAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - // A skill can send trace activities, if needed. - await stepContext.Context.TraceActivityAsync($"{GetType().Name}.ProcessActivityAsync()", label: $"Got ActivityType: {stepContext.Context.Activity.Type}", cancellationToken: cancellationToken); - - switch (stepContext.Context.Activity.Type) - { - case ActivityTypes.Event: - return await OnEventActivityAsync(stepContext, cancellationToken); - - default: - // We didn't get an activity type we can handle. - await stepContext.Context.SendActivityAsync(MessageFactory.Text($"Unrecognized ActivityType: \"{stepContext.Context.Activity.Type}\".", inputHint: InputHints.IgnoringInput), cancellationToken); - return new DialogTurnResult(DialogTurnStatus.Complete); - } - } - - // This method performs different tasks based on the event name. - private async Task OnEventActivityAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - var activity = stepContext.Context.Activity; - await stepContext.Context.TraceActivityAsync($"{GetType().Name}.OnEventActivityAsync()", label: $"Name: {activity.Name}. Value: {GetObjectAsJsonString(activity.Value)}", cancellationToken: cancellationToken); - - // Resolve what to execute based on the event name. - switch (activity.Name) - { - case "Cards": - return await stepContext.BeginDialogAsync(FindDialog(nameof(CardDialog)).Id, cancellationToken: cancellationToken); - - case "Proactive": - return await stepContext.BeginDialogAsync(FindDialog(nameof(WaitForProactiveDialog)).Id, cancellationToken: cancellationToken); - - case "MessageWithAttachment": - return await stepContext.BeginDialogAsync(FindDialog(nameof(MessageWithAttachmentDialog)).Id, cancellationToken: cancellationToken); - - case "Auth": - return await stepContext.BeginDialogAsync(FindDialog(nameof(AuthDialog)).Id, cancellationToken: cancellationToken); - - case "Sso": - return await stepContext.BeginDialogAsync(FindDialog(nameof(SsoSkillDialog)).Id, cancellationToken: cancellationToken); - - case "FileUpload": - return await stepContext.BeginDialogAsync(FindDialog(nameof(FileUploadDialog)).Id, cancellationToken: cancellationToken); - - case "Echo": - // Start the EchoSkillBot - var messageActivity = MessageFactory.Text("I'm the echo skill bot"); - messageActivity.DeliveryMode = stepContext.Context.Activity.DeliveryMode; - return await stepContext.BeginDialogAsync(FindDialog(_echoSkill).Id, new BeginSkillDialogOptions { Activity = messageActivity }, cancellationToken); - - case "Delete": - return await stepContext.BeginDialogAsync(FindDialog(nameof(DeleteDialog)).Id, cancellationToken: cancellationToken); - - case "Update": - return await stepContext.BeginDialogAsync(FindDialog(nameof(UpdateDialog)).Id, cancellationToken: cancellationToken); - - default: - // We didn't get an event name we can handle. - await stepContext.Context.SendActivityAsync(MessageFactory.Text($"Unrecognized EventName: \"{activity.Name}\".", inputHint: InputHints.IgnoringInput), cancellationToken); - return new DialogTurnResult(DialogTurnStatus.Complete); - } - } - - private string GetObjectAsJsonString(object value) => value == null ? string.Empty : JsonConvert.SerializeObject(value); - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Auth/AuthDialog.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Auth/AuthDialog.cs deleted file mode 100644 index 39d26e238d..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Auth/AuthDialog.cs +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Schema; -using Microsoft.Extensions.Configuration; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Auth -{ - public class AuthDialog : ComponentDialog - { - private readonly string _connectionName; - - public AuthDialog(IConfiguration configuration) - : base(nameof(AuthDialog)) - { - _connectionName = configuration["ConnectionName"]; - - // This confirmation dialog should be removed once https://github.com/microsoft/BotFramework-FunctionalTests/issues/299 is resolved (and this class should look like the class in the issue) - AddDialog(new ConfirmPrompt(nameof(ConfirmPrompt))); - AddDialog(new OAuthPrompt( - nameof(OAuthPrompt), - new OAuthPromptSettings - { - ConnectionName = _connectionName, - Text = $"Please Sign In to connection: '{_connectionName}'", - Title = "Sign In", - Timeout = 300000 // User has 5 minutes to login (1000 * 60 * 5) - })); - - AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[] { PromptStepAsync, LoginStepAsync, DisplayTokenAsync })); - - // The initial child Dialog to run. - InitialDialogId = nameof(WaterfallDialog); - } - - private async Task PromptStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - return await stepContext.BeginDialogAsync(nameof(OAuthPrompt), null, cancellationToken); - } - - private async Task LoginStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - // Get the token from the previous step. - var tokenResponse = (TokenResponse)stepContext.Result; - if (tokenResponse != null) - { - stepContext.Values["Token"] = tokenResponse.Token; - - // Show the token - var loggedInMessage = "You are now logged in."; - await stepContext.Context.SendActivityAsync(MessageFactory.Text(loggedInMessage, loggedInMessage, InputHints.IgnoringInput), cancellationToken); - - return await stepContext.PromptAsync(nameof(ConfirmPrompt), new PromptOptions { Prompt = MessageFactory.Text("Would you like to view your token?") }, cancellationToken); - } - - var tryAgainMessage = "Login was not successful please try again."; - await stepContext.Context.SendActivityAsync(MessageFactory.Text(tryAgainMessage, tryAgainMessage, InputHints.IgnoringInput), cancellationToken); - return await stepContext.ReplaceDialogAsync(InitialDialogId, cancellationToken: cancellationToken); - } - - private async Task DisplayTokenAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - var result = (bool)stepContext.Result; - if (result) - { - var showTokenMessage = "Here is your token:"; - await stepContext.Context.SendActivityAsync(MessageFactory.Text($"{showTokenMessage} {stepContext.Values["Token"]}", showTokenMessage, InputHints.IgnoringInput), cancellationToken); - } - - // Sign out - var botAdapter = (BotFrameworkAdapter)stepContext.Context.Adapter; - await botAdapter.SignOutUserAsync(stepContext.Context, _connectionName, null, cancellationToken); - var signOutMessage = "I have signed you out."; - await stepContext.Context.SendActivityAsync(MessageFactory.Text(signOutMessage, signOutMessage, inputHint: InputHints.IgnoringInput), cancellationToken); - - return await stepContext.EndDialogAsync(cancellationToken: cancellationToken); - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/AdaptiveCardExtensions.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/AdaptiveCardExtensions.cs deleted file mode 100644 index a0cb2216a6..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/AdaptiveCardExtensions.cs +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using AdaptiveCards; -using Microsoft.Bot.Schema; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Cards -{ - public static class AdaptiveCardExtensions - { - /// - /// Creates a new attachment from AdaptiveCard. - /// - /// The instance of AdaptiveCard. - /// The generated attachment. - public static Attachment ToAttachment(this AdaptiveCard card) - { - return new Attachment - { - Content = card, - ContentType = AdaptiveCard.ContentType, - }; - } - - /// - /// Wrap BotBuilder action into AdaptiveCard submit action. - /// - /// The instance of adaptive card submit action. - /// Target action to be adapted. - public static void RepresentAsBotBuilderAction(this AdaptiveSubmitAction action, CardAction targetAction) - { - if (action == null) - { - throw new ArgumentNullException(nameof(action)); - } - - if (targetAction == null) - { - throw new ArgumentNullException(nameof(targetAction)); - } - - var wrappedAction = new CardAction - { - Type = targetAction.Type, - Value = targetAction.Value, - Text = targetAction.Text, - DisplayText = targetAction.DisplayText, - }; - - var serializerSettings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - - var jsonStr = action.DataJson ?? "{}"; - JToken dataJson = JObject.Parse(jsonStr); - dataJson["msteams"] = JObject.FromObject(wrappedAction, JsonSerializer.Create(serializerSettings)); - - action.Title = targetAction.Title; - action.DataJson = dataJson.ToString(); - } - - /// - /// Wrap BotBuilder action into AdaptiveCard submit action. - /// - /// Target bot builder action to be adapted. - /// The wrapped adaptive card submit action. - public static AdaptiveSubmitAction ToAdaptiveCardAction(this CardAction action) - { - var adaptiveCardAction = new AdaptiveSubmitAction(); - adaptiveCardAction.RepresentAsBotBuilderAction(action); - return adaptiveCardAction; - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/CardDialog.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/CardDialog.cs deleted file mode 100644 index 8ded48ff2c..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/CardDialog.cs +++ /dev/null @@ -1,340 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using AdaptiveCards; -using Microsoft.AspNetCore.Http; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Builder.Dialogs.Choices; -using Microsoft.Bot.Schema; -using Microsoft.Bot.Schema.Teams; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Cards -{ - public class CardDialog : ComponentDialog - { - // for file upload - private static readonly string TeamsLogoFileName = "teams-logo.png"; - - // for video card - private static readonly string CorgiOnCarouselVideo = "https://www.youtube.com/watch?v=LvqzubPZjHE"; - - // for animation card - private static readonly string MindBlownGif = "https://media3.giphy.com/media/xT0xeJpnrWC4XWblEk/giphy.gif?cid=ecf05e47mye7k75sup6tcmadoom8p1q8u03a7g2p3f76upp9&rid=giphy.gif"; - - // list of cards that exist - private static readonly List _cardOptions = Enum.GetValues(typeof(CardOptions)).Cast().ToList(); - - private readonly Uri _serverUrl; - - public CardDialog(IHttpContextAccessor httpContextAccessor) - : base(nameof(CardDialog)) - { - _serverUrl = new Uri($"{httpContextAccessor.HttpContext.Request.Scheme}://{httpContextAccessor.HttpContext.Request.Host.Value}"); - - AddDialog(new ChoicePrompt("CardPrompt", CardPromptValidatorAsync)); - AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[] { SelectCardAsync, DisplayCardAsync })); - - InitialDialogId = nameof(WaterfallDialog); - } - - private static CardOptions ParseEnum(string card) - { - return (CardOptions)Enum.Parse(typeof(CardOptions), card, true); - } - - private static HeroCard MakeUpdatedHeroCard(WaterfallStepContext stepContext) - { - var heroCard = new HeroCard - { - Title = "Newly updated card.", - Buttons = new List() - }; - - var data = stepContext.Context.Activity.Value as JObject; - data = JObject.FromObject(data); - data["count"] = data["count"].Value() + 1; - heroCard.Text = $"Update count - {data["count"].Value()}"; - heroCard.Title = "Newly updated card"; - - heroCard.Buttons.Add(new CardAction - { - Type = ActionTypes.MessageBack, - Title = "Update Card", - Text = "UpdateCardAction", - Value = data - }); - - return heroCard; - } - - private async Task SelectCardAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - // Create the PromptOptions from the skill configuration which contain the list of configured skills. - var messageText = "What card do you want?"; - var repromptMessageText = "This message will be created in the validation code"; - var options = new PromptOptions - { - Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), - RetryPrompt = MessageFactory.Text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput), - Choices = _cardOptions.Select(card => new Choice(card.ToString())).ToList(), - Style = ListStyle.List - }; - - // Ask the user to enter their name. - return await stepContext.PromptAsync("CardPrompt", options, cancellationToken); - } - - private async Task DisplayCardAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - if (stepContext.Context.Activity.Value != null) - { - await HandleSpecialActivity(stepContext, cancellationToken); - } - else - { - // Checks to see if the activity is an adaptive card update or a bot action respose - var card = ((FoundChoice)stepContext.Result).Value.ToLowerInvariant(); - var cardType = ParseEnum(card); - - if (ChannelSupportedCards.IsCardSupported(stepContext.Context.Activity.ChannelId, cardType)) - { - switch (cardType) - { - case CardOptions.AdaptiveCardBotAction: - await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(MakeAdaptiveCard("botaction").ToAttachment()), cancellationToken); - break; - case CardOptions.AdaptiveCardTeamsTaskModule: - await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(MakeAdaptiveCard("taskmodule").ToAttachment()), cancellationToken); - break; - case CardOptions.AdaptiveCardSubmitAction: - await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(MakeAdaptiveCard("submitaction").ToAttachment()), cancellationToken); - break; - case CardOptions.Hero: - await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(CardSampleHelper.CreateHeroCard().ToAttachment()), cancellationToken).ConfigureAwait(false); - break; - case CardOptions.Thumbnail: - await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(CardSampleHelper.CreateThumbnailCard().ToAttachment()), cancellationToken).ConfigureAwait(false); - break; - case CardOptions.Receipt: - await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(CardSampleHelper.CreateReceiptCard().ToAttachment()), cancellationToken).ConfigureAwait(false); - break; - case CardOptions.Signin: - await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(CardSampleHelper.CreateSigninCard().ToAttachment()), cancellationToken).ConfigureAwait(false); - break; - case CardOptions.Carousel: - // NOTE: if cards are NOT the same height in a carousel, Teams will instead display as AttachmentLayoutTypes.List - await stepContext.Context.SendActivityAsync( - MessageFactory.Carousel(new[] - { - CardSampleHelper.CreateHeroCard().ToAttachment(), - CardSampleHelper.CreateHeroCard().ToAttachment(), - CardSampleHelper.CreateHeroCard().ToAttachment() - }), - cancellationToken).ConfigureAwait(false); - break; - case CardOptions.List: - // NOTE: MessageFactory.Attachment with multiple attachments will default to AttachmentLayoutTypes.List - await stepContext.Context.SendActivityAsync( - MessageFactory.Attachment(new[] - { - CardSampleHelper.CreateHeroCard().ToAttachment(), - CardSampleHelper.CreateHeroCard().ToAttachment(), - CardSampleHelper.CreateHeroCard().ToAttachment() - }), - cancellationToken).ConfigureAwait(false); - break; - case CardOptions.O365: - - await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(MakeO365CardAttachmentAsync()), cancellationToken).ConfigureAwait(false); - break; - case CardOptions.TeamsFileConsent: - await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(MakeTeamsFileConsentCard()), cancellationToken); - break; - case CardOptions.Animation: - await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(MakeAnimationCard().ToAttachment()), cancellationToken); - break; - case CardOptions.Audio: - await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(MakeAudioCard().ToAttachment()), cancellationToken); - break; - case CardOptions.Video: - await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(MakeVideoCard().ToAttachment()), cancellationToken); - break; - case CardOptions.AdaptiveUpdate: - await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(MakeUpdateAdaptiveCard().ToAttachment()), cancellationToken); - break; - case CardOptions.End: - return new DialogTurnResult(DialogTurnStatus.Complete); - } - } - else - { - await stepContext.Context.SendActivityAsync(MessageFactory.Text($"{cardType} cards are not supported in the {stepContext.Context.Activity.ChannelId} channel."), cancellationToken); - } - } - - return await stepContext.ReplaceDialogAsync(InitialDialogId, "What card would you want?", cancellationToken); - } - - private async Task HandleSpecialActivity(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - if (stepContext.Context.Activity.Text == null) - { - await stepContext.Context.SendActivityAsync(MessageFactory.Text($"I received an activity with this data in the value field {stepContext.Context.Activity.Value}"), cancellationToken); - } - else - { - if (stepContext.Context.Activity.Text.ToLowerInvariant().Contains("update")) - { - if (stepContext.Context.Activity.ReplyToId == null) - { - await stepContext.Context.SendActivityAsync(MessageFactory.Text($"Update activity is not supported in the {stepContext.Context.Activity.ChannelId} channel."), cancellationToken); - } - else - { - var heroCard = MakeUpdatedHeroCard(stepContext); - - var activity = MessageFactory.Attachment(heroCard.ToAttachment()); - activity.Id = stepContext.Context.Activity.ReplyToId; - await stepContext.Context.UpdateActivityAsync(activity, cancellationToken); - } - } - else - { - await stepContext.Context.SendActivityAsync(MessageFactory.Text($"I received an activity with this data in the text field {stepContext.Context.Activity.Text} and this data in the value field {stepContext.Context.Activity.Value}"), cancellationToken); - } - } - } - - private async Task CardPromptValidatorAsync(PromptValidatorContext promptContext, CancellationToken cancellationToken) - { - if (!promptContext.Recognized.Succeeded) - { - // This checks to see if this response is the user clicking the update button on the card - if (promptContext.Context.Activity.Value != null) - { - return await Task.FromResult(true); - } - - if (promptContext.Context.Activity.Attachments != null) - { - return await Task.FromResult(true); - } - - // Render the activity so we can assert in tests. - // We may need to simplify the json if it gets too complicated to test. - promptContext.Options.RetryPrompt.Text = $"Got {JsonConvert.SerializeObject(promptContext.Context.Activity, Formatting.Indented)}\n\n{promptContext.Options.Prompt.Text}"; - return await Task.FromResult(false); - } - - return await Task.FromResult(true); - } - - private HeroCard MakeUpdateAdaptiveCard() - { - var heroCard = new HeroCard - { - Title = "Update card", - Text = "Update Card Action", - Buttons = new List() - }; - - var action = new CardAction - { - Type = ActionTypes.MessageBack, - Title = "Update card title", - Text = "Update card text", - Value = new JObject { { "count", 0 } } - }; - - heroCard.Buttons.Add(action); - - return heroCard; - } - - private AdaptiveCard MakeAdaptiveCard(string cardType) - { - var adaptiveCard = cardType switch - { - "botaction" => CardSampleHelper.CreateAdaptiveCardBotAction(), - "taskmodule" => CardSampleHelper.CreateAdaptiveCardTaskModule(), - "submitaction" => CardSampleHelper.CreateAdaptiveCardSubmit(), - _ => throw new ArgumentException(nameof(cardType)), - }; - - return adaptiveCard; - } - - private Attachment MakeO365CardAttachmentAsync() - { - var card = CardSampleHelper.CreateSampleO365ConnectorCard(); - var cardAttachment = new Attachment - { - Content = card, - ContentType = O365ConnectorCard.ContentType, - }; - - return cardAttachment; - } - - private Attachment MakeTeamsFileConsentCard() - { - var filename = TeamsLogoFileName; - var filePath = Path.Combine("Dialogs/Cards/Files", filename); - var fileSize = new FileInfo(filePath).Length; - - return MakeTeamsFileConsentCardAttachment(filename, fileSize); - } - - private Attachment MakeTeamsFileConsentCardAttachment(string filename, long fileSize) - { - var consentContext = new Dictionary - { - { "filename", filename }, - }; - - var fileCard = new FileConsentCard - { - Description = "This is the file I want to send you", - SizeInBytes = fileSize, - AcceptContext = consentContext, - DeclineContext = consentContext, - }; - - var asAttachment = new Attachment - { - Content = fileCard, - ContentType = FileConsentCard.ContentType, - Name = filename, - }; - - return asAttachment; - } - - private AnimationCard MakeAnimationCard() - { - var url = new MediaUrl(url: MindBlownGif); - return new AnimationCard(title: "Animation Card", media: new[] { url }, autostart: true); - } - - private VideoCard MakeVideoCard() - { - var url = new MediaUrl(url: CorgiOnCarouselVideo); - return new VideoCard(title: "Video Card", media: new[] { url }); - } - - private AudioCard MakeAudioCard() - { - var url = new MediaUrl(url: $"{_serverUrl}api/music"); - return new AudioCard(title: "Audio Card", media: new[] { url }, autoloop: true); - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/CardOptions.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/CardOptions.cs deleted file mode 100644 index f5cd97dafe..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/CardOptions.cs +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Cards -{ - public enum CardOptions - { - /// - /// Adaptive card - Bot action - /// - AdaptiveCardBotAction, - - /// - /// Adaptive card - Task module - /// - AdaptiveCardTeamsTaskModule, - - /// - /// Adaptive card - Submit action - /// - AdaptiveCardSubmitAction, - - /// - /// Hero cards - /// - Hero, - - /// - /// Thumbnail cards - /// - Thumbnail, - - /// - /// Receipt cards - /// - Receipt, - - /// - /// Signin cards - /// - Signin, - - /// - /// Carousel cards - /// - Carousel, - - /// - /// List cards - /// - List, - - /// - /// O365 cards - /// - O365, - - /// - /// File cards - /// - TeamsFileConsent, - - /// - /// Animation cards - /// - Animation, - - /// - /// Audio cards - /// - Audio, - - /// - /// Video cards - /// - Video, - - /// - /// Adaptive update cards - /// - AdaptiveUpdate, - - /// - /// Ends the card selection dialog - /// - End - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/CardSampleHelper.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/CardSampleHelper.cs deleted file mode 100644 index 8ae3df2ada..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/CardSampleHelper.cs +++ /dev/null @@ -1,508 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using AdaptiveCards; -using Microsoft.Bot.Schema; -using Microsoft.Bot.Schema.Teams; -using Newtonsoft.Json.Linq; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Cards -{ - public static class CardSampleHelper - { - public static AdaptiveCard CreateAdaptiveCardBotAction() - { - var adaptiveCard = new AdaptiveCard(new AdaptiveSchemaVersion(1, 2)); - adaptiveCard.Body.Add(new AdaptiveTextBlock("Bot Builder actions")); - - var action1 = new CardAction(ActionTypes.ImBack, "imBack", null, null, null, "text"); - var action2 = new CardAction(ActionTypes.MessageBack, "message back", null, null, null, JObject.Parse(@"{ ""key"" : ""value"" }")); - var action3 = new CardAction(ActionTypes.MessageBack, "message back local echo", null, "text received by bots", "display text message back", JObject.Parse(@"{ ""key"" : ""value"" }")); - var action4 = new CardAction("invoke", "invoke", null, null, null, JObject.Parse(@"{ ""key"" : ""value"" }")); - - adaptiveCard.Actions.Add(action1.ToAdaptiveCardAction()); - adaptiveCard.Actions.Add(action2.ToAdaptiveCardAction()); - adaptiveCard.Actions.Add(action3.ToAdaptiveCardAction()); - adaptiveCard.Actions.Add(action4.ToAdaptiveCardAction()); - - return adaptiveCard; - } - - public static AdaptiveCard CreateAdaptiveCardTaskModule() - { - var taskModuleAction = new TaskModuleAction("Launch Task Module", @"{ ""hiddenKey"": ""hidden value from task module launcher"" }"); - - var adaptiveCard = new AdaptiveCard(new AdaptiveSchemaVersion(1, 2)); - adaptiveCard.Body.Add(new AdaptiveTextBlock("Task Module Adaptive Card")); - adaptiveCard.Actions.Add(taskModuleAction.ToAdaptiveCardAction()); - - return adaptiveCard; - } - - public static AdaptiveCard CreateAdaptiveCardSubmit() - { - var adaptiveCard = new AdaptiveCard(new AdaptiveSchemaVersion(1, 2)); - adaptiveCard.Body.Add(new AdaptiveTextBlock("Bot Builder actions")); - adaptiveCard.Body.Add(new AdaptiveTextInput { Id = "x" }); - adaptiveCard.Actions.Add(new AdaptiveSubmitAction { Type = "Action.Submit", Title = "Action.Submit", Data = new JObject { { "key", "value" } } }); - - return adaptiveCard; - } - - public static Attachment CreateTaskModuleHeroCard() - { - return new HeroCard() - { - Title = "Task Module Invocation from Hero Card", - Subtitle = "This is a hero card with a Task Module Action button. Click the button to show an Adaptive Card within a Task Module.", - Buttons = new List() - { - new TaskModuleAction("Adaptive Card", new { data = "adaptivecard" }), - }, - }.ToAttachment(); - } - - public static SampleData CreateSampleData(AdaptiveCard adaptiveCard) - { - if (adaptiveCard == null) - { - throw new ArgumentNullException(nameof(adaptiveCard)); - } - - if (adaptiveCard.Body.Count < 4) - { - throw new Exception("Adaptive Card Body contains too few elements"); - } - - var userText = (adaptiveCard.Body[1] as AdaptiveTextBlock)?.Text; - var choiceSet = adaptiveCard.Body[3] as AdaptiveChoiceSetInput; - - if (choiceSet?.Choices?.Count < 3) - { - throw new Exception("Adaptive Card Body[3] contains too few choice elements"); - } - - return new SampleData - { - Question = userText, - MultiSelect = choiceSet.IsMultiSelect ? "true" : "false", - Option1 = choiceSet.Choices[0].Title, - Option2 = choiceSet.Choices[1].Title, - Option3 = choiceSet.Choices[2].Title, - }; - } - - public static AdaptiveCard CreateAdaptiveCardEditor(SampleData sampleData = null) - { - var cardData = sampleData ?? new SampleData(); - - return new AdaptiveCard(new AdaptiveSchemaVersion(1, 2)) - { - Body = new List - { - new AdaptiveTextBlock("This is an Adaptive Card within a Task Module") - { - Weight = AdaptiveTextWeight.Bolder, - }, - new AdaptiveTextBlock("Enter text for Question:"), - new AdaptiveTextInput() { Id = "Question", Placeholder = "Question text here", Value = cardData.Question }, - new AdaptiveTextBlock("Options for Question:"), - new AdaptiveTextBlock("Is Multi-Select:"), - new AdaptiveChoiceSetInput - { - Type = AdaptiveChoiceSetInput.TypeName, - Id = "MultiSelect", - Value = cardData.MultiSelect, - IsMultiSelect = false, - Choices = new List - { - new AdaptiveChoice() { Title = "True", Value = "true" }, - new AdaptiveChoice() { Title = "False", Value = "false" }, - }, - }, - new AdaptiveTextInput() { Id = "Option1", Placeholder = "Option 1 here", Value = cardData.Option1 }, - new AdaptiveTextInput() { Id = "Option2", Placeholder = "Option 2 here", Value = cardData.Option2 }, - new AdaptiveTextInput() { Id = "Option3", Placeholder = "Option 3 here", Value = cardData.Option3 }, - }, - Actions = new List - { - new AdaptiveSubmitAction - { - Type = AdaptiveSubmitAction.TypeName, - Title = "Submit", - Data = new JObject { { "submitLocation", "messagingExtensionFetchTask" } }, - }, - }, - }; - } - - public static AdaptiveCard CreateAdaptiveCard(SampleData data) - { - if (data == null) - { - throw new ArgumentNullException(nameof(data)); - } - - return new AdaptiveCard(new AdaptiveSchemaVersion(1, 2)) - { - Body = new List - { - new AdaptiveTextBlock("Adaptive Card from Task Module") { Weight = AdaptiveTextWeight.Bolder }, - new AdaptiveTextBlock($"{data.Question}") { Id = "Question" }, - new AdaptiveTextInput() { Id = "Answer", Placeholder = "Answer here..." }, - new AdaptiveChoiceSetInput - { - Type = AdaptiveChoiceSetInput.TypeName, - Id = "Choices", - IsMultiSelect = bool.Parse(data.MultiSelect), - Choices = new List - { - new AdaptiveChoice() { Title = data.Option1, Value = data.Option1 }, - new AdaptiveChoice() { Title = data.Option2, Value = data.Option2 }, - new AdaptiveChoice() { Title = data.Option3, Value = data.Option3 }, - }, - }, - }, - Actions = new List - { - new AdaptiveSubmitAction - { - Type = AdaptiveSubmitAction.TypeName, - Title = "Submit", - Data = new JObject { { "submitLocation", "messagingExtensionSubmit" } }, - }, - }, - }; - } - - public static HeroCard CreateHeroCard() - { - var heroCard = new HeroCard - { - Title = "BotFramework Hero Card", - Subtitle = "Microsoft Bot Framework", - Text = "Build and connect intelligent bots to interact with your users naturally wherever they are," + - " from text/sms to Skype, Slack, Office 365 mail and other popular services.", - Images = new List { new CardImage("https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg") }, - Buttons = new List { new CardAction(ActionTypes.OpenUrl, "Get Started", value: "https://docs.microsoft.com/bot-framework") }, - }; - - return heroCard; - } - - public static HeroCard CreateHeroCard(string type) - { - var heroCard = new HeroCard - { - Title = "BotFramework Hero Card", - Subtitle = "Microsoft Bot Framework", - Text = "Build and connect intelligent bots to interact with your users naturally wherever they are," + - " from text/sms to Skype, Slack, Office 365 mail and other popular services.", - Images = new List { new CardImage("https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg") }, - Buttons = new List { new CardAction(ActionTypes.OpenUrl, "Get Started", value: "https://docs.microsoft.com/bot-framework") }, - }; - - return heroCard; - } - - public static ThumbnailCard CreateThumbnailCard() - { - var heroCard = new ThumbnailCard - { - Title = "BotFramework Thumbnail Card", - Subtitle = "Microsoft Bot Framework", - Text = "Build and connect intelligent bots to interact with your users naturally wherever they are," + - " from text/sms to Skype, Slack, Office 365 mail and other popular services.", - Images = new List { new CardImage("https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg") }, - Buttons = new List { new CardAction(ActionTypes.OpenUrl, "Get Started", value: "https://docs.microsoft.com/bot-framework") }, - }; - - return heroCard; - } - - public static ReceiptCard CreateReceiptCard() - { - var receiptCard = new ReceiptCard - { - Title = "John Doe", - Facts = new List { new Fact("Order Number", "1234"), new Fact("Payment Method", "VISA 5555-****") }, - Items = new List - { - new ReceiptItem( - "Data Transfer", - price: "$ 38.45", - quantity: "368", - image: new CardImage(url: "https://github.com/amido/azure-vector-icons/raw/master/renders/traffic-manager.png")), - new ReceiptItem( - "App Service", - price: "$ 45.00", - quantity: "720", - image: new CardImage(url: "https://github.com/amido/azure-vector-icons/raw/master/renders/cloud-service.png")), - }, - Tax = "$ 7.50", - Total = "$ 90.95", - Buttons = new List - { - new CardAction( - ActionTypes.OpenUrl, - "More information", - "https://account.windowsazure.com/content/6.10.1.38-.8225.160809-1618/aux-pre/images/offer-icon-freetrial.png", - value: "https://azure.microsoft.com/en-us/pricing/"), - }, - }; - - return receiptCard; - } - - public static SigninCard CreateSigninCard() - { - var signinCard = new SigninCard - { - Text = "BotFramework Sign-in Card", - Buttons = new List { new CardAction(ActionTypes.Signin, "Sign-in", value: "https://login.microsoftonline.com/") }, - }; - - return signinCard; - } - - public static O365ConnectorCard CreateSampleO365ConnectorCard() - { - var actionCard1 = new O365ConnectorCardActionCard( - O365ConnectorCardActionCard.Type, - "Multiple Choice", - "card-1", - new List - { - new O365ConnectorCardMultichoiceInput( - O365ConnectorCardMultichoiceInput.Type, - "list-1", - true, - "Pick multiple options", - null, - new List - { - new O365ConnectorCardMultichoiceInputChoice("Choice 1", "1"), - new O365ConnectorCardMultichoiceInputChoice("Choice 2", "2"), - new O365ConnectorCardMultichoiceInputChoice("Choice 3", "3") - }, - "expanded", - true), - new O365ConnectorCardMultichoiceInput( - O365ConnectorCardMultichoiceInput.Type, - "list-2", - true, - "Pick multiple options", - null, - new List - { - new O365ConnectorCardMultichoiceInputChoice("Choice 4", "4"), - new O365ConnectorCardMultichoiceInputChoice("Choice 5", "5"), - new O365ConnectorCardMultichoiceInputChoice("Choice 6", "6") - }, - "compact", - true), - new O365ConnectorCardMultichoiceInput( - O365ConnectorCardMultichoiceInput.Type, - "list-3", - false, - "Pick an option", - null, - new List - { - new O365ConnectorCardMultichoiceInputChoice("Choice a", "a"), - new O365ConnectorCardMultichoiceInputChoice("Choice b", "b"), - new O365ConnectorCardMultichoiceInputChoice("Choice c", "c") - }, - "expanded", - false), - new O365ConnectorCardMultichoiceInput( - O365ConnectorCardMultichoiceInput.Type, - "list-4", - false, - "Pick an option", - null, - new List - { - new O365ConnectorCardMultichoiceInputChoice("Choice x", "x"), - new O365ConnectorCardMultichoiceInputChoice("Choice y", "y"), - new O365ConnectorCardMultichoiceInputChoice("Choice z", "z") - }, - "compact", - false) - }, - new List - { - new O365ConnectorCardHttpPOST( - O365ConnectorCardHttpPOST.Type, - "Send", - "card-1-btn-1", - @"{""list1"":""{{list-1.value}}"", ""list2"":""{{list-2.value}}"", ""list3"":""{{list-3.value}}"", ""list4"":""{{list-4.value}}""}") - }); - - var actionCard2 = new O365ConnectorCardActionCard( - O365ConnectorCardActionCard.Type, - "Text Input", - "card-2", - new List - { - new O365ConnectorCardTextInput( - O365ConnectorCardTextInput.Type, - "text-1", - false, - "multiline, no maxLength", - null, - true, - null), - new O365ConnectorCardTextInput( - O365ConnectorCardTextInput.Type, - "text-2", - false, - "single line, no maxLength", - null, - false, - null), - new O365ConnectorCardTextInput( - O365ConnectorCardTextInput.Type, - "text-3", - true, - "multiline, max len = 10, isRequired", - null, - true, - 10), - new O365ConnectorCardTextInput( - O365ConnectorCardTextInput.Type, - "text-4", - true, - "single line, max len = 10, isRequired", - null, - false, - 10) - }, - new List - { - new O365ConnectorCardHttpPOST( - O365ConnectorCardHttpPOST.Type, - "Send", - "card-2-btn-1", - @"{""text1"":""{{text-1.value}}"", ""text2"":""{{text-2.value}}"", ""text3"":""{{text-3.value}}"", ""text4"":""{{text-4.value}}""}") - }); - - var actionCard3 = new O365ConnectorCardActionCard( - O365ConnectorCardActionCard.Type, - "Date Input", - "card-3", - new List - { - new O365ConnectorCardDateInput( - O365ConnectorCardDateInput.Type, - "date-1", - true, - "date with time", - null, - true), - new O365ConnectorCardDateInput( - O365ConnectorCardDateInput.Type, - "date-2", - false, - "date only", - null, - false) - }, - new List - { - new O365ConnectorCardHttpPOST( - O365ConnectorCardHttpPOST.Type, - "Send", - "card-3-btn-1", - @"{""date1"":""{{date-1.value}}"", ""date2"":""{{date-2.value}}""}") - }); - - var section = new O365ConnectorCardSection( - "**section title**", - "section text", - "activity title", - "activity subtitle", - "activity text", - "http://connectorsdemo.azurewebsites.net/images/MSC12_Oscar_002.jpg", - "avatar", - true, - new List - { - new O365ConnectorCardFact("Fact name 1", "Fact value 1"), - new O365ConnectorCardFact("Fact name 2", "Fact value 2"), - }, - new List - { - new O365ConnectorCardImage - { - Image = "http://connectorsdemo.azurewebsites.net/images/MicrosoftSurface_024_Cafe_OH-06315_VS_R1c.jpg", - Title = "image 1" - }, - new O365ConnectorCardImage - { - Image = "http://connectorsdemo.azurewebsites.net/images/WIN12_Scene_01.jpg", - Title = "image 2" - }, - new O365ConnectorCardImage - { - Image = "http://connectorsdemo.azurewebsites.net/images/WIN12_Anthony_02.jpg", - Title = "image 3" - } - }); - - var card = new O365ConnectorCard() - { - Summary = "O365 card summary", - ThemeColor = "#E67A9E", - Title = "card title", - Text = "card text", - Sections = new List { section }, - PotentialAction = new List - { - actionCard1, - actionCard2, - actionCard3, - new O365ConnectorCardViewAction( - O365ConnectorCardViewAction.Type, - "View Action", - null, - new List - { - "http://microsoft.com" - }), - new O365ConnectorCardOpenUri( - O365ConnectorCardOpenUri.Type, - "Open Uri", - "open-uri", - new List - { - new O365ConnectorCardOpenUriTarget - { - Os = "default", - Uri = "http://microsoft.com" - }, - new O365ConnectorCardOpenUriTarget - { - Os = "iOS", - Uri = "http://microsoft.com" - }, - new O365ConnectorCardOpenUriTarget - { - Os = "android", - Uri = "http://microsoft.com" - }, - new O365ConnectorCardOpenUriTarget - { - Os = "windows", - Uri = "http://microsoft.com" - } - }) - } - }; - - return card; - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/ChannelSupportedCards.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/ChannelSupportedCards.cs deleted file mode 100644 index 426c3c118b..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/ChannelSupportedCards.cs +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Collections.Generic; -using Microsoft.Bot.Connector; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Cards -{ - public static class ChannelSupportedCards - { - /// - /// This tracks what cards are not supported in a given channel. - /// - private static readonly Dictionary> UnsupportedChannelCards = new Dictionary> - { - { - Channels.Emulator, new List - { - CardOptions.AdaptiveCardTeamsTaskModule, - CardOptions.AdaptiveUpdate, - CardOptions.O365, - CardOptions.TeamsFileConsent - } - }, - { Channels.Directline, new List { CardOptions.AdaptiveUpdate } }, - { - Channels.Telegram, new List - { - CardOptions.AdaptiveCardBotAction, - CardOptions.AdaptiveCardTeamsTaskModule, - CardOptions.AdaptiveCardSubmitAction, - CardOptions.List, - CardOptions.TeamsFileConsent - } - } - }; - - /// - /// This let's you know if a card is supported in a given channel. - /// - /// Bot Connector Channel. - /// Card Option to be checked. - /// A bool if the card is supported in the channel. - public static bool IsCardSupported(string channel, CardOptions type) - { - if (UnsupportedChannelCards.ContainsKey(channel)) - { - if (UnsupportedChannelCards[channel].Contains(type)) - { - return false; - } - } - - return true; - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/Files/buildreactionbotframework.jpg b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/Files/buildreactionbotframework.jpg deleted file mode 100644 index f410fc137e4d78ef6934f7a06f7b0e50b7b45267..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65992 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
  • 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%0D`!{J7<*jP93$p#* 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 b7On43EM4=dB^(`JDI-si{pp%v_$nOfp(Kaus+ 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 z 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 - /// Stores the information needed to resume a conversation when a proactive message arrives. - /// - public class ContinuationParameters - { - public IIdentity ClaimsIdentity { get; set; } - - public string OAuthScope { get; set; } - - public ConversationReference ConversationReference { get; set; } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Proactive/WaitForProactiveDialog.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Proactive/WaitForProactiveDialog.cs deleted file mode 100644 index aa6cf4b55a..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Proactive/WaitForProactiveDialog.cs +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Concurrent; -using System.Security.Principal; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Schema; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Proactive -{ - public class WaitForProactiveDialog : Dialog - { - // Message to send to users when the bot receives a Conversation Update event - private const string NotifyMessage = "Navigate to {0}api/notify?user={1} to proactively message the user."; - private readonly ConcurrentDictionary _continuationParametersStore; - - private readonly Uri _serverUrl; - - public WaitForProactiveDialog(IHttpContextAccessor httpContextAccessor, ConcurrentDictionary continuationParametersStore) - { - _continuationParametersStore = continuationParametersStore; - _serverUrl = new Uri($"{httpContextAccessor.HttpContext.Request.Scheme}://{httpContextAccessor.HttpContext.Request.Host.Value}"); - } - - public override async Task BeginDialogAsync(DialogContext dc, object options = null, CancellationToken cancellationToken = default) - { - // Store a reference to the conversation. - AddOrUpdateContinuationParameters(dc.Context); - - // Render message with continuation link. - await dc.Context.SendActivityAsync(MessageFactory.Text(string.Format(NotifyMessage, _serverUrl, dc.Context.Activity.From.Id)), cancellationToken); - return EndOfTurn; - } - - public override async Task ContinueDialogAsync(DialogContext dc, CancellationToken cancellationToken = default) - { - if (dc.Context.Activity.Type == ActivityTypes.Event && dc.Context.Activity.Name == ActivityEventNames.ContinueConversation) - { - // We continued the conversation, forget the proactive reference. - _continuationParametersStore.TryRemove(dc.Context.Activity.From.Id, out _); - - // The continue conversation activity comes from the ProactiveController when the notification is received - await dc.Context.SendActivityAsync("We received a proactive message, ending the dialog", cancellationToken: cancellationToken); - - // End the dialog so the host gets an EoC - return new DialogTurnResult(DialogTurnStatus.Complete); - } - - // Keep waiting for a call to the ProactiveController. - await dc.Context.SendActivityAsync($"We are waiting for a proactive message. {string.Format(NotifyMessage, _serverUrl, dc.Context.Activity.From.Id)}", cancellationToken: cancellationToken); - - return EndOfTurn; - } - - /// - /// Helper to extract and store parameters we need to continue a conversation from a proactive message. - /// - /// A turnContext instance with the parameters we need. - private void AddOrUpdateContinuationParameters(ITurnContext turnContext) - { - var continuationParameters = new ContinuationParameters - { - ClaimsIdentity = turnContext.TurnState.Get(BotAdapter.BotIdentityKey), - ConversationReference = turnContext.Activity.GetConversationReference(), - OAuthScope = turnContext.TurnState.Get(BotAdapter.OAuthScopeKey) - }; - - _continuationParametersStore.AddOrUpdate(turnContext.Activity.From.Id, continuationParameters, (_, __) => continuationParameters); - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Sso/SsoSkillDialog.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Sso/SsoSkillDialog.cs deleted file mode 100644 index 90add0aca3..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Sso/SsoSkillDialog.cs +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Builder.Dialogs.Choices; -using Microsoft.Bot.Schema; -using Microsoft.Extensions.Configuration; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Sso -{ - public class SsoSkillDialog : ComponentDialog - { - private readonly string _connectionName; - - public SsoSkillDialog(IConfiguration configuration) - : base(nameof(SsoSkillDialog)) - { - _connectionName = configuration.GetSection("SsoConnectionName")?.Value; - AddDialog(new SsoSkillSignInDialog(_connectionName)); - AddDialog(new ChoicePrompt("ActionStepPrompt")); - - var waterfallSteps = new WaterfallStep[] - { - PromptActionStepAsync, - HandleActionStepAsync, - PromptFinalStepAsync - }; - - AddDialog(new WaterfallDialog(nameof(WaterfallDialog), waterfallSteps)); - - InitialDialogId = nameof(WaterfallDialog); - } - - private async Task PromptActionStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - const string messageText = "What SSO action would you like to perform on the skill?"; - const string repromptMessageText = "That was not a valid choice, please select a valid choice."; - var options = new PromptOptions - { - Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), - RetryPrompt = MessageFactory.Text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput), - Choices = await GetPromptChoicesAsync(stepContext, cancellationToken) - }; - - // Prompt the user to select a skill. - return await stepContext.PromptAsync("ActionStepPrompt", options, cancellationToken); - } - - private async Task> GetPromptChoicesAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - var promptChoices = new List(); - var adapter = (IUserTokenProvider)stepContext.Context.Adapter; - var token = await adapter.GetUserTokenAsync(stepContext.Context, _connectionName, null, cancellationToken); - - if (token == null) - { - promptChoices.Add(new Choice("Login")); - } - else - { - promptChoices.Add(new Choice("Logout")); - promptChoices.Add(new Choice("Show token")); - } - - promptChoices.Add(new Choice("End")); - - return promptChoices; - } - - private async Task HandleActionStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - var action = ((FoundChoice)stepContext.Result).Value.ToLowerInvariant(); - - switch (action) - { - case "login": - return await stepContext.BeginDialogAsync(nameof(SsoSkillSignInDialog), null, cancellationToken); - - case "logout": - var adapter = (IUserTokenProvider)stepContext.Context.Adapter; - await adapter.SignOutUserAsync(stepContext.Context, _connectionName, cancellationToken: cancellationToken); - await stepContext.Context.SendActivityAsync("You have been signed out.", cancellationToken: cancellationToken); - return await stepContext.NextAsync(cancellationToken: cancellationToken); - - case "show token": - var tokenProvider = (IUserTokenProvider)stepContext.Context.Adapter; - var token = await tokenProvider.GetUserTokenAsync(stepContext.Context, _connectionName, null, cancellationToken); - if (token == null) - { - await stepContext.Context.SendActivityAsync("User has no cached token.", cancellationToken: cancellationToken); - } - else - { - await stepContext.Context.SendActivityAsync($"Here is your current SSO token: {token.Token}", cancellationToken: cancellationToken); - } - - return await stepContext.NextAsync(cancellationToken: cancellationToken); - - case "end": - return new DialogTurnResult(DialogTurnStatus.Complete); - - default: - // This should never be hit since the previous prompt validates the choice - throw new InvalidOperationException($"Unrecognized action: {action}"); - } - } - - private async Task PromptFinalStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - // Restart the dialog (we will exit when the user says end) - return await stepContext.ReplaceDialogAsync(InitialDialogId, null, cancellationToken); - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Sso/SsoSkillSignInDialog.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Sso/SsoSkillSignInDialog.cs deleted file mode 100644 index 61c57301dc..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Sso/SsoSkillSignInDialog.cs +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Schema; -using Microsoft.Extensions.Configuration; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Sso -{ - public class SsoSkillSignInDialog : ComponentDialog - { - public SsoSkillSignInDialog(string connectionName) - : base(nameof(SsoSkillSignInDialog)) - { - AddDialog(new OAuthPrompt(nameof(OAuthPrompt), new OAuthPromptSettings - { - ConnectionName = connectionName, - Text = "Sign in to the Skill using AAD", - Title = "Sign In" - })); - AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[] { SignInStepAsync, DisplayTokenAsync })); - InitialDialogId = nameof(WaterfallDialog); - } - - private async Task SignInStepAsync(WaterfallStepContext context, CancellationToken cancellationToken) - { - // This prompt won't show if the user is signed in to the host using SSO. - return await context.BeginDialogAsync(nameof(OAuthPrompt), null, cancellationToken); - } - - private async Task DisplayTokenAsync(WaterfallStepContext context, CancellationToken cancellationToken) - { - if (!(context.Result is TokenResponse result)) - { - await context.Context.SendActivityAsync("No token was provided for the skill.", cancellationToken: cancellationToken); - } - else - { - await context.Context.SendActivityAsync($"Here is your token for the skill: {result.Token}", cancellationToken: cancellationToken); - } - - return await context.EndDialogAsync(null, cancellationToken); - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Update/UpdateDialog.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Update/UpdateDialog.cs deleted file mode 100644 index 1ec0a5217d..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Update/UpdateDialog.cs +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Connector; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Update -{ - public class UpdateDialog : ComponentDialog - { - private readonly List _updateSupported = new List - { - Channels.Msteams, - Channels.Slack, - Channels.Telegram - }; - - private readonly Dictionary _updateTracker; - - public UpdateDialog() - : base(nameof(UpdateDialog)) - { - _updateTracker = new Dictionary(); - AddDialog(new ConfirmPrompt(nameof(ConfirmPrompt))); - AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[] { HandleUpdateDialog, FinalStepAsync })); - InitialDialogId = nameof(WaterfallDialog); - } - - private async Task HandleUpdateDialog(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - var channel = stepContext.Context.Activity.ChannelId; - if (_updateSupported.Contains(channel)) - { - if (_updateTracker.ContainsKey(stepContext.Context.Activity.Conversation.Id)) - { - var conversationId = stepContext.Context.Activity.Conversation.Id; - var tuple = _updateTracker[conversationId]; - var activity = MessageFactory.Text($"This message has been updated {tuple.Item2} time(s)."); - tuple.Item2 += 1; - activity.Id = tuple.Item1; - _updateTracker[conversationId] = tuple; - await stepContext.Context.UpdateActivityAsync(activity, cancellationToken); - } - else - { - var id = await stepContext.Context.SendActivityAsync(MessageFactory.Text("Here is the original activity"), cancellationToken); - _updateTracker.Add(stepContext.Context.Activity.Conversation.Id, (id.Id, 1)); - } - } - else - { - await stepContext.Context.SendActivityAsync(MessageFactory.Text($"Delete is not supported in the {channel} channel."), cancellationToken); - return new DialogTurnResult(DialogTurnStatus.Complete); - } - - // Ask if we want to update the activity again. - const string messageText = "Do you want to update the activity again?"; - const string repromptMessageText = "Please select a valid answer"; - var options = new PromptOptions - { - Prompt = MessageFactory.Text(messageText, messageText), - RetryPrompt = MessageFactory.Text(repromptMessageText, repromptMessageText), - }; - - // Ask the user to enter their name. - return await stepContext.PromptAsync(nameof(ConfirmPrompt), options, cancellationToken); - } - - private async Task FinalStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - var tryAnother = (bool)stepContext.Result; - if (tryAnother) - { - return await stepContext.ReplaceDialogAsync(InitialDialogId, cancellationToken: cancellationToken); - } - - _updateTracker.Remove(stepContext.Context.Activity.Conversation.Id); - return new DialogTurnResult(DialogTurnStatus.Complete); - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Middleware/SsoSaveStateMiddleware.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Middleware/SsoSaveStateMiddleware.cs deleted file mode 100644 index f0fb5e5bad..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Middleware/SsoSaveStateMiddleware.cs +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Schema; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Middleware -{ - /// - /// A middleware that ensures conversation state is saved when an OAuthCard is returned by the skill. - /// - /// - /// In SSO, the host will send an Invoke with the token if SSO is enabled. - /// This middleware saves the state of the bot before sending out the SSO card to ensure the dialog state - /// is persisted and in the right state if an InvokeActivity comes back from the Host with the token. - /// - public class SsoSaveStateMiddleware : IMiddleware - { - private readonly ConversationState _conversationState; - - public SsoSaveStateMiddleware(ConversationState conversationState) - { - _conversationState = conversationState; - } - - public async Task OnTurnAsync(ITurnContext turnContext, NextDelegate next, CancellationToken cancellationToken = new CancellationToken()) - { - // Register outgoing handler. - turnContext.OnSendActivities(OutgoingHandler); - - // Continue processing messages. - await next(cancellationToken); - } - - private async Task OutgoingHandler(ITurnContext turnContext, List activities, Func> next) - { - foreach (var activity in activities) - { - // Check if any of the outgoing activities has an OAuthCard. - if (activity.Attachments != null && activity.Attachments.Any(attachment => attachment.ContentType == OAuthCard.ContentType)) - { - // Save any state changes so the dialog stack is ready for SSO exchanges. - await _conversationState.SaveChangesAsync(turnContext, false, CancellationToken.None); - } - } - - return await next(); - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Program.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Program.cs deleted file mode 100644 index 31e4c693d2..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Program.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Hosting; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot -{ - public class Program - { - public static void Main(string[] args) - { - CreateHostBuilder(args).Build().Run(); - } - - public static IHostBuilder CreateHostBuilder(string[] args) => - Host.CreateDefaultBuilder(args) - .ConfigureWebHostDefaults(webBuilder => - { - webBuilder.UseStartup(); - }); - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Properties/launchSettings.json b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Properties/launchSettings.json deleted file mode 100644 index f3bdbffd6c..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Properties/launchSettings.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "$schema": "http://json.schemastore.org/launchsettings.json", - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:35420/", - "sslPort": 0 - } - }, - "profiles": { - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": false, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "WaterfallSkillBotDotNet": { - "commandName": "Project", - "launchBrowser": true, - "applicationUrl": "http://localhost:35420/", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/SkillAdapterWithErrorHandler.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/SkillAdapterWithErrorHandler.cs deleted file mode 100644 index a4098b193c..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/SkillAdapterWithErrorHandler.cs +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Threading.Tasks; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.Bot.Builder.TraceExtensions; -using Microsoft.Bot.Connector.Authentication; -using Microsoft.Bot.Schema; -using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Middleware; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Logging; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot -{ - public class SkillAdapterWithErrorHandler : BotFrameworkHttpAdapter - { - private readonly ConversationState _conversationState; - private readonly ILogger _logger; - - public SkillAdapterWithErrorHandler(IConfiguration configuration, ICredentialProvider credentialProvider, AuthenticationConfiguration authConfig, ILogger logger, ConversationState conversationState) - : base(configuration, credentialProvider, authConfig, logger: logger) - { - _conversationState = conversationState ?? throw new ArgumentNullException(nameof(conversationState)); - _logger = logger ?? throw new ArgumentNullException(nameof(logger)); - OnTurnError = HandleTurnError; - - // Add autosave middleware for SSO. - Use(new SsoSaveStateMiddleware(_conversationState)); - } - - private async Task HandleTurnError(ITurnContext turnContext, Exception exception) - { - // Log any leaked exception from the application. - _logger.LogError(exception, $"[OnTurnError] unhandled error : {exception.Message}"); - - await SendErrorMessageAsync(turnContext, exception); - await SendEoCToParentAsync(turnContext, exception); - await ClearConversationStateAsync(turnContext); - } - - private async Task SendErrorMessageAsync(ITurnContext turnContext, Exception exception) - { - try - { - // Send a message to the user. - var errorMessageText = "The skill encountered an error or bug."; - var errorMessage = MessageFactory.Text(errorMessageText + Environment.NewLine + exception, errorMessageText, InputHints.IgnoringInput); - errorMessage.Value = exception; - await turnContext.SendActivityAsync(errorMessage); - - errorMessageText = "To continue to run this bot, please fix the bot source code."; - errorMessage = MessageFactory.Text(errorMessageText, errorMessageText, InputHints.ExpectingInput); - await turnContext.SendActivityAsync(errorMessage); - - // Send a trace activity, which will be displayed in the Bot Framework Emulator. - // Note: we return the entire exception in the value property to help the developer; - // this should not be done in production. - await turnContext.TraceActivityAsync("OnTurnError Trace", exception.ToString(), "https://www.botframework.com/schemas/error", "TurnError"); - } - catch (Exception ex) - { - _logger.LogError(ex, $"Exception caught in SendErrorMessageAsync : {ex}"); - } - } - - private async Task SendEoCToParentAsync(ITurnContext turnContext, Exception exception) - { - try - { - // Send an EndOfConversation activity to the skill caller with the error to end the conversation, - // and let the caller decide what to do. - var endOfConversation = Activity.CreateEndOfConversationActivity(); - endOfConversation.Code = "SkillError"; - endOfConversation.Text = exception.Message; - await turnContext.SendActivityAsync(endOfConversation); - } - catch (Exception ex) - { - _logger.LogError(ex, $"Exception caught in SendEoCToParentAsync : {ex}"); - } - } - - private async Task ClearConversationStateAsync(ITurnContext turnContext) - { - try - { - // Delete the conversationState for the current conversation to prevent the - // bot from getting stuck in a error-loop caused by being in a bad state. - // ConversationState should be thought of as similar to "cookie-state" for a Web page. - await _conversationState.DeleteAsync(turnContext); - } - catch (Exception ex) - { - _logger.LogError(ex, $"Exception caught on attempting to Delete ConversationState : {ex}"); - } - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Startup.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Startup.cs deleted file mode 100644 index 7405acb74d..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Startup.cs +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Collections.Concurrent; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.BotFramework; -using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.Bot.Builder.Integration.AspNet.Core.Skills; -using Microsoft.Bot.Builder.Skills; -using Microsoft.Bot.Connector.Authentication; -using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Authentication; -using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Bots; -using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs; -using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Proactive; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot -{ - public class Startup - { - public Startup(IConfiguration configuration) - { - Configuration = configuration; - } - - public IConfiguration Configuration { get; } - - // This method gets called by the runtime. Use this method to add services to the container. - public void ConfigureServices(IServiceCollection services) - { - services.AddControllers() - .AddNewtonsoftJson(); - - // Configure credentials. - services.AddSingleton(); - if (!string.IsNullOrEmpty(Configuration["ChannelService"])) - { - // Register a ConfigurationChannelProvider -- this is only for Azure Gov. - services.AddSingleton(); - } - - // Register AuthConfiguration to enable custom claim validation. - services.AddSingleton(sp => new AuthenticationConfiguration { ClaimsValidator = new Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Authentication.AllowedCallersClaimsValidator(sp.GetService()) }); - - // Register the Bot Framework Adapter with error handling enabled. - // Note: some classes use the base BotAdapter so we add an extra registration that pulls the same instance. - services.AddSingleton(); - services.AddSingleton(sp => sp.GetService()); - - // Register the skills conversation ID factory, the client and the request handler. - services.AddSingleton(); - services.AddHttpClient(); - services.AddSingleton(); - - // Create the storage we'll be using for User and Conversation state. (Memory is great for testing purposes.) - services.AddSingleton(); - - // Create the Conversation state. (Used by the Dialog system itself.) - services.AddSingleton(); - - // The Dialog that will be run by the bot. - services.AddSingleton(); - - // The Bot needs an HttpClient to download and upload files. - services.AddHttpClient(); - - // Create a global dictionary for our ConversationReferences (used by proactive) - services.AddSingleton>(); - - // Create the bot as a transient. In this case the ASP Controller is expecting an IBot. - services.AddTransient>(); - - // Gives us access to HttpContext so we can create URLs with the host name. - services.AddHttpContextAccessor(); - } - - // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IWebHostEnvironment env) - { - if (env.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); - } - - app.UseDefaultFiles() - .UseStaticFiles() - .UseWebSockets() - .UseRouting() - .UseAuthorization() - .UseEndpoints(endpoints => - { - endpoints.MapControllers(); - }); - - // Uncomment this to support HTTPS. - // app.UseHttpsRedirection(); - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/WaterfallSkillBot.csproj b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/WaterfallSkillBot.csproj deleted file mode 100644 index a534c34089..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/WaterfallSkillBot.csproj +++ /dev/null @@ -1,46 +0,0 @@ - - - - netcoreapp3.1 - latest - Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot - Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot - cca62821-0d1d-4b4d-8e5b-8ee934324a2c - - - - - - - - - - PreserveNewest - - - PreserveNewest - - - - - - - - - - - - - - - Always - - - Always - - - PreserveNewest - - - - \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/appsettings.json b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/appsettings.json deleted file mode 100644 index aeba3b0618..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/appsettings.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "MicrosoftAppId": "", - "MicrosoftAppPassword": "", - "ConnectionName": "TestOAuthProvider", - "SsoConnectionName": "", - "ChannelService": "", - // This is a comma separate list with the App IDs that will have access to the skill. - // This setting is used in AllowedCallersClaimsValidator. - // Examples: - // [ "*" ] allows all callers. - // [ "AppId1", "AppId2" ] only allows access to parent bots with "AppId1" and "AppId2". - "AllowedCallers": [ "*" ], - - "SkillHostEndpoint": "http://localhost:35420/api/skills", - "EchoSkillInfo": { - "Id": "EchoSkillBot", - "AppId": "", - "SkillEndpoint": "http://localhost:35400/api/messages" - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/wwwroot/default.htm b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/wwwroot/default.htm deleted file mode 100644 index 53166d3e75..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/wwwroot/default.htm +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - - WaterfallSkillBot - - - - - -
    -
    -
    -
    WaterfallSkillBot Bot
    -
    -
    -
    -
    - -
    - - - \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/wwwroot/images/architecture-resize.png b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/wwwroot/images/architecture-resize.png deleted file mode 100644 index e65f0f7332b79a3f65cd5a4ea6c33c7b5f979f25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137666 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%0DQgMmd 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

    paC55m_>ryRNvbU22jABe5< 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 zak - - - true - - - - - $(NoWarn);SA1412;NU1701 - - - - - - \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/.gitignore b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/.gitignore deleted file mode 100644 index eaa9cf70cc..0000000000 --- a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# files generated during the lubuild process -# IMPORTANT: In regular composer bots the generated folder should be excluded and regenerated on the build server -# or by the dev running composer locally. But in this case we include it so we don't have to run bf luis:cross-train -# in the build server -# generated/ diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Controllers/BotController.cs b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Controllers/BotController.cs deleted file mode 100644 index c9bccdb753..0000000000 --- a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Controllers/BotController.cs +++ /dev/null @@ -1,76 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime.Settings; -using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Logging; - -namespace EchoSkillBotComposer.Controllers -{ - // This ASP Controller is created to handle a request. Dependency Injection will provide the Adapter and IBot - // implementation at runtime. Multiple different IBot implementations running at different endpoints can be - // achieved by specifying a more specific type for the bot constructor argument. - [ApiController] - public class BotController : ControllerBase - { - private readonly Dictionary _adapters = new Dictionary(); - private readonly IBot _bot; - private readonly ILogger _logger; - - public BotController( - IConfiguration configuration, - IEnumerable adapters, - IBot bot, - ILogger logger) - { - _bot = bot ?? throw new ArgumentNullException(nameof(bot)); - _logger = logger; - - var adapterSettings = configuration.GetSection(AdapterSettings.AdapterSettingsKey).Get>() ?? new List(); - adapterSettings.Add(AdapterSettings.CoreBotAdapterSettings); - - foreach (var adapter in adapters ?? throw new ArgumentNullException(nameof(adapters))) - { - var settings = adapterSettings.FirstOrDefault(s => s.Enabled && s.Type == adapter.GetType().FullName); - - if (settings != null) - { - _adapters.Add(settings.Route, adapter); - } - } - } - - [HttpPost] - [HttpGet] - [Route("api/{route}")] - public async Task PostAsync(string route) - { - if (string.IsNullOrEmpty(route)) - { - _logger.LogError($"PostAsync: No route provided."); - throw new ArgumentNullException(nameof(route)); - } - - if (_adapters.TryGetValue(route, out IBotFrameworkHttpAdapter adapter)) - { - if (_logger.IsEnabled(LogLevel.Debug)) - { - _logger.LogInformation($"PostAsync: routed '{route}' to {adapter.GetType().Name}"); - } - - // Delegate the processing of the HTTP POST to the appropriate adapter. - // The adapter will invoke the bot. - await adapter.ProcessAsync(Request, Response, _bot).ConfigureAwait(false); - } - else - { - _logger.LogError($"PostAsync: No adapter registered and enabled for route {route}."); - throw new KeyNotFoundException($"No adapter registered and enabled for route {route}."); - } - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Controllers/SkillController.cs b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Controllers/SkillController.cs deleted file mode 100644 index 88c36f2b1c..0000000000 --- a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Controllers/SkillController.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.Bot.Schema; -using Microsoft.Extensions.Logging; - -namespace EchoSkillBotComposer.Controllers -{ - ///

    - /// A controller that handles skill replies to the bot. - /// - [ApiController] - [Route("api/skills")] - public class SkillController : ChannelServiceController - { - private readonly ILogger _logger; - - public SkillController(ChannelServiceHandlerBase handler, ILogger logger) - : base(handler) - { - _logger = logger; - } - - public override Task ReplyToActivityAsync(string conversationId, string activityId, Activity activity) - { - try - { - if (_logger.IsEnabled(LogLevel.Debug)) - { - _logger.LogDebug($"ReplyToActivityAsync: conversationId={conversationId}, activityId={activityId}"); - } - - return base.ReplyToActivityAsync(conversationId, activityId, activity); - } - catch (Exception ex) - { - _logger.LogError(ex, $"ReplyToActivityAsync: {ex}"); - throw; - } - } - - public override Task SendToConversationAsync(string conversationId, Activity activity) - { - try - { - if (_logger.IsEnabled(LogLevel.Debug)) - { - _logger.LogDebug($"SendToConversationAsync: conversationId={conversationId}"); - } - - return base.SendToConversationAsync(conversationId, activity); - } - catch (Exception ex) - { - _logger.LogError(ex, $"SendToConversationAsync: {ex}"); - throw; - } - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/EchoSkillBotComposer.botproj b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/EchoSkillBotComposer.botproj deleted file mode 100644 index 247bba8b18..0000000000 --- a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/EchoSkillBotComposer.botproj +++ /dev/null @@ -1,5 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/main/Composer/packages/server/schemas/botproject.schema", - "name": "EchoSkillBotComposer", - "skills": {} -} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/EchoSkillBotComposer.csproj b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/EchoSkillBotComposer.csproj deleted file mode 100644 index d3c03d57e2..0000000000 --- a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/EchoSkillBotComposer.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - - netcoreapp3.1 - OutOfProcess - 720cb418-9c27-47a3-b473-1b8771598297 - - - - PreserveNewest - - - - - - - - - \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Program.cs b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Program.cs deleted file mode 100644 index b9cc275c38..0000000000 --- a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Program.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime.Extensions; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Hosting; - -namespace EchoSkillBotComposer -{ - public class Program - { - public static void Main(string[] args) - { - CreateHostBuilder(args).Build().Run(); - } - - public static IHostBuilder CreateHostBuilder(string[] args) => - Host.CreateDefaultBuilder(args) - .ConfigureAppConfiguration((hostingContext, builder) => - { - var applicationRoot = AppDomain.CurrentDomain.BaseDirectory; - var environmentName = hostingContext.HostingEnvironment.EnvironmentName; - var settingsDirectory = "settings"; - - builder.AddBotRuntimeConfiguration(applicationRoot, settingsDirectory, environmentName); - - builder.AddCommandLine(args); - }) - .ConfigureWebHostDefaults(webBuilder => - { - webBuilder.UseStartup(); - }); - } -} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Properties/launchSettings.json b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Properties/launchSettings.json deleted file mode 100644 index 5e20497847..0000000000 --- a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Properties/launchSettings.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:35410/", - "sslPort": 0 - } - }, - "profiles": { - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": false, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "EchoSkillBotComposerDotNet": { - "commandName": "Project", - "launchBrowser": false, - "applicationUrl": "http://localhost:35410", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/README.md b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/README.md deleted file mode 100644 index b48822a762..0000000000 --- a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Welcome to your new bot - -This bot project was created using the Empty Bot template, and contains a minimal set of files necessary to have a working bot. - -## Next steps - -### Start building your bot - -Composer can help guide you through getting started building your bot. From your bot settings page (the wrench icon on the left navigation rail), click on the rocket-ship icon on the top right for some quick navigation links. - -Another great resource if you're just getting started is the **[guided tutorial](https://docs.microsoft.com/en-us/composer/tutorial/tutorial-introduction)** in our documentation. - -### Connect with your users - -Your bot comes pre-configured to connect to our Web Chat and DirectLine channels, but there are many more places you can connect your bot to - including Microsoft Teams, Telephony, DirectLine Speech, Slack, Facebook, Outlook and more. Check out all of the places you can connect to on the bot settings page. - -### Publish your bot to Azure from Composer - -Composer can help you provision the Azure resources necessary for your bot, and publish your bot to them. To get started, create a publishing profile from your bot settings page in Composer (the wrench icon on the left navigation rail). Make sure you only provision the optional Azure resources you need! - -### Extend your bot with packages - -From Package Manager in Composer you can find useful packages to help add additional pre-built functionality you can add to your bot - everything from simple dialogs & custom actions for working with specific scenarios to custom adapters for connecting your bot to users on clients like Facebook or Slack. - -### Extend your bot with code - -You can also extend your bot with code - simply open up the folder that was generated for you in the location you chose during the creation process with your favorite IDE (like Visual Studio). You can do things like create custom actions that can be used during dialog flows, create custom middleware to pre-process (or post-process) messages, and more. See [our documentation](https://aka.ms/bf-extend-with-code) for more information. diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Startup.cs b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Startup.cs deleted file mode 100644 index dae17d4283..0000000000 --- a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Startup.cs +++ /dev/null @@ -1,56 +0,0 @@ -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.StaticFiles; -using Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime.Extensions; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; - -namespace EchoSkillBotComposer -{ - public class Startup - { - public Startup(IConfiguration configuration) - { - Configuration = configuration; - } - - public IConfiguration Configuration { get; } - - // This method gets called by the runtime. Use this method to add services to the container. - public void ConfigureServices(IServiceCollection services) - { - services.AddControllers().AddNewtonsoftJson(); - services.AddBotRuntime(Configuration); - } - - // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IWebHostEnvironment env) - { - if (env.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); - } - - app.UseDefaultFiles(); - - // Set up custom content types - associating file extension to MIME type. - var provider = new FileExtensionContentTypeProvider(); - provider.Mappings[".lu"] = "application/vnd.microsoft.lu"; - provider.Mappings[".qna"] = "application/vnd.microsoft.qna"; - - // Expose static files in manifests folder for skill scenarios. - app.UseStaticFiles(new StaticFileOptions - { - ContentTypeProvider = provider - }); - app.UseWebSockets(); - app.UseRouting(); - app.UseAuthorization(); - app.UseEndpoints(endpoints => - { - endpoints.MapControllers(); - }); - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/dialogs/emptyBot/knowledge-base/en-us/emptyBot.en-us.qna b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/dialogs/emptyBot/knowledge-base/en-us/emptyBot.en-us.qna deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/echoskillbotcomposer.dialog b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/echoskillbotcomposer.dialog deleted file mode 100644 index 5abf65c6df..0000000000 --- a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/echoskillbotcomposer.dialog +++ /dev/null @@ -1,115 +0,0 @@ -{ - "$kind": "Microsoft.AdaptiveDialog", - "$designer": { - "name": "EchoSkillBotComposer", - "description": "", - "id": "A79tBe" - }, - "autoEndDialog": true, - "defaultResultProperty": "dialog.result", - "triggers": [ - { - "$kind": "Microsoft.OnConversationUpdateActivity", - "$designer": { - "id": "376720" - }, - "actions": [ - { - "$kind": "Microsoft.Foreach", - "$designer": { - "id": "518944", - "name": "Loop: for each item" - }, - "itemsProperty": "turn.Activity.membersAdded", - "actions": [ - { - "$kind": "Microsoft.IfCondition", - "$designer": { - "id": "641773", - "name": "Branch: if/else" - }, - "condition": "string(dialog.foreach.value.id) != string(turn.Activity.Recipient.id)", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "859266", - "name": "Send a response" - }, - "activity": "${SendActivity_Greeting()}" - } - ] - } - ] - } - ] - }, - { - "$kind": "Microsoft.OnUnknownIntent", - "$designer": { - "id": "mb2n1u" - }, - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "kMjqz1" - }, - "activity": "${SendActivity_DidNotUnderstand()}" - } - ] - }, - { - "$kind": "Microsoft.OnMessageActivity", - "$designer": { - "id": "esM1JY" - }, - "actions": [ - { - "$kind": "Microsoft.IfCondition", - "$designer": { - "id": "SK42Qt" - }, - "condition": "turn.activity.text != 'end' && turn.activity.text != 'stop'", - "actions": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "HHAFpn" - }, - "activity": "${SendActivity_HHAFpn()}" - }, - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "dZ2zwR" - }, - "activity": "${SendActivity_dZ2zwR()}" - }, - { - "$kind": "Microsoft.EndTurn", - "$designer": { - "id": "YzX0HZ" - } - } - ], - "elseActions": [ - { - "$kind": "Microsoft.SendActivity", - "$designer": { - "id": "xvwomh" - }, - "activity": "${SendActivity_xvwomh()}" - } - ] - } - ] - } - ], - "generator": "EchoSkillBotComposer.lg", - "id": "EchoSkillBotComposer", - "recognizer": { - "$kind": "Microsoft.RegexRecognizer", - "intents": [] - } -} diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/generated/interruption/EchoSkillBotComposer.en-us.lu b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/generated/interruption/EchoSkillBotComposer.en-us.lu deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/generated/interruption/EchoSkillBotComposer.en-us.qna b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/generated/interruption/EchoSkillBotComposer.en-us.qna deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/knowledge-base/en-us/echoskillbotcomposer.en-us.qna b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/knowledge-base/en-us/echoskillbotcomposer.en-us.qna deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/language-generation/en-us/common.en-us.lg b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/language-generation/en-us/common.en-us.lg deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/language-generation/en-us/echoskillbotcomposer.en-us.lg b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/language-generation/en-us/echoskillbotcomposer.en-us.lg deleted file mode 100644 index f49f92107e..0000000000 --- a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/language-generation/en-us/echoskillbotcomposer.en-us.lg +++ /dev/null @@ -1,31 +0,0 @@ -[import](common.lg) - -# SendActivity_Greeting() -[Activity - Text = Welcome to EchoSkillBotComposerDotNet. -] - -# SendActivity_DidNotUnderstand() -[Activity - Text = ${SendActivity_DidNotUnderstand_text()} -] - -# SendActivity_DidNotUnderstand_text() -- Sorry, I didn't get that. -# SendActivity_HHAFpn() -[Activity - Text = Echo: ${turn.activity.text} - InputHint = acceptingInput -] - -# SendActivity_dZ2zwR() -[Activity - Text = Say "end" or "stop" and I'll end the conversation and back to the parent. - InputHint = acceptingInput -] - -# SendActivity_xvwomh() -[Activity - Text = Ending conversation from the skill... - InputHint = acceptingInput -] diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/language-understanding/en-us/echoskillbotcomposer.en-us.lu b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/language-understanding/en-us/echoskillbotcomposer.en-us.lu deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/manifests/echoskillbotcomposer-manifest.json b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/manifests/echoskillbotcomposer-manifest.json deleted file mode 100644 index 25205b9286..0000000000 --- a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/manifests/echoskillbotcomposer-manifest.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "https://schemas.botframework.com/schemas/skills/v2.1/skill-manifest.json", - "$id": "EchoSkillBotComposerDotNet", - "name": "EchoSkillBotComposerDotNet", - "version": "1.0", - "description": "This is a skill for echoing what the user sent to the bot (using Composer with the dotnet runtime).", - "publisherName": "Microsoft", - "privacyUrl": "https://microsoft.com/privacy", - "copyright": "Copyright (c) Microsoft Corporation. All rights reserved.", - "license": "https://github.com/microsoft/BotFramework-FunctionalTests/blob/main/LICENSE", - "tags": [ - "echo" - ], - "endpoints": [ - { - "name": "default", - "protocol": "BotFrameworkV3", - "description": "Localhost endpoint for the skill (on port 35410)", - "endpointUrl": "http://localhost:35410/api/messages", - "msAppId": "00000000-0000-0000-0000-000000000000" - } - ] -} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/media/create-azure-resource-command-line.png b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/media/create-azure-resource-command-line.png deleted file mode 100644 index 497eb8e649d4f1d2d456d337246d01805132ac86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13842 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 VJv|35z<=2CX{u{u@3nB{{{s`&K;i%Z diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/media/publish-az-login.png b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/media/publish-az-login.png deleted file mode 100644 index 4e721354bccb6d4a83aa70ca55da1b571c2886db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16726 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 13" - ] - }, - "integerExpression": { - "$role": "expression", - "title": "Integer or expression", - "description": "Integer constant or expression to evaluate.", - "oneOf": [ - { - "type": "integer", - "title": "Integer", - "description": "Integer constant.", - "default": 0, - "examples": [ - 15 - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=user.age" - ] - } - ] - }, - "Microsoft.ActivityTemplate": { - "$role": "implements(Microsoft.IActivityTemplate)", - "title": "Microsoft activity template", - "type": "object", - "required": [ - "template", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "template": { - "title": "Template", - "description": "Language Generator template to use to create the activity", - "type": "string" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ActivityTemplate" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.AdaptiveDialog": { - "$role": "implements(Microsoft.IDialog)", - "title": "Adaptive dialog", - "description": "Flexible, data driven dialog that can adapt to the conversation.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "pattern": "^(?!(=)).*", - "title": "Id", - "description": "Optional dialog ID." - }, - "autoEndDialog": { - "$ref": "#/definitions/booleanExpression", - "title": "Auto end dialog", - "description": "If set to true the dialog will automatically end when there are no further actions. If set to false, remember to manually end the dialog using EndDialog action.", - "default": true - }, - "defaultResultProperty": { - "type": "string", - "title": "Default result property", - "description": "Value that will be passed back to the parent dialog.", - "default": "dialog.result" - }, - "dialogs": { - "type": "array", - "title": "Dialogs", - "description": "Dialogs added to DialogSet.", - "items": { - "$kind": "Microsoft.IDialog", - "title": "Dialog", - "description": "Dialog to add to DialogSet.", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "recognizer": { - "$kind": "Microsoft.IRecognizer", - "title": "Recognizer", - "description": "Input recognizer that interprets user input into intent and entities.", - "$ref": "#/definitions/Microsoft.IRecognizer" - }, - "generator": { - "$kind": "Microsoft.ILanguageGenerator", - "title": "Language generator", - "description": "Language generator that generates bot responses.", - "$ref": "#/definitions/Microsoft.ILanguageGenerator" - }, - "selector": { - "$kind": "Microsoft.ITriggerSelector", - "title": "Selector", - "description": "Policy to determine which trigger is executed. Defaults to a 'best match' selector (optional).", - "$ref": "#/definitions/Microsoft.ITriggerSelector" - }, - "triggers": { - "type": "array", - "description": "List of triggers defined for this dialog.", - "title": "Triggers", - "items": { - "$kind": "Microsoft.ITrigger", - "title": "Event triggers", - "description": "Event triggers for handling events.", - "$ref": "#/definitions/Microsoft.ITrigger" - } - }, - "schema": { - "title": "Schema", - "description": "Schema to fill in.", - "anyOf": [ - { - "$ref": "#/definitions/schema" - }, - { - "type": "string", - "title": "Reference to JSON schema", - "description": "Reference to JSON schema .dialog file." - } - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.AdaptiveDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.AgeEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Age entity recognizer", - "description": "Recognizer which recognizes age.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.AgeEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.Ask": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.SendActivity)" - ], - "title": "Send activity to ask a question", - "description": "This is an action which sends an activity to the user when a response is expected", - "type": "object", - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "expectedProperties": { - "$ref": "#/definitions/arrayExpression", - "title": "Expected properties", - "description": "Properties expected from the user.", - "examples": [ - [ - "age", - "name" - ] - ], - "items": { - "type": "string", - "title": "Name", - "description": "Name of the property" - } - }, - "defaultOperation": { - "$ref": "#/definitions/stringExpression", - "title": "Default operation", - "description": "Sets the default operation that will be used when no operation is recognized in the response to this Ask.", - "examples": [ - "Add()", - "Remove()" - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action." - }, - "activity": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Activity", - "description": "Activity to send.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.Ask" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.AttachmentInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "title": "Attachment input dialog", - "description": "Collect information - Ask for a file or image.", - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "type": "object", - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "defaultValue": { - "$role": "expression", - "title": "Default value", - "description": "'Property' will be set to the object or the result of this expression when max turn count is exceeded.", - "oneOf": [ - { - "$ref": "#/definitions/botframework.json/definitions/Attachment", - "title": "Object", - "description": "Attachment object." - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "value": { - "$role": "expression", - "title": "Value", - "description": "'Property' will be set to the object or the result of this expression unless it evaluates to null.", - "oneOf": [ - { - "$ref": "#/definitions/botframework.json/definitions/Attachment", - "title": "Object", - "description": "Attachment object." - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "outputFormat": { - "$role": "expression", - "title": "Output format", - "description": "Attachment output format.", - "oneOf": [ - { - "type": "string", - "title": "Standard format", - "description": "Standard output formats.", - "enum": [ - "all", - "first" - ], - "default": "first" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "minimum": 0, - "maximum": 2147483647, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.AttachmentInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.BeginDialog": { - "$role": "implements(Microsoft.IDialog)", - "title": "Begin a dialog", - "description": "Begin another dialog.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "dialog": { - "oneOf": [ - { - "$kind": "Microsoft.IDialog", - "pattern": "^(?!(=)).*", - "title": "Dialog", - "$ref": "#/definitions/Microsoft.IDialog" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ], - "title": "Dialog name", - "description": "Name of the dialog to call." - }, - "options": { - "$ref": "#/definitions/objectExpression", - "title": "Options", - "description": "One or more options that are passed to the dialog that is called.", - "examples": [ - { - "arg1": "=expression" - } - ], - "additionalProperties": { - "type": "string", - "title": "Options", - "description": "Options for dialog." - } - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the dialog that is called can process the current activity.", - "default": true - }, - "resultProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store any value returned by the dialog that is called.", - "examples": [ - "dialog.userName" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.BeginDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.BeginSkill": { - "$role": "implements(Microsoft.IDialog)", - "title": "Begin a skill", - "description": "Begin a remote skill.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the skill dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=f(x)" - ] - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the skill will be started using the activity in the current turn context instead of the activity in the Activity property.", - "default": true, - "examples": [ - true, - "=f(x)" - ] - }, - "resultProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store any value returned by the dialog that is called.", - "examples": [ - "dialog.userName" - ] - }, - "botId": { - "$ref": "#/definitions/stringExpression", - "title": "Skill host bot ID", - "description": "The Microsoft App ID that will be calling the skill.", - "default": "=settings.MicrosoftAppId" - }, - "skillHostEndpoint": { - "$ref": "#/definitions/stringExpression", - "title": "Skill host", - "description": "The callback Url for the skill host.", - "default": "=settings.skillHostEndpoint", - "examples": [ - "https://mybot.contoso.com/api/skills/" - ] - }, - "connectionName": { - "$ref": "#/definitions/stringExpression", - "title": "OAuth connection name (SSO)", - "description": "The OAuth Connection Name, that would be used to perform Single SignOn with a skill.", - "default": "=settings.connectionName" - }, - "skillAppId": { - "$ref": "#/definitions/stringExpression", - "title": "Skill App Id", - "description": "The Microsoft App ID for the skill." - }, - "skillEndpoint": { - "$ref": "#/definitions/stringExpression", - "title": "Skill endpoint ", - "description": "The /api/messages endpoint for the skill.", - "examples": [ - "https://myskill.contoso.com/api/messages/" - ] - }, - "activity": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Activity", - "description": "The activity to send to the skill.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the skill.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.BeginSkill" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.BreakLoop": { - "$role": "implements(Microsoft.IDialog)", - "title": "Break loop", - "description": "Stop executing this loop", - "type": "object", - "required": [ - "$kind" - ], - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.BreakLoop" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.CancelAllDialogs": { - "$role": "implements(Microsoft.IDialog)", - "title": "Cancel all dialogs", - "description": "Cancel all active dialogs. All dialogs in the dialog chain will need a trigger to capture the event configured in this action.", - "type": "object", - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the caller dialog is told it should process the current activity.", - "default": true - }, - "eventName": { - "$ref": "#/definitions/stringExpression", - "title": "Event name", - "description": "Name of the event to emit." - }, - "eventValue": { - "$ref": "#/definitions/valueExpression", - "title": "Event value", - "description": "Value to emit with the event (optional).", - "additionalProperties": true - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.CancelAllDialogs" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.CancelDialog": { - "$role": "implements(Microsoft.IDialog)", - "title": "Cancel all dialogs", - "description": "Cancel all active dialogs. All dialogs in the dialog chain will need a trigger to capture the event configured in this action.", - "type": "object", - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the caller dialog is told it should process the current activity.", - "default": true - }, - "eventName": { - "$ref": "#/definitions/stringExpression", - "title": "Event name", - "description": "Name of the event to emit." - }, - "eventValue": { - "$ref": "#/definitions/valueExpression", - "title": "Event value", - "description": "Value to emit with the event (optional).", - "additionalProperties": true - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.CancelDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ChannelMentionEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)" - ], - "title": "Channel mention entity recognizer", - "description": "Promotes mention entities passed by a channel via the activity.entities into recognizer result.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ChannelMentionEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ChoiceInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "title": "Choice input dialog", - "description": "Collect information - Pick from a list of choices", - "type": "object", - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "defaultValue": { - "$ref": "#/definitions/stringExpression", - "title": "Default value", - "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", - "examples": [ - "hello world", - "Hello ${user.name}", - "=concat(user.firstname, user.lastName)" - ] - }, - "value": { - "$ref": "#/definitions/stringExpression", - "title": "Value", - "description": "'Property' will be set to the value of this expression unless it evaluates to null.", - "examples": [ - "hello world", - "Hello ${user.name}", - "=concat(user.firstname, user.lastName)" - ] - }, - "outputFormat": { - "$role": "expression", - "title": "Output format", - "description": "Sets the desired choice output format (either value or index into choices).", - "oneOf": [ - { - "type": "string", - "title": "Standard", - "description": "Standard output format.", - "enum": [ - "value", - "index" - ], - "default": "value" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "choices": { - "$role": "expression", - "title": "Array of choices", - "description": "Choices to choose from.", - "oneOf": [ - { - "type": "array", - "title": "Simple choices", - "description": "Simple choices to choose from.", - "items": [ - { - "type": "string", - "title": "Simple choice", - "description": "One choice for choice input." - } - ] - }, - { - "type": "array", - "title": "Structured choices", - "description": "Choices that allow full control.", - "items": [ - { - "type": "object", - "title": "Structured choice", - "description": "Structured choice to choose from.", - "properties": { - "value": { - "type": "string", - "title": "Value", - "description": "Value to return when this choice is selected." - }, - "action": { - "$ref": "#/definitions/botframework.json/definitions/CardAction", - "title": "Action", - "description": "Card action for the choice." - }, - "synonyms": { - "type": "array", - "title": "Synonyms", - "description": "List of synonyms to recognize in addition to the value (optional).", - "items": { - "type": "string", - "title": "Synonym", - "description": "Synonym for value." - } - } - } - } - ] - }, - { - "$ref": "#/definitions/stringExpression" - } - ] - }, - "defaultLocale": { - "$ref": "#/definitions/stringExpression", - "title": "Default locale", - "description": "The default locale to use to parse confirmation choices if there is not one passed by the caller.", - "default": "en-us", - "examples": [ - "en-us" - ] - }, - "style": { - "$role": "expression", - "title": "List style", - "description": "Sets the ListStyle to control how choices are rendered.", - "oneOf": [ - { - "type": "string", - "title": "List style", - "description": "Standard list style.", - "enum": [ - "none", - "auto", - "inline", - "list", - "suggestedAction", - "heroCard" - ], - "default": "auto" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "choiceOptions": { - "title": "Choice options", - "description": "Sets the choice options used for controlling how choices are combined.", - "oneOf": [ - { - "type": "object", - "title": "Object", - "description": "Choice options object.", - "properties": { - "inlineSeparator": { - "type": "string", - "title": "Inline separator", - "description": "Character used to separate individual choices when there are more than 2 choices", - "default": ", " - }, - "inlineOr": { - "type": "string", - "title": "Inline or", - "description": "Separator inserted between the choices when there are only 2 choices", - "default": " or " - }, - "inlineOrMore": { - "type": "string", - "title": "Inline or more", - "description": "Separator inserted between the last 2 choices when their are more than 2 choices.", - "default": ", or " - }, - "includeNumbers": { - "type": "boolean", - "title": "Include numbers", - "description": "If true, 'inline' and 'list' list style will be prefixed with the index of the choice.", - "default": true - } - } - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "recognizerOptions": { - "title": "Recognizer options", - "description": "Sets how to recognize choices in the response", - "oneOf": [ - { - "type": "object", - "title": "Object", - "description": "Options for recognizer.", - "properties": { - "noValue": { - "type": "boolean", - "title": "No value", - "description": "If true, the choices value field will NOT be search over", - "default": false - }, - "noAction": { - "type": "boolean", - "title": "No action", - "description": "If true, the choices action.title field will NOT be searched over", - "default": false - }, - "recognizeNumbers": { - "type": "boolean", - "title": "Recognize numbers", - "description": "If true, the number recognizer will be used to recognize an index response (1,2,3...) to the prompt.", - "default": true - }, - "recognizeOrdinals": { - "type": "boolean", - "title": "Recognize ordinals", - "description": "If true, the ordinal recognizer will be used to recognize ordinal response (first/second/...) to the prompt.", - "default": true - } - } - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "minimum": 0, - "maximum": 2147483647, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ChoiceInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ConditionalSelector": { - "$role": "implements(Microsoft.ITriggerSelector)", - "title": "Conditional trigger selector", - "description": "Use a rule selector based on a condition", - "type": "object", - "required": [ - "condition", - "ifTrue", - "ifFalse", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression to evaluate" - }, - "ifTrue": { - "$kind": "Microsoft.ITriggerSelector", - "$ref": "#/definitions/Microsoft.ITriggerSelector" - }, - "ifFalse": { - "$kind": "Microsoft.ITriggerSelector", - "$ref": "#/definitions/Microsoft.ITriggerSelector" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ConditionalSelector" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ConfirmationEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Confirmation entity recognizer", - "description": "Recognizer which recognizes confirmation choices (yes/no).", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ConfirmationEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ConfirmInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "title": "Confirm input dialog", - "description": "Collect information - Ask for confirmation (yes or no).", - "type": "object", - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "outputFormat": { - "$ref": "#/definitions/valueExpression", - "title": "Output format", - "description": "Optional expression to use to format the output.", - "examples": [ - "=concat('confirmation:', this.value)" - ] - }, - "defaultLocale": { - "$ref": "#/definitions/stringExpression", - "title": "Default locale", - "description": "The Default locale or an expression which provides the default locale to use as default if not found in the activity.", - "default": "en-us", - "examples": [ - "en-us" - ] - }, - "style": { - "$role": "expression", - "title": "List style", - "description": "Sets the ListStyle to control how choices are rendered.", - "oneOf": [ - { - "type": "string", - "title": "Standard style", - "description": "Standard style for rendering choices.", - "enum": [ - "none", - "auto", - "inline", - "list", - "suggestedAction", - "heroCard" - ], - "default": "auto" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "choiceOptions": { - "title": "Choice options", - "description": "Choice Options or expression which provides Choice Options to control display choices to the user.", - "oneOf": [ - { - "type": "object", - "title": "Choice options", - "description": "Choice options.", - "properties": { - "inlineSeparator": { - "type": "string", - "title": "Inline separator", - "description": "Text to separate individual choices when there are more than 2 choices", - "default": ", " - }, - "inlineOr": { - "type": "string", - "title": "Inline or", - "description": "Text to be inserted between the choices when their are only 2 choices", - "default": " or " - }, - "inlineOrMore": { - "type": "string", - "title": "Inline or more", - "description": "Text to be inserted between the last 2 choices when their are more than 2 choices.", - "default": ", or " - }, - "includeNumbers": { - "type": "boolean", - "title": "Include numbers", - "description": "If true, inline and list style choices will be prefixed with the index of the choice.", - "default": true - } - } - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "defaultValue": { - "$ref": "#/definitions/booleanExpression", - "title": "Default value", - "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "value": { - "$ref": "#/definitions/booleanExpression", - "title": "Value", - "description": "'Property' will be set to the value of this expression unless it evaluates to null.", - "examples": [ - true, - "=user.isVip" - ] - }, - "confirmChoices": { - "$role": "expression", - "title": "Array of choice objects", - "description": "Array of simple or structured choices.", - "oneOf": [ - { - "type": "array", - "title": "Simple choices", - "description": "Simple choices to confirm from.", - "items": [ - { - "type": "string", - "title": "Simple choice", - "description": "Simple choice to confirm." - } - ] - }, - { - "type": "array", - "title": "Structured choices", - "description": "Structured choices for confirmations.", - "items": [ - { - "type": "object", - "title": "Choice", - "description": "Choice to confirm.", - "properties": { - "value": { - "type": "string", - "title": "Value", - "description": "Value to return when this choice is selected." - }, - "action": { - "$ref": "#/definitions/botframework.json/definitions/CardAction", - "title": "Action", - "description": "Card action for the choice." - }, - "synonyms": { - "type": "array", - "title": "Synonyms", - "description": "List of synonyms to recognize in addition to the value (optional).", - "items": { - "type": "string", - "title": "Synonym", - "description": "Synonym for choice." - } - } - } - } - ] - }, - { - "$ref": "#/definitions/stringExpression" - } - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "minimum": 0, - "maximum": 2147483647, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ConfirmInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ContinueConversation": { - "$role": "implements(Microsoft.IDialog)", - "title": "Continue conversation (Queue)", - "description": "Continue a specific conversation (via StorageQueue implementation).", - "type": "object", - "required": [ - "conversationReference", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "conversationReference": { - "$ref": "#/definitions/objectExpression", - "title": "Conversation Reference", - "description": "A conversation reference. (NOTE: Minimum required values or channelId, conversation).", - "examples": [ - { - "channelId": "skype", - "serviceUrl": "http://smba.skype.com", - "conversation": { - "id": "11111" - }, - "bot": { - "id": "22222" - }, - "user": { - "id": "33333" - }, - "locale": "en-us" - } - ] - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "Value to send in the activity.value." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ContinueConversation" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ContinueConversationLater": { - "$role": "implements(Microsoft.IDialog)", - "title": "Continue conversation later (Queue)", - "description": "Continue conversation at later time (via StorageQueue implementation).", - "type": "object", - "required": [ - "date", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "date": { - "$ref": "#/definitions/stringExpression", - "title": "Date", - "description": "Date in the future as a ISO string when the conversation should continue.", - "examples": [ - "=addHours(utcNow(), 1)" - ] - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "Value to send in the activity.value." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ContinueConversationLater" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ContinueLoop": { - "$role": "implements(Microsoft.IDialog)", - "title": "Continue loop", - "description": "Stop executing this template and continue with the next iteration of the loop.", - "type": "object", - "required": [ - "$kind" - ], - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ContinueLoop" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.CrossTrainedRecognizerSet": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "Cross-trained recognizer set", - "description": "Recognizer for selecting between cross trained recognizers.", - "type": "object", - "required": [ - "recognizers", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet." - }, - "recognizers": { - "type": "array", - "title": "Recognizers", - "description": "List of Recognizers defined for this set.", - "items": { - "$kind": "Microsoft.IRecognizer", - "$ref": "#/definitions/Microsoft.IRecognizer" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.CrossTrainedRecognizerSet" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.CurrencyEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Currency entity recognizer", - "description": "Recognizer which recognizes currency.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.CurrencyEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DateTimeEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Date and time entity recognizer", - "description": "Recognizer which recognizes dates and time fragments.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DateTimeEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DateTimeInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "title": "Date/time input dialog", - "description": "Collect information - Ask for date and/ or time", - "type": "object", - "defaultLocale": { - "$ref": "#/definitions/stringExpression", - "title": "Default locale", - "description": "Default locale.", - "default": "en-us" - }, - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "defaultValue": { - "$ref": "#/definitions/stringExpression", - "format": "date-time", - "title": "Default date", - "description": "'Property' will be set to the value or the result of the expression when max turn count is exceeded.", - "examples": [ - "=user.birthday" - ] - }, - "value": { - "$ref": "#/definitions/stringExpression", - "format": "date-time", - "title": "Value", - "description": "'Property' will be set to the value or the result of the expression unless it evaluates to null.", - "examples": [ - "=user.birthday" - ] - }, - "outputFormat": { - "$ref": "#/definitions/expression", - "title": "Output format", - "description": "Expression to use for formatting the output.", - "examples": [ - "=this.value[0].Value" - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "minimum": 0, - "maximum": 2147483647, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DateTimeInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DebugBreak": { - "$role": "implements(Microsoft.IDialog)", - "title": "Debugger break", - "description": "If debugger is attached, stop the execution at this point in the conversation.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DebugBreak" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DeleteActivity": { - "$role": "implements(Microsoft.IDialog)", - "title": "Delete Activity", - "description": "Delete an activity that was previously sent.", - "type": "object", - "required": [ - "activityId", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "activityId": { - "$ref": "#/definitions/stringExpression", - "title": "ActivityId", - "description": "expression to an activityId to delete", - "examples": [ - "=turn.lastresult.id" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DeleteActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DeleteProperties": { - "$role": "implements(Microsoft.IDialog)", - "title": "Delete Properties", - "description": "Delete multiple properties and any value it holds.", - "type": "object", - "required": [ - "properties", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "properties": { - "type": "array", - "title": "Properties", - "description": "Properties to delete.", - "items": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to delete." - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DeleteProperties" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DeleteProperty": { - "$role": "implements(Microsoft.IDialog)", - "title": "Delete property", - "description": "Delete a property and any value it holds.", - "type": "object", - "required": [ - "property", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to delete." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DeleteProperty" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DimensionEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Dimension entity recognizer", - "description": "Recognizer which recognizes dimension.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DimensionEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EditActions": { - "$role": "implements(Microsoft.IDialog)", - "title": "Edit actions.", - "description": "Edit the current list of actions.", - "type": "object", - "required": [ - "changeType", - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "changeType": { - "title": "Type of change", - "description": "Type of change to apply to the current actions.", - "oneOf": [ - { - "type": "string", - "title": "Standard change", - "description": "Standard change types.", - "enum": [ - "insertActions", - "insertActionsBeforeTags", - "appendActions", - "endSequence", - "replaceSequence" - ] - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to apply.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EditActions" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EditArray": { - "$role": "implements(Microsoft.IDialog)", - "title": "Edit array", - "description": "Modify an array in memory", - "type": "object", - "required": [ - "itemsProperty", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "changeType": { - "title": "Type of change", - "description": "Type of change to the array in memory.", - "oneOf": [ - { - "type": "string", - "title": "Change type", - "description": "Standard change type.", - "enum": [ - "push", - "pop", - "take", - "remove", - "clear" - ] - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "itemsProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Items property", - "description": "Property that holds the array to update." - }, - "resultProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Result property", - "description": "Property to store the result of this action." - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "New value or expression.", - "examples": [ - "milk", - "=dialog.favColor", - "=dialog.favColor == 'red'" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EditArray" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EmailEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Email entity recognizer", - "description": "Recognizer which recognizes email.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EmailEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EmitEvent": { - "$role": "implements(Microsoft.IDialog)", - "title": "Emit a custom event", - "description": "Emit an event. Capture this event with a trigger.", - "type": "object", - "required": [ - "eventName", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "eventName": { - "$role": "expression", - "title": "Event name", - "description": "Name of the event to emit.", - "oneOf": [ - { - "type": "string", - "title": "Built-in event", - "description": "Standard event type.", - "enum": [ - "beginDialog", - "resumeDialog", - "repromptDialog", - "cancelDialog", - "endDialog", - "activityReceived", - "recognizedIntent", - "unknownIntent", - "actionsStarted", - "actionsSaved", - "actionsEnded", - "actionsResumed" - ] - }, - { - "type": "string", - "title": "Custom event", - "description": "Custom event type", - "pattern": "^(?!(beginDialog$|resumeDialog$|repromptDialog$|cancelDialog$|endDialog$|activityReceived$|recognizedIntent$|unknownIntent$|actionsStarted$|actionsSaved$|actionsEnded$|actionsResumed))(\\S){1}.*" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "eventValue": { - "$ref": "#/definitions/valueExpression", - "title": "Event value", - "description": "Value to emit with the event (optional)." - }, - "bubbleEvent": { - "$ref": "#/definitions/booleanExpression", - "title": "Bubble event", - "description": "If true this event is passed on to parent dialogs." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EmitEvent" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EndDialog": { - "$role": "implements(Microsoft.IDialog)", - "title": "End dialog", - "description": "End this dialog.", - "type": "object", - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "Result value returned to the parent dialog.", - "examples": [ - "=dialog.userName", - "='tomato'" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EndDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EndTurn": { - "$role": "implements(Microsoft.IDialog)", - "title": "End turn", - "description": "End the current turn without ending the dialog.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EndTurn" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.FirstSelector": { - "$role": "implements(Microsoft.ITriggerSelector)", - "title": "First trigger selector", - "description": "Selector for first true rule", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.FirstSelector" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.Foreach": { - "$role": "implements(Microsoft.IDialog)", - "title": "For each item", - "description": "Execute actions on each item in an a collection.", - "type": "object", - "required": [ - "itemsProperty", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "itemsProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Items property", - "description": "Property that holds the array.", - "examples": [ - "user.todoList" - ] - }, - "index": { - "$ref": "#/definitions/stringExpression", - "title": "Index property", - "description": "Property that holds the index of the item.", - "default": "dialog.foreach.index" - }, - "value": { - "$ref": "#/definitions/stringExpression", - "title": "Value property", - "description": "Property that holds the value of the item.", - "default": "dialog.foreach.value" - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to execute for each item. Use '$foreach.value' to access the value of each item. Use '$foreach.index' to access the index of each item.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.Foreach" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ForeachPage": { - "$role": "implements(Microsoft.IDialog)", - "title": "For each page", - "description": "Execute actions on each page (collection of items) in an array.", - "type": "object", - "required": [ - "itemsProperty", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "itemsProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Items property", - "description": "Property that holds the array.", - "examples": [ - "user.todoList" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to execute for each page. Use '$foreach.page' to access each page.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "pageIndex": { - "$ref": "#/definitions/stringExpression", - "title": "Index property", - "description": "Property that holds the index of the page.", - "default": "dialog.foreach.pageindex" - }, - "page": { - "$ref": "#/definitions/stringExpression", - "title": "Page property", - "description": "Property that holds the value of the page.", - "default": "dialog.foreach.page" - }, - "pageSize": { - "$ref": "#/definitions/integerExpression", - "title": "Page size", - "description": "Number of items in each page.", - "default": 10 - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ForeachPage" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.GetActivityMembers": { - "$role": "implements(Microsoft.IDialog)", - "title": "Get activity members", - "description": "Get the members who are participating in an activity. (BotFrameworkAdapter only)", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property (named location to store information).", - "examples": [ - "user.age" - ] - }, - "activityId": { - "$ref": "#/definitions/stringExpression", - "title": "Activity Id", - "description": "Activity ID or expression to an activityId to use to get the members. If none is defined then the current activity id will be used.", - "examples": [ - "turn.lastresult.id" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.GetActivityMembers" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.GetConversationMembers": { - "$role": "implements(Microsoft.IDialog)", - "title": "Get conversation members", - "description": "Get the members who are participating in an conversation. (BotFrameworkAdapter only)", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property (named location to store information).", - "examples": [ - "user.age" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.GetConversationMembers" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.GetConversationReference": { - "$role": "implements(Microsoft.IDialog)", - "title": "Get ConversationReference", - "description": "Gets the ConversationReference from current context and stores it in property so it can be used to with ContinueConversation action.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property (named location to store information).", - "examples": [ - "user.age" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.GetConversationReference" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.GotoAction": { - "$role": "implements(Microsoft.IDialog)", - "title": "Go to action", - "description": "Go to an an action by id.", - "type": "object", - "required": [ - "actionId", - "$kind" - ], - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "actionId": { - "$ref": "#/definitions/stringExpression", - "title": "Action Id", - "description": "Action Id to execute next" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.GotoAction" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.GuidEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Guid entity recognizer", - "description": "Recognizer which recognizes guids.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.GuidEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.HashtagEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Hashtag entity recognizer", - "description": "Recognizer which recognizes Hashtags.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.HashtagEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.HttpRequest": { - "$role": "implements(Microsoft.IDialog)", - "type": "object", - "title": "HTTP request", - "description": "Make a HTTP request.", - "required": [ - "url", - "method", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "method": { - "type": "string", - "title": "HTTP method", - "description": "HTTP method to use.", - "enum": [ - "GET", - "POST", - "PATCH", - "PUT", - "DELETE" - ], - "examples": [ - "GET", - "POST" - ] - }, - "url": { - "$ref": "#/definitions/stringExpression", - "title": "Url", - "description": "URL to call (supports data binding).", - "examples": [ - "https://contoso.com" - ] - }, - "body": { - "$ref": "#/definitions/valueExpression", - "title": "Body", - "description": "Body to include in the HTTP call (supports data binding).", - "additionalProperties": true - }, - "resultProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Result property", - "description": "A property to store the result of this action. The result can include any of the 4 properties from the HTTP response: statusCode, reasonPhrase, content, and headers. If the content is JSON it will be a deserialized object. The values can be accessed via .content for example.", - "default": "turn.results", - "examples": [ - "dialog.contosodata" - ] - }, - "contentType": { - "$ref": "#/definitions/stringExpression", - "title": "Content type", - "description": "Content media type for the body.", - "examples": [ - "application/json", - "text/plain" - ] - }, - "headers": { - "type": "object", - "title": "Headers", - "description": "One or more headers to include in the request (supports data binding).", - "additionalProperties": { - "$ref": "#/definitions/stringExpression" - } - }, - "responseType": { - "$ref": "#/definitions/stringExpression", - "title": "Response type", - "description": "Defines the type of HTTP response. Automatically calls the 'Send a response' action if set to 'Activity' or 'Activities'.", - "oneOf": [ - { - "type": "string", - "title": "Standard response", - "description": "Standard response type.", - "enum": [ - "none", - "json", - "activity", - "activities", - "binary" - ], - "default": "json" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.HttpRequest" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.IActivityTemplate": { - "title": "Microsoft ActivityTemplates", - "description": "Components which are ActivityTemplate, which is string template, an activity, or a implementation of ActivityTemplate", - "$role": "interface", - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.ActivityTemplate" - }, - { - "$ref": "#/definitions/Microsoft.StaticActivityTemplate" - }, - { - "$ref": "#/definitions/botframework.json/definitions/Activity", - "required": [ - "type" - ] - }, - { - "type": "string" - } - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.2" - } - }, - "Microsoft.IAdapter": { - "$role": "interface", - "title": "Bot adapter", - "description": "Component that enables connecting bots to chat clients and applications.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime", - "version": "4.13.2" - }, - "properties": { - "route": { - "type": "string", - "title": "Adapter http route", - "description": "Route where to expose the adapter." - }, - "type": { - "type": "string", - "title": "Adapter type name", - "description": "Adapter type name" - } - } - }, - "Microsoft.IDialog": { - "title": "Microsoft dialogs", - "description": "Components which derive from Dialog", - "$role": "interface", - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog" - }, - { - "$ref": "#/definitions/Microsoft.Ask" - }, - { - "$ref": "#/definitions/Microsoft.AttachmentInput" - }, - { - "$ref": "#/definitions/Microsoft.BeginDialog" - }, - { - "$ref": "#/definitions/Microsoft.BeginSkill" - }, - { - "$ref": "#/definitions/Microsoft.BreakLoop" - }, - { - "$ref": "#/definitions/Microsoft.CancelAllDialogs" - }, - { - "$ref": "#/definitions/Microsoft.CancelDialog" - }, - { - "$ref": "#/definitions/Microsoft.ChoiceInput" - }, - { - "$ref": "#/definitions/Microsoft.ConfirmInput" - }, - { - "$ref": "#/definitions/Microsoft.ContinueConversation" - }, - { - "$ref": "#/definitions/Microsoft.ContinueConversationLater" - }, - { - "$ref": "#/definitions/Microsoft.ContinueLoop" - }, - { - "$ref": "#/definitions/Microsoft.DateTimeInput" - }, - { - "$ref": "#/definitions/Microsoft.DebugBreak" - }, - { - "$ref": "#/definitions/Microsoft.DeleteActivity" - }, - { - "$ref": "#/definitions/Microsoft.DeleteProperties" - }, - { - "$ref": "#/definitions/Microsoft.DeleteProperty" - }, - { - "$ref": "#/definitions/Microsoft.EditActions" - }, - { - "$ref": "#/definitions/Microsoft.EditArray" - }, - { - "$ref": "#/definitions/Microsoft.EmitEvent" - }, - { - "$ref": "#/definitions/Microsoft.EndDialog" - }, - { - "$ref": "#/definitions/Microsoft.EndTurn" - }, - { - "$ref": "#/definitions/Microsoft.Foreach" - }, - { - "$ref": "#/definitions/Microsoft.ForeachPage" - }, - { - "$ref": "#/definitions/Microsoft.GetActivityMembers" - }, - { - "$ref": "#/definitions/Microsoft.GetConversationMembers" - }, - { - "$ref": "#/definitions/Microsoft.GetConversationReference" - }, - { - "$ref": "#/definitions/Microsoft.GotoAction" - }, - { - "$ref": "#/definitions/Microsoft.HttpRequest" - }, - { - "$ref": "#/definitions/Microsoft.IfCondition" - }, - { - "$ref": "#/definitions/Microsoft.LogAction" - }, - { - "$ref": "#/definitions/Microsoft.NumberInput" - }, - { - "$ref": "#/definitions/Microsoft.OAuthInput" - }, - { - "$ref": "#/definitions/Microsoft.QnAMakerDialog" - }, - { - "$ref": "#/definitions/Microsoft.RepeatDialog" - }, - { - "$ref": "#/definitions/Microsoft.ReplaceDialog" - }, - { - "$ref": "#/definitions/Microsoft.SendActivity" - }, - { - "$ref": "#/definitions/Microsoft.SendHandoffActivity" - }, - { - "$ref": "#/definitions/Microsoft.SetProperties" - }, - { - "$ref": "#/definitions/Microsoft.SetProperty" - }, - { - "$ref": "#/definitions/Microsoft.SignOutUser" - }, - { - "$ref": "#/definitions/Microsoft.SwitchCondition" - }, - { - "$ref": "#/definitions/Microsoft.TelemetryTrackEventAction" - }, - { - "$ref": "#/definitions/Microsoft.TextInput" - }, - { - "$ref": "#/definitions/Microsoft.ThrowException" - }, - { - "$ref": "#/definitions/Microsoft.TraceActivity" - }, - { - "$ref": "#/definitions/Microsoft.UpdateActivity" - }, - { - "type": "string", - "pattern": "^(?!(=)).*" - } - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.2" - } - }, - "Microsoft.IEntityRecognizer": { - "$role": "interface", - "title": "Entity recognizers", - "description": "Components which derive from EntityRecognizer.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.AgeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.ConfirmationEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.CurrencyEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.DateTimeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.DimensionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.EmailEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.GuidEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.HashtagEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.IpEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.MentionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.NumberEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.NumberRangeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.OrdinalEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.PercentageEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.PhoneNumberEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.RegexEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.TemperatureEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.UrlEntityRecognizer" - }, - { - "type": "string", - "title": "Reference to Microsoft.IEntityRecognizer", - "description": "Reference to Microsoft.IEntityRecognizer .dialog file." - } - ] - }, - "Microsoft.IfCondition": { - "$role": "implements(Microsoft.IDialog)", - "title": "If condition", - "description": "Two-way branch the conversation flow based on a condition.", - "type": "object", - "required": [ - "condition", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression to evaluate.", - "examples": [ - "user.age > 3" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to execute if condition is true.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "elseActions": { - "type": "array", - "title": "Else", - "description": "Actions to execute if condition is false.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.IfCondition" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ILanguageGenerator": { - "title": "Microsoft LanguageGenerator", - "description": "Components which dervie from the LanguageGenerator class", - "$role": "interface", - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.ResourceMultiLanguageGenerator" - }, - { - "$ref": "#/definitions/Microsoft.TemplateEngineLanguageGenerator" - }, - { - "type": "string" - } - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - } - }, - "Microsoft.InputDialog": { - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "minimum": 0, - "maximum": 2147483647, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.InputDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.IpEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "IP entity recognizer", - "description": "Recognizer which recognizes internet IP patterns (like 192.1.1.1).", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.IpEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.IRecognizer": { - "title": "Microsoft recognizer", - "description": "Components which derive from Recognizer class", - "$role": "interface", - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.AgeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.ChannelMentionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.ConfirmationEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.CrossTrainedRecognizerSet" - }, - { - "$ref": "#/definitions/Microsoft.CurrencyEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.DateTimeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.DimensionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.EmailEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.GuidEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.HashtagEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.IpEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.LuisRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.MentionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.MultiLanguageRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.NumberEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.NumberRangeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.OrdinalEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.PercentageEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.PhoneNumberEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.QnAMakerRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.RecognizerSet" - }, - { - "$ref": "#/definitions/Microsoft.RegexEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.RegexRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.TemperatureEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.UrlEntityRecognizer" - }, - { - "type": "string" - } - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.2" - } - }, - "Microsoft.ITextTemplate": { - "title": "Microsoft TextTemplate", - "description": "Components which derive from TextTemplate class", - "$role": "interface", - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.TextTemplate" - }, - { - "type": "string" - } - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.13.2" - } - }, - "Microsoft.ITrigger": { - "$role": "interface", - "title": "Microsoft Triggers", - "description": "Components which derive from OnCondition class.", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.OnActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnAssignEntity" - }, - { - "$ref": "#/definitions/Microsoft.OnBeginDialog" - }, - { - "$ref": "#/definitions/Microsoft.OnCancelDialog" - }, - { - "$ref": "#/definitions/Microsoft.OnChooseEntity" - }, - { - "$ref": "#/definitions/Microsoft.OnChooseIntent" - }, - { - "$ref": "#/definitions/Microsoft.OnChooseProperty" - }, - { - "$ref": "#/definitions/Microsoft.OnCommandActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnCommandResultActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnCondition" - }, - { - "$ref": "#/definitions/Microsoft.OnContinueConversation" - }, - { - "$ref": "#/definitions/Microsoft.OnConversationUpdateActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnDialogEvent" - }, - { - "$ref": "#/definitions/Microsoft.OnEndOfActions" - }, - { - "$ref": "#/definitions/Microsoft.OnEndOfConversationActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnError" - }, - { - "$ref": "#/definitions/Microsoft.OnEventActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnHandoffActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnInstallationUpdateActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnIntent" - }, - { - "$ref": "#/definitions/Microsoft.OnInvokeActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageDeleteActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageReactionActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageUpdateActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnQnAMatch" - }, - { - "$ref": "#/definitions/Microsoft.OnRepromptDialog" - }, - { - "$ref": "#/definitions/Microsoft.OnTypingActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnUnknownIntent" - }, - { - "type": "string", - "title": "Reference to Microsoft.ITrigger", - "description": "Reference to Microsoft.ITrigger .dialog file." - } - ] - }, - "Microsoft.ITriggerSelector": { - "$role": "interface", - "title": "Selectors", - "description": "Components which derive from TriggerSelector class.", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.ConditionalSelector" - }, - { - "$ref": "#/definitions/Microsoft.FirstSelector" - }, - { - "$ref": "#/definitions/Microsoft.MostSpecificSelector" - }, - { - "$ref": "#/definitions/Microsoft.RandomSelector" - }, - { - "$ref": "#/definitions/Microsoft.TrueSelector" - }, - { - "type": "string", - "title": "Reference to Microsoft.ITriggerSelector", - "description": "Reference to Microsoft.ITriggerSelector .dialog file." - } - ] - }, - "Microsoft.LanguagePolicy": { - "title": "Language policy", - "description": "This represents a policy map for locales lookups to use for language", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": { - "type": "array", - "title": "Per-locale policy", - "description": "Language policy per locale.", - "items": { - "type": "string", - "title": "Locale", - "description": "Locale like en-us." - } - }, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.LanguagePolicy" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.LogAction": { - "$role": "implements(Microsoft.IDialog)", - "title": "Log to console", - "description": "Log a message to the host application. Send a TraceActivity to Bot Framework Emulator (optional).", - "type": "object", - "required": [ - "text", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "text": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Text", - "description": "Information to log.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "label": { - "$ref": "#/definitions/stringExpression", - "title": "Label", - "description": "Label for the trace activity (used to identify it in a list of trace activities.)" - }, - "traceActivity": { - "$ref": "#/definitions/booleanExpression", - "title": "Send trace activity", - "description": "If true, automatically sends a TraceActivity (view in Bot Framework Emulator)." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.LogAction" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.LuisRecognizer": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "LUIS Recognizer", - "description": "LUIS recognizer.", - "type": "object", - "required": [ - "applicationId", - "endpoint", - "endpointKey", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.AI.Luis", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." - }, - "applicationId": { - "$ref": "#/definitions/stringExpression", - "title": "LUIS application id", - "description": "Application ID for your model from the LUIS service." - }, - "version": { - "$ref": "#/definitions/stringExpression", - "title": "LUIS version", - "description": "Optional version to target. If null then predictionOptions.Slot is used." - }, - "endpoint": { - "$ref": "#/definitions/stringExpression", - "title": "LUIS endpoint", - "description": "Endpoint to use for LUIS service like https://westus.api.cognitive.microsoft.com." - }, - "endpointKey": { - "$ref": "#/definitions/stringExpression", - "title": "LUIS prediction key", - "description": "LUIS prediction key used to call endpoint." - }, - "externalEntityRecognizer": { - "$kind": "Microsoft.IRecognizer", - "title": "External entity recognizer", - "description": "Entities recognized by this recognizer will be passed to LUIS as external entities.", - "$ref": "#/definitions/Microsoft.IRecognizer" - }, - "dynamicLists": { - "$ref": "#/definitions/arrayExpression", - "title": "Dynamic lists", - "description": "Runtime defined entity lists.", - "items": { - "title": "Entity list", - "description": "Lists of canonical values and synonyms for an entity.", - "type": "object", - "properties": { - "entity": { - "title": "Entity", - "description": "Entity to extend with a dynamic list.", - "type": "string" - }, - "list": { - "title": "Dynamic list", - "description": "List of canonical forms and synonyms.", - "type": "array", - "items": { - "type": "object", - "title": "List entry", - "description": "Canonical form and synonynms.", - "properties": { - "canonicalForm": { - "title": "Canonical form", - "description": "Resolution if any synonym matches.", - "type": "string" - }, - "synonyms": { - "title": "Synonyms", - "description": "List of synonyms for a canonical form.", - "type": "array", - "items": { - "title": "Synonym", - "description": "Synonym for canonical form.", - "type": "string" - } - } - } - } - } - } - } - }, - "predictionOptions": { - "type": "object", - "title": "Prediction options", - "description": "Options to control LUIS prediction behavior.", - "properties": { - "includeAllIntents": { - "$ref": "#/definitions/booleanExpression", - "title": "Include all intents", - "description": "True for all intents, false for only top intent." - }, - "includeInstanceData": { - "$ref": "#/definitions/booleanExpression", - "title": "Include $instance", - "description": "True to include $instance metadata in the LUIS response." - }, - "log": { - "$ref": "#/definitions/booleanExpression", - "title": "Log utterances", - "description": "True to log utterances on LUIS service." - }, - "preferExternalEntities": { - "$ref": "#/definitions/booleanExpression", - "title": "Prefer external entities", - "description": "True to prefer external entities to those generated by LUIS models." - }, - "slot": { - "$ref": "#/definitions/stringExpression", - "title": "Slot", - "description": "Slot to use for talking to LUIS service like production or staging." - } - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.LuisRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.MentionEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Mentions entity recognizer", - "description": "Recognizer which recognizes @Mentions", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.MentionEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.MostSpecificSelector": { - "$role": "implements(Microsoft.ITriggerSelector)", - "title": "Most specific trigger selector", - "description": "Select most specific true events with optional additional selector", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "selector": { - "$kind": "Microsoft.ITriggerSelector", - "$ref": "#/definitions/Microsoft.ITriggerSelector" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.MostSpecificSelector" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.MultiLanguageRecognizer": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "Multi-language recognizer", - "description": "Configure one recognizer per language and the specify the language fallback policy.", - "type": "object", - "required": [ - "recognizers", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." - }, - "languagePolicy": { - "$kind": "Microsoft.LanguagePolicy", - "type": "object", - "title": "Language policy", - "description": "Defines fall back languages to try per user input language.", - "$ref": "#/definitions/Microsoft.LanguagePolicy" - }, - "recognizers": { - "type": "object", - "title": "Recognizers", - "description": "Map of language -> Recognizer", - "additionalProperties": { - "$kind": "Microsoft.IRecognizer", - "$ref": "#/definitions/Microsoft.IRecognizer" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.MultiLanguageRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.NumberEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Number entity recognizer", - "description": "Recognizer which recognizes numbers.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.NumberEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.NumberInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "title": "Number input dialog", - "description": "Collect information - Ask for a number.", - "type": "object", - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "defaultValue": { - "$ref": "#/definitions/numberExpression", - "title": "Default value", - "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", - "examples": [ - 13, - "=user.age" - ] - }, - "value": { - "$ref": "#/definitions/numberExpression", - "title": "Value", - "description": "'Property' will be set to the value of this expression unless it evaluates to null.", - "examples": [ - 13, - "=user.age" - ] - }, - "outputFormat": { - "$ref": "#/definitions/expression", - "title": "Output format", - "description": "Expression to format the number output.", - "examples": [ - "=this.value", - "=int(this.text)" - ] - }, - "defaultLocale": { - "$ref": "#/definitions/stringExpression", - "title": "Default locale", - "description": "Default locale to use if there is no locale available..", - "default": "en-us" - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "minimum": 0, - "maximum": 2147483647, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.NumberInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.NumberRangeEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Number range entity recognizer", - "description": "Recognizer which recognizes ranges of numbers (Example:2 to 5).", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.NumberRangeEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OAuthInput": { - "$role": "implements(Microsoft.IDialog)", - "title": "OAuthInput Dialog", - "description": "Collect login information before each request.", - "type": "object", - "required": [ - "connectionName", - "$kind" - ], - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "connectionName": { - "$ref": "#/definitions/stringExpression", - "title": "Connection name", - "description": "The connection name configured in Azure Web App Bot OAuth settings.", - "examples": [ - "msgraphOAuthConnection" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "text": { - "$ref": "#/definitions/stringExpression", - "title": "Text", - "description": "Text shown in the OAuth signin card.", - "examples": [ - "Please sign in. ", - "=concat(x,y,z)" - ] - }, - "title": { - "$ref": "#/definitions/stringExpression", - "title": "Title", - "description": "Title shown in the OAuth signin card.", - "examples": [ - "Login" - ] - }, - "timeout": { - "$ref": "#/definitions/integerExpression", - "title": "Timeout", - "description": "Time out setting for the OAuth signin card.", - "default": 900000 - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Token property", - "description": "Property to store the OAuth token result. WARNING: Changing this location is not recommended as you should call OAuthInput immediately before each use of the token.", - "default": "turn.token", - "examples": [ - "dialog.token" - ] - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send if user response is invalid.", - "examples": [ - "Sorry, the login info you provided is not valid." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Login failed." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "examples": [ - 3 - ] - }, - "defaultValue": { - "$ref": "#/definitions/expression", - "title": "Default value", - "description": "Expression to examine on each turn of the conversation as possible value to the property.", - "examples": [ - "@token" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OAuthInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On activity", - "description": "Actions to perform on receipt of a generic activity.", - "type": "object", - "required": [ - "type", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "type": { - "type": "string", - "title": "Activity type", - "description": "The Activity.Type to match" - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnAssignEntity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On entity assignment", - "description": "Actions to apply an operation on a property and value.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "operation": { - "type": "string", - "title": "Operation", - "description": "Operation filter on event." - }, - "property": { - "type": "string", - "title": "Property", - "description": "Property filter on event." - }, - "value": { - "type": "string", - "title": "Value", - "description": "Value filter on event." - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnAssignEntity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnBeginDialog": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On begin dialog", - "description": "Actions to perform when this dialog begins.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnBeginDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnCancelDialog": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On cancel dialog", - "description": "Actions to perform on cancel dialog event.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnCancelDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnChooseEntity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On choose entity", - "description": "Actions to be performed when value is ambiguous for operator and property.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "operation": { - "type": "string", - "title": "Operation", - "description": "Operation filter on event." - }, - "property": { - "type": "string", - "title": "Property", - "description": "Property filter on event." - }, - "value": { - "type": "string", - "title": "Ambiguous value", - "description": "Ambiguous value filter on event." - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnChooseEntity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnChooseIntent": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On ambiguous intent", - "description": "Actions to perform on when an intent is ambiguous.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "intents": { - "type": "array", - "title": "Intents", - "description": "Intents that must be in the ChooseIntent result for this condition to trigger.", - "items": { - "title": "Intent", - "description": "Intent name to trigger on.", - "type": "string" - } - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnChooseIntent" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnChooseProperty": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On choose property", - "description": "Actions to take when there are multiple possible mappings of entities to properties and operations.", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "type": "object", - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnChooseProperty" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnCommandActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Command activity", - "description": "Actions to perform on receipt of an activity with type 'Command'. Overrides Intent trigger.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnCommandActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnCommandResultActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Command Result activity", - "description": "Actions to perform on receipt of an activity with type 'CommandResult'. Overrides Intent trigger.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnCommandResultActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnCondition": { - "$role": "implements(Microsoft.ITrigger)", - "title": "On condition", - "description": "Actions to perform when specified condition is true.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnCondition" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnContinueConversation": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On continue conversation", - "description": "Actions to perform when a conversation is started up again from a ContinueConversationLater action.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnContinueConversation" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnConversationUpdateActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On ConversationUpdate activity", - "description": "Actions to perform on receipt of an activity with type 'ConversationUpdate'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnConversationUpdateActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnDialogEvent": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On dialog event", - "description": "Actions to perform when a specific dialog event occurs.", - "type": "object", - "required": [ - "event", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "event": { - "type": "string", - "title": "Dialog event name", - "description": "Name of dialog event." - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnDialogEvent" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnEndOfActions": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On end of actions", - "description": "Actions to take when there are no more actions in the current dialog.", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "type": "object", - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnEndOfActions" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnEndOfConversationActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On EndOfConversation activity", - "description": "Actions to perform on receipt of an activity with type 'EndOfConversation'.", - "type": "object", - "required": [ - "$kind" - ], - "$policies": { - "nonInteractive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnEndOfConversationActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnError": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On error", - "description": "Action to perform when an 'Error' dialog event occurs.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnError" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnEventActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Event activity", - "description": "Actions to perform on receipt of an activity with type 'Event'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnEventActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnHandoffActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Handoff activity", - "description": "Actions to perform on receipt of an activity with type 'HandOff'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnHandoffActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnInstallationUpdateActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On InstallationUpdate activity", - "description": "Actions to perform on receipt of an activity with type 'InstallationUpdate'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnInstallationUpdateActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnIntent": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On intent recognition", - "description": "Actions to perform when specified intent is recognized.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "intent": { - "type": "string", - "title": "Intent", - "description": "Name of intent." - }, - "entities": { - "type": "array", - "title": "Entities", - "description": "Required entities.", - "items": { - "type": "string", - "title": "Entity", - "description": "Entity that must be present." - } - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnIntent" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnInvokeActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Invoke activity", - "description": "Actions to perform on receipt of an activity with type 'Invoke'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnInvokeActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnMessageActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Message activity", - "description": "Actions to perform on receipt of an activity with type 'Message'. Overrides Intent trigger.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnMessageActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnMessageDeleteActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On MessageDelete activity", - "description": "Actions to perform on receipt of an activity with type 'MessageDelete'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnMessageDeleteActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnMessageReactionActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On MessageReaction activity", - "description": "Actions to perform on receipt of an activity with type 'MessageReaction'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnMessageReactionActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnMessageUpdateActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On MessageUpdate activity", - "description": "Actions to perform on receipt of an activity with type 'MessageUpdate'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnMessageUpdateActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnQnAMatch": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On QnAMaker match", - "description": "Actions to perform on when an match from QnAMaker is found.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnQnAMatch" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnRepromptDialog": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On RepromptDialog", - "description": "Actions to perform when 'RepromptDialog' event occurs.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnRepromptDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnTypingActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Typing activity", - "description": "Actions to perform on receipt of an activity with type 'Typing'.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnTypingActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnUnknownIntent": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On unknown intent", - "description": "Action to perform when user input is unrecognized or if none of the 'on intent recognition' triggers match recognized intent.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/numberExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnUnknownIntent" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OrdinalEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Ordinal entity recognizer", - "description": "Recognizer which recognizes ordinals (example: first, second, 3rd).", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OrdinalEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.PercentageEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Percentage entity recognizer", - "description": "Recognizer which recognizes percentages.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.PercentageEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.PhoneNumberEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Phone number entity recognizer", - "description": "Recognizer which recognizes phone numbers.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.PhoneNumberEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.QnAMakerDialog": { - "$role": "implements(Microsoft.IDialog)", - "title": "QnAMaker dialog", - "description": "Dialog which uses QnAMAker knowledge base to answer questions.", - "type": "object", - "required": [ - "knowledgeBaseId", - "endpointKey", - "hostname", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.AI.QnA", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "knowledgeBaseId": { - "$ref": "#/definitions/stringExpression", - "title": "KnowledgeBase Id", - "description": "KnowledgeBase Id of your QnA Maker KnowledgeBase.", - "default": "=settings.qna.knowledgebaseid" - }, - "endpointKey": { - "$ref": "#/definitions/stringExpression", - "title": "Endpoint key", - "description": "Endpoint key for the QnA Maker KB.", - "default": "=settings.qna.endpointkey" - }, - "hostname": { - "$ref": "#/definitions/stringExpression", - "title": "Hostname", - "description": "Hostname for your QnA Maker service.", - "default": "=settings.qna.hostname", - "examples": [ - "https://yourserver.azurewebsites.net/qnamaker" - ] - }, - "noAnswer": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Fallback answer", - "description": "Default answer to return when none found in KB.", - "default": "Sorry, I did not find an answer.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "threshold": { - "$ref": "#/definitions/numberExpression", - "title": "Threshold", - "description": "Threshold score to filter results.", - "default": 0.3 - }, - "activeLearningCardTitle": { - "$ref": "#/definitions/stringExpression", - "title": "Active learning card title", - "description": "Title for active learning suggestions card.", - "default": "Did you mean:" - }, - "cardNoMatchText": { - "$ref": "#/definitions/stringExpression", - "title": "Card no match text", - "description": "Text for no match option.", - "default": "None of the above." - }, - "cardNoMatchResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Card no match response", - "description": "Custom response when no match option was selected.", - "default": "Thanks for the feedback.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "strictFilters": { - "$ref": "#/definitions/arrayExpression", - "title": "Strict filters", - "description": "Metadata filters to use when calling the QnA Maker KB.", - "items": { - "type": "object", - "title": "Metadata filter", - "description": "Metadata filter.", - "properties": { - "name": { - "type": "string", - "title": "Name", - "description": "Name of filter property.", - "maximum": 100 - }, - "value": { - "type": "string", - "title": "Value", - "description": "Value to filter on.", - "maximum": 100 - } - } - } - }, - "top": { - "$ref": "#/definitions/numberExpression", - "title": "Top", - "description": "The number of answers you want to retrieve.", - "default": 3 - }, - "isTest": { - "type": "boolean", - "title": "IsTest", - "description": "True, if pointing to Test environment, else false.", - "default": false - }, - "rankerType": { - "$ref": "#/definitions/stringExpression", - "title": "Ranker type", - "description": "Type of Ranker.", - "oneOf": [ - { - "title": "Standard ranker", - "description": "Standard ranker types.", - "enum": [ - "default", - "questionOnly", - "autoSuggestQuestion" - ], - "default": "default" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "strictFiltersJoinOperator": { - "$ref": "#/definitions/stringExpression", - "title": "StrictFiltersJoinOperator", - "description": "Join operator for Strict Filters.", - "oneOf": [ - { - "title": "Join operator", - "description": "Value of Join Operator to be used as conjunction with Strict Filter values.", - "enum": [ - "AND", - "OR" - ], - "default": "AND" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.QnAMakerDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.QnAMakerRecognizer": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "QnAMaker recognizer", - "description": "Recognizer for generating QnAMatch intents from a KB.", - "type": "object", - "required": [ - "knowledgeBaseId", - "endpointKey", - "hostname", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.AI.QnA", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet." - }, - "knowledgeBaseId": { - "$ref": "#/definitions/stringExpression", - "title": "KnowledgeBase Id", - "description": "Knowledge base Id of your QnA Maker knowledge base.", - "default": "=settings.qna.knowledgebaseid" - }, - "endpointKey": { - "$ref": "#/definitions/stringExpression", - "title": "Endpoint key", - "description": "Endpoint key for the QnA Maker KB.", - "default": "=settings.qna.endpointkey" - }, - "hostname": { - "$ref": "#/definitions/stringExpression", - "title": "Hostname", - "description": "Hostname for your QnA Maker service.", - "default": "=settings.qna.hostname", - "examples": [ - "https://yourserver.azurewebsites.net/qnamaker" - ] - }, - "threshold": { - "$ref": "#/definitions/numberExpression", - "title": "Threshold", - "description": "Threshold score to filter results.", - "default": 0.3 - }, - "strictFilters": { - "$ref": "#/definitions/arrayExpression", - "title": "Strict filters", - "description": "Metadata filters to use when calling the QnA Maker KB.", - "items": { - "type": "object", - "title": "Metadata filters", - "description": "Metadata filters to use when querying QnA Maker KB.", - "properties": { - "name": { - "type": "string", - "title": "Name", - "description": "Name to filter on.", - "maximum": 100 - }, - "value": { - "type": "string", - "title": "Value", - "description": "Value to restrict filter.", - "maximum": 100 - } - } - } - }, - "top": { - "$ref": "#/definitions/numberExpression", - "title": "Top", - "description": "The number of answers you want to retrieve.", - "default": 3 - }, - "isTest": { - "$ref": "#/definitions/booleanExpression", - "title": "Use test environment", - "description": "True, if pointing to Test environment, else false.", - "examples": [ - true, - "=f(x)" - ] - }, - "rankerType": { - "title": "Ranker type", - "description": "Type of Ranker.", - "oneOf": [ - { - "type": "string", - "title": "Ranker type", - "description": "Type of Ranker.", - "enum": [ - "default", - "questionOnly", - "autoSuggestQuestion" - ], - "default": "default" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "strictFiltersJoinOperator": { - "$ref": "#/definitions/stringExpression", - "title": "StrictFiltersJoinOperator", - "description": "Join operator for Strict Filters.", - "oneOf": [ - { - "title": "Join operator", - "description": "Value of Join Operator to be used as onjuction with Strict Filter values.", - "enum": [ - "AND", - "OR" - ], - "default": "AND" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "includeDialogNameInMetadata": { - "$ref": "#/definitions/booleanExpression", - "title": "Include dialog name", - "description": "When set to false, the dialog name will not be passed to QnAMaker. (default) is true", - "default": true, - "examples": [ - true, - "=f(x)" - ] - }, - "metadata": { - "$ref": "#/definitions/arrayExpression", - "title": "Metadata filters", - "description": "Metadata filters to use when calling the QnA Maker KB.", - "items": { - "type": "object", - "title": "Metadata filter", - "description": "Metadata filter to use when calling the QnA Maker KB.", - "properties": { - "name": { - "type": "string", - "title": "Name", - "description": "Name of value to test." - }, - "value": { - "type": "string", - "title": "Value", - "description": "Value to filter against." - } - } - } - }, - "context": { - "$ref": "#/definitions/objectExpression", - "title": "QnA request context", - "description": "Context to use for ranking." - }, - "qnaId": { - "$ref": "#/definitions/integerExpression", - "title": "QnA Id", - "description": "A number or expression which is the QnAId to paass to QnAMaker API." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.QnAMakerRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.RandomSelector": { - "$role": "implements(Microsoft.ITriggerSelector)", - "title": "Random rule selector", - "description": "Select most specific true rule.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "seed": { - "type": "integer", - "title": "Random seed", - "description": "Random seed to start random number generation." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RandomSelector" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.RecognizerSet": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "Recognizer set", - "description": "Creates the union of the intents and entities of the recognizers in the set.", - "type": "object", - "required": [ - "recognizers", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." - }, - "recognizers": { - "type": "array", - "title": "Recognizers", - "description": "List of Recognizers defined for this set.", - "items": { - "$kind": "Microsoft.IRecognizer", - "$ref": "#/definitions/Microsoft.IRecognizer" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RecognizerSet" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.RegexEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Regex entity recognizer", - "description": "Recognizer which recognizes patterns of input based on regex.", - "type": "object", - "required": [ - "name", - "pattern", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "name": { - "type": "string", - "title": "Name", - "description": "Name of the entity" - }, - "pattern": { - "type": "string", - "title": "Pattern", - "description": "Pattern expressed as regular expression." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RegexEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.RegexRecognizer": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "Regex recognizer", - "description": "Use regular expressions to recognize intents and entities from user input.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." - }, - "intents": { - "type": "array", - "title": "RegEx patterns to intents", - "description": "Collection of patterns to match for an intent.", - "items": { - "type": "object", - "title": "Pattern", - "description": "Intent and regex pattern.", - "properties": { - "intent": { - "type": "string", - "title": "Intent", - "description": "The intent name." - }, - "pattern": { - "type": "string", - "title": "Pattern", - "description": "The regular expression pattern." - } - } - } - }, - "entities": { - "type": "array", - "title": "Entity recognizers", - "description": "Collection of entity recognizers to use.", - "items": { - "$kind": "Microsoft.IEntityRecognizer", - "$ref": "#/definitions/Microsoft.IEntityRecognizer" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RegexRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.RepeatDialog": { - "$role": "implements(Microsoft.IDialog)", - "type": "object", - "title": "Repeat dialog", - "description": "Repeat current dialog.", - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "allowLoop": { - "$ref": "#/definitions/booleanExpression", - "title": "AllowLoop", - "description": "Optional condition which if true will allow loop of the repeated dialog.", - "examples": [ - "user.age > 3" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "options": { - "$ref": "#/definitions/objectExpression", - "title": "Options", - "description": "One or more options that are passed to the dialog that is called.", - "additionalProperties": { - "type": "string", - "title": "Options", - "description": "Options for repeating dialog." - } - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the dialog that is called can process the current activity.", - "default": true - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RepeatDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ReplaceDialog": { - "$role": "implements(Microsoft.IDialog)", - "type": "object", - "title": "Replace dialog", - "description": "Replace current dialog with another dialog.", - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "dialog": { - "oneOf": [ - { - "$kind": "Microsoft.IDialog", - "pattern": "^(?!(=)).*", - "title": "Dialog", - "$ref": "#/definitions/Microsoft.IDialog" - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=settings.dialogId" - ] - } - ], - "title": "Dialog name", - "description": "Name of the dialog to call." - }, - "options": { - "$ref": "#/definitions/objectExpression", - "title": "Options", - "description": "One or more options that are passed to the dialog that is called.", - "additionalProperties": { - "type": "string", - "title": "Options", - "description": "Options for replacing dialog." - } - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the dialog that is called can process the current activity.", - "default": true - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ReplaceDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ResourceMultiLanguageGenerator": { - "$role": "implements(Microsoft.ILanguageGenerator)", - "title": "Resource multi-language generator", - "description": "MultiLanguage Generator which is bound to resource by resource Id.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional generator ID." - }, - "resourceId": { - "type": "string", - "title": "Resource Id", - "description": "Resource which is the root language generator. Other generaters with the same name and language suffix will be loaded into this generator and used based on the Language Policy.", - "default": "dialog.result" - }, - "languagePolicy": { - "type": "object", - "title": "Language policy", - "description": "Set alternate language policy for this generator. If not set, the global language policy will be used." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ResourceMultiLanguageGenerator" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.SendActivity": { - "$role": "implements(Microsoft.IDialog)", - "title": "Send an activity", - "description": "Respond with an activity.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action." - }, - "activity": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Activity", - "description": "Activity to send.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SendActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.SendHandoffActivity": { - "$role": "implements(Microsoft.IDialog)", - "title": "Send a handoff activity", - "description": "Sends a handoff activity to trigger a handoff request.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "context": { - "$ref": "#/definitions/objectExpression", - "title": "Context", - "description": "Context to send with the handoff request" - }, - "transcript": { - "$ref": "#/definitions/objectExpression", - "title": "transcript", - "description": "Transcript to send with the handoff request" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SendHandoffActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.SetProperties": { - "$role": "implements(Microsoft.IDialog)", - "title": "Set property", - "description": "Set one or more property values.", - "type": "object", - "required": [ - "assignments", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "assignments": { - "type": "array", - "title": "Assignments", - "description": "Property value assignments to set.", - "items": { - "type": "object", - "title": "Assignment", - "description": "Property assignment.", - "properties": { - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property (named location to store information).", - "examples": [ - "user.age" - ] - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "New value or expression.", - "examples": [ - "='milk'", - "=dialog.favColor", - "=dialog.favColor == 'red'" - ] - } - } - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SetProperties" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.SetProperty": { - "$role": "implements(Microsoft.IDialog)", - "title": "Set property", - "description": "Set property to a value.", - "type": "object", - "required": [ - "property", - "value", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property (named location to store information).", - "examples": [ - "user.age" - ] - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "New value or expression.", - "examples": [ - "='milk'", - "=dialog.favColor", - "=dialog.favColor == 'red'" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SetProperty" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.SignOutUser": { - "$role": "implements(Microsoft.IDialog)", - "title": "Sign out user", - "description": "Sign a user out that was logged in previously using OAuthInput.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "userId": { - "$ref": "#/definitions/stringExpression", - "title": "UserId", - "description": "Expression to an user to signout. Default is user.id.", - "default": "=user.id" - }, - "connectionName": { - "$ref": "#/definitions/stringExpression", - "title": "Connection name", - "description": "Connection name that was used with OAuthInput to log a user in." - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SignOutUser" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.StaticActivityTemplate": { - "$role": "implements(Microsoft.IActivityTemplate)", - "title": "Microsoft static activity template", - "description": "This allows you to define a static Activity object", - "type": "object", - "required": [ - "activity", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "activity": { - "$ref": "#/definitions/botframework.json/definitions/Activity", - "title": "Activity", - "description": "A static Activity to used.", - "required": [ - "type" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.StaticActivityTemplate" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.SwitchCondition": { - "$role": "implements(Microsoft.IDialog)", - "title": "Switch condition", - "description": "Execute different actions based on the value of a property.", - "type": "object", - "required": [ - "condition", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "condition": { - "$ref": "#/definitions/stringExpression", - "title": "Condition", - "description": "Property to evaluate.", - "examples": [ - "user.favColor" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "cases": { - "type": "array", - "title": "Cases", - "description": "Actions for each possible condition.", - "items": { - "type": "object", - "title": "Case", - "description": "Case and actions.", - "required": [ - "value" - ], - "properties": { - "value": { - "type": [ - "number", - "integer", - "boolean", - "string" - ], - "title": "Value", - "description": "The value to compare the condition with.", - "examples": [ - "red", - "true", - "13" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - } - } - }, - "default": { - "type": "array", - "title": "Default", - "description": "Actions to execute if none of the cases meet the condition.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SwitchCondition" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TelemetryTrackEventAction": { - "$role": "implements(Microsoft.IDialog)", - "type": "object", - "title": "Telemetry - track event", - "description": "Track a custom event using the registered Telemetry Client.", - "required": [ - "url", - "method", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "eventName": { - "$ref": "#/definitions/stringExpression", - "title": "Event name", - "description": "The name of the event to track.", - "examples": [ - "MyEventStarted", - "MyEventCompleted" - ] - }, - "properties": { - "type": "object", - "title": "Properties", - "description": "One or more properties to attach to the event being tracked.", - "additionalProperties": { - "$ref": "#/definitions/stringExpression" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TelemetryTrackEventAction" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TemperatureEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Temperature recognizer", - "description": "Recognizer which recognizes temperatures.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TemperatureEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TemplateEngineLanguageGenerator": { - "$role": "implements(Microsoft.ILanguageGenerator)", - "title": "Template multi-language generator", - "description": "Template Generator which allows only inline evaluation of templates.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional generator ID." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TemplateEngineLanguageGenerator" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TextInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "type": "object", - "title": "Text input dialog", - "description": "Collection information - Ask for a word or sentence.", - "$policies": { - "interactive": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "defaultValue": { - "$ref": "#/definitions/stringExpression", - "title": "Default value", - "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", - "examples": [ - "hello world", - "Hello ${user.name}", - "=concat(user.firstname, user.lastName)" - ] - }, - "value": { - "$ref": "#/definitions/stringExpression", - "title": "Value", - "description": "'Property' will be set to the value of this expression unless it evaluates to null.", - "examples": [ - "hello world", - "Hello ${user.name}", - "=concat(user.firstname, user.lastName)" - ] - }, - "outputFormat": { - "$ref": "#/definitions/stringExpression", - "title": "Output format", - "description": "Expression to format the output.", - "examples": [ - "=toUpper(this.value)", - "${toUpper(this.value)}" - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "minimum": 0, - "maximum": 2147483647, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TextInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TextTemplate": { - "$role": "implements(Microsoft.ITextTemplate)", - "title": "Microsoft TextTemplate", - "description": "Use LG Templates to create text", - "type": "object", - "required": [ - "template", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "template": { - "title": "Template", - "description": "Language Generator template to evaluate to create the text.", - "type": "string" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TextTemplate" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ThrowException": { - "$role": "implements(Microsoft.IDialog)", - "title": "Throw an exception", - "description": "Throw an exception. Capture this exception with OnError trigger.", - "type": "object", - "required": [ - "errorValue", - "$kind" - ], - "$policies": { - "lastAction": true - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "errorValue": { - "$ref": "#/definitions/valueExpression", - "title": "Error value", - "description": "Error value to throw." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ThrowException" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TraceActivity": { - "$role": "implements(Microsoft.IDialog)", - "title": "Send a TraceActivity", - "description": "Send a trace activity to the transcript logger and/ or Bot Framework Emulator.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "name": { - "$ref": "#/definitions/stringExpression", - "title": "Name", - "description": "Name of the trace activity" - }, - "label": { - "$ref": "#/definitions/stringExpression", - "title": "Label", - "description": "Label for the trace activity (used to identify it in a list of trace activities.)" - }, - "valueType": { - "$ref": "#/definitions/stringExpression", - "title": "Value type", - "description": "Type of value" - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "Property that holds the value to send as trace activity." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TraceActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TrueSelector": { - "$role": "implements(Microsoft.ITriggerSelector)", - "title": "True trigger selector", - "description": "Selector for all true events", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TrueSelector" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.UpdateActivity": { - "$role": "implements(Microsoft.IDialog)", - "title": "Update an activity", - "description": "Respond with an activity.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "activityId": { - "$ref": "#/definitions/stringExpression", - "title": "Activity Id", - "description": "An string expression with the activity id to update.", - "examples": [ - "=turn.lastresult.id" - ] - }, - "activity": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Activity", - "description": "Activity to send.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.UpdateActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.UrlEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Url recognizer", - "description": "Recognizer which recognizes urls.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.13.2" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.UrlEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "numberExpression": { - "$role": "expression", - "title": "Number or expression", - "description": "Number constant or expression to evaluate.", - "oneOf": [ - { - "type": "number", - "title": "Number", - "description": "Number constant.", - "default": 0, - "examples": [ - 15.5 - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=dialog.quantity" - ] - } - ] - }, - "objectExpression": { - "$role": "expression", - "title": "Object or expression", - "description": "Object or expression to evaluate.", - "oneOf": [ - { - "type": "object", - "title": "Object", - "description": "Object constant." - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "role": { - "title": "$role", - "description": "Defines the role played in the dialog schema from [expression|interface|implements($kind)|extends($kind)].", - "type": "string", - "pattern": "^((expression)|(interface)|(implements\\([a-zA-Z][a-zA-Z0-9.]*\\))|(extends\\([a-zA-Z][a-zA-Z0-9.]*\\)))$" - }, - "stringExpression": { - "$role": "expression", - "title": "String or expression", - "description": "Interpolated string or expression to evaluate.", - "oneOf": [ - { - "type": "string", - "title": "String", - "description": "Interpolated string", - "pattern": "^(?!(=)).*", - "examples": [ - "Hello ${user.name}" - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=concat('x','y','z')" - ] - } - ] - }, - "valueExpression": { - "$role": "expression", - "title": "Any or expression", - "description": "Any constant or expression to evaluate.", - "oneOf": [ - { - "type": "object", - "title": "Object", - "description": "Object constant." - }, - { - "type": "array", - "title": "Array", - "description": "Array constant." - }, - { - "type": "string", - "title": "String", - "description": "Interpolated string.", - "pattern": "^(?!(=)).*", - "examples": [ - "Hello ${user.name}" - ] - }, - { - "type": "boolean", - "title": "Boolean", - "description": "Boolean constant", - "examples": [ - false - ] - }, - { - "type": "number", - "title": "Number", - "description": "Number constant.", - "examples": [ - 15.5 - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=..." - ] - } - ] - }, - "schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Core schema meta-schema", - "definitions": { - "schemaArray": { - "type": "array", - "minItems": 1, - "items": { - "$ref": "#/definitions/schema" - } - }, - "nonNegativeInteger": { - "type": "integer", - "minimum": 0 - }, - "nonNegativeIntegerDefault0": { - "type": "integer", - "minimum": 0, - "default": 0 - }, - "simpleTypes": { - "enum": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ] - }, - "stringArray": { - "type": "array", - "uniqueItems": true, - "default": [], - "items": { - "type": "string" - } - } - }, - "type": [ - "object", - "boolean" - ], - "default": true, - "properties": { - "$schema": { - "type": "string", - "format": "uri" - }, - "$ref": { - "type": "string", - "format": "uri-reference" - }, - "$comment": { - "type": "string" - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "default": true, - "readOnly": { - "type": "boolean", - "default": false - }, - "writeOnly": { - "type": "boolean", - "default": false - }, - "examples": { - "type": "array", - "items": true - }, - "multipleOf": { - "type": "number", - "exclusiveMinimum": 0 - }, - "maximum": { - "type": "number" - }, - "exclusiveMaximum": { - "type": "number" - }, - "minimum": { - "type": "number" - }, - "exclusiveMinimum": { - "type": "number" - }, - "maxLength": { - "$ref": "#/definitions/schema/definitions/nonNegativeInteger" - }, - "minLength": { - "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" - }, - "pattern": { - "type": "string", - "format": "regex" - }, - "additionalItems": { - "$ref": "#/definitions/schema" - }, - "items": { - "anyOf": [ - { - "$ref": "#/definitions/schema" - }, - { - "$ref": "#/definitions/schema/definitions/schemaArray" - } - ], - "default": true - }, - "maxItems": { - "$ref": "#/definitions/schema/definitions/nonNegativeInteger" - }, - "minItems": { - "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" - }, - "uniqueItems": { - "type": "boolean", - "default": false - }, - "contains": { - "$ref": "#/definitions/schema" - }, - "maxProperties": { - "$ref": "#/definitions/schema/definitions/nonNegativeInteger" - }, - "minProperties": { - "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" - }, - "required": { - "$ref": "#/definitions/schema/definitions/stringArray" - }, - "additionalProperties": { - "$ref": "#/definitions/schema" - }, - "definitions": { - "type": "object", - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/schema" - } - }, - "properties": { - "type": "object", - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/schema" - } - }, - "patternProperties": { - "type": "object", - "propertyNames": { - "format": "regex" - }, - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/schema" - } - }, - "dependencies": { - "type": "object", - "additionalProperties": { - "anyOf": [ - { - "$ref": "#/definitions/schema" - }, - { - "$ref": "#/definitions/schema/definitions/stringArray" - } - ] - } - }, - "propertyNames": { - "$ref": "#/definitions/schema" - }, - "const": true, - "enum": { - "type": "array", - "minItems": 1, - "uniqueItems": true, - "items": true - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/schema/definitions/simpleTypes" - }, - { - "type": "array", - "items": { - "$ref": "#/definitions/schema/definitions/simpleTypes" - }, - "minItems": 1, - "uniqueItems": true - } - ] - }, - "format": { - "type": "string" - }, - "contentMediaType": { - "type": "string" - }, - "contentEncoding": { - "type": "string" - }, - "if": { - "$ref": "#/definitions/schema" - }, - "then": { - "$ref": "#/definitions/schema" - }, - "else": { - "$ref": "#/definitions/schema" - }, - "allOf": { - "$ref": "#/definitions/schema/definitions/schemaArray" - }, - "anyOf": { - "$ref": "#/definitions/schema/definitions/schemaArray" - }, - "oneOf": { - "$ref": "#/definitions/schema/definitions/schemaArray" - }, - "not": { - "$ref": "#/definitions/schema" - } - } - }, - "botframework.json": { - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "ChannelAccount": { - "description": "Channel account information needed to route a message", - "title": "ChannelAccount", - "type": "object", - "required": [ - "id", - "name" - ], - "properties": { - "id": { - "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", - "type": "string", - "title": "id" - }, - "name": { - "description": "Display friendly name", - "type": "string", - "title": "name" - }, - "aadObjectId": { - "description": "This account's object ID within Azure Active Directory (AAD)", - "type": "string", - "title": "aadObjectId" - }, - "role": { - "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", - "type": "string", - "title": "role" - } - } - }, - "ConversationAccount": { - "description": "Channel account information for a conversation", - "title": "ConversationAccount", - "type": "object", - "required": [ - "conversationType", - "id", - "isGroup", - "name" - ], - "properties": { - "isGroup": { - "description": "Indicates whether the conversation contains more than two participants at the time the\nactivity was generated", - "type": "boolean", - "title": "isGroup" - }, - "conversationType": { - "description": "Indicates the type of the conversation in channels that distinguish between conversation types", - "type": "string", - "title": "conversationType" - }, - "id": { - "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", - "type": "string", - "title": "id" - }, - "name": { - "description": "Display friendly name", - "type": "string", - "title": "name" - }, - "aadObjectId": { - "description": "This account's object ID within Azure Active Directory (AAD)", - "type": "string", - "title": "aadObjectId" - }, - "role": { - "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", - "enum": [ - "bot", - "user" - ], - "type": "string", - "title": "role" - } - } - }, - "MessageReaction": { - "description": "Message reaction object", - "title": "MessageReaction", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "description": "Message reaction type. Possible values include: 'like', 'plusOne'", - "type": "string", - "title": "type" - } - } - }, - "CardAction": { - "description": "A clickable action", - "title": "CardAction", - "type": "object", - "required": [ - "title", - "type", - "value" - ], - "properties": { - "type": { - "description": "The type of action implemented by this button. Possible values include: 'openUrl', 'imBack',\n'postBack', 'playAudio', 'playVideo', 'showImage', 'downloadFile', 'signin', 'call',\n'payment', 'messageBack'", - "type": "string", - "title": "type" - }, - "title": { - "description": "Text description which appears on the button", - "type": "string", - "title": "title" - }, - "image": { - "description": "Image URL which will appear on the button, next to text label", - "type": "string", - "title": "image" - }, - "text": { - "description": "Text for this action", - "type": "string", - "title": "text" - }, - "displayText": { - "description": "(Optional) text to display in the chat feed if the button is clicked", - "type": "string", - "title": "displayText" - }, - "value": { - "description": "Supplementary parameter for action. Content of this property depends on the ActionType", - "title": "value" - }, - "channelData": { - "description": "Channel-specific data associated with this action", - "title": "channelData" - } - } - }, - "SuggestedActions": { - "description": "SuggestedActions that can be performed", - "title": "SuggestedActions", - "type": "object", - "required": [ - "actions", - "to" - ], - "properties": { - "to": { - "description": "Ids of the recipients that the actions should be shown to. These Ids are relative to the\nchannelId and a subset of all recipients of the activity", - "type": "array", - "title": "to", - "items": { - "title": "Id", - "description": "Id of recipient.", - "type": "string" - } - }, - "actions": { - "description": "Actions that can be shown to the user", - "type": "array", - "title": "actions", - "items": { - "$ref": "#/definitions/botframework.json/definitions/CardAction" - } - } - } - }, - "Attachment": { - "description": "An attachment within an activity", - "title": "Attachment", - "type": "object", - "required": [ - "contentType" - ], - "properties": { - "contentType": { - "description": "mimetype/Contenttype for the file", - "type": "string", - "title": "contentType" - }, - "contentUrl": { - "description": "Content Url", - "type": "string", - "title": "contentUrl" - }, - "content": { - "type": "object", - "description": "Embedded content", - "title": "content" - }, - "name": { - "description": "(OPTIONAL) The name of the attachment", - "type": "string", - "title": "name" - }, - "thumbnailUrl": { - "description": "(OPTIONAL) Thumbnail associated with attachment", - "type": "string", - "title": "thumbnailUrl" - } - } - }, - "Entity": { - "description": "Metadata object pertaining to an activity", - "title": "Entity", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "description": "Type of this entity (RFC 3987 IRI)", - "type": "string", - "title": "type" - } - } - }, - "ConversationReference": { - "description": "An object relating to a particular point in a conversation", - "title": "ConversationReference", - "type": "object", - "required": [ - "bot", - "channelId", - "conversation", - "serviceUrl" - ], - "properties": { - "activityId": { - "description": "(Optional) ID of the activity to refer to", - "type": "string", - "title": "activityId" - }, - "user": { - "description": "(Optional) User participating in this conversation", - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "title": "user" - }, - "bot": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "description": "Bot participating in this conversation", - "title": "bot" - }, - "conversation": { - "$ref": "#/definitions/botframework.json/definitions/ConversationAccount", - "description": "Conversation reference", - "title": "conversation" - }, - "channelId": { - "description": "Channel ID", - "type": "string", - "title": "channelId" - }, - "serviceUrl": { - "description": "Service endpoint where operations concerning the referenced conversation may be performed", - "type": "string", - "title": "serviceUrl" - } - } - }, - "TextHighlight": { - "description": "Refers to a substring of content within another field", - "title": "TextHighlight", - "type": "object", - "required": [ - "occurrence", - "text" - ], - "properties": { - "text": { - "description": "Defines the snippet of text to highlight", - "type": "string", - "title": "text" - }, - "occurrence": { - "description": "Occurrence of the text field within the referenced text, if multiple exist.", - "type": "number", - "title": "occurrence" - } - } - }, - "SemanticAction": { - "description": "Represents a reference to a programmatic action", - "title": "SemanticAction", - "type": "object", - "required": [ - "entities", - "id" - ], - "properties": { - "id": { - "description": "ID of this action", - "type": "string", - "title": "id" - }, - "entities": { - "description": "Entities associated with this action", - "type": "object", - "title": "entities", - "additionalProperties": { - "$ref": "#/definitions/botframework.json/definitions/Entity" - } - } - } - }, - "Activity": { - "description": "An Activity is the basic communication type for the Bot Framework 3.0 protocol.", - "title": "Activity", - "type": "object", - "properties": { - "type": { - "description": "Contains the activity type. Possible values include: 'message', 'contactRelationUpdate',\n'conversationUpdate', 'typing', 'endOfConversation', 'event', 'invoke', 'deleteUserData',\n'messageUpdate', 'messageDelete', 'installationUpdate', 'messageReaction', 'suggestion',\n'trace', 'handoff'", - "type": "string", - "title": "type" - }, - "id": { - "description": "Contains an ID that uniquely identifies the activity on the channel.", - "type": "string", - "title": "id" - }, - "timestamp": { - "description": "Contains the date and time that the message was sent, in UTC, expressed in ISO-8601 format.", - "type": "string", - "format": "date-time", - "title": "timestamp" - }, - "localTimestamp": { - "description": "Contains the date and time that the message was sent, in local time, expressed in ISO-8601\nformat.\nFor example, 2016-09-23T13:07:49.4714686-07:00.", - "type": "string", - "format": "date-time", - "title": "localTimestamp" - }, - "localTimezone": { - "description": "Contains the name of the timezone in which the message, in local time, expressed in IANA Time\nZone database format.\nFor example, America/Los_Angeles.", - "type": "string", - "title": "localTimezone" - }, - "serviceUrl": { - "description": "Contains the URL that specifies the channel's service endpoint. Set by the channel.", - "type": "string", - "title": "serviceUrl" - }, - "channelId": { - "description": "Contains an ID that uniquely identifies the channel. Set by the channel.", - "type": "string", - "title": "channelId" - }, - "from": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "description": "Identifies the sender of the message.", - "title": "from" - }, - "conversation": { - "$ref": "#/definitions/botframework.json/definitions/ConversationAccount", - "description": "Identifies the conversation to which the activity belongs.", - "title": "conversation" - }, - "recipient": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "description": "Identifies the recipient of the message.", - "title": "recipient" - }, - "textFormat": { - "description": "Format of text fields Default:markdown. Possible values include: 'markdown', 'plain', 'xml'", - "type": "string", - "title": "textFormat" - }, - "attachmentLayout": { - "description": "The layout hint for multiple attachments. Default: list. Possible values include: 'list',\n'carousel'", - "type": "string", - "title": "attachmentLayout" - }, - "membersAdded": { - "description": "The collection of members added to the conversation.", - "type": "array", - "title": "membersAdded", - "items": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount" - } - }, - "membersRemoved": { - "description": "The collection of members removed from the conversation.", - "type": "array", - "title": "membersRemoved", - "items": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount" - } - }, - "reactionsAdded": { - "description": "The collection of reactions added to the conversation.", - "type": "array", - "title": "reactionsAdded", - "items": { - "$ref": "#/definitions/botframework.json/definitions/MessageReaction" - } - }, - "reactionsRemoved": { - "description": "The collection of reactions removed from the conversation.", - "type": "array", - "title": "reactionsRemoved", - "items": { - "$ref": "#/definitions/botframework.json/definitions/MessageReaction" - } - }, - "topicName": { - "description": "The updated topic name of the conversation.", - "type": "string", - "title": "topicName" - }, - "historyDisclosed": { - "description": "Indicates whether the prior history of the channel is disclosed.", - "type": "boolean", - "title": "historyDisclosed" - }, - "locale": { - "description": "A locale name for the contents of the text field.\nThe locale name is a combination of an ISO 639 two- or three-letter culture code associated\nwith a language\nand an ISO 3166 two-letter subculture code associated with a country or region.\nThe locale name can also correspond to a valid BCP-47 language tag.", - "type": "string", - "title": "locale" - }, - "text": { - "description": "The text content of the message.", - "type": "string", - "title": "text" - }, - "speak": { - "description": "The text to speak.", - "type": "string", - "title": "speak" - }, - "inputHint": { - "description": "Indicates whether your bot is accepting,\nexpecting, or ignoring user input after the message is delivered to the client. Possible\nvalues include: 'acceptingInput', 'ignoringInput', 'expectingInput'", - "type": "string", - "title": "inputHint" - }, - "summary": { - "description": "The text to display if the channel cannot render cards.", - "type": "string", - "title": "summary" - }, - "suggestedActions": { - "description": "The suggested actions for the activity.", - "$ref": "#/definitions/botframework.json/definitions/SuggestedActions", - "title": "suggestedActions" - }, - "attachments": { - "description": "Attachments", - "type": "array", - "title": "attachments", - "items": { - "$ref": "#/definitions/botframework.json/definitions/Attachment" - } - }, - "entities": { - "description": "Represents the entities that were mentioned in the message.", - "type": "array", - "title": "entities", - "items": { - "$ref": "#/definitions/botframework.json/definitions/Entity" - } - }, - "channelData": { - "description": "Contains channel-specific content.", - "title": "channelData" - }, - "action": { - "description": "Indicates whether the recipient of a contactRelationUpdate was added or removed from the\nsender's contact list.", - "type": "string", - "title": "action" - }, - "replyToId": { - "description": "Contains the ID of the message to which this message is a reply.", - "type": "string", - "title": "replyToId" - }, - "label": { - "description": "A descriptive label for the activity.", - "type": "string", - "title": "label" - }, - "valueType": { - "description": "The type of the activity's value object.", - "type": "string", - "title": "valueType" - }, - "value": { - "description": "A value that is associated with the activity.", - "title": "value" - }, - "name": { - "description": "The name of the operation associated with an invoke or event activity.", - "type": "string", - "title": "name" - }, - "relatesTo": { - "description": "A reference to another conversation or activity.", - "$ref": "#/definitions/botframework.json/definitions/ConversationReference", - "title": "relatesTo" - }, - "code": { - "description": "The a code for endOfConversation activities that indicates why the conversation ended.\nPossible values include: 'unknown', 'completedSuccessfully', 'userCancelled', 'botTimedOut',\n'botIssuedInvalidMessage', 'channelFailed'", - "type": "string", - "title": "code" - }, - "expiration": { - "description": "The time at which the activity should be considered to be \"expired\" and should not be\npresented to the recipient.", - "type": "string", - "format": "date-time", - "title": "expiration" - }, - "importance": { - "description": "The importance of the activity. Possible values include: 'low', 'normal', 'high'", - "type": "string", - "title": "importance" - }, - "deliveryMode": { - "description": "A delivery hint to signal to the recipient alternate delivery paths for the activity.\nThe default delivery mode is \"default\". Possible values include: 'normal', 'notification'", - "type": "string", - "title": "deliveryMode" - }, - "listenFor": { - "description": "List of phrases and references that speech and language priming systems should listen for", - "type": "array", - "title": "listenFor", - "items": { - "type": "string", - "title": "Phrase", - "description": "Phrase to listen for." - } - }, - "textHighlights": { - "description": "The collection of text fragments to highlight when the activity contains a ReplyToId value.", - "type": "array", - "title": "textHighlights", - "items": { - "$ref": "#/definitions/botframework.json/definitions/TextHighlight" - } - }, - "semanticAction": { - "$ref": "#/definitions/botframework.json/definitions/SemanticAction", - "description": "An optional programmatic action accompanying this request", - "title": "semanticAction" - } - } - } - } - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/schemas/sdk.uischema b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/schemas/sdk.uischema deleted file mode 100644 index 9cf19c6919..0000000000 --- a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/schemas/sdk.uischema +++ /dev/null @@ -1,1409 +0,0 @@ -{ - "$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema", - "Microsoft.AdaptiveDialog": { - "form": { - "description": "This configures a data driven dialog via a collection of events and actions.", - "helpLink": "https://aka.ms/bf-composer-docs-dialog", - "hidden": [ - "triggers", - "generator", - "selector", - "schema" - ], - "label": "Adaptive dialog", - "order": [ - "recognizer", - "*" - ], - "properties": { - "recognizer": { - "description": "To understand what the user says, your dialog needs a \"Recognizer\"; that includes example words and sentences that users may use.", - "label": "Language Understanding" - } - } - } - }, - "Microsoft.Ask": { - "flow": { - "body": { - "field": "activity", - "widget": "LgWidget" - }, - "footer": { - "description": "= Default operation", - "property": "=action.defaultOperation", - "widget": "PropertyDescription" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "hideFooter": "=!action.defaultOperation", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-send-activity", - "label": "Send a response to ask a question", - "order": [ - "activity", - "*" - ], - "subtitle": "Ask Activity" - } - }, - "Microsoft.AttachmentInput": { - "flow": { - "body": "=action.prompt", - "botAsks": { - "body": { - "defaultContent": "", - "field": "prompt", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "nowrap": true, - "userInput": { - "header": { - "colors": { - "icon": "#0078D4", - "theme": "#E5F0FF" - }, - "disableSDKTitle": true, - "icon": "User", - "menu": "none", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "widget": "PromptWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for a file or an attachment", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Attachment Input" - } - }, - "Microsoft.BeginDialog": { - "flow": { - "body": { - "dialog": "=action.dialog", - "widget": "DialogRef" - }, - "footer": { - "description": "= Return value", - "property": "=action.resultProperty", - "widget": "PropertyDescription" - }, - "hideFooter": "=!action.resultProperty", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "Begin a new dialog", - "order": [ - "dialog", - "options", - "resultProperty", - "*" - ], - "properties": { - "resultProperty": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Begin Dialog" - } - }, - "Microsoft.BeginSkill": { - "flow": { - "body": { - "operation": "Host", - "resource": "=coalesce(action.skillEndpoint, \"?\")", - "singleline": true, - "widget": "ResourceOperation" - }, - "colors": { - "color": "#FFFFFF", - "icon": "#FFFFFF", - "theme": "#004578" - }, - "footer": { - "description": "= Result", - "property": "=action.resultProperty", - "widget": "PropertyDescription" - }, - "hideFooter": "=!action.resultProperty", - "icon": "Library", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bf-composer-docs-connect-skill", - "label": "Connect to a skill", - "properties": { - "resultProperty": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Skill Dialog" - } - }, - "Microsoft.BreakLoop": { - "form": { - "label": "Break out of loop", - "subtitle": "Break out of loop" - } - }, - "Microsoft.CancelAllDialogs": { - "flow": { - "body": { - "description": "(Event)", - "property": "=coalesce(action.eventName, \"?\")", - "widget": "PropertyDescription" - }, - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "Cancel all active dialogs", - "subtitle": "Cancel All Dialogs" - } - }, - "Microsoft.ChoiceInput": { - "flow": { - "body": "=action.prompt", - "botAsks": { - "body": { - "defaultContent": "", - "field": "prompt", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "nowrap": true, - "userInput": { - "header": { - "colors": { - "icon": "#0078D4", - "theme": "#E5F0FF" - }, - "disableSDKTitle": true, - "icon": "User", - "menu": "none", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "widget": "PromptWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt with multi-choice", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Choice Input" - } - }, - "Microsoft.ConfirmInput": { - "flow": { - "body": "=action.prompt", - "botAsks": { - "body": { - "defaultContent": "", - "field": "prompt", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "nowrap": true, - "userInput": { - "header": { - "colors": { - "icon": "#0078D4", - "theme": "#E5F0FF" - }, - "disableSDKTitle": true, - "icon": "User", - "menu": "none", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "widget": "PromptWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for confirmation", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Confirm Input" - } - }, - "Microsoft.ContinueLoop": { - "form": { - "label": "Continue loop", - "subtitle": "Continue loop" - } - }, - "Microsoft.DateTimeInput": { - "flow": { - "body": "=action.prompt", - "botAsks": { - "body": { - "defaultContent": "", - "field": "prompt", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "nowrap": true, - "userInput": { - "header": { - "colors": { - "icon": "#0078D4", - "theme": "#E5F0FF" - }, - "disableSDKTitle": true, - "icon": "User", - "menu": "none", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "widget": "PromptWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for a date or a time", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Date Time Input" - } - }, - "Microsoft.DebugBreak": { - "form": { - "label": "Debug Break" - } - }, - "Microsoft.DeleteProperties": { - "flow": { - "body": { - "items": "=action.properties", - "widget": "ListOverview" - }, - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-using-memory", - "label": "Delete properties", - "properties": { - "properties": { - "intellisenseScopes": [ - "user-variables" - ] - } - }, - "subtitle": "Delete Properties" - } - }, - "Microsoft.DeleteProperty": { - "flow": { - "body": "=action.property", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-using-memory", - "label": "Delete a property", - "properties": { - "property": { - "intellisenseScopes": [ - "user-variables" - ] - } - }, - "subtitle": "Delete Property" - } - }, - "Microsoft.EditActions": { - "flow": { - "body": "=action.changeType", - "widget": "ActionCard" - }, - "form": { - "label": "Modify active dialog", - "subtitle": "Edit Actions" - } - }, - "Microsoft.EditArray": { - "flow": { - "body": { - "operation": "=coalesce(action.changeType, \"?\")", - "resource": "=coalesce(action.itemsProperty, \"?\")", - "widget": "ResourceOperation" - }, - "footer": { - "description": "= Result", - "property": "=action.resultProperty", - "widget": "PropertyDescription" - }, - "hideFooter": "=!action.resultProperty", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-using-memory", - "label": "Edit an array property", - "properties": { - "itemsProperty": { - "intellisenseScopes": [ - "user-variables" - ] - }, - "resultProperty": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Edit Array" - } - }, - "Microsoft.EmitEvent": { - "flow": { - "body": { - "description": "(Event)", - "property": "=coalesce(action.eventName, \"?\")", - "widget": "PropertyDescription" - }, - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-custom-events", - "label": "Emit a custom event", - "subtitle": "Emit Event" - } - }, - "Microsoft.EndDialog": { - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "End this dialog", - "subtitle": "End Dialog" - } - }, - "Microsoft.EndTurn": { - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "End turn", - "subtitle": "End Turn" - } - }, - "Microsoft.Foreach": { - "flow": { - "loop": { - "body": "=concat(\"Each value in \", coalesce(action.itemsProperty, \"?\"))", - "widget": "ActionCard" - }, - "nowrap": true, - "widget": "ForeachWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", - "hidden": [ - "actions" - ], - "label": "Loop: For each item", - "order": [ - "itemsProperty", - "*" - ], - "properties": { - "index": { - "intellisenseScopes": [ - "variable-scopes" - ] - }, - "itemsProperty": { - "intellisenseScopes": [ - "user-variables" - ] - }, - "value": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "For Each" - } - }, - "Microsoft.ForeachPage": { - "flow": { - "loop": { - "body": "=concat(\"Each page of \", coalesce(action.pageSize, \"?\"), \" in \", coalesce(action.page, \"?\"))", - "widget": "ActionCard" - }, - "nowrap": true, - "widget": "ForeachWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", - "hidden": [ - "actions" - ], - "label": "Loop: For each page (multiple items)", - "order": [ - "itemsProperty", - "pageSize", - "*" - ], - "properties": { - "itemsProperty": { - "intellisenseScopes": [ - "user-variables" - ] - }, - "page": { - "intellisenseScopes": [ - "variable-scopes" - ] - }, - "pageIndex": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "For Each Page" - } - }, - "Microsoft.GetActivityMembers": { - "flow": { - "body": { - "description": "= ActivityId", - "property": "=coalesce(action.activityId, \"?\")", - "widget": "PropertyDescription" - }, - "footer": { - "description": "= Result property", - "property": "=coalesce(action.property, \"?\")", - "widget": "PropertyDescription" - }, - "widget": "ActionCard" - } - }, - "Microsoft.GetConversationMembers": { - "flow": { - "footer": { - "description": "= Result property", - "property": "=action.property", - "widget": "PropertyDescription" - }, - "widget": "ActionCard" - } - }, - "Microsoft.HttpRequest": { - "flow": { - "body": { - "operation": "=action.method", - "resource": "=action.url", - "singleline": true, - "widget": "ResourceOperation" - }, - "footer": { - "description": "= Result property", - "property": "=action.resultProperty", - "widget": "PropertyDescription" - }, - "hideFooter": "=!action.resultProperty", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-using-http", - "label": "Send an HTTP request", - "order": [ - "method", - "url", - "body", - "headers", - "*" - ], - "properties": { - "resultProperty": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "HTTP Request" - } - }, - "Microsoft.IfCondition": { - "flow": { - "judgement": { - "body": "=coalesce(action.condition, \"\")", - "widget": "ActionCard" - }, - "nowrap": true, - "widget": "IfConditionWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", - "hidden": [ - "actions", - "elseActions" - ], - "label": "Branch: If/Else", - "subtitle": "If Condition" - } - }, - "Microsoft.LogAction": { - "form": { - "helpLink": "https://aka.ms/composer-telemetry", - "label": "Log to console", - "subtitle": "Log Action" - } - }, - "Microsoft.NumberInput": { - "flow": { - "body": "=action.prompt", - "botAsks": { - "body": { - "defaultContent": "", - "field": "prompt", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "nowrap": true, - "userInput": { - "header": { - "colors": { - "icon": "#0078D4", - "theme": "#E5F0FF" - }, - "disableSDKTitle": true, - "icon": "User", - "menu": "none", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "widget": "PromptWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for a number", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Number Input" - } - }, - "Microsoft.OAuthInput": { - "flow": { - "body": { - "operation": "Connection", - "resource": "=coalesce(action.connectionName, \"?\")", - "singleline": true, - "widget": "ResourceOperation" - }, - "footer": { - "description": "= Token property", - "property": "=action.property", - "widget": "PropertyDescription" - }, - "hideFooter": "=!action.property", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-using-oauth", - "label": "OAuth login", - "order": [ - "connectionName", - "*" - ], - "subtitle": "OAuth Input" - } - }, - "Microsoft.OnActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Activities", - "order": [ - "condition", - "*" - ], - "subtitle": "Activity received" - }, - "trigger": { - "label": "Activities (Activity received)", - "order": 5.1, - "submenu": { - "label": "Activities", - "placeholder": "Select an activity type", - "prompt": "Which activity type?" - } - } - }, - "Microsoft.OnAssignEntity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Handle a condition when an entity is assigned", - "order": [ - "condition", - "*" - ], - "subtitle": "EntityAssigned activity" - } - }, - "Microsoft.OnBeginDialog": { - "form": { - "hidden": [ - "actions" - ], - "label": "Dialog started", - "order": [ - "condition", - "*" - ], - "subtitle": "Begin dialog event" - }, - "trigger": { - "label": "Dialog started (Begin dialog event)", - "order": 4.1, - "submenu": { - "label": "Dialog events", - "placeholder": "Select an event type", - "prompt": "Which event?" - } - } - }, - "Microsoft.OnCancelDialog": { - "form": { - "hidden": [ - "actions" - ], - "label": "Dialog cancelled", - "order": [ - "condition", - "*" - ], - "subtitle": "Cancel dialog event" - }, - "trigger": { - "label": "Dialog cancelled (Cancel dialog event)", - "order": 4.2, - "submenu": "Dialog events" - } - }, - "Microsoft.OnChooseEntity": { - "form": { - "hidden": [ - "actions" - ], - "order": [ - "condition", - "*" - ] - } - }, - "Microsoft.OnChooseIntent": { - "form": { - "hidden": [ - "actions" - ], - "order": [ - "condition", - "*" - ] - }, - "trigger": { - "label": "Duplicated intents recognized", - "order": 6 - } - }, - "Microsoft.OnCommandActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Command received", - "order": [ - "condition", - "*" - ], - "subtitle": "Command activity received" - }, - "trigger": { - "label": "Command received (Command activity received)", - "order": 5.81, - "submenu": "Activities" - } - }, - "Microsoft.OnCommandResultActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Command Result received", - "order": [ - "condition", - "*" - ], - "subtitle": "Command Result activity received" - }, - "trigger": { - "label": "Command Result received (Command Result activity received)", - "order": 5.81, - "submenu": "Activities" - } - }, - "Microsoft.OnCondition": { - "form": { - "hidden": [ - "actions" - ], - "label": "Handle a condition", - "order": [ - "condition", - "*" - ], - "subtitle": "Condition" - } - }, - "Microsoft.OnConversationUpdateActivity": { - "form": { - "description": "Handle the events fired when a user begins a new conversation with the bot.", - "helpLink": "https://aka.ms/bf-composer-docs-conversation-update-activity", - "hidden": [ - "actions" - ], - "label": "Greeting", - "order": [ - "condition", - "*" - ], - "subtitle": "ConversationUpdate activity" - }, - "trigger": { - "label": "Greeting (ConversationUpdate activity)", - "order": 5.2, - "submenu": "Activities" - } - }, - "Microsoft.OnDialogEvent": { - "form": { - "hidden": [ - "actions" - ], - "label": "Dialog events", - "order": [ - "condition", - "*" - ], - "subtitle": "Dialog event" - }, - "trigger": { - "label": "Custom events", - "order": 7 - } - }, - "Microsoft.OnEndOfActions": { - "form": { - "hidden": [ - "actions" - ], - "label": "Handle a condition when actions have ended", - "order": [ - "condition", - "*" - ], - "subtitle": "EndOfActions activity" - } - }, - "Microsoft.OnEndOfConversationActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Conversation ended", - "order": [ - "condition", - "*" - ], - "subtitle": "EndOfConversation activity" - }, - "trigger": { - "label": "Conversation ended (EndOfConversation activity)", - "order": 5.3, - "submenu": "Activities" - } - }, - "Microsoft.OnError": { - "form": { - "hidden": [ - "actions" - ], - "label": "Error occurred", - "order": [ - "condition", - "*" - ], - "subtitle": "Error event" - }, - "trigger": { - "label": "Error occurred (Error event)", - "order": 4.3, - "submenu": "Dialog events" - } - }, - "Microsoft.OnEventActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Event received", - "order": [ - "condition", - "*" - ], - "subtitle": "Event activity" - }, - "trigger": { - "label": "Event received (Event activity)", - "order": 5.4, - "submenu": "Activities" - } - }, - "Microsoft.OnHandoffActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Handover to human", - "order": [ - "condition", - "*" - ], - "subtitle": "Handoff activity" - }, - "trigger": { - "label": "Handover to human (Handoff activity)", - "order": 5.5, - "submenu": "Activities" - } - }, - "Microsoft.OnInstallationUpdateActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Installation updated", - "order": [ - "condition", - "*" - ], - "subtitle": "Installation updated activity" - } - }, - "Microsoft.OnIntent": { - "form": { - "hidden": [ - "actions" - ], - "label": "Intent recognized", - "order": [ - "intent", - "condition", - "entities", - "*" - ], - "subtitle": "Intent recognized" - }, - "trigger": { - "label": "Intent recognized", - "order": 1 - } - }, - "Microsoft.OnInvokeActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Conversation invoked", - "order": [ - "condition", - "*" - ], - "subtitle": "Invoke activity" - }, - "trigger": { - "label": "Conversation invoked (Invoke activity)", - "order": 5.6, - "submenu": "Activities" - } - }, - "Microsoft.OnMessageActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Message received", - "order": [ - "condition", - "*" - ], - "subtitle": "Message activity received" - }, - "trigger": { - "label": "Message received (Message activity received)", - "order": 5.81, - "submenu": "Activities" - } - }, - "Microsoft.OnMessageDeleteActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Message deleted", - "order": [ - "condition", - "*" - ], - "subtitle": "Message deleted activity" - }, - "trigger": { - "label": "Message deleted (Message deleted activity)", - "order": 5.82, - "submenu": "Activities" - } - }, - "Microsoft.OnMessageReactionActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Message reaction", - "order": [ - "condition", - "*" - ], - "subtitle": "Message reaction activity" - }, - "trigger": { - "label": "Message reaction (Message reaction activity)", - "order": 5.83, - "submenu": "Activities" - } - }, - "Microsoft.OnMessageUpdateActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Message updated", - "order": [ - "condition", - "*" - ], - "subtitle": "Message updated activity" - }, - "trigger": { - "label": "Message updated (Message updated activity)", - "order": 5.84, - "submenu": "Activities" - } - }, - "Microsoft.OnQnAMatch": { - "trigger": { - "label": "QnA Intent recognized", - "order": 2 - } - }, - "Microsoft.OnRepromptDialog": { - "form": { - "hidden": [ - "actions" - ], - "label": "Re-prompt for input", - "order": [ - "condition", - "*" - ], - "subtitle": "Reprompt dialog event" - }, - "trigger": { - "label": "Re-prompt for input (Reprompt dialog event)", - "order": 4.4, - "submenu": "Dialog events" - } - }, - "Microsoft.OnTypingActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "User is typing", - "order": [ - "condition", - "*" - ], - "subtitle": "Typing activity" - }, - "trigger": { - "label": "User is typing (Typing activity)", - "order": 5.7, - "submenu": "Activities" - } - }, - "Microsoft.OnUnknownIntent": { - "form": { - "hidden": [ - "actions" - ], - "label": "Unknown intent", - "order": [ - "condition", - "*" - ], - "subtitle": "Unknown intent recognized" - }, - "trigger": { - "label": "Unknown intent", - "order": 3 - } - }, - "Microsoft.QnAMakerDialog": { - "flow": { - "body": "=action.hostname", - "widget": "ActionCard" - } - }, - "Microsoft.RegexRecognizer": { - "form": { - "hidden": [ - "entities" - ] - } - }, - "Microsoft.RepeatDialog": { - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "Repeat this dialog", - "order": [ - "options", - "*" - ], - "subtitle": "Repeat Dialog" - } - }, - "Microsoft.ReplaceDialog": { - "flow": { - "body": { - "dialog": "=action.dialog", - "widget": "DialogRef" - }, - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "Replace this dialog", - "order": [ - "dialog", - "options", - "*" - ], - "subtitle": "Replace Dialog" - } - }, - "Microsoft.SendActivity": { - "flow": { - "body": { - "field": "activity", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-send-activity", - "label": "Send a response", - "order": [ - "activity", - "*" - ], - "subtitle": "Send Activity" - } - }, - "Microsoft.SendHandoffActivity": { - "flow": { - "widget": "ActionHeader" - }, - "form": { - "helpLink": "https://aka.ms/bfc-send-handoff-activity", - "label": "Send a handoff request", - "subtitle": "Send Handoff Activity" - }, - "menu": { - "label": "Send Handoff Event", - "submenu": [ - "Access external resources" - ] - } - }, - "Microsoft.SetProperties": { - "flow": { - "body": { - "items": "=foreach(action.assignments, x => concat(coalesce(x.property, \"?\"), \" : \", coalesce(x.value, \"?\")))", - "widget": "ListOverview" - }, - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-using-memory", - "label": "Set properties", - "properties": { - "assignments": { - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - } - } - }, - "subtitle": "Set Properties" - } - }, - "Microsoft.SetProperty": { - "flow": { - "body": "${coalesce(action.property, \"?\")} : ${coalesce(action.value, \"?\")}", - "widget": "ActionCard" - }, - "form": { - "helpLink": "https://aka.ms/bfc-using-memory", - "label": "Set a property", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Set Property" - } - }, - "Microsoft.SignOutUser": { - "form": { - "label": "Sign out user", - "subtitle": "Signout User" - } - }, - "Microsoft.SwitchCondition": { - "flow": { - "judgement": { - "body": "=coalesce(action.condition, \"\")", - "widget": "ActionCard" - }, - "nowrap": true, - "widget": "SwitchConditionWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", - "hidden": [ - "default" - ], - "label": "Branch: Switch (multiple options)", - "properties": { - "cases": { - "hidden": [ - "actions" - ] - }, - "condition": { - "intellisenseScopes": [ - "user-variables" - ] - } - }, - "subtitle": "Switch Condition" - } - }, - "Microsoft.TextInput": { - "flow": { - "body": "=action.prompt", - "botAsks": { - "body": { - "defaultContent": "", - "field": "prompt", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#5C2E91", - "theme": "#EEEAF4" - }, - "icon": "MessageBot", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "nowrap": true, - "userInput": { - "header": { - "colors": { - "icon": "#0078D4", - "theme": "#E5F0FF" - }, - "disableSDKTitle": true, - "icon": "User", - "menu": "none", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "widget": "PromptWidget" - }, - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for text", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Text Input" - } - }, - "Microsoft.ThrowException": { - "flow": { - "body": { - "description": "= ErrorValue", - "property": "=coalesce(action.errorValue, \"?\")", - "widget": "PropertyDescription" - }, - "widget": "ActionCard" - }, - "form": { - "label": "Throw an exception", - "subtitle": "Throw an exception" - } - }, - "Microsoft.TraceActivity": { - "form": { - "helpLink": "https://aka.ms/composer-telemetry", - "label": "Emit a trace event", - "subtitle": "Trace Activity" - } - }, - "Microsoft.UpdateActivity": { - "flow": { - "body": { - "field": "activity", - "widget": "LgWidget" - }, - "header": { - "colors": { - "icon": "#656565", - "theme": "#D7D7D7" - }, - "icon": "MessageBot", - "title": "Update activity", - "widget": "ActionHeader" - }, - "widget": "ActionCard" - }, - "form": { - "label": "Update an activity", - "subtitle": "Update Activity" - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/schemas/update-schema.ps1 b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/schemas/update-schema.ps1 deleted file mode 100644 index 67715586e4..0000000000 --- a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/schemas/update-schema.ps1 +++ /dev/null @@ -1,27 +0,0 @@ -$SCHEMA_FILE="sdk.schema" -$UISCHEMA_FILE="sdk.uischema" -$BACKUP_SCHEMA_FILE="sdk-backup.schema" -$BACKUP_UISCHEMA_FILE="sdk-backup.uischema" - -Write-Host "Running schema merge." - -if (Test-Path $SCHEMA_FILE -PathType leaf) { Move-Item -Force -Path $SCHEMA_FILE -Destination $BACKUP_SCHEMA_FILE } -if (Test-Path $UISCHEMA_FILE -PathType leaf) { Move-Item -Force -Path $UISCHEMA_FILE -Destination $BACKUP_UISCHEMA_FILE } - -bf dialog:merge "*.schema" "!**/sdk-backup.schema" "*.uischema" "!**/sdk-backup.uischema" "!**/sdk.override.uischema" "!**/generated" "../*.csproj" "../package.json" -o $SCHEMA_FILE - -if (Test-Path $SCHEMA_FILE -PathType leaf) -{ - if (Test-Path $BACKUP_SCHEMA_FILE -PathType leaf) { Remove-Item -Force -Path $BACKUP_SCHEMA_FILE } - if (Test-Path $BACKUP_UISCHEMA_FILE -PathType leaf) { Remove-Item -Force -Path $BACKUP_UISCHEMA_FILE } - - Write-Host "Schema merged succesfully." - if (Test-Path $SCHEMA_FILE -PathType leaf) { Write-Host " Schema: $SCHEMA_FILE" } - if (Test-Path $UISCHEMA_FILE -PathType leaf) { Write-Host " UI Schema: $UISCHEMA_FILE" } -} -else -{ - Write-Host "Schema merge failed. Restoring previous versions." - if (Test-Path $BACKUP_SCHEMA_FILE -PathType leaf) { Move-Item -Force -Path $BACKUP_SCHEMA_FILE -Destination $SCHEMA_FILE } - if (Test-Path $BACKUP_UISCHEMA_FILE -PathType leaf) { Move-Item -Force -Path $BACKUP_UISCHEMA_FILE -Destination $UISCHEMA_FILE } -} diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/schemas/update-schema.sh b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/schemas/update-schema.sh deleted file mode 100644 index 50beec9c4c..0000000000 --- a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/schemas/update-schema.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -SCHEMA_FILE=sdk.schema -UISCHEMA_FILE=sdk.uischema -BACKUP_SCHEMA_FILE=sdk-backup.schema -BACKUP_UISCHEMA_FILE=sdk-backup.uischema - -while [ $# -gt 0 ]; do - if [[ $1 == *"-"* ]]; then - param="${1/-/}" - declare $param="$2" - fi - shift -done - -echo "Running schema merge." -[ -f "$SCHEMA_FILE" ] && mv "./$SCHEMA_FILE" "./$BACKUP_SCHEMA_FILE" -[ -f "$UISCHEMA_FILE" ] && mv "./$UISCHEMA_FILE" "./$BACKUP_UISCHEMA_FILE" - -bf dialog:merge "*.schema" "!**/sdk-backup.schema" "*.uischema" "!**/sdk-backup.uischema" "!**/sdk.override.uischema" "!**/generated" "../*.csproj" "../package.json" -o $SCHEMA_FILE - -if [ -f "$SCHEMA_FILE" ]; then - rm -rf "./$BACKUP_SCHEMA_FILE" - rm -rf "./$BACKUP_UISCHEMA_FILE" - echo "Schema merged succesfully." - [ -f "$SCHEMA_FILE" ] && echo " Schema: $SCHEMA_FILE" - [ -f "$UISCHEMA_FILE" ] && echo " UI Schema: $UISCHEMA_FILE" -else - echo "Schema merge failed. Restoring previous versions." - [ -f "$BACKUP_SCHEMA_FILE" ] && mv "./$BACKUP_SCHEMA_FILE" "./$SCHEMA_FILE" - [ -f "$BACKUP_UISCHEMA_FILE" ] && mv "./$BACKUP_UISCHEMA_FILE" "./$UISCHEMA_FILE" -fi diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/settings/appsettings.json b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/settings/appsettings.json deleted file mode 100644 index 531e75ff37..0000000000 --- a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/settings/appsettings.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "customFunctions": [], - "defaultLanguage": "en-us", - "defaultLocale": "en-us", - "importedLibraries": [], - "languages": [ - "en-us" - ], - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft": "Warning", - "Microsoft.Hosting.Lifetime": "Information" - } - }, - "luFeatures": { - "enableCompositeEntities": true, - "enableListEntities": true, - "enableMLEntities": true, - "enablePattern": true, - "enablePhraseLists": true, - "enablePrebuiltEntities": true, - "enableRegexEntities": true - }, - "luis": { - "authoringEndpoint": "", - "authoringRegion": "", - "defaultLanguage": "en-us", - "endpoint": "", - "environment": "composer", - "name": "EchoSkillBotComposer" - }, - "MicrosoftAppId": "", - "publishTargets": [], - "qna": { - "hostname": "", - "knowledgebaseid": "", - "qnaRegion": "westus" - }, - "runtime": { - "command": "dotnet run --project EchoSkillBotComposer.csproj", - "customRuntime": true, - "key": "adaptive-runtime-dotnet-webapp", - "path": "../" - }, - "runtimeSettings": { - "adapters": [], - "features": { - "removeRecipientMentions": false, - "showTyping": false, - "traceTranscript": false, - "useInspection": false, - "setSpeak": { - "voiceFontName": "en-US-AriaNeural", - "fallbackToTextForSpeechIfEmpty": true - } - }, - "components": [], - "skills": { - "allowedCallers": ["*"] - }, - "storage": "", - "telemetry": { - "logActivities": true, - "logPersonalInformation": false, - "options": { - "connectionString": "" - } - } - }, - "downsampling": { - "maxImbalanceRatio": -1 - }, - "skillConfiguration": {}, - "skillHostEndpoint": "http://localhost:35410/api/skills" -} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/wwwroot/default.htm b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/wwwroot/default.htm deleted file mode 100644 index 696762e394..0000000000 --- a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/wwwroot/default.htm +++ /dev/null @@ -1,364 +0,0 @@ - - - - - - - EchoSkillBotComposer - - - - - -
    -
    -
    -
    EchoSkillBotComposer
    -
    -
    -
    -
    -
    Your bot is ready!
    -
    You can test your bot in the Bot Framework Emulator
    - by connecting to http://localhost:3978/api/messages.
    -
    -
    Visit Azure - Bot Service to register your bot and add it to
    - various channels. The bot's endpoint URL typically looks - like this:
    -
    https://your_bots_hostname/api/messages
    -
    -
    -
    -
    - -
    - - - \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/wwwroot/manifests/echoskillbotcomposer-manifest.json b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/wwwroot/manifests/echoskillbotcomposer-manifest.json deleted file mode 100644 index 25205b9286..0000000000 --- a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/wwwroot/manifests/echoskillbotcomposer-manifest.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "https://schemas.botframework.com/schemas/skills/v2.1/skill-manifest.json", - "$id": "EchoSkillBotComposerDotNet", - "name": "EchoSkillBotComposerDotNet", - "version": "1.0", - "description": "This is a skill for echoing what the user sent to the bot (using Composer with the dotnet runtime).", - "publisherName": "Microsoft", - "privacyUrl": "https://microsoft.com/privacy", - "copyright": "Copyright (c) Microsoft Corporation. All rights reserved.", - "license": "https://github.com/microsoft/BotFramework-FunctionalTests/blob/main/LICENSE", - "tags": [ - "echo" - ], - "endpoints": [ - { - "name": "default", - "protocol": "BotFrameworkV3", - "description": "Localhost endpoint for the skill (on port 35410)", - "endpointUrl": "http://localhost:35410/api/messages", - "msAppId": "00000000-0000-0000-0000-000000000000" - } - ] -} \ No newline at end of file diff --git a/tests/functional/build/yaml/deployBotResources/deployBotResources.yml b/tests/functional/build/yaml/deployBotResources/deployBotResources.yml index 6fd01cd5fa..f39e345b58 100644 --- a/tests/functional/build/yaml/deployBotResources/deployBotResources.yml +++ b/tests/functional/build/yaml/deployBotResources/deployBotResources.yml @@ -108,9 +108,11 @@ stages: appId: $(BFCFNEMPTYBOTDOTNETWEBAPPID) appSecret: $(BFCFNEMPTYBOTDOTNETWEBAPPSECRET) project: - directory: 'Tests/Functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot' - name: "SimpleHostBot.csproj" + generator: 'generators/generator-bot-empty' + integration: "webapp" + name: "EmptyBotDotNetWebApp" netCoreVersion: "3.1.x" + platform: "dotnet" dependency: registry: ${{ parameters.dependenciesRegistryDotNetHosts }} version: ${{ parameters.dependenciesVersionDotNetHosts }} @@ -122,12 +124,14 @@ stages: appId: $(BFCFNEMPTYBOTDOTNETFUNCTIONSID) appSecret: $(BFCFNEMPTYBOTDOTNETFUNCTIONSSECRET) project: - directory: 'Tests/Functional/Bots/DotNet/Consumers/CodeFirst/SimpleHostBot' - name: "SimpleHostBot.csproj" + generator: 'generators/generator-bot-empty' + integration: "functions" + name: "EmptyBotDotNetFunctions" netCoreVersion: "3.1.x" + platform: "dotnet" dependency: registry: ${{ parameters.dependenciesRegistryDotNetHosts }} - version: ${{ parameters.dependenciesVersionDotNetHosts }} + version: ${{ parameters.dependenciesVersionDotNetHosts }} # JS - template: js/deploy.yml diff --git a/tests/functional/build/yaml/deployBotResources/dotnet/deploy.yml b/tests/functional/build/yaml/deployBotResources/dotnet/deploy.yml index 9c85c0cd42..f3d0c6f054 100644 --- a/tests/functional/build/yaml/deployBotResources/dotnet/deploy.yml +++ b/tests/functional/build/yaml/deployBotResources/dotnet/deploy.yml @@ -54,9 +54,8 @@ stages: dependsOn: "${{ bot.dependsOn }}" jobs: - job: "Deploy" - ${{ if eq(bot.type, 'SkillV3') }}: - variables: - SolutionDir: "$(BUILD.SOURCESDIRECTORY)/Bots/DotNet/" + variables: + SolutionDir: "$(BUILD.SOURCESDIRECTORY)/bots/" displayName: "Deploy steps" steps: # Delete Bot Resources @@ -87,28 +86,6 @@ stages: - task: NuGetToolInstaller@1 displayName: "Use NuGet" - # Prepare appsettings.json file, deleting all the declared skills, so it uses only the settings define in Azure - - ${{ if eq(bot.type, 'Host') }}: - - task: PowerShell@2 - displayName: 'Prepare App Settings' - inputs: - targetType: inline - workingDirectory: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ bot.project.directory }}' - failOnStderr: true - script: | - $file = "./appsettings.json" - $content = Get-Content -Raw $file | ConvertFrom-Json - $content.BotFrameworkSkills = @() - $content | ConvertTo-Json | Set-Content $file - - # Run NuGet restore SkillV3 - - ${{ if eq(bot.type, 'SkillV3') }}: - - task: NuGetCommand@2 - displayName: "NuGet restore" - inputs: - restoreSolution: "${{ bot.project.directory }}/${{ bot.project.name }}" - restoreDirectory: "$(SOLUTIONDIR)packages" - # Evaluate dependencies source and version - template: evaluateDependenciesVariables.yml parameters: @@ -116,6 +93,12 @@ stages: registry: "${{ bot.dependency.registry }}" version: "${{ bot.dependency.version }}" + # Generate bot template + - template: ../generator/deploy.yml + parameters: + project: "${{ bot.project }}" + solutiondir: "$(SOLUTIONDIR)" + # Start of DotNet Install & Build - ${{ if in(bot.type, 'Host', 'Skill') }}: # Install dependencies @@ -123,10 +106,12 @@ stages: parameters: project: "${{ bot.project }}" registry: "$(DEPENDENCIESSOURCE)" + solutiondir: "$(SOLUTIONDIR)/${{ bot.project.name }}" version: "$(DEPENDENCIESVERSIONNUMBER)" packages: - Microsoft.Bot.Builder.Dialogs - Microsoft.Bot.Builder.Integration.AspNet.Core + Microsoft.Bot.Builder.AI.Luis + Microsoft.Bot.Builder.AI.QnA + Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime # Build Bot - task: DotNetCoreCLI@2 @@ -134,7 +119,7 @@ stages: inputs: command: publish publishWebProjects: false - projects: "${{ bot.project.directory }}/${{ bot.project.name }}" + projects: "$(SOLUTIONDIR)/${{ bot.project.name }}/${{ bot.project.name }}.csproj" arguments: "--output $(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ parameters.buildFolder }}/${{ bot.name }}" modifyOutputPath: false @@ -143,59 +128,15 @@ stages: displayName: 'Get BotBuilder Version' inputs: targetType: inline - workingDirectory: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ bot.project.directory }}' + workingDirectory: '$(SOLUTIONDIR)/${{ bot.project.name }}' failOnStderr: true script: | - [XML]$data = Get-Content "./${{ bot.project.name }}" - $package = $data.Project.ItemGroup.PackageReference | Where-Object { $_.Include -eq "Microsoft.Bot.Builder.Integration.AspNet.Core" } + [XML]$data = Get-Content "./${{ bot.project.name }}.csproj" + $package = $data.Project.ItemGroup.PackageReference | Where-Object { $_.Include -eq "Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime" } Write-Host "##vso[task.setvariable variable=BotBuilderVersionNumber]$($package.version)" # End of DotNet Install & Build - # Start DotNet v3 Install, Build - - ${{ if eq(bot.type, 'SkillV3') }}: - # Install dependencies - - template: installDependenciesV3.yml - parameters: - registry: "$(DEPENDENCIESSOURCE)" - version: "$(DEPENDENCIESVERSIONNUMBER)" - project: "${{ bot.project }}" - packages: - Microsoft.Bot.Builder - Microsoft.Bot.Builder.Azure - Microsoft.Bot.Builder.History - - # Build bot - - task: MSBuild@1 - displayName: "Build" - inputs: - solution: "${{ bot.project.directory }}/${{ bot.project.name }}" - vsVersion: 16.0 - platform: "$(BUILDPLATFORM)" - configuration: "$(BUILDCONFIGURATION)" - - # Get BotBuilder version - - task: PowerShell@2 - displayName: 'Get BotBuilder Version' - inputs: - targetType: inline - failOnStderr: true - script: | - $result = @(Get-ChildItem "$(SOLUTIONDIR)packages\Microsoft.Bot.Builder.[0-9]*" -directory | Sort LastWriteTime -Descending) - $version = $result[0].Name.Replace("Microsoft.Bot.Builder.", "") - Write-Host "##vso[task.setvariable variable=BotBuilderVersionNumber]$($version)" - - # Zip bot - - task: ArchiveFiles@2 - displayName: 'Zip bot' - inputs: - rootFolderOrFile: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ bot.project.directory }}' - includeRootFolder: false - archiveType: 'zip' - archiveFile: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ parameters.buildFolder }}/${{ bot.name }}/${{ bot.name }}.zip' - replaceExistingArchive: true - verbose: true - # End of DotNet v3 Install, Build # Tag BotBuilder package version - template: ../common/tagBotBuilderVersion.yml @@ -258,3 +199,11 @@ stages: botGroup: "${{ parameters.resourceGroup }}" botName: "${{ bot.name }}" resourceSuffix: "${{ parameters.resourceSuffix }}" + + # Debugging output for the workspace + - script: | + cd .. + dir *.* /s + displayName: 'Dir workspace' + continueOnError: true + condition: succeededOrFailed() \ No newline at end of file diff --git a/tests/functional/build/yaml/deployBotResources/dotnet/deployComposer.yml b/tests/functional/build/yaml/deployBotResources/dotnet/deployComposer.yml deleted file mode 100644 index 5e20c68afe..0000000000 --- a/tests/functional/build/yaml/deployBotResources/dotnet/deployComposer.yml +++ /dev/null @@ -1,167 +0,0 @@ -parameters: - - name: appInsight - displayName: Azure Application Insight name - type: string - - - name: appServicePlan - displayName: App Service Plan name - type: string - - - name: appServicePlanRG - displayName: App Service Plan Resource Group - type: string - - - name: azureSubscription - displayName: Azure Service Connection - type: string - - - name: botPricingTier - displayName: Bot Pricing Tier - type: string - - - name: bots - displayName: Bots - type: object - - - name: buildFolder - displayName: Build Folder - type: string - default: "build-composer" - - - name: keyVault - displayName: Key Vault name - type: string - - - name: resourceGroup - displayName: Resource Group - type: string - - - name: resourceSuffix - displayName: Azure resources' name suffix - type: string - -stages: -- ${{ each bot in parameters.bots }}: - - stage: "Deploy_${{ bot.name }}" - ${{ if eq(bot.displayName, '') }}: - displayName: "${{ bot.name }}" - ${{ if ne(bot.displayName, '') }}: - displayName: "${{ bot.displayName }}" - dependsOn: "${{ bot.dependsOn }}" - jobs: - - job: "Deploy" - displayName: "Deploy steps" - steps: - # Delete Bot Resources - - template: ../common/deleteResources.yml - parameters: - azureSubscription: "${{ parameters.azureSubscription }}" - resourceGroup: "${{ parameters.resourceGroup }}" - resourceName: "${{ bot.name }}" - resourceSuffix: "${{ parameters.resourceSuffix }}" - - # Gets Bot App Registration credentials from KeyVault or Pipeline Variables - - template: ../common/getAppRegistration.yml - parameters: - appId: ${{ bot.appId }} - appSecret: ${{ bot.appSecret }} - azureSubscription: "${{ parameters.azureSubscription }}" - botName: "${{ bot.name }}" - keyVault: "${{ parameters.keyVault }}" - - # Use Net Core version - - ${{ if ne(bot.project.netCoreVersion, '') }}: - - task: UseDotNet@2 - displayName: "Use NetCore v${{ bot.project.netCoreVersion }}" - inputs: - version: "${{ bot.project.netCoreVersion }}" - - # Evaluate dependencies source and version - - template: evaluateDependenciesVariables.yml - parameters: - botType: "${{ bot.type }}" - registry: "${{ bot.dependency.registry }}" - version: "${{ bot.dependency.version }}" - - # Start of DotNet Install & Build - - template: installDependencies.yml - parameters: - project: "${{ bot.project }}" - registry: "$(DEPENDENCIESSOURCE)" - version: "$(DEPENDENCIESVERSIONNUMBER)" - packages: - Microsoft.Bot.Builder.AI.Luis - Microsoft.Bot.Builder.AI.QnA - Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime - - # Build Bot - - task: DotNetCoreCLI@2 - displayName: "Build" - inputs: - command: publish - publishWebProjects: false - projects: "${{ bot.project.directory }}/${{ bot.project.name }}" - arguments: "--output $(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ parameters.buildFolder }}/${{ bot.name }}" - modifyOutputPath: false - - # Get BotBuilder package version - - task: PowerShell@2 - displayName: 'Get BotBuilder Version' - inputs: - targetType: inline - workingDirectory: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ bot.project.directory }}' - failOnStderr: true - script: | - [XML]$data = Get-Content "./${{ bot.project.name }}" - $package = $data.Project.ItemGroup.PackageReference | Where-Object { $_.Include -eq "Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime" } - Write-Host "##vso[task.setvariable variable=BotBuilderVersionNumber]$($package.version)" - - # Tag BotBuilder package version - - template: ../common/tagBotBuilderVersion.yml - parameters: - ${{ if eq(bot.displayName, '') }}: - botName: "${{ bot.name }}" - ${{ if ne(bot.displayName, '') }}: - botName: "${{ bot.displayName }}" - version: "$(BOTBUILDERVERSIONNUMBER)" - - # Upload zip to artifacts in case we want to debug it - - task: PublishBuildArtifacts@1 - displayName: 'Publish zip package' - inputs: - pathToPublish: "$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ parameters.buildFolder }}/${{ bot.name }}/${{ bot.name }}.zip" - artifactName: dotnet-$(BUILD.BUILDID) - - # Create App Service and Bot Channel Registration - - template: ../common/createAppService.yml - parameters: - appId: $(APPID) - appInsight: "${{ parameters.appInsight }}" - appSecret: $(APPSECRET) - appServicePlan: "${{ parameters.appServicePlan }}" - appServicePlanRG: "${{ parameters.appServicePlanRG }}" - azureSubscription: "${{ parameters.azureSubscription }}" - botGroup: "${{ parameters.resourceGroup }}" - botName: "${{ bot.name }}" - botPricingTier: "${{ parameters.botPricingTier }}" - resourceSuffix: "${{ parameters.resourceSuffix }}" - templateFile: "build/templates/template-bot-resources.json" - - # Deploy bot - - task: AzureWebApp@1 - displayName: 'Deploy Azure Web App : ${{ bot.name }}-$(BUILD.BUILDID)' - inputs: - azureSubscription: "${{ parameters.azureSubscription }}" - appName: '${{ bot.name }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)' - resourceGroupName: '${{ parameters.resourceGroup }}' - package: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ parameters.buildFolder }}/${{ bot.name }}/${{ bot.name }}.zip' - deploymentMethod: runFromPackage - - # Create DirectLine Channel Hosts - - ${{ if eq(bot.type, 'Host') }}: - - template: ../common/createDirectLine.yml - parameters: - azureSubscription: "${{ parameters.azureSubscription }}" - botGroup: "${{ parameters.resourceGroup }}" - botName: "${{ bot.name }}" - resourceSuffix: "${{ parameters.resourceSuffix }}" diff --git a/tests/functional/build/yaml/deployBotResources/dotnet/evaluateDependenciesVariables.yml b/tests/functional/build/yaml/deployBotResources/dotnet/evaluateDependenciesVariables.yml index 161b04723b..f2e44169c4 100644 --- a/tests/functional/build/yaml/deployBotResources/dotnet/evaluateDependenciesVariables.yml +++ b/tests/functional/build/yaml/deployBotResources/dotnet/evaluateDependenciesVariables.yml @@ -51,7 +51,7 @@ steps: exit 1 # Force exit } if ("${{ parameters.botType }}" -in "Host", "Skill") { - $PackageList = nuget list Microsoft.Bot.Builder.Integration.AspNet.Core -Source "$source" -PreRelease + $PackageList = nuget list Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime -Source "$source" -PreRelease $versionNumber = $PackageList.Split(" ")[-1] } elseif ("${{ parameters.botType }}" -in "SkillV3") { $versionNumber = "" diff --git a/tests/functional/build/yaml/deployBotResources/dotnet/installDependencies.yml b/tests/functional/build/yaml/deployBotResources/dotnet/installDependencies.yml index 4fc5ef882e..76c859d3ee 100644 --- a/tests/functional/build/yaml/deployBotResources/dotnet/installDependencies.yml +++ b/tests/functional/build/yaml/deployBotResources/dotnet/installDependencies.yml @@ -1,4 +1,4 @@ -parameters: +parameters: - name: packages displayName: Dependency Packages type: object @@ -11,6 +11,10 @@ parameters: displayName: Registry source type: string + - name: solutiondir + displayName: Solution directory + type: string + - name: version displayName: Version number type: string @@ -20,7 +24,7 @@ steps: displayName: 'Install dependencies for ${{ parameters.project.name }}' inputs: targetType: inline - workingDirectory: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ parameters.project.directory }}' + workingDirectory: '${{ parameters.solutiondir }}' failOnStderr: true script: | $version = "" @@ -46,7 +50,7 @@ steps: } } - Invoke-Expression "dotnet add ""./${{ parameters.project.name }}"" package $version $source $package" + Invoke-Expression "dotnet add ""./${{ parameters.project.name }}.csproj"" package $version $source $package" if (-not ([string]::IsNullOrEmpty("$versionAux"))) { $version = $versionAux diff --git a/tests/functional/build/yaml/deployBotResources/dotnet/installDependenciesV3.yml b/tests/functional/build/yaml/deployBotResources/dotnet/installDependenciesV3.yml deleted file mode 100644 index 62bb916f5a..0000000000 --- a/tests/functional/build/yaml/deployBotResources/dotnet/installDependenciesV3.yml +++ /dev/null @@ -1,44 +0,0 @@ -parameters: - - name: packages - displayName: Dependency Packages - type: object - - - name: project - displayName: Project - type: object - - - name: registry - displayName: Registry source - type: string - - - name: version - displayName: Version number - type: string - -steps: - - task: PowerShell@2 - displayName: 'Install dependencies' - inputs: - targetType: inline - workingDirectory: '$(System.DefaultWorkingDirectory)/${{ parameters.project.directory }}' - failOnStderr: true - script: | - $version = "" - $source = "" - - if (-not ([string]::IsNullOrEmpty("${{ parameters.version }}"))) { - $version = "-Version ""${{ parameters.version }}""" - } - - if (-not ([string]::IsNullOrEmpty("${{ parameters.registry }}"))) { - $source = "-Source ""${{ parameters.registry }}""" - } - - foreach ($package in "${{ parameters.packages }}".Split()) { - Invoke-Expression "nuget update ""./packages.config"" -Id $package $version $source" - } - - write-host "`nPackages:" - foreach ($package in "${{ parameters.packages }}".Split()) { - write-host " - $package " - } diff --git a/tests/functional/build/yaml/deployBotResources/generator/deploy.yml b/tests/functional/build/yaml/deployBotResources/generator/deploy.yml new file mode 100644 index 0000000000..f7c1680fde --- /dev/null +++ b/tests/functional/build/yaml/deployBotResources/generator/deploy.yml @@ -0,0 +1,32 @@ +parameters: + - name: project + displayName: Project + type: object + + - name: solutiondir + displayName: Solution directory + type: string + +steps: + # Create /bots directory + - script: | + mkdir bots + displayName: 'Create bots directory' + + # Install yarn workspace + - script: | + yarn --immutable + displayName: 'Install yarn' + + # Install yo + - script: | + npm install -g yo + displayName: 'Install yo' + + # Generate Bot template + - task: CmdLine@2 + displayName: 'Install template' + inputs: + script: | + yo ../${{ parameters.project.generator }} ${{ parameters.project.name }} --platform ${{ parameters.project.platform }} --integration ${{ parameters.project.integration }} + workingDirectory: '${{ parameters.solutiondir }}' diff --git a/tests/functional/build/yaml/sharedResources/createSharedResources.yml b/tests/functional/build/yaml/sharedResources/createSharedResources.yml index f593314d46..efdf2fcc1c 100644 --- a/tests/functional/build/yaml/sharedResources/createSharedResources.yml +++ b/tests/functional/build/yaml/sharedResources/createSharedResources.yml @@ -22,7 +22,7 @@ variables: InternalAppServicePlanDotNetName: "bfcfnbotsappservicedotnet$($env:RESOURCESUFFIX)" InternalAppServicePlanJSName: "bfcfnbotsappservicejs$($env:RESOURCESUFFIX)" InternalCosmosDBName: "bfcfnbotstatedb$($env:RESOURCESUFFIX)" - InternalStorageName: "bfcfnbotstroage$($env:RESOURCESUFFIX)" + InternalStorageName: "bfcfnbotstorage$($env:RESOURCESUFFIX)" InternalKeyVaultName: "bfcfnbotkeyvault$($env:RESOURCESUFFIX)" InternalResourceGroupName: $[coalesce(variables['RESOURCEGROUPNAME'], 'bfcfnshared')] From 74236b3f01d2219d673e69c0ca5c38cb5864bd3f Mon Sep 17 00:00:00 2001 From: Thomas Chung Date: Tue, 22 Jun 2021 13:07:18 -0700 Subject: [PATCH 30/39] fix: GetManager issue with name entity not set (#1163) --- .../GetManagerDialog/GetManagerDialog.dialog | 3 +- .../GetManagerDialog.dialog.schema | 44 +------------------ .../GetManagerDialog/GetManagerDialog.dialog | 3 +- .../GetManagerDialog.dialog.schema | 42 +----------------- 4 files changed, 7 insertions(+), 85 deletions(-) diff --git a/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/GetManagerDialog/GetManagerDialog.dialog b/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/GetManagerDialog/GetManagerDialog.dialog index ad01d4f737..1e4f4643c7 100644 --- a/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/GetManagerDialog/GetManagerDialog.dialog +++ b/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/GetManagerDialog/GetManagerDialog.dialog @@ -33,7 +33,8 @@ "dialog": "ResolveUserDialog", "resultProperty": "turn.UserFound", "options": { - "UserIdFound": "=$UserIdFound" + "UserIdFound": "=$UserIdFound", + "NameEntity": "=$NameEntity" } }, { diff --git a/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/GetManagerDialog/GetManagerDialog.dialog.schema b/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/GetManagerDialog/GetManagerDialog.dialog.schema index ac2a461eab..20c0b9ba43 100644 --- a/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/GetManagerDialog/GetManagerDialog.dialog.schema +++ b/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/GetManagerDialog/GetManagerDialog.dialog.schema @@ -3,49 +3,9 @@ "$role": "implements(Microsoft.IDialog)", "title": "GetManagerDialog", "type": "object", - "properties": { - "nameEntity": { - "description": "Name of the entity to search", - "$ref": "#/definitions/stringExpression", - "title": "Name Entity" - } - }, + "properties": {}, "$result": { "type": "object", "properties": {} - }, - "definitions": { - "equalsExpression": { - "$role": "expression", - "type": "string", - "title": "Equals Expression", - "description": "Expression starting with =.", - "pattern": "^=.*\\S.*", - "examples": [ - "=user.name" - ] - }, - "stringExpression": { - "$role": "expression", - "title": "String or expression", - "description": "Interpolated string or expression to evaluate.", - "oneOf": [ - { - "type": "string", - "title": "String", - "description": "Interpolated string", - "pattern": "^(?!(=)).*", - "examples": [ - "Hello ${user.name}" - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=concat('x','y','z')" - ] - } - ] - } } -} +} \ No newline at end of file diff --git a/skills/declarative/People/People/dialogs/GetManagerDialog/GetManagerDialog.dialog b/skills/declarative/People/People/dialogs/GetManagerDialog/GetManagerDialog.dialog index d8dc9fee58..7110bc2ca4 100644 --- a/skills/declarative/People/People/dialogs/GetManagerDialog/GetManagerDialog.dialog +++ b/skills/declarative/People/People/dialogs/GetManagerDialog/GetManagerDialog.dialog @@ -33,7 +33,8 @@ "dialog": "ResolveUserDialog", "resultProperty": "turn.UserFound", "options": { - "UserIdFound": "=$UserIdFound" + "UserIdFound": "=$UserIdFound", + "NameEntity": "=$NameEntity" } }, { diff --git a/skills/declarative/People/People/dialogs/GetManagerDialog/GetManagerDialog.dialog.schema b/skills/declarative/People/People/dialogs/GetManagerDialog/GetManagerDialog.dialog.schema index ac2a461eab..2c4cd0de9d 100644 --- a/skills/declarative/People/People/dialogs/GetManagerDialog/GetManagerDialog.dialog.schema +++ b/skills/declarative/People/People/dialogs/GetManagerDialog/GetManagerDialog.dialog.schema @@ -3,49 +3,9 @@ "$role": "implements(Microsoft.IDialog)", "title": "GetManagerDialog", "type": "object", - "properties": { - "nameEntity": { - "description": "Name of the entity to search", - "$ref": "#/definitions/stringExpression", - "title": "Name Entity" - } - }, + "properties": {}, "$result": { "type": "object", "properties": {} - }, - "definitions": { - "equalsExpression": { - "$role": "expression", - "type": "string", - "title": "Equals Expression", - "description": "Expression starting with =.", - "pattern": "^=.*\\S.*", - "examples": [ - "=user.name" - ] - }, - "stringExpression": { - "$role": "expression", - "title": "String or expression", - "description": "Interpolated string or expression to evaluate.", - "oneOf": [ - { - "type": "string", - "title": "String", - "description": "Interpolated string", - "pattern": "^(?!(=)).*", - "examples": [ - "Hello ${user.name}" - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=concat('x','y','z')" - ] - } - ] - } } } From 06b888c5df9b6329c08958207228d2ef461a26c6 Mon Sep 17 00:00:00 2001 From: Ryan Lengel Isgrig <43043272+ryanlengel@users.noreply.github.com> Date: Tue, 29 Jun 2021 11:14:06 -0700 Subject: [PATCH 31/39] Add Teams package unit tests (#1171) --- .../ActionTests.cs | 592 +++++++++++++++++ .../ConditionalTests.cs | 40 ++ ...icrosoft.Bot.Components.Teams.Tests.csproj | 35 + .../ResourceExplorerFixture.cs | 38 ++ .../TestUtils.cs | 98 +++ .../Action_GetMeetingParticipant.test.dialog | 66 ++ ...ion_GetMeetingParticipantError.test.dialog | 42 ++ ...ingParticipantErrorWithAdapter.test.dialog | 43 ++ .../ActionTests/Action_GetMember.test.dialog | 65 ++ .../Action_GetMemberError.test.dialog | 42 ++ ...tion_GetMemberErrorWithAdapter.test.dialog | 43 ++ .../Action_GetPagedMembers.test.dialog | 68 ++ .../Action_GetPagedMembersError.test.dialog | 42 ++ .../Action_GetPagedTeamMembers.test.dialog | 65 ++ ...ction_GetPagedTeamMembersError.test.dialog | 42 ++ .../Action_GetTeamChannels.test.dialog | 58 ++ .../Action_GetTeamChannelsError.test.dialog | 42 ++ .../Action_GetTeamDetails.test.dialog | 52 ++ .../Action_GetTeamDetailsError.test.dialog | 42 ++ .../Action_GetTeamMember.test.dialog | 64 ++ .../Action_GetTeamMemberError.test.dialog | 42 ++ ..._GetTeamMemberErrorWithAdapter.test.dialog | 43 ++ ..._SendAppBasedLinkQueryResponse.test.dialog | 50 ++ ...AppBasedLinkQueryResponseError.test.dialog | 79 +++ .../Action_SendMEActionResponse.test.dialog | 56 ++ ...tion_SendMEActionResponseError.test.dialog | 54 ++ ...tion_SendMEAttachmentsResponse.test.dialog | 50 ++ ...SendMEAttachmentsResponseError.test.dialog | 44 ++ .../Action_SendMEAuthResponse.test.dialog | 41 ++ ...Action_SendMEAuthResponseError.test.dialog | 43 ++ ...MEAuthResponseErrorWithAdapter.test.dialog | 88 +++ ...endMEBotMessagePreviewResponse.test.dialog | 52 ++ ...BotMessagePreviewResponseError.test.dialog | 79 +++ ...EConfigQuerySettingUrlResponse.test.dialog | 39 ++ ...igQuerySettingUrlResponseError.test.dialog | 32 + .../Action_SendMEMessageResponse.test.dialog | 38 ++ ...ion_SendMEMessageResponseError.test.dialog | 32 + ...ction_SendMESelectItemResponse.test.dialog | 50 ++ ..._SendMESelectItemResponseError.test.dialog | 79 +++ ...tion_SendMessageToTeamsChannel.test.dialog | 63 ++ ...SendMessageToTeamsChannelError.test.dialog | 37 ++ ...ction_SendTabAuthResponseError.test.dialog | 43 ++ ...abAuthResponseErrorWithAdapter.test.dialog | 88 +++ .../Action_SendTabCardResponse.test.dialog | 66 ++ ...ction_SendTabCardResponseError.test.dialog | 79 +++ ...ion_SendTaskModuleCardResponse.test.dialog | 56 ++ ...endTaskModuleCardResponseError.test.dialog | 79 +++ ..._SendTaskModuleMessageResponse.test.dialog | 37 ++ ...tion_SendTaskModuleUrlResponse.test.dialog | 47 ++ ...SendTaskModuleUrlResponseError.test.dialog | 42 ++ ...nalsTests_OnTeamsActivityTypes.test.dialog | 616 ++++++++++++++++++ 51 files changed, 3823 insertions(+) create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/ActionTests.cs create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/ConditionalTests.cs create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Microsoft.Bot.Components.Teams.Tests.csproj create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/ResourceExplorerFixture.cs create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/TestUtils.cs create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipant.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipantError.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipantErrorWithAdapter.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMember.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMemberError.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMemberErrorWithAdapter.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedMembers.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedMembersError.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedTeamMembers.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedTeamMembersError.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamChannels.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamChannelsError.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamDetails.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamDetailsError.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMember.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMemberError.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMemberErrorWithAdapter.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendAppBasedLinkQueryResponse.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendAppBasedLinkQueryResponseError.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEActionResponse.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEActionResponseError.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAttachmentsResponse.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAttachmentsResponseError.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponse.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponseError.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponseErrorWithAdapter.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEBotMessagePreviewResponse.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEBotMessagePreviewResponseError.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponse.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponseError.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEMessageResponse.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEMessageResponseError.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMESelectItemResponse.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMESelectItemResponseError.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMessageToTeamsChannel.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMessageToTeamsChannelError.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabAuthResponseError.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabAuthResponseErrorWithAdapter.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabCardResponse.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabCardResponseError.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleCardResponse.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleCardResponseError.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleMessageResponse.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleUrlResponse.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleUrlResponseError.test.dialog create mode 100644 tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ConditionalTests/ConditionalsTests_OnTeamsActivityTypes.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/ActionTests.cs b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/ActionTests.cs new file mode 100644 index 0000000000..c4f5ff73f7 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/ActionTests.cs @@ -0,0 +1,592 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Builder.Dialogs.Adaptive; +using Microsoft.Bot.Builder.Dialogs.Adaptive.Testing; +using Microsoft.Bot.Builder.Dialogs.Declarative; +using Microsoft.Bot.Builder.Dialogs.Declarative.Obsolete; +using Microsoft.Bot.Connector; +using Microsoft.Bot.Connector.Authentication; +using Microsoft.Bot.Schema; +using Microsoft.Bot.Schema.Teams; +using Newtonsoft.Json.Linq; +using Xunit; + +namespace Microsoft.Bot.Components.Teams.Tests +{ + [CollectionDefinition("Dialogs.Adaptive")] + public class ActionTests : IClassFixture + { + private readonly ResourceExplorerFixture _resourceExplorerFixture; + + public ActionTests(ResourceExplorerFixture resourceExplorerFixture) + { + ComponentRegistration.Add(new DeclarativeComponentRegistration()); + ComponentRegistration.Add(new DialogsComponentRegistration()); + ComponentRegistration.Add(new AdaptiveComponentRegistration()); + ComponentRegistration.Add(new LanguageGenerationComponentRegistration()); + ComponentRegistration.Add(new AdaptiveTestingComponentRegistration()); + ComponentRegistration.Add(new DeclarativeComponentRegistrationBridge()); + + _resourceExplorerFixture = resourceExplorerFixture.Initialize(nameof(ActionTests)); + } + + [Fact] + public async Task Action_GetMeetingParticipant() + { + var participantResult = GetParticipant().ToString(); + + var uriToContent = new Dictionary() + { + { "/v1/meetings/meeting-id-1/participants/participant-aad-id-1?tenantId=tenant-id-1", participantResult }, + { "/v1/meetings/customMeetingId/participants/customParticipantId?tenantId=customTenantId", participantResult } + }; + + var teamsMiddleware = GetTeamsMiddleware(uriToContent); + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, middleware: new[] { teamsMiddleware }); + } + + [Fact] + public async Task Action_GetMeetingParticipantError() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); + } + + [Fact] + public async Task Action_GetMeetingParticipantErrorWithAdapter() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); + } + + [Fact] + public async Task Action_GetMember() + { + var participantResult = GetParticipant().ToString(); + var uriToContent = new Dictionary() + { + { "/v3/conversations/Action_GetMember/members/member-id", participantResult }, + { "/v3/conversations/Action_GetMember/members/customMemberId", participantResult } + }; + + var teamsMiddleware = GetTeamsMiddleware(uriToContent); + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, middleware: new[] { teamsMiddleware }); + } + + [Fact] + public async Task Action_GetMemberError() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); + } + + [Fact] + public async Task Action_GetMemberErrorWithAdapter() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); + } + + [Fact] + public async Task Action_GetPagedMembers() + { + var threeMembers = GenerateTeamMembers(3); + threeMembers.ContinuationToken = "customToken"; + + var twoMembers = GenerateTeamMembers(2); + twoMembers.ContinuationToken = "token"; + + var uriToContent = new Dictionary() + { + { "/v3/conversations/Action_GetPagedMembers/pagedmembers", JObject.FromObject(threeMembers).ToString() }, + { "/v3/conversations/Action_GetPagedMembers/pagedmembers?pageSize=2&continuationToken=token", JObject.FromObject(twoMembers).ToString() } + }; + + var teamsMiddleware = GetTeamsMiddleware(uriToContent); + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, middleware: new[] { teamsMiddleware }); + } + + [Fact] + public async Task Action_GetPagedMembersError() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); + } + + [Fact] + public async Task Action_GetPagedTeamMembers() + { + var threeMembers = GenerateTeamMembers(3); + threeMembers.ContinuationToken = "token"; + + var twoMembers = GenerateTeamMembers(2); + twoMembers.ContinuationToken = "token"; + + var uriToContent = new Dictionary() + { + { "/v3/conversations/team-id-1/pagedmembers", JObject.FromObject(threeMembers).ToString() }, + { "/v3/conversations/team-id-1/pagedmembers?pageSize=2&continuationToken=token", JObject.FromObject(twoMembers).ToString() } + }; + + var teamsMiddleware = GetTeamsMiddleware(uriToContent); + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, middleware: new[] { teamsMiddleware }); + } + + [Fact] + public async Task Action_GetPagedTeamMembersError() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); + } + + [Fact] + public async Task Action_GetTeamChannels() + { + var conversations = JObject.FromObject(new ConversationList + { + Conversations = new List() + { + new ChannelInfo { Id = "19:ChannelIdgeneralChannelId@thread.skype", Name = "Testing0" }, + new ChannelInfo { Id = "19:somechannelId2e5ab3df9ae9b594bdb@thread.skype", Name = "Testing1" }, + new ChannelInfo { Id = "19:somechannelId388ade16aa4dd375e69@thread.skype", Name = "Testing2" }, + } + }).ToString(); + + var uriToContent = new Dictionary() + { + { "/v3/teams/team-id-1/conversations", conversations }, + { "/v3/teams/customTeamId/conversations", conversations } + }; + + var teamsMiddleware = GetTeamsMiddleware(uriToContent); + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, middleware: new[] { teamsMiddleware }); + } + + [Fact] + public async Task Action_GetTeamChannelsError() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); + } + + [Fact] + public async Task Action_GetTeamDetails() + { + var details = JObject.FromObject(new TeamDetails + { + Id = "19:generalChannelIdgeneralChannelId@thread.skype", + Name = "TeamName", + AadGroupId = "Team-aadGroupId" + }).ToString(); + + var uriToContent = new Dictionary() + { + { "/v3/teams/team-id-1/team-id-1", details }, + { "/v3/teams/customTeamId", details } + }; + + var teamsMiddleware = GetTeamsMiddleware(uriToContent); + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, middleware: new[] { teamsMiddleware }); + } + + [Fact] + public async Task Action_GetTeamDetailsError() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); + } + + [Fact] + public async Task Action_GetTeamMember() + { + var member = JObject.FromObject(GenerateTeamMembers(1).Members.First()).ToString(); + + var uriToContent = new Dictionary() + { + { "/v3/conversations/team-id-1/members/user1", member }, + { "/v3/conversations/customTeamId/members/customMemberId", member } + }; + + var teamsMiddleware = GetTeamsMiddleware(uriToContent); + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, middleware: new[] { teamsMiddleware }); + } + + [Fact] + public async Task Action_GetTeamMemberError() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); + } + + [Fact] + public async Task Action_GetTeamMemberErrorWithAdapter() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); + } + + [Fact] + public async Task Action_SendAppBasedLinkQueryResponse() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); + } + + [Fact] + public async Task Action_SendAppBasedLinkQueryResponseError() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); + } + + //[Fact] + //public async Task Action_SendMessageToTeamsChannel() + //{ + // NOTE: Current test adapter is not a BotFrameworkAdapter, + // and does not support mocking SendMessageToTeamsChannel + // var teamsMiddleware = GetTeamsMiddleware(new JObject(), "/v3/conversations"); + // await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, middleware: new[] { teamsMiddleware }); + //} + + [Fact] + public async Task Action_SendMessageToTeamsChannelError() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); + } + + [Fact] + public async Task Action_SendMEActionResponse() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); + } + + [Fact] + public async Task Action_SendMEActionResponseError() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); + } + + [Fact] + public async Task Action_SendMEAttachmentsResponse() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); + } + + [Fact] + public async Task Action_SendMEAttachmentsResponseError() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); + } + + [Fact] + public async Task Action_SendMEAuthResponse() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); + } + + //[Fact] + //public async Task Action_SendMEAuthResponseError() + //{ + // NOTE: Current test adapter is not a BotFrameworkAdapter, + // await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); + //} + + [Fact] + public async Task Action_SendMEAuthResponseErrorWithAdapter() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); + } + + [Fact] + public async Task Action_SendMEBotMessagePreviewResponse() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); + } + + [Fact] + public async Task Action_SendMEBotMessagePreviewResponseError() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); + } + + [Fact] + public async Task Action_SendMEConfigQuerySettingUrlResponse() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); + } + + [Fact] + public async Task Action_SendMEConfigQuerySettingUrlResponseError() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); + } + + [Fact] + public async Task Action_SendMEMessageResponse() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); + } + + [Fact] + public async Task Action_SendMEMessageResponseError() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); + } + + [Fact] + public async Task Action_SendMESelectItemResponse() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); + } + + [Fact] + public async Task Action_SendMESelectItemResponseError() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); + } + + [Fact] + public async Task Action_SendTaskModuleCardResponse() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); + } + + [Fact] + public async Task Action_SendTaskModuleCardResponseError() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, adapterChannel: Channels.Test); + } + + [Fact] + public async Task Action_SendTaskModuleMessageResponse() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); + } + + [Fact] + public async Task Action_SendTaskModuleUrlResponse() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); + } + + [Fact] + public async Task Action_SendTaskModuleUrlResponseError() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); + } + + [Fact] + public async Task Action_SendTabCardResponseError() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); + } + + [Fact] + public async Task Action_SendTabCardResponse() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); + } + + [Fact] + public async Task Action_SendTabAuthResponseErrorWithAdapter() + { + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); + } + + //[Fact] + //public async Task Action_SendTabAuthResponseError() + //{ + // NOTE: Current test adapter is not a BotFrameworkAdapter, + // await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); + //} + + private IMiddleware GetErrorTeamsMiddleware(string exception) + { + // Create a connector client, setup with a custom httpclient which will + // throw an exception when the connectorclient's outgoing pipeline's SendAsync + // is called + var messageHandler = new ErrorHttpMessageHandler(exception); + return GetTestConnectorClientMiddleware(messageHandler); + } + + private ConversationReference GetGroupConversation() + { + return new ConversationReference + { + ChannelId = Channels.Msteams, + User = new ChannelAccount + { + Id = "29:User-Id", + Name = "User Name", + AadObjectId = "participant-aad-id" + }, + Conversation = new ConversationAccount + { + ConversationType = "groupChat", + TenantId = "tenantId-Guid", + Name = "group", + IsGroup = true, + Id = "19:groupChatId@thread.v2" + } + }; + } + + private TeamsPagedMembersResult GenerateTeamMembers(int total) + { + var accounts = new List(); + + for (int count = 0; count < total; count++) + { + accounts.Add(new TeamsChannelAccount + { + Id = $"29:User-Id-{count}", + Name = $"User Name-{count}", + AadObjectId = $"User-{count}-Object-Id", + Surname = $"Surname-{count}", + Email = $"User.{count}@microsoft.com", + UserPrincipalName = $"user{count}@microsoft.com", + TenantId = "tenant-id-1", + GivenName = "User" + }); + } + + return new TeamsPagedMembersResult() { Members = accounts }; + } + + private JObject GetParticipant(bool groupConversation = false) + { + return JObject.FromObject(new + { + id = "29:User-Id-0", + objectId = "User-0-Object-Id", + name = "User Name-0", + meeting = new { role = "Organizer" }, + surname = "Surname-0", + tenantId = "tenant-id-1", + userPrincipalName = "user0@microsoft.com", + user = new + { + userPrincipalName = "userPrincipalName-1", + }, + email = "User.0@microsoft.com", + givenName = "User", + conversation = new + { + id = groupConversation ? "19:groupChatId@thread.v2" : "a:oneOnOneConversationId", + name = groupConversation ? "group" : "oneOnOne", + tenantId = "tenantId-Guid", + conversationType = groupConversation ? "groupChat" : "personal", + isGroup = groupConversation, + } + }); + } + + private IMiddleware GetTeamsMiddleware(JObject result, string path = null) + { + // Create a connector client, setup with a custom httpclient which will return + // the desired result through the TestHttpMessageHandler. + TestsHttpMessageHandler messageHandler; + if (!string.IsNullOrEmpty(path)) + { + messageHandler = new TestsHttpMessageHandler(path, result.ToString()); + } + else + { + messageHandler = new TestsHttpMessageHandler(result.ToString()); + } + + return GetTestConnectorClientMiddleware(messageHandler); + } + + private IMiddleware GetTeamsMiddleware(Dictionary results) + { + // Create a connector client, setup with a custom httpclient which will return + // the desired result through the TestHttpMessageHandler. + var messageHandler = new TestsHttpMessageHandler(results); + return GetTestConnectorClientMiddleware(messageHandler); + } + + private TestConnectorClientMiddleware GetTestConnectorClientMiddleware(HttpMessageHandler messageHandler) + { + var testHttpClient = new HttpClient(messageHandler); + testHttpClient.BaseAddress = new Uri("https://localhost.coffee"); + var testConnectorClient = new ConnectorClient(new Uri("http://localhost.coffee/"), new MicrosoftAppCredentials(string.Empty, string.Empty), testHttpClient); + return new TestConnectorClientMiddleware(testConnectorClient); + } + + // This middleware sets the turnstate's connector client, + // so it will be found by the adapter, and a new one not created. + private class TestConnectorClientMiddleware : IMiddleware + { + private IConnectorClient _connectorClient; + + public TestConnectorClientMiddleware(IConnectorClient connectorClient) + { + _connectorClient = connectorClient; + } + + public Task OnTurnAsync(ITurnContext turnContext, NextDelegate next, CancellationToken cancellationToken = default) + { + turnContext.TurnState.Add(_connectorClient); + return next(cancellationToken); + } + } + + private class ErrorHttpMessageHandler : HttpMessageHandler + { + private readonly string _error; + + public ErrorHttpMessageHandler(string error) + { + _error = error; + } + + protected override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) + { + throw new Exception(_error); + } + } + + // Message handler to mock returning a specific object when requested from a specified path. + private class TestsHttpMessageHandler : HttpMessageHandler + { + private Dictionary _uriToContent; + private string _content; + + public TestsHttpMessageHandler(string url, string content) + : this(new Dictionary() { { url, content } }) + { + } + + public TestsHttpMessageHandler(string content) + { + _content = content; + } + + public TestsHttpMessageHandler(Dictionary uriToContent) + { + _uriToContent = uriToContent; + } + + protected override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) + { + var response = new HttpResponseMessage(HttpStatusCode.OK); + if (!string.IsNullOrEmpty(_content)) + { + response.Content = new StringContent(_content); + } + else + { + var path = request.RequestUri.PathAndQuery; + foreach (var urlAndContent in _uriToContent) + { + if (urlAndContent.Key.Contains(path, System.StringComparison.OrdinalIgnoreCase)) + { + response.Content = new StringContent(urlAndContent.Value); + } + } + } + + return Task.FromResult(response); + } + } + } +} diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/ConditionalTests.cs b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/ConditionalTests.cs new file mode 100644 index 0000000000..8c744a42d9 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/ConditionalTests.cs @@ -0,0 +1,40 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.IO; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Builder.Dialogs.Adaptive; +using Microsoft.Bot.Builder.Dialogs.Adaptive.Testing; +using Microsoft.Bot.Builder.Dialogs.Declarative; +using Microsoft.Bot.Builder.Dialogs.Declarative.Obsolete; +using Microsoft.Bot.Builder.Dialogs.Declarative.Resources; +using Xunit; + +namespace Microsoft.Bot.Components.Teams.Tests +{ + public class ConditionalTests + { + public ConditionalTests() + { + ComponentRegistration.Add(new DeclarativeComponentRegistration()); + ComponentRegistration.Add(new DialogsComponentRegistration()); + ComponentRegistration.Add(new AdaptiveComponentRegistration()); + ComponentRegistration.Add(new LanguageGenerationComponentRegistration()); + ComponentRegistration.Add(new AdaptiveTestingComponentRegistration()); + ComponentRegistration.Add(new DeclarativeComponentRegistrationBridge()); + + ResourceExplorer = new ResourceExplorer() + .AddFolder(Path.Combine(TestUtils.GetProjectPath(), "Tests", nameof(ConditionalTests)), monitorChanges: false); + } + + public static ResourceExplorer ResourceExplorer { get; set; } + + [Fact] + public async Task ConditionalsTests_OnTeamsActivityTypes() + { + await TestUtils.RunTestScript(ResourceExplorer); + } + } +} diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Microsoft.Bot.Components.Teams.Tests.csproj b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Microsoft.Bot.Components.Teams.Tests.csproj new file mode 100644 index 0000000000..112c033e7f --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Microsoft.Bot.Components.Teams.Tests.csproj @@ -0,0 +1,35 @@ + + + + netcoreapp2.1 + netcoreapp3.1 + netcoreapp2.1;netcoreapp3.1 + false + Debug;Release + latest + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + Always + + + + diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/ResourceExplorerFixture.cs b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/ResourceExplorerFixture.cs new file mode 100644 index 0000000000..7b2b192b71 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/ResourceExplorerFixture.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.IO; +using Microsoft.Bot.Builder.Dialogs.Declarative.Resources; + +namespace Microsoft.Bot.Components.Teams.Tests +{ + public class ResourceExplorerFixture : IDisposable + { + private string _folderPath = string.Empty; + + public ResourceExplorerFixture() + { + ResourceExplorer = new ResourceExplorer(); + } + + public ResourceExplorer ResourceExplorer { get; private set; } + + public ResourceExplorerFixture Initialize(string resourceFolder) + { + if (_folderPath.Length == 0) + { + _folderPath = Path.Combine(TestUtils.GetProjectPath(), "Tests", resourceFolder); + ResourceExplorer = ResourceExplorer.AddFolder(_folderPath, monitorChanges: false); + } + + return this; + } + + public void Dispose() + { + _folderPath = string.Empty; + ResourceExplorer.Dispose(); + } + } +} diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/TestUtils.cs b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/TestUtils.cs new file mode 100644 index 0000000000..f8f136dc1b --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/TestUtils.cs @@ -0,0 +1,98 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Adapters; +using Microsoft.Bot.Builder.Dialogs.Adaptive.Testing; +using Microsoft.Bot.Builder.Dialogs.Declarative.Resources; +using Microsoft.Bot.Connector; +using Microsoft.Bot.Schema; +using Microsoft.Extensions.Configuration; + +namespace Microsoft.Bot.Components.Teams.Tests +{ + public class TestUtils + { + public static IConfiguration DefaultConfiguration { get; set; } = new ConfigurationBuilder().AddInMemoryCollection().Build(); + + public static string RootFolder { get; set; } = GetProjectPath(); + + public static IEnumerable GetTestScripts(string relativeFolder) + { + var testFolder = Path.GetFullPath(Path.Combine(RootFolder, PathUtils.NormalizePath(relativeFolder))); + return Directory.EnumerateFiles(testFolder, "*.test.dialog", SearchOption.AllDirectories).Select(s => new object[] { Path.GetFileName(s) }).ToArray(); + } + + public static async Task RunTestScript(ResourceExplorer resourceExplorer, string resourceId = null, IConfiguration configuration = null, [CallerMemberName] string testName = null, IEnumerable middleware = null, string adapterChannel = Channels.Msteams) + { + var storage = new MemoryStorage(); + var convoState = new ConversationState(storage); + var userState = new UserState(storage); + + var adapter = (TestAdapter)new TestAdapter(CreateConversation(adapterChannel, testName)); + + if (middleware != null) + { + foreach (var m in middleware) + { + adapter.Use(m); + } + } + + adapter.Use(new RegisterClassMiddleware(DefaultConfiguration)) + .UseStorage(storage) + .UseBotState(userState, convoState) + .Use(new TranscriptLoggerMiddleware(new TraceTranscriptLogger(traceActivity: false))); + + adapter.OnTurnError += async (context, err) => + { + if (err.Message.EndsWith("MemoryAssertion failed")) + { + throw err; + } + + await context.SendActivityAsync(err.Message); + }; + + var script = resourceExplorer.LoadType(resourceId ?? $"{testName}.test.dialog"); + script.Configuration = configuration ?? new ConfigurationBuilder().AddInMemoryCollection().Build(); + script.Description ??= resourceId; + await script.ExecuteAsync(adapter: adapter, testName: testName, resourceExplorer: resourceExplorer).ConfigureAwait(false); + } + + public static string GetProjectPath() + { + var parent = Environment.CurrentDirectory; + while (!string.IsNullOrEmpty(parent)) + { + if (Directory.EnumerateFiles(parent, "*proj").Any()) + { + break; + } + + parent = Path.GetDirectoryName(parent); + } + + return parent; + } + + public static ConversationReference CreateConversation(string channel, string conversationName) + { + return new ConversationReference + { + ChannelId = channel ?? Channels.Test, + ServiceUrl = "https://test.com", + User = new ChannelAccount("user1", "User1"), + Bot = new ChannelAccount("bot", "Bot"), + Conversation = new ConversationAccount(false, "personal", conversationName), + Locale = "en-US", + }; + } + } +} diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipant.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipant.test.dialog new file mode 100644 index 0000000000..a770c1cc0c --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipant.test.dialog @@ -0,0 +1,66 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.GetMeetingParticipant", + "property": "conversation.result" + }, + { + "$kind": "Teams.GetMeetingParticipant", + "property": "conversation.resultWithCustomProperties", + "meetingId": "customMeetingId", + "participantId": "customParticipantId", + "tenantId": "customTenantId" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "from": { + "id": "participant-id", + "aadObjectId": "participant-aad-id-1" + }, + "channelData": { + "tenant": { + "id": "tenant-id-1" + }, + "meeting": { + "id": "meeting-id-1" + } + } + } + }, + { + "$kind": "Microsoft.Test.MemoryAssertions", + "assertions": [ + "conversation.result.conversation.conversationType == 'personal'", + "conversation.result.conversation.id == 'a:oneOnOneConversationId'", + "conversation.result.conversation.isGroup == false", + "conversation.result.conversation.name == 'oneOnOne'", + "conversation.result.conversation.tenantId == 'tenantId-Guid'", + "conversation.result.meeting.role == 'Organizer'", + "conversation.result.user.userPrincipalName == 'userPrincipalName-1'", + "conversation.resultWithCustomProperties.conversation.conversationType == 'personal'", + "conversation.resultWithCustomProperties.conversation.id == 'a:oneOnOneConversationId'", + "conversation.resultWithCustomProperties.conversation.isGroup == false", + "conversation.resultWithCustomProperties.conversation.name == 'oneOnOne'", + "conversation.resultWithCustomProperties.conversation.tenantId == 'tenantId-Guid'", + "conversation.resultWithCustomProperties.meeting.role == 'Organizer'", + "conversation.resultWithCustomProperties.user.userPrincipalName == 'userPrincipalName-1'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipantError.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipantError.test.dialog new file mode 100644 index 0000000000..e4d8551cdd --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipantError.test.dialog @@ -0,0 +1,42 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.GetMeetingParticipant", + "property": "$result" + }, + { + "$kind": "Microsoft.SendActivity", + "activity": "${$result}" + } + ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserSays", + "text": "hi" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "Teams.GetMeetingParticipant works only on the Teams channel." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipantErrorWithAdapter.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipantErrorWithAdapter.test.dialog new file mode 100644 index 0000000000..eab01c2edc --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipantErrorWithAdapter.test.dialog @@ -0,0 +1,43 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.GetMeetingParticipant", + "property": "$result", + "participantId": "=turn.channelData.doesNotExist" + }, + { + "$kind": "Microsoft.SendActivity", + "activity": "${$result}" + } + ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserSays", + "text": "hi" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "Teams.GetMeetingParticipant could not determine the participant id by expression value provided. participantId is required." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMember.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMember.test.dialog new file mode 100644 index 0000000000..90d44b865c --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMember.test.dialog @@ -0,0 +1,65 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.GetMember", + "property": "conversation.result" + }, + { + "$kind": "Teams.GetMember", + "property": "conversation.resultWithCustomProperties", + "memberId": "customMemberId" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "from": { + "id": "member-id" + }, + "channelData": { + "tenant": { + "id": "tenant-id-1" + }, + "meeting": { + "id": "meeting-id-1" + } + } + } + }, + { + "$kind": "Microsoft.Test.MemoryAssertions", + "assertions": [ + "conversation.result.email == 'User.0@microsoft.com'", + "conversation.result.givenName == 'User'", + "conversation.result.id == '29:User-Id-0'", + "conversation.result.name == 'User Name-0'", + "conversation.result.objectId == 'User-0-Object-Id'", + "conversation.result.surname == 'Surname-0'", + "conversation.result.tenantId == 'tenant-id-1'", + "conversation.result.userPrincipalName == 'user0@microsoft.com'", + "conversation.resultWithCustomProperties.email == 'User.0@microsoft.com'", + "conversation.resultWithCustomProperties.givenName == 'User'", + "conversation.resultWithCustomProperties.id == '29:User-Id-0'", + "conversation.resultWithCustomProperties.name == 'User Name-0'", + "conversation.resultWithCustomProperties.objectId == 'User-0-Object-Id'", + "conversation.resultWithCustomProperties.surname == 'Surname-0'", + "conversation.resultWithCustomProperties.tenantId == 'tenant-id-1'", + "conversation.resultWithCustomProperties.userPrincipalName == 'user0@microsoft.com'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMemberError.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMemberError.test.dialog new file mode 100644 index 0000000000..03ed714e8c --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMemberError.test.dialog @@ -0,0 +1,42 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.GetMember", + "property": "$result" + }, + { + "$kind": "Microsoft.SendActivity", + "activity": "${$result}" + } + ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserSays", + "text": "hi" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "Teams.GetMember works only on the Teams channel." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMemberErrorWithAdapter.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMemberErrorWithAdapter.test.dialog new file mode 100644 index 0000000000..70b25fc571 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMemberErrorWithAdapter.test.dialog @@ -0,0 +1,43 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.GetMember", + "property": "$result", + "memberId": "=turn.activity.channelData.doesNotExist" + }, + { + "$kind": "Microsoft.SendActivity", + "activity": "${$result}" + } + ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserSays", + "text": "hi" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "Missing MemberId in Teams.GetMember." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedMembers.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedMembers.test.dialog new file mode 100644 index 0000000000..07dcae5c4f --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedMembers.test.dialog @@ -0,0 +1,68 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.GetPagedMembers", + "property": "conversation.result" + }, + { + "$kind": "Teams.GetPagedMembers", + "property": "conversation.resultWithCustomProperties", + "continuationToken": "token", + "pageSize": 2 + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "from": { + "id": "member-id" + }, + "channelData": { + "tenant": { + "id": "tenant-id-1" + }, + "meeting": { + "id": "meeting-id-1" + } + } + } + }, + { + "$kind": "Microsoft.Test.MemoryAssertions", + "assertions": [ + "conversation.result.continuationToken == 'token'", + "conversation.result.members[0].email == 'User.0@microsoft.com'", + "conversation.result.members[0].id == '29:User-Id-0'", + "conversation.result.members[0].objectId == 'User-0-Object-Id'", + "conversation.result.members[1].email == 'User.1@microsoft.com'", + "conversation.result.members[1].id == '29:User-Id-1'", + "conversation.result.members[1].objectId == 'User-1-Object-Id'", + "conversation.result.members[2].email == 'User.2@microsoft.com'", + "conversation.result.members[2].id == '29:User-Id-2'", + "conversation.result.members[2].objectId == 'User-2-Object-Id'", + "conversation.resultWithCustomProperties.continuationToken == 'customToken'", + "conversation.resultWithCustomProperties.members[0].email == 'User.0@microsoft.com'", + "conversation.resultWithCustomProperties.members[0].id == '29:User-Id-0'", + "conversation.resultWithCustomProperties.members[0].objectId == 'User-0-Object-Id'", + "conversation.resultWithCustomProperties.members[1].email == 'User.1@microsoft.com'", + "conversation.resultWithCustomProperties.members[1].id == '29:User-Id-1'", + "conversation.resultWithCustomProperties.members[1].objectId == 'User-1-Object-Id'", + "not(exists(conversation.resultWithCustomProperties.members[2]))" + ] + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedMembersError.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedMembersError.test.dialog new file mode 100644 index 0000000000..2f2f705eb2 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedMembersError.test.dialog @@ -0,0 +1,42 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.GetPagedMembers", + "property": "$result" + }, + { + "$kind": "Microsoft.SendActivity", + "activity": "${$result}" + } + ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserSays", + "text": "hi" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "Teams.GetPagedMembers works only on the Teams channel." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedTeamMembers.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedTeamMembers.test.dialog new file mode 100644 index 0000000000..559b99576c --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedTeamMembers.test.dialog @@ -0,0 +1,65 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.GetPagedTeamMembers", + "property": "conversation.result" + }, + { + "$kind": "Teams.GetPagedTeamMembers", + "property": "conversation.resultWithCustomProperties", + "continuationToken": "token", + "pageSize": 2 + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "channelData": { + "tenant": { + "id": "tenant-id-1" + }, + "team": { + "id": "team-id-1" + } + } + } + }, + { + "$kind": "Microsoft.Test.MemoryAssertions", + "assertions": [ + "conversation.result.continuationToken == 'token'", + "conversation.result.members[0].email == 'User.0@microsoft.com'", + "conversation.result.members[0].id == '29:User-Id-0'", + "conversation.result.members[0].objectId == 'User-0-Object-Id'", + "conversation.result.members[1].email == 'User.1@microsoft.com'", + "conversation.result.members[1].id == '29:User-Id-1'", + "conversation.result.members[1].objectId == 'User-1-Object-Id'", + "conversation.result.members[2].email == 'User.2@microsoft.com'", + "conversation.result.members[2].id == '29:User-Id-2'", + "conversation.result.members[2].objectId == 'User-2-Object-Id'", + "conversation.resultWithCustomProperties.continuationToken == 'customToken'", + "conversation.resultWithCustomProperties.members[0].email == 'User.0@microsoft.com'", + "conversation.resultWithCustomProperties.members[0].id == '29:User-Id-0'", + "conversation.resultWithCustomProperties.members[0].objectId == 'User-0-Object-Id'", + "conversation.resultWithCustomProperties.members[1].email == 'User.1@microsoft.com'", + "conversation.resultWithCustomProperties.members[1].id == '29:User-Id-1'", + "conversation.resultWithCustomProperties.members[1].objectId == 'User-1-Object-Id'", + "not(exists(conversation.resultWithCustomProperties.members[2]))" + ] + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedTeamMembersError.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedTeamMembersError.test.dialog new file mode 100644 index 0000000000..f8b11b4486 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedTeamMembersError.test.dialog @@ -0,0 +1,42 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.GetPagedTeamMembers", + "property": "$result" + }, + { + "$kind": "Microsoft.SendActivity", + "activity": "${$result}" + } + ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserSays", + "text": "hi" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "Teams.GetPagedTeamMembers works only on the Teams channel." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamChannels.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamChannels.test.dialog new file mode 100644 index 0000000000..a5e4697ba9 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamChannels.test.dialog @@ -0,0 +1,58 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.GetTeamChannels", + "property": "conversation.result" + }, + { + "$kind": "Teams.GetTeamChannels", + "property": "conversation.resultWithCustomProperties", + "teamId": "customTeamId" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "channelData": { + "tenant": { + "id": "tenant-id-1" + }, + "team": { + "id": "team-id-1" + } + } + } + }, + { + "$kind": "Microsoft.Test.MemoryAssertions", + "assertions": [ + "conversation.result[0].id == '19:ChannelIdgeneralChannelId@thread.skype'", + "conversation.result[0].name == 'Testing0'", + "conversation.result[1].id == '19:somechannelId2e5ab3df9ae9b594bdb@thread.skype'", + "conversation.result[1].name == 'Testing1'", + "conversation.result[2].id == '19:somechannelId388ade16aa4dd375e69@thread.skype'", + "conversation.result[2].name == 'Testing2'", + "conversation.resultWithCustomProperties[0].id == '19:ChannelIdgeneralChannelId@thread.skype'", + "conversation.resultWithCustomProperties[0].name == 'Testing0'", + "conversation.resultWithCustomProperties[1].id == '19:somechannelId2e5ab3df9ae9b594bdb@thread.skype'", + "conversation.resultWithCustomProperties[1].name == 'Testing1'", + "conversation.resultWithCustomProperties[2].id == '19:somechannelId388ade16aa4dd375e69@thread.skype'", + "conversation.resultWithCustomProperties[2].name == 'Testing2'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamChannelsError.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamChannelsError.test.dialog new file mode 100644 index 0000000000..7d6735ab0f --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamChannelsError.test.dialog @@ -0,0 +1,42 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.GetTeamChannels", + "property": "$result" + }, + { + "$kind": "Microsoft.SendActivity", + "activity": "${$result}" + } + ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserSays", + "text": "hi" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "Teams.GetTeamChannels works only on the Teams channel." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamDetails.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamDetails.test.dialog new file mode 100644 index 0000000000..49d9f9068e --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamDetails.test.dialog @@ -0,0 +1,52 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.GetTeamDetails", + "property": "conversation.result" + }, + { + "$kind": "Teams.GetTeamDetails", + "property": "conversation.resultWithCustomProperties", + "teamId": "customTeamId" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "channelData": { + "tenant": { + "id": "tenant-id-1" + }, + "team": { + "id": "team-id-1" + } + } + } + }, + { + "$kind": "Microsoft.Test.MemoryAssertions", + "assertions": [ + "conversation.result.aadGroupId == 'Team-aadGroupId'", + "conversation.result.id == '19:generalChannelIdgeneralChannelId@thread.skype'", + "conversation.result.name == 'TeamName'", + "conversation.resultWithCustomProperties.aadGroupId == 'Team-aadGroupId'", + "conversation.resultWithCustomProperties.id == '19:generalChannelIdgeneralChannelId@thread.skype'", + "conversation.resultWithCustomProperties.name == 'TeamName'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamDetailsError.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamDetailsError.test.dialog new file mode 100644 index 0000000000..a501cfdbef --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamDetailsError.test.dialog @@ -0,0 +1,42 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.GetTeamDetails", + "property": "$result" + }, + { + "$kind": "Microsoft.SendActivity", + "activity": "${$result}" + } + ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserSays", + "text": "hi" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "Teams.GetTeamDetails works only on the Teams channel." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMember.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMember.test.dialog new file mode 100644 index 0000000000..4a45b57cf6 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMember.test.dialog @@ -0,0 +1,64 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "enableTrace": true, + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.GetTeamMember", + "property": "conversation.result" + }, + { + "$kind": "Teams.GetTeamMember", + "property": "conversation.resultWithCustomProperties", + "memberId": "customMemberId", + "teamId": "customTeamId" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "channelData": { + "tenant": { + "id": "tenant-id-1" + }, + "team": { + "id": "team-id-1" + } + } + } + }, + { + "$kind": "Microsoft.Test.MemoryAssertions", + "assertions": [ + "conversation.result.email == 'User.0@microsoft.com'", + "conversation.result.givenName == 'User'", + "conversation.result.id == '29:User-Id-0'", + "conversation.result.name == 'User Name-0'", + "conversation.result.objectId == 'User-0-Object-Id'", + "conversation.result.surname == 'Surname-0'", + "conversation.result.tenantId == 'tenant-id-1'", + "conversation.result.userPrincipalName == 'user0@microsoft.com'", + "conversation.resultWithCustomProperties.email == 'User.0@microsoft.com'", + "conversation.resultWithCustomProperties.givenName == 'User'", + "conversation.resultWithCustomProperties.id == '29:User-Id-0'", + "conversation.resultWithCustomProperties.name == 'User Name-0'", + "conversation.resultWithCustomProperties.objectId == 'User-0-Object-Id'", + "conversation.resultWithCustomProperties.surname == 'Surname-0'", + "conversation.resultWithCustomProperties.tenantId == 'tenant-id-1'", + "conversation.resultWithCustomProperties.userPrincipalName == 'user0@microsoft.com'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMemberError.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMemberError.test.dialog new file mode 100644 index 0000000000..6f97c8bc51 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMemberError.test.dialog @@ -0,0 +1,42 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.GetTeamMember", + "property": "$result" + }, + { + "$kind": "Microsoft.SendActivity", + "activity": "${$result}" + } + ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserSays", + "text": "hi" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "Teams.GetTeamMember works only on the Teams channel." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMemberErrorWithAdapter.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMemberErrorWithAdapter.test.dialog new file mode 100644 index 0000000000..ad843a82c7 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMemberErrorWithAdapter.test.dialog @@ -0,0 +1,43 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.GetTeamMember", + "property": "$result", + "memberId": "=turn.activity.channelData.doesNotExist" + }, + { + "$kind": "Microsoft.SendActivity", + "activity": "${$result}" + } + ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserSays", + "text": "hi" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "Missing MemberId in Teams.GetTeamMember." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendAppBasedLinkQueryResponse.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendAppBasedLinkQueryResponse.test.dialog new file mode 100644 index 0000000000..188d548469 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendAppBasedLinkQueryResponse.test.dialog @@ -0,0 +1,50 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.SendAppBasedLinkQueryResponse", + "card": { + "type": "message", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.thumbnail", + "content": { + "title": "card-title" + } + } + ] + } + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReplyActivity", + "assertions": [ + "type == 'invokeResponse'", + "conversation.id == 'Action_SendAppBasedLinkQueryResponse'", + "value.body.composeExtension.attachmentLayout == 'list'", + "value.body.composeExtension.type == 'result'", + "value.body.composeExtension.attachments[0].contentType == 'application/vnd.microsoft.card.thumbnail'", + "value.body.composeExtension.attachments[0].content.title == 'card-title'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendAppBasedLinkQueryResponseError.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendAppBasedLinkQueryResponseError.test.dialog new file mode 100644 index 0000000000..2323a1cb05 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendAppBasedLinkQueryResponseError.test.dialog @@ -0,0 +1,79 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "recognizer": { + "$kind": "Microsoft.RegexRecognizer", + "intents": [ + { + "intent": "NoCard", + "pattern": "NoCard" + }, + { + "intent": "NoAttachments", + "pattern": "NoAttachments" + } + ] + }, + "triggers": [ + { + "$kind": "Microsoft.OnIntent", + "intent": "NoCard", + "actions": [ + { + "$kind": "Teams.SendAppBasedLinkQueryResponse" + } + ] + }, + { + "$kind": "Microsoft.OnIntent", + "intent": "NoAttachments", + "actions": [ + { + "$kind": "Teams.SendAppBasedLinkQueryResponse", + "card": { + "type": "message" + } + } + ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "NoCard", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "An activity with attachments is required for Teams.SendAppBasedLinkQueryResponse." + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "NoAttachments", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "Invalid activity. An attachment is required for Teams.SendAppBasedLinkQueryResponse." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEActionResponse.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEActionResponse.test.dialog new file mode 100644 index 0000000000..4f83b08266 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEActionResponse.test.dialog @@ -0,0 +1,56 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.SendMEActionResponse", + "title": "some title", + "height": 1, + "width": 2, + "completionBotId": "someBotId", + "card": { + "type": "message", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.thumbnail", + "content": { + "title": "card-title" + } + } + ] + } + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReplyActivity", + "assertions": [ + "type == 'invokeResponse'", + "conversation.id == 'Action_SendMEActionResponse'", + "value.body.task.value.completionBotId == 'someBotId'", + "value.body.task.value.height == 1", + "value.body.task.value.title == 'some title'", + "value.body.task.value.width == 2", + "value.body.task.value.card.contentType == 'application/vnd.microsoft.card.thumbnail'", + "value.body.task.value.card.content.title == 'card-title'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEActionResponseError.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEActionResponseError.test.dialog new file mode 100644 index 0000000000..8fd4f9bb21 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEActionResponseError.test.dialog @@ -0,0 +1,54 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "recognizer": { + "$kind": "Microsoft.RegexRecognizer", + "intents": [ + { + "intent": "NoAttachments", + "pattern": "NoAttachments" + } + ] + }, + "triggers": [ + { + "$kind": "Microsoft.OnIntent", + "intent": "NoAttachments", + "actions": [ + { + "$kind": "Teams.SendMEActionResponse", + "card": { + "type": "message" + } + } + ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "NoAttachments", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "Missing attachments in Teams.SendMEActionResponse." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAttachmentsResponse.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAttachmentsResponse.test.dialog new file mode 100644 index 0000000000..5ae8adb325 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAttachmentsResponse.test.dialog @@ -0,0 +1,50 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.SendMEAttachmentsResponse", + "attachments": { + "type": "message", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.thumbnail", + "content": { + "title": "card-title" + } + } + ] + } + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReplyActivity", + "assertions": [ + "type == 'invokeResponse'", + "conversation.id == 'Action_SendMEAttachmentsResponse'", + "value.body.composeExtension.attachmentLayout == 'list'", + "value.body.composeExtension.type == 'result'", + "value.body.composeExtension.attachments[0].contentType == 'application/vnd.microsoft.card.thumbnail'", + "value.body.composeExtension.attachments[0].content.title == 'card-title'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAttachmentsResponseError.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAttachmentsResponseError.test.dialog new file mode 100644 index 0000000000..ed4f18b0b0 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAttachmentsResponseError.test.dialog @@ -0,0 +1,44 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.SendMEAttachmentsResponse", + "attachments": { + "type": "message" + } + } + ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "Missing attachments in Teams.SendMEAttachmentsResponse." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponse.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponse.test.dialog new file mode 100644 index 0000000000..6acfa74080 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponse.test.dialog @@ -0,0 +1,41 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.SendMEAuthResponse", + "connectionName": "testConnection", + "title": "test title" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReplyActivity", + "assertions": [ + "type == 'invokeResponse'", + "conversation.id == 'Action_SendMEAuthResponse'", + "value.body.composeExtension.type == 'auth'", + "value.body.composeExtension.suggestedActions.actions[0].title == 'test title'", + "value.body.composeExtension.suggestedActions.actions[0].type == 'openUrl'", + "startsWith(value.body.composeExtension.suggestedActions.actions[0].value, 'https://fake.com/oauthsignin/testConnection')" + ] + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponseError.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponseError.test.dialog new file mode 100644 index 0000000000..b860a92226 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponseError.test.dialog @@ -0,0 +1,43 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.SendMEAuthResponse", + "connectionName": "someConnection", + "title": "someTitle" + } + ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "NoConnectionName", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "Teams.SendMEAuthResponse: not supported by the current adapter." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponseErrorWithAdapter.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponseErrorWithAdapter.test.dialog new file mode 100644 index 0000000000..7d7425ba9b --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponseErrorWithAdapter.test.dialog @@ -0,0 +1,88 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "recognizer": { + "$kind": "Microsoft.RegexRecognizer", + "intents": [ + { + "intent": "NoConnectionName", + "pattern": "NoConnectionName" + }, + { + "intent": "NoTitle", + "pattern": "NoTitle" + } + ] + }, + "triggers": [ + { + "$kind": "Microsoft.OnIntent", + "intent": "NoConnectionName", + "actions": [ + { + "$kind": "Teams.SendMEAuthResponse", + "connectionName": "=turn.channelData.DoesNotExist" + } + ] + }, + { + "$kind": "Microsoft.OnIntent", + "intent": "NoTitle", + "actions": [ + { + "$kind": "Teams.SendMEAuthResponse", + "connectionName": "testConnection", + "title": "=turn.channelData.doesNotExist" + } + ] + }, + { + "$kind": "Microsoft.OnIntent", + "intent": "NoAttachments", + "actions": [ + { + "$kind": "Teams.SendMEAuthResponse" + } + ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "NoConnectionName", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "A valid ConnectionName is required for auth responses." + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "NoTitle", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "A valid Title is required for auth responses." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEBotMessagePreviewResponse.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEBotMessagePreviewResponse.test.dialog new file mode 100644 index 0000000000..74343b9138 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEBotMessagePreviewResponse.test.dialog @@ -0,0 +1,52 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.SendMEBotMessagePreviewResponse", + "card": { + "type": "message", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.thumbnail", + "content": { + "title": "card-title" + } + } + ] + } + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReplyActivity", + "assertions": [ + "type == 'invokeResponse'", + "conversation.id == 'Action_SendMEBotMessagePreviewResponse'", + "value.body.composeExtension.type == 'botMessagePreview'", + "value.body.composeExtension.activityPreview.attachmentLayout == 'list'", + "value.body.composeExtension.activityPreview.inputHint == 'acceptingInput'", + "value.body.composeExtension.activityPreview.type == 'message'", + "value.body.composeExtension.activityPreview.attachments[0].contentType == 'application/vnd.microsoft.card.thumbnail'", + "value.body.composeExtension.activityPreview.attachments[0].content.title == 'card-title'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEBotMessagePreviewResponseError.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEBotMessagePreviewResponseError.test.dialog new file mode 100644 index 0000000000..3ef5fd3bac --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEBotMessagePreviewResponseError.test.dialog @@ -0,0 +1,79 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "recognizer": { + "$kind": "Microsoft.RegexRecognizer", + "intents": [ + { + "intent": "NoCard", + "pattern": "NoCard" + }, + { + "intent": "NoAttachments", + "pattern": "NoAttachments" + } + ] + }, + "triggers": [ + { + "$kind": "Microsoft.OnIntent", + "intent": "NoCard", + "actions": [ + { + "$kind": "Teams.SendMEBotMessagePreviewResponse" + } + ] + }, + { + "$kind": "Microsoft.OnIntent", + "intent": "NoAttachments", + "actions": [ + { + "$kind": "Teams.SendMEBotMessagePreviewResponse", + "card": { + "type": "message" + } + } + ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "NoCard", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "A valid Card is required for Teams.SendMEBotMessagePreviewResponse." + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "NoAttachments", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "Invalid activity. An attachment is required for Teams.SendMEBotMessagePreviewResponse." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponse.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponse.test.dialog new file mode 100644 index 0000000000..65d8447602 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponse.test.dialog @@ -0,0 +1,39 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.SendMEConfigQuerySettingUrlResponse", + "configUrl": "someBaseUrl.com/somePage.html" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReplyActivity", + "assertions": [ + "type == 'invokeResponse'", + "conversation.id == 'Action_SendMEConfigQuerySettingUrlResponse'", + "value.body.composeExtension.type == 'config'", + "value.body.composeExtension.suggestedActions.actions[0].type == 'openUrl'", + "value.body.composeExtension.suggestedActions.actions[0].value == 'someBaseUrl.com/somePage.html'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponseError.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponseError.test.dialog new file mode 100644 index 0000000000..6245df449d --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponseError.test.dialog @@ -0,0 +1,32 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.SendMEConfigQuerySettingUrlResponse" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "ConfigUrl is required for Teams.SendMEConfigQuerySettingUrlResponse." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEMessageResponse.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEMessageResponse.test.dialog new file mode 100644 index 0000000000..0efa1dfde0 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEMessageResponse.test.dialog @@ -0,0 +1,38 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.SendMEMessageResponse", + "message": "i want to send this to the user" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReplyActivity", + "assertions": [ + "type == 'invokeResponse'", + "conversation.id == 'Action_SendMEMessageResponse'", + "value.body.composeExtension.type == 'message'", + "value.body.composeExtension.text == 'i want to send this to the user'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEMessageResponseError.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEMessageResponseError.test.dialog new file mode 100644 index 0000000000..6f4f595c4b --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEMessageResponseError.test.dialog @@ -0,0 +1,32 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.SendMEMessageResponse" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "A Message is required for Teams.SendMEMessageResponse." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMESelectItemResponse.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMESelectItemResponse.test.dialog new file mode 100644 index 0000000000..b9a8f8ddb2 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMESelectItemResponse.test.dialog @@ -0,0 +1,50 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.SendMESelectItemResponse", + "card": { + "type": "message", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.thumbnail", + "content": { + "title": "card-title" + } + } + ] + } + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReplyActivity", + "assertions": [ + "type == 'invokeResponse'", + "conversation.id == 'Action_SendMESelectItemResponse'", + "value.body.composeExtension.type == 'result'", + "value.body.composeExtension.attachmentLayout == 'list'", + "value.body.composeExtension.attachments[0].contentType == 'application/vnd.microsoft.card.thumbnail'", + "value.body.composeExtension.attachments[0].content.title == 'card-title'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMESelectItemResponseError.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMESelectItemResponseError.test.dialog new file mode 100644 index 0000000000..a78eb61c61 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMESelectItemResponseError.test.dialog @@ -0,0 +1,79 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "recognizer": { + "$kind": "Microsoft.RegexRecognizer", + "intents": [ + { + "intent": "NoCard", + "pattern": "NoCard" + }, + { + "intent": "NoAttachments", + "pattern": "NoAttachments" + } + ] + }, + "triggers": [ + { + "$kind": "Microsoft.OnIntent", + "intent": "NoCard", + "actions": [ + { + "$kind": "Teams.SendMESelectItemResponse" + } + ] + }, + { + "$kind": "Microsoft.OnIntent", + "intent": "NoAttachments", + "actions": [ + { + "$kind": "Teams.SendMESelectItemResponse", + "card": { + "type": "message" + } + } + ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "NoCard", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "A valid card is required for Teams.SendMESelectItemResponse." + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "NoAttachments", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "Invalid activity. An attachment is required for Teams.SendMESelectItemResponse." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMessageToTeamsChannel.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMessageToTeamsChannel.test.dialog new file mode 100644 index 0000000000..6996effedb --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMessageToTeamsChannel.test.dialog @@ -0,0 +1,63 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.SendMessageToTeamsChannel", + "conversationReferenceProperty": "conversation.result", + "activity": { + "type": "message", + "text": "This is a message to a Teams Channel" + } + }, + { + "$kind": "Teams.SendMessageToTeamsChannel", + "conversationReferenceProperty": "conversation.resultWithCustomProperties", + "activity": { + "type": "message", + "text": "This is a message to a Teams Channel with custom properties" + }, + "teamsChannelId": "customTeamsChannel" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "channelData": { + "channel": { + "id": "fakeTeamsChannelToSendTo" + } + } + } + }, + { + "$kind": "Microsoft.Test.MemoryAssertions", + "assertions": [ + "conversation.result.activityId == '0'", + "conversation.result.channelId == 'msteams'", + "conversation.result.conversation.conversationType == 'groupChat'", + "conversation.result.conversation.isGroup == true", + "conversation.result.conversation.name == 'group'", + "conversation.result.conversation.tenantId == 'tenantId-Guid'", + "conversation.resultWithCustomProperties.activityId == '0'", + "conversation.resultWithCustomProperties.channelId == 'msteams'", + "conversation.resultWithCustomProperties.conversation.conversationType == 'groupChat'", + "conversation.resultWithCustomProperties.conversation.isGroup == true", + "conversation.resultWithCustomProperties.conversation.name == 'group'", + "conversation.resultWithCustomProperties.conversation.tenantId == 'tenantId-Guid'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMessageToTeamsChannelError.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMessageToTeamsChannelError.test.dialog new file mode 100644 index 0000000000..19419f3b1c --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMessageToTeamsChannelError.test.dialog @@ -0,0 +1,37 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.SendMessageToTeamsChannel" + } + ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserSays", + "text": "hi" + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "Teams.SendMessageToTeamsChannel works only on the Teams channel." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabAuthResponseError.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabAuthResponseError.test.dialog new file mode 100644 index 0000000000..b5e40d7263 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabAuthResponseError.test.dialog @@ -0,0 +1,43 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.SendTabAuthResponse", + "connectionName": "someConnection", + "title": "someTitle" + } + ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "NoConnectionName", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "Teams.SendTabAuthResponse: not supported by the current adapter." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabAuthResponseErrorWithAdapter.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabAuthResponseErrorWithAdapter.test.dialog new file mode 100644 index 0000000000..8172f1d27c --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabAuthResponseErrorWithAdapter.test.dialog @@ -0,0 +1,88 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "recognizer": { + "$kind": "Microsoft.RegexRecognizer", + "intents": [ + { + "intent": "NoConnectionName", + "pattern": "NoConnectionName" + }, + { + "intent": "NoTitle", + "pattern": "NoTitle" + } + ] + }, + "triggers": [ + { + "$kind": "Microsoft.OnIntent", + "intent": "NoConnectionName", + "actions": [ + { + "$kind": "Teams.SendTabAuthResponse", + "connectionName": "=turn.channelData.DoesNotExist" + } + ] + }, + { + "$kind": "Microsoft.OnIntent", + "intent": "NoTitle", + "actions": [ + { + "$kind": "Teams.SendTabAuthResponse", + "connectionName": "testConnection", + "title": "=turn.channelData.doesNotExist" + } + ] + }, + { + "$kind": "Microsoft.OnIntent", + "intent": "NoAttachments", + "actions": [ + { + "$kind": "Teams.SendTabAuthResponse" + } + ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "NoConnectionName", + "name": "tab/fetch" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "A valid ConnectionName is required for auth responses." + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "NoTitle", + "name": "tab/fetch" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "A valid Title is required for auth responses." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabCardResponse.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabCardResponse.test.dialog new file mode 100644 index 0000000000..7e06e3ecde --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabCardResponse.test.dialog @@ -0,0 +1,66 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.SendTabCardResponse", + "cards": { + "type": "message", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.adaptive", + "content": { + "type": "AdaptiveCard", + "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", + "version": "1.2", + "body": [ + { + "type": "Container", + "items": [ + { + "type": "RichTextBlock", + "inlines": [ + { + "type": "TextRun", + "text": "Success!" + } + ] + } + ] + } + ] + } + } + ] + } + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "name": "tab/fetch" + } + }, + { + "$kind": "Microsoft.Test.AssertReplyActivity", + "assertions": [ + "type == 'invokeResponse'", + "conversation.id == 'Action_SendTabCardResponse'", + "value.body.tab.type == 'continue'", + "value.body.tab.value.cards[0].card.body[0].items[0].inlines[0].text == 'Success!'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabCardResponseError.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabCardResponseError.test.dialog new file mode 100644 index 0000000000..1e8a6bdc8c --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabCardResponseError.test.dialog @@ -0,0 +1,79 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "recognizer": { + "$kind": "Microsoft.RegexRecognizer", + "intents": [ + { + "intent": "NoCard", + "pattern": "NoCard" + }, + { + "intent": "NoAttachments", + "pattern": "NoAttachments" + } + ] + }, + "triggers": [ + { + "$kind": "Microsoft.OnIntent", + "intent": "NoCard", + "actions": [ + { + "$kind": "Teams.SendTabCardResponse" + } + ] + }, + { + "$kind": "Microsoft.OnIntent", + "intent": "NoAttachments", + "actions": [ + { + "$kind": "Teams.SendTabCardResponse", + "cards": { + + } + } + ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "NoCard", + "name": "tab/fetch" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "Valid Cards are required for Teams.SendTabCardResponse." + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "NoAttachments", + "name": "tab/fetch" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "Invalid activity. Attachment(s) are required for Teams.SendTabCardResponse." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleCardResponse.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleCardResponse.test.dialog new file mode 100644 index 0000000000..d3c0c285fd --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleCardResponse.test.dialog @@ -0,0 +1,56 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.SendTaskModuleCardResponse", + "title": "some title", + "height": 1, + "width": 2, + "completionBotId": "someBotId", + "card": { + "type": "message", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.thumbnail", + "content": { + "title": "card-title" + } + } + ] + } + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReplyActivity", + "assertions": [ + "type == 'invokeResponse'", + "conversation.id == 'Action_SendTaskModuleCardResponse'", + "value.body.task.value.completionBotId == 'someBotId'", + "value.body.task.value.height == 1", + "value.body.task.value.title == 'some title'", + "value.body.task.value.width == 2", + "value.body.task.value.card.contentType == 'application/vnd.microsoft.card.thumbnail'", + "value.body.task.value.card.content.title == 'card-title'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleCardResponseError.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleCardResponseError.test.dialog new file mode 100644 index 0000000000..20e353e108 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleCardResponseError.test.dialog @@ -0,0 +1,79 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "recognizer": { + "$kind": "Microsoft.RegexRecognizer", + "intents": [ + { + "intent": "NoCard", + "pattern": "NoCard" + }, + { + "intent": "NoAttachments", + "pattern": "NoAttachments" + } + ] + }, + "triggers": [ + { + "$kind": "Microsoft.OnIntent", + "intent": "NoCard", + "actions": [ + { + "$kind": "Teams.SendTaskModuleCardResponse" + } + ] + }, + { + "$kind": "Microsoft.OnIntent", + "intent": "NoAttachments", + "actions": [ + { + "$kind": "Teams.SendTaskModuleCardResponse", + "card": { + "type": "message" + } + } + ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "NoCard", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "A valid Card is required for Teams.SendTaskModuleCardResponse." + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "NoAttachments", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "Invalid activity. An attachment is required for Teams.SendTaskModuleCardResponse." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleMessageResponse.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleMessageResponse.test.dialog new file mode 100644 index 0000000000..5819cd6331 --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleMessageResponse.test.dialog @@ -0,0 +1,37 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.SendTaskModuleMessageResponse", + "message": "i want to send this to the user" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReplyActivity", + "assertions": [ + "type == 'invokeResponse'", + "conversation.id == 'Action_SendTaskModuleMessageResponse'", + "value.body.task.value == 'i want to send this to the user'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleUrlResponse.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleUrlResponse.test.dialog new file mode 100644 index 0000000000..53a2d07eac --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleUrlResponse.test.dialog @@ -0,0 +1,47 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.SendTaskModuleUrlResponse", + "title": "some title", + "height": 1, + "width": 2, + "completionBotId": "someBotId", + "url": "http://thisIsTheMainUrl.com", + "fallbackUrl": "http://thisIsTheFallbackUrl.net/okay/falling/back_now" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReplyActivity", + "assertions": [ + "type == 'invokeResponse'", + "conversation.id == 'Action_SendTaskModuleUrlResponse'", + "value.body.task.value.completionBotId == 'someBotId'", + "value.body.task.value.height == 1", + "value.body.task.value.title == 'some title'", + "value.body.task.value.width == 2", + "value.body.task.value.url == 'http://thisIsTheMainUrl.com'", + "value.body.task.value.fallbackUrl == 'http://thisIsTheFallbackUrl.net/okay/falling/back_now'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleUrlResponseError.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleUrlResponseError.test.dialog new file mode 100644 index 0000000000..e30217656b --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleUrlResponseError.test.dialog @@ -0,0 +1,42 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnUnknownIntent", + "actions": [ + { + "$kind": "Teams.SendTaskModuleUrlResponse", + "url": "=turn.channelData.doesNotExist" + } + ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] + } + ] + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "message", + "text": "hi", + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "Missing Url for Teams.SendTaskModuleUrlResponse." + } + ] +} \ No newline at end of file diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ConditionalTests/ConditionalsTests_OnTeamsActivityTypes.test.dialog b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ConditionalTests/ConditionalsTests_OnTeamsActivityTypes.test.dialog new file mode 100644 index 0000000000..ef348c61ac --- /dev/null +++ b/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ConditionalTests/ConditionalsTests_OnTeamsActivityTypes.test.dialog @@ -0,0 +1,616 @@ +{ + "$schema": "../../../tests.schema", + "$kind": "Microsoft.Test.Script", + "dialog": { + "$kind": "Microsoft.AdaptiveDialog", + "id": "planningTest", + "triggers": [ + { + "$kind": "Microsoft.OnInvokeActivity", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.activity.text}" + } + ] + }, + { + "$kind": "Microsoft.OnConversationUpdateActivity", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.activity.text}" + } + ] + }, + { + "$kind": "Teams.OnAppBasedLinkQuery", + "condition": "turn.activity.text == 'OnAppBasedLinkQuery'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnAppBasedLinkQuery" + } + ] + }, + { + "$kind": "Teams.OnCardAction", + "condition": "turn.activity.text == 'OnCardAction'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnCardAction" + } + ] + }, + { + "$kind": "Teams.OnChannelCreated", + "condition": "turn.activity.text == 'OnChannelCreated'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnChannelCreated" + } + ] + }, + { + "$kind": "Teams.OnChannelDeleted", + "condition": "turn.activity.text == 'OnChannelDeleted'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnChannelDeleted" + } + ] + }, + { + "$kind": "Teams.OnChannelRenamed", + "condition": "turn.activity.text == 'OnChannelRenamed'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnChannelRenamed" + } + ] + }, + { + "$kind": "Teams.OnChannelRestored", + "condition": "turn.activity.text == 'OnChannelRestored'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnChannelRestored" + } + ] + }, + { + "$kind": "Teams.OnFileConsent", + "condition": "turn.activity.text == 'OnFileConsent'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnFileConsent" + } + ] + }, + { + "$kind": "Teams.OnMECardButtonClicked", + "condition": "turn.activity.text == 'OnCardButtonClicked'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnCardButtonClicked" + } + ] + }, + { + "$kind": "Teams.OnMEConfigQuerySettingUrl", + "condition": "turn.activity.text == 'OnConfigurationQuerySettingUrl'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnConfigurationQuerySettingUrl" + } + ] + }, + { + "$kind": "Teams.OnMEConfigSetting", + "condition": "turn.activity.text == 'OnConfigurationSetting'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnConfigurationSetting" + } + ] + }, + { + "$kind": "Teams.OnMEFetchTask", + "condition": "turn.activity.text == 'OnFetchTask'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnFetchTask" + } + ] + }, + { + "$kind": "Teams.OnMEQuery", + "condition": "turn.activity.text == 'OnQuery'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnQuery" + } + ] + }, + { + "$kind": "Teams.OnMESelectItem", + "condition": "turn.activity.text == 'OnSelectItem'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnSelectItem" + } + ] + }, + { + "$kind": "Teams.OnMESubmitAction", + "condition": "turn.activity.text == 'OnSubmitAction'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnSubmitAction" + } + ] + }, + { + "$kind": "Teams.OnO365ConnectorCardAction", + "condition": "turn.activity.text == 'OnO365ConnectorCardAction'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnO365ConnectorCardAction" + } + ] + }, + { + "$kind": "Teams.OnTaskModuleFetch", + "condition": "turn.activity.text == 'OnTaskModuleFetch'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnTaskModuleFetch" + } + ] + }, + { + "$kind": "Teams.OnTabFetch", + "condition": "turn.activity.text == 'OnTabFetch'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnTabFetch" + } + ] + }, + { + "$kind": "Teams.OnTaskModuleSubmit", + "condition": "turn.activity.text == 'OnTaskModuleSubmit'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnTaskModuleSubmit" + } + ] + }, + { + "$kind": "Teams.OnTabSubmit", + "condition": "turn.activity.text == 'OnTabSubmit'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnTabSubmit" + } + ] + }, + { + "$kind": "Teams.OnTeamArchived", + "condition": "turn.activity.text == 'OnTeamArchived'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnTeamArchived" + } + ] + }, + { + "$kind": "Teams.OnTeamDeleted", + "condition": "turn.activity.text == 'OnTeamDeleted'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnTeamDeleted" + } + ] + }, + { + "$kind": "Teams.OnTeamHardDeleted", + "condition": "turn.activity.text == 'OnTeamHardDeleted'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnTeamHardDeleted" + } + ] + }, + { + "$kind": "Teams.OnTeamRenamed", + "condition": "turn.activity.text == 'OnTeamRenamed'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnTeamRenamed" + } + ] + }, + { + "$kind": "Teams.OnTeamRestored", + "condition": "turn.activity.text == 'OnTeamRestored'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnTeamRestored" + } + ] + }, + { + "$kind": "Teams.OnTeamUnarchived", + "condition": "turn.activity.text == 'OnTeamUnarchived'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnTeamUnarchived" + } + ] + } + ], + "autoEndDialog": false, + "defaultResultProperty": "dialog.result" + }, + "script": [ + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "invoke", + "text": "OnAppBasedLinkQuery", + "value": {}, + "name": "composeExtension/queryLink" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnAppBasedLinkQuery" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "invoke", + "text": "OnCardAction", + "value": {} + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnCardAction" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "conversationUpdate", + "text": "OnChannelCreated", + "channelData": { + "eventType": "channelCreated" + } + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnChannelCreated" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "conversationUpdate", + "text": "OnChannelDeleted", + "channelData": { + "eventType": "channelDeleted" + } + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnChannelDeleted" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "conversationUpdate", + "text": "OnChannelRenamed", + "channelData": { + "eventType": "channelRenamed" + } + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnChannelRenamed" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "conversationUpdate", + "text": "OnChannelRestored", + "channelData": { + "eventType": "channelRestored" + } + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnChannelRestored" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "invoke", + "text": "OnFileConsent", + "value": {}, + "name": "fileConsent/invoke" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnFileConsent" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "invoke", + "text": "OnCardButtonClicked", + "value": {}, + "name": "composeExtension/onCardButtonClicked" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnCardButtonClicked" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "invoke", + "text": "OnConfigurationQuerySettingUrl", + "value": {}, + "name": "composeExtension/querySettingUrl" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnConfigurationQuerySettingUrl" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "invoke", + "text": "OnConfigurationSetting", + "value": {}, + "name": "composeExtension/setting" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnConfigurationSetting" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "invoke", + "text": "OnFetchTask", + "value": {}, + "name": "composeExtension/fetchTask" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnFetchTask" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "invoke", + "text": "OnQuery", + "value": {}, + "name": "composeExtension/query" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnQuery" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "invoke", + "text": "OnSelectItem", + "value": {}, + "name": "composeExtension/selectItem" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnSelectItem" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "invoke", + "text": "OnSubmitAction", + "value": {}, + "name": "composeExtension/submitAction" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnSubmitAction" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "invoke", + "text": "OnO365ConnectorCardAction", + "value": {}, + "name": "actionableMessage/executeAction" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnO365ConnectorCardAction" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "invoke", + "text": "OnTabFetch", + "value": {}, + "name": "tab/fetch" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnTabFetch" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "invoke", + "text": "OnTaskModuleFetch", + "value": {}, + "name": "task/fetch" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnTaskModuleFetch" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "invoke", + "text": "OnTabSubmit", + "value": {}, + "name": "tab/submit" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnTabSubmit" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "invoke", + "text": "OnTaskModuleSubmit", + "value": {}, + "name": "task/submit" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnTaskModuleSubmit" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "conversationUpdate", + "text": "OnTeamArchived", + "channelData": { + "eventType": "teamArchived" + } + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnTeamArchived" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "conversationUpdate", + "text": "OnTeamDeleted", + "channelData": { + "eventType": "teamDeleted" + } + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnTeamDeleted" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "conversationUpdate", + "text": "OnTeamHardDeleted", + "channelData": { + "eventType": "teamHardDeleted" + } + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnTeamHardDeleted" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "conversationUpdate", + "text": "OnTeamRenamed", + "channelData": { + "eventType": "teamRenamed" + } + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnTeamRenamed" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "conversationUpdate", + "text": "OnTeamRestored", + "channelData": { + "eventType": "teamRestored" + } + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnTeamRestored" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "conversationUpdate", + "text": "OnTeamUnarchived", + "channelData": { + "eventType": "teamUnarchived" + } + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnTeamUnarchived" + } + ] +} \ No newline at end of file From a992a47917327464dd80cf0f2a2dff29c5582135 Mon Sep 17 00:00:00 2001 From: Steven Ickman Date: Tue, 29 Jun 2021 11:23:56 -0700 Subject: [PATCH 32/39] fix: Stevenic/ac fix (#1164) * Fixed typo in schema for UpdateActivity * Forgot to copy activityId to outgoing activity in UpdateAdaptiveCard --- packages/AdaptiveCards/Actions/UpdateAdaptiveCard.cs | 1 + .../Schemas/Microsoft.Bot.Components.UpdateAdaptiveCard.schema | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/AdaptiveCards/Actions/UpdateAdaptiveCard.cs b/packages/AdaptiveCards/Actions/UpdateAdaptiveCard.cs index e70c3c9980..ac0a8a8b56 100644 --- a/packages/AdaptiveCards/Actions/UpdateAdaptiveCard.cs +++ b/packages/AdaptiveCards/Actions/UpdateAdaptiveCard.cs @@ -34,6 +34,7 @@ protected async override Task OnProcessCardAsync(DialogContext dc, JObje } // Update existing activity + activity.Id = activityId; await dc.Context.UpdateActivityAsync(activity, cancellationToken).ConfigureAwait(false); } else diff --git a/packages/AdaptiveCards/Schemas/Microsoft.Bot.Components.UpdateAdaptiveCard.schema b/packages/AdaptiveCards/Schemas/Microsoft.Bot.Components.UpdateAdaptiveCard.schema index b51cb2b73e..2f2cde9e64 100644 --- a/packages/AdaptiveCards/Schemas/Microsoft.Bot.Components.UpdateAdaptiveCard.schema +++ b/packages/AdaptiveCards/Schemas/Microsoft.Bot.Components.UpdateAdaptiveCard.schema @@ -40,7 +40,7 @@ "$ref": "schema:#/definitions/stringExpression", "title": "Activity ID", "description": "ID of the cards activity to update. Required unless sending a response to an invoked Action.Execute.", - "default": "=turn.activity.replyTo" + "default": "=turn.activity.replyToId" } }, "required": [ "template", "data" ] From bc3507e3ebb27d0d97a5454ec9322e32ebf10212 Mon Sep 17 00:00:00 2001 From: Ryan Lengel Isgrig <43043272+ryanlengel@users.noreply.github.com> Date: Thu, 1 Jul 2021 11:58:57 -0700 Subject: [PATCH 33/39] feat: functional tests generate empty bots in js (#1186) * Add generator/deploy steps to js deploy steps and update parameters * Add dir workspace step to js * Replace working directory instances with solution directory var * Remove skillv3 refs from deploy steps * Add step to remove web.config from generated bot * only remove web.config for js webapp * Rename /bots directory to /workspace * fix comment --- .../deployBotResources/deployBotResources.yml | 10 +++- .../yaml/deployBotResources/dotnet/deploy.yml | 2 +- .../dotnet/evaluateDependenciesVariables.yml | 5 -- .../deployBotResources/generator/deploy.yml | 6 +- .../yaml/deployBotResources/js/deploy.yml | 55 +++++++++++-------- .../js/evaluateDependenciesVariables.yml | 5 -- 6 files changed, 44 insertions(+), 39 deletions(-) diff --git a/tests/functional/build/yaml/deployBotResources/deployBotResources.yml b/tests/functional/build/yaml/deployBotResources/deployBotResources.yml index f39e345b58..bcd2504288 100644 --- a/tests/functional/build/yaml/deployBotResources/deployBotResources.yml +++ b/tests/functional/build/yaml/deployBotResources/deployBotResources.yml @@ -153,7 +153,10 @@ stages: appId: $(BFCFNEMPTYBOTJSWEBAPPID) appSecret: $(BFCFNEMPTYBOTJSWEBAPPSECRET) project: - directory: 'Tests/Functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot' + generator: "generators/generator-bot-empty" + integration: "webapp" + name: "EmptyBotJSWebApp" + platform: "js" dependency: registry: ${{ parameters.dependenciesRegistryJSHosts }} version: ${{ parameters.dependenciesVersionJSHosts }} @@ -164,7 +167,10 @@ stages: appId: $(BFCFNEMPTYBOTJSFUNCTIONSID) appSecret: $(BFCFNEMPTYBOTJSFUNCTIONSSECRET) project: - directory: 'Tests/Functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot' + generator: "generators/generator-bot-empty" + integration: "functions" + name: "EmptyBotJSFunctions" + platform: "js" dependency: registry: ${{ parameters.dependenciesRegistryJSHosts }} version: ${{ parameters.dependenciesVersionJSHosts }} diff --git a/tests/functional/build/yaml/deployBotResources/dotnet/deploy.yml b/tests/functional/build/yaml/deployBotResources/dotnet/deploy.yml index f3d0c6f054..d7084aa0ad 100644 --- a/tests/functional/build/yaml/deployBotResources/dotnet/deploy.yml +++ b/tests/functional/build/yaml/deployBotResources/dotnet/deploy.yml @@ -55,7 +55,7 @@ stages: jobs: - job: "Deploy" variables: - SolutionDir: "$(BUILD.SOURCESDIRECTORY)/bots/" + SolutionDir: "$(BUILD.SOURCESDIRECTORY)/workspace/" displayName: "Deploy steps" steps: # Delete Bot Resources diff --git a/tests/functional/build/yaml/deployBotResources/dotnet/evaluateDependenciesVariables.yml b/tests/functional/build/yaml/deployBotResources/dotnet/evaluateDependenciesVariables.yml index f2e44169c4..e1fb2c57a8 100644 --- a/tests/functional/build/yaml/deployBotResources/dotnet/evaluateDependenciesVariables.yml +++ b/tests/functional/build/yaml/deployBotResources/dotnet/evaluateDependenciesVariables.yml @@ -19,20 +19,17 @@ steps: failOnStderr: true script: | # Get Source - $sourceDotNetv3MyGet = "https://botbuilder.myget.org/F/botbuilder-v3-dotnet-daily/api/v3/index.json" $sourceDotNetArtifacts = "https://pkgs.dev.azure.com/ConversationalAI/BotFramework/_packaging/SDK/nuget/v3/index.json" $sourceDotNetMyGet = "https://botbuilder.myget.org/F/botbuilder-v4-dotnet-daily/api/v3/index.json" switch -regex ("${{ parameters.registry }}") { "^($null|)$" { switch ("${{ parameters.botType }}") { - "SkillV3" { $source = $sourceDotNetv3MyGet } default { $source = $sourceDotNetArtifacts } } } "Artifacts" { $source = $sourceDotNetArtifacts } "MyGet" { switch ("${{ parameters.botType }}") { - "SkillV3" { $source = $sourceDotNetv3MyGet } default { $source = $sourceDotNetMyGet } } } @@ -53,8 +50,6 @@ steps: if ("${{ parameters.botType }}" -in "Host", "Skill") { $PackageList = nuget list Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime -Source "$source" -PreRelease $versionNumber = $PackageList.Split(" ")[-1] - } elseif ("${{ parameters.botType }}" -in "SkillV3") { - $versionNumber = "" } } STABLE { $versionNumber = "" } diff --git a/tests/functional/build/yaml/deployBotResources/generator/deploy.yml b/tests/functional/build/yaml/deployBotResources/generator/deploy.yml index f7c1680fde..a061e1677f 100644 --- a/tests/functional/build/yaml/deployBotResources/generator/deploy.yml +++ b/tests/functional/build/yaml/deployBotResources/generator/deploy.yml @@ -8,10 +8,10 @@ parameters: type: string steps: - # Create /bots directory + # Create /workspace - script: | - mkdir bots - displayName: 'Create bots directory' + mkdir workspace + displayName: 'Create workspace directory' # Install yarn workspace - script: | diff --git a/tests/functional/build/yaml/deployBotResources/js/deploy.yml b/tests/functional/build/yaml/deployBotResources/js/deploy.yml index 497994cda4..a8994dc8b8 100644 --- a/tests/functional/build/yaml/deployBotResources/js/deploy.yml +++ b/tests/functional/build/yaml/deployBotResources/js/deploy.yml @@ -53,6 +53,8 @@ stages: dependsOn: "${{ parameters.dependsOn }}" jobs: - job: "Deploy" + variables: + SolutionDir: "$(BUILD.SOURCESDIRECTORY)/workspace/" displayName: "Deploy steps" steps: # Delete Bot Resources @@ -72,24 +74,6 @@ stages: botName: "${{ bot.name }}" keyVault: "${{ parameters.keyVault }}" - # Prepare .env file, deleting all the declared skills, so it uses only the settings define in Azure - - ${{ if eq(bot.type, 'Host') }}: - - task: PowerShell@2 - displayName: 'Prepare .env file' - inputs: - targetType: inline - workingDirectory: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ bot.project.directory }}' - failOnStderr: true - script: | - $file = "./.env" - $content = Get-Content $file - $content | ForEach-Object { - $line = $_ - if ($line.Trim().Length -gt 0 -and -not $line.Trim().ToLower().StartsWith('skill_')) { - $line - } - } | Set-Content $file; - # Evaluate dependencies source and version - template: evaluateDependenciesVariables.yml parameters: @@ -97,6 +81,12 @@ stages: registry: "${{ bot.dependency.registry }}" version: "${{ bot.dependency.version }}" + # Generate bot template + - template: ../generator/deploy.yml + parameters: + project: "${{ bot.project }}" + solutiondir: "$(SOLUTIONDIR)" + # Tag BotBuilder version - template: ../common/tagBotBuilderVersion.yml parameters: @@ -111,7 +101,7 @@ stages: displayName: 'Set BotBuilder source and version' inputs: targetType: inline - workingDirectory: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ bot.project.directory }}' + workingDirectory: '$(SOLUTIONDIR)/${{ bot.project.name }}' failOnStderr: true script: | $registry = "$(DEPENDENCIESSOURCE)"; @@ -140,24 +130,35 @@ stages: displayName: 'Install dependencies' inputs: command: 'install' - workingDir: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ bot.project.directory }}' + workingDir: '$(SOLUTIONDIR)/${{ bot.project.name }}' customRegistries: 'useNpmrc' verbose: true - # Prepate bot + # Remove web.config generated from webapp template to be able to run "az bot prepare-deploy" + - ${{ if eq(bot.project.integration, 'webapp') }}: + - task: PowerShell@2 + displayName: 'Remove web.config' + inputs: + targetType: inline + workingDirectory: '$(SOLUTIONDIR)/${{ bot.project.name }}' + failOnStderr: true + script: | + Remove-Item .\web.config + + # Prepare bot - task: AzureCLI@2 displayName: 'Prepare Bot' inputs: azureSubscription: "${{ parameters.azureSubscription }}" scriptType: pscore scriptLocation: inlineScript - inlineScript: 'az bot prepare-deploy --code-dir "${{ bot.project.directory }}" --lang Javascript' + inlineScript: 'az bot prepare-deploy --code-dir "$(SOLUTIONDIR)/${{ bot.project.name }}" --lang Javascript' # Zip bot - task: ArchiveFiles@2 displayName: 'Zip bot' inputs: - rootFolderOrFile: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ bot.project.directory }}' + rootFolderOrFile: '$(SOLUTIONDIR)/${{ bot.project.name }}' includeRootFolder: false archiveType: 'zip' archiveFile: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/build/${{ bot.name }}.zip' @@ -216,3 +217,11 @@ stages: botGroup: "${{ parameters.resourceGroup }}" botName: "${{ bot.name }}" resourceSuffix: "${{ parameters.resourceSuffix }}" + + # Debugging output for the workspace + - script: | + cd .. + dir *.* /s + displayName: 'Dir workspace' + continueOnError: true + condition: succeededOrFailed() \ No newline at end of file diff --git a/tests/functional/build/yaml/deployBotResources/js/evaluateDependenciesVariables.yml b/tests/functional/build/yaml/deployBotResources/js/evaluateDependenciesVariables.yml index fc47b0302e..67dc8ef7a7 100644 --- a/tests/functional/build/yaml/deployBotResources/js/evaluateDependenciesVariables.yml +++ b/tests/functional/build/yaml/deployBotResources/js/evaluateDependenciesVariables.yml @@ -20,12 +20,10 @@ steps: script: | # Get Source $sourceJSMyGet = "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/" - $sourceJSv3MyGet = "https://botbuilder.myget.org/F/botbuilder-v3-js-daily/npm/" $sourceJSNpm = "https://registry.npmjs.com/" switch -regex ("${{ parameters.registry }}") { "^($null|MyGet)$" { switch ("${{ parameters.botType }}") { - "SkillV3" { $source = $sourceJSv3MyGet } default { $source = $sourceJSMyGet } } } @@ -55,9 +53,6 @@ steps: if ("${{ parameters.botType }}" -in "Host", "Skill") { $PackageList = npm show botbuilder@* version | Out-String; } - elseif ("${{ parameters.botType }}" -in "SkillV3") { - $PackageList = npm show botbuilder@3.* version | Out-String; - } $versionNumber = ($PackageList.Split(" ")[-1]).Trim().TrimStart("'").TrimEnd("'"); } default { $versionNumber = "${{ parameters.version }}" } From 205d6e059946931fe7e6889aa6373e3f08380a6c Mon Sep 17 00:00:00 2001 From: lauren-mills Date: Thu, 1 Jul 2021 12:00:41 -0700 Subject: [PATCH 34/39] fix: R14 template issues (#1188) * update generators if/else conditions to include = * update ifConditions in dev projects * remove extraneous schema files and properties * Fix bot tour buttons in Teams --- .../generators/app/templates/botName.dialog | 8 +-- .../ChitchatDialog/ChitchatDialog.dialog | 4 +- .../generators/app/templates/botName.dialog | 2 +- .../generators/app/templates/botName.dialog | 2 +- .../generators/app/templates/botName.dialog | 2 +- .../generators/app/templates/botName.dialog | 13 +++-- .../en-us/BotTourDialog.en-us.lg | 39 ++++++++++---- .../ChitchatDialog/ChitchatDialog.dialog | 4 +- .../generators/app/templates/botName.dialog | 13 +++-- .../CancelEventDialog.dialog | 6 +-- .../CreateEventDialog.dialog | 8 +-- .../GetContactsDialog.dialog | 4 +- .../GetEventsDialog/GetEventsDialog.dialog | 18 +++---- .../dialogs/ListDialog/ListDialog.dialog | 8 +-- .../ResolveDateTimeDialog.dialog | 20 ++++---- .../RespondToEventDialog.dialog | 6 +-- .../ShowEventsDialog/ShowEventsDialog.dialog | 12 ++--- .../UpdateEventDialog.dialog | 8 +-- .../generators/app/templates/botName.dialog | 3 +- .../GetManagerDialog.dialog.schema | 11 ---- .../GetProfileDialog/GetProfileDialog.dialog | 4 +- .../GetProfileDialog.dialog.schema | 51 ------------------- .../dialogs/ListDialog/ListDialog.dialog | 8 +-- .../ResolveUserDialog.dialog.schema | 51 ------------------- .../generators/app/templates/emptyBot.dialog | 2 +- .../Calendar/Calendar/Calendar.dialog | 11 ++-- .../CancelEventDialog.dialog | 6 +-- .../CreateEventDialog.dialog | 8 +-- .../GetContactsDialog.dialog | 4 +- .../GetEventsDialog/GetEventsDialog.dialog | 16 +++--- .../dialogs/ListDialog/ListDialog.dialog | 8 +-- .../ResolveDateTimeDialog.dialog | 20 ++++---- .../RespondToEventDialog.dialog | 6 +-- .../ShowEventsDialog/ShowEventsDialog.dialog | 12 ++--- .../UpdateEventDialog.dialog | 8 +-- .../declarative/People/People/People.dialog | 3 +- .../GetProfileDialog/GetProfileDialog.dialog | 4 +- .../dialogs/ListDialog/ListDialog.dialog | 8 +-- 38 files changed, 161 insertions(+), 260 deletions(-) delete mode 100644 generators/generator-bot-enterprise-people/generators/app/templates/dialogs/GetManagerDialog/GetManagerDialog.dialog.schema delete mode 100644 generators/generator-bot-enterprise-people/generators/app/templates/dialogs/GetProfileDialog/GetProfileDialog.dialog.schema delete mode 100644 generators/generator-bot-enterprise-people/generators/app/templates/dialogs/ResolveUserDialog/ResolveUserDialog.dialog.schema diff --git a/generators/generator-bot-core-assistant/generators/app/templates/botName.dialog b/generators/generator-bot-core-assistant/generators/app/templates/botName.dialog index a50e949f85..43cd66425d 100644 --- a/generators/generator-bot-core-assistant/generators/app/templates/botName.dialog +++ b/generators/generator-bot-core-assistant/generators/app/templates/botName.dialog @@ -28,14 +28,14 @@ "id": "641773", "name": "Branch: if/else" }, - "condition": "string(dialog.foreach.value.id) != string(turn.Activity.Recipient.id)", + "condition": "=string(dialog.foreach.value.id) != string(turn.Activity.Recipient.id)", "actions": [ { "$kind": "Microsoft.IfCondition", "$designer": { "id": "Y1t1k4" }, - "condition": "exists(user.greeted)", + "condition": "=exists(user.greeted)", "actions": [ { "$kind": "Microsoft.SendActivity", @@ -226,7 +226,7 @@ "$designer": { "id": "tjutdL" }, - "condition": "turn.intentChoice != 'none'", + "condition": "=turn.intentChoice != 'none'", "actions": [ { "$kind": "Microsoft.EmitEvent", @@ -342,7 +342,7 @@ "$designer": { "id": "VogQ3v" }, - "condition": "exists(turn.activity.text)", + "condition": "=exists(turn.activity.text)", "actions": [ { "$kind": "Microsoft.BeginDialog", diff --git a/generators/generator-bot-core-assistant/generators/app/templates/dialogs/ChitchatDialog/ChitchatDialog.dialog b/generators/generator-bot-core-assistant/generators/app/templates/dialogs/ChitchatDialog/ChitchatDialog.dialog index d3ed3626e1..0fa283b261 100644 --- a/generators/generator-bot-core-assistant/generators/app/templates/dialogs/ChitchatDialog/ChitchatDialog.dialog +++ b/generators/generator-bot-core-assistant/generators/app/templates/dialogs/ChitchatDialog/ChitchatDialog.dialog @@ -19,7 +19,7 @@ "$designer": { "id": "1mbleA" }, - "condition": "count(turn.recognized.answers[0].context.prompts) > 0", + "condition": "=count(turn.recognized.answers[0].context.prompts) > 0", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -60,7 +60,7 @@ "$designer": { "id": "qYZxID" }, - "condition": "turn.qnaMatchFromContext && count(turn.qnaMatchFromContext) > 0", + "condition": "=turn.qnaMatchFromContext && count(turn.qnaMatchFromContext) > 0", "actions": [ { "$kind": "Microsoft.SetProperty", diff --git a/generators/generator-bot-core-language/generators/app/templates/botName.dialog b/generators/generator-bot-core-language/generators/app/templates/botName.dialog index 5ad271db33..7955e9a0ab 100644 --- a/generators/generator-bot-core-language/generators/app/templates/botName.dialog +++ b/generators/generator-bot-core-language/generators/app/templates/botName.dialog @@ -28,7 +28,7 @@ "id": "641773", "name": "Branch: if/else" }, - "condition": "string(dialog.foreach.value.id) != string(turn.Activity.Recipient.id)", + "condition": "=string(dialog.foreach.value.id) != string(turn.Activity.Recipient.id)", "actions": [ { "$kind": "Microsoft.BeginDialog", diff --git a/generators/generator-bot-core-qna/generators/app/templates/botName.dialog b/generators/generator-bot-core-qna/generators/app/templates/botName.dialog index d6dc356fa4..79a0ebbe36 100644 --- a/generators/generator-bot-core-qna/generators/app/templates/botName.dialog +++ b/generators/generator-bot-core-qna/generators/app/templates/botName.dialog @@ -28,7 +28,7 @@ "id": "641773", "name": "Branch: if/else" }, - "condition": "string(dialog.foreach.value.id) != string(turn.Activity.Recipient.id)", + "condition": "=string(dialog.foreach.value.id) != string(turn.Activity.Recipient.id)", "actions": [ { "$kind": "Microsoft.SendActivity", diff --git a/generators/generator-bot-empty/generators/app/templates/botName.dialog b/generators/generator-bot-empty/generators/app/templates/botName.dialog index b147be7a6b..7055562b03 100644 --- a/generators/generator-bot-empty/generators/app/templates/botName.dialog +++ b/generators/generator-bot-empty/generators/app/templates/botName.dialog @@ -28,7 +28,7 @@ "id": "641773", "name": "Branch: if/else" }, - "condition": "string(dialog.foreach.value.id) != string(turn.Activity.Recipient.id)", + "condition": "=string(dialog.foreach.value.id) != string(turn.Activity.Recipient.id)", "actions": [ { "$kind": "Microsoft.SendActivity", diff --git a/generators/generator-bot-enterprise-assistant/generators/app/templates/botName.dialog b/generators/generator-bot-enterprise-assistant/generators/app/templates/botName.dialog index 73c92e6802..e972b9019a 100644 --- a/generators/generator-bot-enterprise-assistant/generators/app/templates/botName.dialog +++ b/generators/generator-bot-enterprise-assistant/generators/app/templates/botName.dialog @@ -30,14 +30,14 @@ "id": "641773", "name": "Branch: if/else" }, - "condition": "string(dialog.foreach.value.id) != string(turn.Activity.Recipient.id)", + "condition": "=string(dialog.foreach.value.id) != string(turn.Activity.Recipient.id)", "actions": [ { "$kind": "Microsoft.IfCondition", "$designer": { "id": "Y1t1k4" }, - "condition": "exists(user.greeted)", + "condition": "=exists(user.greeted)", "actions": [ { "$kind": "Microsoft.SendActivity", @@ -258,7 +258,7 @@ "$designer": { "id": "tjutdL" }, - "condition": "turn.intentChoice != 'none'", + "condition": "=turn.intentChoice != 'none'", "actions": [ { "$kind": "Microsoft.EmitEvent", @@ -446,7 +446,7 @@ "$designer": { "id": "zG90cd" }, - "condition": "turn.activity.value.skillId != null", + "condition": "=turn.activity.value.skillId != null", "actions": [ { "$kind": "Microsoft.EmitEvent", @@ -463,7 +463,7 @@ "$designer": { "id": "VogQ3v" }, - "condition": "exists(turn.activity.text)", + "condition": "=exists(turn.activity.text)", "actions": [ { "$kind": "Microsoft.BeginDialog", @@ -629,7 +629,7 @@ "$designer": { "id": "RieQAx" }, - "condition": "exists($skillHandled) && $skillHandled == false", + "condition": "=exists($skillHandled) && $skillHandled == false", "actions": [ { "$kind": "Microsoft.TraceActivity", @@ -651,7 +651,6 @@ ] } ], - "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/stable/Composer/packages/server/schemas/sdk.schema", "generator": "<%= botName %>.lg", "id": "<%= botName %>", "recognizer": "<%= botName %>.lu.qna" diff --git a/generators/generator-bot-enterprise-assistant/generators/app/templates/dialogs/BotTourDialog/language-generation/en-us/BotTourDialog.en-us.lg b/generators/generator-bot-enterprise-assistant/generators/app/templates/dialogs/BotTourDialog/language-generation/en-us/BotTourDialog.en-us.lg index bd3189898b..12d19dc26c 100644 --- a/generators/generator-bot-enterprise-assistant/generators/app/templates/dialogs/BotTourDialog/language-generation/en-us/BotTourDialog.en-us.lg +++ b/generators/generator-bot-enterprise-assistant/generators/app/templates/dialogs/BotTourDialog/language-generation/en-us/BotTourDialog.en-us.lg @@ -169,13 +169,7 @@ ] } ], - "selectAction":{ - "type":"Action.Submit", - "title":"${text}", - "data":{ - "intent":"${intent}" - } - }, + "selectAction": ${SubmitAction(title, intent)}, "separator": true } ``` @@ -236,11 +230,36 @@ } ``` -# BuildSubmitAction(title, intent) +# BuildSubmitAction(text, intent) +- IF: ${ turn.activity.channelId == "msteams" } + - ${TeamsSubmitAction(text, intent)} +- ELSE: + - ${SubmitAction(text, intent)} + + +# TeamsSubmitAction(text, intent) +- ``` +{ + "type": "Action.Submit", + "title": "${text}", + "data": { + "intent": "${intent}", + "msteams": { + "type": "messageBack", + "text": "${text}" + } + } +} +``` + +# SubmitAction(text, intent) - ``` { "type": "Action.Submit", - "title": "${title}", - "data": "${title}" + "title": "${text}", + "data": { + "intent": "${intent}", + "value": "${text}" + } } ``` \ No newline at end of file diff --git a/generators/generator-bot-enterprise-assistant/generators/app/templates/dialogs/ChitchatDialog/ChitchatDialog.dialog b/generators/generator-bot-enterprise-assistant/generators/app/templates/dialogs/ChitchatDialog/ChitchatDialog.dialog index 9342471af9..87ca6dd876 100644 --- a/generators/generator-bot-enterprise-assistant/generators/app/templates/dialogs/ChitchatDialog/ChitchatDialog.dialog +++ b/generators/generator-bot-enterprise-assistant/generators/app/templates/dialogs/ChitchatDialog/ChitchatDialog.dialog @@ -26,7 +26,7 @@ "$designer": { "id": "1mbleA" }, - "condition": "count(turn.recognized.answers[0].context.prompts) > 0", + "condition": "=count(turn.recognized.answers[0].context.prompts) > 0", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -67,7 +67,7 @@ "$designer": { "id": "qYZxID" }, - "condition": "turn.qnaMatchFromContext && count(turn.qnaMatchFromContext) > 0", + "condition": "=turn.qnaMatchFromContext && count(turn.qnaMatchFromContext) > 0", "actions": [ { "$kind": "Microsoft.SetProperty", diff --git a/generators/generator-bot-enterprise-calendar/generators/app/templates/botName.dialog b/generators/generator-bot-enterprise-calendar/generators/app/templates/botName.dialog index 555b2ac664..7be4d34752 100644 --- a/generators/generator-bot-enterprise-calendar/generators/app/templates/botName.dialog +++ b/generators/generator-bot-enterprise-calendar/generators/app/templates/botName.dialog @@ -27,7 +27,7 @@ "$designer": { "id": "25rJrE" }, - "condition": "= turn.activity.channelId == 'msteams' && turn.activity.conversation.conversationType != 'personal'", + "condition": "=turn.activity.channelId == 'msteams' && turn.activity.conversation.conversationType != 'personal'", "elseActions": [ { "$kind": "Microsoft.BeginDialog", @@ -411,7 +411,7 @@ ] } ], - "condition": "not(exists($options.start))" + "condition": "=not(exists($options.start))" }, { "$kind": "Microsoft.BeginDialog", @@ -484,7 +484,7 @@ ] } ], - "condition": "not(exists($options.start))" + "condition": "=not(exists($options.start))" }, { "$kind": "Microsoft.BeginDialog", @@ -550,7 +550,7 @@ ] } ], - "condition": "not(exists($options.start))" + "condition": "=not(exists($options.start))" }, { "$kind": "Microsoft.BeginDialog", @@ -580,7 +580,7 @@ "$designer": { "id": "ijHFYq" }, - "condition": "count($availabilityList) > 0", + "condition": "=count($availabilityList) > 0", "actions": [ { "$kind": "Microsoft.SendActivity", @@ -1732,7 +1732,7 @@ "$designer": { "id": "7mDmi7" }, - "condition": "exists(@duration)", + "condition": "=exists(@duration)", "actions": [ { "$kind": "Microsoft.BeginDialog", @@ -1820,7 +1820,6 @@ "runOnce": true } ], - "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/stable/Composer/packages/server/schemas/sdk.schema", "generator": "<%= botName %>.lg", "recognizer": "<%= botName %>.lu.qna", "id": "<%= botName %>" diff --git a/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/CancelEventDialog/CancelEventDialog.dialog b/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/CancelEventDialog/CancelEventDialog.dialog index 16ba486db1..02d750dd07 100644 --- a/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/CancelEventDialog/CancelEventDialog.dialog +++ b/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/CancelEventDialog/CancelEventDialog.dialog @@ -29,7 +29,7 @@ "$designer": { "id": "itkIrW" }, - "condition": "$event.IsOrganizer", + "condition": "=$event.IsOrganizer", "actions": [ { "$kind": "Microsoft.EmitEvent", @@ -86,7 +86,7 @@ "$designer": { "id": "9dab8n" }, - "condition": "$confirmation", + "condition": "=$confirmation", "actions": [ { "$kind": "Microsoft.BeginDialog", @@ -159,7 +159,7 @@ "$designer": { "id": "wF3uxS" }, - "condition": "$confirmation", + "condition": "=$confirmation", "actions": [ { "$kind": "Microsoft.BeginDialog", diff --git a/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/CreateEventDialog/CreateEventDialog.dialog b/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/CreateEventDialog/CreateEventDialog.dialog index d14fee964e..9c23300365 100644 --- a/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/CreateEventDialog/CreateEventDialog.dialog +++ b/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/CreateEventDialog/CreateEventDialog.dialog @@ -117,7 +117,7 @@ "$designer": { "id": "QBgXJe" }, - "condition": "turn.addLocation", + "condition": "=turn.addLocation", "actions": [ { "$kind": "Microsoft.EmitEvent", @@ -501,7 +501,7 @@ "$designer": { "id": "MGvqYl" }, - "condition": "not(exists($options.dateTime))", + "condition": "=not(exists($options.dateTime))", "actions": [ { "$kind": "Microsoft.DateTimeInput", @@ -969,7 +969,7 @@ "$designer": { "id": "m2E2Qw" }, - "condition": "turn.createConfirmResult", + "condition": "=turn.createConfirmResult", "actions": [ { "$kind": "Microsoft.BeginDialog", @@ -994,7 +994,7 @@ "$designer": { "id": "yt4PWR" }, - "condition": "exists($createEventResult)", + "condition": "=exists($createEventResult)", "actions": [ { "$kind": "Microsoft.SendActivity", diff --git a/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/GetContactsDialog/GetContactsDialog.dialog b/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/GetContactsDialog/GetContactsDialog.dialog index 3032637b73..9e733cb2b8 100644 --- a/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/GetContactsDialog/GetContactsDialog.dialog +++ b/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/GetContactsDialog/GetContactsDialog.dialog @@ -110,7 +110,7 @@ "allowLoop": false } ], - "condition": "not(exists(#Skip))" + "condition": "=not(exists(#Skip))" } ] }, @@ -144,7 +144,7 @@ "$designer": { "id": "pNZ1RI" }, - "condition": "not(exists($emailArray)) && not(exists($contactArray))", + "condition": "=not(exists($emailArray)) && not(exists($contactArray))", "actions": [ { "$kind": "Microsoft.TextInput", diff --git a/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/GetEventsDialog/GetEventsDialog.dialog b/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/GetEventsDialog/GetEventsDialog.dialog index 4b9cdb9ea3..5069755117 100644 --- a/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/GetEventsDialog/GetEventsDialog.dialog +++ b/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/GetEventsDialog/GetEventsDialog.dialog @@ -42,7 +42,7 @@ "$designer": { "id": "80CHa6" }, - "condition": "$parameters.eventId != null", + "condition": "=$parameters.eventId != null", "elseActions": [ { "$kind": "Microsoft.EmitEvent", @@ -73,7 +73,7 @@ "$designer": { "id": "1Zhz3U" }, - "condition": "count($events) > 0", + "condition": "=count($events) > 0", "elseActions": [ { "$kind": "Microsoft.EmitEvent", @@ -95,7 +95,7 @@ } ], "elseActions": [], - "condition": "$doSelection" + "condition": "=$doSelection" }, { "$kind": "Microsoft.EndDialog", @@ -167,7 +167,7 @@ "$designer": { "id": "1cNXeh" }, - "condition": "count(where(flatten($parameters), p, exists(p))) == 0", + "condition": "=count(where(flatten($parameters), p, exists(p))) == 0", "actions": [ { "$kind": "Microsoft.TextInput", @@ -219,7 +219,7 @@ "$designer": { "id": "nfaMkj" }, - "condition": "not(exists(@@contact)) && not(exists(@@email)) && not(exists(@subject)) && not(exists($options.start)) && not(exists($options.end))", + "condition": "=not(exists(@@contact)) && not(exists(@@email)) && not(exists(@subject)) && not(exists($options.start)) && not(exists($options.end))", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -250,7 +250,7 @@ "$designer": { "id": "YB34jG" }, - "condition": "not(exists($parameters.start))", + "condition": "=not(exists($parameters.start))", "actions": [ { "$kind": "Microsoft.SetProperties", @@ -390,7 +390,7 @@ "$designer": { "id": "KmSBRT" }, - "condition": "count($events) == 1", + "condition": "=count($events) == 1", "elseActions": [ { "$kind": "Microsoft.SetProperties", @@ -494,7 +494,7 @@ "$designer": { "id": "DM5U3G" }, - "condition": "$turnCount < 2", + "condition": "=$turnCount < 2", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -572,7 +572,7 @@ "$designer": { "id": "DG1RAS" }, - "condition": "turn.getSchedule", + "condition": "=turn.getSchedule", "actions": [ { "$kind": "Microsoft.DeleteProperty", diff --git a/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/ListDialog/ListDialog.dialog b/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/ListDialog/ListDialog.dialog index b379d20d4a..9d51498f72 100644 --- a/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/ListDialog/ListDialog.dialog +++ b/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/ListDialog/ListDialog.dialog @@ -36,7 +36,7 @@ "$designer": { "id": "NbCgE7" }, - "condition": "$doSelection", + "condition": "=$doSelection", "actions": [ { "$kind": "Microsoft.ChoiceInput", @@ -72,7 +72,7 @@ "$designer": { "id": "lIowZt" }, - "condition": "$selectedIndex != null", + "condition": "=$selectedIndex != null", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -239,7 +239,7 @@ "$designer": { "id": "P1awzy" }, - "condition": "$pageIndex * $pageSize < count($items)", + "condition": "=$pageIndex * $pageSize < count($items)", "actions": [ { "$kind": "Microsoft.SetProperties", @@ -347,7 +347,7 @@ "$designer": { "id": "UVQphx" }, - "condition": "$pageIndex >= 0", + "condition": "=$pageIndex >= 0", "actions": [ { "$kind": "Microsoft.SetProperties", diff --git a/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/ResolveDateTimeDialog/ResolveDateTimeDialog.dialog b/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/ResolveDateTimeDialog/ResolveDateTimeDialog.dialog index c1d4474048..3cd50b95d5 100644 --- a/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/ResolveDateTimeDialog/ResolveDateTimeDialog.dialog +++ b/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/ResolveDateTimeDialog/ResolveDateTimeDialog.dialog @@ -77,7 +77,7 @@ "$designer": { "id": "vwdsTV" }, - "condition": "toLower($foreach.value.text) == \"my day\" || $foreach.value.typeName == \"datetimeV2.set\"", + "condition": "=toLower($foreach.value.text) == \"my day\" || $foreach.value.typeName == \"datetimeV2.set\"", "actions": [ { "$kind": "Microsoft.ContinueLoop", @@ -130,7 +130,7 @@ "$designer": { "id": "wUbrlv" }, - "condition": "count($foreach.value.Resolution.values) == 1", + "condition": "=count($foreach.value.Resolution.values) == 1", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -298,7 +298,7 @@ "$designer": { "id": "IQInq1" }, - "condition": "$minDate != null && ticks(formatDateTime($foreach.value.value)) < ticks(formatDateTime(date($minDate)))", + "condition": "=$minDate != null && ticks(formatDateTime($foreach.value.value)) < ticks(formatDateTime(date($minDate)))", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -325,7 +325,7 @@ "$designer": { "id": "Xv3qc4" }, - "condition": "$foreach.skip != true", + "condition": "=$foreach.skip != true", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -353,14 +353,14 @@ "$designer": { "id": "Kxsxdt" }, - "condition": "$choices != null", + "condition": "=$choices != null", "actions": [ { "$kind": "Microsoft.IfCondition", "$designer": { "id": "rxH6X0" }, - "condition": "count($choices) == 1", + "condition": "=count($choices) == 1", "elseActions": [ { "$kind": "Microsoft.ChoiceInput", @@ -449,7 +449,7 @@ "$designer": { "id": "4nSPCc" }, - "condition": "$minDate != null && ticks(formatDateTime($foreach.value.value)) < ticks(formatDateTime($minDate))", + "condition": "=$minDate != null && ticks(formatDateTime($foreach.value.value)) < ticks(formatDateTime($minDate))", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -476,7 +476,7 @@ "$designer": { "id": "bYsQ7q" }, - "condition": "$foreach.skip != true", + "condition": "=$foreach.skip != true", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -504,14 +504,14 @@ "$designer": { "id": "OqJa6A" }, - "condition": "$choices != null", + "condition": "=$choices != null", "actions": [ { "$kind": "Microsoft.IfCondition", "$designer": { "id": "QhjFD1" }, - "condition": "count($choices) == 1", + "condition": "=count($choices) == 1", "elseActions": [ { "$kind": "Microsoft.ChoiceInput", diff --git a/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/RespondToEventDialog/RespondToEventDialog.dialog b/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/RespondToEventDialog/RespondToEventDialog.dialog index 6d2f99b861..ac2d820972 100644 --- a/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/RespondToEventDialog/RespondToEventDialog.dialog +++ b/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/RespondToEventDialog/RespondToEventDialog.dialog @@ -92,7 +92,7 @@ "$designer": { "id": "Jhz67U" }, - "condition": "$event.isOrganizer", + "condition": "=$event.isOrganizer", "actions": [ { "$kind": "Microsoft.SendActivity", @@ -164,7 +164,7 @@ "$designer": { "id": "0I6DX5" }, - "condition": "$event.isOrganizer", + "condition": "=$event.isOrganizer", "actions": [ { "$kind": "Microsoft.SendActivity", @@ -241,7 +241,7 @@ "$designer": { "id": "1elpcm" }, - "condition": "$event.isOrganizer", + "condition": "=$event.isOrganizer", "actions": [ { "$kind": "Microsoft.SendActivity", diff --git a/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/ShowEventsDialog/ShowEventsDialog.dialog b/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/ShowEventsDialog/ShowEventsDialog.dialog index 4f9aa8a980..6d0aa9a815 100644 --- a/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/ShowEventsDialog/ShowEventsDialog.dialog +++ b/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/ShowEventsDialog/ShowEventsDialog.dialog @@ -57,7 +57,7 @@ "eventName": "ShowResults" } ], - "condition": "exists($options.eventId)", + "condition": "=exists($options.eventId)", "actions": [ { "$kind": "Microsoft.EmitEvent", @@ -98,7 +98,7 @@ ] } ], - "condition": "count(where(flatten($options), o, exists(o))) == 0" + "condition": "=count(where(flatten($options), o, exists(o))) == 0" }, { "$kind": "Microsoft.IfCondition", @@ -112,7 +112,7 @@ "$designer": { "id": "ZDxmgI" }, - "condition": "not(exists($options.subject)) && not(exists($options.contactArray)) && not(exists($options.emailArray)) && not(exists($options.ordinal))", + "condition": "=not(exists($options.subject)) && not(exists($options.contactArray)) && not(exists($options.emailArray)) && not(exists($options.ordinal))", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -156,14 +156,14 @@ "$designer": { "id": "Xad3Vv" }, - "condition": "exists($options.subject) || exists($options.contactArray) || exists($options.emailArray) || exists($options.location) || exists($options.ordinal)", + "condition": "=exists($options.subject) || exists($options.contactArray) || exists($options.emailArray) || exists($options.location) || exists($options.ordinal)", "actions": [ { "$kind": "Microsoft.IfCondition", "$designer": { "id": "JGLah7" }, - "condition": "count($events) > 1", + "condition": "=count($events) > 1", "elseActions": [ { "$kind": "Microsoft.EmitEvent", @@ -266,7 +266,7 @@ "$designer": { "id": "cLApQW" }, - "condition": "count($events) > 0", + "condition": "=count($events) > 0", "actions": [ { "$kind": "Microsoft.SendActivity", diff --git a/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/UpdateEventDialog/UpdateEventDialog.dialog b/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/UpdateEventDialog/UpdateEventDialog.dialog index 8af4b0a63e..ea89a667c5 100644 --- a/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/UpdateEventDialog/UpdateEventDialog.dialog +++ b/generators/generator-bot-enterprise-calendar/generators/app/templates/dialogs/UpdateEventDialog/UpdateEventDialog.dialog @@ -298,7 +298,7 @@ "$designer": { "id": "M19ih4" }, - "condition": "turn.repeat", + "condition": "=turn.repeat", "actions": [ { "$kind": "Microsoft.DeleteProperties", @@ -518,7 +518,7 @@ "$designer": { "id": "h0lIzs" }, - "condition": "count(turn.removeAttendees) == 1", + "condition": "=count(turn.removeAttendees) == 1", "elseActions": [ { "$kind": "Microsoft.SetProperties", @@ -1172,7 +1172,7 @@ "$designer": { "id": "7VJVuF" }, - "condition": "$confirmUpdate", + "condition": "=$confirmUpdate", "actions": [ { "$kind": "Microsoft.BeginDialog", @@ -1196,7 +1196,7 @@ "$designer": { "id": "fhRoY7" }, - "condition": "$result.statusCode == \"OK\"", + "condition": "=$result.statusCode == \"OK\"", "actions": [ { "$kind": "Microsoft.SendActivity", diff --git a/generators/generator-bot-enterprise-people/generators/app/templates/botName.dialog b/generators/generator-bot-enterprise-people/generators/app/templates/botName.dialog index c391813b76..29cc056513 100644 --- a/generators/generator-bot-enterprise-people/generators/app/templates/botName.dialog +++ b/generators/generator-bot-enterprise-people/generators/app/templates/botName.dialog @@ -29,7 +29,7 @@ "$designer": { "id": "2Szxt3" }, - "condition": "= turn.activity.channelId == 'msteams' && turn.activity.conversation.conversationType != 'personal'", + "condition": "=turn.activity.channelId == 'msteams' && turn.activity.conversation.conversationType != 'personal'", "elseActions": [ { "$kind": "Microsoft.BeginDialog", @@ -626,7 +626,6 @@ ] } ], - "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/stable/Composer/packages/server/schemas/sdk.schema", "generator": "<%= botName %>.lg", "id": "<%= botName %>", "recognizer": "<%= botName %>.lu.qna" diff --git a/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/GetManagerDialog/GetManagerDialog.dialog.schema b/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/GetManagerDialog/GetManagerDialog.dialog.schema deleted file mode 100644 index 20c0b9ba43..0000000000 --- a/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/GetManagerDialog/GetManagerDialog.dialog.schema +++ /dev/null @@ -1,11 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema", - "$role": "implements(Microsoft.IDialog)", - "title": "GetManagerDialog", - "type": "object", - "properties": {}, - "$result": { - "type": "object", - "properties": {} - } -} \ No newline at end of file diff --git a/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/GetProfileDialog/GetProfileDialog.dialog b/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/GetProfileDialog/GetProfileDialog.dialog index 7559d2e258..201194c742 100644 --- a/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/GetProfileDialog/GetProfileDialog.dialog +++ b/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/GetProfileDialog/GetProfileDialog.dialog @@ -37,7 +37,7 @@ "$designer": { "id": "rqPdz8" }, - "condition": "= not(exists($UserIdFound))", + "condition": "=not(exists($UserIdFound))", "actions": [ { "$kind": "Microsoft.BeginDialog", @@ -84,7 +84,7 @@ "$designer": { "id": "hFpZL4" }, - "condition": "= exists($UserIdFound)", + "condition": "=exists($UserIdFound)", "actions": [ { "$kind": "Microsoft.Graph.User.GetUserProfile", diff --git a/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/GetProfileDialog/GetProfileDialog.dialog.schema b/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/GetProfileDialog/GetProfileDialog.dialog.schema deleted file mode 100644 index 4e884252bb..0000000000 --- a/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/GetProfileDialog/GetProfileDialog.dialog.schema +++ /dev/null @@ -1,51 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema", - "$role": "implements(Microsoft.IDialog)", - "title": "GetProfileDialog", - "type": "object", - "properties": { - "nameEntity": { - "description": "Name entity to search", - "$ref": "#/definitions/stringExpression", - "title": "Name Entity" - } - }, - "$result": { - "type": "object", - "properties": {} - }, - "definitions": { - "equalsExpression": { - "$role": "expression", - "type": "string", - "title": "Equals Expression", - "description": "Expression starting with =.", - "pattern": "^=.*\\S.*", - "examples": [ - "=user.name" - ] - }, - "stringExpression": { - "$role": "expression", - "title": "String or expression", - "description": "Interpolated string or expression to evaluate.", - "oneOf": [ - { - "type": "string", - "title": "String", - "description": "Interpolated string", - "pattern": "^(?!(=)).*", - "examples": [ - "Hello ${user.name}" - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=concat('x','y','z')" - ] - } - ] - } - } -} diff --git a/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/ListDialog/ListDialog.dialog b/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/ListDialog/ListDialog.dialog index bb39c34d3b..c9e6dfb44d 100644 --- a/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/ListDialog/ListDialog.dialog +++ b/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/ListDialog/ListDialog.dialog @@ -51,7 +51,7 @@ "$designer": { "id": "siTpSb" }, - "condition": "$autoChooseFirst && count(turn.Items) == 1", + "condition": "=$autoChooseFirst && count(turn.Items) == 1", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -110,7 +110,7 @@ "$designer": { "id": "lIowZt" }, - "condition": "turn.selectedIndex != null", + "condition": "=turn.selectedIndex != null", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -325,7 +325,7 @@ "$designer": { "id": "P1awzy" }, - "condition": "$pageIndex * $pageSize < $itemCount", + "condition": "=$pageIndex * $pageSize < $itemCount", "actions": [ { "$kind": "Microsoft.SetProperties", @@ -441,7 +441,7 @@ "$designer": { "id": "UVQphx" }, - "condition": "$pageIndex >= 0", + "condition": "=$pageIndex >= 0", "actions": [ { "$kind": "Microsoft.SetProperties", diff --git a/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/ResolveUserDialog/ResolveUserDialog.dialog.schema b/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/ResolveUserDialog/ResolveUserDialog.dialog.schema deleted file mode 100644 index e8d29d691f..0000000000 --- a/generators/generator-bot-enterprise-people/generators/app/templates/dialogs/ResolveUserDialog/ResolveUserDialog.dialog.schema +++ /dev/null @@ -1,51 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/schemas/component/component.schema", - "$role": "implements(Microsoft.IDialog)", - "title": "ResolveUserDialog", - "type": "object", - "properties": { - "UserIdFound": { - "title": "User Id Found", - "description": "Id of the user to look for", - "$ref": "#/definitions/stringExpression" - } - }, - "$result": { - "type": "object", - "properties": {} - }, - "definitions": { - "equalsExpression": { - "$role": "expression", - "type": "string", - "title": "Equals Expression", - "description": "Expression starting with =.", - "pattern": "^=.*\\S.*", - "examples": [ - "=user.name" - ] - }, - "stringExpression": { - "$role": "expression", - "title": "String or expression", - "description": "Interpolated string or expression to evaluate.", - "oneOf": [ - { - "type": "string", - "title": "String", - "description": "Interpolated string", - "pattern": "^(?!(=)).*", - "examples": [ - "Hello ${user.name}" - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=concat('x','y','z')" - ] - } - ] - } - } -} diff --git a/generators/generator-bot-template-generator/app/templates/generators/app/templates/emptyBot.dialog b/generators/generator-bot-template-generator/app/templates/generators/app/templates/emptyBot.dialog index a18ca53eec..0d5c560a73 100644 --- a/generators/generator-bot-template-generator/app/templates/generators/app/templates/emptyBot.dialog +++ b/generators/generator-bot-template-generator/app/templates/generators/app/templates/emptyBot.dialog @@ -28,7 +28,7 @@ "id": "641773", "name": "Branch: if/else" }, - "condition": "string(dialog.foreach.value.id) != string(turn.Activity.Recipient.id)", + "condition": "=string(dialog.foreach.value.id) != string(turn.Activity.Recipient.id)", "actions": [ { "$kind": "Microsoft.SendActivity", diff --git a/skills/declarative/Calendar/Calendar/Calendar.dialog b/skills/declarative/Calendar/Calendar/Calendar.dialog index 80b8a65275..e78d21968f 100644 --- a/skills/declarative/Calendar/Calendar/Calendar.dialog +++ b/skills/declarative/Calendar/Calendar/Calendar.dialog @@ -27,7 +27,7 @@ "$designer": { "id": "25rJrE" }, - "condition": "= turn.activity.channelId == 'msteams' && turn.activity.conversation.conversationType != 'personal'", + "condition": "=turn.activity.channelId == 'msteams' && turn.activity.conversation.conversationType != 'personal'", "elseActions": [ { "$kind": "Microsoft.BeginDialog", @@ -484,7 +484,7 @@ ] } ], - "condition": "not(exists($options.start))" + "condition": "=not(exists($options.start))" }, { "$kind": "Microsoft.BeginDialog", @@ -550,7 +550,7 @@ ] } ], - "condition": "not(exists($options.start))" + "condition": "=not(exists($options.start))" }, { "$kind": "Microsoft.BeginDialog", @@ -580,7 +580,7 @@ "$designer": { "id": "ijHFYq" }, - "condition": "count($availabilityList) > 0", + "condition": "=count($availabilityList) > 0", "actions": [ { "$kind": "Microsoft.SendActivity", @@ -1732,7 +1732,7 @@ "$designer": { "id": "7mDmi7" }, - "condition": "exists(@duration)", + "condition": "=exists(@duration)", "actions": [ { "$kind": "Microsoft.BeginDialog", @@ -1820,7 +1820,6 @@ "runOnce": true } ], - "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/stable/Composer/packages/server/schemas/sdk.schema", "generator": "Calendar.lg", "recognizer": "Calendar.lu.qna", "id": "Calendar" diff --git a/skills/declarative/Calendar/Calendar/dialogs/CancelEventDialog/CancelEventDialog.dialog b/skills/declarative/Calendar/Calendar/dialogs/CancelEventDialog/CancelEventDialog.dialog index 16ba486db1..02d750dd07 100644 --- a/skills/declarative/Calendar/Calendar/dialogs/CancelEventDialog/CancelEventDialog.dialog +++ b/skills/declarative/Calendar/Calendar/dialogs/CancelEventDialog/CancelEventDialog.dialog @@ -29,7 +29,7 @@ "$designer": { "id": "itkIrW" }, - "condition": "$event.IsOrganizer", + "condition": "=$event.IsOrganizer", "actions": [ { "$kind": "Microsoft.EmitEvent", @@ -86,7 +86,7 @@ "$designer": { "id": "9dab8n" }, - "condition": "$confirmation", + "condition": "=$confirmation", "actions": [ { "$kind": "Microsoft.BeginDialog", @@ -159,7 +159,7 @@ "$designer": { "id": "wF3uxS" }, - "condition": "$confirmation", + "condition": "=$confirmation", "actions": [ { "$kind": "Microsoft.BeginDialog", diff --git a/skills/declarative/Calendar/Calendar/dialogs/CreateEventDialog/CreateEventDialog.dialog b/skills/declarative/Calendar/Calendar/dialogs/CreateEventDialog/CreateEventDialog.dialog index d14fee964e..9c23300365 100644 --- a/skills/declarative/Calendar/Calendar/dialogs/CreateEventDialog/CreateEventDialog.dialog +++ b/skills/declarative/Calendar/Calendar/dialogs/CreateEventDialog/CreateEventDialog.dialog @@ -117,7 +117,7 @@ "$designer": { "id": "QBgXJe" }, - "condition": "turn.addLocation", + "condition": "=turn.addLocation", "actions": [ { "$kind": "Microsoft.EmitEvent", @@ -501,7 +501,7 @@ "$designer": { "id": "MGvqYl" }, - "condition": "not(exists($options.dateTime))", + "condition": "=not(exists($options.dateTime))", "actions": [ { "$kind": "Microsoft.DateTimeInput", @@ -969,7 +969,7 @@ "$designer": { "id": "m2E2Qw" }, - "condition": "turn.createConfirmResult", + "condition": "=turn.createConfirmResult", "actions": [ { "$kind": "Microsoft.BeginDialog", @@ -994,7 +994,7 @@ "$designer": { "id": "yt4PWR" }, - "condition": "exists($createEventResult)", + "condition": "=exists($createEventResult)", "actions": [ { "$kind": "Microsoft.SendActivity", diff --git a/skills/declarative/Calendar/Calendar/dialogs/GetContactsDialog/GetContactsDialog.dialog b/skills/declarative/Calendar/Calendar/dialogs/GetContactsDialog/GetContactsDialog.dialog index 3032637b73..9e733cb2b8 100644 --- a/skills/declarative/Calendar/Calendar/dialogs/GetContactsDialog/GetContactsDialog.dialog +++ b/skills/declarative/Calendar/Calendar/dialogs/GetContactsDialog/GetContactsDialog.dialog @@ -110,7 +110,7 @@ "allowLoop": false } ], - "condition": "not(exists(#Skip))" + "condition": "=not(exists(#Skip))" } ] }, @@ -144,7 +144,7 @@ "$designer": { "id": "pNZ1RI" }, - "condition": "not(exists($emailArray)) && not(exists($contactArray))", + "condition": "=not(exists($emailArray)) && not(exists($contactArray))", "actions": [ { "$kind": "Microsoft.TextInput", diff --git a/skills/declarative/Calendar/Calendar/dialogs/GetEventsDialog/GetEventsDialog.dialog b/skills/declarative/Calendar/Calendar/dialogs/GetEventsDialog/GetEventsDialog.dialog index 734fd9290f..c70b5238a3 100644 --- a/skills/declarative/Calendar/Calendar/dialogs/GetEventsDialog/GetEventsDialog.dialog +++ b/skills/declarative/Calendar/Calendar/dialogs/GetEventsDialog/GetEventsDialog.dialog @@ -42,7 +42,7 @@ "$designer": { "id": "80CHa6" }, - "condition": "$parameters.eventId != null", + "condition": "=$parameters.eventId != null", "elseActions": [ { "$kind": "Microsoft.EmitEvent", @@ -73,7 +73,7 @@ "$designer": { "id": "1Zhz3U" }, - "condition": "count($events) > 0", + "condition": "=count($events) > 0", "elseActions": [ { "$kind": "Microsoft.EmitEvent", @@ -167,7 +167,7 @@ "$designer": { "id": "1cNXeh" }, - "condition": "count(where(flatten($parameters), p, exists(p))) == 0", + "condition": "=count(where(flatten($parameters), p, exists(p))) == 0", "actions": [ { "$kind": "Microsoft.TextInput", @@ -219,7 +219,7 @@ "$designer": { "id": "nfaMkj" }, - "condition": "not(exists(@@contact)) && not(exists(@@email)) && not(exists(@subject)) && not(exists($options.start)) && not(exists($options.end))", + "condition": "=not(exists(@@contact)) && not(exists(@@email)) && not(exists(@subject)) && not(exists($options.start)) && not(exists($options.end))", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -250,7 +250,7 @@ "$designer": { "id": "YB34jG" }, - "condition": "not(exists($parameters.start))", + "condition": "=not(exists($parameters.start))", "actions": [ { "$kind": "Microsoft.SetProperties", @@ -390,7 +390,7 @@ "$designer": { "id": "KmSBRT" }, - "condition": "count($events) == 1", + "condition": "=count($events) == 1", "elseActions": [ { "$kind": "Microsoft.SetProperties", @@ -494,7 +494,7 @@ "$designer": { "id": "DM5U3G" }, - "condition": "$turnCount < 2", + "condition": "=$turnCount < 2", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -572,7 +572,7 @@ "$designer": { "id": "DG1RAS" }, - "condition": "turn.getSchedule", + "condition": "=turn.getSchedule", "actions": [ { "$kind": "Microsoft.DeleteProperty", diff --git a/skills/declarative/Calendar/Calendar/dialogs/ListDialog/ListDialog.dialog b/skills/declarative/Calendar/Calendar/dialogs/ListDialog/ListDialog.dialog index b379d20d4a..9d51498f72 100644 --- a/skills/declarative/Calendar/Calendar/dialogs/ListDialog/ListDialog.dialog +++ b/skills/declarative/Calendar/Calendar/dialogs/ListDialog/ListDialog.dialog @@ -36,7 +36,7 @@ "$designer": { "id": "NbCgE7" }, - "condition": "$doSelection", + "condition": "=$doSelection", "actions": [ { "$kind": "Microsoft.ChoiceInput", @@ -72,7 +72,7 @@ "$designer": { "id": "lIowZt" }, - "condition": "$selectedIndex != null", + "condition": "=$selectedIndex != null", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -239,7 +239,7 @@ "$designer": { "id": "P1awzy" }, - "condition": "$pageIndex * $pageSize < count($items)", + "condition": "=$pageIndex * $pageSize < count($items)", "actions": [ { "$kind": "Microsoft.SetProperties", @@ -347,7 +347,7 @@ "$designer": { "id": "UVQphx" }, - "condition": "$pageIndex >= 0", + "condition": "=$pageIndex >= 0", "actions": [ { "$kind": "Microsoft.SetProperties", diff --git a/skills/declarative/Calendar/Calendar/dialogs/ResolveDateTimeDialog/ResolveDateTimeDialog.dialog b/skills/declarative/Calendar/Calendar/dialogs/ResolveDateTimeDialog/ResolveDateTimeDialog.dialog index c1d4474048..3cd50b95d5 100644 --- a/skills/declarative/Calendar/Calendar/dialogs/ResolveDateTimeDialog/ResolveDateTimeDialog.dialog +++ b/skills/declarative/Calendar/Calendar/dialogs/ResolveDateTimeDialog/ResolveDateTimeDialog.dialog @@ -77,7 +77,7 @@ "$designer": { "id": "vwdsTV" }, - "condition": "toLower($foreach.value.text) == \"my day\" || $foreach.value.typeName == \"datetimeV2.set\"", + "condition": "=toLower($foreach.value.text) == \"my day\" || $foreach.value.typeName == \"datetimeV2.set\"", "actions": [ { "$kind": "Microsoft.ContinueLoop", @@ -130,7 +130,7 @@ "$designer": { "id": "wUbrlv" }, - "condition": "count($foreach.value.Resolution.values) == 1", + "condition": "=count($foreach.value.Resolution.values) == 1", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -298,7 +298,7 @@ "$designer": { "id": "IQInq1" }, - "condition": "$minDate != null && ticks(formatDateTime($foreach.value.value)) < ticks(formatDateTime(date($minDate)))", + "condition": "=$minDate != null && ticks(formatDateTime($foreach.value.value)) < ticks(formatDateTime(date($minDate)))", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -325,7 +325,7 @@ "$designer": { "id": "Xv3qc4" }, - "condition": "$foreach.skip != true", + "condition": "=$foreach.skip != true", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -353,14 +353,14 @@ "$designer": { "id": "Kxsxdt" }, - "condition": "$choices != null", + "condition": "=$choices != null", "actions": [ { "$kind": "Microsoft.IfCondition", "$designer": { "id": "rxH6X0" }, - "condition": "count($choices) == 1", + "condition": "=count($choices) == 1", "elseActions": [ { "$kind": "Microsoft.ChoiceInput", @@ -449,7 +449,7 @@ "$designer": { "id": "4nSPCc" }, - "condition": "$minDate != null && ticks(formatDateTime($foreach.value.value)) < ticks(formatDateTime($minDate))", + "condition": "=$minDate != null && ticks(formatDateTime($foreach.value.value)) < ticks(formatDateTime($minDate))", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -476,7 +476,7 @@ "$designer": { "id": "bYsQ7q" }, - "condition": "$foreach.skip != true", + "condition": "=$foreach.skip != true", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -504,14 +504,14 @@ "$designer": { "id": "OqJa6A" }, - "condition": "$choices != null", + "condition": "=$choices != null", "actions": [ { "$kind": "Microsoft.IfCondition", "$designer": { "id": "QhjFD1" }, - "condition": "count($choices) == 1", + "condition": "=count($choices) == 1", "elseActions": [ { "$kind": "Microsoft.ChoiceInput", diff --git a/skills/declarative/Calendar/Calendar/dialogs/RespondToEventDialog/RespondToEventDialog.dialog b/skills/declarative/Calendar/Calendar/dialogs/RespondToEventDialog/RespondToEventDialog.dialog index 6d2f99b861..ac2d820972 100644 --- a/skills/declarative/Calendar/Calendar/dialogs/RespondToEventDialog/RespondToEventDialog.dialog +++ b/skills/declarative/Calendar/Calendar/dialogs/RespondToEventDialog/RespondToEventDialog.dialog @@ -92,7 +92,7 @@ "$designer": { "id": "Jhz67U" }, - "condition": "$event.isOrganizer", + "condition": "=$event.isOrganizer", "actions": [ { "$kind": "Microsoft.SendActivity", @@ -164,7 +164,7 @@ "$designer": { "id": "0I6DX5" }, - "condition": "$event.isOrganizer", + "condition": "=$event.isOrganizer", "actions": [ { "$kind": "Microsoft.SendActivity", @@ -241,7 +241,7 @@ "$designer": { "id": "1elpcm" }, - "condition": "$event.isOrganizer", + "condition": "=$event.isOrganizer", "actions": [ { "$kind": "Microsoft.SendActivity", diff --git a/skills/declarative/Calendar/Calendar/dialogs/ShowEventsDialog/ShowEventsDialog.dialog b/skills/declarative/Calendar/Calendar/dialogs/ShowEventsDialog/ShowEventsDialog.dialog index 4f9aa8a980..6d0aa9a815 100644 --- a/skills/declarative/Calendar/Calendar/dialogs/ShowEventsDialog/ShowEventsDialog.dialog +++ b/skills/declarative/Calendar/Calendar/dialogs/ShowEventsDialog/ShowEventsDialog.dialog @@ -57,7 +57,7 @@ "eventName": "ShowResults" } ], - "condition": "exists($options.eventId)", + "condition": "=exists($options.eventId)", "actions": [ { "$kind": "Microsoft.EmitEvent", @@ -98,7 +98,7 @@ ] } ], - "condition": "count(where(flatten($options), o, exists(o))) == 0" + "condition": "=count(where(flatten($options), o, exists(o))) == 0" }, { "$kind": "Microsoft.IfCondition", @@ -112,7 +112,7 @@ "$designer": { "id": "ZDxmgI" }, - "condition": "not(exists($options.subject)) && not(exists($options.contactArray)) && not(exists($options.emailArray)) && not(exists($options.ordinal))", + "condition": "=not(exists($options.subject)) && not(exists($options.contactArray)) && not(exists($options.emailArray)) && not(exists($options.ordinal))", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -156,14 +156,14 @@ "$designer": { "id": "Xad3Vv" }, - "condition": "exists($options.subject) || exists($options.contactArray) || exists($options.emailArray) || exists($options.location) || exists($options.ordinal)", + "condition": "=exists($options.subject) || exists($options.contactArray) || exists($options.emailArray) || exists($options.location) || exists($options.ordinal)", "actions": [ { "$kind": "Microsoft.IfCondition", "$designer": { "id": "JGLah7" }, - "condition": "count($events) > 1", + "condition": "=count($events) > 1", "elseActions": [ { "$kind": "Microsoft.EmitEvent", @@ -266,7 +266,7 @@ "$designer": { "id": "cLApQW" }, - "condition": "count($events) > 0", + "condition": "=count($events) > 0", "actions": [ { "$kind": "Microsoft.SendActivity", diff --git a/skills/declarative/Calendar/Calendar/dialogs/UpdateEventDialog/UpdateEventDialog.dialog b/skills/declarative/Calendar/Calendar/dialogs/UpdateEventDialog/UpdateEventDialog.dialog index 8af4b0a63e..ea89a667c5 100644 --- a/skills/declarative/Calendar/Calendar/dialogs/UpdateEventDialog/UpdateEventDialog.dialog +++ b/skills/declarative/Calendar/Calendar/dialogs/UpdateEventDialog/UpdateEventDialog.dialog @@ -298,7 +298,7 @@ "$designer": { "id": "M19ih4" }, - "condition": "turn.repeat", + "condition": "=turn.repeat", "actions": [ { "$kind": "Microsoft.DeleteProperties", @@ -518,7 +518,7 @@ "$designer": { "id": "h0lIzs" }, - "condition": "count(turn.removeAttendees) == 1", + "condition": "=count(turn.removeAttendees) == 1", "elseActions": [ { "$kind": "Microsoft.SetProperties", @@ -1172,7 +1172,7 @@ "$designer": { "id": "7VJVuF" }, - "condition": "$confirmUpdate", + "condition": "=$confirmUpdate", "actions": [ { "$kind": "Microsoft.BeginDialog", @@ -1196,7 +1196,7 @@ "$designer": { "id": "fhRoY7" }, - "condition": "$result.statusCode == \"OK\"", + "condition": "=$result.statusCode == \"OK\"", "actions": [ { "$kind": "Microsoft.SendActivity", diff --git a/skills/declarative/People/People/People.dialog b/skills/declarative/People/People/People.dialog index a69bc39d22..9f57d866fe 100644 --- a/skills/declarative/People/People/People.dialog +++ b/skills/declarative/People/People/People.dialog @@ -29,7 +29,7 @@ "$designer": { "id": "2Szxt3" }, - "condition": "= turn.activity.channelId == 'msteams' && turn.activity.conversation.conversationType != 'personal'", + "condition": "=turn.activity.channelId == 'msteams' && turn.activity.conversation.conversationType != 'personal'", "elseActions": [ { "$kind": "Microsoft.BeginDialog", @@ -626,7 +626,6 @@ ] } ], - "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/stable/Composer/packages/server/schemas/sdk.schema", "generator": "People.lg", "id": "People", "recognizer": "People.lu.qna" diff --git a/skills/declarative/People/People/dialogs/GetProfileDialog/GetProfileDialog.dialog b/skills/declarative/People/People/dialogs/GetProfileDialog/GetProfileDialog.dialog index 1331d3fb1f..3d9713b854 100644 --- a/skills/declarative/People/People/dialogs/GetProfileDialog/GetProfileDialog.dialog +++ b/skills/declarative/People/People/dialogs/GetProfileDialog/GetProfileDialog.dialog @@ -37,7 +37,7 @@ "$designer": { "id": "rqPdz8" }, - "condition": "= not(exists($UserIdFound))", + "condition": "=not(exists($UserIdFound))", "actions": [ { "$kind": "Microsoft.BeginDialog", @@ -84,7 +84,7 @@ "$designer": { "id": "hFpZL4" }, - "condition": "= exists($UserIdFound)", + "condition": "=exists($UserIdFound)", "actions": [ { "$kind": "Microsoft.Graph.User.GetUserProfile", diff --git a/skills/declarative/People/People/dialogs/ListDialog/ListDialog.dialog b/skills/declarative/People/People/dialogs/ListDialog/ListDialog.dialog index 648d9a23af..4dfa936e9e 100644 --- a/skills/declarative/People/People/dialogs/ListDialog/ListDialog.dialog +++ b/skills/declarative/People/People/dialogs/ListDialog/ListDialog.dialog @@ -51,7 +51,7 @@ "$designer": { "id": "siTpSb" }, - "condition": "$autoChooseFirst && count(turn.Items) == 1", + "condition": "=$autoChooseFirst && count(turn.Items) == 1", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -110,7 +110,7 @@ "$designer": { "id": "lIowZt" }, - "condition": "turn.selectedIndex != null", + "condition": "=turn.selectedIndex != null", "actions": [ { "$kind": "Microsoft.SetProperty", @@ -325,7 +325,7 @@ "$designer": { "id": "P1awzy" }, - "condition": "$pageIndex * $pageSize < $itemCount", + "condition": "=$pageIndex * $pageSize < $itemCount", "actions": [ { "$kind": "Microsoft.SetProperties", @@ -441,7 +441,7 @@ "$designer": { "id": "UVQphx" }, - "condition": "$pageIndex >= 0", + "condition": "=$pageIndex >= 0", "actions": [ { "$kind": "Microsoft.SetProperties", From 1ef640ba9290ee9f36b0dd824be743fab7d978dd Mon Sep 17 00:00:00 2001 From: Ryan Lengel Isgrig <43043272+ryanlengel@users.noreply.github.com> Date: Fri, 9 Jul 2021 11:12:39 -0700 Subject: [PATCH 35/39] chore: clarify yarn usage in pipelines & package with version name to aid deployment (#1202) * rename npm references to yarn and consolidate debug workspace steps * Rename addl npm to yarn refs * Add $(NpmPackageVersion) to yarn pack filename * add tgz suffix to yarn pack step * get name for yarn pack * remove invalid filename characters * Write package name and file name to output * clean up comments --- build/yaml/templates/component-template.yml | 16 +++++++------- build/yaml/templates/npm-versioning-steps.yml | 2 -- ...m-build-steps.yml => yarn-build-steps.yml} | 4 +--- ...ckage-steps.yml => yarn-package-steps.yml} | 21 ++++++++++++------- ...npm-test-steps.yml => yarn-test-steps.yml} | 8 +++---- 5 files changed, 28 insertions(+), 23 deletions(-) rename build/yaml/templates/{npm-build-steps.yml => yarn-build-steps.yml} (79%) rename build/yaml/templates/{npm-package-steps.yml => yarn-package-steps.yml} (63%) rename build/yaml/templates/{npm-test-steps.yml => yarn-test-steps.yml} (84%) diff --git a/build/yaml/templates/component-template.yml b/build/yaml/templates/component-template.yml index bd27ea611e..cce084d0c1 100644 --- a/build/yaml/templates/component-template.yml +++ b/build/yaml/templates/component-template.yml @@ -6,22 +6,24 @@ stages: condition: and(or(eq(variables.ComponentType, 'declarativeAsset'), eq(variables.ComponentType, 'generator'), and(eq(variables.ComponentType, 'codeExtension'), eq(variables.Language, 'js'))), not(eq(variables.PublishPackageArtifacts, true))) jobs: - job: job_build_npm - displayName: Build Node project + displayName: Build & Test Node project steps: - - template: npm-build-steps.yml - - template: npm-test-steps.yml + - template: yarn-build-steps.yml + - template: yarn-test-steps.yml + - template: debug-workspace-steps.yml - stage: stage_package_node - displayName: 'Node: Build, Version & Pack' + displayName: 'Node: Build, Test, Version & Pack' condition: and(or(eq(variables.ComponentType, 'declarativeAsset'), eq(variables.ComponentType, 'generator'), and(eq(variables.ComponentType, 'codeExtension'), eq(variables.Language, 'js'))), eq(variables.PublishPackageArtifacts, true)) jobs: - job: pack_npm displayName: 'Build & Pack Node project' steps: - - template: npm-build-steps.yml - - template: npm-test-steps.yml + - template: yarn-build-steps.yml + - template: yarn-test-steps.yml - template: npm-versioning-steps.yml - - template: npm-package-steps.yml + - template: yarn-package-steps.yml + - template: debug-workspace-steps.yml - stage: stage_build_nuget displayName: '.NET: Build & Test' diff --git a/build/yaml/templates/npm-versioning-steps.yml b/build/yaml/templates/npm-versioning-steps.yml index 9cb7e95fb1..a028d41658 100644 --- a/build/yaml/templates/npm-versioning-steps.yml +++ b/build/yaml/templates/npm-versioning-steps.yml @@ -61,5 +61,3 @@ steps: tags: | NpmPackageVersion: $(NpmPackageVersion) continueOnError: true - -- template: debug-workspace-steps.yml \ No newline at end of file diff --git a/build/yaml/templates/npm-build-steps.yml b/build/yaml/templates/yarn-build-steps.yml similarity index 79% rename from build/yaml/templates/npm-build-steps.yml rename to build/yaml/templates/yarn-build-steps.yml index b899f99240..6aa80571f1 100644 --- a/build/yaml/templates/npm-build-steps.yml +++ b/build/yaml/templates/yarn-build-steps.yml @@ -11,7 +11,5 @@ steps: - script: | yarn exec npm run --if-present build - displayName: 'Run build if it exists' + displayName: 'Run `yarn build` if it exists' workingDirectory: '$(WorkingDirectory)' - -- template: debug-workspace-steps.yml diff --git a/build/yaml/templates/npm-package-steps.yml b/build/yaml/templates/yarn-package-steps.yml similarity index 63% rename from build/yaml/templates/npm-package-steps.yml rename to build/yaml/templates/yarn-package-steps.yml index 4a0b9a71b8..4befed4fc2 100644 --- a/build/yaml/templates/npm-package-steps.yml +++ b/build/yaml/templates/yarn-package-steps.yml @@ -1,10 +1,19 @@ steps: - powershell: | if (Test-Path -Path package.json) { - # Get package.json ojbect + # Get package.json object $packageJson = Get-Content package.json; $packageJsonData = $packageJson | ConvertFrom-Json; + # Get name, strip invalid filename characters up to '/' and save as pipeline variable + $packageName = $packageJsonData.name + "Package name = $packageName"; + + $packageName = $packageName -replace ".*\/" + "Package file name = $packageName"; + + Write-Host "##vso[task.setvariable variable=NpmPackageFileName;]$packageName" + # Get variable passed from Setup stage $packageVersion = "$(NpmPackageVersion)"; @@ -21,22 +30,20 @@ steps: workingDirectory: '$(WorkingDirectory)' - script: | - yarn pack - displayName: 'Generate package' + yarn pack --filename $(NpmPackageFileName)-$(NpmPackageVersion).tgz + displayName: 'Run `yarn pack`' workingDirectory: '$(WorkingDirectory)' - task: CopyFiles@2 - displayName: 'Copy packages' + displayName: 'Copy packages to staging directory' inputs: SourceFolder: '$(WorkingDirectory)' Contents: '*.tgz' TargetFolder: '$(Build.ArtifactStagingDirectory)\npm' - task: PublishBuildArtifacts@1 - displayName: 'Publish the npm package' + displayName: 'Publish the npm package to artifacts' inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)\npm' ArtifactName: 'npm' publishLocation: 'Container' - -- template: debug-workspace-steps.yml diff --git a/build/yaml/templates/npm-test-steps.yml b/build/yaml/templates/yarn-test-steps.yml similarity index 84% rename from build/yaml/templates/npm-test-steps.yml rename to build/yaml/templates/yarn-test-steps.yml index 06c8a40a15..477fcbcca6 100644 --- a/build/yaml/templates/npm-test-steps.yml +++ b/build/yaml/templates/yarn-test-steps.yml @@ -9,18 +9,18 @@ steps: if (Test-Path -Path package.json) { $package = Get-Content package.json | ConvertFrom-Json $result = $package.scripts -and $package.scripts.test - Write-Host "##vso[task.setvariable variable=NpmRunTest;]$result" + Write-Host "##vso[task.setvariable variable=YarnRunTest;]$result" } else { Write-Host "Missing package.json" exit 1 } displayName: 'Determine if test script is present' - name: SetNpmRunTest + name: SetYarnRunTest workingDirectory: '$(WorkingDirectory)' - script: | yarn run test - condition: eq(variables.NpmRunTest, true) + condition: eq(variables.YarnRunTest, true) continueOnError: true - displayName: 'Run test if it exists' + displayName: 'Run `yarn test` if it exists' workingDirectory: '$(WorkingDirectory)' From 10e58800c96db2e33a076cc9a81dbd25c0c7f48d Mon Sep 17 00:00:00 2001 From: lauren-mills Date: Fri, 9 Jul 2021 14:34:08 -0700 Subject: [PATCH 36/39] Fixed broken links that open url in Composer modal (#1204) --- generators/command-line-instructions.md | 10 +++------- generators/generator-bot-adaptive/README.md | 5 +---- generators/generator-bot-core-assistant/README.md | 8 ++------ generators/generator-bot-core-language/README.md | 12 ++++-------- generators/generator-bot-core-qna/README.md | 8 ++------ generators/generator-bot-empty/README.md | 6 +----- .../generator-bot-enterprise-assistant/README.md | 7 ++----- .../generator-bot-enterprise-calendar/README.md | 8 ++------ generators/generator-bot-enterprise-people/README.md | 7 ++----- .../generator-bot-template-generator/README.md | 12 ++---------- 10 files changed, 21 insertions(+), 62 deletions(-) diff --git a/generators/command-line-instructions.md b/generators/command-line-instructions.md index 0a1b3a60f4..d760a1ff67 100644 --- a/generators/command-line-instructions.md +++ b/generators/command-line-instructions.md @@ -1,6 +1,6 @@ # Command line instructions -Our templates can also be used from the command-line. First, install [Yeoman][yeoman] using [npm][npm] (we assume you have pre-installed [node.js][nodejs]): +Our templates can also be used from the command-line. First, install [Yeoman](https://yeoman.io) using [npm](https://npmjs.com) (we assume you have pre-installed [node.js](https://nodejs.org/)): ```bash npm install -g yo @@ -17,13 +17,13 @@ Next, identify the template you would like to use from the table below: | [Enterprise People Bot](/generator-bot-enterprise-people) | [@microsoft/generator-bot-enterprise-people](https://www.npmjs.com/package/@microsoft/generator-bot-enterprise-people) | [![npm version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-enterprise-people.svg)](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-enterprise-people) | dotnet | webapp, functions | | [Adaptive](/generator-bot-adaptive) | [@microsoft/generator-bot-adaptive](https://www.npmjs.com/package/@microsoft/generator-bot-adaptive) | [![npm version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-adaptive.svg)](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-adaptive) | dotnet, js | webapp, functions | -Once you have identified the template you would like to use, install it using [npm][npm]. For example, to install the Empty Bot template: +Once you have identified the template you would like to use, install it using [npm](https://npmjs.com). For example, to install the Empty Bot template: ```bash npm install -g @microsoft/generator-bot-empty ``` -Finally, generate your new project using [Yeoman][yeoman], taking note of the following: +Finally, generate your new project using [Yeoman](https://yeoman.io), taking note of the following: - Remove `generator` from the package name, e.g. `@microsoft/generator-bot-empty` becomes `@microsoft/bot-empty`. - `--platform` and `--integration` match one of the listed values from template's platforms and integrations. @@ -33,7 +33,3 @@ Finally, generate your new project using [Yeoman][yeoman], taking note of the fo ```bash yo @microsoft/bot-empty '{BOT_NAME}' --platform '{dotnet|js}' --integration '{webapp|functions}' ``` - -[yeoman]: https://yeoman.io -[npm]: https://npmjs.com -[nodejs]: https://nodejs.org/ diff --git a/generators/generator-bot-adaptive/README.md b/generators/generator-bot-adaptive/README.md index 0a2b5e5ba9..18c3126a23 100644 --- a/generators/generator-bot-adaptive/README.md +++ b/generators/generator-bot-adaptive/README.md @@ -1,4 +1,4 @@ -# @microsoft/generator-bot-adaptive [![NPM version][npm-image]][npm-url] +# @microsoft/generator-bot-adaptive [![NPM version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-adaptive.svg)](https://www.npmjs.com/package/@microsoft/generator-bot-adaptive) This generator is for creating an Azure Bot Framework bot using the Adaptive Dialog stack. This generator is designed to be used as a base for other more purpose-specific generators, and is responsible for scaffolding: @@ -28,6 +28,3 @@ This template can also be installed from the [command line](https://github.com/m ## License [MIT License](https://github.com/microsoft/botframework-components/blob/main/LICENSE) - -[npm-image]: https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-adaptive.svg -[npm-url]: https://www.npmjs.com/package/@microsoft/generator-bot-adaptive \ No newline at end of file diff --git a/generators/generator-bot-core-assistant/README.md b/generators/generator-bot-core-assistant/README.md index c8164eb085..fa9b311d1e 100644 --- a/generators/generator-bot-core-assistant/README.md +++ b/generators/generator-bot-core-assistant/README.md @@ -1,4 +1,4 @@ -# @microsoft/generator-bot-core-assistant [![NPM version][npm-image]][npm-url] +# @microsoft/generator-bot-core-assistant [![NPM version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-core-assistant.svg)](https://www.npmjs.com/package/@microsoft/generator-bot-core-assistant) A bot with Azure Language Understanding (LUIS) and common trigger phrases used to direct the conversation flow and help customers accomplish basic tasks. @@ -20,7 +20,7 @@ A bot with Azure Language Understanding (LUIS) and common trigger phrases used t ### Required Azure resources -- [Azure Language Understanding (LUIS)][luis], or another recognizer of your choice +- [Azure Language Understanding (LUIS)](https://docs.microsoft.com/en-us/azure/cognitive-services/luis/what-is-luis), or another recognizer of your choice - [Azure QnA Maker](https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/overview/overview) - A storage solution for persistent state storage like Azure Cosmos DB @@ -31,7 +31,3 @@ A bot with Azure Language Understanding (LUIS) and common trigger phrases used t ### License [MIT License](https://github.com/microsoft/botframework-components/blob/main/LICENSE) - -[luis]: https://docs.microsoft.com/en-us/azure/cognitive-services/luis/what-is-luis -[npm-image]: https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-core-assistant.svg -[npm-url]: https://www.npmjs.com/package/@microsoft/generator-bot-core-assistant \ No newline at end of file diff --git a/generators/generator-bot-core-language/README.md b/generators/generator-bot-core-language/README.md index ec96ca5fd3..3ab1cba06b 100644 --- a/generators/generator-bot-core-language/README.md +++ b/generators/generator-bot-core-language/README.md @@ -1,10 +1,10 @@ -# @microsoft/generator-bot-core-language [![NPM version][npm-image]][npm-url] +# @microsoft/generator-bot-core-language [![NPM version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-core-language.svg)](https://www.npmjs.com/package/@microsoft/generator-bot-core-language) A simple bot with Azure Language Understanding (LUIS) and common trigger phrases used to direct the conversation flow. ### Recommended use -- Create a simple conversational bot with Azure Language Understanding ([LUIS][luis]) +- Create a simple conversational bot with Azure Language Understanding ([LUIS](https://docs.microsoft.com/en-us/azure/cognitive-services/luis/what-is-luis)) - Customize and extend example dialogs, bot logic, language understanding and bot responses - Extend your bot with [Azure Bot Framework components](https://aka.ms/ComponentTemplateDocumentation) @@ -14,11 +14,11 @@ A simple bot with Azure Language Understanding (LUIS) and common trigger phrases - Asking for help - Responding to unknown language requests (unknown intents) - Cancelling a dialog -- Use Azure Language Understanding Service (LUIS) for natural language processing +- Use Azure Language Understanding Service ([LUIS](https://docs.microsoft.com/en-us/azure/cognitive-services/luis/what-is-luis)) for natural language processing ### Required Azure resources -- [Azure Language Understanding (LUIS)][luis], or another recognizer of your choice +- [Azure Language Understanding (LUIS)](https://docs.microsoft.com/en-us/azure/cognitive-services/luis/what-is-luis), or another recognizer of your choice - A storage solution for persistent state storage like Azure Cosmos DB ### Supported languages @@ -28,7 +28,3 @@ A simple bot with Azure Language Understanding (LUIS) and common trigger phrases ### License [MIT License](https://github.com/microsoft/botframework-components/blob/main/LICENSE) - -[luis]: https://docs.microsoft.com/en-us/azure/cognitive-services/luis/what-is-luis -[npm-image]: https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-core-language.svg -[npm-url]: https://www.npmjs.com/package/@microsoft/generator-bot-core-language diff --git a/generators/generator-bot-core-qna/README.md b/generators/generator-bot-core-qna/README.md index 5dd28d5854..3af6b3ed55 100644 --- a/generators/generator-bot-core-qna/README.md +++ b/generators/generator-bot-core-qna/README.md @@ -1,4 +1,4 @@ -# @microsoft/generator-bot-core-qna [![NPM version][npm-image]][npm-url] +# @microsoft/generator-bot-core-qna [![NPM version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-core-qna.svg)](https://www.npmjs.com/package/@microsoft/generator-bot-core-qna) A simple question-and-answer bot with Azure QnA Maker. @@ -14,7 +14,7 @@ A simple question-and-answer bot with Azure QnA Maker. ### Required Azure resources -- [Azure Language Understanding (LUIS)][luis], or another recognizer of your choice +- [Azure Language Understanding (LUIS)](https://docs.microsoft.com/en-us/azure/cognitive-services/luis/what-is-luis), or another recognizer of your choice - [Azure QnA Maker](https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/overview/overview) ### Supported languages @@ -24,7 +24,3 @@ A simple question-and-answer bot with Azure QnA Maker. ### License [MIT License](https://github.com/microsoft/botframework-components/blob/main/LICENSE) - -[luis]: https://docs.microsoft.com/en-us/azure/cognitive-services/luis/what-is-luis -[npm-image]: https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-core-qna.svg -[npm-url]: https://www.npmjs.com/package/@microsoft/generator-bot-core-qna diff --git a/generators/generator-bot-empty/README.md b/generators/generator-bot-empty/README.md index 1d70a2c074..69459c6934 100644 --- a/generators/generator-bot-empty/README.md +++ b/generators/generator-bot-empty/README.md @@ -1,4 +1,4 @@ -# @microsoft/generator-bot-empty [![NPM version][npm-image]][npm-url] +# @microsoft/generator-bot-empty [![NPM version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-empty.svg)](https://www.npmjs.com/package/@microsoft/generator-bot-empty) A simple bot with a root dialog and greeting dialog. @@ -22,7 +22,3 @@ A simple bot with a root dialog and greeting dialog. ### License [MIT License](https://github.com/microsoft/botframework-components/blob/main/LICENSE) - -[luis]: https://docs.microsoft.com/en-us/azure/cognitive-services/luis/what-is-luis -[npm-image]: https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-empty.svg -[npm-url]: https://www.npmjs.com/package/@microsoft/generator-bot-empty diff --git a/generators/generator-bot-enterprise-assistant/README.md b/generators/generator-bot-enterprise-assistant/README.md index 4623bca93d..22ef0d379d 100644 --- a/generators/generator-bot-enterprise-assistant/README.md +++ b/generators/generator-bot-enterprise-assistant/README.md @@ -1,4 +1,4 @@ -# @microsoft/generator-bot-enterprise-assistant [![NPM version][npm-image]][npm-url] +# @microsoft/generator-bot-enterprise-assistant [![NPM version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-enterprise-assistant.svg)](https://www.npmjs.com/package/@microsoft/generator-bot-enterprise-assistant) A bot with Azure Language Understanding (LUIS), Enterprise Calendar skill, Enterprise People skill and common trigger phrases used to direct the conversation flow to help customers accomplish common business tasks. [Learn more](https://aka.ms/EnterpriseAssistant) @@ -39,7 +39,7 @@ The Enterprise Assistant Bot uses packages to extend its capabilities. [Learn mo - People.Read.All - User.ReadBasic.All - User.Read.All -- [Azure Language Understanding (LUIS)][luis], or another recognizer of your choice +- [Azure Language Understanding (LUIS)](https://docs.microsoft.com/en-us/azure/cognitive-services/luis/what-is-luis), or another recognizer of your choice - [Azure QnA Maker](https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/overview/overview) - A storage solution for persistent state storage like Azure Cosmos DB @@ -51,6 +51,3 @@ The Enterprise Assistant Bot uses packages to extend its capabilities. [Learn mo [MIT License](https://github.com/microsoft/botframework-components/blob/main/LICENSE) -[luis]: https://docs.microsoft.com/en-us/azure/cognitive-services/luis/what-is-luis -[npm-image]: https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-enterprise-assistant.svg -[npm-url]: https://www.npmjs.com/package/@microsoft/generator-bot-enterprise-assistant diff --git a/generators/generator-bot-enterprise-calendar/README.md b/generators/generator-bot-enterprise-calendar/README.md index b6b5581863..d87120e963 100644 --- a/generators/generator-bot-enterprise-calendar/README.md +++ b/generators/generator-bot-enterprise-calendar/README.md @@ -1,4 +1,4 @@ -# @microsoft/generator-bot-enterprise-calendar [![NPM version][npm-image]][npm-url] +# @microsoft/generator-bot-enterprise-calendar [![NPM version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-enterprise-calendar.svg)](https://www.npmjs.com/package/@microsoft/generator-bot-enterprise-calendar) This bot project was created using the [Enterprise Calendar Bot](https://aka.ms/EnterpriseCalendarBot) template. You **must complete the configuration steps outlined below for your bot to function.** @@ -24,7 +24,7 @@ The Enterprise Calendar Bot uses packages to extend its capabilities. [Learn mor - Contacts.Read - People.Read - User.ReadBasic.All -- [Azure Language Understanding (LUIS)][luis], or another recognizer of your choice +- [Azure Language Understanding (LUIS)](https://docs.microsoft.com/en-us/azure/cognitive-services/luis/what-is-luis), or another recognizer of your choice ### Supported languages @@ -33,7 +33,3 @@ The Enterprise Calendar Bot uses packages to extend its capabilities. [Learn mor ### License [MIT License](https://github.com/microsoft/botframework-components/blob/main/LICENSE) - -[luis]: https://docs.microsoft.com/en-us/azure/cognitive-services/luis/what-is-luis -[npm-image]: https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-enterprise-calendar.svg -[npm-url]: https://www.npmjs.com/package/@microsoft/generator-bot-enterprise-calendar diff --git a/generators/generator-bot-enterprise-people/README.md b/generators/generator-bot-enterprise-people/README.md index 2f76a38120..ade1381168 100644 --- a/generators/generator-bot-enterprise-people/README.md +++ b/generators/generator-bot-enterprise-people/README.md @@ -1,4 +1,4 @@ -# @microsoft/generator-bot-enterprise-people [![NPM version][npm-image]][npm-url] +# @microsoft/generator-bot-enterprise-people [![NPM version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-enterprise-people.svg)](https://www.npmjs.com/package/@microsoft/generator-bot-enterprise-people) A bot with the ability to interact with Office 365 users in an Azure Active Directory using Microsoft Graph. [Learn more](https://aka.ms/EnterprisePeopleBot) @@ -26,7 +26,7 @@ The Enterprise People Bot uses packages to extend its capabilities. [Learn more] - People.Read.All - User.ReadBasic.All - User.Read.All -- [Azure Language Understanding (LUIS)][luis], or another recognizer of your choice +- [Azure Language Understanding (LUIS)](https://docs.microsoft.com/en-us/azure/cognitive-services/luis/what-is-luis), or another recognizer of your choice ### Supported languages @@ -36,6 +36,3 @@ The Enterprise People Bot uses packages to extend its capabilities. [Learn more] [MIT License](https://github.com/microsoft/botframework-components/blob/main/LICENSE) -[luis]: https://docs.microsoft.com/en-us/azure/cognitive-services/luis/what-is-luis -[npm-image]: https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-enterprise-people.svg -[npm-url]: https://www.npmjs.com/package/@microsoft/generator-bot-enterprise-people diff --git a/generators/generator-bot-template-generator/README.md b/generators/generator-bot-template-generator/README.md index 29dce62c2b..3139342db6 100644 --- a/generators/generator-bot-template-generator/README.md +++ b/generators/generator-bot-template-generator/README.md @@ -1,4 +1,4 @@ -# bot-template-generator [![NPM version][npm-image]][npm-url] +# bot-template-generator [![NPM version](https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-adaptive.svg)](https://www.npmjs.com/package/@microsoft/generator-bot-adaptive) Yeoman generator generating a bot template generator for use with the Microsoft Bot Framework. @@ -80,13 +80,5 @@ After making the change, run `yarn build:server` followed by `yarn start:dev`. Y ## License -[MIT License][license] - -[composer]: https://github.com/microsoft/botframework-composer -[yeoman]: https://yeoman.io -[npm]: https://npmjs.com -[nodejs]: https://nodejs.org/ -[license]: https://github.com/microsoft/botframework-components/blob/main/LICENSE -[npm-image]: https://badge.fury.io/js/%40microsoft%2Fgenerator-bot-adaptive.svg -[npm-url]: https://www.npmjs.com/package/@microsoft/generator-bot-adaptive +[MIT License](https://github.com/microsoft/botframework-components/blob/main/LICENSE) From 11998f6639a48dd7e3bd698144851bc0eaf85720 Mon Sep 17 00:00:00 2001 From: Ryan Lengel Isgrig <43043272+ryanlengel@users.noreply.github.com> Date: Mon, 12 Jul 2021 15:32:28 -0700 Subject: [PATCH 37/39] build: Add Components functional test scenarios to daily pipelines (#1210) * Update runTestScenarios.yml with Components environment * enable only components bots * provide components env to consinfugerConsumers * remove skill refs from configure consumers and add components bots to test app settings * switch to new location of csproj * add components bots to echo tests * Remove unused skills tests * Remove skill bot refs from simple test * Revert "Remove skill bot refs from simple test" This reverts commit 9a545b77e96452569d7d14b1df9155d59f16e747. * Add EmptyBot json/transcript, remove functions bots, consolidate nuget refs * rename singleturn to emptybot * rename singleturn to empty bot and remove functions bots in pipelines * remove skillbots from functional tests * remove assertion of locale * clean up speak properties to what is generated from generator * Rename to ComponentsFunctionalTests * rename addl skillfunctionaltests refs to components * add readme to transcript conveter * Update README.md --- ...ests.sln => ComponentsFunctionalTests.sln} | 6 +- .../Libraries/TranscriptConverter/README.md | 18 + .../TranscriptConverter.csproj | 2 +- .../Common/HostBot.cs | 18 + .../Common/TestCase.cs | 4 +- .../Common/TestCaseBuilder.cs | 30 +- .../Common/TestCaseDataObject.cs | 2 +- .../ComponentsFunctionalTests.csproj} | 0 .../EmptyBot/EmptyBotTests.cs} | 46 +- .../EmptyBot/TestScripts/EmptyBot.json | 61 ++ .../EmptyBot/TestScripts/EmptyBot.transcript | 185 ++++ .../README.md | 0 .../ScriptTestBase.cs | 4 +- .../appsettings.json | 21 + .../xunit.runner.json | 0 .../CardActions/CardActionsTests.cs | 120 --- .../CardActions/TestScripts/Animation.json | 58 -- .../TestScripts/Animation.transcript | 165 ---- .../CardActions/TestScripts/Audio.json | 58 -- .../CardActions/TestScripts/Audio.transcript | 165 ---- .../CardActions/TestScripts/BotAction.json | 77 -- .../TestScripts/BotAction.transcript | 216 ----- .../CardActions/TestScripts/Carousel.json | 76 -- .../TestScripts/Carousel.transcript | 213 ----- .../CardActions/TestScripts/Hero.json | 62 -- .../CardActions/TestScripts/Hero.transcript | 173 ---- .../CardActions/TestScripts/List.json | 76 -- .../CardActions/TestScripts/List.transcript | 213 ----- .../CardActions/TestScripts/O365.json | 181 ---- .../CardActions/TestScripts/O365.transcript | 407 --------- .../CardActions/TestScripts/Receipt.json | 72 -- .../TestScripts/Receipt.transcript | 197 ----- .../CardActions/TestScripts/SignIn.json | 60 -- .../CardActions/TestScripts/SignIn.transcript | 166 ---- .../CardActions/TestScripts/SubmitAction.json | 64 -- .../TestScripts/SubmitAction.transcript | 179 ---- .../CardActions/TestScripts/TaskModule.json | 62 -- .../TestScripts/TaskModule.transcript | 178 ---- .../CardActions/TestScripts/Thumbnail.json | 62 -- .../TestScripts/Thumbnail.transcript | 173 ---- .../CardActions/TestScripts/Video.json | 58 -- .../CardActions/TestScripts/Video.transcript | 164 ---- .../TestScripts/WaterfallGreeting.json | 148 ---- .../TestScripts/WaterfallGreeting.transcript | 435 ---------- .../SkillFunctionalTests/Common/HostBot.cs | 53 -- .../Common/SkillBotNames.cs | 22 - .../FileUpload/FileUploadTests.cs | 110 --- .../FileUpload/Media/TestFile.txt | 1 - .../FileUpload/TestScripts/FileUpload1.json | 148 ---- .../TestScripts/FileUpload1.transcript | 434 ---------- .../FileUpload/TestScripts/FileUpload2.json | 59 -- .../TestScripts/FileUpload2.transcript | 138 --- .../TestScripts/MessageWithAttachment.json | 281 ------- .../MessageWithAttachment.transcript | 789 ------------------ .../ProactiveMessages/ProactiveTests.cs | 121 --- .../TestScripts/ProactiveEnd.json | 47 -- .../TestScripts/ProactiveEnd.transcript | 91 -- .../TestScripts/ProactiveStart.json | 137 --- .../TestScripts/ProactiveStart.transcript | 408 --------- .../SignIn/SignInTests.cs | 111 --- .../SignIn/TestScripts/SignIn1.json | 112 --- .../SignIn/TestScripts/SignIn1.transcript | 360 -------- .../SignIn/TestScripts/SignIn2.json | 77 -- .../SignIn/TestScripts/signin2.transcript | 124 --- .../SingleTurn/EchoTests.cs | 104 --- .../TestScripts/EchoMultiSkill.json | 163 ---- .../TestScripts/EchoMultiSkill.transcript | 480 ----------- .../SkillFunctionalTests/Sso/SsoTests.cs | 80 -- .../SkillFunctionalTests/appsettings.json | 45 - .../TranscriptTestRunnerTests.csproj | 7 +- .../build/yaml/functionalTestsBuild-CI.yml | 4 +- .../yaml/testScenarios/configureConsumers.yml | 193 +---- .../build/yaml/testScenarios/runScenario.yml | 8 +- .../yaml/testScenarios/runTestScenarios.yml | 40 +- 74 files changed, 370 insertions(+), 9052 deletions(-) rename tests/functional/{SkillFunctionalTests.sln => ComponentsFunctionalTests.sln} (93%) create mode 100644 tests/functional/Libraries/TranscriptConverter/README.md create mode 100644 tests/functional/Tests/ComponentsFunctionalTests/Common/HostBot.cs rename tests/functional/Tests/{SkillFunctionalTests => ComponentsFunctionalTests}/Common/TestCase.cs (83%) rename tests/functional/Tests/{SkillFunctionalTests => ComponentsFunctionalTests}/Common/TestCaseBuilder.cs (53%) rename tests/functional/Tests/{SkillFunctionalTests => ComponentsFunctionalTests}/Common/TestCaseDataObject.cs (98%) rename tests/functional/Tests/{SkillFunctionalTests/SkillFunctionalTests.csproj => ComponentsFunctionalTests/ComponentsFunctionalTests.csproj} (100%) rename tests/functional/Tests/{SkillFunctionalTests/MessageWithAttachment/MessageWithAttachmentTests.cs => ComponentsFunctionalTests/EmptyBot/EmptyBotTests.cs} (55%) create mode 100644 tests/functional/Tests/ComponentsFunctionalTests/EmptyBot/TestScripts/EmptyBot.json create mode 100644 tests/functional/Tests/ComponentsFunctionalTests/EmptyBot/TestScripts/EmptyBot.transcript rename tests/functional/Tests/{SkillFunctionalTests => ComponentsFunctionalTests}/README.md (100%) rename tests/functional/Tests/{SkillFunctionalTests => ComponentsFunctionalTests}/ScriptTestBase.cs (95%) create mode 100644 tests/functional/Tests/ComponentsFunctionalTests/appsettings.json rename tests/functional/Tests/{SkillFunctionalTests => ComponentsFunctionalTests}/xunit.runner.json (100%) delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/CardActionsTests.cs delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Animation.json delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Animation.transcript delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Audio.json delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Audio.transcript delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/BotAction.json delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/BotAction.transcript delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Carousel.json delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Carousel.transcript delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Hero.json delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Hero.transcript delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/List.json delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/List.transcript delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/O365.json delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/O365.transcript delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Receipt.json delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Receipt.transcript delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SignIn.json delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SignIn.transcript delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SubmitAction.json delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SubmitAction.transcript delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/TaskModule.json delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/TaskModule.transcript delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Thumbnail.json delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Thumbnail.transcript delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Video.json delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Video.transcript delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/WaterfallGreeting.json delete mode 100644 tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/WaterfallGreeting.transcript delete mode 100644 tests/functional/Tests/SkillFunctionalTests/Common/HostBot.cs delete mode 100644 tests/functional/Tests/SkillFunctionalTests/Common/SkillBotNames.cs delete mode 100644 tests/functional/Tests/SkillFunctionalTests/FileUpload/FileUploadTests.cs delete mode 100644 tests/functional/Tests/SkillFunctionalTests/FileUpload/Media/TestFile.txt delete mode 100644 tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload1.json delete mode 100644 tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload1.transcript delete mode 100644 tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload2.json delete mode 100644 tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload2.transcript delete mode 100644 tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/TestScripts/MessageWithAttachment.json delete mode 100644 tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/TestScripts/MessageWithAttachment.transcript delete mode 100644 tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/ProactiveTests.cs delete mode 100644 tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveEnd.json delete mode 100644 tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveEnd.transcript delete mode 100644 tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveStart.json delete mode 100644 tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveStart.transcript delete mode 100644 tests/functional/Tests/SkillFunctionalTests/SignIn/SignInTests.cs delete mode 100644 tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn1.json delete mode 100644 tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn1.transcript delete mode 100644 tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn2.json delete mode 100644 tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/signin2.transcript delete mode 100644 tests/functional/Tests/SkillFunctionalTests/SingleTurn/EchoTests.cs delete mode 100644 tests/functional/Tests/SkillFunctionalTests/SingleTurn/TestScripts/EchoMultiSkill.json delete mode 100644 tests/functional/Tests/SkillFunctionalTests/SingleTurn/TestScripts/EchoMultiSkill.transcript delete mode 100644 tests/functional/Tests/SkillFunctionalTests/Sso/SsoTests.cs delete mode 100644 tests/functional/Tests/SkillFunctionalTests/appsettings.json diff --git a/tests/functional/SkillFunctionalTests.sln b/tests/functional/ComponentsFunctionalTests.sln similarity index 93% rename from tests/functional/SkillFunctionalTests.sln rename to tests/functional/ComponentsFunctionalTests.sln index 5c48eeb48d..c8633abe69 100644 --- a/tests/functional/SkillFunctionalTests.sln +++ b/tests/functional/ComponentsFunctionalTests.sln @@ -1,9 +1,9 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29806.167 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31423.177 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkillFunctionalTests", "Tests\SkillFunctionalTests\SkillFunctionalTests.csproj", "{DE0231D9-A9BE-4D4C-A830-7ADCF28EA5D6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComponentsFunctionalTests", "Tests\ComponentsFunctionalTests\ComponentsFunctionalTests.csproj", "{DE0231D9-A9BE-4D4C-A830-7ADCF28EA5D6}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TranscriptTestRunner", "Libraries\TranscriptTestRunner\TranscriptTestRunner.csproj", "{65C3A2E0-FDC5-4132-9980-3BAE230E9F2E}" EndProject diff --git a/tests/functional/Libraries/TranscriptConverter/README.md b/tests/functional/Libraries/TranscriptConverter/README.md new file mode 100644 index 0000000000..6e80bb16b0 --- /dev/null +++ b/tests/functional/Libraries/TranscriptConverter/README.md @@ -0,0 +1,18 @@ +# Transcript Converter + +## User Step-by-step Guide +This step-by-step guide shows how to run the TranscriptConverter project to convert a transcript to a test script to be used in TranscriptTestRunner. + +## Generate a test script +1- Create a transcript file, follow [these steps](https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-debug-transcript?view=azure-bot-service-4.0#creatingstoring-a-bot-transcript-file). + +2- Build the TranscriptConverter project and navigate to its executable. + +3- The command to convert a transcript to a new test script can be executed like this: +```PS +btc convert "path-to-source-transcript" +``` +You can convert a transcript to an existing test script like this: +```PS +btc convert "path-to-source-transcript" "path-to-target-test-script" +``` diff --git a/tests/functional/Libraries/TranscriptConverter/TranscriptConverter.csproj b/tests/functional/Libraries/TranscriptConverter/TranscriptConverter.csproj index aa4817caff..544dd18be4 100644 --- a/tests/functional/Libraries/TranscriptConverter/TranscriptConverter.csproj +++ b/tests/functional/Libraries/TranscriptConverter/TranscriptConverter.csproj @@ -8,7 +8,7 @@ - + diff --git a/tests/functional/Tests/ComponentsFunctionalTests/Common/HostBot.cs b/tests/functional/Tests/ComponentsFunctionalTests/Common/HostBot.cs new file mode 100644 index 0000000000..9d18a41068 --- /dev/null +++ b/tests/functional/Tests/ComponentsFunctionalTests/Common/HostBot.cs @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +namespace ComponentsFunctionalTests.Common +{ + public enum HostBot + { + /// + /// Empty bot implemented using DotNet and Web App. + /// + EmptyBotDotNetWebApp, + + /// + /// Empty bot implemented using JS and Web App. + /// + EmptyBotJSWebApp + } +} diff --git a/tests/functional/Tests/SkillFunctionalTests/Common/TestCase.cs b/tests/functional/Tests/ComponentsFunctionalTests/Common/TestCase.cs similarity index 83% rename from tests/functional/Tests/SkillFunctionalTests/Common/TestCase.cs rename to tests/functional/Tests/ComponentsFunctionalTests/Common/TestCase.cs index 990135daca..505cbdda8f 100644 --- a/tests/functional/Tests/SkillFunctionalTests/Common/TestCase.cs +++ b/tests/functional/Tests/ComponentsFunctionalTests/Common/TestCase.cs @@ -4,7 +4,7 @@ using Microsoft.Bot.Connector; using TranscriptTestRunner; -namespace SkillFunctionalTests.Common +namespace ComponentsFunctionalTests.Common { public class TestCase { @@ -16,8 +16,6 @@ public class TestCase public HostBot HostBot { get; set; } - public string TargetSkill { get; set; } - public string Script { get; set; } } } diff --git a/tests/functional/Tests/SkillFunctionalTests/Common/TestCaseBuilder.cs b/tests/functional/Tests/ComponentsFunctionalTests/Common/TestCaseBuilder.cs similarity index 53% rename from tests/functional/Tests/SkillFunctionalTests/Common/TestCaseBuilder.cs rename to tests/functional/Tests/ComponentsFunctionalTests/Common/TestCaseBuilder.cs index 16b422d5f7..0eb7f6c8cd 100644 --- a/tests/functional/Tests/SkillFunctionalTests/Common/TestCaseBuilder.cs +++ b/tests/functional/Tests/ComponentsFunctionalTests/Common/TestCaseBuilder.cs @@ -5,11 +5,11 @@ using System.Collections.Generic; using TranscriptTestRunner; -namespace SkillFunctionalTests.Common +namespace ComponentsFunctionalTests.Common { public class TestCaseBuilder { - public IEnumerable BuildTestCases(List channelIds, List deliveryModes, List hostBots, List targetSkills, List scripts, Func shouldExclude = null) + public IEnumerable BuildTestCases(List channelIds, List deliveryModes, List hostBots, List scripts, Func shouldExclude = null) { var testCases = new List(); var count = 1; @@ -21,23 +21,19 @@ public IEnumerable BuildTestCases(List channelIds, List TestCases() { var channelIds = new List { Channels.Directline }; - var deliverModes = new List + var deliveryModes = new List { - DeliveryModes.Normal, - DeliveryModes.ExpectReplies + DeliveryModes.Normal }; var hostBots = new List { - HostBot.WaterfallHostBotDotNet, - HostBot.WaterfallHostBotJS, - HostBot.WaterfallHostBotPython, - - // TODO: Enable this when the port to composer is ready - //HostBot.ComposerHostBotDotNet - }; - - var targetSkills = new List - { - SkillBotNames.WaterfallSkillBotDotNet, - SkillBotNames.WaterfallSkillBotJS, - SkillBotNames.WaterfallSkillBotPython, - - // TODO: Enable this when the port to composer is ready - //SkillBotNames.ComposerSkillBotDotNet + HostBot.EmptyBotDotNetWebApp, + HostBot.EmptyBotJSWebApp }; - var scripts = new List - { - "MessageWithAttachment.json", - }; + var scripts = new List { "EmptyBot.json" }; var testCaseBuilder = new TestCaseBuilder(); - var testCases = testCaseBuilder.BuildTestCases(channelIds, deliverModes, hostBots, targetSkills, scripts); + var testCases = testCaseBuilder.BuildTestCases(channelIds, deliveryModes, hostBots, scripts); foreach (var testCase in testCases) { yield return testCase; @@ -77,12 +59,12 @@ public async Task RunTestCases(TestCaseDataObject testData) Logger.LogInformation(JsonConvert.SerializeObject(testCase, Formatting.Indented)); var options = TestClientOptions[testCase.HostBot]; + var runner = new XUnitTestRunner(new TestClientFactory(testCase.ChannelId, options, Logger).GetTestClient(), TestRequestTimeout, Logger); var testParams = new Dictionary { - { "DeliveryMode", testCase.DeliveryMode }, - { "TargetSkill", testCase.TargetSkill } + { "DeliveryMode", testCase.DeliveryMode } }; await runner.RunTestAsync(Path.Combine(_testScriptsFolder, testCase.Script), testParams); diff --git a/tests/functional/Tests/ComponentsFunctionalTests/EmptyBot/TestScripts/EmptyBot.json b/tests/functional/Tests/ComponentsFunctionalTests/EmptyBot/TestScripts/EmptyBot.json new file mode 100644 index 0000000000..075dac0f34 --- /dev/null +++ b/tests/functional/Tests/ComponentsFunctionalTests/EmptyBot/TestScripts/EmptyBot.json @@ -0,0 +1,61 @@ +{ + "items": [ + { + "type": "conversationUpdate", + "role": "user" + }, + { + "type": "message", + "role": "bot", + "text": "Welcome to your bot.", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Welcome to your bot.'", + "speak == 'Welcome to your bot.'" + ] + }, + { + "type": "trace", + "role": "bot", + "assertions": [ + "type == 'trace'", + "from.role == 'bot'", + "recipient.role == 'user'", + "label == 'Bot State'", + "valueType == 'https://www.botframework.com/schemas/botState'", + "name == 'BotState'" + ] + }, + { + "type": "message", + "role": "user", + "text": "test" + }, + { + "type": "message", + "role": "bot", + "text": "Sorry, I didn't get that.", + "assertions": [ + "type == 'message'", + "from.role == 'bot'", + "recipient.role == 'user'", + "text == 'Sorry, I didn\\'t get that.'", + "speak == 'Sorry, I didn\\'t get that.'" + ] + }, + { + "type": "trace", + "role": "bot", + "assertions": [ + "type == 'trace'", + "from.role == 'bot'", + "recipient.role == 'user'", + "label == 'Bot State'", + "valueType == 'https://www.botframework.com/schemas/botState'", + "name == 'BotState'" + ] + } + ] +} \ No newline at end of file diff --git a/tests/functional/Tests/ComponentsFunctionalTests/EmptyBot/TestScripts/EmptyBot.transcript b/tests/functional/Tests/ComponentsFunctionalTests/EmptyBot/TestScripts/EmptyBot.transcript new file mode 100644 index 0000000000..32bbffd73f --- /dev/null +++ b/tests/functional/Tests/ComponentsFunctionalTests/EmptyBot/TestScripts/EmptyBot.transcript @@ -0,0 +1,185 @@ +[ + { + "type": "conversationUpdate", + "membersAdded": [ + { + "id": "272a5ad0-e0e2-11eb-be7b-51b3afea0a16", + "name": "Bot" + }, + { + "id": "59656570-bd23-4940-8d6a-a7e31b382509", + "name": "User" + } + ], + "membersRemoved": [], + "channelId": "emulator", + "conversation": { + "id": "273a6060-e0e2-11eb-8e13-71515b0ea9a4|livechat" + }, + "id": "2810c330-e0e2-11eb-8e13-71515b0ea9a4", + "localTimestamp": "2021-07-09T11:19:10-07:00", + "recipient": { + "id": "272a5ad0-e0e2-11eb-be7b-51b3afea0a16", + "name": "Bot", + "role": "bot" + }, + "timestamp": "2021-07-09T18:19:10.434Z", + "from": { + "id": "59656570-bd23-4940-8d6a-a7e31b382509", + "name": "User", + "role": "user" + }, + "locale": "en-us", + "serviceUrl": "https://6e74437635f6.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://6e74437635f6.ngrok.io", + "channelId": "emulator", + "from": { + "id": "272a5ad0-e0e2-11eb-be7b-51b3afea0a16", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "273a6060-e0e2-11eb-8e13-71515b0ea9a4|livechat" + }, + "recipient": { + "id": "59656570-bd23-4940-8d6a-a7e31b382509", + "role": "user" + }, + "locale": "en-us", + "text": "Welcome to your bot.", + "speak": "Welcome to your bot.", + "replyToId": "2810c330-e0e2-11eb-8e13-71515b0ea9a4", + "id": "2ace83a0-e0e2-11eb-8e13-71515b0ea9a4", + "localTimestamp": "2021-07-09T11:19:15-07:00", + "timestamp": "2021-07-09T18:19:15.034Z" + }, + { + "type": "trace", + "serviceUrl": "https://6e74437635f6.ngrok.io", + "channelId": "emulator", + "from": { + "id": "272a5ad0-e0e2-11eb-be7b-51b3afea0a16", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "273a6060-e0e2-11eb-8e13-71515b0ea9a4|livechat" + }, + "recipient": { + "id": "59656570-bd23-4940-8d6a-a7e31b382509", + "role": "user" + }, + "locale": "en-us", + "replyToId": "2810c330-e0e2-11eb-8e13-71515b0ea9a4", + "label": "Bot State", + "valueType": "https://www.botframework.com/schemas/botState", + "value": { + "conversation": { + "DialogState": { + "dialogStack": [] + } + }, + "user": {} + }, + "name": "BotState", + "id": "2aed2f30-e0e2-11eb-8e13-71515b0ea9a4", + "localTimestamp": "2021-07-09T11:19:15-07:00", + "timestamp": "2021-07-09T18:19:15.235Z" + }, + { + "channelData": { + "clientActivityID": "1625854763493y3zek13sgka", + "clientTimestamp": "2021-07-09T18:19:23.493Z" + }, + "text": "test", + "textFormat": "plain", + "type": "message", + "channelId": "emulator", + "from": { + "id": "59656570-bd23-4940-8d6a-a7e31b382509", + "name": "User", + "role": "user" + }, + "locale": "en-us", + "timestamp": "2021-07-09T18:19:23.520Z", + "entities": [ + { + "requiresBotState": true, + "supportsListening": true, + "supportsTts": true, + "type": "ClientCapabilities" + } + ], + "conversation": { + "id": "273a6060-e0e2-11eb-8e13-71515b0ea9a4|livechat" + }, + "id": "2fdd6000-e0e2-11eb-8e13-71515b0ea9a4", + "localTimestamp": "2021-07-09T11:19:23-07:00", + "recipient": { + "id": "272a5ad0-e0e2-11eb-be7b-51b3afea0a16", + "name": "Bot", + "role": "bot" + }, + "serviceUrl": "https://6e74437635f6.ngrok.io" + }, + { + "type": "message", + "serviceUrl": "https://6e74437635f6.ngrok.io", + "channelId": "emulator", + "from": { + "id": "272a5ad0-e0e2-11eb-be7b-51b3afea0a16", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "273a6060-e0e2-11eb-8e13-71515b0ea9a4|livechat" + }, + "recipient": { + "id": "59656570-bd23-4940-8d6a-a7e31b382509", + "role": "user" + }, + "locale": "en-us", + "text": "Sorry, I didn't get that.", + "speak": "Sorry, I didn't get that.", + "replyToId": "2fdd6000-e0e2-11eb-8e13-71515b0ea9a4", + "id": "3025dab0-e0e2-11eb-8e13-71515b0ea9a4", + "localTimestamp": "2021-07-09T11:19:23-07:00", + "timestamp": "2021-07-09T18:19:23.995Z" + }, + { + "type": "trace", + "serviceUrl": "https://6e74437635f6.ngrok.io", + "channelId": "emulator", + "from": { + "id": "272a5ad0-e0e2-11eb-be7b-51b3afea0a16", + "name": "Bot", + "role": "bot" + }, + "conversation": { + "id": "273a6060-e0e2-11eb-8e13-71515b0ea9a4|livechat" + }, + "recipient": { + "id": "59656570-bd23-4940-8d6a-a7e31b382509", + "role": "user" + }, + "locale": "en-us", + "replyToId": "2fdd6000-e0e2-11eb-8e13-71515b0ea9a4", + "label": "Bot State", + "valueType": "https://www.botframework.com/schemas/botState", + "value": { + "conversation": { + "DialogState": { + "dialogStack": [] + } + }, + "user": {} + }, + "name": "BotState", + "id": "303f7d30-e0e2-11eb-8e13-71515b0ea9a4", + "localTimestamp": "2021-07-09T11:19:24-07:00", + "timestamp": "2021-07-09T18:19:24.163Z" + } +] \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/README.md b/tests/functional/Tests/ComponentsFunctionalTests/README.md similarity index 100% rename from tests/functional/Tests/SkillFunctionalTests/README.md rename to tests/functional/Tests/ComponentsFunctionalTests/README.md diff --git a/tests/functional/Tests/SkillFunctionalTests/ScriptTestBase.cs b/tests/functional/Tests/ComponentsFunctionalTests/ScriptTestBase.cs similarity index 95% rename from tests/functional/Tests/SkillFunctionalTests/ScriptTestBase.cs rename to tests/functional/Tests/ComponentsFunctionalTests/ScriptTestBase.cs index 59ae89e379..1af1dac92c 100644 --- a/tests/functional/Tests/SkillFunctionalTests/ScriptTestBase.cs +++ b/tests/functional/Tests/ComponentsFunctionalTests/ScriptTestBase.cs @@ -3,13 +3,13 @@ using System.Collections.Generic; using System.IO; +using ComponentsFunctionalTests.Common; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; -using SkillFunctionalTests.Common; using TranscriptTestRunner.TestClients; using Xunit.Abstractions; -namespace SkillFunctionalTests +namespace ComponentsFunctionalTests { public class ScriptTestBase { diff --git a/tests/functional/Tests/ComponentsFunctionalTests/appsettings.json b/tests/functional/Tests/ComponentsFunctionalTests/appsettings.json new file mode 100644 index 0000000000..af1a042508 --- /dev/null +++ b/tests/functional/Tests/ComponentsFunctionalTests/appsettings.json @@ -0,0 +1,21 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Debug", + "Microsoft": "Warning" + } + }, + + "TestRequestTimeout": 180, + + "HostBotClientOptions": { + "EmptyBotDotNetWebApp": { + "BotId": "bfcfnemptybotdotnetwebapp", + "DirectLineSecret": "" + }, + "EmptyBotJSWebApp": { + "BotId": "bfcfnemptybotjswebapp", + "DirectLineSecret": "" + } + } +} diff --git a/tests/functional/Tests/SkillFunctionalTests/xunit.runner.json b/tests/functional/Tests/ComponentsFunctionalTests/xunit.runner.json similarity index 100% rename from tests/functional/Tests/SkillFunctionalTests/xunit.runner.json rename to tests/functional/Tests/ComponentsFunctionalTests/xunit.runner.json diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/CardActionsTests.cs b/tests/functional/Tests/SkillFunctionalTests/CardActions/CardActionsTests.cs deleted file mode 100644 index 25391c6fa0..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/CardActionsTests.cs +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Collections.Generic; -using System.IO; -using System.Threading.Tasks; -using Microsoft.Bot.Connector; -using Microsoft.Bot.Schema; -using Microsoft.Extensions.Logging; -using Newtonsoft.Json; -using SkillFunctionalTests.Common; -using TranscriptTestRunner; -using TranscriptTestRunner.XUnit; -using Xunit; -using Xunit.Abstractions; - -namespace SkillFunctionalTests.CardActions -{ - [Trait("TestCategory", "CardActions")] - public class CardActionsTests : ScriptTestBase - { - private readonly string _testScriptsFolder = Directory.GetCurrentDirectory() + @"/CardActions/TestScripts"; - - public CardActionsTests(ITestOutputHelper output) - : base(output) - { - } - - public static IEnumerable TestCases() - { - var channelIds = new List { Channels.Directline }; - - var deliverModes = new List - { - DeliveryModes.Normal, - DeliveryModes.ExpectReplies - }; - - var hostBots = new List - { - HostBot.WaterfallHostBotDotNet, - HostBot.WaterfallHostBotJS, - HostBot.WaterfallHostBotPython, - - // TODO: Enable this when the port to composer is ready - //HostBot.ComposerHostBotDotNet - }; - - var targetSkills = new List - { - SkillBotNames.WaterfallSkillBotDotNet, - SkillBotNames.WaterfallSkillBotJS, - SkillBotNames.WaterfallSkillBotPython, - - // TODO: Enable this when the port to composer is ready - //SkillBotNames.ComposerSkillBotDotNet - }; - - var scripts = new List - { - "BotAction.json", - "TaskModule.json", - "SubmitAction.json", - "Hero.json", - "Thumbnail.json", - "Receipt.json", - "SignIn.json", - "Carousel.json", - "List.json", - "O365.json", - "Animation.json", - "Audio.json", - "Video.json" - }; - - var testCaseBuilder = new TestCaseBuilder(); - - // This local function is used to exclude ExpectReplies, O365 and WaterfallSkillBotPython test cases - static bool ShouldExclude(TestCase testCase) - { - if (testCase.Script == "O365.json") - { - // BUG: O365 fails with ExpectReplies for WaterfallSkillBotPython (remove when https://github.com/microsoft/BotFramework-FunctionalTests/issues/328 is fixed). - if (testCase.TargetSkill == SkillBotNames.WaterfallSkillBotPython && testCase.DeliveryMode == DeliveryModes.ExpectReplies) - { - return true; - } - } - - return false; - } - - var testCases = testCaseBuilder.BuildTestCases(channelIds, deliverModes, hostBots, targetSkills, scripts, ShouldExclude); - foreach (var testCase in testCases) - { - yield return testCase; - } - } - - [Theory] - [MemberData(nameof(TestCases))] - public async Task RunTestCases(TestCaseDataObject testData) - { - var testCase = testData.GetObject(); - Logger.LogInformation(JsonConvert.SerializeObject(testCase, Formatting.Indented)); - - var options = TestClientOptions[testCase.HostBot]; - var runner = new XUnitTestRunner(new TestClientFactory(testCase.ChannelId, options, Logger).GetTestClient(), TestRequestTimeout, Logger); - - var testParams = new Dictionary - { - { "DeliveryMode", testCase.DeliveryMode }, - { "TargetSkill", testCase.TargetSkill } - }; - - await runner.RunTestAsync(Path.Combine(_testScriptsFolder, "WaterfallGreeting.json"), testParams); - await runner.RunTestAsync(Path.Combine(_testScriptsFolder, testCase.Script), testParams); - } - } -} diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Animation.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Animation.json deleted file mode 100644 index 237082091f..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Animation.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "items": [ - { - "type": "message", - "role": "user", - "text": "Animation" - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "attachmentLayout == 'list'", - "inputHint == 'acceptingInput'", - "attachments[0].contentType == 'application/vnd.microsoft.card.animation'", - "attachments[0].content.title == 'Animation Card'", - "attachments[0].content.autostart == True" - ] - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "speak == 'What card do you want?'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "end" - }, - { - "type": "message", - "role": "bot", - "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Animation.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Animation.transcript deleted file mode 100644 index a2c1586a72..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Animation.transcript +++ /dev/null @@ -1,165 +0,0 @@ -[ - { - "channelData": { - "clientActivityID": "1611839814734xukiykq7r6", - "clientTimestamp": "2021-01-28T13:16:54.734Z" - }, - "text": "Animation", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "04e743bc-b422-4dc5-8a8a-6d006bfc6661", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:16:54.799Z", - "conversation": { - "id": "063c4460-616b-11eb-881a-afe376da3863|livechat" - }, - "id": "1776d1f0-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:16:54-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "063c4460-616b-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "04e743bc-b422-4dc5-8a8a-6d006bfc6661", - "role": "user" - }, - "attachmentLayout": "list", - "locale": "", - "inputHint": "acceptingInput", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.animation", - "content": { - "title": "Animation Card", - "media": [ - { - "url": "https://media3.giphy.com/media/xT0xeJpnrWC4XWblEk/giphy.gif?cid=ecf05e47mye7k75sup6tcmadoom8p1q8u03a7g2p3f76upp9&rid=giphy.gif" - } - ], - "autostart": true - } - } - ], - "entities": [], - "replyToId": "1776d1f0-616b-11eb-b46e-c3c3213a748e", - "id": "183d0820-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:16:56-03:00", - "timestamp": "2021-01-28T13:16:56.097Z" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "063c4460-616b-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "04e743bc-b422-4dc5-8a8a-6d006bfc6661", - "role": "user" - }, - "locale": "", - "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", - "speak": "What card do you want?", - "inputHint": "expectingInput", - "attachments": [], - "entities": [], - "replyToId": "1776d1f0-616b-11eb-b46e-c3c3213a748e", - "id": "18699660-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:16:56-03:00", - "timestamp": "2021-01-28T13:16:56.390Z" - }, - { - "channelData": { - "clientActivityID": "16118398192100re8kcctazwj", - "clientTimestamp": "2021-01-28T13:16:59.210Z" - }, - "text": "end", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "04e743bc-b422-4dc5-8a8a-6d006bfc6661", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:16:59.271Z", - "conversation": { - "id": "063c4460-616b-11eb-881a-afe376da3863|livechat" - }, - "id": "1a213170-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:16:59-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "063c4460-616b-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "04e743bc-b422-4dc5-8a8a-6d006bfc6661", - "role": "user" - }, - "locale": "", - "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "1a213170-616b-11eb-b46e-c3c3213a748e", - "id": "1adc9230-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:17:00-03:00", - "timestamp": "2021-01-28T13:17:00.498Z" - } -] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Audio.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Audio.json deleted file mode 100644 index 2f7f16a576..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Audio.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "items": [ - { - "type": "message", - "role": "user", - "text": "Audio" - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "attachmentLayout == 'list'", - "inputHint == 'acceptingInput'", - "attachments[0].contentType == 'application/vnd.microsoft.card.audio'", - "attachments[0].content.title == 'Audio Card'", - "attachments[0].content.autoloop == True" - ] - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "speak == 'What card do you want?'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "end" - }, - { - "type": "message", - "role": "bot", - "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Audio.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Audio.transcript deleted file mode 100644 index 4b83bab546..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Audio.transcript +++ /dev/null @@ -1,165 +0,0 @@ -[ - { - "channelData": { - "clientActivityID": "1611839872412avts1ortbzo", - "clientTimestamp": "2021-01-28T13:17:52.412Z" - }, - "text": "Audio", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "e0681749-455e-4df6-ac1d-cce532da5262", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:17:52.463Z", - "conversation": { - "id": "2f090f90-616b-11eb-881a-afe376da3863|livechat" - }, - "id": "39d5a5f0-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:17:52-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "2f090f90-616b-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "e0681749-455e-4df6-ac1d-cce532da5262", - "role": "user" - }, - "attachmentLayout": "list", - "locale": "", - "inputHint": "acceptingInput", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.audio", - "content": { - "title": "Audio Card", - "media": [ - { - "url": "https://bffnwaterfallskillbotdotnet.azurewebsites.net/api/music" - } - ], - "autoloop": true - } - } - ], - "entities": [], - "replyToId": "39d5a5f0-616b-11eb-b46e-c3c3213a748e", - "id": "3a6c1990-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:17:53-03:00", - "timestamp": "2021-01-28T13:17:53.449Z" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "2f090f90-616b-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "e0681749-455e-4df6-ac1d-cce532da5262", - "role": "user" - }, - "locale": "", - "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", - "speak": "What card do you want?", - "inputHint": "expectingInput", - "attachments": [], - "entities": [], - "replyToId": "39d5a5f0-616b-11eb-b46e-c3c3213a748e", - "id": "3a98f5f0-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:17:53-03:00", - "timestamp": "2021-01-28T13:17:53.743Z" - }, - { - "channelData": { - "clientActivityID": "16118398766380tfc3r379ha", - "clientTimestamp": "2021-01-28T13:17:56.638Z" - }, - "text": "end", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "e0681749-455e-4df6-ac1d-cce532da5262", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:17:56.693Z", - "conversation": { - "id": "2f090f90-616b-11eb-881a-afe376da3863|livechat" - }, - "id": "3c5b3f60-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:17:56-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "2f090f90-616b-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "e0681749-455e-4df6-ac1d-cce532da5262", - "role": "user" - }, - "locale": "", - "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "3c5b3f60-616b-11eb-b46e-c3c3213a748e", - "id": "3cfcfda0-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:17:57-03:00", - "timestamp": "2021-01-28T13:17:57.754Z" - } -] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/BotAction.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/BotAction.json deleted file mode 100644 index f3b7f58912..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/BotAction.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "items": [ - { - "type": "message", - "role": "user", - "text": "AdaptiveCardBotAction" - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "attachmentLayout == 'list'", - "inputHint == 'acceptingInput'", - "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'", - "attachments[0].content.type == 'AdaptiveCard'", - "attachments[0].content.body[0].type == 'TextBlock'", - "attachments[0].content.body[0].text == 'Bot Builder actions'", - "attachments[0].content.actions[0].type == 'Action.Submit'", - "attachments[0].content.actions[0].data.msteams.type == 'imBack'", - "attachments[0].content.actions[0].data.msteams.value == 'text'", - "attachments[0].content.actions[0].title == 'imBack'", - "attachments[0].content.actions[1].type == 'Action.Submit'", - "attachments[0].content.actions[1].data.msteams.type == 'messageBack'", - "attachments[0].content.actions[1].data.msteams.value.key == 'value'", - "attachments[0].content.actions[1].title == 'message back'", - "attachments[0].content.actions[2].type == 'Action.Submit'", - "attachments[0].content.actions[2].data.msteams.type == 'messageBack'", - "attachments[0].content.actions[2].data.msteams.text == 'text received by bots'", - "attachments[0].content.actions[2].data.msteams.displayText == 'display text message back'", - "attachments[0].content.actions[2].data.msteams.value.key == 'value'", - "attachments[0].content.actions[2].title == 'message back local echo'", - "attachments[0].content.actions[3].type == 'Action.Submit'", - "attachments[0].content.actions[3].data.msteams.type == 'invoke'", - "attachments[0].content.actions[3].data.msteams.value.key == 'value'", - "attachments[0].content.actions[3].title == 'invoke'" - ] - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "speak == 'What card do you want?'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "end" - }, - { - "type": "message", - "role": "bot", - "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - } - ] -} diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/BotAction.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/BotAction.transcript deleted file mode 100644 index 089ea60de3..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/BotAction.transcript +++ /dev/null @@ -1,216 +0,0 @@ -[ - { - "channelData": { - "clientActivityID": "1611838440775fk6vbo5p5nw", - "clientTimestamp": "2021-01-28T12:54:00.775Z" - }, - "text": "AdaptiveCardBotAction", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T12:54:00.810Z", - "conversation": { - "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" - }, - "id": "e480bca0-6167-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T09:54:00-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", - "role": "user" - }, - "attachmentLayout": "list", - "locale": "", - "inputHint": "acceptingInput", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.adaptive", - "content": { - "type": "AdaptiveCard", - "version": "1.2", - "body": [ - { - "type": "TextBlock", - "text": "Bot Builder actions" - } - ], - "actions": [ - { - "type": "Action.Submit", - "data": { - "msteams": { - "type": "imBack", - "value": "text" - } - }, - "title": "imBack" - }, - { - "type": "Action.Submit", - "data": { - "msteams": { - "type": "messageBack", - "value": { - "key": "value" - } - } - }, - "title": "message back" - }, - { - "type": "Action.Submit", - "data": { - "msteams": { - "type": "messageBack", - "text": "text received by bots", - "displayText": "display text message back", - "value": { - "key": "value" - } - } - }, - "title": "message back local echo" - }, - { - "type": "Action.Submit", - "data": { - "msteams": { - "type": "invoke", - "value": { - "key": "value" - } - } - }, - "title": "invoke" - } - ] - } - } - ], - "entities": [], - "replyToId": "e480bca0-6167-11eb-b46e-c3c3213a748e", - "id": "e59fc130-6167-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T09:54:02-03:00", - "timestamp": "2021-01-28T12:54:02.691Z" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", - "role": "user" - }, - "locale": "", - "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", - "speak": "What card do you want?", - "inputHint": "expectingInput", - "attachments": [], - "entities": [], - "replyToId": "e480bca0-6167-11eb-b46e-c3c3213a748e", - "id": "e5cb3e00-6167-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T09:54:02-03:00", - "timestamp": "2021-01-28T12:54:02.976Z" - }, - { - "channelData": { - "clientActivityID": "1611838581343cy25vk7jmo9", - "clientTimestamp": "2021-01-28T12:56:21.344Z" - }, - "text": "end", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T12:56:21.384Z", - "conversation": { - "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" - }, - "id": "384aa080-6168-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T09:56:21-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", - "role": "user" - }, - "locale": "", - "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "384aa080-6168-11eb-b46e-c3c3213a748e", - "id": "3948af90-6168-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T09:56:23-03:00", - "timestamp": "2021-01-28T12:56:23.049Z" - } -] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Carousel.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Carousel.json deleted file mode 100644 index 1bf2d60fcd..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Carousel.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "items": [ - { - "type": "message", - "role": "user", - "text": "Carousel" - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "attachmentLayout == 'carousel'", - "inputHint == 'acceptingInput'", - "attachments[0].contentType == 'application/vnd.microsoft.card.hero'", - "attachments[0].content.title == 'BotFramework Hero Card'", - "attachments[0].content.subtitle == 'Microsoft Bot Framework'", - "attachments[0].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'", - "attachments[0].content.buttons[0].type == 'openUrl'", - "attachments[0].content.buttons[0].title == 'Get Started'", - "attachments[0].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'", - "attachments[1].contentType == 'application/vnd.microsoft.card.hero'", - "attachments[1].content.title == 'BotFramework Hero Card'", - "attachments[1].content.subtitle == 'Microsoft Bot Framework'", - "attachments[1].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'", - "attachments[1].content.buttons[0].type == 'openUrl'", - "attachments[1].content.buttons[0].title == 'Get Started'", - "attachments[1].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'", - "attachments[2].contentType == 'application/vnd.microsoft.card.hero'", - "attachments[2].content.title == 'BotFramework Hero Card'", - "attachments[2].content.subtitle == 'Microsoft Bot Framework'", - "attachments[2].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'", - "attachments[2].content.buttons[0].type == 'openUrl'", - "attachments[2].content.buttons[0].title == 'Get Started'", - "attachments[2].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'" - ] - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "speak == 'What card do you want?'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "end" - }, - { - "type": "message", - "role": "bot", - "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Carousel.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Carousel.transcript deleted file mode 100644 index 1a9de47a96..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Carousel.transcript +++ /dev/null @@ -1,213 +0,0 @@ -[ - { - "channelData": { - "clientActivityID": "1611839522508zaakfbpcfw", - "clientTimestamp": "2021-01-28T13:12:02.508Z" - }, - "text": "Carousel", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "43ff7934-8228-49a8-9925-6d469752f983", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:12:02.562Z", - "conversation": { - "id": "60a4e8e0-616a-11eb-881a-afe376da3863|livechat" - }, - "id": "6946fe20-616a-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:12:02-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "60a4e8e0-616a-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "43ff7934-8228-49a8-9925-6d469752f983", - "role": "user" - }, - "attachmentLayout": "carousel", - "locale": "", - "inputHint": "acceptingInput", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.hero", - "content": { - "title": "BotFramework Hero Card", - "subtitle": "Microsoft Bot Framework", - "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.", - "images": [ - { - "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg" - } - ], - "buttons": [ - { - "type": "openUrl", - "title": "Get Started", - "value": "https://docs.microsoft.com/bot-framework" - } - ] - } - }, - { - "contentType": "application/vnd.microsoft.card.hero", - "content": { - "title": "BotFramework Hero Card", - "subtitle": "Microsoft Bot Framework", - "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.", - "images": [ - { - "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg" - } - ], - "buttons": [ - { - "type": "openUrl", - "title": "Get Started", - "value": "https://docs.microsoft.com/bot-framework" - } - ] - } - }, - { - "contentType": "application/vnd.microsoft.card.hero", - "content": { - "title": "BotFramework Hero Card", - "subtitle": "Microsoft Bot Framework", - "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.", - "images": [ - { - "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg" - } - ], - "buttons": [ - { - "type": "openUrl", - "title": "Get Started", - "value": "https://docs.microsoft.com/bot-framework" - } - ] - } - } - ], - "entities": [], - "replyToId": "6946fe20-616a-11eb-b46e-c3c3213a748e", - "id": "69fedc70-616a-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:12:03-03:00", - "timestamp": "2021-01-28T13:12:03.767Z" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "60a4e8e0-616a-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "43ff7934-8228-49a8-9925-6d469752f983", - "role": "user" - }, - "locale": "", - "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", - "speak": "What card do you want?", - "inputHint": "expectingInput", - "attachments": [], - "entities": [], - "replyToId": "6946fe20-616a-11eb-b46e-c3c3213a748e", - "id": "6a2af580-616a-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:12:04-03:00", - "timestamp": "2021-01-28T13:12:04.056Z" - }, - { - "channelData": { - "clientActivityID": "1611839526614stj36f82vy", - "clientTimestamp": "2021-01-28T13:12:06.614Z" - }, - "text": "end", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "43ff7934-8228-49a8-9925-6d469752f983", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:12:06.671Z", - "conversation": { - "id": "60a4e8e0-616a-11eb-881a-afe376da3863|livechat" - }, - "id": "6bb9f9f0-616a-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:12:06-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "60a4e8e0-616a-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "43ff7934-8228-49a8-9925-6d469752f983", - "role": "user" - }, - "locale": "", - "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "6bb9f9f0-616a-11eb-b46e-c3c3213a748e", - "id": "6c559db0-616a-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:12:07-03:00", - "timestamp": "2021-01-28T13:12:07.691Z" - } -] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Hero.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Hero.json deleted file mode 100644 index d913abad6a..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Hero.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "items": [ - { - "type": "message", - "role": "user", - "text": "Hero" - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "attachmentLayout == 'list'", - "inputHint == 'acceptingInput'", - "attachments[0].contentType == 'application/vnd.microsoft.card.hero'", - "attachments[0].content.title == 'BotFramework Hero Card'", - "attachments[0].content.subtitle == 'Microsoft Bot Framework'", - "attachments[0].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'", - "attachments[0].content.buttons[0].type == 'openUrl'", - "attachments[0].content.buttons[0].title == 'Get Started'", - "attachments[0].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'" - ] - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "speak == 'What card do you want?'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "end" - }, - { - "type": "message", - "role": "bot", - "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Hero.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Hero.transcript deleted file mode 100644 index 9a95ed0474..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Hero.transcript +++ /dev/null @@ -1,173 +0,0 @@ -[ - { - "channelData": { - "clientActivityID": "1611839251501nwivvhmw61i", - "clientTimestamp": "2021-01-28T13:07:31.501Z" - }, - "text": "Hero", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "f748dcdb-2d9b-4540-a2dc-341070aaf910", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:07:31.554Z", - "conversation": { - "id": "bd2d1200-6169-11eb-881a-afe376da3863|livechat" - }, - "id": "c7be7420-6169-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:07:31-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "bd2d1200-6169-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "f748dcdb-2d9b-4540-a2dc-341070aaf910", - "role": "user" - }, - "attachmentLayout": "list", - "locale": "", - "inputHint": "acceptingInput", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.hero", - "content": { - "title": "BotFramework Hero Card", - "subtitle": "Microsoft Bot Framework", - "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.", - "images": [ - { - "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg" - } - ], - "buttons": [ - { - "type": "openUrl", - "title": "Get Started", - "value": "https://docs.microsoft.com/bot-framework" - } - ] - } - } - ], - "entities": [], - "replyToId": "c7be7420-6169-11eb-b46e-c3c3213a748e", - "id": "c87519f0-6169-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:07:32-03:00", - "timestamp": "2021-01-28T13:07:32.750Z" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "bd2d1200-6169-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "f748dcdb-2d9b-4540-a2dc-341070aaf910", - "role": "user" - }, - "locale": "", - "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", - "speak": "What card do you want?", - "inputHint": "expectingInput", - "attachments": [], - "entities": [], - "replyToId": "c7be7420-6169-11eb-b46e-c3c3213a748e", - "id": "c8e67960-6169-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:07:33-03:00", - "timestamp": "2021-01-28T13:07:33.494Z" - }, - { - "channelData": { - "clientActivityID": "1611839255359ffrgmvahfew", - "clientTimestamp": "2021-01-28T13:07:35.359Z" - }, - "text": "end", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "f748dcdb-2d9b-4540-a2dc-341070aaf910", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:07:35.435Z", - "conversation": { - "id": "bd2d1200-6169-11eb-881a-afe376da3863|livechat" - }, - "id": "ca0ea5b0-6169-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:07:35-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "bd2d1200-6169-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "f748dcdb-2d9b-4540-a2dc-341070aaf910", - "role": "user" - }, - "locale": "", - "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "ca0ea5b0-6169-11eb-b46e-c3c3213a748e", - "id": "cab03ce0-6169-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:07:36-03:00", - "timestamp": "2021-01-28T13:07:36.494Z" - } -] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/List.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/List.json deleted file mode 100644 index d34f09b8de..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/List.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "items": [ - { - "type": "message", - "role": "user", - "text": "List" - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "attachmentLayout == 'list'", - "inputHint == 'acceptingInput'", - "attachments[0].contentType == 'application/vnd.microsoft.card.hero'", - "attachments[0].content.title == 'BotFramework Hero Card'", - "attachments[0].content.subtitle == 'Microsoft Bot Framework'", - "attachments[0].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'", - "attachments[0].content.buttons[0].type == 'openUrl'", - "attachments[0].content.buttons[0].title == 'Get Started'", - "attachments[0].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'", - "attachments[1].contentType == 'application/vnd.microsoft.card.hero'", - "attachments[1].content.title == 'BotFramework Hero Card'", - "attachments[1].content.subtitle == 'Microsoft Bot Framework'", - "attachments[1].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'", - "attachments[1].content.buttons[0].type == 'openUrl'", - "attachments[1].content.buttons[0].title == 'Get Started'", - "attachments[1].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'", - "attachments[2].contentType == 'application/vnd.microsoft.card.hero'", - "attachments[2].content.title == 'BotFramework Hero Card'", - "attachments[2].content.subtitle == 'Microsoft Bot Framework'", - "attachments[2].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'", - "attachments[2].content.buttons[0].type == 'openUrl'", - "attachments[2].content.buttons[0].title == 'Get Started'", - "attachments[2].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'" - ] - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "speak == 'What card do you want?'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "end" - }, - { - "type": "message", - "role": "bot", - "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/List.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/List.transcript deleted file mode 100644 index ccad6421be..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/List.transcript +++ /dev/null @@ -1,213 +0,0 @@ -[ - { - "channelData": { - "clientActivityID": "1611839575098y19me2gcp5b", - "clientTimestamp": "2021-01-28T13:12:55.098Z" - }, - "text": "List", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "59cdcc89-e282-4417-9822-4d725675243b", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:12:55.143Z", - "conversation": { - "id": "7e64e060-616a-11eb-881a-afe376da3863|livechat" - }, - "id": "889e3770-616a-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:12:55-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "7e64e060-616a-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "59cdcc89-e282-4417-9822-4d725675243b", - "role": "user" - }, - "attachmentLayout": "list", - "locale": "", - "inputHint": "acceptingInput", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.hero", - "content": { - "title": "BotFramework Hero Card", - "subtitle": "Microsoft Bot Framework", - "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.", - "images": [ - { - "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg" - } - ], - "buttons": [ - { - "type": "openUrl", - "title": "Get Started", - "value": "https://docs.microsoft.com/bot-framework" - } - ] - } - }, - { - "contentType": "application/vnd.microsoft.card.hero", - "content": { - "title": "BotFramework Hero Card", - "subtitle": "Microsoft Bot Framework", - "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.", - "images": [ - { - "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg" - } - ], - "buttons": [ - { - "type": "openUrl", - "title": "Get Started", - "value": "https://docs.microsoft.com/bot-framework" - } - ] - } - }, - { - "contentType": "application/vnd.microsoft.card.hero", - "content": { - "title": "BotFramework Hero Card", - "subtitle": "Microsoft Bot Framework", - "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.", - "images": [ - { - "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg" - } - ], - "buttons": [ - { - "type": "openUrl", - "title": "Get Started", - "value": "https://docs.microsoft.com/bot-framework" - } - ] - } - } - ], - "entities": [], - "replyToId": "889e3770-616a-11eb-b46e-c3c3213a748e", - "id": "89448990-616a-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:12:56-03:00", - "timestamp": "2021-01-28T13:12:56.233Z" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "7e64e060-616a-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "59cdcc89-e282-4417-9822-4d725675243b", - "role": "user" - }, - "locale": "", - "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", - "speak": "What card do you want?", - "inputHint": "expectingInput", - "attachments": [], - "entities": [], - "replyToId": "889e3770-616a-11eb-b46e-c3c3213a748e", - "id": "8970a2a0-616a-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:12:56-03:00", - "timestamp": "2021-01-28T13:12:56.522Z" - }, - { - "channelData": { - "clientActivityID": "1611839578738d2iy2wsylg", - "clientTimestamp": "2021-01-28T13:12:58.738Z" - }, - "text": "end", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "59cdcc89-e282-4417-9822-4d725675243b", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:12:58.788Z", - "conversation": { - "id": "7e64e060-616a-11eb-881a-afe376da3863|livechat" - }, - "id": "8aca6640-616a-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:12:58-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "7e64e060-616a-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "59cdcc89-e282-4417-9822-4d725675243b", - "role": "user" - }, - "locale": "", - "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "8aca6640-616a-11eb-b46e-c3c3213a748e", - "id": "8b62d5b0-616a-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:12:59-03:00", - "timestamp": "2021-01-28T13:12:59.787Z" - } -] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/O365.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/O365.json deleted file mode 100644 index a36b000dfe..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/O365.json +++ /dev/null @@ -1,181 +0,0 @@ -{ - "items": [ - { - "type": "message", - "role": "user", - "text": "o365" - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "attachmentLayout == 'list'", - "inputHint == 'acceptingInput'", - "attachments[0].contentType == 'application/vnd.microsoft.teams.card.o365connector'", - "attachments[0].content.title == 'card title'", - "attachments[0].content.text == 'card text'", - "attachments[0].content.summary == 'O365 card summary'", - "attachments[0].content.themeColor == '#E67A9E'", - "attachments[0].content.sections[0].title == '**section title**'", - "attachments[0].content.sections[0].text == 'section text'", - "attachments[0].content.sections[0].activityTitle == 'activity title'", - "attachments[0].content.sections[0].activitySubtitle == 'activity subtitle'", - "attachments[0].content.sections[0].activityText == 'activity text'", - "attachments[0].content.sections[0].activityImage == 'http://connectorsdemo.azurewebsites.net/images/MSC12_Oscar_002.jpg'", - "attachments[0].content.sections[0].activityImageType == 'avatar'", - "attachments[0].content.sections[0].markdown == True", - "attachments[0].content.sections[0].facts[0].name == 'Fact name 1'", - "attachments[0].content.sections[0].facts[0].value == 'Fact value 1'", - "attachments[0].content.sections[0].facts[1].name == 'Fact name 2'", - "attachments[0].content.sections[0].facts[1].value == 'Fact value 2'", - "attachments[0].content.sections[0].images[0].image == 'http://connectorsdemo.azurewebsites.net/images/MicrosoftSurface_024_Cafe_OH-06315_VS_R1c.jpg'", - "attachments[0].content.sections[0].images[0].title == 'image 1'", - "attachments[0].content.sections[0].images[1].image == 'http://connectorsdemo.azurewebsites.net/images/WIN12_Scene_01.jpg'", - "attachments[0].content.sections[0].images[1].title == 'image 2'", - "attachments[0].content.sections[0].images[2].image == 'http://connectorsdemo.azurewebsites.net/images/WIN12_Anthony_02.jpg'", - "attachments[0].content.sections[0].images[2].title == 'image 3'", - "attachments[0].content.potentialAction[0].@type == 'ActionCard'", - "attachments[0].content.potentialAction[0].inputs[0].@type == 'MultichoiceInput'", - "attachments[0].content.potentialAction[0].inputs[0].choices[0].display == 'Choice 1'", - "attachments[0].content.potentialAction[0].inputs[0].choices[1].display == 'Choice 2'", - "attachments[0].content.potentialAction[0].inputs[0].choices[2].display == 'Choice 3'", - "attachments[0].content.potentialAction[0].inputs[0].style == 'expanded'", - "attachments[0].content.potentialAction[0].inputs[0].isMultiSelect == True", - "attachments[0].content.potentialAction[0].inputs[0].id == 'list-1'", - "attachments[0].content.potentialAction[0].inputs[0].isRequired == True", - "attachments[0].content.potentialAction[0].inputs[0].title == 'Pick multiple options'", - "attachments[0].content.potentialAction[0].inputs[1].@type == 'MultichoiceInput'", - "attachments[0].content.potentialAction[0].inputs[1].choices[0].display == 'Choice 4'", - "attachments[0].content.potentialAction[0].inputs[1].choices[1].display == 'Choice 5'", - "attachments[0].content.potentialAction[0].inputs[1].choices[2].display == 'Choice 6'", - "attachments[0].content.potentialAction[0].inputs[1].style == 'compact'", - "attachments[0].content.potentialAction[0].inputs[1].isMultiSelect == True", - "attachments[0].content.potentialAction[0].inputs[1].id == 'list-2'", - "attachments[0].content.potentialAction[0].inputs[1].isRequired == True", - "attachments[0].content.potentialAction[0].inputs[1].title == 'Pick multiple options'", - "attachments[0].content.potentialAction[0].inputs[2].@type == 'MultichoiceInput'", - "attachments[0].content.potentialAction[0].inputs[2].choices[0].display == 'Choice a'", - "attachments[0].content.potentialAction[0].inputs[2].choices[0].value == 'a'", - "attachments[0].content.potentialAction[0].inputs[2].choices[1].display == 'Choice b'", - "attachments[0].content.potentialAction[0].inputs[2].choices[1].value == 'b'", - "attachments[0].content.potentialAction[0].inputs[2].choices[2].display == 'Choice c'", - "attachments[0].content.potentialAction[0].inputs[2].choices[2].value == 'c'", - "attachments[0].content.potentialAction[0].inputs[2].style == 'expanded'", - "attachments[0].content.potentialAction[0].inputs[2].isMultiSelect == False", - "attachments[0].content.potentialAction[0].inputs[2].id == 'list-3'", - "attachments[0].content.potentialAction[0].inputs[2].isRequired == False", - "attachments[0].content.potentialAction[0].inputs[2].title == 'Pick an option'", - "attachments[0].content.potentialAction[0].inputs[3].@type == 'MultichoiceInput'", - "attachments[0].content.potentialAction[0].inputs[3].choices[0].display == 'Choice x'", - "attachments[0].content.potentialAction[0].inputs[3].choices[0].value == 'x'", - "attachments[0].content.potentialAction[0].inputs[3].choices[1].display == 'Choice y'", - "attachments[0].content.potentialAction[0].inputs[3].choices[1].value == 'y'", - "attachments[0].content.potentialAction[0].inputs[3].choices[2].display == 'Choice z'", - "attachments[0].content.potentialAction[0].inputs[3].choices[2].value == 'z'", - "attachments[0].content.potentialAction[0].inputs[3].style == 'compact'", - "attachments[0].content.potentialAction[0].inputs[3].isMultiSelect == False", - "attachments[0].content.potentialAction[0].inputs[3].id == 'list-4'", - "attachments[0].content.potentialAction[0].inputs[3].isRequired == False", - "attachments[0].content.potentialAction[0].inputs[3].title == 'Pick an option'", - "attachments[0].content.potentialAction[0].actions[0].@type == 'HttpPOST'", - "attachments[0].content.potentialAction[0].actions[0].name == 'Send'", - "attachments[0].content.potentialAction[0].actions[0].@id == 'card-1-btn-1'", - "attachments[0].content.potentialAction[0].name == 'Multiple Choice'", - "attachments[0].content.potentialAction[0].@id == 'card-1'", - "attachments[0].content.potentialAction[1].@type == 'ActionCard'", - "attachments[0].content.potentialAction[1].inputs[0].@type == 'TextInput'", - "attachments[0].content.potentialAction[1].inputs[0].isMultiline == True", - "attachments[0].content.potentialAction[1].inputs[0].id == 'text-1'", - "attachments[0].content.potentialAction[1].inputs[0].isRequired == False", - "attachments[0].content.potentialAction[1].inputs[0].title == 'multiline, no maxLength'", - "attachments[0].content.potentialAction[1].inputs[1].@type == 'TextInput'", - "attachments[0].content.potentialAction[1].inputs[1].isMultiline == False", - "attachments[0].content.potentialAction[1].inputs[1].id == 'text-2'", - "attachments[0].content.potentialAction[1].inputs[1].isRequired == False", - "attachments[0].content.potentialAction[1].inputs[1].title == 'single line, no maxLength'", - "attachments[0].content.potentialAction[1].inputs[2].@type == 'TextInput'", - "attachments[0].content.potentialAction[1].inputs[2].isMultiline == True", - "attachments[0].content.potentialAction[1].inputs[2].id == 'text-3'", - "attachments[0].content.potentialAction[1].inputs[2].isRequired == True", - "attachments[0].content.potentialAction[1].inputs[2].title == 'multiline, max len = 10, isRequired'", - "attachments[0].content.potentialAction[1].inputs[3].@type == 'TextInput'", - "attachments[0].content.potentialAction[1].inputs[3].isMultiline == False", - "attachments[0].content.potentialAction[1].inputs[3].id == 'text-4'", - "attachments[0].content.potentialAction[1].inputs[3].isRequired == True", - "attachments[0].content.potentialAction[1].inputs[3].title == 'single line, max len = 10, isRequired'", - "attachments[0].content.potentialAction[1].actions[0].@type == 'HttpPOST'", - "attachments[0].content.potentialAction[1].actions[0].name == 'Send'", - "attachments[0].content.potentialAction[1].actions[0].@id == 'card-2-btn-1'", - "attachments[0].content.potentialAction[1].name == 'Text Input'", - "attachments[0].content.potentialAction[1].@id == 'card-2'", - "attachments[0].content.potentialAction[2].@type == 'ActionCard'", - "attachments[0].content.potentialAction[2].inputs[0].@type == 'DateInput'", - "attachments[0].content.potentialAction[2].inputs[0].includeTime == True", - "attachments[0].content.potentialAction[2].inputs[0].id == 'date-1'", - "attachments[0].content.potentialAction[2].inputs[0].isRequired == True", - "attachments[0].content.potentialAction[2].inputs[0].title == 'date with time'", - "attachments[0].content.potentialAction[2].inputs[1].@type == 'DateInput'", - "attachments[0].content.potentialAction[2].inputs[1].includeTime == False", - "attachments[0].content.potentialAction[2].inputs[1].id == 'date-2'", - "attachments[0].content.potentialAction[2].inputs[1].isRequired == False", - "attachments[0].content.potentialAction[2].inputs[1].title == 'date only'", - "attachments[0].content.potentialAction[2].actions[0].@type == 'HttpPOST'", - "attachments[0].content.potentialAction[2].actions[0].name == 'Send'", - "attachments[0].content.potentialAction[2].actions[0].@id == 'card-3-btn-1'", - "attachments[0].content.potentialAction[2].name == 'Date Input'", - "attachments[0].content.potentialAction[2].@id == 'card-3'", - "attachments[0].content.potentialAction[3].@type == 'ViewAction'", - "attachments[0].content.potentialAction[3].name == 'View Action'", - "attachments[0].content.potentialAction[4].@type == 'OpenUri'", - "attachments[0].content.potentialAction[4].targets[0].os == 'default'", - "attachments[0].content.potentialAction[4].targets[0].uri == 'http://microsoft.com'", - "attachments[0].content.potentialAction[4].targets[1].os == 'iOS'", - "attachments[0].content.potentialAction[4].targets[1].uri == 'http://microsoft.com'", - "attachments[0].content.potentialAction[4].targets[2].os == 'android'", - "attachments[0].content.potentialAction[4].targets[2].uri == 'http://microsoft.com'", - "attachments[0].content.potentialAction[4].targets[3].os == 'windows'", - "attachments[0].content.potentialAction[4].targets[3].uri == 'http://microsoft.com'", - "attachments[0].content.potentialAction[4].name == 'Open Uri'", - "attachments[0].content.potentialAction[4].@id == 'open-uri'" - ] - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "speak == 'What card do you want?'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "end" - }, - { - "type": "message", - "role": "bot", - "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/O365.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/O365.transcript deleted file mode 100644 index 35486a16ed..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/O365.transcript +++ /dev/null @@ -1,407 +0,0 @@ -[ - { - "channelData": { - "clientActivityID": "16097853343944p9zoiqzu9d", - "clientTimestamp": "2021-01-04T18:35:34.394Z" - }, - "text": "o365", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "9dbd973e-a896-4b91-9d00-e98bb8dec6a2", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-04T18:35:34.423Z", - "conversation": { - "id": "9a3c8340-4ebb-11eb-9fc9-afbd749ec1ea|livechat" - }, - "id": "a1bbea70-4ebb-11eb-8029-87a6e92fcaab", - "localTimestamp": "2021-01-04T15:35:34-03:00", - "recipient": { - "id": "fce93a20-4e9c-11eb-9fc9-afbd749ec1ea", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://0e141a8d6e98.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://0e141a8d6e98.ngrok.io", - "channelId": "emulator", - "from": { - "id": "fce93a20-4e9c-11eb-9fc9-afbd749ec1ea", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "9a3c8340-4ebb-11eb-9fc9-afbd749ec1ea|livechat" - }, - "recipient": { - "id": "9dbd973e-a896-4b91-9d00-e98bb8dec6a2", - "role": "user" - }, - "attachmentLayout": "list", - "locale": "", - "inputHint": "acceptingInput", - "attachments": [ - { - "contentType": "application/vnd.microsoft.teams.card.o365connector", - "content": { - "title": "card title", - "text": "card text", - "summary": "O365 card summary", - "themeColor": "#E67A9E", - "sections": [ - { - "title": "**section title**", - "text": "section text", - "activityTitle": "activity title", - "activitySubtitle": "activity subtitle", - "activityText": "activity text", - "activityImage": "http://connectorsdemo.azurewebsites.net/images/MSC12_Oscar_002.jpg", - "activityImageType": "avatar", - "markdown": true, - "facts": [ - { - "name": "Fact name 1", - "value": "Fact value 1" - }, - { - "name": "Fact name 2", - "value": "Fact value 2" - } - ], - "images": [ - { - "image": "http://connectorsdemo.azurewebsites.net/images/MicrosoftSurface_024_Cafe_OH-06315_VS_R1c.jpg", - "title": "image 1" - }, - { - "image": "http://connectorsdemo.azurewebsites.net/images/WIN12_Scene_01.jpg", - "title": "image 2" - }, - { - "image": "http://connectorsdemo.azurewebsites.net/images/WIN12_Anthony_02.jpg", - "title": "image 3" - } - ] - } - ], - "potentialAction": [ - { - "@type": "ActionCard", - "inputs": [ - { - "@type": "MultichoiceInput", - "choices": [ - { - "display": "Choice 1", - "value": "1" - }, - { - "display": "Choice 2", - "value": "2" - }, - { - "display": "Choice 3", - "value": "3" - } - ], - "style": "expanded", - "isMultiSelect": true, - "id": "list-1", - "isRequired": true, - "title": "Pick multiple options" - }, - { - "@type": "MultichoiceInput", - "choices": [ - { - "display": "Choice 4", - "value": "4" - }, - { - "display": "Choice 5", - "value": "5" - }, - { - "display": "Choice 6", - "value": "6" - } - ], - "style": "compact", - "isMultiSelect": true, - "id": "list-2", - "isRequired": true, - "title": "Pick multiple options" - }, - { - "@type": "MultichoiceInput", - "choices": [ - { - "display": "Choice a", - "value": "a" - }, - { - "display": "Choice b", - "value": "b" - }, - { - "display": "Choice c", - "value": "c" - } - ], - "style": "expanded", - "isMultiSelect": false, - "id": "list-3", - "isRequired": false, - "title": "Pick an option" - }, - { - "@type": "MultichoiceInput", - "choices": [ - { - "display": "Choice x", - "value": "x" - }, - { - "display": "Choice y", - "value": "y" - }, - { - "display": "Choice z", - "value": "z" - } - ], - "style": "compact", - "isMultiSelect": false, - "id": "list-4", - "isRequired": false, - "title": "Pick an option" - } - ], - "actions": [ - { - "@type": "HttpPOST", - "body": "{\"list1\":\"{{list-1.value}}\", \"list2\":\"{{list-2.value}}\", \"list3\":\"{{list-3.value}}\", \"list4\":\"{{list-4.value}}\"}", - "name": "Send", - "@id": "card-1-btn-1" - } - ], - "name": "Multiple Choice", - "@id": "card-1" - }, - { - "@type": "ActionCard", - "inputs": [ - { - "@type": "TextInput", - "isMultiline": true, - "id": "text-1", - "isRequired": false, - "title": "multiline, no maxLength" - }, - { - "@type": "TextInput", - "isMultiline": false, - "id": "text-2", - "isRequired": false, - "title": "single line, no maxLength" - }, - { - "@type": "TextInput", - "isMultiline": true, - "maxLength": 10, - "id": "text-3", - "isRequired": true, - "title": "multiline, max len = 10, isRequired" - }, - { - "@type": "TextInput", - "isMultiline": false, - "maxLength": 10, - "id": "text-4", - "isRequired": true, - "title": "single line, max len = 10, isRequired" - } - ], - "actions": [ - { - "@type": "HttpPOST", - "body": "{\"text1\":\"{{text-1.value}}\", \"text2\":\"{{text-2.value}}\", \"text3\":\"{{text-3.value}}\", \"text4\":\"{{text-4.value}}\"}", - "name": "Send", - "@id": "card-2-btn-1" - } - ], - "name": "Text Input", - "@id": "card-2" - }, - { - "@type": "ActionCard", - "inputs": [ - { - "@type": "DateInput", - "includeTime": true, - "id": "date-1", - "isRequired": true, - "title": "date with time" - }, - { - "@type": "DateInput", - "includeTime": false, - "id": "date-2", - "isRequired": false, - "title": "date only" - } - ], - "actions": [ - { - "@type": "HttpPOST", - "body": "{\"date1\":\"{{date-1.value}}\", \"date2\":\"{{date-2.value}}\"}", - "name": "Send", - "@id": "card-3-btn-1" - } - ], - "name": "Date Input", - "@id": "card-3" - }, - { - "@type": "ViewAction", - "target": [ - "http://microsoft.com" - ], - "name": "View Action" - }, - { - "@type": "OpenUri", - "targets": [ - { - "os": "default", - "uri": "http://microsoft.com" - }, - { - "os": "iOS", - "uri": "http://microsoft.com" - }, - { - "os": "android", - "uri": "http://microsoft.com" - }, - { - "os": "windows", - "uri": "http://microsoft.com" - } - ], - "name": "Open Uri", - "@id": "open-uri" - } - ] - } - } - ], - "entities": [], - "replyToId": "a1bbea70-4ebb-11eb-8029-87a6e92fcaab", - "id": "a2567cc0-4ebb-11eb-8029-87a6e92fcaab", - "localTimestamp": "2021-01-04T15:35:35-03:00", - "timestamp": "2021-01-04T18:35:35.436Z" - }, - { - "type": "message", - "serviceUrl": "https://a3c0daa166e8.ngrok.io", - "channelId": "emulator", - "from": { - "id": "e6f62e00-5a57-11eb-856d-5fc1719d27ce", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "5cd758c0-5a5c-11eb-856d-5fc1719d27ce|livechat" - }, - "recipient": { - "id": "967d23e5-491c-4039-9edd-923a53617734", - "role": "user" - }, - "locale": "", - "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", - "speak": "What card do you want?", - "inputHint": "expectingInput", - "attachments": [], - "entities": [], - "replyToId": "6511ab80-5a5c-11eb-9f42-afe5fddb4d6c", - "id": "6603aca0-5a5c-11eb-9f42-afe5fddb4d6c", - "localTimestamp": "2021-01-19T10:44:05-03:00", - "timestamp": "2021-01-19T13:44:05.994Z" - }, - { - "channelData": { - "clientActivityID": "1609785433694xe3les8ksd", - "clientTimestamp": "2021-01-04T18:37:13.694Z" - }, - "text": "end", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "9bdd62a5-6bf7-4c0c-a7b6-e954be30f2f0", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-04T18:37:13.730Z", - "conversation": { - "id": "cee77be0-4ebb-11eb-9fc9-afbd749ec1ea|livechat" - }, - "id": "dcecf620-4ebb-11eb-8029-87a6e92fcaab", - "localTimestamp": "2021-01-04T15:37:13-03:00", - "recipient": { - "id": "fce93a20-4e9c-11eb-9fc9-afbd749ec1ea", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://0e141a8d6e98.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://0e141a8d6e98.ngrok.io", - "channelId": "emulator", - "from": { - "id": "fce93a20-4e9c-11eb-9fc9-afbd749ec1ea", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "cee77be0-4ebb-11eb-9fc9-afbd749ec1ea|livechat" - }, - "recipient": { - "id": "9bdd62a5-6bf7-4c0c-a7b6-e954be30f2f0", - "role": "user" - }, - "locale": "", - "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "dcecf620-4ebb-11eb-8029-87a6e92fcaab", - "id": "ddb8aa90-4ebb-11eb-8029-87a6e92fcaab", - "localTimestamp": "2021-01-04T15:37:15-03:00", - "timestamp": "2021-01-04T18:37:15.065Z" - } -] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Receipt.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Receipt.json deleted file mode 100644 index 1709f44ccd..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Receipt.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "items": [ - { - "type": "message", - "role": "user", - "text": "Receipt" - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "attachmentLayout == 'list'", - "inputHint == 'acceptingInput'", - "attachments[0].contentType == 'application/vnd.microsoft.card.receipt'", - "attachments[0].content.title == 'John Doe'", - "attachments[0].content.facts[0].key == 'Order Number'", - "attachments[0].content.facts[1].key == 'Payment Method'", - "attachments[0].content.facts[1].value == 'VISA 5555-****'", - "attachments[0].content.items[0].title == 'Data Transfer'", - "attachments[0].content.items[0].image.url == 'https://github.com/amido/azure-vector-icons/raw/master/renders/traffic-manager.png'", - "attachments[0].content.items[0].price == '$ 38.45'", - "attachments[0].content.items[1].title == 'App Service'", - "attachments[0].content.items[1].image.url == 'https://github.com/amido/azure-vector-icons/raw/master/renders/cloud-service.png'", - "attachments[0].content.items[1].price == '$ 45.00'", - "attachments[0].content.total == '$ 90.95'", - "attachments[0].content.tax == '$ 7.50'", - "attachments[0].content.buttons[0].type == 'openUrl'", - "attachments[0].content.buttons[0].title == 'More information'", - "attachments[0].content.buttons[0].image == 'https://account.windowsazure.com/content/6.10.1.38-.8225.160809-1618/aux-pre/images/offer-icon-freetrial.png'", - "attachments[0].content.buttons[0].value == 'https://azure.microsoft.com/en-us/pricing/'" - ] - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "speak == 'What card do you want?'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "end" - }, - { - "type": "message", - "role": "bot", - "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Receipt.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Receipt.transcript deleted file mode 100644 index e5205b5dc7..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Receipt.transcript +++ /dev/null @@ -1,197 +0,0 @@ -[ - { - "channelData": { - "clientActivityID": "1611839371599wsbxze20iv", - "clientTimestamp": "2021-01-28T13:09:31.599Z" - }, - "text": "Receipt", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "3eb35847-111c-4ec7-86de-a54438c4a976", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:09:31.650Z", - "conversation": { - "id": "06cce110-616a-11eb-881a-afe376da3863|livechat" - }, - "id": "0f53a620-616a-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:09:31-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "06cce110-616a-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "3eb35847-111c-4ec7-86de-a54438c4a976", - "role": "user" - }, - "attachmentLayout": "list", - "locale": "", - "inputHint": "acceptingInput", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.receipt", - "content": { - "title": "John Doe", - "facts": [ - { - "key": "Order Number", - "value": "1234" - }, - { - "key": "Payment Method", - "value": "VISA 5555-****" - } - ], - "items": [ - { - "title": "Data Transfer", - "image": { - "url": "https://github.com/amido/azure-vector-icons/raw/master/renders/traffic-manager.png" - }, - "price": "$ 38.45", - "quantity": "368" - }, - { - "title": "App Service", - "image": { - "url": "https://github.com/amido/azure-vector-icons/raw/master/renders/cloud-service.png" - }, - "price": "$ 45.00", - "quantity": "720" - } - ], - "total": "$ 90.95", - "tax": "$ 7.50", - "buttons": [ - { - "type": "openUrl", - "title": "More information", - "image": "https://account.windowsazure.com/content/6.10.1.38-.8225.160809-1618/aux-pre/images/offer-icon-freetrial.png", - "value": "https://azure.microsoft.com/en-us/pricing/" - } - ] - } - } - ], - "entities": [], - "replyToId": "0f53a620-616a-11eb-b46e-c3c3213a748e", - "id": "0ff42be0-616a-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:09:32-03:00", - "timestamp": "2021-01-28T13:09:32.702Z" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "06cce110-616a-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "3eb35847-111c-4ec7-86de-a54438c4a976", - "role": "user" - }, - "locale": "", - "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", - "speak": "What card do you want?", - "inputHint": "expectingInput", - "attachments": [], - "entities": [], - "replyToId": "0f53a620-616a-11eb-b46e-c3c3213a748e", - "id": "101fcfc0-616a-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:09:32-03:00", - "timestamp": "2021-01-28T13:09:32.988Z" - }, - { - "channelData": { - "clientActivityID": "1611839374573ek608u3396m", - "clientTimestamp": "2021-01-28T13:09:34.573Z" - }, - "text": "end", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "3eb35847-111c-4ec7-86de-a54438c4a976", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:09:34.793Z", - "conversation": { - "id": "06cce110-616a-11eb-881a-afe376da3863|livechat" - }, - "id": "11333b90-616a-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:09:34-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "06cce110-616a-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "3eb35847-111c-4ec7-86de-a54438c4a976", - "role": "user" - }, - "locale": "", - "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "11333b90-616a-11eb-b46e-c3c3213a748e", - "id": "11ca2460-616a-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:09:35-03:00", - "timestamp": "2021-01-28T13:09:35.782Z" - } -] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SignIn.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SignIn.json deleted file mode 100644 index 74415aeb59..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SignIn.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "items": [ - { - "type": "message", - "role": "user", - "text": "Signin" - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "attachmentLayout == 'list'", - "inputHint == 'acceptingInput'", - "attachments[0].contentType == 'application/vnd.microsoft.card.signin'", - "attachments[0].content.text == 'BotFramework Sign-in Card'", - "attachments[0].content.buttons[0].type == 'signin'", - "attachments[0].content.buttons[0].title == 'Sign-in'", - "attachments[0].content.buttons[0].value == 'https://login.microsoftonline.com/'" - ] - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "speak == 'What card do you want?'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "end" - }, - { - "type": "message", - "role": "bot", - "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SignIn.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SignIn.transcript deleted file mode 100644 index 93337e2ddc..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SignIn.transcript +++ /dev/null @@ -1,166 +0,0 @@ -[ - { - "channelData": { - "clientActivityID": "1611839446716rvo7eet9ri", - "clientTimestamp": "2021-01-28T13:10:46.716Z" - }, - "text": "Signin", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "1eb07a8c-c293-47ab-aecf-0bf4201e7f43", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:10:46.812Z", - "conversation": { - "id": "32bac261-616a-11eb-881a-afe376da3863|livechat" - }, - "id": "3c209cd0-616a-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:10:46-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "32bac261-616a-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "1eb07a8c-c293-47ab-aecf-0bf4201e7f43", - "role": "user" - }, - "attachmentLayout": "list", - "locale": "", - "inputHint": "acceptingInput", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.signin", - "content": { - "text": "BotFramework Sign-in Card", - "buttons": [ - { - "type": "signin", - "title": "Sign-in", - "value": "https://login.microsoftonline.com/" - } - ] - } - } - ], - "entities": [], - "replyToId": "3c209cd0-616a-11eb-b46e-c3c3213a748e", - "id": "3cc47df0-616a-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:10:47-03:00", - "timestamp": "2021-01-28T13:10:47.887Z" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "32bac261-616a-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "1eb07a8c-c293-47ab-aecf-0bf4201e7f43", - "role": "user" - }, - "locale": "", - "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", - "speak": "What card do you want?", - "inputHint": "expectingInput", - "attachments": [], - "entities": [], - "replyToId": "3c209cd0-616a-11eb-b46e-c3c3213a748e", - "id": "3cf0be10-616a-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:10:48-03:00", - "timestamp": "2021-01-28T13:10:48.177Z" - }, - { - "channelData": { - "clientActivityID": "16118394507003s21693ifj8", - "clientTimestamp": "2021-01-28T13:10:50.700Z" - }, - "text": "end", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "1eb07a8c-c293-47ab-aecf-0bf4201e7f43", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:10:50.748Z", - "conversation": { - "id": "32bac261-616a-11eb-881a-afe376da3863|livechat" - }, - "id": "3e790bc0-616a-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:10:50-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "32bac261-616a-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "1eb07a8c-c293-47ab-aecf-0bf4201e7f43", - "role": "user" - }, - "locale": "", - "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "3e790bc0-616a-11eb-b46e-c3c3213a748e", - "id": "3f13c520-616a-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:10:51-03:00", - "timestamp": "2021-01-28T13:10:51.762Z" - } -] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SubmitAction.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SubmitAction.json deleted file mode 100644 index 8509242e40..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SubmitAction.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "items": [ - { - "type": "message", - "role": "user", - "text": "AdaptiveCardSubmitAction" - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "attachmentLayout == 'list'", - "inputHint == 'acceptingInput'", - "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'", - "attachments[0].content.type == 'AdaptiveCard'", - "attachments[0].content.body[0].type == 'TextBlock'", - "attachments[0].content.body[0].text == 'Bot Builder actions'", - "attachments[0].content.body[1].type == 'Input.Text'", - "attachments[0].content.body[1].id == 'x'", - "attachments[0].content.actions[0].type == 'Action.Submit'", - "attachments[0].content.actions[0].data.key == 'value'", - "attachments[0].content.actions[0].title == 'Action.Submit'" - ] - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "speak == 'What card do you want?'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "end" - }, - { - "type": "message", - "role": "bot", - "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SubmitAction.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SubmitAction.transcript deleted file mode 100644 index 35ffbdf33c..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/SubmitAction.transcript +++ /dev/null @@ -1,179 +0,0 @@ -[ - { - "channelData": { - "clientActivityID": "1611839977312o3qfq3addts", - "clientTimestamp": "2021-01-28T13:19:37.312Z" - }, - "text": "AdaptiveCardSumbitAction", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "4ea03367-4ce0-46a8-901f-efcdb37418d3", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:19:37.385Z", - "conversation": { - "id": "6bc8f8a0-616b-11eb-881a-afe376da3863|livechat" - }, - "id": "785f7990-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:19:37-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "6bc8f8a0-616b-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "4ea03367-4ce0-46a8-901f-efcdb37418d3", - "role": "user" - }, - "attachmentLayout": "list", - "locale": "", - "inputHint": "acceptingInput", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.adaptive", - "content": { - "type": "AdaptiveCard", - "version": "1.2", - "body": [ - { - "type": "TextBlock", - "text": "Bot Builder actions" - }, - { - "type": "Input.Text", - "id": "x" - } - ], - "actions": [ - { - "type": "Action.Submit", - "data": { - "key": "value" - }, - "title": "Action.Submit" - } - ] - } - } - ], - "entities": [], - "replyToId": "785f7990-616b-11eb-b46e-c3c3213a748e", - "id": "78f5ed30-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:19:38-03:00", - "timestamp": "2021-01-28T13:19:38.371Z" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "6bc8f8a0-616b-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "4ea03367-4ce0-46a8-901f-efcdb37418d3", - "role": "user" - }, - "locale": "", - "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", - "speak": "What card do you want?", - "inputHint": "expectingInput", - "attachments": [], - "entities": [], - "replyToId": "785f7990-616b-11eb-b46e-c3c3213a748e", - "id": "79227b70-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:19:38-03:00", - "timestamp": "2021-01-28T13:19:38.663Z" - }, - { - "channelData": { - "clientActivityID": "1611839981867xrs9cyi53o9", - "clientTimestamp": "2021-01-28T13:19:41.867Z" - }, - "text": "end", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "4ea03367-4ce0-46a8-901f-efcdb37418d3", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:19:41.920Z", - "conversation": { - "id": "6bc8f8a0-616b-11eb-881a-afe376da3863|livechat" - }, - "id": "7b137600-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:19:41-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "6bc8f8a0-616b-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "4ea03367-4ce0-46a8-901f-efcdb37418d3", - "role": "user" - }, - "locale": "", - "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "7b137600-616b-11eb-b46e-c3c3213a748e", - "id": "7bbb27b0-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:19:43-03:00", - "timestamp": "2021-01-28T13:19:43.019Z" - } -] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/TaskModule.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/TaskModule.json deleted file mode 100644 index d821b94cfd..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/TaskModule.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "items": [ - { - "type": "message", - "role": "user", - "text": "AdaptiveCardTeamsTaskModule" - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "attachmentLayout == 'list'", - "inputHint == 'acceptingInput'", - "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'", - "attachments[0].content.type == 'AdaptiveCard'", - "attachments[0].content.body[0].type == 'TextBlock'", - "attachments[0].content.body[0].text == 'Task Module Adaptive Card'", - "attachments[0].content.actions[0].type == 'Action.Submit'", - "attachments[0].content.actions[0].data.msteams.type == 'invoke'", - "attachments[0].content.actions[0].title == 'Launch Task Module'" - ] - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "speak == 'What card do you want?'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "end" - }, - { - "type": "message", - "role": "bot", - "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/TaskModule.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/TaskModule.transcript deleted file mode 100644 index 21df36d5ed..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/TaskModule.transcript +++ /dev/null @@ -1,178 +0,0 @@ -[ - { - "channelData": { - "clientActivityID": "16118391929936yytoz4eh0g", - "clientTimestamp": "2021-01-28T13:06:32.993Z" - }, - "text": "AdaptiveCardTaskModule", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "8402a6ae-fe88-4f1b-91cf-6026ed39d32a", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:06:33.044Z", - "conversation": { - "id": "9a706690-6169-11eb-881a-afe376da3863|livechat" - }, - "id": "a4de8940-6169-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:06:33-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "9a706690-6169-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "8402a6ae-fe88-4f1b-91cf-6026ed39d32a", - "role": "user" - }, - "attachmentLayout": "list", - "locale": "", - "inputHint": "acceptingInput", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.adaptive", - "content": { - "type": "AdaptiveCard", - "version": "1.2", - "body": [ - { - "type": "TextBlock", - "text": "Task Module Adaptive Card" - } - ], - "actions": [ - { - "type": "Action.Submit", - "data": { - "msteams": { - "type": "invoke", - "value": "{\r\n \"hiddenKey\": \"hidden value from task module launcher\",\r\n \"type\": \"task/fetch\"\r\n}" - } - }, - "title": "Launch Task Module" - } - ] - } - } - ], - "entities": [], - "replyToId": "a4de8940-6169-11eb-b46e-c3c3213a748e", - "id": "a5a115f0-6169-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:06:34-03:00", - "timestamp": "2021-01-28T13:06:34.319Z" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "9a706690-6169-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "8402a6ae-fe88-4f1b-91cf-6026ed39d32a", - "role": "user" - }, - "locale": "", - "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", - "speak": "What card do you want?", - "inputHint": "expectingInput", - "attachments": [], - "entities": [], - "replyToId": "a4de8940-6169-11eb-b46e-c3c3213a748e", - "id": "a5cd07f0-6169-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:06:34-03:00", - "timestamp": "2021-01-28T13:06:34.607Z" - }, - { - "channelData": { - "clientActivityID": "1611839197644k7d79gt7vgr", - "clientTimestamp": "2021-01-28T13:06:37.644Z" - }, - "text": "end", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "8402a6ae-fe88-4f1b-91cf-6026ed39d32a", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:06:37.717Z", - "conversation": { - "id": "9a706690-6169-11eb-881a-afe376da3863|livechat" - }, - "id": "a7a79450-6169-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:06:37-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "9a706690-6169-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "8402a6ae-fe88-4f1b-91cf-6026ed39d32a", - "role": "user" - }, - "locale": "", - "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "a7a79450-6169-11eb-b46e-c3c3213a748e", - "id": "a84e0d80-6169-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:06:38-03:00", - "timestamp": "2021-01-28T13:06:38.808Z" - } -] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Thumbnail.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Thumbnail.json deleted file mode 100644 index abf37c0aff..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Thumbnail.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "items": [ - { - "type": "message", - "role": "user", - "text": "Thumbnail" - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "attachmentLayout == 'list'", - "inputHint == 'acceptingInput'", - "attachments[0].contentType == 'application/vnd.microsoft.card.thumbnail'", - "attachments[0].content.title == 'BotFramework Thumbnail Card'", - "attachments[0].content.subtitle == 'Microsoft Bot Framework'", - "attachments[0].content.text == 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.'", - "attachments[0].content.buttons[0].type == 'openUrl'", - "attachments[0].content.buttons[0].title == 'Get Started'", - "attachments[0].content.buttons[0].value == 'https://docs.microsoft.com/bot-framework'" - ] - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "speak == 'What card do you want?'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "end" - }, - { - "type": "message", - "role": "bot", - "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Thumbnail.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Thumbnail.transcript deleted file mode 100644 index dbae756d1d..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Thumbnail.transcript +++ /dev/null @@ -1,173 +0,0 @@ -[ - { - "channelData": { - "clientActivityID": "1611839317022nw5evtm02lt", - "clientTimestamp": "2021-01-28T13:08:37.022Z" - }, - "text": "Thumbnail", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "341b7ecf-7777-43c0-83a2-2882c6dc6a78", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:08:37.084Z", - "conversation": { - "id": "e57bac80-6169-11eb-881a-afe376da3863|livechat" - }, - "id": "eecd89c0-6169-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:08:37-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "e57bac80-6169-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "341b7ecf-7777-43c0-83a2-2882c6dc6a78", - "role": "user" - }, - "attachmentLayout": "list", - "locale": "", - "inputHint": "acceptingInput", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.thumbnail", - "content": { - "title": "BotFramework Thumbnail Card", - "subtitle": "Microsoft Bot Framework", - "text": "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.", - "images": [ - { - "url": "https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg" - } - ], - "buttons": [ - { - "type": "openUrl", - "title": "Get Started", - "value": "https://docs.microsoft.com/bot-framework" - } - ] - } - } - ], - "entities": [], - "replyToId": "eecd89c0-6169-11eb-b46e-c3c3213a748e", - "id": "ef633a10-6169-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:08:38-03:00", - "timestamp": "2021-01-28T13:08:38.064Z" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "e57bac80-6169-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "341b7ecf-7777-43c0-83a2-2882c6dc6a78", - "role": "user" - }, - "locale": "", - "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", - "speak": "What card do you want?", - "inputHint": "expectingInput", - "attachments": [], - "entities": [], - "replyToId": "eecd89c0-6169-11eb-b46e-c3c3213a748e", - "id": "ef8eb6e0-6169-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:08:38-03:00", - "timestamp": "2021-01-28T13:08:38.350Z" - }, - { - "channelData": { - "clientActivityID": "1611839320481tz2ppzyepo9", - "clientTimestamp": "2021-01-28T13:08:40.481Z" - }, - "text": "end", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "341b7ecf-7777-43c0-83a2-2882c6dc6a78", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:08:40.529Z", - "conversation": { - "id": "e57bac80-6169-11eb-881a-afe376da3863|livechat" - }, - "id": "f0db3410-6169-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:08:40-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "e57bac80-6169-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "341b7ecf-7777-43c0-83a2-2882c6dc6a78", - "role": "user" - }, - "locale": "", - "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "f0db3410-6169-11eb-b46e-c3c3213a748e", - "id": "f18e5770-6169-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:08:41-03:00", - "timestamp": "2021-01-28T13:08:41.703Z" - } -] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Video.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Video.json deleted file mode 100644 index 2e96bb8001..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Video.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "items": [ - { - "type": "message", - "role": "user", - "text": "Video" - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "attachmentLayout == 'list'", - "inputHint == 'acceptingInput'", - "attachments[0].contentType == 'application/vnd.microsoft.card.video'", - "attachments[0].content.title == 'Video Card'", - "attachments[0].content.media[0].url == 'https://www.youtube.com/watch?v=LvqzubPZjHE'" - ] - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "speak == 'What card do you want?'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "end" - }, - { - "type": "message", - "role": "bot", - "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Video.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Video.transcript deleted file mode 100644 index 884aa68788..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/Video.transcript +++ /dev/null @@ -1,164 +0,0 @@ -[ - { - "channelData": { - "clientActivityID": "1611839916459etjxoqosqtr", - "clientTimestamp": "2021-01-28T13:18:36.459Z" - }, - "text": "Video", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "7563d50d-a9b1-48fd-aaf9-e0d4d59fc0e2", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:18:36.513Z", - "conversation": { - "id": "4b43edb0-616b-11eb-881a-afe376da3863|livechat" - }, - "id": "54172510-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:18:36-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "4b43edb0-616b-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "7563d50d-a9b1-48fd-aaf9-e0d4d59fc0e2", - "role": "user" - }, - "attachmentLayout": "list", - "locale": "", - "inputHint": "acceptingInput", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.video", - "content": { - "title": "Video Card", - "media": [ - { - "url": "https://www.youtube.com/watch?v=LvqzubPZjHE" - } - ] - } - } - ], - "entities": [], - "replyToId": "54172510-616b-11eb-b46e-c3c3213a748e", - "id": "54b86e20-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:18:37-03:00", - "timestamp": "2021-01-28T13:18:37.570Z" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "4b43edb0-616b-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "7563d50d-a9b1-48fd-aaf9-e0d4d59fc0e2", - "role": "user" - }, - "locale": "", - "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", - "speak": "What card do you want?", - "inputHint": "expectingInput", - "attachments": [], - "entities": [], - "replyToId": "54172510-616b-11eb-b46e-c3c3213a748e", - "id": "54e4d550-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:18:37-03:00", - "timestamp": "2021-01-28T13:18:37.861Z" - }, - { - "channelData": { - "clientActivityID": "1611839921730zsw4gsfltfm", - "clientTimestamp": "2021-01-28T13:18:41.731Z" - }, - "text": "end", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "7563d50d-a9b1-48fd-aaf9-e0d4d59fc0e2", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:18:41.787Z", - "conversation": { - "id": "4b43edb0-616b-11eb-881a-afe376da3863|livechat" - }, - "id": "573be4b0-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:18:41-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "4b43edb0-616b-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "7563d50d-a9b1-48fd-aaf9-e0d4d59fc0e2", - "role": "user" - }, - "locale": "", - "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "573be4b0-616b-11eb-b46e-c3c3213a748e", - "id": "57d31ba0-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:18:42-03:00", - "timestamp": "2021-01-28T13:18:42.778Z" - } -] diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/WaterfallGreeting.json b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/WaterfallGreeting.json deleted file mode 100644 index af4438a1de..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/WaterfallGreeting.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "items": [ - { - "type": "conversationUpdate", - "role": "user" - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "attachmentLayout == 'list'", - "speak == 'Welcome to the waterfall host bot'", - "inputHint == 'acceptingInput'", - "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'", - "attachments[0].content.type == 'AdaptiveCard'", - "attachments[0].content.body[0].type == 'Image'", - "attachments[0].content.body[0].size == 'stretch'", - "attachments[0].content.body[1].type == 'TextBlock'", - "attachments[0].content.body[1].spacing == 'Medium'", - "attachments[0].content.body[1].size == 'Medium'", - "attachments[0].content.body[1].weight == 'Bolder'", - "attachments[0].content.body[1].text == 'Welcome to the Skill Dialog Sample!'", - "attachments[0].content.body[1].wrap == True", - "attachments[0].content.body[1].color == 'Accent'", - "attachments[0].content.body[2].type == 'TextBlock'", - "attachments[0].content.body[2].text == 'This sample allows you to connect to a skill using a SkillDialog and invoke several actions.'", - "attachments[0].content.body[2].wrap == True" - ] - }, - { - "type": "message", - "role": "bot", - "text": "What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'What delivery mode would you like to use?'", - "speak == 'What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - }, - { - "type": "message", - "role": "user", - "text": "${DeliveryMode}" - }, - { - "type": "message", - "role": "bot", - "text": "What group of skills would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'What group of skills would you like to use?'", - "speak == 'What group of skills would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'", - "suggestedActions.actions[0].value == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'" - ] - }, - { - "type": "message", - "role": "user", - "text": "Waterfall" - }, - { - "type": "message", - "role": "bot", - "text": "What skill would you like to call?\n\n 1. WaterfallSkillBotDotNet\n 2. WaterfallSkillBotJS\n 3. WaterfallSkillBotPython", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "startsWith(text, 'What skill would you like to call?')", - "speak == 'What skill would you like to call?'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "${TargetSkill}" - }, - { - "type": "message", - "role": "bot", - "text": "Select an action # to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Select an action to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update'", - "speak == 'Select an action to send to **${TargetSkill}**.'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "Cards" - }, - { - "type": "trace", - "role": "bot", - "assertions": [ - "type == 'trace'", - "from.role == 'bot'", - "recipient.role == 'user'", - "label == 'Got ActivityType: event'", - "name == 'ActivityRouterDialog.ProcessActivityAsync()'" - ] - }, - { - "type": "trace", - "role": "bot", - "assertions": [ - "type == 'trace'", - "from.role == 'bot'", - "recipient.role == 'user'", - "label == 'Name: Cards. Value: '", - "name == 'ActivityRouterDialog.OnEventActivityAsync()'" - ] - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "speak == 'What card do you want?'", - "inputHint == 'expectingInput'" - ] - } - ] -} diff --git a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/WaterfallGreeting.transcript b/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/WaterfallGreeting.transcript deleted file mode 100644 index aae2fbe486..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/CardActions/TestScripts/WaterfallGreeting.transcript +++ /dev/null @@ -1,435 +0,0 @@ -[ - { - "type": "conversationUpdate", - "membersAdded": [ - { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot" - }, - { - "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", - "name": "User" - } - ], - "membersRemoved": [], - "channelId": "emulator", - "conversation": { - "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" - }, - "id": "d6088360-6167-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T09:53:36-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "timestamp": "2021-01-28T12:53:36.534Z", - "from": { - "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", - "name": "User", - "role": "user" - }, - "locale": "", - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", - "role": "user" - }, - "attachmentLayout": "list", - "locale": "", - "speak": "Welcome to the waterfall host bot", - "inputHint": "acceptingInput", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.adaptive", - "content": { - "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", - "type": "AdaptiveCard", - "version": "1.0", - "body": [ - { - "type": "Image", - "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQtB3AwMUeNoq4gUBGe6Ocj8kyh3bXa9ZbV7u1fVKQoyKFHdkqU", - "size": "stretch" - }, - { - "type": "TextBlock", - "spacing": "Medium", - "size": "Medium", - "weight": "Bolder", - "text": "Welcome to the Skill Dialog Sample!", - "wrap": true, - "maxLines": 0, - "color": "Accent" - }, - { - "type": "TextBlock", - "size": "default", - "text": "This sample allows you to connect to a skill using a SkillDialog and invoke several actions.", - "wrap": true, - "maxLines": 0 - } - ] - } - } - ], - "entities": [], - "replyToId": "d6088360-6167-11eb-b46e-c3c3213a748e", - "id": "d71ba110-6167-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T09:53:38-03:00", - "timestamp": "2021-01-28T12:53:38.337Z" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", - "role": "user" - }, - "locale": "", - "text": "What delivery mode would you like to use?", - "speak": "What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "d6088360-6167-11eb-b46e-c3c3213a748e", - "id": "d75f60d0-6167-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T09:53:38-03:00", - "timestamp": "2021-01-28T12:53:38.781Z" - }, - { - "channelData": { - "clientActivityID": "1611838423833wj35v7pu64g", - "clientTimestamp": "2021-01-28T12:53:43.833Z" - }, - "text": "normal", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T12:53:43.851Z", - "entities": [ - { - "requiresBotState": true, - "supportsListening": true, - "supportsTts": true, - "type": "ClientCapabilities" - } - ], - "conversation": { - "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" - }, - "id": "da64ffb0-6167-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T09:53:43-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", - "role": "user" - }, - "locale": "", - "text": "What type of skill would you like to use?", - "speak": "What type of skill would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "EchoSkill", - "value": "EchoSkill" - }, - { - "type": "imBack", - "title": "WaterfallSkill", - "value": "WaterfallSkill" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "da64ffb0-6167-11eb-b46e-c3c3213a748e", - "id": "db167560-6167-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T09:53:45-03:00", - "timestamp": "2021-01-28T12:53:45.014Z" - }, - { - "channelData": { - "clientActivityID": "1611838427337752w1bylwms", - "clientTimestamp": "2021-01-28T12:53:47.337Z" - }, - "text": "WaterfallSkill", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T12:53:47.402Z", - "conversation": { - "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" - }, - "id": "dc82d6a0-6167-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T09:53:47-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", - "role": "user" - }, - "locale": "", - "text": "What skill would you like to call?", - "speak": "What skill would you like to call?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "WaterfallSkillBotDotNet", - "value": "WaterfallSkillBotDotNet" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "dc82d6a0-6167-11eb-b46e-c3c3213a748e", - "id": "dd207630-6167-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T09:53:48-03:00", - "timestamp": "2021-01-28T12:53:48.435Z" - }, - { - "channelData": { - "clientActivityID": "1611838429939ntmad398ck7", - "clientTimestamp": "2021-01-28T12:53:49.939Z" - }, - "text": "WaterfallSkillBotDotNet", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T12:53:49.965Z", - "conversation": { - "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" - }, - "id": "de0a12e0-6167-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T09:53:49-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", - "role": "user" - }, - "locale": "", - "text": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo", - "speak": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.", - "inputHint": "expectingInput", - "attachments": [], - "entities": [], - "replyToId": "de0a12e0-6167-11eb-b46e-c3c3213a748e", - "id": "dea31e90-6167-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T09:53:50-03:00", - "timestamp": "2021-01-28T12:53:50.969Z" - }, - { - "channelData": { - "clientActivityID": "16118384346899i989qque7t", - "clientTimestamp": "2021-01-28T12:53:54.689Z" - }, - "text": "Cards", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T12:53:54.717Z", - "conversation": { - "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" - }, - "id": "e0df04d0-6167-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T09:53:54-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "trace", - "timestamp": "2021-01-28T12:53:55.817Z", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", - "role": "user" - }, - "locale": "", - "replyToId": "e0df04d0-6167-11eb-b46e-c3c3213a748e", - "label": "Got ActivityType: event", - "name": "ActivityRouterDialog.ProcessActivityAsync()", - "id": "e186dd90-6167-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T09:53:55-03:00" - }, - { - "type": "trace", - "timestamp": "2021-01-28T12:53:56.114Z", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", - "role": "user" - }, - "locale": "", - "replyToId": "e0df04d0-6167-11eb-b46e-c3c3213a748e", - "label": "Name: Cards. Value: ", - "name": "ActivityRouterDialog.OnEventActivityAsync()", - "id": "e1b42f20-6167-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T09:53:56-03:00" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "d5f4ad40-6167-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "7da4d5a3-9aaf-4a03-bd62-1495536c852e", - "role": "user" - }, - "locale": "", - "text": "What card do you want?\n\n 1. AdaptiveCardBotAction\n 2. AdaptiveCardTaskModule\n 3. AdaptiveCardSumbitAction\n 4. Hero\n 5. Thumbnail\n 6. Receipt\n 7. Signin\n 8. Carousel\n 9. List\n 10. O365\n 11. TeamsFileConsent\n 12. Animation\n 13. Audio\n 14. Video\n 15. End", - "speak": "What card do you want?", - "inputHint": "expectingInput", - "attachments": [], - "entities": [], - "replyToId": "e0df04d0-6167-11eb-b46e-c3c3213a748e", - "id": "e1e26b10-6167-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T09:53:56-03:00", - "timestamp": "2021-01-28T12:53:56.417Z" - }, -] diff --git a/tests/functional/Tests/SkillFunctionalTests/Common/HostBot.cs b/tests/functional/Tests/SkillFunctionalTests/Common/HostBot.cs deleted file mode 100644 index d2aff8acd7..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/Common/HostBot.cs +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -namespace SkillFunctionalTests.Common -{ - public enum HostBot - { - /// - /// Simple host implemented using Composer and the dotnet runtime. - /// - SimpleHostBotComposerDotNet, - - /// - /// Simple host implemented using dotnet 3.1. - /// - SimpleHostBotDotNet, - - /// - /// Simple host implemented using dotnet 2.1. - /// - SimpleHostBotDotNet21, - - /// - /// Simple host implemented using JS. - /// - SimpleHostBotJS, - - /// - /// Simple host implemented using Python. - /// - SimpleHostBotPython, - - /// - /// Host implemented using dotnet and waterfall dialogs. - /// - WaterfallHostBotDotNet, - - /// - /// Host implemented using JS and waterfall dialogs. - /// - WaterfallHostBotJS, - - /// - /// Host implemented using Python and waterfall dialogs. - /// - WaterfallHostBotPython, - - /// - /// Host implemented for LegacyTests. - /// - EchoHostBot - } -} diff --git a/tests/functional/Tests/SkillFunctionalTests/Common/SkillBotNames.cs b/tests/functional/Tests/SkillFunctionalTests/Common/SkillBotNames.cs deleted file mode 100644 index 2b1422ca76..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/Common/SkillBotNames.cs +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -namespace SkillFunctionalTests.Common -{ - public static class SkillBotNames - { - public const string EchoSkillBotComposerDotNet = "EchoSkillBotComposerDotNet"; - public const string EchoSkillBotDotNet = "EchoSkillBotDotNet"; - public const string EchoSkillBotDotNet21 = "EchoSkillBotDotNet21"; - public const string EchoSkillBotDotNetV3 = "EchoSkillBotDotNetV3"; - public const string EchoSkillBotJS = "EchoSkillBotJS"; - public const string EchoSkillBotJSV3 = "EchoSkillBotJSV3"; - public const string EchoSkillBotPython = "EchoSkillBotPython"; - - public const string WaterfallSkillBotDotNet = "WaterfallSkillBotDotNet"; - public const string WaterfallSkillBotJS = "WaterfallSkillBotJS"; - public const string WaterfallSkillBotPython = "WaterfallSkillBotPython"; - - public const string EchoSkillBot = "EchoSkillBot"; - } -} diff --git a/tests/functional/Tests/SkillFunctionalTests/FileUpload/FileUploadTests.cs b/tests/functional/Tests/SkillFunctionalTests/FileUpload/FileUploadTests.cs deleted file mode 100644 index 084da720be..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/FileUpload/FileUploadTests.cs +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Threading.Tasks; -using Microsoft.Bot.Connector; -using Microsoft.Bot.Schema; -using Microsoft.Extensions.Logging; -using Newtonsoft.Json; -using SkillFunctionalTests.Common; -using TranscriptTestRunner; -using TranscriptTestRunner.XUnit; -using Xunit; -using Xunit.Abstractions; - -namespace SkillFunctionalTests.FileUpload -{ - [Trait("TestCategory", "FileUpload")] - public class FileUploadTests : ScriptTestBase - { - private readonly string _testScriptsFolder = Directory.GetCurrentDirectory() + @"/FileUpload/TestScripts"; - - public FileUploadTests(ITestOutputHelper output) - : base(output) - { - } - - public static IEnumerable TestCases() - { - var channelIds = new List { Channels.Directline }; - - var deliverModes = new List - { - DeliveryModes.Normal, - DeliveryModes.ExpectReplies - }; - - var hostBots = new List - { - HostBot.WaterfallHostBotDotNet, - HostBot.WaterfallHostBotJS, - HostBot.WaterfallHostBotPython - - // TODO: Enable these when the port to composer is ready - //HostBotNames.ComposerHostBotDotNet - }; - - var targetSkills = new List - { - SkillBotNames.WaterfallSkillBotDotNet, - SkillBotNames.WaterfallSkillBotJS, - SkillBotNames.WaterfallSkillBotPython - - // TODO: Enable these when the port to composer is ready - //SkillBotNames.ComposerSkillBotDotNet - }; - - var scripts = new List - { - "FileUpload1.json" - }; - - var testCaseBuilder = new TestCaseBuilder(); - var testCases = testCaseBuilder.BuildTestCases(channelIds, deliverModes, hostBots, targetSkills, scripts); - foreach (var testCase in testCases) - { - yield return testCase; - } - } - - [Theory] - [MemberData(nameof(TestCases))] - public async Task RunTestCases(TestCaseDataObject testData) - { - const string fileName = "TestFile.txt"; - var testGuid = Guid.NewGuid().ToString(); - var testCase = testData.GetObject(); - Logger.LogInformation(JsonConvert.SerializeObject(testCase, Formatting.Indented)); - - var options = TestClientOptions[testCase.HostBot]; - var runner = new XUnitTestRunner(new TestClientFactory(testCase.ChannelId, options, Logger).GetTestClient(), TestRequestTimeout, Logger); - - // Execute the first part of the conversation. - var testParams = new Dictionary - { - { "DeliveryMode", testCase.DeliveryMode }, - { "TargetSkill", testCase.TargetSkill }, - { "FileName", fileName }, - { "TestGuid", testGuid } - }; - - await runner.RunTestAsync(Path.Combine(_testScriptsFolder, testCase.Script), testParams); - - // Create or Update testFile. - await using var stream = File.OpenWrite(Directory.GetCurrentDirectory() + $"/FileUpload/Media/{fileName}"); - await using var writer = new StreamWriter(stream); - await writer.WriteLineAsync($"GUID:{testGuid}"); - writer.Close(); - - // Upload file. - await using var file = File.OpenRead(Directory.GetCurrentDirectory() + $"/FileUpload/Media/{fileName}"); - await runner.UploadAsync(file); - - // Execute the rest of the conversation. - await runner.RunTestAsync(Path.Combine(_testScriptsFolder, "FileUpload2.json"), testParams); - } - } -} diff --git a/tests/functional/Tests/SkillFunctionalTests/FileUpload/Media/TestFile.txt b/tests/functional/Tests/SkillFunctionalTests/FileUpload/Media/TestFile.txt deleted file mode 100644 index af27ff4986..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/FileUpload/Media/TestFile.txt +++ /dev/null @@ -1 +0,0 @@ -This is a test file. \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload1.json b/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload1.json deleted file mode 100644 index 45098d7133..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload1.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "items": [ - { - "type": "conversationUpdate", - "role": "user" - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "attachmentLayout == 'list'", - "speak == 'Welcome to the waterfall host bot'", - "inputHint == 'acceptingInput'", - "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'", - "attachments[0].content.type == 'AdaptiveCard'", - "attachments[0].content.body[0].type == 'Image'", - "attachments[0].content.body[0].size == 'stretch'", - "attachments[0].content.body[1].type == 'TextBlock'", - "attachments[0].content.body[1].spacing == 'Medium'", - "attachments[0].content.body[1].size == 'Medium'", - "attachments[0].content.body[1].weight == 'Bolder'", - "attachments[0].content.body[1].text == 'Welcome to the Skill Dialog Sample!'", - "attachments[0].content.body[1].wrap == true", - "attachments[0].content.body[1].color == 'Accent'", - "attachments[0].content.body[2].type == 'TextBlock'", - "attachments[0].content.body[2].text == 'This sample allows you to connect to a skill using a SkillDialog and invoke several actions.'", - "attachments[0].content.body[2].wrap == true" - ] - }, - { - "type": "message", - "role": "bot", - "text": "What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'What delivery mode would you like to use?'", - "speak == 'What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - }, - { - "type": "message", - "role": "user", - "text": "${DeliveryMode}" - }, - { - "type": "message", - "role": "bot", - "text": "What group of skills would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'What group of skills would you like to use?'", - "speak == 'What group of skills would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'", - "suggestedActions.actions[0].value == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'" - ] - }, - { - "type": "message", - "role": "user", - "text": "Waterfall" - }, - { - "type": "message", - "role": "bot", - "text": "What skill would you like to call?\n\n 1. WaterfallSkillBotDotNet\n 2. WaterfallSkillBotJS\n 3. WaterfallSkillBotPython", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "startsWith(text, 'What skill would you like to call?')", - "speak == 'What skill would you like to call?'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "${TargetSkill}" - }, - { - "type": "message", - "role": "bot", - "text": "Select an action to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Select an action to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update'", - "speak == 'Select an action to send to **${TargetSkill}**.'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "FileUpload" - }, - { - "type": "trace", - "role": "bot", - "assertions": [ - "type == 'trace'", - "from.role == 'bot'", - "recipient.role == 'user'", - "label == 'Got ActivityType: event'", - "name == 'ActivityRouterDialog.ProcessActivityAsync()'" - ] - }, - { - "type": "trace", - "role": "bot", - "assertions": [ - "type == 'trace'", - "from.role == 'bot'", - "recipient.role == 'user'", - "label == 'Name: FileUpload. Value: '", - "name == 'ActivityRouterDialog.OnEventActivityAsync()'" - ] - }, - { - "type": "message", - "role": "bot", - "text": "Please upload a file to continue.", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Please upload a file to continue.'" - ] - } - ] -} diff --git a/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload1.transcript b/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload1.transcript deleted file mode 100644 index cc5270a21e..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload1.transcript +++ /dev/null @@ -1,434 +0,0 @@ -[ - { - "type": "conversationUpdate", - "membersAdded": [ - { - "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", - "name": "Bot" - }, - { - "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", - "name": "User" - } - ], - "membersRemoved": [], - "channelId": "emulator", - "conversation": { - "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" - }, - "id": "cd00e2e0-60d5-11eb-9a74-bb9adba325d2", - "localTimestamp": "2021-01-27T16:28:14-03:00", - "recipient": { - "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", - "name": "Bot", - "role": "bot" - }, - "timestamp": "2021-01-27T19:28:14.862Z", - "from": { - "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", - "name": "User", - "role": "user" - }, - "locale": "en-US", - "serviceUrl": "https://506512dd91f3.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://506512dd91f3.ngrok.io", - "channelId": "emulator", - "from": { - "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" - }, - "recipient": { - "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", - "role": "user" - }, - "attachmentLayout": "list", - "locale": "en-US", - "speak": "Welcome to the waterfall host bot", - "inputHint": "acceptingInput", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.adaptive", - "content": { - "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", - "type": "AdaptiveCard", - "version": "1.0", - "body": [ - { - "type": "Image", - "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQtB3AwMUeNoq4gUBGe6Ocj8kyh3bXa9ZbV7u1fVKQoyKFHdkqU", - "size": "stretch" - }, - { - "type": "TextBlock", - "spacing": "Medium", - "size": "Medium", - "weight": "Bolder", - "text": "Welcome to the Skill Dialog Sample!", - "wrap": true, - "maxLines": 0, - "color": "Accent" - }, - { - "type": "TextBlock", - "size": "default", - "text": "This sample allows you to connect to a skill using a SkillDialog and invoke several actions.", - "wrap": true, - "maxLines": 0 - } - ] - } - } - ], - "entities": [], - "replyToId": "cd00e2e0-60d5-11eb-9a74-bb9adba325d2", - "id": "cdb9f9b0-60d5-11eb-9a74-bb9adba325d2", - "localTimestamp": "2021-01-27T16:28:16-03:00", - "timestamp": "2021-01-27T19:28:16.075Z" - }, - { - "type": "message", - "serviceUrl": "https://506512dd91f3.ngrok.io", - "channelId": "emulator", - "from": { - "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" - }, - "recipient": { - "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", - "role": "user" - }, - "locale": "en-US", - "text": "What delivery mode would you like to use?", - "speak": "What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "cd00e2e0-60d5-11eb-9a74-bb9adba325d2", - "id": "cde04660-60d5-11eb-9a74-bb9adba325d2", - "localTimestamp": "2021-01-27T16:28:16-03:00", - "timestamp": "2021-01-27T19:28:16.326Z" - }, - { - "channelData": { - "clientActivityID": "16117756974587xlkqssva0r", - "clientTimestamp": "2021-01-27T19:28:17.458Z" - }, - "text": "normal", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", - "name": "User", - "role": "user" - }, - "locale": "en-US", - "timestamp": "2021-01-27T19:28:17.472Z", - "entities": [ - { - "requiresBotState": true, - "supportsListening": true, - "supportsTts": true, - "type": "ClientCapabilities" - } - ], - "conversation": { - "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" - }, - "id": "ce8f2400-60d5-11eb-9a74-bb9adba325d2", - "localTimestamp": "2021-01-27T16:28:17-03:00", - "recipient": { - "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://506512dd91f3.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://506512dd91f3.ngrok.io", - "channelId": "emulator", - "from": { - "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" - }, - "recipient": { - "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", - "role": "user" - }, - "locale": "en-US", - "text": "What type of skill would you like to use?", - "speak": "What type of skill would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "EchoSkill", - "value": "EchoSkill" - }, - { - "type": "imBack", - "title": "WaterfallSkill", - "value": "WaterfallSkill" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "ce8f2400-60d5-11eb-9a74-bb9adba325d2", - "id": "cf180310-60d5-11eb-9a74-bb9adba325d2", - "localTimestamp": "2021-01-27T16:28:18-03:00", - "timestamp": "2021-01-27T19:28:18.369Z" - }, - { - "channelData": { - "clientActivityID": "1611775699426cx57468bwb6", - "clientTimestamp": "2021-01-27T19:28:19.427Z" - }, - "text": "WaterfallSkill", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", - "name": "User", - "role": "user" - }, - "locale": "en-US", - "timestamp": "2021-01-27T19:28:19.441Z", - "conversation": { - "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" - }, - "id": "cfbb9610-60d5-11eb-9a74-bb9adba325d2", - "localTimestamp": "2021-01-27T16:28:19-03:00", - "recipient": { - "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://506512dd91f3.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://506512dd91f3.ngrok.io", - "channelId": "emulator", - "from": { - "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" - }, - "recipient": { - "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", - "role": "user" - }, - "locale": "en-US", - "text": "What skill would you like to call?", - "speak": "What skill would you like to call?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "WaterfallSkillBotDotNet", - "value": "WaterfallSkillBotDotNet" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "cfbb9610-60d5-11eb-9a74-bb9adba325d2", - "id": "d04363b0-60d5-11eb-9a74-bb9adba325d2", - "localTimestamp": "2021-01-27T16:28:20-03:00", - "timestamp": "2021-01-27T19:28:20.331Z" - }, - { - "channelData": { - "clientActivityID": "1611775701238btqor6clvrg", - "clientTimestamp": "2021-01-27T19:28:21.238Z" - }, - "text": "WaterfallSkillBotDotNet", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", - "name": "User", - "role": "user" - }, - "locale": "en-US", - "timestamp": "2021-01-27T19:28:21.255Z", - "conversation": { - "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" - }, - "id": "d0d06170-60d5-11eb-9a74-bb9adba325d2", - "localTimestamp": "2021-01-27T16:28:21-03:00", - "recipient": { - "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://506512dd91f3.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://506512dd91f3.ngrok.io", - "channelId": "emulator", - "from": { - "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" - }, - "recipient": { - "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", - "role": "user" - }, - "locale": "en-US", - "text": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo", - "speak": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.", - "inputHint": "expectingInput", - "attachments": [], - "entities": [], - "replyToId": "d0d06170-60d5-11eb-9a74-bb9adba325d2", - "id": "d15a7900-60d5-11eb-9a74-bb9adba325d2", - "localTimestamp": "2021-01-27T16:28:22-03:00", - "timestamp": "2021-01-27T19:28:22.159Z" - }, - { - "channelData": { - "clientActivityID": "1611775705642g7ss96aqemf", - "clientTimestamp": "2021-01-27T19:28:25.642Z" - }, - "text": "FileUpload", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", - "name": "User", - "role": "user" - }, - "locale": "en-US", - "timestamp": "2021-01-27T19:28:25.677Z", - "conversation": { - "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" - }, - "id": "d3731fd0-60d5-11eb-9a74-bb9adba325d2", - "localTimestamp": "2021-01-27T16:28:25-03:00", - "recipient": { - "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://506512dd91f3.ngrok.io" - }, - { - "type": "trace", - "timestamp": "2021-01-27T19:28:26.806Z", - "serviceUrl": "https://506512dd91f3.ngrok.io", - "channelId": "emulator", - "from": { - "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" - }, - "recipient": { - "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", - "role": "user" - }, - "locale": "en-US", - "replyToId": "d3731fd0-60d5-11eb-9a74-bb9adba325d2", - "label": "Got ActivityType: event", - "name": "ActivityRouterDialog.ProcessActivityAsync()", - "id": "d41f6560-60d5-11eb-9a74-bb9adba325d2", - "localTimestamp": "2021-01-27T16:28:26-03:00" - }, - { - "type": "trace", - "timestamp": "2021-01-27T19:28:27.070Z", - "serviceUrl": "https://506512dd91f3.ngrok.io", - "channelId": "emulator", - "from": { - "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" - }, - "recipient": { - "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", - "role": "user" - }, - "locale": "en-US", - "replyToId": "d3731fd0-60d5-11eb-9a74-bb9adba325d2", - "label": "Name: FileUpload. Value: ", - "name": "ActivityRouterDialog.OnEventActivityAsync()", - "id": "d447ade0-60d5-11eb-9a74-bb9adba325d2", - "localTimestamp": "2021-01-27T16:28:27-03:00" - }, - { - "type": "message", - "serviceUrl": "https://506512dd91f3.ngrok.io", - "channelId": "emulator", - "from": { - "id": "cc657090-60b1-11eb-8abe-e3b86321e5ec", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "ccf941c0-60d5-11eb-8abe-e3b86321e5ec|livechat" - }, - "recipient": { - "id": "ff961b1d-815c-4e98-87fd-ac1db5ea78a3", - "role": "user" - }, - "locale": "en-US", - "text": "Please upload a file to continue.", - "inputHint": "acceptingInput", - "attachments": [], - "entities": [], - "replyToId": "d3731fd0-60d5-11eb-9a74-bb9adba325d2", - "id": "d46e6fc0-60d5-11eb-9a74-bb9adba325d2", - "localTimestamp": "2021-01-27T16:28:27-03:00", - "timestamp": "2021-01-27T19:28:27.324Z" - } -] diff --git a/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload2.json b/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload2.json deleted file mode 100644 index 49696744d4..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload2.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "items": [ - { - "type": "message", - "role": "bot", - "text": "Attachment \"${FileName}\" has been received.\r\nFile content: GUID:${TestGuid}\r\n\r\n", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "startsWith(text, 'Attachment \"${FileName}\" has been received.\r\nFile content: GUID:${TestGuid}')", - "inputHint == 'acceptingInput'" - ] - }, - { - "type": "message", - "role": "bot", - "text": "Do you want to upload another file?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Do you want to upload another file?'", - "speak == 'Do you want to upload another file?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'Yes'", - "suggestedActions.actions[0].value == 'Yes'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'No'", - "suggestedActions.actions[1].value == 'No'" - ] - }, - { - "type": "message", - "role": "user", - "text": "No" - }, - { - "type": "message", - "role": "bot", - "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - } - ] -} diff --git a/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload2.transcript b/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload2.transcript deleted file mode 100644 index d785b4b3ff..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/FileUpload/TestScripts/FileUpload2.transcript +++ /dev/null @@ -1,138 +0,0 @@ -[ - { - "type": "message", - "serviceUrl": "https://7e981c20ff5a.ngrok.io", - "channelId": "emulator", - "from": { - "id": "19b99450-a209-11eb-9135-ffc715768685", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "19c30a30-a209-11eb-8b44-53ccf8d65f4d|livechat" - }, - "recipient": { - "id": "0c3116ae-0d26-4a5f-8483-1082c9ab6c7f", - "role": "user" - }, - "locale": "", - "text": "Attachment \"test2.txt\" has been received.\r\nFile content: GUID:1234\r\n", - "inputHint": "acceptingInput", - "attachments": [], - "entities": [], - "replyToId": "2df8af51-a209-11eb-8b44-53ccf8d65f4d", - "id": "2ed3cd10-a209-11eb-8b44-53ccf8d65f4d", - "localTimestamp": "2021-04-20T15:49:48-03:00", - "timestamp": "2021-04-20T18:49:48.897Z" - }, - { - "type": "message", - "serviceUrl": "https://7e981c20ff5a.ngrok.io", - "channelId": "emulator", - "from": { - "id": "19b99450-a209-11eb-9135-ffc715768685", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "19c30a30-a209-11eb-8b44-53ccf8d65f4d|livechat" - }, - "recipient": { - "id": "0c3116ae-0d26-4a5f-8483-1082c9ab6c7f", - "role": "user" - }, - "locale": "", - "text": "Do you want to upload another file?", - "speak": "Do you want to upload another file?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "Yes", - "value": "Yes" - }, - { - "type": "imBack", - "title": "No", - "value": "No" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "2df8af51-a209-11eb-8b44-53ccf8d65f4d", - "id": "2f160630-a209-11eb-8b44-53ccf8d65f4d", - "localTimestamp": "2021-04-20T15:49:49-03:00", - "timestamp": "2021-04-20T18:49:49.331Z" - }, - { - "channelData": { - "clientActivityID": "1618944597322y3mgzbre63", - "clientTimestamp": "2021-04-20T18:49:57.322Z" - }, - "text": "No", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "0c3116ae-0d26-4a5f-8483-1082c9ab6c7f", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-04-20T18:49:57.359Z", - "conversation": { - "id": "19c30a30-a209-11eb-8b44-53ccf8d65f4d|livechat" - }, - "id": "33defff0-a209-11eb-8b44-53ccf8d65f4d", - "localTimestamp": "2021-04-20T15:49:57-03:00", - "recipient": { - "id": "19b99450-a209-11eb-9135-ffc715768685", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://7e981c20ff5a.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://7e981c20ff5a.ngrok.io", - "channelId": "emulator", - "from": { - "id": "19b99450-a209-11eb-9135-ffc715768685", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "19c30a30-a209-11eb-8b44-53ccf8d65f4d|livechat" - }, - "recipient": { - "id": "0c3116ae-0d26-4a5f-8483-1082c9ab6c7f", - "role": "user" - }, - "locale": "", - "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "33defff0-a209-11eb-8b44-53ccf8d65f4d", - "id": "34157940-a209-11eb-8b44-53ccf8d65f4d", - "localTimestamp": "2021-04-20T15:49:57-03:00", - "timestamp": "2021-04-20T18:49:57.716Z" - } -] \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/TestScripts/MessageWithAttachment.json b/tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/TestScripts/MessageWithAttachment.json deleted file mode 100644 index 3efa3c468d..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/TestScripts/MessageWithAttachment.json +++ /dev/null @@ -1,281 +0,0 @@ -{ - "items": [ - { - "type": "conversationUpdate", - "role": "user" - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "attachmentLayout == 'list'", - "speak == 'Welcome to the waterfall host bot'", - "inputHint == 'acceptingInput'", - "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'", - "attachments[0].content.type == 'AdaptiveCard'", - "attachments[0].content.body[0].type == 'Image'", - "attachments[0].content.body[0].size == 'stretch'", - "attachments[0].content.body[1].type == 'TextBlock'", - "attachments[0].content.body[1].spacing == 'Medium'", - "attachments[0].content.body[1].size == 'Medium'", - "attachments[0].content.body[1].weight == 'Bolder'", - "attachments[0].content.body[1].text == 'Welcome to the Skill Dialog Sample!'", - "attachments[0].content.body[1].wrap == True", - "attachments[0].content.body[1].color == 'Accent'", - "attachments[0].content.body[2].type == 'TextBlock'", - "attachments[0].content.body[2].text == 'This sample allows you to connect to a skill using a SkillDialog and invoke several actions.'", - "attachments[0].content.body[2].wrap == True" - ] - }, - { - "type": "message", - "role": "bot", - "text": "What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'What delivery mode would you like to use?'", - "speak == 'What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - }, - { - "type": "message", - "role": "user", - "text": "${DeliveryMode}" - }, - { - "type": "message", - "role": "bot", - "text": "What group of skills would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'What group of skills would you like to use?'", - "speak == 'What group of skills would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'", - "suggestedActions.actions[0].value == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'" - ] - }, - { - "type": "message", - "role": "user", - "text": "Waterfall" - }, - { - "type": "message", - "role": "bot", - "text": "What skill would you like to call?\n\n 1. WaterfallSkillBotDotNet\n 2. WaterfallSkillBotJS\n 3. WaterfallSkillBotPython", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "startsWith(text, 'What skill would you like to call?')", - "speak == 'What skill would you like to call?'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "${TargetSkill}" - }, - { - "type": "message", - "role": "bot", - "text": "Select an action # to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Select an action to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update'", - "speak == 'Select an action to send to **${TargetSkill}**.'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "MessageWithAttachment" - }, - { - "type": "trace", - "role": "bot", - "assertions": [ - "type == 'trace'", - "from.role == 'bot'", - "recipient.role == 'user'", - "label == 'Got ActivityType: event'", - "name == 'ActivityRouterDialog.ProcessActivityAsync()'" - ] - }, - { - "type": "trace", - "role": "bot", - "assertions": [ - "type == 'trace'", - "from.role == 'bot'", - "recipient.role == 'user'", - "label == 'Name: Attachment. Value: '", - "name == 'ActivityRouterDialog.OnEventActivityAsync()'" - ] - }, - { - "type": "message", - "role": "bot", - "text": "What attachment type do you want?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'What attachment type do you want?'", - "speak == 'What attachment type do you want?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'Inline'", - "suggestedActions.actions[0].value == 'Inline'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'Internet'", - "suggestedActions.actions[1].value == 'Internet'" - ] - }, - { - "type": "message", - "role": "user", - "text": "Inline" - }, - { - "type": "message", - "role": "bot", - "text": "This is an inline attachment.", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'This is an inline attachment.'", - "inputHint == 'ignoringInput'", - "attachments[0].contentType == 'image/png'", - "attachments[0].name == 'Files/architecture-resize.png'" - ] - }, - { - "type": "message", - "role": "bot", - "text": "Do you want another type of attachment?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Do you want another type of attachment?'", - "speak == 'Do you want another type of attachment?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'Yes'", - "suggestedActions.actions[0].value == 'Yes'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'No'", - "suggestedActions.actions[1].value == 'No'" - ] - }, - { - "type": "message", - "role": "user", - "text": "Yes" - }, - { - "type": "message", - "role": "bot", - "text": "What attachment type do you want?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'What attachment type do you want?'", - "speak == 'What attachment type do you want?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'Inline'", - "suggestedActions.actions[0].value == 'Inline'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'Internet'", - "suggestedActions.actions[1].value == 'Internet'" - ] - }, - { - "type": "message", - "role": "user", - "text": "Internet" - }, - { - "type": "message", - "role": "bot", - "text": "This is an attachment from a HTTP URL.", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'This is an attachment from a HTTP URL.'", - "inputHint == 'ignoringInput'", - "attachments[0].contentType == 'image/png'", - "endsWith(attachments[0].contentUrl, 'images/architecture-resize.png')", - "attachments[0].name == 'Files/architecture-resize.png'" - ] - }, - { - "type": "message", - "role": "bot", - "text": "Do you want another type of attachment?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Do you want another type of attachment?'", - "speak == 'Do you want another type of attachment?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'Yes'", - "suggestedActions.actions[0].value == 'Yes'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'No'", - "suggestedActions.actions[1].value == 'No'" - ] - }, - { - "type": "message", - "role": "user", - "text": "No" - }, - { - "type": "message", - "role": "bot", - "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - } - ] -} diff --git a/tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/TestScripts/MessageWithAttachment.transcript b/tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/TestScripts/MessageWithAttachment.transcript deleted file mode 100644 index 112a5cde62..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/MessageWithAttachment/TestScripts/MessageWithAttachment.transcript +++ /dev/null @@ -1,789 +0,0 @@ -[ - { - "type": "conversationUpdate", - "membersAdded": [ - { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot" - }, - { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "name": "User" - } - ], - "membersRemoved": [], - "channelId": "emulator", - "conversation": { - "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" - }, - "id": "9496dfd0-616c-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:27:34-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "timestamp": "2021-01-28T13:27:34.221Z", - "from": { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "name": "User", - "role": "user" - }, - "locale": "", - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "role": "user" - }, - "attachmentLayout": "list", - "locale": "", - "speak": "Welcome to the waterfall host bot", - "inputHint": "acceptingInput", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.adaptive", - "content": { - "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", - "type": "AdaptiveCard", - "version": "1.0", - "body": [ - { - "type": "Image", - "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQtB3AwMUeNoq4gUBGe6Ocj8kyh3bXa9ZbV7u1fVKQoyKFHdkqU", - "size": "stretch" - }, - { - "type": "TextBlock", - "spacing": "Medium", - "size": "Medium", - "weight": "Bolder", - "text": "Welcome to the Skill Dialog Sample!", - "wrap": true, - "maxLines": 0, - "color": "Accent" - }, - { - "type": "TextBlock", - "size": "default", - "text": "This sample allows you to connect to a skill using a SkillDialog and invoke several actions.", - "wrap": true, - "maxLines": 0 - } - ] - } - } - ], - "entities": [], - "replyToId": "9496dfd0-616c-11eb-b46e-c3c3213a748e", - "id": "9544fa20-616c-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:27:35-03:00", - "timestamp": "2021-01-28T13:27:35.362Z" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "role": "user" - }, - "locale": "", - "text": "What delivery mode would you like to use?", - "speak": "What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "9496dfd0-616c-11eb-b46e-c3c3213a748e", - "id": "956e2d00-616c-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:27:35-03:00", - "timestamp": "2021-01-28T13:27:35.632Z" - }, - { - "channelData": { - "clientActivityID": "1611840456587v84hgz17ny8", - "clientTimestamp": "2021-01-28T13:27:36.587Z" - }, - "text": "normal", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:27:36.608Z", - "entities": [ - { - "requiresBotState": true, - "supportsListening": true, - "supportsTts": true, - "type": "ClientCapabilities" - } - ], - "conversation": { - "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" - }, - "id": "96031a00-616c-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:27:36-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "role": "user" - }, - "locale": "", - "text": "What type of skill would you like to use?", - "speak": "What type of skill would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "EchoSkill", - "value": "EchoSkill" - }, - { - "type": "imBack", - "title": "WaterfallSkill", - "value": "WaterfallSkill" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "96031a00-616c-11eb-b46e-c3c3213a748e", - "id": "96980700-616c-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:27:37-03:00", - "timestamp": "2021-01-28T13:27:37.584Z" - }, - { - "channelData": { - "clientActivityID": "16118404585657p5vbek9bxa", - "clientTimestamp": "2021-01-28T13:27:38.565Z" - }, - "text": "WaterfallSkill", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:27:38.588Z", - "conversation": { - "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" - }, - "id": "973139c0-616c-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:27:38-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "role": "user" - }, - "locale": "", - "text": "What skill would you like to call?", - "speak": "What skill would you like to call?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "WaterfallSkillBotDotNet", - "value": "WaterfallSkillBotDotNet" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "973139c0-616c-11eb-b46e-c3c3213a748e", - "id": "97cf2770-616c-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:27:39-03:00", - "timestamp": "2021-01-28T13:27:39.623Z" - }, - { - "channelData": { - "clientActivityID": "1611840461032eejmg7hkwgc", - "clientTimestamp": "2021-01-28T13:27:41.032Z" - }, - "text": "WaterfallSkillBotDotNet", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:27:41.053Z", - "conversation": { - "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" - }, - "id": "98a95ad0-616c-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:27:41-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "role": "user" - }, - "locale": "", - "text": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo", - "speak": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.", - "inputHint": "expectingInput", - "attachments": [], - "entities": [], - "replyToId": "98a95ad0-616c-11eb-b46e-c3c3213a748e", - "id": "993e6ee0-616c-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:27:42-03:00", - "timestamp": "2021-01-28T13:27:42.029Z" - }, - { - "channelData": { - "clientActivityID": "1611840465174eu3jly2odgv", - "clientTimestamp": "2021-01-28T13:27:45.174Z" - }, - "text": "4", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:27:45.203Z", - "conversation": { - "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" - }, - "id": "9b229830-616c-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:27:45-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "trace", - "timestamp": "2021-01-28T13:27:46.200Z", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "role": "user" - }, - "locale": "", - "replyToId": "9b229830-616c-11eb-b46e-c3c3213a748e", - "label": "Got ActivityType: event", - "name": "ActivityRouterDialog.ProcessActivityAsync()", - "id": "9bbab980-616c-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:27:46-03:00" - }, - { - "type": "trace", - "timestamp": "2021-01-28T13:27:46.485Z", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "role": "user" - }, - "locale": "", - "replyToId": "9b229830-616c-11eb-b46e-c3c3213a748e", - "label": "Name: MessageWithAttachment. Value: ", - "name": "ActivityRouterDialog.OnEventActivityAsync()", - "id": "9be63650-616c-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:27:46-03:00" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "role": "user" - }, - "locale": "", - "text": "What card do you want?", - "speak": "What card do you want?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "Inline", - "value": "Inline" - }, - { - "type": "imBack", - "title": "Internet", - "value": "Internet" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "9b229830-616c-11eb-b46e-c3c3213a748e", - "id": "9c10efd0-616c-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:27:46-03:00", - "timestamp": "2021-01-28T13:27:46.765Z" - }, - { - "channelData": { - "clientActivityID": "16118405051429uurdklppdu", - "clientTimestamp": "2021-01-28T13:28:25.142Z" - }, - "text": "Inline", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:28:25.198Z", - "conversation": { - "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" - }, - "id": "b2f958e0-616c-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:28:25-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "role": "user" - }, - "locale": "", - "text": "This is an inline attachment.", - "inputHint": "acceptingInput", - "attachments": [ - { - "contentType": "image/png", - "contentUrl": "data:image/png;base64,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", - "name": "Files\\architecture-resize.png" - } - ], - "entities": [], - "replyToId": "b2f958e0-616c-11eb-b46e-c3c3213a748e", - "id": "b57b96f0-616c-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:28:29-03:00", - "timestamp": "2021-01-28T13:28:29.407Z" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "role": "user" - }, - "locale": "", - "text": "Do you want another type of attachment?", - "speak": "Do you want another type of attachment?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "Yes", - "value": "Yes" - }, - { - "type": "imBack", - "title": "No", - "value": "No" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "b2f958e0-616c-11eb-b46e-c3c3213a748e", - "id": "b5a82530-616c-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:28:29-03:00", - "timestamp": "2021-01-28T13:28:29.699Z" - }, - { - "channelData": { - "clientActivityID": "16118405370383nul2pf807g", - "clientTimestamp": "2021-01-28T13:28:57.038Z" - }, - "text": "Yes", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:28:57.116Z", - "conversation": { - "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" - }, - "id": "c5ffa5c0-616c-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:28:57-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "role": "user" - }, - "locale": "", - "text": "What card do you want?", - "speak": "What card do you want?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "Inline", - "value": "Inline" - }, - { - "type": "imBack", - "title": "Internet", - "value": "Internet" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "c5ffa5c0-616c-11eb-b46e-c3c3213a748e", - "id": "c6c4f190-616c-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:28:58-03:00", - "timestamp": "2021-01-28T13:28:58.409Z" - }, - { - "channelData": { - "clientActivityID": "16118405437189fvw0nchfd", - "clientTimestamp": "2021-01-28T13:29:03.718Z" - }, - "text": "Internet", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:29:03.775Z", - "conversation": { - "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" - }, - "id": "c9f7baf0-616c-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:29:03-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "role": "user" - }, - "locale": "", - "text": "This is an attachment from a HTTP URL.", - "inputHint": "acceptingInput", - "attachments": [ - { - "contentType": "image/png", - "contentUrl": "https://docs.microsoft.com/en-us/bot-framework/media/how-it-works/architecture-resize.png", - "name": "Files\\architecture-resize.png" - } - ], - "entities": [], - "replyToId": "c9f7baf0-616c-11eb-b46e-c3c3213a748e", - "id": "caae87d0-616c-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:29:04-03:00", - "timestamp": "2021-01-28T13:29:04.973Z" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "role": "user" - }, - "locale": "", - "text": "Do you want another type of attachment?", - "speak": "Do you want another type of attachment?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "Yes", - "value": "Yes" - }, - { - "type": "imBack", - "title": "No", - "value": "No" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "c9f7baf0-616c-11eb-b46e-c3c3213a748e", - "id": "cad9dd90-616c-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:29:05-03:00", - "timestamp": "2021-01-28T13:29:05.257Z" - }, - { - "channelData": { - "clientActivityID": "1611840562624thw0ki5mdtf", - "clientTimestamp": "2021-01-28T13:29:22.624Z" - }, - "text": "No", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:29:22.702Z", - "conversation": { - "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" - }, - "id": "d53fc2e0-616c-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:29:22-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "94732b31-616c-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "0db3a1e0-bca8-4e54-af83-13efe060d8dd", - "role": "user" - }, - "locale": "", - "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "d53fc2e0-616c-11eb-b46e-c3c3213a748e", - "id": "d5dffa80-616c-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:29:23-03:00", - "timestamp": "2021-01-28T13:29:23.752Z" - } -] diff --git a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/ProactiveTests.cs b/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/ProactiveTests.cs deleted file mode 100644 index cf5fb00613..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/ProactiveTests.cs +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Collections.Generic; -using System.IO; -using System.Net.Http; -using System.Threading.Tasks; -using Microsoft.Bot.Connector; -using Microsoft.Bot.Schema; -using Microsoft.Extensions.Logging; -using Newtonsoft.Json; -using SkillFunctionalTests.Common; -using TranscriptTestRunner; -using TranscriptTestRunner.XUnit; -using Xunit; -using Xunit.Abstractions; - -namespace SkillFunctionalTests.ProactiveMessages -{ - [Trait("TestCategory", "ProactiveMessages")] - public class ProactiveTests : ScriptTestBase - { - private readonly string _testScriptsFolder = Directory.GetCurrentDirectory() + @"/ProactiveMessages/TestScripts"; - - public ProactiveTests(ITestOutputHelper output) - : base(output) - { - } - - public static IEnumerable TestCases() - { - var channelIds = new List { Channels.Directline }; - var deliverModes = new List - { - DeliveryModes.Normal, - DeliveryModes.ExpectReplies - }; - - var hostBots = new List - { - HostBot.WaterfallHostBotDotNet, - HostBot.WaterfallHostBotJS, - HostBot.WaterfallHostBotPython, - - // TODO: Enable this when the port to composer is ready - //HostBot.ComposerHostBotDotNet - }; - - var targetSkills = new List - { - SkillBotNames.WaterfallSkillBotDotNet, - SkillBotNames.WaterfallSkillBotPython, - - // TODO: Enable these when the ports to JS, and composer are ready - //SkillBotNames.WaterfallSkillBotJS, - //SkillBotNames.ComposerSkillBotDotNet - }; - - var scripts = new List - { - "ProactiveStart.json", - }; - - var testCaseBuilder = new TestCaseBuilder(); - - var testCases = testCaseBuilder.BuildTestCases(channelIds, deliverModes, hostBots, targetSkills, scripts); - foreach (var testCase in testCases) - { - yield return testCase; - } - } - - [Theory] - [MemberData(nameof(TestCases))] - public async Task RunTestCases(TestCaseDataObject testData) - { - var userId = string.Empty; - var url = string.Empty; - - var testCase = testData.GetObject(); - Logger.LogInformation(JsonConvert.SerializeObject(testCase, Formatting.Indented)); - - var options = TestClientOptions[testCase.HostBot]; - var runner = new XUnitTestRunner(new TestClientFactory(testCase.ChannelId, options, Logger).GetTestClient(), TestRequestTimeout, Logger); - - var testParamsStart = new Dictionary - { - { "DeliveryMode", testCase.DeliveryMode }, - { "TargetSkill", testCase.TargetSkill } - }; - - // Execute the first part of the conversation. - await runner.RunTestAsync(Path.Combine(_testScriptsFolder, testCase.Script), testParamsStart); - - await runner.AssertReplyAsync(activity => - { - Assert.Equal(ActivityTypes.Message, activity.Type); - Assert.Contains("Navigate to http", activity.Text); - - var message = activity.Text.Split(" "); - url = message[2]; - userId = url.Split("user=")[1]; - }); - - // Send a get request to the message's url to continue the conversation. - using (var client = new HttpClient()) - { - await client.GetAsync(url).ConfigureAwait(false); - } - - var testParamsEnd = new Dictionary - { - { "UserId", userId }, - { "TargetSkill", testCase.TargetSkill } - }; - - // Execute the rest of the conversation passing the messageId. - await runner.RunTestAsync(Path.Combine(_testScriptsFolder, "ProactiveEnd.json"), testParamsEnd); - } - } -} diff --git a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveEnd.json b/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveEnd.json deleted file mode 100644 index 9e6671b8d0..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveEnd.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "items": [ - { - "type": "message", - "role": "bot", - "text": "Got proactive message for user: ${UserId}", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Got proactive message for user: ${UserId}'", - "inputHint == 'acceptingInput'" - ] - }, - { - "type": "message", - "role": "bot", - "text": "We received a proactive message, ending the dialog", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'We received a proactive message, ending the dialog'", - "inputHint == 'acceptingInput'" - ] - }, - { - "type": "message", - "role": "bot", - "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveEnd.transcript b/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveEnd.transcript deleted file mode 100644 index 0ee0498b53..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveEnd.transcript +++ /dev/null @@ -1,91 +0,0 @@ -[ - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", - "role": "user" - }, - "locale": "", - "text": "Got proactive message for user: ${UserId}", - "inputHint": "acceptingInput", - "replyToId": "5dfebb53-9851-449a-a86f-dff9a9155816", - "id": "f44c7b20-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:23:05-03:00", - "timestamp": "2021-01-28T13:23:05.298Z" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", - "role": "user" - }, - "locale": "", - "text": "We received a proactive message, ending the dialog", - "inputHint": "acceptingInput", - "replyToId": "5dfebb53-9851-449a-a86f-dff9a9155816", - "id": "f4789430-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:23:05-03:00", - "timestamp": "2021-01-28T13:23:05.587Z" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", - "role": "user" - }, - "locale": "", - "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "5dfebb53-9851-449a-a86f-dff9a9155816", - "id": "f4a4fb60-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:23:05-03:00", - "timestamp": "2021-01-28T13:23:05.878Z" - } -] diff --git a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveStart.json b/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveStart.json deleted file mode 100644 index 1f1b1108d8..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveStart.json +++ /dev/null @@ -1,137 +0,0 @@ -{ - "items": [ - { - "type": "conversationUpdate", - "role": "user" - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "attachmentLayout == 'list'", - "speak == 'Welcome to the waterfall host bot'", - "inputHint == 'acceptingInput'", - "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'", - "attachments[0].content.type == 'AdaptiveCard'", - "attachments[0].content.body[0].type == 'Image'", - "attachments[0].content.body[0].size == 'stretch'", - "attachments[0].content.body[1].type == 'TextBlock'", - "attachments[0].content.body[1].spacing == 'Medium'", - "attachments[0].content.body[1].size == 'Medium'", - "attachments[0].content.body[1].weight == 'Bolder'", - "attachments[0].content.body[1].text == 'Welcome to the Skill Dialog Sample!'", - "attachments[0].content.body[1].wrap == True", - "attachments[0].content.body[1].color == 'Accent'", - "attachments[0].content.body[2].type == 'TextBlock'", - "attachments[0].content.body[2].text == 'This sample allows you to connect to a skill using a SkillDialog and invoke several actions.'", - "attachments[0].content.body[2].wrap == True" - ] - }, - { - "type": "message", - "role": "bot", - "text": "What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'What delivery mode would you like to use?'", - "speak == 'What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - }, - { - "type": "message", - "role": "user", - "text": "${DeliveryMode}" - }, - { - "type": "message", - "role": "bot", - "text": "What group of skills would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'What group of skills would you like to use?'", - "speak == 'What group of skills would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'", - "suggestedActions.actions[0].value == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'" - ] - }, - { - "type": "message", - "role": "user", - "text": "Waterfall" - }, - { - "type": "message", - "role": "bot", - "text": "What skill would you like to call?\n\n 1. WaterfallSkillBotDotNet\n 2. WaterfallSkillBotJS\n 3. WaterfallSkillBotPython", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "startsWith(text, 'What skill would you like to call?')", - "speak == 'What skill would you like to call?'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "${TargetSkill}" - }, - { - "type": "message", - "role": "bot", - "text": "Select an action # to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Select an action to send to **${TargetSkill}**.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo\n 8. Delete\n 9. Update'", - "speak == 'Select an action to send to **${TargetSkill}**.'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "Proactive" - }, - { - "type": "trace", - "role": "bot", - "assertions": [ - "type == 'trace'", - "from.role == 'bot'", - "recipient.role == 'user'", - "label == 'Got ActivityType: event'", - "name == 'ActivityRouterDialog.ProcessActivityAsync()'" - ] - }, - { - "type": "trace", - "role": "bot", - "assertions": [ - "type == 'trace'", - "from.role == 'bot'", - "recipient.role == 'user'", - "label == 'Name: Proactive. Value: '", - "name == 'ActivityRouterDialog.OnEventActivityAsync()'" - ] - } - ] -} diff --git a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveStart.transcript b/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveStart.transcript deleted file mode 100644 index ef34517760..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/ProactiveMessages/TestScripts/ProactiveStart.transcript +++ /dev/null @@ -1,408 +0,0 @@ -[ - { - "type": "conversationUpdate", - "membersAdded": [ - { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot" - }, - { - "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", - "name": "User" - } - ], - "membersRemoved": [], - "channelId": "emulator", - "conversation": { - "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" - }, - "id": "981e0030-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:20:30-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "timestamp": "2021-01-28T13:20:30.643Z", - "from": { - "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", - "name": "User", - "role": "user" - }, - "locale": "", - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", - "role": "user" - }, - "attachmentLayout": "list", - "locale": "", - "speak": "Welcome to the waterfall host bot", - "inputHint": "acceptingInput", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.adaptive", - "content": { - "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", - "type": "AdaptiveCard", - "version": "1.0", - "body": [ - { - "type": "Image", - "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQtB3AwMUeNoq4gUBGe6Ocj8kyh3bXa9ZbV7u1fVKQoyKFHdkqU", - "size": "stretch" - }, - { - "type": "TextBlock", - "spacing": "Medium", - "size": "Medium", - "weight": "Bolder", - "text": "Welcome to the Skill Dialog Sample!", - "wrap": true, - "maxLines": 0, - "color": "Accent" - }, - { - "type": "TextBlock", - "size": "default", - "text": "This sample allows you to connect to a skill using a SkillDialog and invoke several actions.", - "wrap": true, - "maxLines": 0 - } - ] - } - } - ], - "entities": [], - "replyToId": "981e0030-616b-11eb-b46e-c3c3213a748e", - "id": "98f26730-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:20:32-03:00", - "timestamp": "2021-01-28T13:20:32.035Z" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", - "role": "user" - }, - "locale": "", - "text": "What delivery mode would you like to use?", - "speak": "What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "981e0030-616b-11eb-b46e-c3c3213a748e", - "id": "991c0f40-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:20:32-03:00", - "timestamp": "2021-01-28T13:20:32.308Z" - }, - { - "channelData": { - "clientActivityID": "1611840033447rjp2jvkf9jk", - "clientTimestamp": "2021-01-28T13:20:33.447Z" - }, - "text": "normal", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:20:33.472Z", - "entities": [ - { - "requiresBotState": true, - "supportsListening": true, - "supportsTts": true, - "type": "ClientCapabilities" - } - ], - "conversation": { - "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" - }, - "id": "99cdac00-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:20:33-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", - "role": "user" - }, - "locale": "", - "text": "What type of skill would you like to use?", - "speak": "What type of skill would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "EchoSkill", - "value": "EchoSkill" - }, - { - "type": "imBack", - "title": "WaterfallSkill", - "value": "WaterfallSkill" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "99cdac00-616b-11eb-b46e-c3c3213a748e", - "id": "9a618790-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:20:34-03:00", - "timestamp": "2021-01-28T13:20:34.441Z" - }, - { - "channelData": { - "clientActivityID": "1611840035554f72iioqm5u6", - "clientTimestamp": "2021-01-28T13:20:35.554Z" - }, - "text": "WaterfallSkill", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:20:35.584Z", - "conversation": { - "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" - }, - "id": "9b0ff000-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:20:35-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", - "role": "user" - }, - "locale": "", - "text": "What skill would you like to call?", - "speak": "What skill would you like to call?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "WaterfallSkillBotDotNet", - "value": "WaterfallSkillBotDotNet" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "9b0ff000-616b-11eb-b46e-c3c3213a748e", - "id": "9babe1e0-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:20:36-03:00", - "timestamp": "2021-01-28T13:20:36.606Z" - }, - { - "channelData": { - "clientActivityID": "1611840037630e91nk7asij4", - "clientTimestamp": "2021-01-28T13:20:37.630Z" - }, - "text": "WaterfallSkillBotDotNet", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:20:37.663Z", - "conversation": { - "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" - }, - "id": "9c4d2af0-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:20:37-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", - "role": "user" - }, - "locale": "", - "text": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo", - "speak": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.", - "inputHint": "expectingInput", - "attachments": [], - "entities": [], - "replyToId": "9c4d2af0-616b-11eb-b46e-c3c3213a748e", - "id": "9ce30250-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:20:38-03:00", - "timestamp": "2021-01-28T13:20:38.645Z" - }, - { - "channelData": { - "clientActivityID": "16118400442741u2eexpiomv", - "clientTimestamp": "2021-01-28T13:20:44.274Z" - }, - "text": "Proactive", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-28T13:20:44.313Z", - "conversation": { - "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" - }, - "id": "a043e090-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:20:44-03:00", - "recipient": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://9ed82cccfc76.ngrok.io" - }, - { - "type": "trace", - "timestamp": "2021-01-28T13:20:45.553Z", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", - "role": "user" - }, - "locale": "", - "replyToId": "a043e090-616b-11eb-b46e-c3c3213a748e", - "label": "Got ActivityType: event", - "name": "ActivityRouterDialog.ProcessActivityAsync()", - "id": "a1011610-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:20:45-03:00" - }, - { - "type": "trace", - "timestamp": "2021-01-28T13:20:45.845Z", - "serviceUrl": "https://9ed82cccfc76.ngrok.io", - "channelId": "emulator", - "from": { - "id": "48224d50-60a5-11eb-881a-afe376da3863", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "980966c0-616b-11eb-881a-afe376da3863|livechat" - }, - "recipient": { - "id": "bc95d182-9d74-4d9d-82ec-d650cb5e83d8", - "role": "user" - }, - "locale": "", - "replyToId": "a043e090-616b-11eb-b46e-c3c3213a748e", - "label": "Name: Proactive. Value: ", - "name": "ActivityRouterDialog.OnEventActivityAsync()", - "id": "a12da450-616b-11eb-b46e-c3c3213a748e", - "localTimestamp": "2021-01-28T10:20:45-03:00" - } -] diff --git a/tests/functional/Tests/SkillFunctionalTests/SignIn/SignInTests.cs b/tests/functional/Tests/SkillFunctionalTests/SignIn/SignInTests.cs deleted file mode 100644 index abbb3582c7..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/SignIn/SignInTests.cs +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.Bot.Connector; -using Microsoft.Bot.Schema; -using Microsoft.Extensions.Logging; -using Newtonsoft.Json; -using SkillFunctionalTests.Common; -using TranscriptTestRunner; -using TranscriptTestRunner.XUnit; -using Xunit; -using Xunit.Abstractions; - -namespace SkillFunctionalTests.SignIn -{ - [Trait("TestCategory", "SignIn")] - public class SignInTests : ScriptTestBase - { - private readonly string _testScriptsFolder = Directory.GetCurrentDirectory() + @"/SignIn/TestScripts"; - - public SignInTests(ITestOutputHelper output) - : base(output) - { - } - - public static IEnumerable TestCases() - { - var channelIds = new List { Channels.Directline }; - var deliverModes = new List - { - DeliveryModes.Normal, - DeliveryModes.ExpectReplies, - }; - - var hostBots = new List - { - HostBot.WaterfallHostBotDotNet, - HostBot.WaterfallHostBotJS, - HostBot.WaterfallHostBotPython, - - // TODO: Enable this when the port to composer is ready - //HostBot.ComposerHostBotDotNet - }; - - var targetSkills = new List - { - SkillBotNames.WaterfallSkillBotDotNet, - SkillBotNames.WaterfallSkillBotJS, - SkillBotNames.WaterfallSkillBotPython, - - // TODO: Enable this when the port to composer is ready - //SkillBotNames.ComposerSkillBotDotNet - }; - - var scripts = new List - { - "SignIn1.json" - }; - - var testCaseBuilder = new TestCaseBuilder(); - - var testCases = testCaseBuilder.BuildTestCases(channelIds, deliverModes, hostBots, targetSkills, scripts); - foreach (var testCase in testCases) - { - yield return testCase; - } - } - - [Theory] - [MemberData(nameof(TestCases))] - public async Task RunTestCases(TestCaseDataObject testData) - { - var signInUrl = string.Empty; - var testCase = testData.GetObject(); - Logger.LogInformation(JsonConvert.SerializeObject(testCase, Formatting.Indented)); - - var options = TestClientOptions[testCase.HostBot]; - var runner = new XUnitTestRunner(new TestClientFactory(testCase.ChannelId, options, Logger).GetTestClient(), TestRequestTimeout, Logger); - - var testParams = new Dictionary - { - { "DeliveryMode", testCase.DeliveryMode }, - { "TargetSkill", testCase.TargetSkill } - }; - - // Execute the first part of the conversation. - await runner.RunTestAsync(Path.Combine(_testScriptsFolder, testCase.Script), testParams); - - await runner.AssertReplyAsync(activity => - { - Assert.Equal(ActivityTypes.Message, activity.Type); - Assert.True(activity.Attachments.Count > 0); - - var card = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(activity.Attachments.FirstOrDefault().Content)); - signInUrl = card.Buttons[0].Value?.ToString(); - - Assert.False(string.IsNullOrEmpty(signInUrl)); - }); - - // Execute the SignIn. - await runner.ClientSignInAsync(signInUrl); - - // Execute the rest of the conversation passing the messageId. - await runner.RunTestAsync(Path.Combine(_testScriptsFolder, "SignIn2.json"), testParams); - } - } -} diff --git a/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn1.json b/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn1.json deleted file mode 100644 index 75f761289a..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn1.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "items": [ - { - "type": "conversationUpdate", - "role": "user" - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "attachmentLayout == 'list'", - "speak == 'Welcome to the waterfall host bot'", - "inputHint == 'acceptingInput'", - "attachments[0].contentType == 'application/vnd.microsoft.card.adaptive'", - "attachments[0].content.type == 'AdaptiveCard'", - "attachments[0].content.body[0].type == 'Image'", - "attachments[0].content.body[0].size == 'stretch'", - "attachments[0].content.body[1].type == 'TextBlock'", - "attachments[0].content.body[1].spacing == 'Medium'", - "attachments[0].content.body[1].size == 'Medium'", - "attachments[0].content.body[1].weight == 'Bolder'", - "attachments[0].content.body[1].text == 'Welcome to the Skill Dialog Sample!'", - "attachments[0].content.body[1].wrap == True", - "attachments[0].content.body[1].color == 'Accent'", - "attachments[0].content.body[2].type == 'TextBlock'", - "attachments[0].content.body[2].text == 'This sample allows you to connect to a skill using a SkillDialog and invoke several actions.'", - "attachments[0].content.body[2].wrap == True" - ] - }, - { - "type": "message", - "role": "bot", - "text": "What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'What delivery mode would you like to use?'", - "speak == 'What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - }, - { - "type": "message", - "role": "user", - "text": "${DeliveryMode}" - }, - { - "type": "message", - "role": "bot", - "text": "What group of skills would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'What group of skills would you like to use?'", - "speak == 'What group of skills would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'", - "suggestedActions.actions[0].value == 'Echo' || suggestedActions.actions[0].title == 'Waterfall' || suggestedActions.actions[0].title == 'Teams'" - ] - }, - { - "type": "message", - "role": "user", - "text": "Waterfall" - }, - { - "type": "message", - "role": "bot", - "text": "What skill would you like to call?\n\n 1. WaterfallSkillBotDotNet\n 2. WaterfallSkillBotJS\n 3. WaterfallSkillBotPython", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "startsWith(text, 'What skill would you like to call?')", - "speak == 'What skill would you like to call?'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "${TargetSkill}" - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "Auth" - } - ] -} diff --git a/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn1.transcript b/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn1.transcript deleted file mode 100644 index 71181719c3..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn1.transcript +++ /dev/null @@ -1,360 +0,0 @@ -[ - { - "type": "conversationUpdate", - "membersAdded": [ - { - "id": "73573150-60c5-11eb-b881-018622be8a2a", - "name": "Bot" - }, - { - "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", - "name": "User" - } - ], - "membersRemoved": [], - "channelId": "emulator", - "conversation": { - "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" - }, - "id": "da5e8130-60d1-11eb-8b98-b971494822a6", - "localTimestamp": "2021-01-27T15:59:59-03:00", - "recipient": { - "id": "73573150-60c5-11eb-b881-018622be8a2a", - "name": "Bot", - "role": "bot" - }, - "timestamp": "2021-01-27T18:59:59.299Z", - "from": { - "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", - "name": "User", - "role": "user" - }, - "locale": "", - "serviceUrl": "https://259039676c61.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://259039676c61.ngrok.io", - "channelId": "emulator", - "from": { - "id": "73573150-60c5-11eb-b881-018622be8a2a", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" - }, - "recipient": { - "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", - "role": "user" - }, - "attachmentLayout": "list", - "locale": "", - "speak": "Welcome to the waterfall host bot", - "inputHint": "acceptingInput", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.adaptive", - "content": { - "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", - "type": "AdaptiveCard", - "version": "1.0", - "body": [ - { - "type": "Image", - "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQtB3AwMUeNoq4gUBGe6Ocj8kyh3bXa9ZbV7u1fVKQoyKFHdkqU", - "size": "stretch" - }, - { - "type": "TextBlock", - "spacing": "Medium", - "size": "Medium", - "weight": "Bolder", - "text": "Welcome to the Skill Dialog Sample!", - "wrap": true, - "maxLines": 0, - "color": "Accent" - }, - { - "type": "TextBlock", - "size": "default", - "text": "This sample allows you to connect to a skill using a SkillDialog and invoke several actions.", - "wrap": true, - "maxLines": 0 - } - ] - } - } - ], - "entities": [], - "replyToId": "da5e8130-60d1-11eb-8b98-b971494822a6", - "id": "db473380-60d1-11eb-8b98-b971494822a6", - "localTimestamp": "2021-01-27T16:00:00-03:00", - "timestamp": "2021-01-27T19:00:00.824Z" - }, - { - "type": "message", - "serviceUrl": "https://259039676c61.ngrok.io", - "channelId": "emulator", - "from": { - "id": "73573150-60c5-11eb-b881-018622be8a2a", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" - }, - "recipient": { - "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", - "role": "user" - }, - "locale": "", - "text": "What delivery mode would you like to use?", - "speak": "What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "da5e8130-60d1-11eb-8b98-b971494822a6", - "id": "db7129b0-60d1-11eb-8b98-b971494822a6", - "localTimestamp": "2021-01-27T16:00:01-03:00", - "timestamp": "2021-01-27T19:00:01.099Z" - }, - { - "channelData": { - "clientActivityID": "16117740025163t1zr5cif", - "clientTimestamp": "2021-01-27T19:00:02.516Z" - }, - "text": "normal", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-27T19:00:02.528Z", - "entities": [ - { - "requiresBotState": true, - "supportsListening": true, - "supportsTts": true, - "type": "ClientCapabilities" - } - ], - "conversation": { - "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" - }, - "id": "dc4b3600-60d1-11eb-8b98-b971494822a6", - "localTimestamp": "2021-01-27T16:00:02-03:00", - "recipient": { - "id": "73573150-60c5-11eb-b881-018622be8a2a", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://259039676c61.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://259039676c61.ngrok.io", - "channelId": "emulator", - "from": { - "id": "73573150-60c5-11eb-b881-018622be8a2a", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" - }, - "recipient": { - "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", - "role": "user" - }, - "locale": "", - "text": "What type of skill would you like to use?", - "speak": "What type of skill would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "EchoSkill", - "value": "EchoSkill" - }, - { - "type": "imBack", - "title": "WaterfallSkill", - "value": "WaterfallSkill" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "dc4b3600-60d1-11eb-8b98-b971494822a6", - "id": "dcd65f00-60d1-11eb-8b98-b971494822a6", - "localTimestamp": "2021-01-27T16:00:03-03:00", - "timestamp": "2021-01-27T19:00:03.440Z" - }, - { - "channelData": { - "clientActivityID": "1611774004677b31ih46f32l", - "clientTimestamp": "2021-01-27T19:00:04.677Z" - }, - "text": "WaterfallSkill", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-27T19:00:04.692Z", - "conversation": { - "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" - }, - "id": "dd956940-60d1-11eb-8b98-b971494822a6", - "localTimestamp": "2021-01-27T16:00:04-03:00", - "recipient": { - "id": "73573150-60c5-11eb-b881-018622be8a2a", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://259039676c61.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://259039676c61.ngrok.io", - "channelId": "emulator", - "from": { - "id": "73573150-60c5-11eb-b881-018622be8a2a", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" - }, - "recipient": { - "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", - "role": "user" - }, - "locale": "", - "text": "What skill would you like to call?", - "speak": "What skill would you like to call?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "WaterfallSkillBotDotNet", - "value": "WaterfallSkillBotDotNet" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "dd956940-60d1-11eb-8b98-b971494822a6", - "id": "de24d800-60d1-11eb-8b98-b971494822a6", - "localTimestamp": "2021-01-27T16:00:05-03:00", - "timestamp": "2021-01-27T19:00:05.632Z" - }, - { - "channelData": { - "clientActivityID": "1611774006749prlvxjdfr2b", - "clientTimestamp": "2021-01-27T19:00:06.749Z" - }, - "text": "WaterfallSkillBotDotNet", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-27T19:00:06.776Z", - "conversation": { - "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" - }, - "id": "ded36780-60d1-11eb-8b98-b971494822a6", - "localTimestamp": "2021-01-27T16:00:06-03:00", - "recipient": { - "id": "73573150-60c5-11eb-b881-018622be8a2a", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://259039676c61.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://259039676c61.ngrok.io", - "channelId": "emulator", - "from": { - "id": "73573150-60c5-11eb-b881-018622be8a2a", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" - }, - "recipient": { - "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", - "role": "user" - }, - "locale": "", - "text": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.\n\n 1. Cards\n 2. Proactive\n 3. Auth\n 4. MessageWithAttachment\n 5. Sso\n 6. FileUpload\n 7. Echo", - "speak": "Select an action # to send to **WaterfallSkillBotDotNet**.\n\nOr just type in a message and it will be forwarded to the skill as a message activity.", - "inputHint": "expectingInput", - "attachments": [], - "entities": [], - "replyToId": "ded36780-60d1-11eb-8b98-b971494822a6", - "id": "df60da70-60d1-11eb-8b98-b971494822a6", - "localTimestamp": "2021-01-27T16:00:07-03:00", - "timestamp": "2021-01-27T19:00:07.703Z" - }, - { - "channelData": { - "clientActivityID": "1611774010842ks0wa2td8kl", - "clientTimestamp": "2021-01-27T19:00:10.842Z" - }, - "text": "Auth", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-27T19:00:10.866Z", - "conversation": { - "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" - }, - "id": "e1437d20-60d1-11eb-8b98-b971494822a6", - "localTimestamp": "2021-01-27T16:00:10-03:00", - "recipient": { - "id": "73573150-60c5-11eb-b881-018622be8a2a", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://259039676c61.ngrok.io" - } -] \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn2.json b/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn2.json deleted file mode 100644 index 6382f436e7..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/SignIn2.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "items": [ - { - "type": "message", - "role": "bot", - "text": "You are now logged in.", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'You are now logged in.'", - "speak == 'You are now logged in.'", - "inputHint == 'ignoringInput'" - ] - }, - { - "type": "message", - "role": "bot", - "text": "Would you like to view your token?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Would you like to view your token?'", - "inputHint == 'acceptingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "yes" - }, - { - "type": "message", - "role": "bot", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "speak == 'Here is your token:'", - "inputHint == 'ignoringInput'" - ] - }, - { - "type": "message", - "role": "bot", - "text": "I have signed you out.", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'I have signed you out.'", - "speak == 'I have signed you out.'", - "inputHint == 'ignoringInput'" - ] - }, - { - "type": "message", - "role": "bot", - "text": "Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "speak == 'Done with \"${TargetSkill}\". \n\n What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/signin2.transcript b/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/signin2.transcript deleted file mode 100644 index 2d8cf8ee19..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/SignIn/TestScripts/signin2.transcript +++ /dev/null @@ -1,124 +0,0 @@ -[ - { - "type": "message", - "serviceUrl": "https://259039676c61.ngrok.io", - "channelId": "emulator", - "from": { - "id": "73573150-60c5-11eb-b881-018622be8a2a", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" - }, - "recipient": { - "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", - "role": "user" - }, - "locale": "", - "text": "You are now logged in.", - "speak": "You are now logged in.", - "inputHint": "ignoringInput", - "attachments": [], - "entities": [], - "replyToId": "05fa4ae0-60d2-11eb-8b98-b971494822a6", - "id": "07013390-60d2-11eb-8b98-b971494822a6", - "localTimestamp": "2021-01-27T16:01:14-03:00", - "timestamp": "2021-01-27T19:01:14.185Z" - }, - { - "type": "message", - "serviceUrl": "https://259039676c61.ngrok.io", - "channelId": "emulator", - "from": { - "id": "73573150-60c5-11eb-b881-018622be8a2a", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" - }, - "recipient": { - "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", - "role": "user" - }, - "locale": "", - "text": "Here is your token: 37f0ba3c-24bd-485c-9a11-7151fe604b95", - "speak": "Here is your token:", - "inputHint": "ignoringInput", - "attachments": [], - "entities": [], - "replyToId": "05fa4ae0-60d2-11eb-8b98-b971494822a6", - "id": "072c6240-60d2-11eb-8b98-b971494822a6", - "localTimestamp": "2021-01-27T16:01:14-03:00", - "timestamp": "2021-01-27T19:01:14.468Z" - }, - { - "type": "message", - "serviceUrl": "https://259039676c61.ngrok.io", - "channelId": "emulator", - "from": { - "id": "73573150-60c5-11eb-b881-018622be8a2a", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" - }, - "recipient": { - "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", - "role": "user" - }, - "locale": "", - "text": "I have signed you out.", - "speak": "I have signed you out.", - "inputHint": "ignoringInput", - "attachments": [], - "entities": [], - "replyToId": "05fa4ae0-60d2-11eb-8b98-b971494822a6", - "id": "077e2bc0-60d2-11eb-8b98-b971494822a6", - "localTimestamp": "2021-01-27T16:01:15-03:00", - "timestamp": "2021-01-27T19:01:15.004Z" - }, - { - "type": "message", - "serviceUrl": "https://259039676c61.ngrok.io", - "channelId": "emulator", - "from": { - "id": "73573150-60c5-11eb-b881-018622be8a2a", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "da522520-60d1-11eb-b881-018622be8a2a|livechat" - }, - "recipient": { - "id": "b5d6e07f-f8f9-491d-b767-10a0817f89f2", - "role": "user" - }, - "locale": "", - "text": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "speak": "Done with \"WaterfallSkillBotDotNet\". \n\n What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "05fa4ae0-60d2-11eb-8b98-b971494822a6", - "id": "07aa92f0-60d2-11eb-8b98-b971494822a6", - "localTimestamp": "2021-01-27T16:01:15-03:00", - "timestamp": "2021-01-27T19:01:15.295Z" - } -] \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/SingleTurn/EchoTests.cs b/tests/functional/Tests/SkillFunctionalTests/SingleTurn/EchoTests.cs deleted file mode 100644 index 8ba52a0f71..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/SingleTurn/EchoTests.cs +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Collections.Generic; -using System.IO; -using System.Threading.Tasks; -using Microsoft.Bot.Connector; -using Microsoft.Bot.Schema; -using Microsoft.Extensions.Logging; -using Newtonsoft.Json; -using SkillFunctionalTests.Common; -using TranscriptTestRunner; -using TranscriptTestRunner.XUnit; -using Xunit; -using Xunit.Abstractions; - -namespace SkillFunctionalTests.SingleTurn -{ - [Trait("TestCategory", "SingleTurn")] - public class EchoTests : ScriptTestBase - { - private readonly string _testScriptsFolder = Directory.GetCurrentDirectory() + @"/SingleTurn/TestScripts"; - - public EchoTests(ITestOutputHelper output) - : base(output) - { - } - - public static IEnumerable TestCases() - { - var channelIds = new List { Channels.Directline }; - var deliverModes = new List - { - DeliveryModes.Normal, - DeliveryModes.ExpectReplies - }; - - var hostBots = new List - { - HostBot.SimpleHostBotComposerDotNet, - HostBot.SimpleHostBotDotNet, - HostBot.SimpleHostBotDotNet21, - HostBot.SimpleHostBotJS, - HostBot.SimpleHostBotPython, - }; - - var targetSkills = new List - { - SkillBotNames.EchoSkillBotComposerDotNet, - SkillBotNames.EchoSkillBotDotNet, - SkillBotNames.EchoSkillBotDotNet21, - SkillBotNames.EchoSkillBotDotNetV3, - SkillBotNames.EchoSkillBotJS, - SkillBotNames.EchoSkillBotJSV3, - SkillBotNames.EchoSkillBotPython - }; - - var scripts = new List { "EchoMultiSkill.json" }; - - var testCaseBuilder = new TestCaseBuilder(); - - // This local function is used to exclude ExpectReplies test cases for v3 bots - static bool ShouldExclude(TestCase testCase) - { - if (testCase.DeliveryMode == DeliveryModes.ExpectReplies) - { - // Note: ExpectReplies is not supported by DotNetV3 and JSV3 skills. - if (testCase.TargetSkill == SkillBotNames.EchoSkillBotDotNetV3 || testCase.TargetSkill == SkillBotNames.EchoSkillBotJSV3) - { - return true; - } - } - - return false; - } - - var testCases = testCaseBuilder.BuildTestCases(channelIds, deliverModes, hostBots, targetSkills, scripts, ShouldExclude); - foreach (var testCase in testCases) - { - yield return testCase; - } - } - - [Theory] - [MemberData(nameof(TestCases))] - public async Task RunTestCases(TestCaseDataObject testData) - { - var testCase = testData.GetObject(); - Logger.LogInformation(JsonConvert.SerializeObject(testCase, Formatting.Indented)); - - var options = TestClientOptions[testCase.HostBot]; - - var runner = new XUnitTestRunner(new TestClientFactory(testCase.ChannelId, options, Logger).GetTestClient(), TestRequestTimeout, Logger); - - var testParams = new Dictionary - { - { "DeliveryMode", testCase.DeliveryMode }, - { "TargetSkill", testCase.TargetSkill } - }; - - await runner.RunTestAsync(Path.Combine(_testScriptsFolder, testCase.Script), testParams); - } - } -} diff --git a/tests/functional/Tests/SkillFunctionalTests/SingleTurn/TestScripts/EchoMultiSkill.json b/tests/functional/Tests/SkillFunctionalTests/SingleTurn/TestScripts/EchoMultiSkill.json deleted file mode 100644 index 1b3c06348e..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/SingleTurn/TestScripts/EchoMultiSkill.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "items": [ - { - "type": "conversationUpdate", - "role": "user" - }, - { - "type": "message", - "role": "bot", - "text": "Hello and welcome!", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Hello and welcome!'", - "inputHint == 'acceptingInput'" - ] - }, - { - "type": "message", - "role": "bot", - "text": "What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'What delivery mode would you like to use?'", - "speak == 'What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - }, - { - "type": "message", - "role": "user", - "text": "${DeliveryMode}" - }, - { - "type": "message", - "role": "bot", - "text": "What skill would you like to call?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'What skill would you like to call?'", - "speak == 'What skill would you like to call?'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "${TargetSkill}" - }, - { - "type": "message", - "role": "bot", - "text": "Type anything to send to the skill.", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Type anything to send to the skill.'", - "inputHint == 'expectingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "Hello" - }, - { - "type": "message", - "role": "bot", - "text": "Echo: Hello", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Echo: Hello'", - "inputHint == 'acceptingInput'" - ] - }, - { - "type": "message", - "role": "bot", - "text": "Say \"end\" or \"stop\" and I'll end the conversation and back to the parent.", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Say \"end\" or \"stop\" and I\\'ll end the conversation and back to the parent.'", - "inputHint == 'acceptingInput'" - ] - }, - { - "type": "message", - "role": "user", - "text": "end" - }, - { - "type": "message", - "role": "bot", - "text": "Ending conversation from the skill...", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Ending conversation from the skill...'", - "inputHint == 'acceptingInput'" - ] - }, - { - "type": "message", - "role": "bot", - "text": "Received endOfConversation.\n\nCode: completedSuccessfully.", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Received endOfConversation.\n\nCode: completedSuccessfully.'", - "inputHint == 'acceptingInput'" - ] - }, - { - "type": "message", - "role": "bot", - "text": "Back in the host bot.", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'Back in the host bot.'", - "inputHint == 'acceptingInput'" - ] - }, - { - "type": "message", - "role": "bot", - "text": "What delivery mode would you like to use?", - "assertions": [ - "type == 'message'", - "from.role == 'bot'", - "recipient.role == 'user'", - "text == 'What delivery mode would you like to use?'", - "speak == 'What delivery mode would you like to use?'", - "inputHint == 'expectingInput'", - "suggestedActions.actions[0].type == 'imBack'", - "suggestedActions.actions[0].title == 'normal'", - "suggestedActions.actions[0].value == 'normal'", - "suggestedActions.actions[1].type == 'imBack'", - "suggestedActions.actions[1].title == 'expectReplies'", - "suggestedActions.actions[1].value == 'expectReplies'" - ] - } - ] -} \ No newline at end of file diff --git a/tests/functional/Tests/SkillFunctionalTests/SingleTurn/TestScripts/EchoMultiSkill.transcript b/tests/functional/Tests/SkillFunctionalTests/SingleTurn/TestScripts/EchoMultiSkill.transcript deleted file mode 100644 index f5569cf169..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/SingleTurn/TestScripts/EchoMultiSkill.transcript +++ /dev/null @@ -1,480 +0,0 @@ -[ - { - "type": "conversationUpdate", - "membersAdded": [ - { - "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", - "name": "Bot" - }, - { - "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", - "name": "User" - } - ], - "membersRemoved": [], - "channelId": "emulator", - "conversation": { - "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" - }, - "id": "67d08fd0-4f58-11eb-80df-41840e87027c", - "localTimestamp": "2021-01-05T10:17:48-03:00", - "recipient": { - "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", - "name": "Bot", - "role": "bot" - }, - "timestamp": "2021-01-05T13:17:48.237Z", - "from": { - "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", - "name": "User", - "role": "user" - }, - "locale": "", - "serviceUrl": "https://60ecb8345374.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://60ecb8345374.ngrok.io", - "channelId": "emulator", - "from": { - "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" - }, - "recipient": { - "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", - "role": "user" - }, - "locale": "", - "text": "Hello and welcome!", - "inputHint": "acceptingInput", - "attachments": [], - "entities": [], - "replyToId": "67d08fd0-4f58-11eb-80df-41840e87027c", - "id": "68722700-4f58-11eb-80df-41840e87027c", - "localTimestamp": "2021-01-05T10:17:49-03:00", - "timestamp": "2021-01-05T13:17:49.296Z" - }, - { - "type": "message", - "serviceUrl": "https://60ecb8345374.ngrok.io", - "channelId": "emulator", - "from": { - "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" - }, - "recipient": { - "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", - "role": "user" - }, - "locale": "", - "text": "What delivery mode would you like to use?", - "speak": "What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "67d08fd0-4f58-11eb-80df-41840e87027c", - "id": "689ae4b0-4f58-11eb-80df-41840e87027c", - "localTimestamp": "2021-01-05T10:17:49-03:00", - "timestamp": "2021-01-05T13:17:49.563Z" - }, - { - "channelData": { - "clientActivityID": "1609852670737zdf39h87ze9", - "clientTimestamp": "2021-01-05T13:17:50.737Z" - }, - "text": "expectReplies", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-05T13:17:50.760Z", - "entities": [ - { - "requiresBotState": true, - "supportsListening": true, - "supportsTts": true, - "type": "ClientCapabilities" - } - ], - "conversation": { - "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" - }, - "id": "69518a80-4f58-11eb-80df-41840e87027c", - "localTimestamp": "2021-01-05T10:17:50-03:00", - "recipient": { - "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://60ecb8345374.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://60ecb8345374.ngrok.io", - "channelId": "emulator", - "from": { - "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" - }, - "recipient": { - "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", - "role": "user" - }, - "locale": "", - "text": "What skill would you like to call?", - "speak": "What skill would you like to call?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "EchoSkillBotDotNet", - "value": "EchoSkillBotDotNet" - }, - { - "type": "imBack", - "title": "EchoSkillBotDotNet21", - "value": "EchoSkillBotDotNet21" - }, - { - "type": "imBack", - "title": "EchoSkillBotDotNetV3", - "value": "EchoSkillBotDotNetV3" - }, - { - "type": "imBack", - "title": "EchoSkillBotJS", - "value": "EchoSkillBotJS" - }, - { - "type": "imBack", - "title": "EchoSkillBotJSV3", - "value": "EchoSkillBotJSV3" - }, - { - "type": "imBack", - "title": "EchoSkillBotPython", - "value": "EchoSkillBotPython" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "69518a80-4f58-11eb-80df-41840e87027c", - "id": "69f93c30-4f58-11eb-80df-41840e87027c", - "localTimestamp": "2021-01-05T10:17:51-03:00", - "timestamp": "2021-01-05T13:17:51.859Z" - }, - { - "channelData": { - "clientActivityID": "16098526780751zl7loernbj", - "clientTimestamp": "2021-01-05T13:17:58.075Z" - }, - "text": "EchoSkillBotDotNet", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-05T13:17:58.102Z", - "conversation": { - "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" - }, - "id": "6db1d760-4f58-11eb-80df-41840e87027c", - "localTimestamp": "2021-01-05T10:17:58-03:00", - "recipient": { - "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://60ecb8345374.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://60ecb8345374.ngrok.io", - "channelId": "emulator", - "from": { - "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" - }, - "recipient": { - "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", - "role": "user" - }, - "locale": "", - "text": "Type anything to send to the skill.", - "inputHint": "expectingInput", - "attachments": [], - "entities": [], - "replyToId": "6db1d760-4f58-11eb-80df-41840e87027c", - "id": "6e4ae310-4f58-11eb-80df-41840e87027c", - "localTimestamp": "2021-01-05T10:17:59-03:00", - "timestamp": "2021-01-05T13:17:59.105Z" - }, - { - "channelData": { - "clientActivityID": "1609852686824zhcy1hqt9dd", - "clientTimestamp": "2021-01-05T13:18:06.824Z" - }, - "text": "Hello", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-05T13:18:06.848Z", - "conversation": { - "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" - }, - "id": "72e86000-4f58-11eb-80df-41840e87027c", - "localTimestamp": "2021-01-05T10:18:06-03:00", - "recipient": { - "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://60ecb8345374.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://60ecb8345374.ngrok.io", - "channelId": "emulator", - "from": { - "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" - }, - "recipient": { - "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", - "role": "user" - }, - "locale": "", - "text": "Echo: Hello", - "inputHint": "acceptingInput", - "attachments": [], - "entities": [], - "replyToId": "72e86000-4f58-11eb-80df-41840e87027c", - "id": "740cbbc0-4f58-11eb-80df-41840e87027c", - "localTimestamp": "2021-01-05T10:18:08-03:00", - "timestamp": "2021-01-05T13:18:08.764Z" - }, - { - "type": "message", - "serviceUrl": "https://60ecb8345374.ngrok.io", - "channelId": "emulator", - "from": { - "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" - }, - "recipient": { - "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", - "role": "user" - }, - "locale": "", - "text": "Say \"end\" or \"stop\" and I'll end the conversation and back to the parent.", - "inputHint": "acceptingInput", - "attachments": [], - "entities": [], - "replyToId": "72e86000-4f58-11eb-80df-41840e87027c", - "id": "74411230-4f58-11eb-80df-41840e87027c", - "localTimestamp": "2021-01-05T10:18:09-03:00", - "timestamp": "2021-01-05T13:18:09.107Z" - }, - { - "channelData": { - "clientActivityID": "16098526945962f14ibp83pt", - "clientTimestamp": "2021-01-05T13:18:14.596Z" - }, - "text": "end", - "textFormat": "plain", - "type": "message", - "channelId": "emulator", - "from": { - "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", - "name": "User", - "role": "user" - }, - "locale": "", - "timestamp": "2021-01-05T13:18:14.627Z", - "conversation": { - "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" - }, - "id": "778b5b30-4f58-11eb-80df-41840e87027c", - "localTimestamp": "2021-01-05T10:18:14-03:00", - "recipient": { - "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", - "name": "Bot", - "role": "bot" - }, - "serviceUrl": "https://60ecb8345374.ngrok.io" - }, - { - "type": "message", - "serviceUrl": "https://60ecb8345374.ngrok.io", - "channelId": "emulator", - "from": { - "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" - }, - "recipient": { - "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", - "role": "user" - }, - "locale": "", - "text": "Ending conversation from the skill...", - "inputHint": "acceptingInput", - "attachments": [], - "entities": [], - "replyToId": "778b5b30-4f58-11eb-80df-41840e87027c", - "id": "7839c3a0-4f58-11eb-80df-41840e87027c", - "localTimestamp": "2021-01-05T10:18:15-03:00", - "timestamp": "2021-01-05T13:18:15.770Z" - }, - { - "type": "message", - "serviceUrl": "https://60ecb8345374.ngrok.io", - "channelId": "emulator", - "from": { - "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" - }, - "recipient": { - "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", - "role": "user" - }, - "locale": "", - "text": "Received endOfConversation.\n\nCode: completedSuccessfully", - "inputHint": "acceptingInput", - "attachments": [], - "entities": [], - "replyToId": "778b5b30-4f58-11eb-80df-41840e87027c", - "id": "78684db0-4f58-11eb-80df-41840e87027c", - "localTimestamp": "2021-01-05T10:18:16-03:00", - "timestamp": "2021-01-05T13:18:16.075Z" - }, - { - "type": "message", - "serviceUrl": "https://60ecb8345374.ngrok.io", - "channelId": "emulator", - "from": { - "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" - }, - "recipient": { - "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", - "role": "user" - }, - "locale": "", - "text": "Back in the host bot.", - "inputHint": "acceptingInput", - "attachments": [], - "entities": [], - "replyToId": "778b5b30-4f58-11eb-80df-41840e87027c", - "id": "7898faa0-4f58-11eb-80df-41840e87027c", - "localTimestamp": "2021-01-05T10:18:16-03:00", - "timestamp": "2021-01-05T13:18:16.394Z" - }, - { - "type": "message", - "serviceUrl": "https://60ecb8345374.ngrok.io", - "channelId": "emulator", - "from": { - "id": "56b5e650-4f58-11eb-aad9-1dbdd1591611", - "name": "Bot", - "role": "bot" - }, - "conversation": { - "id": "67c4f710-4f58-11eb-aad9-1dbdd1591611|livechat" - }, - "recipient": { - "id": "c13a9ba2-8ba2-4364-85eb-5dd06d9c9331", - "role": "user" - }, - "locale": "", - "text": "What delivery mode would you like to use?", - "speak": "What delivery mode would you like to use?", - "inputHint": "expectingInput", - "suggestedActions": { - "actions": [ - { - "type": "imBack", - "title": "normal", - "value": "normal" - }, - { - "type": "imBack", - "title": "expectReplies", - "value": "expectReplies" - } - ] - }, - "attachments": [], - "entities": [], - "replyToId": "778b5b30-4f58-11eb-80df-41840e87027c", - "id": "78c317e0-4f58-11eb-80df-41840e87027c", - "localTimestamp": "2021-01-05T10:18:16-03:00", - "timestamp": "2021-01-05T13:18:16.670Z" - } -] diff --git a/tests/functional/Tests/SkillFunctionalTests/Sso/SsoTests.cs b/tests/functional/Tests/SkillFunctionalTests/Sso/SsoTests.cs deleted file mode 100644 index 151306b8b4..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/Sso/SsoTests.cs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Collections.Generic; -using System.IO; -using System.Threading.Tasks; -using Microsoft.Bot.Connector; -using Microsoft.Bot.Schema; -using Microsoft.Extensions.Logging; -using Newtonsoft.Json; -using SkillFunctionalTests.Common; -using TranscriptTestRunner; -using TranscriptTestRunner.XUnit; -using Xunit; -using Xunit.Abstractions; - -namespace SkillFunctionalTests.Sso -{ - public class SsoTests : ScriptTestBase - { - private readonly string _testScriptsFolder = Directory.GetCurrentDirectory() + @"/Sso/TestScripts"; - - public SsoTests(ITestOutputHelper output) - : base(output) - { - } - - public static IEnumerable TestCases() - { - var channelIds = new List { Channels.Directline }; - var deliverModes = new List - { - DeliveryModes.Normal, - DeliveryModes.ExpectReplies, - }; - - var hostBots = new List - { - HostBot.WaterfallHostBotDotNet, - HostBot.WaterfallHostBotJS, - HostBot.WaterfallHostBotPython - }; - - var targetSkills = new List - { - SkillBotNames.WaterfallSkillBotDotNet, - SkillBotNames.WaterfallSkillBotJS, - SkillBotNames.WaterfallSkillBotPython - }; - - var scripts = new List - { - "Sso.json", - }; - - var testCaseBuilder = new TestCaseBuilder(); - - var testCases = testCaseBuilder.BuildTestCases(channelIds, deliverModes, hostBots, targetSkills, scripts); - foreach (var testCase in testCases) - { - yield return testCase; - } - } - - [Theory] - [MemberData(nameof(TestCases))] - public Task RunTestCases(TestCaseDataObject testData) - { - var testCase = testData.GetObject(); - Logger.LogInformation(JsonConvert.SerializeObject(testCase, Formatting.Indented)); - - // TODO: Implement tests and scripts - //var runner = new XUnitTestRunner(new TestClientFactory(testCase.ChannelId).GetTestClient(), Logger); - //await runner.RunTestAsync(Path.Combine(_testScriptsFolder, testCase.Script)); - - // TODO: remove this line once we implement the test and we change the method to public async task - return Task.CompletedTask; - } - } -} diff --git a/tests/functional/Tests/SkillFunctionalTests/appsettings.json b/tests/functional/Tests/SkillFunctionalTests/appsettings.json deleted file mode 100644 index 447bc08b9a..0000000000 --- a/tests/functional/Tests/SkillFunctionalTests/appsettings.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Debug", - "Microsoft": "Warning" - } - }, - - "TestRequestTimeout": 180, - - "HostBotClientOptions": { - "SimpleHostBotComposerDotNet": { - "BotId": "bffnsimplehostbotcomposerdotnet", - "DirectLineSecret": "" - }, - "SimpleHostBotDotNet": { - "BotId": "bffnsimplehostbotdotnet", - "DirectLineSecret": "" - }, - "SimpleHostBotDotNet21": { - "BotId": "bffnsimplehostbotdotnet21", - "DirectLineSecret": "" - }, - "SimpleHostBotJS": { - "BotId": "bffnsimplehostbotjs", - "DirectLineSecret": "" - }, - "SimpleHostBotPython": { - "BotId": "bffnsimplehostbotpython", - "DirectLineSecret": "" - }, - "WaterfallHostBotDotNet": { - "BotId": "bffnwaterfallhostbotdotnet", - "DirectLineSecret": "" - }, - "WaterfallHostBotJS": { - "BotId": "bffnwaterfallhostbotjs", - "DirectLineSecret": "" - }, - "WaterfallHostBotPython": { - "BotId": "bffnwaterfallhostbotpython", - "DirectLineSecret": "" - } - } -} diff --git a/tests/functional/Tests/TranscriptTestRunnerTests/TranscriptTestRunnerTests.csproj b/tests/functional/Tests/TranscriptTestRunnerTests/TranscriptTestRunnerTests.csproj index 14d32b4f57..f9f90104c6 100644 --- a/tests/functional/Tests/TranscriptTestRunnerTests/TranscriptTestRunnerTests.csproj +++ b/tests/functional/Tests/TranscriptTestRunnerTests/TranscriptTestRunnerTests.csproj @@ -7,10 +7,13 @@ - + - + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/tests/functional/build/yaml/functionalTestsBuild-CI.yml b/tests/functional/build/yaml/functionalTestsBuild-CI.yml index 89bff9a0cd..9f76a12f9e 100644 --- a/tests/functional/build/yaml/functionalTestsBuild-CI.yml +++ b/tests/functional/build/yaml/functionalTestsBuild-CI.yml @@ -24,12 +24,12 @@ steps: - task: NuGetCommand@2 displayName: "NuGet restore" inputs: - restoreSolution: SkillFunctionalTests.sln + restoreSolution: ComponentsFunctionalTests.sln - task: MSBuild@1 displayName: "Build" inputs: - solution: "SkillFunctionalTests.sln" + solution: "ComponentsFunctionalTests.sln" vsVersion: 16.0 platform: "${{ parameters.buildPlatform }}" configuration: "${{ parameters.buildConfiguration }}" diff --git a/tests/functional/build/yaml/testScenarios/configureConsumers.yml b/tests/functional/build/yaml/testScenarios/configureConsumers.yml index 0cf5eadbee..c6100be4fe 100644 --- a/tests/functional/build/yaml/testScenarios/configureConsumers.yml +++ b/tests/functional/build/yaml/testScenarios/configureConsumers.yml @@ -3,16 +3,8 @@ parameters: displayName: Bot's App Registration Ids type: object default: - EchoSkillBotComposerDotNet: "" - EchoSkillBotDotNet: "" - EchoSkillBotDotNet21: "" - EchoSkillBotDotNetV3: "" - EchoSkillBotJS: "" - EchoSkillBotJSV3: "" - EchoSkillBotPython: "" - WaterfallSkillBotDotNet: "" - WaterfallSkillBotJS: "" - WaterfallSkillBotPython: "" + EmptyBotDotNetWebApp: "" + EmptyBotJSWebApp: "" - name: azureSubscription displayName: Azure Service Connection @@ -399,176 +391,31 @@ steps: $groups = @{ DotNet = "$resourceGroup-DotNet" JS = "$resourceGroup-JS" - Python = "$resourceGroup-Python" } # Bots Settings $consumers = @( @{ - key = "SimpleHostBotDotNet" - botName = "bffnsimplehostbotdotnet" + key = "EmptyBotDotNetWebApp" + botName = "bfcfnemptybotdotnetwebapp" resourceGroup = $groups.DotNet configType = $types.Appsettings } @{ - key = "SimpleHostBotDotNet21" - botName = "bffnsimplehostbotdotnet21" - resourceGroup = $groups.DotNet - configType = $types.Appsettings - } - @{ - key = "SimpleHostBotComposerDotNet" - botName = "bffnsimplehostbotcomposerdotnet" - resourceGroup = $groups.DotNet - configType = $types.Composer - } - @{ - key = "WaterfallHostBotDotNet" - botName = "bffnwaterfallhostbotdotnet" - resourceGroup = $groups.DotNet - configType = $types.Appsettings - } - @{ - key = "SimpleHostBotJS" - botName = "bffnsimplehostbotjs" - resourceGroup = $groups.JS - configType = $types.Env - } - @{ - key = "WaterfallHostBotJS" - botName = "bffnwaterfallhostbotjs" - resourceGroup = $groups.JS - configType = $types.Env - } - @{ - key = "SimpleHostBotPython" - botName = "bffnsimplehostbotpython" - resourceGroup = $groups.Python - configType = $types.Env - } - @{ - key = "WaterfallHostBotPython" - botName = "bffnwaterfallhostbotpython" - resourceGroup = $groups.Python - configType = $types.Env - } - ) - - $skills = @( - @{ - key = "EchoSkillBotDotNet" - keyComposer = "echoSkillBotDotNet" - botName = "bffnechoskillbotdotnet" - appId = "${{ parameters.appIds.EchoSkillBotDotNet }}" - resourceGroup = $groups.DotNet - group = "Echo" - } - @{ - key = "EchoSkillBotDotNet21" - keyComposer = "echoSkillBotDotNet21" - botName = "bffnechoskillbotdotnet21" - appId = "${{ parameters.appIds.EchoSkillBotDotNet21 }}" - resourceGroup = $groups.DotNet - group = "Echo" - } - @{ - key = "EchoSkillBotDotNetV3" - keyComposer = "echoSkillBotDotNetV3" - botName = "bffnechoskillbotdotnetv3" - appId = "${{ parameters.appIds.EchoSkillBotDotNetV3 }}" - resourceGroup = $groups.DotNet - group = "Echo" - } - @{ - key = "EchoSkillBotComposerDotNet" - keyComposer = "echoSkillBotComposerDotNet" - botName = "bffnechoskillbotcomposerdotnet" - appId = "${{ parameters.appIds.EchoSkillBotComposerDotNet }}" - resourceGroup = $groups.DotNet - group = "Echo" - } - @{ - key = "WaterfallSkillBotDotNet" - keyComposer = "waterfallSkillBotDotNet" - botName = "bffnwaterfallskillbotdotnet" - appId = "${{ parameters.appIds.WaterfallSkillBotDotNet }}" - resourceGroup = $groups.DotNet - group = "Waterfall" - } - @{ - key = "EchoSkillBotJS" - keyComposer = "echoSkillBotJs" - botName = "bffnechoskillbotjs" - appId = "${{ parameters.appIds.EchoSkillBotJS }}" + key = "EmptyBotJSWebApp" + botName = "bfcfnemptybotjswebapp" resourceGroup = $groups.JS - group = "Echo" - } - @{ - key = "EchoSkillBotJSV3" - keyComposer = "echoSkillBotJsV3" - botName = "bffnechoskillbotjsv3" - appId = "${{ parameters.appIds.EchoSkillBotJSV3 }}" - resourceGroup = $groups.JS - group = "Echo" - } - @{ - key = "WaterfallSkillBotJS" - keyComposer = "waterfallSkillBotJS" - botName = "bffnwaterfallskillbotjs" - appId = "${{ parameters.appIds.WaterfallSkillBotJS }}" - resourceGroup = $groups.JS - group = "Waterfall" - } - @{ - key = "EchoSkillBotPython" - keyComposer = "echoSkillBotPython" - botName = "bffnechoskillbotpython" - appId = "${{ parameters.appIds.EchoSkillBotPython }}" - resourceGroup = $groups.Python - group = "Echo" - } - @{ - key = "WaterfallSkillBotPython" - keyComposer = "waterfallSkillBotPython" - botName = "bffnwaterfallskillbotpython" - appId = "${{ parameters.appIds.WaterfallSkillBotPython }}" - resourceGroup = $groups.Python - group = "Waterfall" + configType = $types.Appsettings } ) # Bots Test Scenarios $scenarios = @( @{ - name = "SingleTurn"; + name = "EmptyBot"; consumers = @( - "SimpleHostBotComposerDotNet", - "SimpleHostBotDotNet", - "SimpleHostBotDotNet21", - "SimpleHostBotJS", - "SimpleHostBotPython" - ); - skills = @( - "EchoSkillBotComposerDotNet", - "EchoSkillBotDotNet", - "EchoSkillBotDotNet21", - "EchoSkillBotDotNetV3", - "EchoSkillBotJS", - "EchoSkillBotJSV3", - "EchoSkillBotPython" - ); - } - @{ - name = "Waterfall"; - consumers = @( - "WaterfallHostBotDotNet", - "WaterfallHostBotJS", - "WaterfallHostBotPython" - ); - skills = @( - "WaterfallSkillBotDotNet", - "WaterfallSkillBotJS", - "WaterfallSkillBotPython" + "EmptyBotDotNetWebApp", + "EmptyBotJSWebApp" ); } ) @@ -576,43 +423,29 @@ steps: # Pre-configure and filter bots. Write-Host $(AddTimeStamp -text "Filtering bots by '$scenario' scenario ..."); $consumersToConfigure = FilterBotsByScenario -bots $consumers -scenarios $scenarios -scenario $scenario; - $skillsToConfigure = FilterBotsByScenario -bots $skills -scenarios $scenarios -scenario $scenario; - - Write-Host $(AddTimeStamp -text "Loading the Skills AppIds from the KeyVault '$keyVault' when no Pipeline Variable is provided."); - $skillsToConfigure = AddBotsAppIdFromKeyVault -bots $skillsToConfigure -keyVault $keyVault - - Write-Host $(AddTimeStamp -text "Filtering bots that have an AppId assigned ..."); - $skillsToConfigure = FilterBotsWithAppId -bots $skillsToConfigure Write-Host $(AddTimeStamp -text "Adding the suffix '$suffix' to the bot resources ..."); $consumersToConfigure = AddBotsSuffix -bots $consumersToConfigure -suffix $suffix - $skillsToConfigure = AddBotsSuffix -bots $skillsToConfigure -suffix $suffix Write-Host $(AddTimeStamp -text "Filtering existing Resource Groups ..."); $resourceGroups = FilterResourceGroupsByExistence -groups $groups Write-Host $(AddTimeStamp -text "Filtering deployed bots in Azure ..."); $consumersToConfigure = FilterBotsByResourceExistence -groups $resourceGroups -bots $consumersToConfigure - $skillsToConfigure = FilterBotsByResourceExistence -groups $resourceGroups -bots $skillsToConfigure Write-Host $(AddTimeStamp -text "Adding Azure AppSettings to Consumers' configuration."); - $consumersToConfigure = AddAzureAppSettings -consumers $consumersToConfigure -skills $skillsToConfigure + $consumersToConfigure = AddAzureAppSettings -consumers $consumersToConfigure if (-not $consumersToConfigure) { Write-Error $(AddTimeStamp -text "No Consumers were found to configure. Cancelling the configuration ..."); return; } - if (-not $skillsToConfigure) { - Write-Error $(AddTimeStamp -text "No Skills were found to configure each Consumer. Cancelling the configuration ..."); - return; - } - # Configure steps. Write-Host $(AddTimeStamp -text "Configuring the Test Project."); - ConfigureTestProjectAppSettings -bots $consumersToConfigure -appSettingsPath "tests/SkillFunctionalTests/appsettings.json"; + ConfigureTestProjectAppSettings -bots $consumersToConfigure -appSettingsPath "tests/functional/Tests/ComponentsFunctionalTests/appsettings.json"; Write-Host $(AddTimeStamp -text "Configuring the Consumer bots App Settings in Azure."); - ConfigureConsumers -consumers $consumersToConfigure -skills $skillsToConfigure + ConfigureConsumers -consumers $consumersToConfigure Write-Host $(AddTimeStamp -text "Process Finished!"); diff --git a/tests/functional/build/yaml/testScenarios/runScenario.yml b/tests/functional/build/yaml/testScenarios/runScenario.yml index bfa72bd232..6d230a4dfc 100644 --- a/tests/functional/build/yaml/testScenarios/runScenario.yml +++ b/tests/functional/build/yaml/testScenarios/runScenario.yml @@ -71,13 +71,13 @@ stages: inputs: command: build publishWebProjects: false - projects: "Tests/SkillFunctionalTests/SkillFunctionalTests.csproj" + projects: "tests/functional/Tests/ComponentsFunctionalTests/ComponentsFunctionalTests.csproj" arguments: "-v n --configuration ${{ parameters.buildConfiguration }}" - task: DotNetCoreCLI@2 displayName: "DotNet Test" inputs: command: test - testRunTitle: "SkillFunctionalTests-${{ scenario.name }}-$(BUILD.BUILDNUMBER)" - projects: "Tests/SkillFunctionalTests/SkillFunctionalTests.csproj" - arguments: "-v n --configuration ${{ parameters.buildConfiguration }} --no-build --no-restore --logger trx;LogFileName=SkillFunctionalTests-${{ scenario.name }}-$(BUILD.BUILDNUMBER).trx --filter TestCategory!=IgnoreInAutomatedBuild&TestCategory=${{ join('|TestCategory=', scenario.testCategories) }}" + testRunTitle: "ComponentsFunctionalTests-${{ scenario.name }}-$(BUILD.BUILDNUMBER)" + projects: "tests/functional/Tests/ComponentsFunctionalTests/ComponentsFunctionalTests.csproj" + arguments: "-v n --configuration ${{ parameters.buildConfiguration }} --no-build --no-restore --logger trx;LogFileName=ComponentsFunctionalTests-${{ scenario.name }}-$(BUILD.BUILDNUMBER).trx --filter TestCategory!=IgnoreInAutomatedBuild&TestCategory=${{ join('|TestCategory=', scenario.testCategories) }}" diff --git a/tests/functional/build/yaml/testScenarios/runTestScenarios.yml b/tests/functional/build/yaml/testScenarios/runTestScenarios.yml index 6fac3d47ca..9f947008bd 100644 --- a/tests/functional/build/yaml/testScenarios/runTestScenarios.yml +++ b/tests/functional/build/yaml/testScenarios/runTestScenarios.yml @@ -16,20 +16,13 @@ variables: # ResourceSuffix: (optional) Suffix to add to the resources' name to avoid collitions. ## Bots Configuration (Define these variables in Azure) - # BfcfnEchoSkillBotComposerDotNetAppId: (optional) App Id for BfcfnEchoSkillBotComposerDotNet bot. - # BfcfnEchoSkillBotDotNet21AppId: (optional) App Id for BfcfnEchoSkillBotDotNet21 bot. - # BfcfnEchoSkillBotDotNetAppId: (optional) App Id for BfcfnEchoSkillBotDotNet bot. - # BfcfnEchoSkillBotDotNetV3AppId: (optional) App Id for BfcfnEchoSkillBotDotNetV3 bot. - # BfcfnEchoSkillBotJSAppId: (optional) App Id for BfcfnEchoSkillBotJS bot. - # BfcfnEchoSkillBotJSV3AppId: (optional) App Id for BfcfnEchoSkillBotJSV3 bot. - # BfcfnEchoSkillBotPythonAppId: (optional) App Id for BfcfnEchoSkillBotPython bot. - # BfcfnWaterfallSkillBotDotNetAppId: (optional) App Id for BfcfnWaterfallSkillBotDotNet bot. - # BfcfnWaterfallSkillBotJSAppId: (optional) App Id for BfcfnWaterfallSkillBotJS bot. - # BfcfnWaterfallSkillBotPythonAppId: (optional) App Id for BfcfnWaterfallSkillBotPython bot. + # BfcfnEmptyBotDotNetWebAppId: (optional) App Id for BfcfnEmptyBotDotNetWebApp bot. + # BfcfnEmptyBotJSWebAppAppId: (optional) App Id for BfcfnEmptyBotJSWebApp bot. + # DeployBotResourcesGuid: (optional) Deploy Bot Resources pipeline GUID. ## Internal variables - InternalKeyVaultName: "bfcfnbotkeyvault$(INTERNALRESOURCESUFFIX)" + InternalKeyVaultName: "ComponentsBotsKeyVault$(INTERNALRESOURCESUFFIX)" InternalResourceGroupName: $[coalesce(variables['RESOURCEGROUP'], 'bfcfnbots')] InternalResourceSuffix: $[coalesce(variables['RESOURCESUFFIX'], '')] @@ -70,16 +63,8 @@ stages: - template: runScenario.yml parameters: appIds: - EchoSkillBotComposerDotNet: "$(BFFNECHOSKILLBOTCOMPOSERDOTNETAPPID)" - EchoSkillBotDotNet: "$(BFFNECHOSKILLBOTDOTNETAPPID)" - EchoSkillBotDotNet21: "$(BFFNECHOSKILLBOTDOTNET21APPID)" - EchoSkillBotDotNetV3: "$(BFFNECHOSKILLBOTDOTNETV3APPID)" - EchoSkillBotJS: "$(BFFNECHOSKILLBOTJSAPPID)" - EchoSkillBotJSV3: "$(BFFNECHOSKILLBOTJSV3APPID)" - EchoSkillBotPython: "$(BFFNECHOSKILLBOTPYTHONAPPID)" - WaterfallSkillBotDotNet: "$(BFFNWATERFALLSKILLBOTDOTNETAPPID)" - WaterfallSkillBotJS: "$(BFFNWATERFALLSKILLBOTJSAPPID)" - WaterfallSkillBotPython: "$(BFFNWATERFALLSKILLBOTPYTHONAPPID)" + EmptyBotDotNetWebApp: "$(BFCFNEMPTYBOTDOTNETWEBAPPID)" + EmptyBotJSWebApp: "$(BFCFNEMPTYBOTJSWEBAPPID)" azureSubscription: "$(AZURESUBSCRIPTION)" buildConfiguration: "$(BUILDCONFIGURATION)" buildIdSuffix: $[stageDependencies.Download_Variables.Download_Variables.outputs['Set_Variables.DeploymentBuildSuffix']] @@ -87,16 +72,7 @@ stages: resourceGroup: "$(INTERNALRESOURCEGROUPNAME)" resourceSuffix: "$(INTERNALRESOURCESUFFIX)" scenarios: - - name: Waterfall - dependsOn: [Download_Variables] - testCategories: - - Attachments - - CardActions - - ProactiveMessages - - FileUpload - - SignIn - - - name: SingleTurn + - name: EmptyBot dependsOn: [Download_Variables] testCategories: - - SingleTurn + - EmptyBot From b373b0d6d6e9686c77b7d99aa6123dc74e3600eb Mon Sep 17 00:00:00 2001 From: Thomas Chung Date: Mon, 12 Jul 2021 15:45:42 -0700 Subject: [PATCH 38/39] chore: Merge 4.14 To Main (#1201) * Bumping DotNet version * Update js sdk to 4.14rc0 as well * update tests * Update JS tests * Update JS test expectation * chore: Cherry pick 1171 and 1164 into 4.14 (#1172) * Add Teams package unit tests (#1171) * fix: Stevenic/ac fix (#1164) * Fixed typo in schema for UpdateActivity * Forgot to copy activityId to outgoing activity in UpdateAdaptiveCard Co-authored-by: Ryan Lengel Isgrig <43043272+ryanlengel@users.noreply.github.com> Co-authored-by: Steven Ickman * feat: Update bot framework package deps (#1168) * Update package.json on adaptive + empty * Update more package depdendency * Update template package.jsons * Update yarn.lock * Update old school csharp skills * Update Teams, AdaptiveCards package and misc projs * Update SendMessageToTeamsChannelAsync to work with CloudAdapter (#1170) * chore: Cherry pick 1171 and 1164 into 4.14 (#1172) * Add Teams package unit tests (#1171) * fix: Stevenic/ac fix (#1164) * Fixed typo in schema for UpdateActivity * Forgot to copy activityId to outgoing activity in UpdateAdaptiveCard Co-authored-by: Ryan Lengel Isgrig <43043272+ryanlengel@users.noreply.github.com> Co-authored-by: Steven Ickman Co-authored-by: Thomas Chung Co-authored-by: Eric Dahlvang Co-authored-by: Ryan Lengel Isgrig <43043272+ryanlengel@users.noreply.github.com> Co-authored-by: Steven Ickman > Looks good. Let's document all of the processes to upgrade versions for all types of components in the repo so that others can do the same. > i.e. > Generators > > 1. generator-bot-adaptive/package.json - bump version > 2. generator-bot-_/packagejson (the rest) - bump version and dependencies:@microsoft/generator-bot-_ versions > > Csproj packages > > 1. Bump version of Microsoft.Bot.Builder.* dependencies > > Nuspec packages > > 1. Bump version of Mocrosoft.Bot.Builder.* dependencies > Npm packages > 2. Bump versions of botbuilder dependencies Good idea. As we figure this out we should just write down the steps. * fix: Send message to teams channel support both adapters (#1174) * Enable SendMessageToTeamsChannel with either BotFrameworkAdapter or CloudAdapter * Get appId from claims * Throw if adapter is not a known type to support SendMessageToTeamsChannel * feat: Update package versions (#1182) * Update graph package version * Update graph * Update Teams package * Update teams JS package * Update adaptive cards * HelpAndCancel * Update helpandcancel + welcome dependencies * Change to minor version update * Update to correct JS preview platform.js * Update generator package version (#1183) * Update .NET SDK to 4.14 final (#1187) * Allow previews to generate version as well (#1189) Co-authored-by: Thomas Chung * fix: nuget package version override to allow "preview" ring (#1191) * Fix nuget versioning steps * Fix Teams test reference * Fix Microsoft.Bot.Builder.Dialogs.Adaptive.Testing Co-authored-by: Thomas Chung * feat: Use preview version for RC/preview releases (#1194) * initial changes * Update templates to use preview Co-authored-by: Thomas Chung * chore: fix netcore install steps for various deployment stages (#1196) * pull netcore install steps to build-test and package separately * remove netcore step from signing as it is used in packaging * feat: Update everything with JS to GA (#1195) * Update everything to GA * Update yarn lock * Update yarn lock * Update dependency package version * Add missing dependency Co-authored-by: Thomas Chung * chore: update deprecated nuget package licenseurl properties (#1197) * Update directory.build.props LicenseUrl tags with PackageLicenseExpression referencing the MIT license * replace nuspec licenseURl with license * replace nuspec license with license type referencing MIT * Update Directory.Build.props Add NU5048 to NoWarn * Update Directory.Build.props * Update dummy test script in node packages with clearer message and to not "exit 1" (#1199) * port: GetMeetingInfo, meeting start/end events [JS] (#1175) * port: JS Teams Tests and CloudAdapter support (#1200) * port: GetMeetingInfo, meeting start/end events [.NET] (#1178) * chore: Moving branch to RC0 + bump C# SDK to 4.14.1 (#1205) * chore: build workspace prior to testing (#1206) * Empty out sdk schema and uischema to force regen (#1208) Co-authored-by: Thomas Chung * fix: typo in OnMEBotMessagePreviewSend (#1212) * Update packages and tempalte reference to 1.1.0 GA (#1213) * fix: fully remove unnecessary onTeamsMEConfigurationSetting (#1215) * Bump version to 1.1.1 and correct references (#1216) Co-authored-by: Thomas Chung Co-authored-by: Ryan Lengel Isgrig <43043272+ryanlengel@users.noreply.github.com> Co-authored-by: Steven Ickman Co-authored-by: Eric Dahlvang Co-authored-by: Michael Richardson <40401643+mdrichardson@users.noreply.github.com> --- .eslintrc.json | 3 +- .gitignore | 3 + build/yaml/templates/component-template.yml | 2 - .../templates/dotnet-build-test-steps.yml | 10 + .../templates/dotnet-install-sdk-steps.yml | 10 - build/yaml/templates/dotnet-package-steps.yml | 5 + build/yaml/templates/npm-versioning-steps.yml | 2 +- build/yaml/templates/nuget-signing-steps.yml | 5 - .../yaml/templates/nuget-versioning-steps.yml | 2 +- .../app/templates/assets/schemas/sdk.schema | 9874 +---------------- .../app/templates/assets/schemas/sdk.uischema | 782 +- .../generator-bot-adaptive/package.json | 2 +- .../generator-bot-adaptive/platforms.js | 4 +- .../test/dotnet-functions.test.js | 2 +- .../test/dotnet-webapp.test.js | 2 +- .../test/js-functions.test.js | 6 +- .../test/js-webapp.test.js | 6 +- .../generators/app/index.js | 2 +- .../generator-bot-core-assistant/package.json | 4 +- .../generators/app/index.js | 4 +- .../generator-bot-core-language/package.json | 4 +- .../generator-bot-core-qna/package.json | 4 +- generators/generator-bot-empty/package.json | 4 +- .../generators/app/index.js | 2 +- .../package.json | 8 +- .../generators/app/index.js | 2 +- .../package.json | 4 +- .../generators/app/index.js | 2 +- .../package.json | 4 +- package.json | 3 +- ...rosoft.Bot.Components.AdaptiveCards.csproj | 4 +- packages/Directory.Build.props | 11 +- .../Microsoft.Bot.Components.Graph.csproj | 4 +- ...rosoft.Bot.Components.HelpAndCancel.nuspec | 6 +- packages/HelpAndCancel/package.json | 4 +- .../Teams/dotnet/Actions/GetMeetingInfo.cs | 104 + .../Actions/SendMessageToTeamsChannel.cs | 55 +- .../Microsoft.Bot.Components.Teams.csproj | 4 +- .../Actions/Teams.GetMeetingInfo.schema | 38 + .../Actions/Teams.GetMeetingInfo.uischema | 6 + .../Teams.OnMeetingEnd.schema | 9 + .../Teams.OnMeetingEnd.uischema | 7 + .../Teams.OnMeetingStart.schema | 9 + .../Teams.OnMeetingStart.uischema | 7 + packages/Teams/dotnet/TeamsBotComponent.cs | 3 + .../TriggerConditions/OnTeamsMeetingEnd.cs | 37 + .../TriggerConditions/OnTeamsMeetingStart.cs | 37 + packages/Teams/js/package.json | 39 +- .../Actions/Teams.GetMeetingInfo.schema | 38 + .../Actions/Teams.GetMeetingInfo.uischema | 6 + .../Teams.OnMeetingEnd.schema | 9 + .../Teams.OnMeetingEnd.uischema | 7 + .../Teams.OnMeetingStart.schema | 9 + .../Teams.OnMeetingStart.uischema | 7 + .../Teams/js/src/actions/actionHelpers.ts | 32 +- .../js/src/actions/baseAuthResponseDialog.ts | 58 +- .../Teams/js/src/actions/getMeetingInfo.ts | 119 + packages/Teams/js/src/actions/index.ts | 1 + .../src/actions/sendMessageToTeamsChannel.ts | 76 +- .../js/src/actions/sendTabCardResponse.ts | 25 +- .../Teams/js/src/adaptiveTeamsBotComponent.ts | 14 +- packages/Teams/js/src/conditions/index.ts | 3 +- .../onTeamsMEBotMessagePreviewSend.ts | 2 +- ...urationSetting.ts => onTeamsMeetingEnd.ts} | 11 +- .../js/src/conditions/onTeamsMeetingStart.ts | 29 + packages/Teams/js/src/index.ts | 4 +- .../Microsoft.Bot.Components.Welcome.nuspec | 6 +- packages/Welcome/package.json | 4 +- skills/csharp/Directory.Build.props | 2 +- .../csharp/calendarskill/CalendarSkill.csproj | 2 +- .../Calendar/Calendar/Calendar.csproj | 2 +- .../declarative/People/People/People.csproj | 8 +- .../CodeFirst/SimpleHostBot/package.json | 4 +- .../CodeFirst/WaterfallHostBot/package.json | 4 +- .../CodeFirst/EchoSkillBot/package.json | 2 +- .../CodeFirst/WaterfallSkillBot/package.json | 4 +- tests/functional/Directory.Build.props | 2 +- .../TranscriptConverter.csproj | 2 +- .../TranscriptTestRunner.csproj | 4 +- tests/unit/Microsoft.Bot.Components.Tests.sln | 14 +- .../Action_GetMeetingParticipant.test.dialog | 11 +- ...ion_GetMeetingParticipantError.test.dialog | 0 ...ingParticipantErrorWithAdapter.test.dialog | 0 .../ActionTests/Action_GetMember.test.dialog | 0 .../Action_GetMemberError.test.dialog | 0 ...tion_GetMemberErrorWithAdapter.test.dialog | 0 .../Action_GetPagedMembers.test.dialog | 0 .../Action_GetPagedMembersError.test.dialog | 0 .../Action_GetPagedTeamMembers.test.dialog | 0 ...ction_GetPagedTeamMembersError.test.dialog | 0 .../Action_GetTeamChannels.test.dialog | 0 .../Action_GetTeamChannelsError.test.dialog | 0 .../Action_GetTeamDetails.test.dialog | 0 .../Action_GetTeamDetailsError.test.dialog | 0 .../Action_GetTeamMember.test.dialog | 0 .../Action_GetTeamMemberError.test.dialog | 0 ..._GetTeamMemberErrorWithAdapter.test.dialog | 0 ..._SendAppBasedLinkQueryResponse.test.dialog | 0 ...AppBasedLinkQueryResponseError.test.dialog | 0 .../Action_SendMEActionResponse.test.dialog | 0 ...tion_SendMEActionResponseError.test.dialog | 0 ...tion_SendMEAttachmentsResponse.test.dialog | 0 ...SendMEAttachmentsResponseError.test.dialog | 0 .../Action_SendMEAuthResponse.test.dialog | 0 ...Action_SendMEAuthResponseError.test.dialog | 0 ...MEAuthResponseErrorWithAdapter.test.dialog | 0 ...endMEBotMessagePreviewResponse.test.dialog | 0 ...BotMessagePreviewResponseError.test.dialog | 0 ...EConfigQuerySettingUrlResponse.test.dialog | 0 ...igQuerySettingUrlResponseError.test.dialog | 0 .../Action_SendMEMessageResponse.test.dialog | 0 ...ion_SendMEMessageResponseError.test.dialog | 0 ...ction_SendMESelectItemResponse.test.dialog | 0 ..._SendMESelectItemResponseError.test.dialog | 0 ...tion_SendMessageToTeamsChannel.test.dialog | 0 ...SendMessageToTeamsChannelError.test.dialog | 0 ...ction_SendTabAuthResponseError.test.dialog | 0 ...abAuthResponseErrorWithAdapter.test.dialog | 0 .../Action_SendTabCardResponse.test.dialog | 0 ...ction_SendTabCardResponseError.test.dialog | 0 ...ion_SendTaskModuleCardResponse.test.dialog | 0 ...endTaskModuleCardResponseError.test.dialog | 0 ..._SendTaskModuleMessageResponse.test.dialog | 0 ...tion_SendTaskModuleUrlResponse.test.dialog | 0 ...SendTaskModuleUrlResponseError.test.dialog | 0 ...nalsTests_OnTeamsActivityTypes.test.dialog | 50 + .../dotnet}/ActionTests.cs | 0 .../dotnet}/ConditionalTests.cs | 2 +- ...icrosoft.Bot.Components.Teams.Tests.csproj | 6 +- .../dotnet}/ResourceExplorerFixture.cs | 2 +- .../dotnet}/TestUtils.cs | 0 tests/unit/packages/Teams/js/package.json | 23 + .../Teams/js/tests/actionTests.test.ts | 508 + .../Teams/js/tests/conditionalTests.test.ts | 21 + tests/unit/packages/Teams/js/tests/utils.ts | 41 + tests/unit/packages/Teams/js/tsconfig.json | 10 + ...t.Bot.Dialogs.Tests.Skills.Calendar.csproj | 8 +- .../Microsoft.Bot.Dialogs.Tests.Common.csproj | 8 +- ...oft.Bot.Dialogs.Tests.Skills.People.csproj | 8 +- yarn.lock | 1067 +- 140 files changed, 2305 insertions(+), 11121 deletions(-) delete mode 100644 build/yaml/templates/dotnet-install-sdk-steps.yml create mode 100644 packages/Teams/dotnet/Actions/GetMeetingInfo.cs create mode 100644 packages/Teams/dotnet/Schemas/Actions/Teams.GetMeetingInfo.schema create mode 100644 packages/Teams/dotnet/Schemas/Actions/Teams.GetMeetingInfo.uischema create mode 100644 packages/Teams/dotnet/Schemas/TriggerConditions/Teams.OnMeetingEnd.schema create mode 100644 packages/Teams/dotnet/Schemas/TriggerConditions/Teams.OnMeetingEnd.uischema create mode 100644 packages/Teams/dotnet/Schemas/TriggerConditions/Teams.OnMeetingStart.schema create mode 100644 packages/Teams/dotnet/Schemas/TriggerConditions/Teams.OnMeetingStart.uischema create mode 100644 packages/Teams/dotnet/TriggerConditions/OnTeamsMeetingEnd.cs create mode 100644 packages/Teams/dotnet/TriggerConditions/OnTeamsMeetingStart.cs create mode 100644 packages/Teams/js/schemas/Actions/Teams.GetMeetingInfo.schema create mode 100644 packages/Teams/js/schemas/Actions/Teams.GetMeetingInfo.uischema create mode 100644 packages/Teams/js/schemas/TriggerConditions/Teams.OnMeetingEnd.schema create mode 100644 packages/Teams/js/schemas/TriggerConditions/Teams.OnMeetingEnd.uischema create mode 100644 packages/Teams/js/schemas/TriggerConditions/Teams.OnMeetingStart.schema create mode 100644 packages/Teams/js/schemas/TriggerConditions/Teams.OnMeetingStart.uischema create mode 100644 packages/Teams/js/src/actions/getMeetingInfo.ts rename packages/Teams/js/src/conditions/{onTeamsMEConfigurationSetting.ts => onTeamsMeetingEnd.ts} (63%) create mode 100644 packages/Teams/js/src/conditions/onTeamsMeetingStart.ts rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_GetMeetingParticipant.test.dialog (89%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_GetMeetingParticipantError.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_GetMeetingParticipantErrorWithAdapter.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_GetMember.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_GetMemberError.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_GetMemberErrorWithAdapter.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_GetPagedMembers.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_GetPagedMembersError.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_GetPagedTeamMembers.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_GetPagedTeamMembersError.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_GetTeamChannels.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_GetTeamChannelsError.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_GetTeamDetails.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_GetTeamDetailsError.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_GetTeamMember.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_GetTeamMemberError.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_GetTeamMemberErrorWithAdapter.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendAppBasedLinkQueryResponse.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendAppBasedLinkQueryResponseError.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendMEActionResponse.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendMEActionResponseError.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendMEAttachmentsResponse.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendMEAttachmentsResponseError.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendMEAuthResponse.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendMEAuthResponseError.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendMEAuthResponseErrorWithAdapter.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendMEBotMessagePreviewResponse.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendMEBotMessagePreviewResponseError.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendMEConfigQuerySettingUrlResponse.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendMEConfigQuerySettingUrlResponseError.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendMEMessageResponse.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendMEMessageResponseError.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendMESelectItemResponse.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendMESelectItemResponseError.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendMessageToTeamsChannel.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendMessageToTeamsChannelError.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendTabAuthResponseError.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendTabAuthResponseErrorWithAdapter.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendTabCardResponse.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendTabCardResponseError.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendTaskModuleCardResponse.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendTaskModuleCardResponseError.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendTaskModuleMessageResponse.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendTaskModuleUrlResponse.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ActionTests/Action_SendTaskModuleUrlResponseError.test.dialog (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests/Tests => Teams/Shared Tests}/ConditionalTests/ConditionalsTests_OnTeamsActivityTypes.test.dialog (91%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests => Teams/dotnet}/ActionTests.cs (100%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests => Teams/dotnet}/ConditionalTests.cs (95%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests => Teams/dotnet}/Microsoft.Bot.Components.Teams.Tests.csproj (88%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests => Teams/dotnet}/ResourceExplorerFixture.cs (95%) rename tests/unit/packages/{Microsoft.Bot.Components.Teams.Tests => Teams/dotnet}/TestUtils.cs (100%) create mode 100644 tests/unit/packages/Teams/js/package.json create mode 100644 tests/unit/packages/Teams/js/tests/actionTests.test.ts create mode 100644 tests/unit/packages/Teams/js/tests/conditionalTests.test.ts create mode 100644 tests/unit/packages/Teams/js/tests/utils.ts create mode 100644 tests/unit/packages/Teams/js/tsconfig.json diff --git a/.eslintrc.json b/.eslintrc.json index d21952753f..5bcc487e97 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -8,6 +8,7 @@ "plugins": ["prettier"], "rules": { "prettier/prettier": "error" - } + }, + "root": true } diff --git a/.gitignore b/.gitignore index 7f2ab38b1a..1635c14d55 100644 --- a/.gitignore +++ b/.gitignore @@ -384,6 +384,9 @@ experimental/generator-dotnet-yeoman/node_modules # Allow the root-level /packages/ directory or it gets confused with NuGet directories !/[Pp]ackages/* +# Allow the packages directory under tests +!/tests/unit/[Pp]ackages/* + # Ignore correct yarn files (no zero install support) .yarn/* !.yarn/patches diff --git a/build/yaml/templates/component-template.yml b/build/yaml/templates/component-template.yml index cce084d0c1..b2b5884c4b 100644 --- a/build/yaml/templates/component-template.yml +++ b/build/yaml/templates/component-template.yml @@ -33,7 +33,6 @@ stages: - job: build_test_dotnet displayName: Build and test .csproj with dotnet steps: - - template: dotnet-install-sdk-steps.yml - template: dotnet-build-test-steps.yml - stage: stage_package_nuget @@ -46,7 +45,6 @@ stages: condition: eq(variables.ComponentType, 'codeExtension') steps: - template: nuget-versioning-steps.yml - - template: dotnet-install-sdk-steps.yml - template: dotnet-package-steps.yml - template: nuget-signing-steps.yml - job: job_pack_nuspec diff --git a/build/yaml/templates/dotnet-build-test-steps.yml b/build/yaml/templates/dotnet-build-test-steps.yml index cf6901e5b2..6a6c0e7bc5 100644 --- a/build/yaml/templates/dotnet-build-test-steps.yml +++ b/build/yaml/templates/dotnet-build-test-steps.yml @@ -1,4 +1,14 @@ steps: +- task: UseDotNet@2 + displayName: 'Use .Net Core sdk 2.1.x' + inputs: + version: 2.1.x + +- task: UseDotNet@2 + displayName: 'Use .Net Core sdk 3.1.x' + inputs: + version: 3.1.x + - task: DotNetCoreCLI@2 displayName: 'Run `dotnet restore`' inputs: diff --git a/build/yaml/templates/dotnet-install-sdk-steps.yml b/build/yaml/templates/dotnet-install-sdk-steps.yml deleted file mode 100644 index 772e09f578..0000000000 --- a/build/yaml/templates/dotnet-install-sdk-steps.yml +++ /dev/null @@ -1,10 +0,0 @@ -steps: -- task: UseDotNet@2 - displayName: 'Use .Net Core sdk 2.1.x' - inputs: - version: 2.1.x - -- task: UseDotNet@2 - displayName: 'Use .Net Core sdk 3.1.x' - inputs: - version: 3.1.x diff --git a/build/yaml/templates/dotnet-package-steps.yml b/build/yaml/templates/dotnet-package-steps.yml index 49e0a39302..106b8caa7e 100644 --- a/build/yaml/templates/dotnet-package-steps.yml +++ b/build/yaml/templates/dotnet-package-steps.yml @@ -1,4 +1,9 @@ steps: +- task: UseDotNet@2 + displayName: 'Use .Net Core sdk 2.1.x' + inputs: + version: 2.1.x + - task: DotNetCoreCLI@2 displayName: 'Run `dotnet publish`' inputs: diff --git a/build/yaml/templates/npm-versioning-steps.yml b/build/yaml/templates/npm-versioning-steps.yml index a028d41658..a37761b4eb 100644 --- a/build/yaml/templates/npm-versioning-steps.yml +++ b/build/yaml/templates/npm-versioning-steps.yml @@ -13,7 +13,7 @@ steps: $deploymentRing = $deploymentRingOverride; } - if ($deploymentRing.ToLowerInvariant() -eq "rc") { + if (($deploymentRing.ToLowerInvariant() -eq "rc") -or ($deploymentRing.ToLowerInvariant() -eq "preview")) { $releaseCandidateNumber = "$env:RELEASECANDIDATENUMBER"; "Release Candidate Number = $releaseCandidateNumber"; diff --git a/build/yaml/templates/nuget-signing-steps.yml b/build/yaml/templates/nuget-signing-steps.yml index 5e08c14ebe..269af981c7 100644 --- a/build/yaml/templates/nuget-signing-steps.yml +++ b/build/yaml/templates/nuget-signing-steps.yml @@ -2,11 +2,6 @@ # Extra steps are required to sign the binaries of the code extensions. steps: -- task: UseDotNet@2 - displayName: 'Use .Net Core sdk 2.1.x' - inputs: - version: 2.1.x - - task: CopyFiles@2 displayName: 'Copy packages to Signing' inputs: diff --git a/build/yaml/templates/nuget-versioning-steps.yml b/build/yaml/templates/nuget-versioning-steps.yml index 1e9f430aa5..9192584a46 100644 --- a/build/yaml/templates/nuget-versioning-steps.yml +++ b/build/yaml/templates/nuget-versioning-steps.yml @@ -13,7 +13,7 @@ steps: $deploymentRing = $deploymentRingOverride; } - if ($deploymentRing.ToLowerInvariant() -eq "rc") { + if (($deploymentRing.ToLowerInvariant() -eq "rc") -or ($deploymentRing.ToLowerInvariant() -eq "preview")) { $releaseCandidateNumber = "$env:RELEASECANDIDATENUMBER"; "Release Candidate Number = $releaseCandidateNumber"; diff --git a/generators/generator-bot-adaptive/generators/app/templates/assets/schemas/sdk.schema b/generators/generator-bot-adaptive/generators/app/templates/assets/schemas/sdk.schema index f43be3014a..9e26dfeeb6 100644 --- a/generators/generator-bot-adaptive/generators/app/templates/assets/schemas/sdk.schema +++ b/generators/generator-bot-adaptive/generators/app/templates/assets/schemas/sdk.schema @@ -1,9873 +1 @@ -{ - "$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema", - "type": "object", - "title": "Component kinds", - "description": "These are all of the kinds that can be created by the loader.", - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.ActivityTemplate" - }, - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog" - }, - { - "$ref": "#/definitions/Microsoft.AgeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.Ask" - }, - { - "$ref": "#/definitions/Microsoft.AttachmentInput" - }, - { - "$ref": "#/definitions/Microsoft.BeginDialog" - }, - { - "$ref": "#/definitions/Microsoft.BeginSkill" - }, - { - "$ref": "#/definitions/Microsoft.BreakLoop" - }, - { - "$ref": "#/definitions/Microsoft.CancelAllDialogs" - }, - { - "$ref": "#/definitions/Microsoft.CancelDialog" - }, - { - "$ref": "#/definitions/Microsoft.ChannelMentionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.ChoiceInput" - }, - { - "$ref": "#/definitions/Microsoft.ConditionalSelector" - }, - { - "$ref": "#/definitions/Microsoft.ConfirmInput" - }, - { - "$ref": "#/definitions/Microsoft.ConfirmationEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.ContinueConversationLater" - }, - { - "$ref": "#/definitions/Microsoft.ContinueLoop" - }, - { - "$ref": "#/definitions/Microsoft.CrossTrainedRecognizerSet" - }, - { - "$ref": "#/definitions/Microsoft.CurrencyEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.DateTimeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.DateTimeInput" - }, - { - "$ref": "#/definitions/Microsoft.DebugBreak" - }, - { - "$ref": "#/definitions/Microsoft.DeleteActivity" - }, - { - "$ref": "#/definitions/Microsoft.DeleteProperties" - }, - { - "$ref": "#/definitions/Microsoft.DeleteProperty" - }, - { - "$ref": "#/definitions/Microsoft.DimensionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.EditActions" - }, - { - "$ref": "#/definitions/Microsoft.EditArray" - }, - { - "$ref": "#/definitions/Microsoft.EmailEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.EmitEvent" - }, - { - "$ref": "#/definitions/Microsoft.EndDialog" - }, - { - "$ref": "#/definitions/Microsoft.EndTurn" - }, - { - "$ref": "#/definitions/Microsoft.FirstSelector" - }, - { - "$ref": "#/definitions/Microsoft.Foreach" - }, - { - "$ref": "#/definitions/Microsoft.ForeachPage" - }, - { - "$ref": "#/definitions/Microsoft.GetActivityMembers" - }, - { - "$ref": "#/definitions/Microsoft.GetConversationMembers" - }, - { - "$ref": "#/definitions/Microsoft.GotoAction" - }, - { - "$ref": "#/definitions/Microsoft.GuidEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.HashtagEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.HttpRequest" - }, - { - "$ref": "#/definitions/Microsoft.IfCondition" - }, - { - "$ref": "#/definitions/Microsoft.IpEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.LogAction" - }, - { - "$ref": "#/definitions/Microsoft.LuisRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.MentionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.MostSpecificSelector" - }, - { - "$ref": "#/definitions/Microsoft.MultiLanguageRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.NumberEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.NumberInput" - }, - { - "$ref": "#/definitions/Microsoft.NumberRangeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.OAuthInput" - }, - { - "$ref": "#/definitions/Microsoft.OnActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnAssignEntity" - }, - { - "$ref": "#/definitions/Microsoft.OnBeginDialog" - }, - { - "$ref": "#/definitions/Microsoft.OnCancelDialog" - }, - { - "$ref": "#/definitions/Microsoft.OnChooseEntity" - }, - { - "$ref": "#/definitions/Microsoft.OnChooseIntent" - }, - { - "$ref": "#/definitions/Microsoft.OnChooseProperty" - }, - { - "$ref": "#/definitions/Microsoft.OnCondition" - }, - { - "$ref": "#/definitions/Microsoft.OnContinueConversation" - }, - { - "$ref": "#/definitions/Microsoft.OnConversationUpdateActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnDialogEvent" - }, - { - "$ref": "#/definitions/Microsoft.OnEndOfActions" - }, - { - "$ref": "#/definitions/Microsoft.OnEndOfConversationActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnError" - }, - { - "$ref": "#/definitions/Microsoft.OnEventActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnHandoffActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnInstallationUpdateActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnIntent" - }, - { - "$ref": "#/definitions/Microsoft.OnInvokeActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageDeleteActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageReactionActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageUpdateActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnQnAMatch" - }, - { - "$ref": "#/definitions/Microsoft.OnRepromptDialog" - }, - { - "$ref": "#/definitions/Microsoft.OnTypingActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnUnknownIntent" - }, - { - "$ref": "#/definitions/Microsoft.OrdinalEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.PercentageEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.PhoneNumberEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.QnAMakerDialog" - }, - { - "$ref": "#/definitions/Microsoft.QnAMakerRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.RandomSelector" - }, - { - "$ref": "#/definitions/Microsoft.RecognizerSet" - }, - { - "$ref": "#/definitions/Microsoft.RegexEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.RegexRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.RepeatDialog" - }, - { - "$ref": "#/definitions/Microsoft.ReplaceDialog" - }, - { - "$ref": "#/definitions/Microsoft.ResourceMultiLanguageGenerator" - }, - { - "$ref": "#/definitions/Microsoft.SendActivity" - }, - { - "$ref": "#/definitions/Microsoft.SetProperties" - }, - { - "$ref": "#/definitions/Microsoft.SetProperty" - }, - { - "$ref": "#/definitions/Microsoft.SignOutUser" - }, - { - "$ref": "#/definitions/Microsoft.StaticActivityTemplate" - }, - { - "$ref": "#/definitions/Microsoft.SwitchCondition" - }, - { - "$ref": "#/definitions/Microsoft.TelemetryTrackEvent" - }, - { - "$ref": "#/definitions/Microsoft.TemperatureEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.TemplateEngineLanguageGenerator" - }, - { - "$ref": "#/definitions/Microsoft.TextInput" - }, - { - "$ref": "#/definitions/Microsoft.TextTemplate" - }, - { - "$ref": "#/definitions/Microsoft.ThrowException" - }, - { - "$ref": "#/definitions/Microsoft.TraceActivity" - }, - { - "$ref": "#/definitions/Microsoft.TrueSelector" - }, - { - "$ref": "#/definitions/Microsoft.UpdateActivity" - }, - { - "$ref": "#/definitions/Microsoft.UrlEntityRecognizer" - } - ], - "definitions": { - "Microsoft.ActivityTemplate": { - "$role": "implements(Microsoft.IActivityTemplate)", - "title": "Microsoft activity template", - "type": "object", - "required": [ - "template", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "template": { - "title": "Template", - "description": "Language Generator template to use to create the activity", - "type": "string" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ActivityTemplate" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.AdaptiveDialog": { - "$role": "implements(Microsoft.IDialog)", - "title": "Adaptive dialog", - "description": "Flexible, data driven dialog that can adapt to the conversation.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional dialog ID." - }, - "autoEndDialog": { - "$ref": "#/definitions/booleanExpression", - "title": "Auto end dialog", - "description": "If set to true the dialog will automatically end when there are no further actions. If set to false, remember to manually end the dialog using EndDialog action.", - "default": true - }, - "defaultResultProperty": { - "type": "string", - "title": "Default result property", - "description": "Value that will be passed back to the parent dialog.", - "default": "dialog.result" - }, - "recognizer": { - "$kind": "Microsoft.IRecognizer", - "title": "Recognizer", - "description": "Input recognizer that interprets user input into intent and entities.", - "$ref": "#/definitions/Microsoft.IRecognizer" - }, - "generator": { - "$kind": "Microsoft.ILanguageGenerator", - "title": "Language generator", - "description": "Language generator that generates bot responses.", - "$ref": "#/definitions/Microsoft.ILanguageGenerator" - }, - "selector": { - "$kind": "Microsoft.ITriggerSelector", - "title": "Selector", - "description": "Policy to determine which trigger is executed. Defaults to a 'best match' selector (optional).", - "$ref": "#/definitions/Microsoft.ITriggerSelector" - }, - "triggers": { - "type": "array", - "description": "List of triggers defined for this dialog.", - "title": "Triggers", - "items": { - "$kind": "Microsoft.ITrigger", - "title": "Event triggers", - "description": "Event triggers for handling events.", - "$ref": "#/definitions/Microsoft.ITrigger" - } - }, - "schema": { - "title": "Schema", - "description": "Schema to fill in.", - "anyOf": [ - { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Core schema meta-schema", - "definitions": { - "schemaArray": { - "type": "array", - "minItems": 1, - "items": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - } - }, - "nonNegativeInteger": { - "type": "integer", - "minimum": 0 - }, - "nonNegativeIntegerDefault0": { - "type": "integer", - "minimum": 0, - "default": 0 - }, - "simpleTypes": { - "enum": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ] - }, - "stringArray": { - "type": "array", - "uniqueItems": true, - "default": [], - "items": { - "type": "string" - } - } - }, - "type": [ - "object", - "boolean" - ], - "properties": { - "$schema": { - "type": "string", - "format": "uri" - }, - "$ref": { - "type": "string", - "format": "uri-reference" - }, - "$comment": { - "type": "string" - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "default": true, - "readOnly": { - "type": "boolean", - "default": false - }, - "writeOnly": { - "type": "boolean", - "default": false - }, - "examples": { - "type": "array", - "items": true - }, - "multipleOf": { - "type": "number", - "exclusiveMinimum": 0 - }, - "maximum": { - "type": "number" - }, - "exclusiveMaximum": { - "type": "number" - }, - "minimum": { - "type": "number" - }, - "exclusiveMinimum": { - "type": "number" - }, - "maxLength": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeInteger" - }, - "minLength": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeIntegerDefault0" - }, - "pattern": { - "type": "string", - "format": "regex" - }, - "additionalItems": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - "items": { - "anyOf": [ - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" - } - ], - "default": true - }, - "maxItems": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeInteger" - }, - "minItems": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeIntegerDefault0" - }, - "uniqueItems": { - "type": "boolean", - "default": false - }, - "contains": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - "maxProperties": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeInteger" - }, - "minProperties": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeIntegerDefault0" - }, - "required": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/stringArray" - }, - "additionalProperties": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - "definitions": { - "type": "object", - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - } - }, - "properties": { - "type": "object", - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - } - }, - "patternProperties": { - "type": "object", - "propertyNames": { - "format": "regex" - }, - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - } - }, - "dependencies": { - "type": "object", - "additionalProperties": { - "anyOf": [ - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/stringArray" - } - ] - } - }, - "propertyNames": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - "const": true, - "enum": { - "type": "array", - "minItems": 1, - "uniqueItems": true, - "items": true - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/simpleTypes" - }, - { - "type": "array", - "items": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/simpleTypes" - }, - "minItems": 1, - "uniqueItems": true - } - ] - }, - "format": { - "type": "string" - }, - "contentMediaType": { - "type": "string" - }, - "contentEncoding": { - "type": "string" - }, - "if": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - "then": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - "else": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - "allOf": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" - }, - "anyOf": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" - }, - "oneOf": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" - }, - "not": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - } - }, - "default": true - }, - { - "type": "string", - "title": "Reference to JSON schema", - "description": "Reference to JSON schema .dialog file." - } - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.AdaptiveDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.AgeEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Age entity recognizer", - "description": "Recognizer which recognizes age.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.AgeEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.Ask": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.SendActivity)" - ], - "title": "Send activity to ask a question", - "description": "This is an action which sends an activity to the user when a response is expected", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "expectedProperties": { - "$ref": "#/definitions/arrayExpression", - "title": "Expected properties", - "description": "Properties expected from the user.", - "examples": [ - [ - "age", - "name" - ] - ], - "items": { - "type": "string", - "title": "Name", - "description": "Name of the property" - } - }, - "defaultOperation": { - "$ref": "#/definitions/stringExpression", - "title": "Default operation", - "description": "Sets the default operation that will be used when no operation is recognized in the response to this Ask.", - "examples": [ - "Add()", - "Remove()" - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action." - }, - "activity": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Activity", - "description": "Activity to send.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.Ask" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.AttachmentInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "title": "Attachment input dialog", - "description": "Collect information - Ask for a file or image.", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "type": "object", - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "defaultValue": { - "$role": "expression", - "title": "Default value", - "description": "'Property' will be set to the object or the result of this expression when max turn count is exceeded.", - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.IActivityTemplate/oneOf/1/properties/attachments/items", - "title": "Object", - "description": "Attachment object." - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "value": { - "$role": "expression", - "title": "Value", - "description": "'Property' will be set to the object or the result of this expression unless it evaluates to null.", - "oneOf": [ - { - "$ref": "#/definitions/Microsoft.IActivityTemplate/oneOf/1/properties/attachments/items", - "title": "Object", - "description": "Attachment object." - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "outputFormat": { - "$role": "expression", - "title": "Output format", - "description": "Attachment output format.", - "oneOf": [ - { - "type": "string", - "title": "Standard format", - "description": "Standard output formats.", - "enum": [ - "all", - "first" - ], - "default": "first" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.AttachmentInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.BeginDialog": { - "$role": "implements(Microsoft.IDialog)", - "title": "Begin a dialog", - "description": "Begin another dialog.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "dialog": { - "oneOf": [ - { - "$kind": "Microsoft.IDialog", - "pattern": "^(?!(=)).*", - "title": "Dialog", - "$ref": "#/definitions/Microsoft.IDialog" - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=settings.dialogId" - ] - } - ], - "title": "Dialog name", - "description": "Name of the dialog to call." - }, - "options": { - "$ref": "#/definitions/objectExpression", - "title": "Options", - "description": "One or more options that are passed to the dialog that is called.", - "examples": [ - { - "arg1": "=expression" - } - ], - "additionalProperties": { - "type": "string", - "title": "Options", - "description": "Options for dialog." - } - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the dialog that is called can process the current activity.", - "default": true - }, - "resultProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store any value returned by the dialog that is called.", - "examples": [ - "dialog.userName" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.BeginDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.BeginSkill": { - "$role": "implements(Microsoft.IDialog)", - "title": "Begin a skill", - "description": "Begin a remote skill.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the skill dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=f(x)" - ] - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the skill will be started using the activity in the current turn context instead of the activity in the Activity property.", - "default": true, - "examples": [ - true, - "=f(x)" - ] - }, - "resultProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store any value returned by the dialog that is called.", - "examples": [ - "dialog.userName" - ] - }, - "botId": { - "$ref": "#/definitions/stringExpression", - "title": "Skill host bot ID", - "description": "The Microsoft App ID that will be calling the skill.", - "default": "=settings.MicrosoftAppId" - }, - "skillHostEndpoint": { - "$ref": "#/definitions/stringExpression", - "title": "Skill host", - "description": "The callback Url for the skill host.", - "default": "=settings.skillHostEndpoint", - "examples": [ - "https://mybot.contoso.com/api/skills/" - ] - }, - "connectionName": { - "$ref": "#/definitions/stringExpression", - "title": "OAuth connection name (SSO)", - "description": "The OAuth Connection Name, that would be used to perform Single SignOn with a skill.", - "default": "=settings.connectionName" - }, - "skillAppId": { - "$ref": "#/definitions/stringExpression", - "title": "Skill App Id", - "description": "The Microsoft App ID for the skill." - }, - "skillEndpoint": { - "$ref": "#/definitions/stringExpression", - "title": "Skill endpoint ", - "description": "The /api/messages endpoint for the skill.", - "examples": [ - "https://myskill.contoso.com/api/messages/" - ] - }, - "activity": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Activity", - "description": "The activity to send to the skill.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the skill.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.BeginSkill" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.BreakLoop": { - "$role": "implements(Microsoft.IDialog)", - "title": "Break loop", - "description": "Stop executing this loop", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.BreakLoop" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.CancelAllDialogs": { - "$role": "implements(Microsoft.IDialog)", - "title": "Cancel all dialogs", - "description": "Cancel all active dialogs. All dialogs in the dialog chain will need a trigger to capture the event configured in this action.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the caller dialog is told it should process the current activity.", - "default": true - }, - "eventName": { - "$ref": "#/definitions/stringExpression", - "title": "Event name", - "description": "Name of the event to emit." - }, - "eventValue": { - "$ref": "#/definitions/valueExpression", - "title": "Event value", - "description": "Value to emit with the event (optional).", - "additionalProperties": true - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.CancelAllDialogs" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.CancelDialog": { - "$role": "implements(Microsoft.IDialog)", - "title": "Cancel all dialogs", - "description": "Cancel all active dialogs. All dialogs in the dialog chain will need a trigger to capture the event configured in this action.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the caller dialog is told it should process the current activity.", - "default": true - }, - "eventName": { - "$ref": "#/definitions/stringExpression", - "title": "Event name", - "description": "Name of the event to emit." - }, - "eventValue": { - "$ref": "#/definitions/valueExpression", - "title": "Event value", - "description": "Value to emit with the event (optional).", - "additionalProperties": true - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.CancelDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ChannelMentionEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)" - ], - "title": "Channel mention entity recognizer", - "description": "Promotes mention entities passed by a channel via the activity.entities into recognizer result.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ChannelMentionEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ChoiceInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "title": "Choice input dialog", - "description": "Collect information - Pick from a list of choices", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "defaultValue": { - "$ref": "#/definitions/stringExpression", - "title": "Default value", - "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", - "examples": [ - "hello world", - "Hello ${user.name}", - "=concat(user.firstname, user.lastName)" - ] - }, - "value": { - "$ref": "#/definitions/stringExpression", - "title": "Value", - "description": "'Property' will be set to the value of this expression unless it evaluates to null.", - "examples": [ - "hello world", - "Hello ${user.name}", - "=concat(user.firstname, user.lastName)" - ] - }, - "outputFormat": { - "$role": "expression", - "title": "Output format", - "description": "Sets the desired choice output format (either value or index into choices).", - "oneOf": [ - { - "type": "string", - "title": "Standard", - "description": "Standard output format.", - "enum": [ - "value", - "index" - ], - "default": "value" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "choices": { - "$role": "expression", - "title": "Array of choices", - "description": "Choices to choose from.", - "oneOf": [ - { - "type": "array", - "title": "Simple choices", - "description": "Simple choices to choose from.", - "items": [ - { - "type": "string", - "title": "Simple choice", - "description": "One choice for choice input." - } - ] - }, - { - "type": "array", - "title": "Structured choices", - "description": "Choices that allow full control.", - "items": [ - { - "type": "object", - "title": "Structured choice", - "description": "Structured choice to choose from.", - "properties": { - "value": { - "type": "string", - "title": "Value", - "description": "Value to return when this choice is selected." - }, - "action": { - "$ref": "#/definitions/Microsoft.IActivityTemplate/oneOf/1/properties/suggestedActions/properties/actions/items", - "title": "Action", - "description": "Card action for the choice." - }, - "synonyms": { - "type": "array", - "title": "Synonyms", - "description": "List of synonyms to recognize in addition to the value (optional).", - "items": { - "type": "string", - "title": "Synonym", - "description": "Synonym for value." - } - } - } - } - ] - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "defaultLocale": { - "$ref": "#/definitions/stringExpression", - "title": "Default locale", - "description": "The default locale to use to parse confirmation choices if there is not one passed by the caller.", - "default": "en-us", - "examples": [ - "en-us" - ] - }, - "style": { - "$role": "expression", - "title": "List style", - "description": "Sets the ListStyle to control how choices are rendered.", - "oneOf": [ - { - "type": "string", - "title": "List style", - "description": "Standard list style.", - "enum": [ - "none", - "auto", - "inline", - "list", - "suggestedAction", - "heroCard" - ], - "default": "auto" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "choiceOptions": { - "title": "Choice options", - "description": "Sets the choice options used for controlling how choices are combined.", - "oneOf": [ - { - "type": "object", - "title": "Object", - "description": "Choice options object.", - "properties": { - "inlineSeparator": { - "type": "string", - "title": "Inline separator", - "description": "Character used to separate individual choices when there are more than 2 choices", - "default": ", " - }, - "inlineOr": { - "type": "string", - "title": "Inline or", - "description": "Separator inserted between the choices when there are only 2 choices", - "default": " or " - }, - "inlineOrMore": { - "type": "string", - "title": "Inline or more", - "description": "Separator inserted between the last 2 choices when their are more than 2 choices.", - "default": ", or " - }, - "includeNumbers": { - "type": "boolean", - "title": "Include numbers", - "description": "If true, 'inline' and 'list' list style will be prefixed with the index of the choice.", - "default": true - } - } - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "recognizerOptions": { - "title": "Recognizer options", - "description": "Sets how to recognize choices in the response", - "oneOf": [ - { - "type": "object", - "title": "Object", - "description": "Options for recognizer.", - "properties": { - "noValue": { - "type": "boolean", - "title": "No value", - "description": "If true, the choices value field will NOT be search over", - "default": false - }, - "noAction": { - "type": "boolean", - "title": "No action", - "description": "If true, the choices action.title field will NOT be searched over", - "default": false - }, - "recognizeNumbers": { - "type": "boolean", - "title": "Recognize numbers", - "description": "If true, the number recognizer will be used to recognize an index response (1,2,3...) to the prompt.", - "default": true - }, - "recognizeOrdinals": { - "type": "boolean", - "title": "Recognize ordinals", - "description": "If true, the ordinal recognizer will be used to recognize ordinal response (first/second/...) to the prompt.", - "default": true - } - } - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ChoiceInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ConditionalSelector": { - "$role": "implements(Microsoft.ITriggerSelector)", - "title": "Conditional trigger selector", - "description": "Use a rule selector based on a condition", - "type": "object", - "required": [ - "condition", - "ifTrue", - "ifFalse", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression to evaluate" - }, - "ifTrue": { - "$kind": "Microsoft.ITriggerSelector", - "$ref": "#/definitions/Microsoft.ITriggerSelector" - }, - "ifFalse": { - "$kind": "Microsoft.ITriggerSelector", - "$ref": "#/definitions/Microsoft.ITriggerSelector" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ConditionalSelector" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ConfirmInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "title": "Confirm input dialog", - "description": "Collect information - Ask for confirmation (yes or no).", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "outputFormat": { - "$ref": "#/definitions/valueExpression", - "title": "Output format", - "description": "Optional expression to use to format the output.", - "examples": [ - "=concat('confirmation:', this.value)" - ] - }, - "defaultLocale": { - "$ref": "#/definitions/stringExpression", - "title": "Default locale", - "description": "The Default locale or an expression which provides the default locale to use as default if not found in the activity.", - "default": "en-us", - "examples": [ - "en-us" - ] - }, - "style": { - "$role": "expression", - "title": "List style", - "description": "Sets the ListStyle to control how choices are rendered.", - "oneOf": [ - { - "type": "string", - "title": "Standard style", - "description": "Standard style for rendering choices.", - "enum": [ - "none", - "auto", - "inline", - "list", - "suggestedAction", - "heroCard" - ], - "default": "auto" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "choiceOptions": { - "title": "Choice options", - "description": "Choice Options or expression which provides Choice Options to control display choices to the user.", - "oneOf": [ - { - "type": "object", - "title": "Choice options", - "description": "Choice options.", - "properties": { - "inlineSeparator": { - "type": "string", - "title": "Inline separator", - "description": "Text to separate individual choices when there are more than 2 choices", - "default": ", " - }, - "inlineOr": { - "type": "string", - "title": "Inline or", - "description": "Text to be inserted between the choices when their are only 2 choices", - "default": " or " - }, - "inlineOrMore": { - "type": "string", - "title": "Inline or more", - "description": "Text to be inserted between the last 2 choices when their are more than 2 choices.", - "default": ", or " - }, - "includeNumbers": { - "type": "boolean", - "title": "Include numbers", - "description": "If true, inline and list style choices will be prefixed with the index of the choice.", - "default": true - } - } - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "defaultValue": { - "$ref": "#/definitions/booleanExpression", - "title": "Default value", - "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "value": { - "$ref": "#/definitions/booleanExpression", - "title": "Value", - "description": "'Property' will be set to the value of this expression unless it evaluates to null.", - "examples": [ - true, - "=user.isVip" - ] - }, - "confirmChoices": { - "$role": "expression", - "title": "Array of choice objects", - "description": "Array of simple or structured choices.", - "oneOf": [ - { - "type": "array", - "title": "Simple choices", - "description": "Simple choices to confirm from.", - "items": [ - { - "type": "string", - "title": "Simple choice", - "description": "Simple choice to confirm." - } - ] - }, - { - "type": "array", - "title": "Structured choices", - "description": "Structured choices for confirmations.", - "items": [ - { - "type": "object", - "title": "Choice", - "description": "Choice to confirm.", - "properties": { - "value": { - "type": "string", - "title": "Value", - "description": "Value to return when this choice is selected." - }, - "action": { - "$ref": "#/definitions/Microsoft.IActivityTemplate/oneOf/1/properties/suggestedActions/properties/actions/items", - "title": "Action", - "description": "Card action for the choice." - }, - "synonyms": { - "type": "array", - "title": "Synonyms", - "description": "List of synonyms to recognize in addition to the value (optional).", - "items": { - "type": "string", - "title": "Synonym", - "description": "Synonym for choice." - } - } - } - } - ] - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ConfirmInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ConfirmationEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Confirmation entity recognizer", - "description": "Recognizer which recognizes confirmation choices (yes/no).", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ConfirmationEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ContinueConversationLater": { - "$role": "implements(Microsoft.IDialog)", - "title": "Continue conversation later (Queue)", - "description": "Continue conversation at later time (via Azure Storage Queue).", - "type": "object", - "required": [ - "date", - "connectionString", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "date": { - "$ref": "#/definitions/stringExpression", - "title": "Date", - "description": "Date in the future as a ISO string when the conversation should continue.", - "examples": [ - "=addHours(utcNow(), 1)" - ] - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "Value to send in the activity.value." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ContinueConversationLater" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ContinueLoop": { - "$role": "implements(Microsoft.IDialog)", - "title": "Continue loop", - "description": "Stop executing this template and continue with the next iteration of the loop.", - "type": "object", - "required": [ - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ContinueLoop" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.CrossTrainedRecognizerSet": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "Cross-trained recognizer set", - "description": "Recognizer for selecting between cross trained recognizers.", - "type": "object", - "required": [ - "recognizers", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet." - }, - "recognizers": { - "type": "array", - "title": "Recognizers", - "description": "List of Recognizers defined for this set.", - "items": { - "$kind": "Microsoft.IRecognizer", - "$ref": "#/definitions/Microsoft.IRecognizer" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.CrossTrainedRecognizerSet" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.CurrencyEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Currency entity recognizer", - "description": "Recognizer which recognizes currency.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.CurrencyEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DateTimeEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Date and time entity recognizer", - "description": "Recognizer which recognizes dates and time fragments.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DateTimeEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DateTimeInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "title": "Date/time input dialog", - "description": "Collect information - Ask for date and/ or time", - "type": "object", - "defaultLocale": { - "$ref": "#/definitions/stringExpression", - "title": "Default locale", - "description": "Default locale.", - "default": "en-us" - }, - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "defaultValue": { - "$ref": "#/definitions/stringExpression", - "format": "date-time", - "title": "Default date", - "description": "'Property' will be set to the value or the result of the expression when max turn count is exceeded.", - "examples": [ - "=user.birthday" - ] - }, - "value": { - "$ref": "#/definitions/stringExpression", - "format": "date-time", - "title": "Value", - "description": "'Property' will be set to the value or the result of the expression unless it evaluates to null.", - "examples": [ - "=user.birthday" - ] - }, - "outputFormat": { - "$ref": "#/definitions/expression", - "title": "Output format", - "description": "Expression to use for formatting the output.", - "examples": [ - "=this.value[0].Value" - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DateTimeInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DebugBreak": { - "$role": "implements(Microsoft.IDialog)", - "title": "Debugger break", - "description": "If debugger is attached, stop the execution at this point in the conversation.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DebugBreak" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DeleteActivity": { - "$role": "implements(Microsoft.IDialog)", - "title": "Delete Activity", - "description": "Delete an activity that was previously sent.", - "type": "object", - "required": [ - "activityId", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "activityId": { - "$ref": "#/definitions/stringExpression", - "title": "ActivityId", - "description": "expression to an activityId to delete", - "examples": [ - "=$lastActivity" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DeleteActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DeleteProperties": { - "$role": "implements(Microsoft.IDialog)", - "title": "Delete Properties", - "description": "Delete multiple properties and any value it holds.", - "type": "object", - "required": [ - "properties", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "properties": { - "type": "array", - "title": "Properties", - "description": "Properties to delete.", - "items": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to delete." - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DeleteProperties" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DeleteProperty": { - "$role": "implements(Microsoft.IDialog)", - "title": "Delete property", - "description": "Delete a property and any value it holds.", - "type": "object", - "required": [ - "property", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to delete." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DeleteProperty" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.DimensionEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Dimension entity recognizer", - "description": "Recognizer which recognizes dimension.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DimensionEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EditActions": { - "$role": "implements(Microsoft.IDialog)", - "title": "Edit actions.", - "description": "Edit the current list of actions.", - "type": "object", - "required": [ - "changeType", - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "changeType": { - "title": "Type of change", - "description": "Type of change to apply to the current actions.", - "oneOf": [ - { - "type": "string", - "title": "Standard change", - "description": "Standard change types.", - "enum": [ - "insertActions", - "insertActionsBeforeTags", - "appendActions", - "endSequence", - "replaceSequence" - ] - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to apply.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EditActions" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EditArray": { - "$role": "implements(Microsoft.IDialog)", - "title": "Edit array", - "description": "Modify an array in memory", - "type": "object", - "required": [ - "itemsProperty", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "changeType": { - "title": "Type of change", - "description": "Type of change to the array in memory.", - "oneOf": [ - { - "type": "string", - "title": "Change type", - "description": "Standard change type.", - "enum": [ - "push", - "pop", - "take", - "remove", - "clear" - ] - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "itemsProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Items property", - "description": "Property that holds the array to update." - }, - "resultProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Result property", - "description": "Property to store the result of this action." - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "New value or expression.", - "examples": [ - "milk", - "=dialog.favColor", - "=dialog.favColor == 'red'" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EditArray" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EmailEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Email entity recognizer", - "description": "Recognizer which recognizes email.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EmailEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EmitEvent": { - "$role": "implements(Microsoft.IDialog)", - "title": "Emit a custom event", - "description": "Emit an event. Capture this event with a trigger.", - "type": "object", - "required": [ - "eventName", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "eventName": { - "$role": "expression", - "title": "Event name", - "description": "Name of the event to emit.", - "oneOf": [ - { - "type": "string", - "title": "Built-in event", - "description": "Standard event type.", - "enum": [ - "beginDialog", - "resumeDialog", - "repromptDialog", - "cancelDialog", - "endDialog", - "activityReceived", - "recognizedIntent", - "unknownIntent", - "actionsStarted", - "actionsSaved", - "actionsEnded", - "actionsResumed" - ] - }, - { - "type": "string", - "title": "Custom event", - "description": "Custom event type", - "pattern": "^(?!(beginDialog$|resumeDialog$|repromptDialog$|cancelDialog$|endDialog$|activityReceived$|recognizedIntent$|unknownIntent$|actionsStarted$|actionsSaved$|actionsEnded$|actionsResumed))(\\S){1}.*" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "eventValue": { - "$ref": "#/definitions/valueExpression", - "title": "Event value", - "description": "Value to emit with the event (optional)." - }, - "bubbleEvent": { - "$ref": "#/definitions/booleanExpression", - "title": "Bubble event", - "description": "If true this event is passed on to parent dialogs." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EmitEvent" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EndDialog": { - "$role": "implements(Microsoft.IDialog)", - "title": "End dialog", - "description": "End this dialog.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "Result value returned to the parent dialog.", - "examples": [ - "=dialog.userName", - "='tomato'" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EndDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.EndTurn": { - "$role": "implements(Microsoft.IDialog)", - "title": "End turn", - "description": "End the current turn without ending the dialog.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EndTurn" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.FirstSelector": { - "$role": "implements(Microsoft.ITriggerSelector)", - "title": "First trigger selector", - "description": "Selector for first true rule", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.FirstSelector" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.Foreach": { - "$role": "implements(Microsoft.IDialog)", - "title": "For each item", - "description": "Execute actions on each item in an a collection.", - "type": "object", - "required": [ - "itemsProperty", - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "itemsProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Items property", - "description": "Property that holds the array.", - "examples": [ - "user.todoList" - ] - }, - "index": { - "$ref": "#/definitions/stringExpression", - "title": "Index property", - "description": "Property that holds the index of the item.", - "default": "dialog.foreach.index" - }, - "value": { - "$ref": "#/definitions/stringExpression", - "title": "Value property", - "description": "Property that holds the value of the item.", - "default": "dialog.foreach.value" - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to execute for each item. Use '$foreach.value' to access the value of each item. Use '$foreach.index' to access the index of each item.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.Foreach" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ForeachPage": { - "$role": "implements(Microsoft.IDialog)", - "title": "For each page", - "description": "Execute actions on each page (collection of items) in an array.", - "type": "object", - "required": [ - "itemsProperty", - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "itemsProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Items property", - "description": "Property that holds the array.", - "examples": [ - "user.todoList" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to execute for each page. Use '$foreach.page' to access each page.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "pageIndex": { - "$ref": "#/definitions/stringExpression", - "title": "Index property", - "description": "Property that holds the index of the page.", - "default": "dialog.foreach.pageindex" - }, - "page": { - "$ref": "#/definitions/stringExpression", - "title": "Page property", - "description": "Property that holds the value of the page.", - "default": "dialog.foreach.page" - }, - "pageSize": { - "$ref": "#/definitions/integerExpression", - "title": "Page size", - "description": "Number of items in each page.", - "default": 10 - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ForeachPage" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.GetActivityMembers": { - "$role": "implements(Microsoft.IDialog)", - "title": "Get activity members", - "description": "Get the members who are participating in an activity. (BotFrameworkAdapter only)", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property (named location to store information).", - "examples": [ - "user.age" - ] - }, - "activityId": { - "$ref": "#/definitions/stringExpression", - "title": "Activity Id", - "description": "Activity ID or expression to an activityId to use to get the members. If none is defined then the current activity id will be used.", - "examples": [ - "$lastActivity" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.GetActivityMembers" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.GetConversationMembers": { - "$role": "implements(Microsoft.IDialog)", - "title": "Get conversation members", - "description": "Get the members who are participating in an conversation. (BotFrameworkAdapter only)", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property (named location to store information).", - "examples": [ - "user.age" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.GetConversationMembers" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.GotoAction": { - "$role": "implements(Microsoft.IDialog)", - "title": "Go to action", - "description": "Go to an an action by id.", - "type": "object", - "required": [ - "actionId", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "actionId": { - "$ref": "#/definitions/stringExpression", - "title": "Action Id", - "description": "Action Id to execute next" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.GotoAction" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.GuidEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Guid entity recognizer", - "description": "Recognizer which recognizes guids.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.GuidEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.HashtagEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Hashtag entity recognizer", - "description": "Recognizer which recognizes Hashtags.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.HashtagEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.HttpRequest": { - "$role": "implements(Microsoft.IDialog)", - "type": "object", - "title": "HTTP request", - "description": "Make a HTTP request.", - "required": [ - "url", - "method", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "method": { - "type": "string", - "title": "HTTP method", - "description": "HTTP method to use.", - "enum": [ - "GET", - "POST", - "PATCH", - "PUT", - "DELETE" - ], - "examples": [ - "GET", - "POST" - ] - }, - "url": { - "$ref": "#/definitions/stringExpression", - "title": "Url", - "description": "URL to call (supports data binding).", - "examples": [ - "https://contoso.com" - ] - }, - "body": { - "$ref": "#/definitions/valueExpression", - "title": "Body", - "description": "Body to include in the HTTP call (supports data binding).", - "additionalProperties": true - }, - "resultProperty": { - "$ref": "#/definitions/stringExpression", - "title": "Result property", - "description": "A property to store the result of this action. The result can include any of the 4 properties from the HTTP response: statusCode, reasonPhrase, content, and headers. If the content is JSON it will be a deserialized object. The values can be accessed via .content for example.", - "examples": [ - "dialog.contosodata" - ] - }, - "contentType": { - "$ref": "#/definitions/stringExpression", - "title": "Content type", - "description": "Content media type for the body.", - "examples": [ - "application/json", - "text/plain" - ] - }, - "headers": { - "type": "object", - "title": "Headers", - "description": "One or more headers to include in the request (supports data binding).", - "additionalProperties": { - "$ref": "#/definitions/stringExpression" - } - }, - "responseType": { - "$ref": "#/definitions/stringExpression", - "title": "Response type", - "description": "Defines the type of HTTP response. Automatically calls the 'Send a response' action if set to 'Activity' or 'Activities'.", - "oneOf": [ - { - "type": "string", - "title": "Standard response", - "description": "Standard response type.", - "enum": [ - "none", - "json", - "activity", - "activities", - "binary" - ], - "default": "json" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.HttpRequest" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.IActivityTemplate": { - "title": "Microsoft ActivityTemplates", - "description": "Components which are ActivityTemplate, which is string template, an activity, or a implementation of ActivityTemplate", - "$role": "interface", - "oneOf": [ - { - "type": "string" - }, - { - "required": [ - "type" - ], - "description": "An Activity is the basic communication type for the Bot Framework 3.0 protocol.", - "title": "Activity", - "type": "object", - "properties": { - "type": { - "description": "Contains the activity type. Possible values include: 'message', 'contactRelationUpdate',\n'conversationUpdate', 'typing', 'endOfConversation', 'event', 'invoke', 'deleteUserData',\n'messageUpdate', 'messageDelete', 'installationUpdate', 'messageReaction', 'suggestion',\n'trace', 'handoff'", - "type": "string", - "title": "type" - }, - "id": { - "description": "Contains an ID that uniquely identifies the activity on the channel.", - "type": "string", - "title": "id" - }, - "timestamp": { - "description": "Contains the date and time that the message was sent, in UTC, expressed in ISO-8601 format.", - "type": "string", - "format": "date-time", - "title": "timestamp" - }, - "localTimestamp": { - "description": "Contains the date and time that the message was sent, in local time, expressed in ISO-8601\nformat.\nFor example, 2016-09-23T13:07:49.4714686-07:00.", - "type": "string", - "format": "date-time", - "title": "localTimestamp" - }, - "localTimezone": { - "description": "Contains the name of the timezone in which the message, in local time, expressed in IANA Time\nZone database format.\nFor example, America/Los_Angeles.", - "type": "string", - "title": "localTimezone" - }, - "serviceUrl": { - "description": "Contains the URL that specifies the channel's service endpoint. Set by the channel.", - "type": "string", - "title": "serviceUrl" - }, - "channelId": { - "description": "Contains an ID that uniquely identifies the channel. Set by the channel.", - "type": "string", - "title": "channelId" - }, - "from": { - "$ref": "#/definitions/Microsoft.IActivityTemplate/oneOf/1/properties/membersAdded/items", - "description": "Identifies the sender of the message.", - "title": "from" - }, - "conversation": { - "description": "Identifies the conversation to which the activity belongs.", - "title": "conversation", - "type": "object", - "required": [ - "conversationType", - "id", - "isGroup", - "name" - ], - "properties": { - "isGroup": { - "description": "Indicates whether the conversation contains more than two participants at the time the\nactivity was generated", - "type": "boolean", - "title": "isGroup" - }, - "conversationType": { - "description": "Indicates the type of the conversation in channels that distinguish between conversation types", - "type": "string", - "title": "conversationType" - }, - "id": { - "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", - "type": "string", - "title": "id" - }, - "name": { - "description": "Display friendly name", - "type": "string", - "title": "name" - }, - "aadObjectId": { - "description": "This account's object ID within Azure Active Directory (AAD)", - "type": "string", - "title": "aadObjectId" - }, - "role": { - "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", - "enum": [ - "bot", - "user" - ], - "type": "string", - "title": "role" - } - } - }, - "recipient": { - "$ref": "#/definitions/Microsoft.IActivityTemplate/oneOf/1/properties/membersAdded/items", - "description": "Identifies the recipient of the message.", - "title": "recipient" - }, - "textFormat": { - "description": "Format of text fields Default:markdown. Possible values include: 'markdown', 'plain', 'xml'", - "type": "string", - "title": "textFormat" - }, - "attachmentLayout": { - "description": "The layout hint for multiple attachments. Default: list. Possible values include: 'list',\n'carousel'", - "type": "string", - "title": "attachmentLayout" - }, - "membersAdded": { - "description": "The collection of members added to the conversation.", - "type": "array", - "title": "membersAdded", - "items": { - "description": "Channel account information needed to route a message", - "title": "ChannelAccount", - "type": "object", - "required": [ - "id", - "name" - ], - "properties": { - "id": { - "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", - "type": "string", - "title": "id" - }, - "name": { - "description": "Display friendly name", - "type": "string", - "title": "name" - }, - "aadObjectId": { - "description": "This account's object ID within Azure Active Directory (AAD)", - "type": "string", - "title": "aadObjectId" - }, - "role": { - "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", - "type": "string", - "title": "role" - } - } - } - }, - "membersRemoved": { - "description": "The collection of members removed from the conversation.", - "type": "array", - "title": "membersRemoved", - "items": { - "$ref": "#/definitions/Microsoft.IActivityTemplate/oneOf/1/properties/membersAdded/items" - } - }, - "reactionsAdded": { - "description": "The collection of reactions added to the conversation.", - "type": "array", - "title": "reactionsAdded", - "items": { - "description": "Message reaction object", - "title": "MessageReaction", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "description": "Message reaction type. Possible values include: 'like', 'plusOne'", - "type": "string", - "title": "type" - } - } - } - }, - "reactionsRemoved": { - "description": "The collection of reactions removed from the conversation.", - "type": "array", - "title": "reactionsRemoved", - "items": { - "$ref": "#/definitions/Microsoft.IActivityTemplate/oneOf/1/properties/reactionsAdded/items" - } - }, - "topicName": { - "description": "The updated topic name of the conversation.", - "type": "string", - "title": "topicName" - }, - "historyDisclosed": { - "description": "Indicates whether the prior history of the channel is disclosed.", - "type": "boolean", - "title": "historyDisclosed" - }, - "locale": { - "description": "A locale name for the contents of the text field.\nThe locale name is a combination of an ISO 639 two- or three-letter culture code associated\nwith a language\nand an ISO 3166 two-letter subculture code associated with a country or region.\nThe locale name can also correspond to a valid BCP-47 language tag.", - "type": "string", - "title": "locale" - }, - "text": { - "description": "The text content of the message.", - "type": "string", - "title": "text" - }, - "speak": { - "description": "The text to speak.", - "type": "string", - "title": "speak" - }, - "inputHint": { - "description": "Indicates whether your bot is accepting,\nexpecting, or ignoring user input after the message is delivered to the client. Possible\nvalues include: 'acceptingInput', 'ignoringInput', 'expectingInput'", - "type": "string", - "title": "inputHint" - }, - "summary": { - "description": "The text to display if the channel cannot render cards.", - "type": "string", - "title": "summary" - }, - "suggestedActions": { - "description": "The suggested actions for the activity.", - "title": "suggestedActions", - "type": "object", - "required": [ - "actions", - "to" - ], - "properties": { - "to": { - "description": "Ids of the recipients that the actions should be shown to. These Ids are relative to the\nchannelId and a subset of all recipients of the activity", - "type": "array", - "title": "to", - "items": { - "title": "Id", - "description": "Id of recipient.", - "type": "string" - } - }, - "actions": { - "description": "Actions that can be shown to the user", - "type": "array", - "title": "actions", - "items": { - "description": "A clickable action", - "title": "CardAction", - "type": "object", - "required": [ - "title", - "type", - "value" - ], - "properties": { - "type": { - "description": "The type of action implemented by this button. Possible values include: 'openUrl', 'imBack',\n'postBack', 'playAudio', 'playVideo', 'showImage', 'downloadFile', 'signin', 'call',\n'payment', 'messageBack'", - "type": "string", - "title": "type" - }, - "title": { - "description": "Text description which appears on the button", - "type": "string", - "title": "title" - }, - "image": { - "description": "Image URL which will appear on the button, next to text label", - "type": "string", - "title": "image" - }, - "text": { - "description": "Text for this action", - "type": "string", - "title": "text" - }, - "displayText": { - "description": "(Optional) text to display in the chat feed if the button is clicked", - "type": "string", - "title": "displayText" - }, - "value": { - "description": "Supplementary parameter for action. Content of this property depends on the ActionType", - "title": "value" - }, - "channelData": { - "description": "Channel-specific data associated with this action", - "title": "channelData" - } - } - } - } - } - }, - "attachments": { - "description": "Attachments", - "type": "array", - "title": "attachments", - "items": { - "description": "An attachment within an activity", - "title": "Attachment", - "type": "object", - "required": [ - "contentType" - ], - "properties": { - "contentType": { - "description": "mimetype/Contenttype for the file", - "type": "string", - "title": "contentType" - }, - "contentUrl": { - "description": "Content Url", - "type": "string", - "title": "contentUrl" - }, - "content": { - "type": "object", - "description": "Embedded content", - "title": "content" - }, - "name": { - "description": "(OPTIONAL) The name of the attachment", - "type": "string", - "title": "name" - }, - "thumbnailUrl": { - "description": "(OPTIONAL) Thumbnail associated with attachment", - "type": "string", - "title": "thumbnailUrl" - } - } - } - }, - "entities": { - "description": "Represents the entities that were mentioned in the message.", - "type": "array", - "title": "entities", - "items": { - "description": "Metadata object pertaining to an activity", - "title": "Entity", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "description": "Type of this entity (RFC 3987 IRI)", - "type": "string", - "title": "type" - } - } - } - }, - "channelData": { - "description": "Contains channel-specific content.", - "title": "channelData" - }, - "action": { - "description": "Indicates whether the recipient of a contactRelationUpdate was added or removed from the\nsender's contact list.", - "type": "string", - "title": "action" - }, - "replyToId": { - "description": "Contains the ID of the message to which this message is a reply.", - "type": "string", - "title": "replyToId" - }, - "label": { - "description": "A descriptive label for the activity.", - "type": "string", - "title": "label" - }, - "valueType": { - "description": "The type of the activity's value object.", - "type": "string", - "title": "valueType" - }, - "value": { - "description": "A value that is associated with the activity.", - "title": "value" - }, - "name": { - "description": "The name of the operation associated with an invoke or event activity.", - "type": "string", - "title": "name" - }, - "relatesTo": { - "description": "A reference to another conversation or activity.", - "title": "relatesTo", - "type": "object", - "required": [ - "bot", - "channelId", - "conversation", - "serviceUrl" - ], - "properties": { - "activityId": { - "description": "(Optional) ID of the activity to refer to", - "type": "string", - "title": "activityId" - }, - "user": { - "description": "(Optional) User participating in this conversation", - "$ref": "#/definitions/Microsoft.IActivityTemplate/oneOf/1/properties/membersAdded/items", - "title": "user" - }, - "bot": { - "$ref": "#/definitions/Microsoft.IActivityTemplate/oneOf/1/properties/membersAdded/items", - "description": "Bot participating in this conversation", - "title": "bot" - }, - "conversation": { - "$ref": "#/definitions/Microsoft.IActivityTemplate/oneOf/1/properties/conversation", - "description": "Conversation reference", - "title": "conversation" - }, - "channelId": { - "description": "Channel ID", - "type": "string", - "title": "channelId" - }, - "serviceUrl": { - "description": "Service endpoint where operations concerning the referenced conversation may be performed", - "type": "string", - "title": "serviceUrl" - } - } - }, - "code": { - "description": "The a code for endOfConversation activities that indicates why the conversation ended.\nPossible values include: 'unknown', 'completedSuccessfully', 'userCancelled', 'botTimedOut',\n'botIssuedInvalidMessage', 'channelFailed'", - "type": "string", - "title": "code" - }, - "expiration": { - "description": "The time at which the activity should be considered to be \"expired\" and should not be\npresented to the recipient.", - "type": "string", - "format": "date-time", - "title": "expiration" - }, - "importance": { - "description": "The importance of the activity. Possible values include: 'low', 'normal', 'high'", - "type": "string", - "title": "importance" - }, - "deliveryMode": { - "description": "A delivery hint to signal to the recipient alternate delivery paths for the activity.\nThe default delivery mode is \"default\". Possible values include: 'normal', 'notification'", - "type": "string", - "title": "deliveryMode" - }, - "listenFor": { - "description": "List of phrases and references that speech and language priming systems should listen for", - "type": "array", - "title": "listenFor", - "items": { - "type": "string", - "title": "Phrase", - "description": "Phrase to listen for." - } - }, - "textHighlights": { - "description": "The collection of text fragments to highlight when the activity contains a ReplyToId value.", - "type": "array", - "title": "textHighlights", - "items": { - "description": "Refers to a substring of content within another field", - "title": "TextHighlight", - "type": "object", - "required": [ - "occurrence", - "text" - ], - "properties": { - "text": { - "description": "Defines the snippet of text to highlight", - "type": "string", - "title": "text" - }, - "occurrence": { - "description": "Occurrence of the text field within the referenced text, if multiple exist.", - "type": "number", - "title": "occurrence" - } - } - } - }, - "semanticAction": { - "description": "An optional programmatic action accompanying this request", - "title": "semanticAction", - "type": "object", - "required": [ - "entities", - "id" - ], - "properties": { - "id": { - "description": "ID of this action", - "type": "string", - "title": "id" - }, - "entities": { - "description": "Entities associated with this action", - "type": "object", - "title": "entities", - "additionalProperties": { - "$ref": "#/definitions/Microsoft.IActivityTemplate/oneOf/1/properties/entities/items" - } - } - } - } - } - }, - { - "$ref": "#/definitions/Microsoft.ActivityTemplate" - }, - { - "$ref": "#/definitions/Microsoft.StaticActivityTemplate" - } - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.11.0" - } - }, - "Microsoft.IDialog": { - "title": "Microsoft dialogs", - "description": "Components which derive from Dialog", - "$role": "interface", - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/definitions/Microsoft.QnAMakerDialog" - }, - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog" - }, - { - "$ref": "#/definitions/Microsoft.BeginDialog" - }, - { - "$ref": "#/definitions/Microsoft.BeginSkill" - }, - { - "$ref": "#/definitions/Microsoft.BreakLoop" - }, - { - "$ref": "#/definitions/Microsoft.CancelAllDialogs" - }, - { - "$ref": "#/definitions/Microsoft.CancelDialog" - }, - { - "$ref": "#/definitions/Microsoft.ContinueConversationLater" - }, - { - "$ref": "#/definitions/Microsoft.ContinueLoop" - }, - { - "$ref": "#/definitions/Microsoft.DebugBreak" - }, - { - "$ref": "#/definitions/Microsoft.DeleteActivity" - }, - { - "$ref": "#/definitions/Microsoft.DeleteProperties" - }, - { - "$ref": "#/definitions/Microsoft.DeleteProperty" - }, - { - "$ref": "#/definitions/Microsoft.EditActions" - }, - { - "$ref": "#/definitions/Microsoft.EditArray" - }, - { - "$ref": "#/definitions/Microsoft.EmitEvent" - }, - { - "$ref": "#/definitions/Microsoft.EndDialog" - }, - { - "$ref": "#/definitions/Microsoft.EndTurn" - }, - { - "$ref": "#/definitions/Microsoft.Foreach" - }, - { - "$ref": "#/definitions/Microsoft.ForeachPage" - }, - { - "$ref": "#/definitions/Microsoft.GetActivityMembers" - }, - { - "$ref": "#/definitions/Microsoft.GetConversationMembers" - }, - { - "$ref": "#/definitions/Microsoft.GotoAction" - }, - { - "$ref": "#/definitions/Microsoft.HttpRequest" - }, - { - "$ref": "#/definitions/Microsoft.IfCondition" - }, - { - "$ref": "#/definitions/Microsoft.LogAction" - }, - { - "$ref": "#/definitions/Microsoft.RepeatDialog" - }, - { - "$ref": "#/definitions/Microsoft.ReplaceDialog" - }, - { - "$ref": "#/definitions/Microsoft.SendActivity" - }, - { - "$ref": "#/definitions/Microsoft.SetProperties" - }, - { - "$ref": "#/definitions/Microsoft.SetProperty" - }, - { - "$ref": "#/definitions/Microsoft.SignOutUser" - }, - { - "$ref": "#/definitions/Microsoft.SwitchCondition" - }, - { - "$ref": "#/definitions/Microsoft.TelemetryTrackEvent" - }, - { - "$ref": "#/definitions/Microsoft.ThrowException" - }, - { - "$ref": "#/definitions/Microsoft.TraceActivity" - }, - { - "$ref": "#/definitions/Microsoft.UpdateActivity" - }, - { - "$ref": "#/definitions/Microsoft.Ask" - }, - { - "$ref": "#/definitions/Microsoft.AttachmentInput" - }, - { - "$ref": "#/definitions/Microsoft.ChoiceInput" - }, - { - "$ref": "#/definitions/Microsoft.ConfirmInput" - }, - { - "$ref": "#/definitions/Microsoft.DateTimeInput" - }, - { - "$ref": "#/definitions/Microsoft.NumberInput" - }, - { - "$ref": "#/definitions/Microsoft.OAuthInput" - }, - { - "$ref": "#/definitions/Microsoft.TextInput" - } - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.11.0" - } - }, - "Microsoft.IEntityRecognizer": { - "$role": "interface", - "title": "Entity recognizers", - "description": "Components which derive from EntityRecognizer.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "oneOf": [ - { - "type": "string", - "title": "Reference to Microsoft.IEntityRecognizer", - "description": "Reference to Microsoft.IEntityRecognizer .dialog file." - }, - { - "$ref": "#/definitions/Microsoft.AgeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.ConfirmationEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.CurrencyEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.DateTimeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.DimensionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.EmailEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.GuidEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.HashtagEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.IpEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.MentionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.NumberEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.NumberRangeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.OrdinalEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.PercentageEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.PhoneNumberEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.RegexEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.TemperatureEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.UrlEntityRecognizer" - } - ] - }, - "Microsoft.ILanguageGenerator": { - "title": "Microsoft LanguageGenerator", - "description": "Components which dervie from the LanguageGenerator class", - "$role": "interface", - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/definitions/Microsoft.ResourceMultiLanguageGenerator" - }, - { - "$ref": "#/definitions/Microsoft.TemplateEngineLanguageGenerator" - } - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - } - }, - "Microsoft.IRecognizer": { - "title": "Microsoft recognizer", - "description": "Components which derive from Recognizer class", - "$role": "interface", - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/definitions/Microsoft.LuisRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.QnAMakerRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.CrossTrainedRecognizerSet" - }, - { - "$ref": "#/definitions/Microsoft.MultiLanguageRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.RecognizerSet" - }, - { - "$ref": "#/definitions/Microsoft.RegexRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.AgeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.ChannelMentionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.ConfirmationEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.CurrencyEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.DateTimeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.DimensionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.EmailEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.GuidEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.HashtagEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.IpEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.MentionEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.NumberEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.NumberRangeEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.OrdinalEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.PercentageEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.PhoneNumberEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.RegexEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.TemperatureEntityRecognizer" - }, - { - "$ref": "#/definitions/Microsoft.UrlEntityRecognizer" - } - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.11.0" - } - }, - "Microsoft.ITextTemplate": { - "title": "Microsoft TextTemplate", - "description": "Components which derive from TextTemplate class", - "$role": "interface", - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/definitions/Microsoft.TextTemplate" - } - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Declarative", - "version": "4.11.0" - } - }, - "Microsoft.ITrigger": { - "$role": "interface", - "title": "Microsoft Triggers", - "description": "Components which derive from OnCondition class.", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "oneOf": [ - { - "type": "string", - "title": "Reference to Microsoft.ITrigger", - "description": "Reference to Microsoft.ITrigger .dialog file." - }, - { - "$ref": "#/definitions/Microsoft.OnActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnAssignEntity" - }, - { - "$ref": "#/definitions/Microsoft.OnBeginDialog" - }, - { - "$ref": "#/definitions/Microsoft.OnCancelDialog" - }, - { - "$ref": "#/definitions/Microsoft.OnChooseEntity" - }, - { - "$ref": "#/definitions/Microsoft.OnChooseIntent" - }, - { - "$ref": "#/definitions/Microsoft.OnChooseProperty" - }, - { - "$ref": "#/definitions/Microsoft.OnCondition" - }, - { - "$ref": "#/definitions/Microsoft.OnContinueConversation" - }, - { - "$ref": "#/definitions/Microsoft.OnConversationUpdateActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnDialogEvent" - }, - { - "$ref": "#/definitions/Microsoft.OnEndOfActions" - }, - { - "$ref": "#/definitions/Microsoft.OnEndOfConversationActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnError" - }, - { - "$ref": "#/definitions/Microsoft.OnEventActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnHandoffActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnInstallationUpdateActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnIntent" - }, - { - "$ref": "#/definitions/Microsoft.OnInvokeActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageDeleteActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageReactionActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnMessageUpdateActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnQnAMatch" - }, - { - "$ref": "#/definitions/Microsoft.OnRepromptDialog" - }, - { - "$ref": "#/definitions/Microsoft.OnTypingActivity" - }, - { - "$ref": "#/definitions/Microsoft.OnUnknownIntent" - } - ] - }, - "Microsoft.ITriggerSelector": { - "$role": "interface", - "title": "Selectors", - "description": "Components which derive from TriggerSelector class.", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "oneOf": [ - { - "type": "string", - "title": "Reference to Microsoft.ITriggerSelector", - "description": "Reference to Microsoft.ITriggerSelector .dialog file." - }, - { - "$ref": "#/definitions/Microsoft.ConditionalSelector" - }, - { - "$ref": "#/definitions/Microsoft.FirstSelector" - }, - { - "$ref": "#/definitions/Microsoft.MostSpecificSelector" - }, - { - "$ref": "#/definitions/Microsoft.RandomSelector" - }, - { - "$ref": "#/definitions/Microsoft.TrueSelector" - } - ] - }, - "Microsoft.IfCondition": { - "$role": "implements(Microsoft.IDialog)", - "title": "If condition", - "description": "Two-way branch the conversation flow based on a condition.", - "type": "object", - "required": [ - "condition", - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression to evaluate.", - "examples": [ - "user.age > 3" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to execute if condition is true.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "elseActions": { - "type": "array", - "title": "Else", - "description": "Actions to execute if condition is false.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.IfCondition" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.InputDialog": { - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.InputDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.IpEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "IP entity recognizer", - "description": "Recognizer which recognizes internet IP patterns (like 192.1.1.1).", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.IpEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.LanguagePolicy": { - "title": "Language policy", - "description": "This represents a policy map for locales lookups to use for language", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": { - "type": "array", - "title": "Per-locale policy", - "description": "Language policy per locale.", - "items": { - "type": "string", - "title": "Locale", - "description": "Locale like en-us." - } - }, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.LanguagePolicy" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.LogAction": { - "$role": "implements(Microsoft.IDialog)", - "title": "Log to console", - "description": "Log a message to the host application. Send a TraceActivity to Bot Framework Emulator (optional).", - "type": "object", - "required": [ - "text", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "text": { - "$ref": "#/definitions/stringExpression", - "title": "Text", - "description": "Information to log." - }, - "label": { - "$ref": "#/definitions/stringExpression", - "title": "Label", - "description": "Label for the trace activity (used to identify it in a list of trace activities.)" - }, - "traceActivity": { - "$ref": "#/definitions/booleanExpression", - "title": "Send trace activity", - "description": "If true, automatically sends a TraceActivity (view in Bot Framework Emulator)." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.LogAction" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.LuisRecognizer": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "LUIS Recognizer", - "description": "LUIS recognizer.", - "type": "object", - "required": [ - "applicationId", - "endpoint", - "endpointKey", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.AI.Luis", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." - }, - "applicationId": { - "$ref": "#/definitions/stringExpression", - "title": "LUIS application id", - "description": "Application ID for your model from the LUIS service." - }, - "version": { - "$ref": "#/definitions/stringExpression", - "title": "LUIS version", - "description": "Optional version to target. If null then predictionOptions.Slot is used." - }, - "endpoint": { - "$ref": "#/definitions/stringExpression", - "title": "LUIS endpoint", - "description": "Endpoint to use for LUIS service like https://westus.api.cognitive.microsoft.com." - }, - "endpointKey": { - "$ref": "#/definitions/stringExpression", - "title": "LUIS prediction key", - "description": "LUIS prediction key used to call endpoint." - }, - "externalEntityRecognizer": { - "$kind": "Microsoft.IRecognizer", - "title": "External entity recognizer", - "description": "Entities recognized by this recognizer will be passed to LUIS as external entities.", - "$ref": "#/definitions/Microsoft.IRecognizer" - }, - "dynamicLists": { - "$ref": "#/definitions/arrayExpression", - "title": "Dynamic lists", - "description": "Runtime defined entity lists.", - "items": { - "title": "Entity list", - "description": "Lists of canonical values and synonyms for an entity.", - "type": "object", - "properties": { - "entity": { - "title": "Entity", - "description": "Entity to extend with a dynamic list.", - "type": "string" - }, - "list": { - "title": "Dynamic list", - "description": "List of canonical forms and synonyms.", - "type": "array", - "items": { - "type": "object", - "title": "List entry", - "description": "Canonical form and synonynms.", - "properties": { - "canonicalForm": { - "title": "Canonical form", - "description": "Resolution if any synonym matches.", - "type": "string" - }, - "synonyms": { - "title": "Synonyms", - "description": "List of synonyms for a canonical form.", - "type": "array", - "items": { - "title": "Synonym", - "description": "Synonym for canonical form.", - "type": "string" - } - } - } - } - } - } - } - }, - "predictionOptions": { - "type": "object", - "title": "Prediction options", - "description": "Options to control LUIS prediction behavior.", - "properties": { - "includeAllIntents": { - "$ref": "#/definitions/booleanExpression", - "title": "Include all intents", - "description": "True for all intents, false for only top intent." - }, - "includeInstanceData": { - "$ref": "#/definitions/booleanExpression", - "title": "Include $instance", - "description": "True to include $instance metadata in the LUIS response." - }, - "log": { - "$ref": "#/definitions/booleanExpression", - "title": "Log utterances", - "description": "True to log utterances on LUIS service." - }, - "preferExternalEntities": { - "$ref": "#/definitions/booleanExpression", - "title": "Prefer external entities", - "description": "True to prefer external entities to those generated by LUIS models." - }, - "slot": { - "$ref": "#/definitions/stringExpression", - "title": "Slot", - "description": "Slot to use for talking to LUIS service like production or staging." - } - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.LuisRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.MentionEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Mentions entity recognizer", - "description": "Recognizer which recognizes @Mentions", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.MentionEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.MostSpecificSelector": { - "$role": "implements(Microsoft.ITriggerSelector)", - "title": "Most specific trigger selector", - "description": "Select most specific true events with optional additional selector", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "selector": { - "$kind": "Microsoft.ITriggerSelector", - "$ref": "#/definitions/Microsoft.ITriggerSelector" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.MostSpecificSelector" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.MultiLanguageRecognizer": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "Multi-language recognizer", - "description": "Configure one recognizer per language and the specify the language fallback policy.", - "type": "object", - "required": [ - "recognizers", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." - }, - "languagePolicy": { - "$kind": "Microsoft.LanguagePolicy", - "type": "object", - "title": "Language policy", - "description": "Defines fall back languages to try per user input language.", - "$ref": "#/definitions/Microsoft.LanguagePolicy" - }, - "recognizers": { - "type": "object", - "title": "Recognizers", - "description": "Map of language -> Recognizer", - "additionalProperties": { - "$kind": "Microsoft.IRecognizer", - "$ref": "#/definitions/Microsoft.IRecognizer" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.MultiLanguageRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.NumberEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Number entity recognizer", - "description": "Recognizer which recognizes numbers.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.NumberEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.NumberInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "title": "Number input dialog", - "description": "Collect information - Ask for a number.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "defaultValue": { - "$ref": "#/definitions/numberExpression", - "title": "Default value", - "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", - "examples": [ - 13, - "=user.age" - ] - }, - "value": { - "$ref": "#/definitions/numberExpression", - "title": "Value", - "description": "'Property' will be set to the value of this expression unless it evaluates to null.", - "examples": [ - 13, - "=user.age" - ] - }, - "outputFormat": { - "$ref": "#/definitions/expression", - "title": "Output format", - "description": "Expression to format the number output.", - "examples": [ - "=this.value", - "=int(this.text)" - ] - }, - "defaultLocale": { - "$ref": "#/definitions/stringExpression", - "title": "Default locale", - "description": "Default locale to use if there is no locale available..", - "default": "en-us" - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.NumberInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.NumberRangeEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Number range entity recognizer", - "description": "Recognizer which recognizes ranges of numbers (Example:2 to 5).", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.NumberRangeEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OAuthInput": { - "$role": "implements(Microsoft.IDialog)", - "title": "OAuthInput Dialog", - "description": "Collect login information.", - "type": "object", - "required": [ - "connectionName", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "connectionName": { - "$ref": "#/definitions/stringExpression", - "title": "Connection name", - "description": "The connection name configured in Azure Web App Bot OAuth settings.", - "examples": [ - "msgraphOAuthConnection" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "text": { - "$ref": "#/definitions/stringExpression", - "title": "Text", - "description": "Text shown in the OAuth signin card.", - "examples": [ - "Please sign in. ", - "=concat(x,y,z)" - ] - }, - "title": { - "$ref": "#/definitions/stringExpression", - "title": "Title", - "description": "Title shown in the OAuth signin card.", - "examples": [ - "Login" - ] - }, - "timeout": { - "$ref": "#/definitions/integerExpression", - "title": "Timeout", - "description": "Time out setting for the OAuth signin card.", - "default": 900000 - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Token property", - "description": "Property to store the OAuth token result.", - "examples": [ - "dialog.token" - ] - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send if user response is invalid.", - "examples": [ - "Sorry, the login info you provided is not valid." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Login failed." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "examples": [ - 3 - ] - }, - "defaultValue": { - "$ref": "#/definitions/expression", - "title": "Default value", - "description": "Expression to examine on each turn of the conversation as possible value to the property.", - "examples": [ - "@token" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OAuthInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On activity", - "description": "Actions to perform on receipt of a generic activity.", - "type": "object", - "required": [ - "type", - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "type": { - "type": "string", - "title": "Activity type", - "description": "The Activity.Type to match" - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnAssignEntity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On entity assignment", - "description": "Actions to take when an entity should be assigned to a property.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "actions", - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "property": { - "type": "string", - "title": "Property", - "description": "Property that will be set after entity is selected." - }, - "entity": { - "type": "string", - "title": "Entity", - "description": "Entity being put into property" - }, - "operation": { - "type": "string", - "title": "Operation", - "description": "Operation for assigning entity." - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnAssignEntity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnBeginDialog": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On begin dialog", - "description": "Actions to perform when this dialog begins.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "actions", - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnBeginDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnCancelDialog": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On cancel dialog", - "description": "Actions to perform on cancel dialog event.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "actions", - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnCancelDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnChooseEntity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On choose entity", - "description": "Actions to be performed when an entity value needs to be resolved.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "actions", - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "property": { - "type": "string", - "title": "Property to be set", - "description": "Property that will be set after entity is selected." - }, - "entity": { - "type": "string", - "title": "Ambiguous entity", - "description": "Ambiguous entity" - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnChooseEntity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnChooseIntent": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On ambigious intent", - "description": "Actions to perform on when an intent is ambigious.", - "type": "object", - "required": [ - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "intents": { - "type": "array", - "title": "Intents", - "description": "Intents that must be in the ChooseIntent result for this condition to trigger.", - "items": { - "title": "Intent", - "description": "Intent name to trigger on.", - "type": "string" - } - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnChooseIntent" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnChooseProperty": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On choose property", - "description": "Actions to take when there are multiple possible mappings of entities to properties.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "actions", - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "entity": { - "type": "string", - "title": "Entity being assigned", - "description": "Entity being assigned to property choice" - }, - "properties": { - "type": "array", - "title": "Possible properties", - "description": "Properties to be chosen between.", - "items": { - "type": "string", - "title": "Property name", - "description": "Possible property to choose." - } - }, - "entities": { - "type": "array", - "title": "Entities", - "description": "Ambiguous entity names.", - "items": { - "type": "string", - "title": "Entity name", - "description": "Entity name being chosen between." - } - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnChooseProperty" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnCondition": { - "$role": "implements(Microsoft.ITrigger)", - "title": "On condition", - "description": "Actions to perform when specified condition is true.", - "type": "object", - "required": [ - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnCondition" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnContinueConversation": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On continue conversation", - "description": "Actions to perform when a conversation is started up again from a ContinueConversationLater action.", - "type": "object", - "required": [ - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnContinueConversation" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnConversationUpdateActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On ConversationUpdate activity", - "description": "Actions to perform on receipt of an activity with type 'ConversationUpdate'.", - "type": "object", - "required": [ - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnConversationUpdateActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnDialogEvent": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On dialog event", - "description": "Actions to perform when a specific dialog event occurs.", - "type": "object", - "required": [ - "actions", - "event", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "event": { - "type": "string", - "title": "Dialog event name", - "description": "Name of dialog event." - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnDialogEvent" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnEndOfActions": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On end of actions", - "description": "Actions to take when there are no more actions in the current dialog.", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "type": "object", - "required": [ - "actions", - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnEndOfActions" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnEndOfConversationActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On EndOfConversation activity", - "description": "Actions to perform on receipt of an activity with type 'EndOfConversation'.", - "type": "object", - "required": [ - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnEndOfConversationActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnError": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On error", - "description": "Action to perform when an 'Error' dialog event occurs.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "actions", - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnError" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnEventActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Event activity", - "description": "Actions to perform on receipt of an activity with type 'Event'.", - "type": "object", - "required": [ - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnEventActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnHandoffActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Handoff activity", - "description": "Actions to perform on receipt of an activity with type 'HandOff'.", - "type": "object", - "required": [ - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnHandoffActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnInstallationUpdateActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On InstallationUpdate activity", - "description": "Actions to perform on receipt of an activity with type 'InstallationUpdate'.", - "type": "object", - "required": [ - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnInstallationUpdateActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnIntent": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On intent recognition", - "description": "Actions to perform when specified intent is recognized.", - "type": "object", - "required": [ - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "intent": { - "type": "string", - "title": "Intent", - "description": "Name of intent." - }, - "entities": { - "type": "array", - "title": "Entities", - "description": "Required entities.", - "items": { - "type": "string", - "title": "Entity", - "description": "Entity that must be present." - } - }, - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnIntent" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnInvokeActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Invoke activity", - "description": "Actions to perform on receipt of an activity with type 'Invoke'.", - "type": "object", - "required": [ - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnInvokeActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnMessageActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Message activity", - "description": "Actions to perform on receipt of an activity with type 'Message'. Overrides Intent trigger.", - "type": "object", - "required": [ - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnMessageActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnMessageDeleteActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On MessageDelete activity", - "description": "Actions to perform on receipt of an activity with type 'MessageDelete'.", - "type": "object", - "required": [ - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnMessageDeleteActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnMessageReactionActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On MessageReaction activity", - "description": "Actions to perform on receipt of an activity with type 'MessageReaction'.", - "type": "object", - "required": [ - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnMessageReactionActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnMessageUpdateActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On MessageUpdate activity", - "description": "Actions to perform on receipt of an activity with type 'MessageUpdate'.", - "type": "object", - "required": [ - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnMessageUpdateActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnQnAMatch": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On QnAMaker match", - "description": "Actions to perform on when an match from QnAMaker is found.", - "type": "object", - "required": [ - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnQnAMatch" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnRepromptDialog": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On RepromptDialog", - "description": "Actions to perform when 'RepromptDialog' event occurs.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "actions", - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnRepromptDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnTypingActivity": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On Typing activity", - "description": "Actions to perform on receipt of an activity with type 'Typing'.", - "type": "object", - "required": [ - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnTypingActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OnUnknownIntent": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "On unknown intent", - "description": "Action to perform when user input is unrecognized or if none of the 'on intent recognition' triggers match recognized intent.", - "type": "object", - "required": [ - "actions", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." - }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", - "examples": [ - true, - "=f(x)" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnUnknownIntent" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.OrdinalEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Ordinal entity recognizer", - "description": "Recognizer which recognizes ordinals (example: first, second, 3rd).", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OrdinalEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.PercentageEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Percentage entity recognizer", - "description": "Recognizer which recognizes percentages.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.PercentageEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.PhoneNumberEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Phone number entity recognizer", - "description": "Recognizer which recognizes phone numbers.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.PhoneNumberEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.QnAMakerDialog": { - "$role": "implements(Microsoft.IDialog)", - "title": "QnAMaker dialog", - "description": "Dialog which uses QnAMAker knowledge base to answer questions.", - "type": "object", - "required": [ - "knowledgeBaseId", - "endpointKey", - "hostname", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.AI.QnA", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "knowledgeBaseId": { - "$ref": "#/definitions/stringExpression", - "title": "KnowledgeBase Id", - "description": "KnowledgeBase Id of your QnA Maker KnowledgeBase.", - "default": "=settings.qna.knowledgebaseid" - }, - "endpointKey": { - "$ref": "#/definitions/stringExpression", - "title": "Endpoint key", - "description": "Endpoint key for the QnA Maker KB.", - "default": "=settings.qna.endpointkey" - }, - "hostname": { - "$ref": "#/definitions/stringExpression", - "title": "Hostname", - "description": "Hostname for your QnA Maker service.", - "default": "=settings.qna.hostname", - "examples": [ - "https://yourserver.azurewebsites.net/qnamaker" - ] - }, - "noAnswer": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Fallback answer", - "description": "Default answer to return when none found in KB.", - "default": "Sorry, I did not find an answer.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "threshold": { - "$ref": "#/definitions/numberExpression", - "title": "Threshold", - "description": "Threshold score to filter results.", - "default": 0.3 - }, - "activeLearningCardTitle": { - "$ref": "#/definitions/stringExpression", - "title": "Active learning card title", - "description": "Title for active learning suggestions card.", - "default": "Did you mean:" - }, - "cardNoMatchText": { - "$ref": "#/definitions/stringExpression", - "title": "Card no match text", - "description": "Text for no match option.", - "default": "None of the above." - }, - "cardNoMatchResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Card no match response", - "description": "Custom response when no match option was selected.", - "default": "Thanks for the feedback.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "strictFilters": { - "$ref": "#/definitions/arrayExpression", - "title": "Strict filters", - "description": "Metadata filters to use when calling the QnA Maker KB.", - "items": { - "type": "object", - "title": "Metadata filter", - "description": "Metadata filter.", - "properties": { - "name": { - "type": "string", - "title": "Name", - "description": "Name of filter property.", - "maximum": 100 - }, - "value": { - "type": "string", - "title": "Value", - "description": "Value to filter on.", - "maximum": 100 - } - } - } - }, - "top": { - "$ref": "#/definitions/numberExpression", - "title": "Top", - "description": "The number of answers you want to retrieve.", - "default": 3 - }, - "isTest": { - "type": "boolean", - "title": "IsTest", - "description": "True, if pointing to Test environment, else false.", - "default": false - }, - "rankerType": { - "$ref": "#/definitions/stringExpression", - "title": "Ranker type", - "description": "Type of Ranker.", - "oneOf": [ - { - "title": "Standard ranker", - "description": "Standard ranker types.", - "enum": [ - "default", - "questionOnly", - "autoSuggestQuestion" - ], - "default": "default" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "strictFiltersJoinOperator": { - "$ref": "#/definitions/stringExpression", - "title": "StrictFiltersJoinOperator", - "description": "Join operator for Strict Filters.", - "oneOf": [ - { - "title": "Join operator", - "description": "Value of Join Operator to be used as conjunction with Strict Filter values.", - "enum": [ - "AND", - "OR" - ], - "default": "AND" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.QnAMakerDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.QnAMakerRecognizer": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "QnAMaker recognizer", - "description": "Recognizer for generating QnAMatch intents from a KB.", - "type": "object", - "required": [ - "knowledgeBaseId", - "endpointKey", - "hostname", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.AI.QnA", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet." - }, - "knowledgeBaseId": { - "$ref": "#/definitions/stringExpression", - "title": "KnowledgeBase Id", - "description": "Knowledge base Id of your QnA Maker knowledge base.", - "default": "=settings.qna.knowledgebaseid" - }, - "endpointKey": { - "$ref": "#/definitions/stringExpression", - "title": "Endpoint key", - "description": "Endpoint key for the QnA Maker KB.", - "default": "=settings.qna.endpointkey" - }, - "hostname": { - "$ref": "#/definitions/stringExpression", - "title": "Hostname", - "description": "Hostname for your QnA Maker service.", - "default": "=settings.qna.hostname", - "examples": [ - "https://yourserver.azurewebsites.net/qnamaker" - ] - }, - "threshold": { - "$ref": "#/definitions/numberExpression", - "title": "Threshold", - "description": "Threshold score to filter results.", - "default": 0.3 - }, - "strictFilters": { - "$ref": "#/definitions/arrayExpression", - "title": "Strict filters", - "description": "Metadata filters to use when calling the QnA Maker KB.", - "items": { - "type": "object", - "title": "Metadata filters", - "description": "Metadata filters to use when querying QnA Maker KB.", - "properties": { - "name": { - "type": "string", - "title": "Name", - "description": "Name to filter on.", - "maximum": 100 - }, - "value": { - "type": "string", - "title": "Value", - "description": "Value to restrict filter.", - "maximum": 100 - } - } - } - }, - "top": { - "$ref": "#/definitions/numberExpression", - "title": "Top", - "description": "The number of answers you want to retrieve.", - "default": 3 - }, - "isTest": { - "$ref": "#/definitions/booleanExpression", - "title": "Use test environment", - "description": "True, if pointing to Test environment, else false.", - "examples": [ - true, - "=f(x)" - ] - }, - "rankerType": { - "title": "Ranker type", - "description": "Type of Ranker.", - "oneOf": [ - { - "type": "string", - "title": "Ranker type", - "description": "Type of Ranker.", - "enum": [ - "default", - "questionOnly", - "autoSuggestQuestion" - ], - "default": "default" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "strictFiltersJoinOperator": { - "$ref": "#/definitions/stringExpression", - "title": "StrictFiltersJoinOperator", - "description": "Join operator for Strict Filters.", - "oneOf": [ - { - "title": "Join operator", - "description": "Value of Join Operator to be used as onjuction with Strict Filter values.", - "enum": [ - "AND", - "OR" - ], - "default": "AND" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "includeDialogNameInMetadata": { - "$ref": "#/definitions/booleanExpression", - "title": "Include dialog name", - "description": "When set to false, the dialog name will not be passed to QnAMaker. (default) is true", - "default": true, - "examples": [ - true, - "=f(x)" - ] - }, - "metadata": { - "$ref": "#/definitions/arrayExpression", - "title": "Metadata filters", - "description": "Metadata filters to use when calling the QnA Maker KB.", - "items": { - "type": "object", - "title": "Metadata filter", - "description": "Metadata filter to use when calling the QnA Maker KB.", - "properties": { - "name": { - "type": "string", - "title": "Name", - "description": "Name of value to test." - }, - "value": { - "type": "string", - "title": "Value", - "description": "Value to filter against." - } - } - } - }, - "context": { - "$ref": "#/definitions/objectExpression", - "title": "QnA request context", - "description": "Context to use for ranking." - }, - "qnaId": { - "$ref": "#/definitions/integerExpression", - "title": "QnA Id", - "description": "A number or expression which is the QnAId to paass to QnAMaker API." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.QnAMakerRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.RandomSelector": { - "$role": "implements(Microsoft.ITriggerSelector)", - "title": "Random rule selector", - "description": "Select most specific true rule.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "seed": { - "type": "integer", - "title": "Random seed", - "description": "Random seed to start random number generation." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RandomSelector" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.RecognizerSet": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "Recognizer set", - "description": "Creates the union of the intents and entities of the recognizers in the set.", - "type": "object", - "required": [ - "recognizers", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." - }, - "recognizers": { - "type": "array", - "title": "Recognizers", - "description": "List of Recognizers defined for this set.", - "items": { - "$kind": "Microsoft.IRecognizer", - "$ref": "#/definitions/Microsoft.IRecognizer" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RecognizerSet" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.RegexEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Regex entity recognizer", - "description": "Recognizer which recognizes patterns of input based on regex.", - "type": "object", - "required": [ - "name", - "pattern", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "name": { - "type": "string", - "title": "Name", - "description": "Name of the entity" - }, - "pattern": { - "type": "string", - "title": "Pattern", - "description": "Pattern expressed as regular expression." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RegexEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.RegexRecognizer": { - "$role": "implements(Microsoft.IRecognizer)", - "title": "Regex recognizer", - "description": "Use regular expressions to recognize intents and entities from user input.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." - }, - "intents": { - "type": "array", - "title": "RegEx patterns to intents", - "description": "Collection of patterns to match for an intent.", - "items": { - "type": "object", - "title": "Pattern", - "description": "Intent and regex pattern.", - "properties": { - "intent": { - "type": "string", - "title": "Intent", - "description": "The intent name." - }, - "pattern": { - "type": "string", - "title": "Pattern", - "description": "The regular expression pattern." - } - } - } - }, - "entities": { - "type": "array", - "title": "Entity recognizers", - "description": "Collection of entity recognizers to use.", - "items": { - "$kind": "Microsoft.IEntityRecognizer", - "$ref": "#/definitions/Microsoft.IEntityRecognizer" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RegexRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.RepeatDialog": { - "$role": "implements(Microsoft.IDialog)", - "type": "object", - "title": "Repeat dialog", - "description": "Repeat current dialog.", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "allowLoop": { - "$ref": "#/definitions/booleanExpression", - "title": "AllowLoop", - "description": "Optional condition which if true will allow loop of the repeated dialog.", - "examples": [ - "user.age > 3" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "options": { - "$ref": "#/definitions/objectExpression", - "title": "Options", - "description": "One or more options that are passed to the dialog that is called.", - "additionalProperties": { - "type": "string", - "title": "Options", - "description": "Options for repeating dialog." - } - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the dialog that is called can process the current activity.", - "default": true - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RepeatDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ReplaceDialog": { - "$role": "implements(Microsoft.IDialog)", - "type": "object", - "title": "Replace dialog", - "description": "Replace current dialog with another dialog.", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "dialog": { - "oneOf": [ - { - "$kind": "Microsoft.IDialog", - "pattern": "^(?!(=)).*", - "title": "Dialog", - "$ref": "#/definitions/Microsoft.IDialog" - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=settings.dialogId" - ] - } - ], - "title": "Dialog name", - "description": "Name of the dialog to call." - }, - "options": { - "$ref": "#/definitions/objectExpression", - "title": "Options", - "description": "One or more options that are passed to the dialog that is called.", - "additionalProperties": { - "type": "string", - "title": "Options", - "description": "Options for replacing dialog." - } - }, - "activityProcessed": { - "$ref": "#/definitions/booleanExpression", - "title": "Activity processed", - "description": "When set to false, the dialog that is called can process the current activity.", - "default": true - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ReplaceDialog" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ResourceMultiLanguageGenerator": { - "$role": "implements(Microsoft.ILanguageGenerator)", - "title": "Resource multi-language generator", - "description": "MultiLanguage Generator which is bound to resource by resource Id.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional generator ID." - }, - "resourceId": { - "type": "string", - "title": "Resource Id", - "description": "Resource which is the root language generator. Other generaters with the same name and language suffix will be loaded into this generator and used based on the Language Policy.", - "default": "dialog.result" - }, - "languagePolicy": { - "type": "object", - "title": "Language policy", - "description": "Set alternate language policy for this generator. If not set, the global language policy will be used." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ResourceMultiLanguageGenerator" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.SendActivity": { - "$role": "implements(Microsoft.IDialog)", - "title": "Send an activity", - "description": "Respond with an activity.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action." - }, - "activity": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Activity", - "description": "Activity to send.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SendActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.SetProperties": { - "$role": "implements(Microsoft.IDialog)", - "title": "Set property", - "description": "Set one or more property values.", - "type": "object", - "required": [ - "assignments", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "assignments": { - "type": "array", - "title": "Assignments", - "description": "Property value assignments to set.", - "items": { - "type": "object", - "title": "Assignment", - "description": "Property assignment.", - "properties": { - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property (named location to store information).", - "examples": [ - "user.age" - ] - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "New value or expression.", - "examples": [ - "='milk'", - "=dialog.favColor", - "=dialog.favColor == 'red'" - ] - } - } - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SetProperties" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.SetProperty": { - "$role": "implements(Microsoft.IDialog)", - "title": "Set property", - "description": "Set property to a value.", - "type": "object", - "required": [ - "property", - "value", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property (named location to store information).", - "examples": [ - "user.age" - ] - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "New value or expression.", - "examples": [ - "='milk'", - "=dialog.favColor", - "=dialog.favColor == 'red'" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SetProperty" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.SignOutUser": { - "$role": "implements(Microsoft.IDialog)", - "title": "Sign out user", - "description": "Sign a user out that was logged in previously using OAuthInput.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "userId": { - "$ref": "#/definitions/stringExpression", - "title": "UserId", - "description": "Expression to an user to signout. Default is user.id.", - "default": "=user.id" - }, - "connectionName": { - "$ref": "#/definitions/stringExpression", - "title": "Connection name", - "description": "Connection name that was used with OAuthInput to log a user in." - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SignOutUser" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.StaticActivityTemplate": { - "$role": "implements(Microsoft.IActivityTemplate)", - "title": "Microsoft static activity template", - "description": "This allows you to define a static Activity object", - "type": "object", - "required": [ - "activity", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "activity": { - "$ref": "#/definitions/Microsoft.IActivityTemplate/oneOf/1", - "title": "Activity", - "description": "A static Activity to used.", - "required": [ - "type" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.StaticActivityTemplate" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.SwitchCondition": { - "$role": "implements(Microsoft.IDialog)", - "title": "Switch condition", - "description": "Execute different actions based on the value of a property.", - "type": "object", - "required": [ - "condition", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "condition": { - "$ref": "#/definitions/stringExpression", - "title": "Condition", - "description": "Property to evaluate.", - "examples": [ - "user.favColor" - ] - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "cases": { - "type": "array", - "title": "Cases", - "description": "Actions for each possible condition.", - "items": { - "type": "object", - "title": "Case", - "description": "Case and actions.", - "required": [ - "value", - "actions" - ], - "properties": { - "value": { - "type": [ - "number", - "integer", - "boolean", - "string" - ], - "title": "Value", - "description": "The value to compare the condition with.", - "examples": [ - "red", - "true", - "13" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - } - } - }, - "default": { - "type": "array", - "title": "Default", - "description": "Actions to execute if none of the cases meet the condition.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SwitchCondition" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TelemetryTrackEvent": { - "$role": "implements(Microsoft.IDialog)", - "type": "object", - "title": "Telemetry - track event", - "description": "Track a custom event using the registered Telemetry Client.", - "required": [ - "url", - "method", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "eventName": { - "$ref": "#/definitions/stringExpression", - "title": "Event name", - "description": "The name of the event to track.", - "examples": [ - "MyEventStarted", - "MyEventCompleted" - ] - }, - "properties": { - "type": "object", - "title": "Properties", - "description": "One or more properties to attach to the event being tracked.", - "additionalProperties": { - "$ref": "#/definitions/stringExpression" - } - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TelemetryTrackEvent" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TemperatureEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Temperature recognizer", - "description": "Recognizer which recognizes temperatures.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TemperatureEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TemplateEngineLanguageGenerator": { - "$role": "implements(Microsoft.ILanguageGenerator)", - "title": "Template multi-language generator", - "description": "Template Generator which allows only inline evaluation of templates.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional generator ID." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TemplateEngineLanguageGenerator" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TextInput": { - "$role": [ - "implements(Microsoft.IDialog)", - "extends(Microsoft.InputDialog)" - ], - "type": "object", - "title": "Text input dialog", - "description": "Collection information - Ask for a word or sentence.", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "defaultValue": { - "$ref": "#/definitions/stringExpression", - "title": "Default value", - "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", - "examples": [ - "hello world", - "Hello ${user.name}", - "=concat(user.firstname, user.lastName)" - ] - }, - "value": { - "$ref": "#/definitions/stringExpression", - "title": "Value", - "description": "'Property' will be set to the value of this expression unless it evaluates to null.", - "examples": [ - "hello world", - "Hello ${user.name}", - "=concat(user.firstname, user.lastName)" - ] - }, - "outputFormat": { - "$ref": "#/definitions/stringExpression", - "title": "Output format", - "description": "Expression to format the output.", - "examples": [ - "=toUpper(this.value)", - "${toUpper(this.value)}" - ] - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "default": false, - "examples": [ - false, - "=user.isVip" - ] - }, - "prompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send when the user input does not meet any validation expression.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "$ref": "#/definitions/integerExpression", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "examples": [ - 3, - "=settings.xyz" - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "items": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Expression which needs to met for the input to be considered valid", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ] - } - }, - "property": { - "$ref": "#/definitions/stringExpression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "dialog.${user.name}", - "=f(x)" - ] - }, - "alwaysPrompt": { - "$ref": "#/definitions/booleanExpression", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false, - "=$val" - ] - }, - "allowInterruptions": { - "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": true, - "examples": [ - true, - "=user.xyz" - ] - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TextInput" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TextTemplate": { - "$role": "implements(Microsoft.ITextTemplate)", - "title": "Microsoft TextTemplate", - "description": "Use LG Templates to create text", - "type": "object", - "required": [ - "template", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "template": { - "title": "Template", - "description": "Language Generator template to evaluate to create the text.", - "type": "string" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TextTemplate" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.ThrowException": { - "$role": "implements(Microsoft.IDialog)", - "title": "Throw an exception", - "description": "Throw an exception. Capture this exception with OnError trigger.", - "type": "object", - "required": [ - "errorValue", - "$kind" - ], - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "errorValue": { - "$ref": "#/definitions/valueExpression", - "title": "Error value", - "description": "Error value to throw." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ThrowException" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TraceActivity": { - "$role": "implements(Microsoft.IDialog)", - "title": "Send a TraceActivity", - "description": "Send a trace activity to the transcript logger and/ or Bot Framework Emulator.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "name": { - "$ref": "#/definitions/stringExpression", - "title": "Name", - "description": "Name of the trace activity" - }, - "label": { - "$ref": "#/definitions/stringExpression", - "title": "Label", - "description": "Label for the trace activity (used to identify it in a list of trace activities.)" - }, - "valueType": { - "$ref": "#/definitions/stringExpression", - "title": "Value type", - "description": "Type of value" - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "Property that holds the value to send as trace activity." - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TraceActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.TrueSelector": { - "$role": "implements(Microsoft.ITriggerSelector)", - "title": "True trigger selector", - "description": "Selector for all true events", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TrueSelector" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.UpdateActivity": { - "$role": "implements(Microsoft.IDialog)", - "title": "Update an activity", - "description": "Respond with an activity.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - true, - "=user.age > 3" - ] - }, - "activityId": { - "$ref": "#/definitions/stringExpression", - "title": "Activity Id", - "description": "An string expression with the activity id to update.", - "examples": [ - "=dialog.lastActivityId" - ] - }, - "activity": { - "$kind": "Microsoft.IActivityTemplate", - "title": "Activity", - "description": "Activity to send.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.UpdateActivity" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.UrlEntityRecognizer": { - "$role": [ - "implements(Microsoft.IRecognizer)", - "implements(Microsoft.IEntityRecognizer)" - ], - "title": "Url recognizer", - "description": "Recognizer which recognizes urls.", - "type": "object", - "$package": { - "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", - "version": "4.11.0" - }, - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.UrlEntityRecognizer" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "arrayExpression": { - "$role": "expression", - "title": "Array or expression", - "description": "Array or expression to evaluate.", - "oneOf": [ - { - "type": "array", - "title": "Array", - "description": "Array constant." - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "booleanExpression": { - "$role": "expression", - "title": "Boolean or expression", - "description": "Boolean constant or expression to evaluate.", - "oneOf": [ - { - "type": "boolean", - "title": "Boolean", - "description": "Boolean constant.", - "default": false, - "examples": [ - false - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=user.isVip" - ] - } - ] - }, - "component": { - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "condition": { - "$role": "expression", - "title": "Boolean condition", - "description": "Boolean constant or expression to evaluate.", - "oneOf": [ - { - "$ref": "#/definitions/expression" - }, - { - "type": "boolean", - "title": "Boolean", - "description": "Boolean value.", - "default": true, - "examples": [ - false - ] - } - ] - }, - "equalsExpression": { - "$role": "expression", - "type": "string", - "title": "Expression", - "description": "Expression starting with =.", - "pattern": "^=.*\\S.*", - "examples": [ - "=user.name" - ] - }, - "expression": { - "$role": "expression", - "type": "string", - "title": "Expression", - "description": "Expression to evaluate.", - "pattern": "^.*\\S.*", - "examples": [ - "user.age > 13" - ] - }, - "integerExpression": { - "$role": "expression", - "title": "Integer or expression", - "description": "Integer constant or expression to evaluate.", - "oneOf": [ - { - "type": "integer", - "title": "Integer", - "description": "Integer constant.", - "default": 0, - "examples": [ - 15 - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=user.age" - ] - } - ] - }, - "numberExpression": { - "$role": "expression", - "title": "Number or expression", - "description": "Number constant or expression to evaluate.", - "oneOf": [ - { - "type": "number", - "title": "Number", - "description": "Number constant.", - "default": 0, - "examples": [ - 15.5 - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=dialog.quantity" - ] - } - ] - }, - "objectExpression": { - "$role": "expression", - "title": "Object or expression", - "description": "Object or expression to evaluate.", - "oneOf": [ - { - "type": "object", - "title": "Object", - "description": "Object constant." - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "role": { - "title": "$role", - "description": "Defines the role played in the dialog schema from [expression|interface|implements($kind)|extends($kind)].", - "type": "string", - "pattern": "^((expression)|(interface)|(implements\\([a-zA-Z][a-zA-Z0-9.]*\\))|(extends\\([a-zA-Z][a-zA-Z0-9.]*\\)))$" - }, - "stringExpression": { - "$role": "expression", - "title": "String or expression", - "description": "Interpolated string or expression to evaluate.", - "oneOf": [ - { - "type": "string", - "title": "String", - "description": "Interpolated string", - "pattern": "^(?!(=)).*", - "examples": [ - "Hello ${user.name}" - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=concat('x','y','z')" - ] - } - ] - }, - "valueExpression": { - "$role": "expression", - "title": "Any or expression", - "description": "Any constant or expression to evaluate.", - "oneOf": [ - { - "type": "object", - "title": "Object", - "description": "Object constant." - }, - { - "type": "array", - "title": "Array", - "description": "Array constant." - }, - { - "type": "string", - "title": "String", - "description": "Interpolated string.", - "pattern": "^(?!(=)).*", - "examples": [ - "Hello ${user.name}" - ] - }, - { - "type": "boolean", - "title": "Boolean", - "description": "Boolean constant", - "examples": [ - false - ] - }, - { - "type": "number", - "title": "Number", - "description": "Number constant.", - "examples": [ - 15.5 - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=..." - ] - } - ] - } - } -} +{} \ No newline at end of file diff --git a/generators/generator-bot-adaptive/generators/app/templates/assets/schemas/sdk.uischema b/generators/generator-bot-adaptive/generators/app/templates/assets/schemas/sdk.uischema index 48d8d8b8f2..9e26dfeeb6 100644 --- a/generators/generator-bot-adaptive/generators/app/templates/assets/schemas/sdk.uischema +++ b/generators/generator-bot-adaptive/generators/app/templates/assets/schemas/sdk.uischema @@ -1,781 +1 @@ -{ - "$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema", - "Microsoft.AdaptiveDialog": { - "form": { - "description": "This configures a data driven dialog via a collection of events and actions.", - "helpLink": "https://aka.ms/bf-composer-docs-dialog", - "hidden": [ - "triggers", - "generator", - "selector", - "schema" - ], - "label": "Adaptive dialog", - "order": [ - "recognizer", - "*" - ], - "properties": { - "recognizer": { - "description": "To understand what the user says, your dialog needs a \"Recognizer\"; that includes example words and sentences that users may use.", - "label": "Language Understanding" - } - } - } - }, - "Microsoft.BeginDialog": { - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "Begin a new dialog", - "order": [ - "dialog", - "options", - "resultProperty", - "*" - ], - "properties": { - "resultProperty": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Begin Dialog" - } - }, - "Microsoft.BeginSkill": { - "form": { - "helpLink": "https://aka.ms/bf-composer-docs-connect-skill", - "label": "Connect to a skill", - "properties": { - "resultProperty": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Skill Dialog" - } - }, - "Microsoft.BreakLoop": { - "form": { - "label": "Break out of loop", - "subtitle": "Break out of loop" - } - }, - "Microsoft.CancelAllDialogs": { - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "Cancel all active dialogs", - "subtitle": "Cancel All Dialogs" - } - }, - "Microsoft.ContinueLoop": { - "form": { - "label": "Continue loop", - "subtitle": "Continue loop" - } - }, - "Microsoft.DebugBreak": { - "form": { - "label": "Debug Break" - } - }, - "Microsoft.DeleteProperties": { - "form": { - "helpLink": "https://aka.ms/bfc-using-memory", - "label": "Delete properties", - "properties": { - "properties": { - "intellisenseScopes": [ - "user-variables" - ] - } - }, - "subtitle": "Delete Properties" - } - }, - "Microsoft.DeleteProperty": { - "form": { - "helpLink": "https://aka.ms/bfc-using-memory", - "label": "Delete a property", - "properties": { - "property": { - "intellisenseScopes": [ - "user-variables" - ] - } - }, - "subtitle": "Delete Property" - } - }, - "Microsoft.EditActions": { - "form": { - "label": "Modify active dialog", - "subtitle": "Edit Actions" - } - }, - "Microsoft.EditArray": { - "form": { - "helpLink": "https://aka.ms/bfc-using-memory", - "label": "Edit an array property", - "properties": { - "itemsProperty": { - "intellisenseScopes": [ - "user-variables" - ] - }, - "resultProperty": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Edit Array" - } - }, - "Microsoft.EmitEvent": { - "form": { - "helpLink": "https://aka.ms/bfc-custom-events", - "label": "Emit a custom event", - "subtitle": "Emit Event" - } - }, - "Microsoft.EndDialog": { - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "End this dialog", - "subtitle": "End Dialog" - } - }, - "Microsoft.EndTurn": { - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "End turn", - "subtitle": "End Turn" - } - }, - "Microsoft.Foreach": { - "form": { - "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", - "hidden": [ - "actions" - ], - "label": "Loop: For each item", - "order": [ - "itemsProperty", - "*" - ], - "properties": { - "index": { - "intellisenseScopes": [ - "variable-scopes" - ] - }, - "itemsProperty": { - "intellisenseScopes": [ - "user-variables" - ] - }, - "value": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "For Each" - } - }, - "Microsoft.ForeachPage": { - "form": { - "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", - "hidden": [ - "actions" - ], - "label": "Loop: For each page (multiple items)", - "order": [ - "itemsProperty", - "pageSize", - "*" - ], - "properties": { - "itemsProperty": { - "intellisenseScopes": [ - "user-variables" - ] - }, - "page": { - "intellisenseScopes": [ - "variable-scopes" - ] - }, - "pageIndex": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "For Each Page" - } - }, - "Microsoft.HttpRequest": { - "form": { - "helpLink": "https://aka.ms/bfc-using-http", - "label": "Send an HTTP request", - "order": [ - "method", - "url", - "body", - "headers", - "*" - ], - "properties": { - "resultProperty": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "HTTP Request" - } - }, - "Microsoft.IfCondition": { - "form": { - "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", - "hidden": [ - "actions", - "elseActions" - ], - "label": "Branch: If/Else", - "subtitle": "If Condition" - } - }, - "Microsoft.LogAction": { - "form": { - "helpLink": "https://aka.ms/composer-telemetry", - "label": "Log to console", - "subtitle": "Log Action" - } - }, - "Microsoft.RepeatDialog": { - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "Repeat this dialog", - "order": [ - "options", - "*" - ], - "subtitle": "Repeat Dialog" - } - }, - "Microsoft.ReplaceDialog": { - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "Replace this dialog", - "order": [ - "dialog", - "options", - "*" - ], - "subtitle": "Replace Dialog" - } - }, - "Microsoft.SendActivity": { - "form": { - "helpLink": "https://aka.ms/bfc-send-activity", - "label": "Send a response", - "order": [ - "activity", - "*" - ], - "subtitle": "Send Activity" - } - }, - "Microsoft.SetProperties": { - "form": { - "helpLink": "https://aka.ms/bfc-using-memory", - "label": "Set properties", - "properties": { - "assignments": { - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - } - } - }, - "subtitle": "Set Properties" - } - }, - "Microsoft.SetProperty": { - "form": { - "helpLink": "https://aka.ms/bfc-using-memory", - "label": "Set a property", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Set Property" - } - }, - "Microsoft.SignOutUser": { - "form": { - "label": "Sign out user", - "subtitle": "Signout User" - } - }, - "Microsoft.SwitchCondition": { - "form": { - "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", - "hidden": [ - "default" - ], - "label": "Branch: Switch (multiple options)", - "properties": { - "cases": { - "hidden": [ - "actions" - ] - }, - "condition": { - "intellisenseScopes": [ - "user-variables" - ] - } - }, - "subtitle": "Switch Condition" - } - }, - "Microsoft.ThrowException": { - "form": { - "label": "Throw an exception", - "subtitle": "Throw an exception" - } - }, - "Microsoft.TraceActivity": { - "form": { - "helpLink": "https://aka.ms/composer-telemetry", - "label": "Emit a trace event", - "subtitle": "Trace Activity" - } - }, - "Microsoft.Ask": { - "form": { - "helpLink": "https://aka.ms/bfc-send-activity", - "label": "Send a response to ask a question", - "order": [ - "activity", - "*" - ], - "subtitle": "Ask Activity" - } - }, - "Microsoft.AttachmentInput": { - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for a file or an attachment", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Attachment Input" - } - }, - "Microsoft.ChoiceInput": { - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt with multi-choice", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Choice Input" - } - }, - "Microsoft.ConfirmInput": { - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for confirmation", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Confirm Input" - } - }, - "Microsoft.DateTimeInput": { - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for a date or a time", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Date Time Input" - } - }, - "Microsoft.NumberInput": { - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for a number", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Number Input" - } - }, - "Microsoft.OAuthInput": { - "form": { - "helpLink": "https://aka.ms/bfc-using-oauth", - "label": "OAuth login", - "order": [ - "connectionName", - "*" - ], - "subtitle": "OAuth Input" - } - }, - "Microsoft.TextInput": { - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for text", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Text Input" - } - }, - "Microsoft.RegexRecognizer": { - "form": { - "hidden": [ - "entities" - ] - } - }, - "Microsoft.OnActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Activities", - "order": [ - "condition", - "*" - ], - "subtitle": "Activity received" - } - }, - "Microsoft.OnAssignEntity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Handle a condition when an entity is assigned", - "order": [ - "condition", - "*" - ], - "subtitle": "EntityAssigned activity" - } - }, - "Microsoft.OnBeginDialog": { - "form": { - "hidden": [ - "actions" - ], - "label": "Dialog started", - "order": [ - "condition", - "*" - ], - "subtitle": "Begin dialog event" - } - }, - "Microsoft.OnCancelDialog": { - "form": { - "hidden": [ - "actions" - ], - "label": "Dialog cancelled", - "order": [ - "condition", - "*" - ], - "subtitle": "Cancel dialog event" - } - }, - "Microsoft.OnChooseIntent": { - "form": { - "hidden": [ - "actions" - ], - "order": [ - "condition", - "*" - ] - } - }, - "Microsoft.OnCondition": { - "form": { - "hidden": [ - "actions" - ], - "label": "Handle a condition", - "order": [ - "condition", - "*" - ], - "subtitle": "Condition" - } - }, - "Microsoft.OnConversationUpdateActivity": { - "form": { - "description": "Handle the events fired when a user begins a new conversation with the bot.", - "helpLink": "https://aka.ms/bf-composer-docs-conversation-update-activity", - "hidden": [ - "actions" - ], - "label": "Greeting", - "order": [ - "condition", - "*" - ], - "subtitle": "ConversationUpdate activity" - } - }, - "Microsoft.OnDialogEvent": { - "form": { - "hidden": [ - "actions" - ], - "label": "Dialog events", - "order": [ - "condition", - "*" - ], - "subtitle": "Dialog event" - } - }, - "Microsoft.OnEndOfActions": { - "form": { - "hidden": [ - "actions" - ], - "label": "Handle a condition when actions have ended", - "order": [ - "condition", - "*" - ], - "subtitle": "EndOfActions activity" - } - }, - "Microsoft.OnEndOfConversationActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Conversation ended", - "order": [ - "condition", - "*" - ], - "subtitle": "EndOfConversation activity" - } - }, - "Microsoft.OnError": { - "form": { - "hidden": [ - "actions" - ], - "label": "Error occurred", - "order": [ - "condition", - "*" - ], - "subtitle": "Error event" - } - }, - "Microsoft.OnEventActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Event received", - "order": [ - "condition", - "*" - ], - "subtitle": "Event activity" - } - }, - "Microsoft.OnHandoffActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Handover to human", - "order": [ - "condition", - "*" - ], - "subtitle": "Handoff activity" - } - }, - "Microsoft.OnInstallationUpdateActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Installation updated", - "order": [ - "condition", - "*" - ], - "subtitle": "Installation updated activity" - } - }, - "Microsoft.OnIntent": { - "form": { - "hidden": [ - "actions" - ], - "label": "Intent recognized", - "order": [ - "intent", - "condition", - "entities", - "*" - ], - "subtitle": "Intent recognized" - } - }, - "Microsoft.OnInvokeActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Conversation invoked", - "order": [ - "condition", - "*" - ], - "subtitle": "Invoke activity" - } - }, - "Microsoft.OnMessageActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Message received", - "order": [ - "condition", - "*" - ], - "subtitle": "Message received activity" - } - }, - "Microsoft.OnMessageDeleteActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Message deleted", - "order": [ - "condition", - "*" - ], - "subtitle": "Message deleted activity" - } - }, - "Microsoft.OnMessageReactionActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Message reaction", - "order": [ - "condition", - "*" - ], - "subtitle": "Message reaction activity" - } - }, - "Microsoft.OnMessageUpdateActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "Message updated", - "order": [ - "condition", - "*" - ], - "subtitle": "Message updated activity" - } - }, - "Microsoft.OnRepromptDialog": { - "form": { - "hidden": [ - "actions" - ], - "label": "Re-prompt for input", - "order": [ - "condition", - "*" - ], - "subtitle": "Reprompt dialog event" - } - }, - "Microsoft.OnTypingActivity": { - "form": { - "hidden": [ - "actions" - ], - "label": "User is typing", - "order": [ - "condition", - "*" - ], - "subtitle": "Typing activity" - } - }, - "Microsoft.OnUnknownIntent": { - "form": { - "hidden": [ - "actions" - ], - "label": "Unknown intent", - "order": [ - "condition", - "*" - ], - "subtitle": "Unknown intent recognized" - } - } -} +{} \ No newline at end of file diff --git a/generators/generator-bot-adaptive/package.json b/generators/generator-bot-adaptive/package.json index 98ca42a60a..2784cd4e9f 100644 --- a/generators/generator-bot-adaptive/package.json +++ b/generators/generator-bot-adaptive/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/generator-bot-adaptive", - "version": "1.0.0", + "version": "1.1.1", "description": "Yeoman generator for creating a base bot built on the Azure Bot Framework and the Adaptive stack.", "keywords": [ "microsoft", diff --git a/generators/generator-bot-adaptive/platforms.js b/generators/generator-bot-adaptive/platforms.js index 621dd9b47a..cccd893509 100644 --- a/generators/generator-bot-adaptive/platforms.js +++ b/generators/generator-bot-adaptive/platforms.js @@ -3,12 +3,12 @@ const dotnet = { name: 'dotnet', - defaultSdkVersion: '4.13.2', + defaultSdkVersion: '4.14.1', }; const js = { name: 'js', - defaultSdkVersion: '4.13.4-preview', + defaultSdkVersion: '4.14.0-preview', }; module.exports = { dotnet, js }; diff --git a/generators/generator-bot-adaptive/test/dotnet-functions.test.js b/generators/generator-bot-adaptive/test/dotnet-functions.test.js index 04cb7cd664..dc96e8c34c 100644 --- a/generators/generator-bot-adaptive/test/dotnet-functions.test.js +++ b/generators/generator-bot-adaptive/test/dotnet-functions.test.js @@ -125,7 +125,7 @@ describe(`generator-bot-adaptive --platform ${platform} --integration ${integrat { botName, packageReferences: '', - sdkVersion: '4.13.2', + sdkVersion: '4.14.1', } ); diff --git a/generators/generator-bot-adaptive/test/dotnet-webapp.test.js b/generators/generator-bot-adaptive/test/dotnet-webapp.test.js index b3a99461ab..21c2576efa 100644 --- a/generators/generator-bot-adaptive/test/dotnet-webapp.test.js +++ b/generators/generator-bot-adaptive/test/dotnet-webapp.test.js @@ -106,7 +106,7 @@ describe(`generator-bot-adaptive --platform ${platform} --integration ${integrat { botName, packageReferences: '', - sdkVersion: '4.13.2', + sdkVersion: '4.14.1', } ); diff --git a/generators/generator-bot-adaptive/test/js-functions.test.js b/generators/generator-bot-adaptive/test/js-functions.test.js index c3c990981a..c22b1be238 100644 --- a/generators/generator-bot-adaptive/test/js-functions.test.js +++ b/generators/generator-bot-adaptive/test/js-functions.test.js @@ -107,10 +107,10 @@ describe(`generator-bot-adaptive --platform ${platform} --integration ${integrat }, dependencies: { 'cross-env': 'latest', - 'botbuilder-ai-luis': '4.13.4-preview', - 'botbuilder-ai-qna': '4.13.4-preview', + 'botbuilder-ai-luis': '4.14.0-preview', + 'botbuilder-ai-qna': '4.14.0-preview', 'botbuilder-dialogs-adaptive-runtime-integration-azure-functions': - '4.13.4-preview', + '4.14.0-preview', }, }; diff --git a/generators/generator-bot-adaptive/test/js-webapp.test.js b/generators/generator-bot-adaptive/test/js-webapp.test.js index 2028572509..d76e3995cd 100644 --- a/generators/generator-bot-adaptive/test/js-webapp.test.js +++ b/generators/generator-bot-adaptive/test/js-webapp.test.js @@ -86,10 +86,10 @@ describe(`generator-bot-adaptive --platform ${platform} --integration ${integrat }, dependencies: { 'cross-env': 'latest', - 'botbuilder-ai-luis': '4.13.4-preview', - 'botbuilder-ai-qna': '4.13.4-preview', + 'botbuilder-ai-luis': '4.14.0-preview', + 'botbuilder-ai-qna': '4.14.0-preview', 'botbuilder-dialogs-adaptive-runtime-integration-express': - '4.13.4-preview', + '4.14.0-preview', }, }; diff --git a/generators/generator-bot-core-assistant/generators/app/index.js b/generators/generator-bot-core-assistant/generators/app/index.js index b19b308c8c..ff274836a0 100644 --- a/generators/generator-bot-core-assistant/generators/app/index.js +++ b/generators/generator-bot-core-assistant/generators/app/index.js @@ -12,7 +12,7 @@ const packageReferences = { [platforms.dotnet.name]: [ { name: 'Microsoft.Bot.Components.HelpAndCancel', - version: '1.0.0', + version: '1.1.1', }, ], [platforms.js.name]: [ diff --git a/generators/generator-bot-core-assistant/package.json b/generators/generator-bot-core-assistant/package.json index 22944a9a4b..285a059819 100644 --- a/generators/generator-bot-core-assistant/package.json +++ b/generators/generator-bot-core-assistant/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/generator-bot-core-assistant", - "version": "1.0.0", + "version": "1.1.1", "description": "Yeoman generator for creating an assistant-style bot with NLP built on the Azure Bot Framework.", "keywords": [ "microsoft", @@ -24,7 +24,7 @@ "lint": "eslint -c ../../.eslintrc.json ." }, "dependencies": { - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0", + "@microsoft/generator-bot-adaptive": "workspace:^1.1.1", "yeoman-generator": "^2.0.5", "yeoman-test": "^1.9.1" }, diff --git a/generators/generator-bot-core-language/generators/app/index.js b/generators/generator-bot-core-language/generators/app/index.js index e831c00de2..e231c8f3d6 100644 --- a/generators/generator-bot-core-language/generators/app/index.js +++ b/generators/generator-bot-core-language/generators/app/index.js @@ -12,11 +12,11 @@ const packageReferences = { [platforms.dotnet.name]: [ { name: 'Microsoft.Bot.Components.HelpAndCancel', - version: '1.0.0', + version: '1.1.1', }, { name: 'Microsoft.Bot.Components.Welcome', - version: '1.0.0', + version: '1.1.1', }, ], [platforms.js.name]: [ diff --git a/generators/generator-bot-core-language/package.json b/generators/generator-bot-core-language/package.json index 5cecb71f13..463947c559 100644 --- a/generators/generator-bot-core-language/package.json +++ b/generators/generator-bot-core-language/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/generator-bot-core-language", - "version": "1.0.0", + "version": "1.1.1", "description": "Yeoman generator for creating a simple conversational bot with NLP built on the Azure Bot Framework.", "keywords": [ "microsoft", @@ -26,7 +26,7 @@ "lint": "eslint -c ../../.eslintrc.json ." }, "dependencies": { - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0", + "@microsoft/generator-bot-adaptive": "workspace:^1.1.1", "yeoman-generator": "^2.0.5", "yeoman-test": "^1.9.1" }, diff --git a/generators/generator-bot-core-qna/package.json b/generators/generator-bot-core-qna/package.json index 9692356e3e..2e0ff125cb 100644 --- a/generators/generator-bot-core-qna/package.json +++ b/generators/generator-bot-core-qna/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/generator-bot-core-qna", - "version": "1.0.0", + "version": "1.1.1", "description": "Yeoman generator for creating a bot and connecting to a QnA Maker knowledge base.", "keywords": [ "microsoft", @@ -23,7 +23,7 @@ "lint": "eslint -c ../../.eslintrc.json ." }, "dependencies": { - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0", + "@microsoft/generator-bot-adaptive": "workspace:^1.1.1", "yeoman-generator": "^2.0.5", "yeoman-test": "^1.9.1" }, diff --git a/generators/generator-bot-empty/package.json b/generators/generator-bot-empty/package.json index a4cdb7f0ff..645fa1f905 100644 --- a/generators/generator-bot-empty/package.json +++ b/generators/generator-bot-empty/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/generator-bot-empty", - "version": "1.0.0", + "version": "1.1.1", "description": "Yeoman generator for creating an empty bot built on the Azure Bot Framework.", "keywords": [ "microsoft", @@ -26,7 +26,7 @@ "lint": "eslint -c ../../.eslintrc.json ." }, "dependencies": { - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0", + "@microsoft/generator-bot-adaptive": "workspace:^1.1.1", "yeoman-generator": "^2.0.5", "yeoman-test": "^1.9.1" }, diff --git a/generators/generator-bot-enterprise-assistant/generators/app/index.js b/generators/generator-bot-enterprise-assistant/generators/app/index.js index 33ed5d2b6f..2a3d3e28b8 100644 --- a/generators/generator-bot-enterprise-assistant/generators/app/index.js +++ b/generators/generator-bot-enterprise-assistant/generators/app/index.js @@ -36,7 +36,7 @@ module.exports = class extends BaseGenerator { { isPlugin: true, name: 'Microsoft.Bot.Builder.AI.Orchestrator', - version: '4.13.2', + version: '4.14.1', }, ], modifyApplicationSettings: (appSettings) => { diff --git a/generators/generator-bot-enterprise-assistant/package.json b/generators/generator-bot-enterprise-assistant/package.json index c7f51f4dc0..8b538a0e6e 100644 --- a/generators/generator-bot-enterprise-assistant/package.json +++ b/generators/generator-bot-enterprise-assistant/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/generator-bot-enterprise-assistant", - "version": "1.0.0", + "version": "1.1.1", "description": "Yeoman generator for creating an enterprise assistant, with a root bot and two skills built on the Azure Bot Framework.", "keywords": [ "microsoft", @@ -25,9 +25,9 @@ "lint": "eslint -c ../../.eslintrc.json ." }, "dependencies": { - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0", - "@microsoft/generator-bot-enterprise-calendar": "workspace:^1.0.0", - "@microsoft/generator-bot-enterprise-people": "workspace:^1.0.0", + "@microsoft/generator-bot-adaptive": "workspace:^1.1.1", + "@microsoft/generator-bot-enterprise-calendar": "workspace:^1.1.1", + "@microsoft/generator-bot-enterprise-people": "workspace:^1.1.1", "uuid": "^8.3.2", "yeoman-generator": "^2.0.5", "yeoman-test": "^1.9.1" diff --git a/generators/generator-bot-enterprise-calendar/generators/app/index.js b/generators/generator-bot-enterprise-calendar/generators/app/index.js index 64202cef42..c07c0d72da 100644 --- a/generators/generator-bot-enterprise-calendar/generators/app/index.js +++ b/generators/generator-bot-enterprise-calendar/generators/app/index.js @@ -16,7 +16,7 @@ module.exports = class extends BaseGenerator { { isPlugin: true, name: 'Microsoft.Bot.Components.Graph', - version: '1.0.0', + version: '1.1.1', }, ], modifyApplicationSettings: (appSettings) => { diff --git a/generators/generator-bot-enterprise-calendar/package.json b/generators/generator-bot-enterprise-calendar/package.json index 419f85cefa..ccc2b013bf 100644 --- a/generators/generator-bot-enterprise-calendar/package.json +++ b/generators/generator-bot-enterprise-calendar/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/generator-bot-enterprise-calendar", - "version": "1.0.0", + "version": "1.1.1", "description": "Yeoman generator for creating an Adaptive bot built on the Azure Bot Framework using the Calendar template.", "keywords": [ "microsoft", @@ -24,7 +24,7 @@ "lint": "eslint ." }, "dependencies": { - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0", + "@microsoft/generator-bot-adaptive": "workspace:^1.1.1", "yeoman-generator": "^2.0.5", "yeoman-test": "^1.9.1" }, diff --git a/generators/generator-bot-enterprise-people/generators/app/index.js b/generators/generator-bot-enterprise-people/generators/app/index.js index d85abc8a14..afc0f48b0a 100644 --- a/generators/generator-bot-enterprise-people/generators/app/index.js +++ b/generators/generator-bot-enterprise-people/generators/app/index.js @@ -16,7 +16,7 @@ module.exports = class extends BaseGenerator { { isPlugin: true, name: 'Microsoft.Bot.Components.Graph', - version: '1.0.0', + version: '1.1.1', }, ], modifyApplicationSettings: (appSettings) => { diff --git a/generators/generator-bot-enterprise-people/package.json b/generators/generator-bot-enterprise-people/package.json index 7e8b5bb1f8..e8ae667072 100644 --- a/generators/generator-bot-enterprise-people/package.json +++ b/generators/generator-bot-enterprise-people/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/generator-bot-enterprise-people", - "version": "1.0.0", + "version": "1.1.1", "description": "Yeoman generator for creating an Adaptive bot built on the Azure Bot Framework using the People template.", "keywords": [ "microsoft", @@ -24,7 +24,7 @@ "lint": "eslint -c ../../.eslintrc.json ." }, "dependencies": { - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0", + "@microsoft/generator-bot-adaptive": "workspace:^1.1.1", "yeoman-generator": "^2.0.5", "yeoman-test": "^1.9.1" }, diff --git a/package.json b/package.json index 7a69ff9c32..33608161e5 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "packages/*", "packages/*/js", "skills/declarative/*", - "testing/*" + "tests/**/js", + "!tests/functional" ], "scripts": { "lint": "yarn workspaces foreach run lint" diff --git a/packages/AdaptiveCards/Microsoft.Bot.Components.AdaptiveCards.csproj b/packages/AdaptiveCards/Microsoft.Bot.Components.AdaptiveCards.csproj index ebcd529718..c9b6c9e0fb 100644 --- a/packages/AdaptiveCards/Microsoft.Bot.Components.AdaptiveCards.csproj +++ b/packages/AdaptiveCards/Microsoft.Bot.Components.AdaptiveCards.csproj @@ -8,7 +8,7 @@ Microsoft.Bot.Components.AdaptiveCards https://github.com/microsoft/botframework-components/tree/main/packages/AdaptiveCards - 1.0.0 + 1.1.1 Composer triggers and actions for working with Adaptive Cards. Composer triggers and actions for working with Adaptive Cards. true @@ -20,7 +20,7 @@ - + diff --git a/packages/Directory.Build.props b/packages/Directory.Build.props index f25047d671..a65ea1de3e 100644 --- a/packages/Directory.Build.props +++ b/packages/Directory.Build.props @@ -12,18 +12,13 @@ - https://raw.githubusercontent.com/microsoft/botframework-sdk/master/icon.png - https://github.com/Microsoft/BotBuilder/blob/master/LICENSE + https://raw.githubusercontent.com/microsoft/botframework-sdk/main/icon.png true - https://github.com/Microsoft/BotBuilder-dotnet/blob/master/LICENSE + MIT en-US https://github.com/Microsoft/botframework-components - - $(NoWarn);NU5125 + $(NoWarn);NU5048 true true snupkg diff --git a/packages/Graph/Microsoft.Bot.Components.Graph.csproj b/packages/Graph/Microsoft.Bot.Components.Graph.csproj index 7e09985822..e8875e0481 100644 --- a/packages/Graph/Microsoft.Bot.Components.Graph.csproj +++ b/packages/Graph/Microsoft.Bot.Components.Graph.csproj @@ -7,7 +7,7 @@ Microsoft.Bot.Components.Graph - 1.0.0 + 1.1.1 Custom actions for the MS Graph API for Bot Framework bots. A set of custom actions for working with the Microsoft Graph API from Bot Framework Composer. https://github.com/Microsoft/botframework-components/tree/main/packages/Graph @@ -20,7 +20,7 @@ - + all diff --git a/packages/HelpAndCancel/Microsoft.Bot.Components.HelpAndCancel.nuspec b/packages/HelpAndCancel/Microsoft.Bot.Components.HelpAndCancel.nuspec index dd564f2118..9855582d85 100644 --- a/packages/HelpAndCancel/Microsoft.Bot.Components.HelpAndCancel.nuspec +++ b/packages/HelpAndCancel/Microsoft.Bot.Components.HelpAndCancel.nuspec @@ -2,18 +2,18 @@ Microsoft.Bot.Components.HelpAndCancel - 1.0.0 + 1.1.1 Microsoft Microsoft © Microsoft Corporation. All rights reserved. - https://github.com/Microsoft/BotBuilder/blob/master/LICENSE + MIT true https://github.com/Microsoft/botframework-components/tree/main/packages/HelpAndCancel First version of HelpAndCancel package Contains Adaptive Dialog assets to support Help and Cancel conversational flows in a bot built on the Azure Bot Framework. msbot-component msbot-content conversationalcore helpintent cancelintent preview - + diff --git a/packages/HelpAndCancel/package.json b/packages/HelpAndCancel/package.json index 72ba223afc..e66581ac6f 100644 --- a/packages/HelpAndCancel/package.json +++ b/packages/HelpAndCancel/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/bot-components-helpandcancel", - "version": "1.0.0", + "version": "1.1.1", "description": "Contains Adaptive Dialog assets to support Help and Cancel conversational flows in a bot built on the Azure Bot Framework.", "keywords": [ "microsoft", @@ -21,6 +21,6 @@ "url": "https://github.com/Microsoft/botframework-components.git" }, "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"No test specified for package \\\"@microsoft/bot-components-helpandcancel\\\", skipping.\"" } } diff --git a/packages/Teams/dotnet/Actions/GetMeetingInfo.cs b/packages/Teams/dotnet/Actions/GetMeetingInfo.cs new file mode 100644 index 0000000000..a95eaa52a5 --- /dev/null +++ b/packages/Teams/dotnet/Actions/GetMeetingInfo.cs @@ -0,0 +1,104 @@ +// Licensed under the MIT License. +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Runtime.CompilerServices; +using System.Threading; +using System.Threading.Tasks; +using AdaptiveExpressions.Properties; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Builder.Teams; +using Microsoft.Bot.Connector; +using Newtonsoft.Json; + +namespace Microsoft.Bot.Components.Teams.Actions +{ + /// + /// Calls TeamsInfo.GetMeetingInfoAsync and sets the result to a memory property. + /// + public class GetMeetingInfo : Dialog + { + /// + /// Class identifier. + /// + [JsonProperty("$kind")] + public const string Kind = "Teams.GetMeetingInfo"; + + /// + /// Initializes a new instance of the class. + /// + /// Optional, source file full path. + /// Optional, line number in source file. + [JsonConstructor] + public GetMeetingInfo([CallerFilePath] string callerPath = "", [CallerLineNumber] int callerLine = 0) + : base() + { + RegisterSourceLocation(callerPath, callerLine); + } + + /// + /// Gets or sets an optional expression which if is true will disable this action. + /// + /// + /// "user.age > 18". + /// + /// + /// A boolean expression. + /// + [JsonProperty("disabled")] + public BoolExpression Disabled { get; set; } + + /// + /// Gets or sets property path to put the value in. + /// + /// + /// Property path to put the value in. + /// + [JsonProperty("property")] + public StringExpression Property { get; set; } + + /// + /// Gets or sets the expression to get the value to use for meeting id. + /// + /// + /// The expression to get the value to use for meeting id. Default value is turn.activity.channelData.meeting.id. + /// + [JsonProperty("meetingId")] + public StringExpression MeetingId { get; set; } = "=turn.activity.channelData.meeting.id"; + + /// + public override async Task BeginDialogAsync(DialogContext dc, object options = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (options is CancellationToken) + { + throw new ArgumentException($"{nameof(options)} cannot be a cancellation token"); + } + + if (Disabled != null && Disabled.GetValue(dc.State)) + { + return await dc.EndDialogAsync(cancellationToken: cancellationToken).ConfigureAwait(false); + } + + if (dc.Context.Activity.ChannelId != Channels.Msteams) + { + throw new InvalidOperationException($"{Kind} works only on the Teams channel."); + } + + string meetingId = MeetingId.GetValueOrNull(dc.State); + var result = await TeamsInfo.GetMeetingInfoAsync(dc.Context, meetingId, cancellationToken: cancellationToken).ConfigureAwait(false); + + if (Property != null) + { + dc.State.SetValue(Property.GetValue(dc.State), result); + } + + return await dc.EndDialogAsync(result, cancellationToken: cancellationToken).ConfigureAwait(false); + } + + /// + protected override string OnComputeId() + { + return $"{GetType().Name}[{MeetingId?.ToString() ?? string.Empty},{Property?.ToString() ?? string.Empty}]"; + } + } +} diff --git a/packages/Teams/dotnet/Actions/SendMessageToTeamsChannel.cs b/packages/Teams/dotnet/Actions/SendMessageToTeamsChannel.cs index 912b8beecf..9f65d59452 100644 --- a/packages/Teams/dotnet/Actions/SendMessageToTeamsChannel.cs +++ b/packages/Teams/dotnet/Actions/SendMessageToTeamsChannel.cs @@ -2,7 +2,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. using System; +using System.Linq; using System.Runtime.CompilerServices; +using System.Security.Claims; using System.Threading; using System.Threading.Tasks; using AdaptiveExpressions.Properties; @@ -118,23 +120,52 @@ public SendMessageToTeamsChannel([CallerFilePath] string callerPath = "", [Calle teamsChannelId = dc.Context.Activity.TeamsGetChannelId(); } - if (!(dc.Context.Adapter is BotFrameworkAdapter)) + Tuple result; + + // Check for legacy adapter + if (dc.Context.Adapter is BotFrameworkAdapter) + { + // TeamsInfo.SendMessageToTeamsChannelAsync requires AppCredentials + var credentials = dc.Context.TurnState.Get()?.Credentials as MicrosoftAppCredentials; + if (credentials == null) + { + throw new InvalidOperationException($"Missing credentials as {nameof(MicrosoftAppCredentials)} in {nameof(IConnectorClient)} from TurnState"); + } + + // The result comes back as a tuple, which is used to set the two properties (if present). + result = await TeamsInfo.SendMessageToTeamsChannelAsync(dc.Context, activity, teamsChannelId, credentials, cancellationToken: cancellationToken).ConfigureAwait(false); + } + else if (dc.Context.Adapter is CloudAdapterBase) { - throw new InvalidOperationException($"{Kind} is not supported by the current adapter."); + // Retrieve the bot appid from TurnState's ClaimsIdentity + string appId; + if (dc.Context.TurnState.Get(BotAdapter.BotIdentityKey) is ClaimsIdentity botIdentity) + { + // Apparently 'version' is sometimes empty, which will result in no id returned from GetAppIdFromClaims + appId = JwtTokenValidation.GetAppIdFromClaims(botIdentity.Claims); + if (string.IsNullOrEmpty(appId)) + { + appId = botIdentity.Claims.FirstOrDefault(claim => claim.Type == AuthenticationConstants.AudienceClaim)?.Value; + } + + if (string.IsNullOrEmpty(appId)) + { + throw new InvalidOperationException($"Missing AppIdClaim in ClaimsIdentity."); + } + } + else + { + throw new InvalidOperationException($"Missing {BotAdapter.BotIdentityKey} in {nameof(ITurnContext)} TurnState."); + } + + // The result comes back as a tuple, which is used to set the two properties (if present). + result = await TeamsInfo.SendMessageToTeamsChannelAsync(dc.Context, activity, teamsChannelId, appId, cancellationToken: cancellationToken).ConfigureAwait(false); } - - // TODO: this will NOT work with certificate app credentials - - // TeamsInfo.SendMessageToTeamsChannelAsync requires AppCredentials - var credentials = dc.Context.TurnState.Get()?.Credentials as MicrosoftAppCredentials; - if (credentials == null) + else { - throw new InvalidOperationException($"Missing credentials as {nameof(MicrosoftAppCredentials)} in {nameof(IConnectorClient)} from TurnState"); + throw new InvalidOperationException($"The adapter does not support {nameof(SendMessageToTeamsChannel)}."); } - // The result comes back as a tuple, which is used to set the two properties (if present). - var result = await TeamsInfo.SendMessageToTeamsChannelAsync(dc.Context, activity, teamsChannelId, credentials, cancellationToken: cancellationToken).ConfigureAwait(false); - if (ConversationReferenceProperty != null) { dc.State.SetValue(ConversationReferenceProperty.GetValue(dc.State), result.Item1); diff --git a/packages/Teams/dotnet/Microsoft.Bot.Components.Teams.csproj b/packages/Teams/dotnet/Microsoft.Bot.Components.Teams.csproj index d333f2f004..9533cc0562 100644 --- a/packages/Teams/dotnet/Microsoft.Bot.Components.Teams.csproj +++ b/packages/Teams/dotnet/Microsoft.Bot.Components.Teams.csproj @@ -3,7 +3,7 @@ netstandard2.0 Microsoft.Bot.Components.Teams - 1.0.0 + 1.1.1 This library implements .NET support for adaptive dialogs with Microsoft Teams This library implements .NET support for adaptive dialogs with Microsoft Teams https://github.com/Microsoft/botframework-components/tree/main/packages/Teams/dotnet @@ -35,7 +35,7 @@ - + diff --git a/packages/Teams/dotnet/Schemas/Actions/Teams.GetMeetingInfo.schema b/packages/Teams/dotnet/Schemas/Actions/Teams.GetMeetingInfo.schema new file mode 100644 index 0000000000..39d3fedb45 --- /dev/null +++ b/packages/Teams/dotnet/Schemas/Actions/Teams.GetMeetingInfo.schema @@ -0,0 +1,38 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema", + "$role": "implements(Microsoft.IDialog)", + "title": "Get meeting information", + "description": "Get teams meeting information.", + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "property": { + "$ref": "schema:#/definitions/stringExpression", + "title": "Property", + "description": "Property (named location to store information).", + "examples": [ + "dialog.meetingInfo" + ] + }, + "meetingId": { + "$ref": "schema:#/definitions/stringExpression", + "title": "Meeting id", + "description": "Meeting Id or expression to a meetingId to use to get the meeting information. Default value is the current turn.activity.channelData.meeting.id.", + "examples": [ + "=turn.activity.channelData.meeting.id" + ] + }, + "disabled": { + "$ref": "schema:#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "=user.age > 3" + ] + } + } +} \ No newline at end of file diff --git a/packages/Teams/dotnet/Schemas/Actions/Teams.GetMeetingInfo.uischema b/packages/Teams/dotnet/Schemas/Actions/Teams.GetMeetingInfo.uischema new file mode 100644 index 0000000000..9f79a1de99 --- /dev/null +++ b/packages/Teams/dotnet/Schemas/Actions/Teams.GetMeetingInfo.uischema @@ -0,0 +1,6 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema", + "menu": { + "submenu": ["Microsoft Teams", "Get Teams Info"] + } +} \ No newline at end of file diff --git a/packages/Teams/dotnet/Schemas/TriggerConditions/Teams.OnMeetingEnd.schema b/packages/Teams/dotnet/Schemas/TriggerConditions/Teams.OnMeetingEnd.schema new file mode 100644 index 0000000000..e339419fb0 --- /dev/null +++ b/packages/Teams/dotnet/Schemas/TriggerConditions/Teams.OnMeetingEnd.schema @@ -0,0 +1,9 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema", + "$role": [ "implements(Microsoft.ITrigger)", "extends(Microsoft.OnCondition)" ], + "title": "On meeting end", + "description": "Actions triggered when a Teams Meeting is ended", + "type": "object", + "required": [ + ] +} diff --git a/packages/Teams/dotnet/Schemas/TriggerConditions/Teams.OnMeetingEnd.uischema b/packages/Teams/dotnet/Schemas/TriggerConditions/Teams.OnMeetingEnd.uischema new file mode 100644 index 0000000000..98cfcc870a --- /dev/null +++ b/packages/Teams/dotnet/Schemas/TriggerConditions/Teams.OnMeetingEnd.uischema @@ -0,0 +1,7 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema", + "trigger": { + "submenu": "Microsoft Teams", + "label": "On meeting end" + } +} diff --git a/packages/Teams/dotnet/Schemas/TriggerConditions/Teams.OnMeetingStart.schema b/packages/Teams/dotnet/Schemas/TriggerConditions/Teams.OnMeetingStart.schema new file mode 100644 index 0000000000..e30ddfff41 --- /dev/null +++ b/packages/Teams/dotnet/Schemas/TriggerConditions/Teams.OnMeetingStart.schema @@ -0,0 +1,9 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema", + "$role": [ "implements(Microsoft.ITrigger)", "extends(Microsoft.OnCondition)" ], + "title": "On meeting start", + "description": "Actions triggered when a Teams Meeting is started", + "type": "object", + "required": [ + ] +} diff --git a/packages/Teams/dotnet/Schemas/TriggerConditions/Teams.OnMeetingStart.uischema b/packages/Teams/dotnet/Schemas/TriggerConditions/Teams.OnMeetingStart.uischema new file mode 100644 index 0000000000..440af4b889 --- /dev/null +++ b/packages/Teams/dotnet/Schemas/TriggerConditions/Teams.OnMeetingStart.uischema @@ -0,0 +1,7 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema", + "trigger": { + "submenu": "Microsoft Teams", + "label": "On meeting start" + } +} diff --git a/packages/Teams/dotnet/TeamsBotComponent.cs b/packages/Teams/dotnet/TeamsBotComponent.cs index cf2cd3cc6e..1eb4cef0aa 100644 --- a/packages/Teams/dotnet/TeamsBotComponent.cs +++ b/packages/Teams/dotnet/TeamsBotComponent.cs @@ -42,6 +42,8 @@ public override void ConfigureServices(IServiceCollection services, IConfigurati services.AddSingleton(sp => new DeclarativeType(OnTeamsChannelRenamed.Kind)); services.AddSingleton(sp => new DeclarativeType(OnTeamsChannelRestored.Kind)); services.AddSingleton(sp => new DeclarativeType(OnTeamsFileConsent.Kind)); + services.AddSingleton(sp => new DeclarativeType(OnTeamsMeetingStart.Kind)); + services.AddSingleton(sp => new DeclarativeType(OnTeamsMeetingEnd.Kind)); services.AddSingleton(sp => new DeclarativeType(OnTeamsMECardButtonClicked.Kind)); services.AddSingleton(sp => new DeclarativeType(OnTeamsMEConfigQuerySettingUrl.Kind)); @@ -68,6 +70,7 @@ public override void ConfigureServices(IServiceCollection services, IConfigurati // Actions + services.AddSingleton(sp => new DeclarativeType(GetMeetingInfo.Kind)); services.AddSingleton(sp => new DeclarativeType(GetMeetingParticipant.Kind)); services.AddSingleton(sp => new DeclarativeType(GetMember.Kind)); services.AddSingleton(sp => new DeclarativeType(GetPagedMembers.Kind)); diff --git a/packages/Teams/dotnet/TriggerConditions/OnTeamsMeetingEnd.cs b/packages/Teams/dotnet/TriggerConditions/OnTeamsMeetingEnd.cs new file mode 100644 index 0000000000..c99285ab01 --- /dev/null +++ b/packages/Teams/dotnet/TriggerConditions/OnTeamsMeetingEnd.cs @@ -0,0 +1,37 @@ +// Licensed under the MIT License. +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using AdaptiveExpressions; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Builder.Dialogs.Adaptive.Conditions; +using Microsoft.Bot.Connector; +using Newtonsoft.Json; + +namespace Microsoft.Bot.Components.Teams.Conditions +{ + /// + /// Actions triggered when a Teams Meeting End event is received. + /// + /// + /// turn.activity.value has meeting data. + /// + public class OnTeamsMeetingEnd : OnEventActivity + { + [JsonProperty("$kind")] + public new const string Kind = "Teams.OnMeetingEnd"; + + [JsonConstructor] + public OnTeamsMeetingEnd(List actions = null, string condition = null, [CallerFilePath] string callerPath = "", [CallerLineNumber] int callerLine = 0) + : base(actions: actions, condition: condition, callerPath: callerPath, callerLine: callerLine) + { + } + + /// + protected override Expression CreateExpression() + { + return Expression.AndExpression(Expression.Parse($"{TurnPath.Activity}.channelId == '{Channels.Msteams}' && {TurnPath.Activity}.name == 'application/vnd.microsoft.meetingEnd'"), base.CreateExpression()); + } + } +} diff --git a/packages/Teams/dotnet/TriggerConditions/OnTeamsMeetingStart.cs b/packages/Teams/dotnet/TriggerConditions/OnTeamsMeetingStart.cs new file mode 100644 index 0000000000..921f0a58d4 --- /dev/null +++ b/packages/Teams/dotnet/TriggerConditions/OnTeamsMeetingStart.cs @@ -0,0 +1,37 @@ +// Licensed under the MIT License. +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using AdaptiveExpressions; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Builder.Dialogs.Adaptive.Conditions; +using Microsoft.Bot.Connector; +using Newtonsoft.Json; + +namespace Microsoft.Bot.Components.Teams.Conditions +{ + /// + /// Actions triggered when a Teams Meeting Start event is received. + /// + /// + /// turn.activity.value has meeting data. + /// + public class OnTeamsMeetingStart : OnEventActivity + { + [JsonProperty("$kind")] + public new const string Kind = "Teams.OnMeetingStart"; + + [JsonConstructor] + public OnTeamsMeetingStart(List actions = null, string condition = null, [CallerFilePath] string callerPath = "", [CallerLineNumber] int callerLine = 0) + : base(actions: actions, condition: condition, callerPath: callerPath, callerLine: callerLine) + { + } + + /// + protected override Expression CreateExpression() + { + return Expression.AndExpression(Expression.Parse($"{TurnPath.Activity}.channelId == '{Channels.Msteams}' && {TurnPath.Activity}.name == 'application/vnd.microsoft.meetingStart'"), base.CreateExpression()); + } + } +} diff --git a/packages/Teams/js/package.json b/packages/Teams/js/package.json index 3dafdda466..38e4518849 100644 --- a/packages/Teams/js/package.json +++ b/packages/Teams/js/package.json @@ -2,7 +2,7 @@ "name": "@microsoft/bot-components-teams", "author": "Microsoft Corp.", "description": "Rule system for the Microsoft BotBuilder adaptive dialog system, with integration specific to Microsoft Teams.", - "version": "1.0.0", + "version": "1.1.1", "license": "MIT", "keywords": [ "msbot-component", @@ -29,28 +29,31 @@ "main": "lib/index.js", "types": "lib/index.d.ts", "peerDependencies": { - "adaptive-expressions": "~4.13.4", - "botbuilder": "~4.13.4", - "botbuilder-dialogs": "~4.13.4", - "botbuilder-dialogs-adaptive": "~4.13.4-preview", - "botbuilder-dialogs-adaptive-runtime-core": "~4.13.4-preview", - "botbuilder-dialogs-declarative": "~4.13.4-preview", - "botbuilder-stdlib": "~4.13.4-internal", + "adaptive-expressions": "~4.14.0", + "botbuilder": "~4.14.0", + "botbuilder-dialogs": "~4.14.0", + "botbuilder-dialogs-adaptive": "~4.14.0-preview", + "botbuilder-dialogs-adaptive-runtime-core": "~4.14.0-preview", + "botbuilder-dialogs-declarative": "~4.14.0-preview", + "botbuilder-stdlib": "~4.14.0-internal", + "botframework-connector": "~4.14.0", "lodash": "^4.17.21" }, "devDependencies": { "@tsconfig/recommended": "^1.0.1", "@types/lodash": "^4.14.168", - "@typescript-eslint/eslint-plugin": "latest", - "@typescript-eslint/parser": "latest", - "adaptive-expressions": "4.13.4", - "botbuilder": "4.13.4", - "botbuilder-dialogs": "4.13.4", - "botbuilder-dialogs-adaptive": "4.13.4-preview", - "botbuilder-dialogs-adaptive-runtime-core": "4.13.4-preview", - "botbuilder-dialogs-declarative": "4.13.4-preview", - "botbuilder-stdlib": "4.13.4-internal", - "eslint": "latest", + "@typescript-eslint/eslint-plugin": "^4.28.2", + "@typescript-eslint/parser": "^4.28.2", + "adaptive-expressions": "4.14.0", + "botbuilder": "4.14.0", + "botbuilder-dialogs": "4.14.0", + "botbuilder-dialogs-adaptive": "4.14.0-preview", + "botbuilder-dialogs-adaptive-runtime-core": "4.14.0-preview", + "botbuilder-dialogs-declarative": "4.14.0-preview", + "botbuilder-stdlib": "4.14.0-internal", + "botframework-connector": "4.14.0", + "eslint": "^7.30.0", + "eslint-plugin-prettier": "latest", "lodash": "^4.17.21", "rimraf": "^3.0.2", "typescript": "^4.0.5" diff --git a/packages/Teams/js/schemas/Actions/Teams.GetMeetingInfo.schema b/packages/Teams/js/schemas/Actions/Teams.GetMeetingInfo.schema new file mode 100644 index 0000000000..39d3fedb45 --- /dev/null +++ b/packages/Teams/js/schemas/Actions/Teams.GetMeetingInfo.schema @@ -0,0 +1,38 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema", + "$role": "implements(Microsoft.IDialog)", + "title": "Get meeting information", + "description": "Get teams meeting information.", + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "property": { + "$ref": "schema:#/definitions/stringExpression", + "title": "Property", + "description": "Property (named location to store information).", + "examples": [ + "dialog.meetingInfo" + ] + }, + "meetingId": { + "$ref": "schema:#/definitions/stringExpression", + "title": "Meeting id", + "description": "Meeting Id or expression to a meetingId to use to get the meeting information. Default value is the current turn.activity.channelData.meeting.id.", + "examples": [ + "=turn.activity.channelData.meeting.id" + ] + }, + "disabled": { + "$ref": "schema:#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "=user.age > 3" + ] + } + } +} \ No newline at end of file diff --git a/packages/Teams/js/schemas/Actions/Teams.GetMeetingInfo.uischema b/packages/Teams/js/schemas/Actions/Teams.GetMeetingInfo.uischema new file mode 100644 index 0000000000..9f79a1de99 --- /dev/null +++ b/packages/Teams/js/schemas/Actions/Teams.GetMeetingInfo.uischema @@ -0,0 +1,6 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema", + "menu": { + "submenu": ["Microsoft Teams", "Get Teams Info"] + } +} \ No newline at end of file diff --git a/packages/Teams/js/schemas/TriggerConditions/Teams.OnMeetingEnd.schema b/packages/Teams/js/schemas/TriggerConditions/Teams.OnMeetingEnd.schema new file mode 100644 index 0000000000..e339419fb0 --- /dev/null +++ b/packages/Teams/js/schemas/TriggerConditions/Teams.OnMeetingEnd.schema @@ -0,0 +1,9 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema", + "$role": [ "implements(Microsoft.ITrigger)", "extends(Microsoft.OnCondition)" ], + "title": "On meeting end", + "description": "Actions triggered when a Teams Meeting is ended", + "type": "object", + "required": [ + ] +} diff --git a/packages/Teams/js/schemas/TriggerConditions/Teams.OnMeetingEnd.uischema b/packages/Teams/js/schemas/TriggerConditions/Teams.OnMeetingEnd.uischema new file mode 100644 index 0000000000..98cfcc870a --- /dev/null +++ b/packages/Teams/js/schemas/TriggerConditions/Teams.OnMeetingEnd.uischema @@ -0,0 +1,7 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema", + "trigger": { + "submenu": "Microsoft Teams", + "label": "On meeting end" + } +} diff --git a/packages/Teams/js/schemas/TriggerConditions/Teams.OnMeetingStart.schema b/packages/Teams/js/schemas/TriggerConditions/Teams.OnMeetingStart.schema new file mode 100644 index 0000000000..e30ddfff41 --- /dev/null +++ b/packages/Teams/js/schemas/TriggerConditions/Teams.OnMeetingStart.schema @@ -0,0 +1,9 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema", + "$role": [ "implements(Microsoft.ITrigger)", "extends(Microsoft.OnCondition)" ], + "title": "On meeting start", + "description": "Actions triggered when a Teams Meeting is started", + "type": "object", + "required": [ + ] +} diff --git a/packages/Teams/js/schemas/TriggerConditions/Teams.OnMeetingStart.uischema b/packages/Teams/js/schemas/TriggerConditions/Teams.OnMeetingStart.uischema new file mode 100644 index 0000000000..440af4b889 --- /dev/null +++ b/packages/Teams/js/schemas/TriggerConditions/Teams.OnMeetingStart.uischema @@ -0,0 +1,7 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema", + "trigger": { + "submenu": "Microsoft Teams", + "label": "On meeting start" + } +} diff --git a/packages/Teams/js/src/actions/actionHelpers.ts b/packages/Teams/js/src/actions/actionHelpers.ts index 60e118e449..32dfc8fe38 100644 --- a/packages/Teams/js/src/actions/actionHelpers.ts +++ b/packages/Teams/js/src/actions/actionHelpers.ts @@ -35,10 +35,10 @@ export function getValue( * BotFrameworkAdapter and TestAdapter contain them, so we just need to make sure that dc.context.adapter contains * an adapter with the appropriate auth methods. */ -export interface HasAuthMethods { - getUserToken: typeof BotFrameworkAdapter.prototype.getUserToken; - getSignInLink: typeof BotFrameworkAdapter.prototype.getSignInLink; -} +export type HasAuthMethods = Pick< + BotFrameworkAdapter, + 'getUserToken' | 'getSignInLink' +>; /** * Test to assert val has required auth methods. @@ -55,3 +55,27 @@ export const testAdapterHasAuthMethods: Test = ( tests.isFunc((val as BotFrameworkAdapter).getSignInLink)) ); }; + +/** + * This is similar to HasAuthMethods, but purely for testing since TestAdapter does not have + * createConnectorClient, but BotFrameworkAdapter does. + */ +export type HasCreateConnectorClientMethod = Pick< + BotFrameworkAdapter, + 'createConnectorClient' +>; + +/** + * Test to assert val has required createConnectorClient method. + * + * @param {any} val Usually context.adapter. + * @returns {Assertion} Asserts that val has required createConnectorClient method. + */ +export const testAdapterHasCreateConnectorClientMethod: Test = ( + val: unknown +): val is HasCreateConnectorClientMethod => { + return ( + val instanceof BotFrameworkAdapter || + tests.isFunc((val as BotFrameworkAdapter).createConnectorClient) + ); +}; diff --git a/packages/Teams/js/src/actions/baseAuthResponseDialog.ts b/packages/Teams/js/src/actions/baseAuthResponseDialog.ts index 9d9a5cfa88..e16eed86f4 100644 --- a/packages/Teams/js/src/actions/baseAuthResponseDialog.ts +++ b/packages/Teams/js/src/actions/baseAuthResponseDialog.ts @@ -2,7 +2,13 @@ // Licensed under the MIT License. import isEmpty from 'lodash/isEmpty'; -import { ActionTypes, Activity, CardAction, TokenResponse } from 'botbuilder'; +import { + ActionTypes, + Activity, + CardAction, + CloudAdapterBase, + TokenResponse, +} from 'botbuilder'; import { BoolExpressionConverter, Expression, @@ -22,6 +28,7 @@ import { BaseTeamsCacheInfoResponseDialog, BaseTeamsCacheInfoResponseDialogConfiguration, } from './baseTeamsCacheInfoResponseDialog'; +import { UserTokenClient } from 'botframework-connector'; export interface BaseAuthResponseDialogConfiguration extends BaseTeamsCacheInfoResponseDialogConfiguration { @@ -98,8 +105,8 @@ export abstract class BaseAuthResponseDialog if (tokenResponse) { // We have the token, so the user is already signed in. // Similar to OAuthInput, just return the token in the property. - if (this.property != null) { - dc.state.setValue(this.property?.getValue(dc.state), tokenResponse); + if (this.property) { + dc.state.setValue(this.property.getValue(dc.state), tokenResponse); } // End the dialog and return the token response. @@ -125,19 +132,32 @@ export abstract class BaseAuthResponseDialog * @param {CardAction} _cardAction CardAction with a valid Sign In Link. * @returns {Partial} Promise representing the InvokeResponse Activity specific to this type of auth dialog. */ - protected createOAuthInvokeResponseActivityFromCardAction( + protected abstract createOAuthInvokeResponseActivityFromCardAction( _dc: DialogContext, _cardAction: CardAction - ): Partial { - throw new Error('NotImplemented'); - } + ): Partial; private async createOAuthInvokeResponseActivityFromTitleAndConnectionName( dc: DialogContext, - title?: string, - connectionName?: string + title: string, + connectionName: string ): Promise> { - // TODO: Switch to using Cloud OAuth after this PR gets merged: https://github.com/microsoft/botbuilder-js/pull/3149 + const userTokenClient = dc.context.turnState.get( + (dc.context.adapter as CloudAdapterBase).UserTokenClientKey + ); + if (userTokenClient) { + const signInResource = await userTokenClient.getSignInResource( + connectionName, + dc.context.activity, + '' + ); + return this.createOAuthInvokeResponseActivityFromTitleAndSignInLink( + dc, + title, + signInResource.signInLink as string + ); + } + if (!testAdapterHasAuthMethods(dc.context.adapter)) { throw new Error('Auth is not supported by the current adapter.'); } else if (!title || !connectionName) { @@ -176,13 +196,27 @@ export abstract class BaseAuthResponseDialog dc: DialogContext, connectionName: string ): Promise { - // TODO: Switch to using Cloud OAuth after this PR gets merged: https://github.com/microsoft/botbuilder-js/pull/3149 + // When the Bot Service Auth flow completes, the action.State will contain a magic code used for verification. + const state = dc.context.activity.value?.state; + + const userTokenClient = dc.context.turnState.get( + (dc.context.adapter as CloudAdapterBase).UserTokenClientKey + ); + if (userTokenClient) { + return userTokenClient.getUserToken( + dc.context.activity.from?.id, + connectionName, + dc.context.activity.channelId, + state + ); + } + if (!testAdapterHasAuthMethods(dc.context.adapter)) { throw new Error('Auth is not supported by the current adapter.'); } // When the Bot Service Auth flow completes, the action.State will contain a magic code used for verification. - const magicCode = !isEmpty(dc.context.activity?.value) + const magicCode = !isEmpty(dc.context.activity.value) ? dc.context.activity.value.state : undefined; diff --git a/packages/Teams/js/src/actions/getMeetingInfo.ts b/packages/Teams/js/src/actions/getMeetingInfo.ts new file mode 100644 index 0000000000..dcdd7b77e3 --- /dev/null +++ b/packages/Teams/js/src/actions/getMeetingInfo.ts @@ -0,0 +1,119 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { + BoolExpression, + BoolExpressionConverter, + Expression, + StringExpression, + StringExpressionConverter, +} from 'adaptive-expressions'; +import { Channels, TeamsInfo } from 'botbuilder'; +import { + Converter, + ConverterFactory, + Dialog, + DialogConfiguration, + DialogContext, + DialogTurnResult, +} from 'botbuilder-dialogs'; +import { getValue } from './actionHelpers'; + +export interface GetMeetingInfoConfiguration extends DialogConfiguration { + disabled?: boolean | string | BoolExpression; + property?: string | Expression | StringExpression; + meetingId?: string | Expression | StringExpression; +} + +/** + * Calls `TeamsInfo.getMeetingInfo` and sets the result to a memory property. + */ +export class GetMeetingInfo + extends Dialog + implements GetMeetingInfoConfiguration { + /** + * Class identifier. + */ + static $kind = 'Teams.GetMeetingInfo'; + + /** + * Gets or sets an optional expression which if is true will disable this action. + * + * @example + * "user.age > 18". + */ + public disabled?: BoolExpression; + + /** + * Gets or sets property path to put the value in. + */ + public property?: StringExpression; + + /** + * Gets or sets the expression to get the value to use for meeting id. + * + * @default + * =turn.activity.channelData.meeting.id + */ + public meetingId = new StringExpression( + '=turn.activity.channelData.meeting.id' + ); + + public getConverter( + property: keyof GetMeetingInfoConfiguration + ): Converter | ConverterFactory { + switch (property) { + case 'disabled': + return new BoolExpressionConverter(); + case 'property': + case 'meetingId': + return new StringExpressionConverter(); + default: + return super.getConverter(property); + } + } + + /** + * Called when the dialog is started and pushed onto the dialog stack. + * + * @param {DialogContext} dc The [DialogContext](xref:botbuilder-dialogs.DialogContext) for the current turn of conversation. + * @param {object} _options Optional, initial information to pass to the dialog. + * @returns {Promise} A promise representing the asynchronous operation. + */ + public async beginDialog( + dc: DialogContext, + _options?: Record + ): Promise { + if (this.disabled?.getValue(dc.state)) { + return dc.endDialog(); + } + + if (dc.context.activity.channelId !== Channels.Msteams) { + throw new Error( + `${GetMeetingInfo.$kind} works only on the Teams channel.` + ); + } + + const meetingId = getValue(dc, this.meetingId); + + const result = await TeamsInfo.getMeetingInfo(dc.context, meetingId); + + if (this.property != null) { + dc.state.setValue(this.property.getValue(dc.state), result); + } + + return dc.endDialog(result); + } + + /** + * Builds the compute Id for the dialog. + * + * @returns {string} A string representing the compute Id. + */ + protected onComputeId(): string { + return `GetMeetingInfo[\ + ${this.meetingId ?? ''},\ + ${this.property?.toString() ?? ''}\ + ]`; + } +} diff --git a/packages/Teams/js/src/actions/index.ts b/packages/Teams/js/src/actions/index.ts index 30897cccdb..c131adaa4a 100644 --- a/packages/Teams/js/src/actions/index.ts +++ b/packages/Teams/js/src/actions/index.ts @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. +export * from './getMeetingInfo'; export * from './getMeetingParticipant'; export * from './getMember'; export * from './getPagedMembers'; diff --git a/packages/Teams/js/src/actions/sendMessageToTeamsChannel.ts b/packages/Teams/js/src/actions/sendMessageToTeamsChannel.ts index 6f0546054b..54d6a17cbc 100644 --- a/packages/Teams/js/src/actions/sendMessageToTeamsChannel.ts +++ b/packages/Teams/js/src/actions/sendMessageToTeamsChannel.ts @@ -8,7 +8,13 @@ import { StringExpression, StringExpressionConverter, } from 'adaptive-expressions'; -import { Activity, Channels, TeamsInfo } from 'botbuilder'; +import { + Activity, + Channels, + CloudAdapterBase, + ConversationReference, + TeamsInfo, +} from 'botbuilder'; import { Converter, ConverterFactory, @@ -19,8 +25,17 @@ import { DialogTurnResult, TemplateInterface, } from 'botbuilder-dialogs'; +import { + AuthenticationConstants, + ClaimsIdentity, + ConnectorClient, + JwtTokenValidation, +} from 'botframework-connector'; import { ActivityTemplateConverter } from 'botbuilder-dialogs-adaptive/lib/converters'; -import { getValue } from './actionHelpers'; +import { + getValue, + testAdapterHasCreateConnectorClientMethod, +} from './actionHelpers'; export interface SendMessageToTeamsChannelConfiguration extends DialogConfiguration { @@ -124,11 +139,58 @@ export class SendMessageToTeamsChannel getValue(dc, this.teamsChannelId) ?? dc.context?.activity.channelData?.channel?.id; - const result = await TeamsInfo.sendMessageToTeamsChannel( - dc.context, - activity, - teamsChannelId - ); + let result: [ConversationReference, string]; + + // Check for legacy adapter + if (testAdapterHasCreateConnectorClientMethod(dc.context.adapter)) { + const credentials = dc.context.turnState.get( + dc.context.adapter.ConnectorClientKey + )?.credentials; + if (!credentials) { + throw new Error( + 'Missing credentials as MicrosoftAppCredentials in ConnectorClient from TurnState' + ); + } + + result = await TeamsInfo.sendMessageToTeamsChannel( + dc.context, + activity, + teamsChannelId + ); + } else if (dc.context.adapter instanceof CloudAdapterBase) { + const botIdentity = dc.context.turnState.get( + dc.context.adapter.BotIdentityKey + ); + + let appId: string | undefined; + if (botIdentity) { + // 'version' is sometimes empty, which will result in no id returned from GetAppIdFromClaims. + appId = JwtTokenValidation.getAppIdFromClaims(botIdentity.claims); + + if (!appId) { + appId = botIdentity.claims.find( + (claim) => claim.type === AuthenticationConstants.AudienceClaim + )?.value; + } + + if (!appId) { + throw new Error('Missing AppIdClaim in ClaimsIdentity'); + } + } else { + throw new Error( + 'Missing dc.context.adapter.BotIdentityKey in TurnContext TurnState' + ); + } + + result = await TeamsInfo.sendMessageToTeamsChannel( + dc.context, + activity, + teamsChannelId, + appId + ); + } else { + throw new Error('The adapter does not support SendMessageToTeamsChannel'); + } if (this.conversationReferenceProperty != null) { dc.state.setValue( diff --git a/packages/Teams/js/src/actions/sendTabCardResponse.ts b/packages/Teams/js/src/actions/sendTabCardResponse.ts index a4f83ba764..641b59365e 100644 --- a/packages/Teams/js/src/actions/sendTabCardResponse.ts +++ b/packages/Teams/js/src/actions/sendTabCardResponse.ts @@ -2,6 +2,7 @@ // Licensed under the MIT License. import { + BoolExpression, BoolExpressionConverter, StringExpressionConverter, } from 'adaptive-expressions'; @@ -16,47 +17,45 @@ import { import { Converter, ConverterFactory, + Dialog, DialogContext, DialogStateManager, DialogTurnResult, TemplateInterface, } from 'botbuilder-dialogs'; import { ActivityTemplateConverter } from 'botbuilder-dialogs-adaptive/lib/converters'; -import { - BaseAuthResponseDialog, - BaseAuthResponseDialogConfiguration, -} from './baseAuthResponseDialog'; -export interface SendTabCardResponseConfiguration - extends BaseAuthResponseDialogConfiguration { +export interface SendTabCardResponseConfiguration extends Dialog { cards?: TemplateInterface; + disabled?: boolean | string | BoolExpression; } /** * Send a Card Tab response to the user. */ -export class SendTabCardResponse - extends BaseAuthResponseDialog - implements BaseAuthResponseDialogConfiguration { +export class SendTabCardResponse extends Dialog { /** * Class identifier. */ public static $kind = 'Teams.SendTabCardResponse'; + /** + * Gets or sets an optional expression which if is true will disable this action. + */ + public disabled?: BoolExpression; + /** * Template for the activity expression containing Adaptive Cards to send. */ public cards?: TemplateInterface; public getConverter( - property: keyof BaseAuthResponseDialogConfiguration | string + property: keyof Dialog | string ): Converter | ConverterFactory { switch (property) { case 'disabled': return new BoolExpressionConverter(); case 'property': - case 'connectionName': - case 'title': return new StringExpressionConverter(); case 'cards': return new ActivityTemplateConverter(); @@ -114,7 +113,7 @@ export class SendTabCardResponse */ protected onComputeId(): string { return `SendTabCardResponse[\ - ${this.title?.toString() ?? ''}\ + ${this.cards?.toString() ?? ''}\ ]`; } diff --git a/packages/Teams/js/src/adaptiveTeamsBotComponent.ts b/packages/Teams/js/src/adaptiveTeamsBotComponent.ts index 5a8ae0ad92..85f800e0ab 100644 --- a/packages/Teams/js/src/adaptiveTeamsBotComponent.ts +++ b/packages/Teams/js/src/adaptiveTeamsBotComponent.ts @@ -9,6 +9,7 @@ import { } from 'botbuilder-dialogs-adaptive-runtime-core'; import { + GetMeetingInfo, GetMeetingParticipant, GetMember, GetPagedMembers, @@ -40,12 +41,13 @@ import { OnTeamsChannelRenamed, OnTeamsChannelRestored, OnTeamsFileConsent, + OnTeamsMeetingStart, + OnTeamsMeetingEnd, OnTeamsMEBotMessagePreviewEdit, OnTeamsMEBotMessagePreviewSend, OnTeamsMECardButtonClicked, OnTeamsMEConfigQuerySettingUrl, OnTeamsMEConfigSetting, - OnTeamsMEConfigurationSetting, OnTeamsMEFetchTask, OnTeamsMEQuery, OnTeamsMESelectItem, @@ -75,6 +77,10 @@ export class AdaptiveTeamsBotComponent extends BotComponent { getDeclarativeTypes() { return [ // Actions + { + kind: GetMeetingInfo.$kind, + type: GetMeetingInfo, + }, { kind: GetMeetingParticipant.$kind, type: GetMeetingParticipant, @@ -153,6 +159,8 @@ export class AdaptiveTeamsBotComponent extends BotComponent { type: OnTeamsChannelRestored, }, { kind: OnTeamsFileConsent.$kind, type: OnTeamsFileConsent }, + { kind: OnTeamsMeetingStart.$kind, type: OnTeamsMeetingStart }, + { kind: OnTeamsMeetingEnd.$kind, type: OnTeamsMeetingEnd }, { kind: OnTeamsMEBotMessagePreviewEdit.$kind, type: OnTeamsMEBotMessagePreviewEdit, @@ -176,10 +184,6 @@ export class AdaptiveTeamsBotComponent extends BotComponent { { kind: OnTeamsMEFetchTask.$kind, type: OnTeamsMEFetchTask }, { kind: OnTeamsMEQuery.$kind, type: OnTeamsMEQuery }, { kind: OnTeamsMESelectItem.$kind, type: OnTeamsMESelectItem }, - { - kind: OnTeamsMEConfigurationSetting.$kind, - type: OnTeamsMEConfigurationSetting, - }, { kind: OnTeamsMESubmitAction.$kind, type: OnTeamsMESubmitAction, diff --git a/packages/Teams/js/src/conditions/index.ts b/packages/Teams/js/src/conditions/index.ts index 47dc788d5a..a2f7036f93 100644 --- a/packages/Teams/js/src/conditions/index.ts +++ b/packages/Teams/js/src/conditions/index.ts @@ -9,12 +9,13 @@ export * from './onTeamsChannelDeleted'; export * from './onTeamsChannelRenamed'; export * from './onTeamsChannelRestored'; export * from './onTeamsFileConsent'; +export * from './onTeamsMeetingStart'; +export * from './onTeamsMeetingEnd'; export * from './onTeamsMEBotMessagePreviewEdit'; export * from './onTeamsMEBotMessagePreviewSend'; export * from './onTeamsMECardButtonClicked'; export * from './onTeamsMEConfigQuerySettingUrl'; export * from './onTeamsMEConfigSetting'; -export * from './onTeamsMEConfigurationSetting'; export * from './onTeamsMEFetchTask'; export * from './onTeamsMEQuery'; export * from './onTeamsMESelectItem'; diff --git a/packages/Teams/js/src/conditions/onTeamsMEBotMessagePreviewSend.ts b/packages/Teams/js/src/conditions/onTeamsMEBotMessagePreviewSend.ts index bc21decd69..1675f3aadd 100644 --- a/packages/Teams/js/src/conditions/onTeamsMEBotMessagePreviewSend.ts +++ b/packages/Teams/js/src/conditions/onTeamsMEBotMessagePreviewSend.ts @@ -11,7 +11,7 @@ import { OnInvokeActivity } from 'botbuilder-dialogs-adaptive'; * and activity.value.botMessagePreviewAction == 'send'. */ export class OnTeamsMEBotMessagePreviewSend extends OnInvokeActivity { - static $kind = 'Teams.OnMEBotMessagePreviewEdit'; + static $kind = 'Teams.OnMEBotMessagePreviewSend'; public commandId?: string; diff --git a/packages/Teams/js/src/conditions/onTeamsMEConfigurationSetting.ts b/packages/Teams/js/src/conditions/onTeamsMeetingEnd.ts similarity index 63% rename from packages/Teams/js/src/conditions/onTeamsMEConfigurationSetting.ts rename to packages/Teams/js/src/conditions/onTeamsMeetingEnd.ts index 5987339a07..55e49c6c51 100644 --- a/packages/Teams/js/src/conditions/onTeamsMEConfigurationSetting.ts +++ b/packages/Teams/js/src/conditions/onTeamsMeetingEnd.ts @@ -4,13 +4,14 @@ import { Expression } from 'adaptive-expressions'; import { Channels } from 'botbuilder'; import { TurnPath } from 'botbuilder-dialogs'; -import { OnInvokeActivity } from 'botbuilder-dialogs-adaptive'; +import { OnEventActivity } from 'botbuilder-dialogs-adaptive'; /** - * Actions triggered when a Teams InvokeActivity is received with activity.name='composeExtension/setting'. + * Actions triggered when a Teams Meeting End event is received. + * Note: turn.activity.value has meeting data. */ -export class OnTeamsMEConfigurationSetting extends OnInvokeActivity { - static $kind = 'Teams.OnMEConfigurationSetting'; +export class OnTeamsMeetingEnd extends OnEventActivity { + static $kind = 'Teams.OnMeetingEnd'; /** * Create expression for this condition. @@ -20,7 +21,7 @@ export class OnTeamsMEConfigurationSetting extends OnInvokeActivity { protected createExpression(): Expression { return Expression.andExpression( Expression.parse( - `${TurnPath.activity}.channelId == '${Channels.Msteams}' && ${TurnPath.activity}.name == 'composeExtension/setting'` + `${TurnPath.activity}.channelId == '${Channels.Msteams}' && ${TurnPath.activity}.name == 'application/vnd.microsoft.meetingEnd'` ), super.createExpression() ); diff --git a/packages/Teams/js/src/conditions/onTeamsMeetingStart.ts b/packages/Teams/js/src/conditions/onTeamsMeetingStart.ts new file mode 100644 index 0000000000..c940d2d705 --- /dev/null +++ b/packages/Teams/js/src/conditions/onTeamsMeetingStart.ts @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { Expression } from 'adaptive-expressions'; +import { Channels } from 'botbuilder'; +import { TurnPath } from 'botbuilder-dialogs'; +import { OnEventActivity } from 'botbuilder-dialogs-adaptive'; + +/** + * Actions triggered when a Teams Meeting Start event is received. + * Note: turn.activity.value has meeting data. + */ +export class OnTeamsMeetingStart extends OnEventActivity { + static $kind = 'Teams.OnMeetingStart'; + + /** + * Create expression for this condition. + * + * @returns {Expression} An [Expression](xref:adaptive-expressions.Expression) used to evaluate this rule. + */ + protected createExpression(): Expression { + return Expression.andExpression( + Expression.parse( + `${TurnPath.activity}.channelId == '${Channels.Msteams}' && ${TurnPath.activity}.name == 'application/vnd.microsoft.meetingStart'` + ), + super.createExpression() + ); + } +} diff --git a/packages/Teams/js/src/index.ts b/packages/Teams/js/src/index.ts index dc1d9d0c69..8018bf5010 100644 --- a/packages/Teams/js/src/index.ts +++ b/packages/Teams/js/src/index.ts @@ -1,10 +1,12 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. +import { AdaptiveTeamsBotComponent } from './adaptiveTeamsBotComponent'; /** * @module @microsoft/bot-components-teams */ export * from './actions'; -export * from './adaptiveTeamsBotComponent'; +export { AdaptiveTeamsBotComponent }; export * from './conditions'; +export default AdaptiveTeamsBotComponent; diff --git a/packages/Welcome/Microsoft.Bot.Components.Welcome.nuspec b/packages/Welcome/Microsoft.Bot.Components.Welcome.nuspec index 43d5a1026d..e721b8650f 100644 --- a/packages/Welcome/Microsoft.Bot.Components.Welcome.nuspec +++ b/packages/Welcome/Microsoft.Bot.Components.Welcome.nuspec @@ -2,18 +2,18 @@ Microsoft.Bot.Components.Welcome - 1.0.0 + 1.1.1 Microsoft Microsoft © Microsoft Corporation. All rights reserved. - https://github.com/Microsoft/BotBuilder/blob/master/LICENSE + MIT true https://github.com/Microsoft/botframework-components/tree/main/packages/Welcome First version of welcome package An Adaptive Dialog for greeting new and returning users on first interaction with your bot built on the Azure Bot Framework. msbot-component msbot-content conversationalcore welcome preview - + diff --git a/packages/Welcome/package.json b/packages/Welcome/package.json index 1997adafb9..f7556f2c57 100644 --- a/packages/Welcome/package.json +++ b/packages/Welcome/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/bot-components-welcome", - "version": "1.0.0", + "version": "1.1.1", "description": "An Adaptive Dialog for greeting new and returning users on first interaction with your bot built on the Azure Bot Framework.", "keywords": [ "microsoft", @@ -21,6 +21,6 @@ "url": "https://github.com/Microsoft/botframework-components.git" }, "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"No test specified for package \\\"@microsoft/bot-components-welcome\\\", skipping.\"" } } diff --git a/skills/csharp/Directory.Build.props b/skills/csharp/Directory.Build.props index 61dd1dc0cf..1c0432473e 100644 --- a/skills/csharp/Directory.Build.props +++ b/skills/csharp/Directory.Build.props @@ -24,7 +24,7 @@ https://github.com/microsoft/botframework-skills - https://github.com/microsoft/botframework-skills/blob/master/LICENSE + MIT en-US $(NoWarn);NU5125;NU1701;8002 diff --git a/skills/csharp/calendarskill/CalendarSkill.csproj b/skills/csharp/calendarskill/CalendarSkill.csproj index 58f7186653..04cef3197f 100644 --- a/skills/csharp/calendarskill/CalendarSkill.csproj +++ b/skills/csharp/calendarskill/CalendarSkill.csproj @@ -14,7 +14,7 @@ - + diff --git a/skills/declarative/Calendar/Calendar/Calendar.csproj b/skills/declarative/Calendar/Calendar/Calendar.csproj index 7fe5d77eb9..390eefd437 100644 --- a/skills/declarative/Calendar/Calendar/Calendar.csproj +++ b/skills/declarative/Calendar/Calendar/Calendar.csproj @@ -12,7 +12,7 @@ - + diff --git a/skills/declarative/People/People/People.csproj b/skills/declarative/People/People/People.csproj index 9b4d6229b0..c6f7201baf 100644 --- a/skills/declarative/People/People/People.csproj +++ b/skills/declarative/People/People/People.csproj @@ -12,9 +12,9 @@ - - - - + + + + \ No newline at end of file diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/package.json b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/package.json index bddc987858..2f072f539a 100644 --- a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/package.json +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/package.json @@ -15,8 +15,8 @@ "url": "https://github.com" }, "dependencies": { - "botbuilder": "~4.13.3", - "botbuilder-dialogs": "~4.13.3", + "botbuilder": "4.14.0", + "botbuilder-dialogs": "~4.14.0", "dotenv": "~8.2.0", "restify": "~8.5.1" }, diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/package.json b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/package.json index 197d3fb53a..333bab7282 100644 --- a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/package.json +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/package.json @@ -15,8 +15,8 @@ "url": "https://github.com" }, "dependencies": { - "botbuilder": "~4.13.3", - "botbuilder-dialogs": "~4.13.3", + "botbuilder": "~4.14.0", + "botbuilder-dialogs": "~4.14.0", "dotenv": "~8.2.0", "restify": "~8.5.1" }, diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/package.json b/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/package.json index ff06ea8e8e..862c06e364 100644 --- a/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/package.json +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/package.json @@ -15,7 +15,7 @@ "url": "https://github.com" }, "dependencies": { - "botbuilder": "~4.13.3", + "botbuilder": "~4.14.0", "dotenv": "^8.2.0", "restify": "~8.5.1" }, diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/package.json b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/package.json index f7990840f7..2ebcff1533 100644 --- a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/package.json +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/package.json @@ -15,8 +15,8 @@ "url": "https://github.com" }, "dependencies": { - "botbuilder": "~4.13.3", - "botbuilder-dialogs": "~4.13.3", + "botbuilder": "~4.14.0", + "botbuilder-dialogs": "~4.14.0", "dotenv": "^8.2.0", "node-fetch": "^2.6.1", "restify": "~8.5.1" diff --git a/tests/functional/Directory.Build.props b/tests/functional/Directory.Build.props index 3e44d6df83..d869fda3bd 100644 --- a/tests/functional/Directory.Build.props +++ b/tests/functional/Directory.Build.props @@ -25,7 +25,7 @@ https://github.com/microsoft/BotFramework-FunctionalTests - https://github.com/microsoft/BotFramework-FunctionalTests/blob/main/LICENSE + MIT en-US true diff --git a/tests/functional/Libraries/TranscriptConverter/TranscriptConverter.csproj b/tests/functional/Libraries/TranscriptConverter/TranscriptConverter.csproj index 544dd18be4..9bfe2aa204 100644 --- a/tests/functional/Libraries/TranscriptConverter/TranscriptConverter.csproj +++ b/tests/functional/Libraries/TranscriptConverter/TranscriptConverter.csproj @@ -8,7 +8,7 @@ - + diff --git a/tests/functional/Libraries/TranscriptTestRunner/TranscriptTestRunner.csproj b/tests/functional/Libraries/TranscriptTestRunner/TranscriptTestRunner.csproj index 357cf4ee10..a2714722fb 100644 --- a/tests/functional/Libraries/TranscriptTestRunner/TranscriptTestRunner.csproj +++ b/tests/functional/Libraries/TranscriptTestRunner/TranscriptTestRunner.csproj @@ -11,8 +11,8 @@ - - + + diff --git a/tests/unit/Microsoft.Bot.Components.Tests.sln b/tests/unit/Microsoft.Bot.Components.Tests.sln index 74801b67a6..733f8655f9 100644 --- a/tests/unit/Microsoft.Bot.Components.Tests.sln +++ b/tests/unit/Microsoft.Bot.Components.Tests.sln @@ -17,10 +17,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "packages", "packages", "{73 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "teams", "teams", "{61708441-52A4-48F6-819A-B8D4C279C4C8}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Bot.Components.Teams.Tests", "packages\Microsoft.Bot.Components.Teams.Tests\Microsoft.Bot.Components.Teams.Tests.csproj", "{F6E872DE-52B7-4372-B546-B18B5A495C73}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Bot.Components.Graph", "..\..\packages\Graph\Microsoft.Bot.Components.Graph.csproj", "{9561BF32-D0EE-464F-981B-7E4298ACDDFB}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Bot.Components.Teams.Tests", "packages\Teams\dotnet\Microsoft.Bot.Components.Teams.Tests.csproj", "{4005C95D-BECC-450B-927D-54C8CCF178BB}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -43,14 +43,14 @@ Global {F0E73465-DB1D-4F8A-B527-88F1E2515A5C}.Debug|Any CPU.Build.0 = Debug|Any CPU {F0E73465-DB1D-4F8A-B527-88F1E2515A5C}.Release|Any CPU.ActiveCfg = Release|Any CPU {F0E73465-DB1D-4F8A-B527-88F1E2515A5C}.Release|Any CPU.Build.0 = Release|Any CPU - {F6E872DE-52B7-4372-B546-B18B5A495C73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F6E872DE-52B7-4372-B546-B18B5A495C73}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F6E872DE-52B7-4372-B546-B18B5A495C73}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F6E872DE-52B7-4372-B546-B18B5A495C73}.Release|Any CPU.Build.0 = Release|Any CPU {9561BF32-D0EE-464F-981B-7E4298ACDDFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9561BF32-D0EE-464F-981B-7E4298ACDDFB}.Debug|Any CPU.Build.0 = Debug|Any CPU {9561BF32-D0EE-464F-981B-7E4298ACDDFB}.Release|Any CPU.ActiveCfg = Release|Any CPU {9561BF32-D0EE-464F-981B-7E4298ACDDFB}.Release|Any CPU.Build.0 = Release|Any CPU + {4005C95D-BECC-450B-927D-54C8CCF178BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4005C95D-BECC-450B-927D-54C8CCF178BB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4005C95D-BECC-450B-927D-54C8CCF178BB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4005C95D-BECC-450B-927D-54C8CCF178BB}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -60,7 +60,7 @@ Global {6876407A-F34E-479F-9F3C-6E6ED81EB600} = {31CBAEDA-E319-49AE-A662-AA0739205C82} {F0E73465-DB1D-4F8A-B527-88F1E2515A5C} = {31CBAEDA-E319-49AE-A662-AA0739205C82} {61708441-52A4-48F6-819A-B8D4C279C4C8} = {73825711-6685-48E2-BFA2-3FCDECE1A0FD} - {F6E872DE-52B7-4372-B546-B18B5A495C73} = {61708441-52A4-48F6-819A-B8D4C279C4C8} + {4005C95D-BECC-450B-927D-54C8CCF178BB} = {61708441-52A4-48F6-819A-B8D4C279C4C8} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {2D0FB02B-704A-44E0-AECA-A4FDF6F805C5} diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipant.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetMeetingParticipant.test.dialog similarity index 89% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipant.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetMeetingParticipant.test.dialog index a770c1cc0c..85fe1ad023 100644 --- a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipant.test.dialog +++ b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetMeetingParticipant.test.dialog @@ -20,6 +20,15 @@ "tenantId": "customTenantId" } ] + }, + { + "$kind": "Microsoft.OnError", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "${turn.dialogEvent.value.message}" + } + ] } ] }, @@ -27,7 +36,7 @@ { "$kind": "Microsoft.Test.UserActivity", "activity": { - "type": "message", + "type": "message", "text": "hi", "from": { "id": "participant-id", diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipantError.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetMeetingParticipantError.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipantError.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetMeetingParticipantError.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipantErrorWithAdapter.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetMeetingParticipantErrorWithAdapter.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMeetingParticipantErrorWithAdapter.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetMeetingParticipantErrorWithAdapter.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMember.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetMember.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMember.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetMember.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMemberError.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetMemberError.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMemberError.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetMemberError.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMemberErrorWithAdapter.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetMemberErrorWithAdapter.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetMemberErrorWithAdapter.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetMemberErrorWithAdapter.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedMembers.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetPagedMembers.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedMembers.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetPagedMembers.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedMembersError.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetPagedMembersError.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedMembersError.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetPagedMembersError.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedTeamMembers.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetPagedTeamMembers.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedTeamMembers.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetPagedTeamMembers.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedTeamMembersError.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetPagedTeamMembersError.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetPagedTeamMembersError.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetPagedTeamMembersError.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamChannels.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetTeamChannels.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamChannels.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetTeamChannels.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamChannelsError.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetTeamChannelsError.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamChannelsError.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetTeamChannelsError.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamDetails.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetTeamDetails.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamDetails.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetTeamDetails.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamDetailsError.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetTeamDetailsError.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamDetailsError.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetTeamDetailsError.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMember.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetTeamMember.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMember.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetTeamMember.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMemberError.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetTeamMemberError.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMemberError.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetTeamMemberError.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMemberErrorWithAdapter.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetTeamMemberErrorWithAdapter.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_GetTeamMemberErrorWithAdapter.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_GetTeamMemberErrorWithAdapter.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendAppBasedLinkQueryResponse.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendAppBasedLinkQueryResponse.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendAppBasedLinkQueryResponse.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendAppBasedLinkQueryResponse.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendAppBasedLinkQueryResponseError.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendAppBasedLinkQueryResponseError.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendAppBasedLinkQueryResponseError.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendAppBasedLinkQueryResponseError.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEActionResponse.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEActionResponse.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEActionResponse.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEActionResponse.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEActionResponseError.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEActionResponseError.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEActionResponseError.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEActionResponseError.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAttachmentsResponse.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEAttachmentsResponse.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAttachmentsResponse.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEAttachmentsResponse.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAttachmentsResponseError.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEAttachmentsResponseError.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAttachmentsResponseError.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEAttachmentsResponseError.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponse.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEAuthResponse.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponse.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEAuthResponse.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponseError.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEAuthResponseError.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponseError.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEAuthResponseError.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponseErrorWithAdapter.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEAuthResponseErrorWithAdapter.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEAuthResponseErrorWithAdapter.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEAuthResponseErrorWithAdapter.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEBotMessagePreviewResponse.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEBotMessagePreviewResponse.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEBotMessagePreviewResponse.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEBotMessagePreviewResponse.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEBotMessagePreviewResponseError.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEBotMessagePreviewResponseError.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEBotMessagePreviewResponseError.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEBotMessagePreviewResponseError.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponse.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponse.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponse.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponse.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponseError.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponseError.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponseError.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEConfigQuerySettingUrlResponseError.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEMessageResponse.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEMessageResponse.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEMessageResponse.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEMessageResponse.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEMessageResponseError.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEMessageResponseError.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMEMessageResponseError.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMEMessageResponseError.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMESelectItemResponse.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMESelectItemResponse.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMESelectItemResponse.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMESelectItemResponse.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMESelectItemResponseError.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMESelectItemResponseError.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMESelectItemResponseError.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMESelectItemResponseError.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMessageToTeamsChannel.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMessageToTeamsChannel.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMessageToTeamsChannel.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMessageToTeamsChannel.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMessageToTeamsChannelError.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMessageToTeamsChannelError.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendMessageToTeamsChannelError.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendMessageToTeamsChannelError.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabAuthResponseError.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendTabAuthResponseError.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabAuthResponseError.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendTabAuthResponseError.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabAuthResponseErrorWithAdapter.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendTabAuthResponseErrorWithAdapter.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabAuthResponseErrorWithAdapter.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendTabAuthResponseErrorWithAdapter.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabCardResponse.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendTabCardResponse.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabCardResponse.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendTabCardResponse.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabCardResponseError.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendTabCardResponseError.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTabCardResponseError.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendTabCardResponseError.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleCardResponse.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendTaskModuleCardResponse.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleCardResponse.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendTaskModuleCardResponse.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleCardResponseError.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendTaskModuleCardResponseError.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleCardResponseError.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendTaskModuleCardResponseError.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleMessageResponse.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendTaskModuleMessageResponse.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleMessageResponse.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendTaskModuleMessageResponse.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleUrlResponse.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendTaskModuleUrlResponse.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleUrlResponse.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendTaskModuleUrlResponse.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleUrlResponseError.test.dialog b/tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendTaskModuleUrlResponseError.test.dialog similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ActionTests/Action_SendTaskModuleUrlResponseError.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ActionTests/Action_SendTaskModuleUrlResponseError.test.dialog diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ConditionalTests/ConditionalsTests_OnTeamsActivityTypes.test.dialog b/tests/unit/packages/Teams/Shared Tests/ConditionalTests/ConditionalsTests_OnTeamsActivityTypes.test.dialog similarity index 91% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ConditionalTests/ConditionalsTests_OnTeamsActivityTypes.test.dialog rename to tests/unit/packages/Teams/Shared Tests/ConditionalTests/ConditionalsTests_OnTeamsActivityTypes.test.dialog index ef348c61ac..a4b7225a61 100644 --- a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Tests/ConditionalTests/ConditionalsTests_OnTeamsActivityTypes.test.dialog +++ b/tests/unit/packages/Teams/Shared Tests/ConditionalTests/ConditionalsTests_OnTeamsActivityTypes.test.dialog @@ -93,6 +93,26 @@ } ] }, + { + "$kind": "Teams.OnMEBotMessagePreviewEdit", + "condition": "turn.activity.text == 'OnMEBotMessagePreviewEdit'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnMEBotMessagePreviewEdit" + } + ] + }, + { + "$kind": "Teams.OnMEBotMessagePreviewSend", + "condition": "turn.activity.text == 'OnMEBotMessagePreviewSend'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnMEBotMessagePreviewSend" + } + ] + }, { "$kind": "Teams.OnMECardButtonClicked", "condition": "turn.activity.text == 'OnCardButtonClicked'", @@ -372,6 +392,36 @@ "$kind": "Microsoft.Test.AssertReply", "text": "OnFileConsent" }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "invoke", + "text": "OnMEBotMessagePreviewEdit", + "value": { + "botMessagePreviewAction": "edit" + }, + "name": "composeExtension/submitAction" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnMEBotMessagePreviewEdit" + }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "invoke", + "text": "OnMEBotMessagePreviewSend", + "value": { + "botMessagePreviewAction": "send" + }, + "name": "composeExtension/submitAction" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnMEBotMessagePreviewSend" + }, { "$kind": "Microsoft.Test.UserActivity", "activity": { diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/ActionTests.cs b/tests/unit/packages/Teams/dotnet/ActionTests.cs similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/ActionTests.cs rename to tests/unit/packages/Teams/dotnet/ActionTests.cs diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/ConditionalTests.cs b/tests/unit/packages/Teams/dotnet/ConditionalTests.cs similarity index 95% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/ConditionalTests.cs rename to tests/unit/packages/Teams/dotnet/ConditionalTests.cs index 8c744a42d9..d9a73bdc63 100644 --- a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/ConditionalTests.cs +++ b/tests/unit/packages/Teams/dotnet/ConditionalTests.cs @@ -26,7 +26,7 @@ public ConditionalTests() ComponentRegistration.Add(new DeclarativeComponentRegistrationBridge()); ResourceExplorer = new ResourceExplorer() - .AddFolder(Path.Combine(TestUtils.GetProjectPath(), "Tests", nameof(ConditionalTests)), monitorChanges: false); + .AddFolder(Path.Combine(TestUtils.GetProjectPath(), "..", "Shared Tests", nameof(ConditionalTests)), monitorChanges: false); } public static ResourceExplorer ResourceExplorer { get; set; } diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Microsoft.Bot.Components.Teams.Tests.csproj b/tests/unit/packages/Teams/dotnet/Microsoft.Bot.Components.Teams.Tests.csproj similarity index 88% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Microsoft.Bot.Components.Teams.Tests.csproj rename to tests/unit/packages/Teams/dotnet/Microsoft.Bot.Components.Teams.Tests.csproj index 112c033e7f..dd88645a9c 100644 --- a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/Microsoft.Bot.Components.Teams.Tests.csproj +++ b/tests/unit/packages/Teams/dotnet/Microsoft.Bot.Components.Teams.Tests.csproj @@ -10,8 +10,8 @@ - - + + @@ -23,7 +23,7 @@ - + diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/ResourceExplorerFixture.cs b/tests/unit/packages/Teams/dotnet/ResourceExplorerFixture.cs similarity index 95% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/ResourceExplorerFixture.cs rename to tests/unit/packages/Teams/dotnet/ResourceExplorerFixture.cs index 7b2b192b71..1da40ac30a 100644 --- a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/ResourceExplorerFixture.cs +++ b/tests/unit/packages/Teams/dotnet/ResourceExplorerFixture.cs @@ -22,7 +22,7 @@ public ResourceExplorerFixture Initialize(string resourceFolder) { if (_folderPath.Length == 0) { - _folderPath = Path.Combine(TestUtils.GetProjectPath(), "Tests", resourceFolder); + _folderPath = Path.Combine(TestUtils.GetProjectPath(), "..", "Shared Tests", resourceFolder); ResourceExplorer = ResourceExplorer.AddFolder(_folderPath, monitorChanges: false); } diff --git a/tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/TestUtils.cs b/tests/unit/packages/Teams/dotnet/TestUtils.cs similarity index 100% rename from tests/unit/packages/Microsoft.Bot.Components.Teams.Tests/TestUtils.cs rename to tests/unit/packages/Teams/dotnet/TestUtils.cs diff --git a/tests/unit/packages/Teams/js/package.json b/tests/unit/packages/Teams/js/package.json new file mode 100644 index 0000000000..894e3f6a0f --- /dev/null +++ b/tests/unit/packages/Teams/js/package.json @@ -0,0 +1,23 @@ +{ + "name": "@microsoft/bot-components-teams-tests", + "private": true, + "scripts": { + "build:package": "yarn workspace @microsoft/bot-components-teams build", + "test": "yarn run build:package && mocha --require ts-node/register tests/*.test.ts", + "lint": "eslint . --ext .js,.ts --config ../../../../../packages/Teams/js/.eslintrc.json" + }, + "dependencies": { + "@microsoft/bot-components-teams": "workspace:packages/Teams/js", + "@types/mocha": "^8.2.2", + "botbuilder": "4.14.0", + "botbuilder-dialogs-adaptive": "4.14.0-preview", + "botbuilder-dialogs-adaptive-testing": "4.14.0-preview", + "botframework-connector": "4.14.0", + "mocha": "^9.0.2", + "nock": "^13.1.1", + "ts-node": "^10.0.0" + }, + "devDependencies": { + "eslint": "^7.30.0" + } +} diff --git a/tests/unit/packages/Teams/js/tests/actionTests.test.ts b/tests/unit/packages/Teams/js/tests/actionTests.test.ts new file mode 100644 index 0000000000..1492fde260 --- /dev/null +++ b/tests/unit/packages/Teams/js/tests/actionTests.test.ts @@ -0,0 +1,508 @@ +// Licensed under the MIT License. +// Copyright (c) Microsoft Corporation. All rights reserved. + +import { + ConversationState, + useBotState, + MemoryStorage, + UserState, + Channels, + ConversationReference, + ChannelAccount, + ConversationAccount, + BotAdapter, + TestAdapter, + TurnContext, + Middleware, +} from 'botbuilder'; +import { AdaptiveTeamsBotComponent } from '@microsoft/bot-components-teams'; +import { TestUtils } from 'botbuilder-dialogs-adaptive-testing'; +import { + ConnectorClient, + MicrosoftAppCredentials, +} from 'botframework-connector'; +import { ok } from 'assert'; +import nock = require('nock'); +import { makeResourceExplorer } from './utils'; + +const getTeamsTestAdapter = ( + convo?: Partial +): TestAdapter => { + const adapter = new TestAdapter(convo as ConversationReference); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore: This is required because TeamsInfo checks that the adapter has a createConnectorClient method + // and TestAdapter doesn't have one, natively. + adapter.createConnectorClient = () => { + return new ConnectorClient(new MicrosoftAppCredentials('', '')); + }; + + // DialogManager requires conversationState + const storage = new MemoryStorage(); + const userState = new UserState(storage); + const conversationState = new ConversationState(storage); + useBotState((adapter as unknown) as BotAdapter, userState, conversationState); + + return adapter; +}; + +const getTeamsUser = (): ChannelAccount => { + return { + id: '29:User-Id', + name: 'User Name', + aadObjectId: 'participant-aad-id', + }; +}; + +const getPersonalConversation = (): ConversationAccount => { + return { + id: 'a:oneOnOneConversationId', + name: 'oneOnOne', + tenantId: 'tenantId-Guid', + conversationType: 'personal', + isGroup: false, + }; +}; + +const getGroupConversation = (): ConversationAccount => { + return { + id: '19:groupChatId@thread.v2', + name: 'group', + tenantId: 'tenantId-Guid', + conversationType: 'groupChat', + isGroup: true, + }; +}; + +const getBaseConversationReference = (): ConversationReference => { + return { + user: getTeamsUser(), + channelId: Channels.Msteams, + conversation: getPersonalConversation(), + bot: { + id: 'botId', + name: 'Bot', + }, + serviceUrl: 'https://api.botframework.com', + }; +}; + +const getPersonalConversationReference = (): ConversationReference => { + return { + ...getBaseConversationReference(), + conversation: getPersonalConversation(), + }; +}; + +const getGroupConversationReference = (): ConversationReference => { + return { + ...getBaseConversationReference(), + conversation: getGroupConversation(), + }; +}; + +const generateTeamMembers = (amount: number): Record[] => { + const members = []; + const baseUser = getTeamsUser(); + for (let i = 0; i < amount; i++) { + members.push({ + id: `${baseUser.id}-${i}`, + name: `${baseUser.name}-${i}`, + objectId: `User-${i}-Object-Id`, + givenName: 'User', + surname: `Surname-${i}`, + email: `User.${i}@microsoft.com`, + userPrincipalName: `user${i}@microsoft.com`, + tenantId: 'tenant-id-1', + }); + } + + return members; +}; + +// This is only used for SendMessageToTeamsChannel test since it has a check in turnState for +// credentials and they never get saved is the adapter is TestAdapter. +class AddConnectorClientMiddleware implements Middleware { + async onTurn(context: TurnContext, next: () => Promise): Promise { + context.turnState.set( + context.adapter.ConnectorClientKey, + new ConnectorClient(new MicrosoftAppCredentials('', '')) + ); + await next(); + } +} + +describe('Actions', function () { + before(() => nock.disableNetConnect()); + beforeEach(() => nock.cleanAll()); + after(() => nock.enableNetConnect()); + afterEach(() => nock.cleanAll()); + + const resourceExplorer = makeResourceExplorer( + 'ActionTests', + AdaptiveTeamsBotComponent + ); + + /** + * Note: With mocha, `this.test?.title` refers to the test's name, so runTestScript + * is just calling a file with the same name as the test. + */ + it('Action_GetMeetingParticipant', async function () { + const conversationReference = getPersonalConversationReference(); + const participant = { + user: { + userPrincipalName: 'userPrincipalName-1', + }, + meeting: { + role: 'Organizer', + }, + conversation: conversationReference.conversation, + }; + + const fetchExpectation = nock('https://api.botframework.com') + .get( + '/v1/meetings/meeting-id-1/participants/participant-aad-id-1?tenantId=tenant-id-1' + ) + .reply(200, participant); + + const fetchExpectationCustomProperties = nock( + 'https://api.botframework.com' + ) + .get( + '/v1/meetings/customMeetingId/participants/customParticipantId?tenantId=customTenantId' + ) + .reply(200, participant); + + const adapter = getTeamsTestAdapter(conversationReference); + + await TestUtils.runTestScript(resourceExplorer, this.test?.title, adapter); + + ok(fetchExpectation.isDone()); + ok(fetchExpectationCustomProperties.isDone()); + }); + + it('Action_GetMeetingParticipantError', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_GetMeetingParticipantErrorWithAdapter', async function () { + const conversationReference = getPersonalConversationReference(); + const adapter = getTeamsTestAdapter(conversationReference); + + await TestUtils.runTestScript(resourceExplorer, this.test?.title, adapter); + }); + + it('Action_GetMember', async function () { + const conversationReference = getPersonalConversationReference(); + const members = generateTeamMembers(1); + + const fetchExpectation = nock('https://api.botframework.com') + .get('/v3/conversations/a%3AoneOnOneConversationId/members/member-id') + .reply(200, members[0]); + + const fetchExpectationCustomProperties = nock( + 'https://api.botframework.com' + ) + .get( + '/v3/conversations/a%3AoneOnOneConversationId/members/customMemberId' + ) + .reply(200, members[0]); + + const adapter = getTeamsTestAdapter(conversationReference); + + await TestUtils.runTestScript(resourceExplorer, this.test?.title, adapter); + + ok(fetchExpectation.isDone()); + ok(fetchExpectationCustomProperties.isDone()); + }); + + it('Action_GetMemberError', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_GetMemberErrorWithAdapter', async function () { + const conversationReference = getPersonalConversationReference(); + const adapter = getTeamsTestAdapter(conversationReference); + + await TestUtils.runTestScript(resourceExplorer, this.test?.title, adapter); + }); + + it('Action_GetPagedMembers', async function () { + const conversationReference = getGroupConversationReference(); + const members = generateTeamMembers(3); + + const fetchExpectation = nock('https://api.botframework.com') + .get('/v3/conversations/19%3AgroupChatId%40thread.v2/pagedmembers') + .reply(200, { continuationToken: 'token', members }); + + const fetchExpectationCustomProperties = nock( + 'https://api.botframework.com' + ) + .get( + '/v3/conversations/19%3AgroupChatId%40thread.v2/pagedmembers?pageSize=2&continuationToken=token' + ) + .reply(200, { + continuationToken: 'customToken', + members: members.slice(0, 2), + }); + + const adapter = getTeamsTestAdapter(conversationReference); + + await TestUtils.runTestScript(resourceExplorer, this.test?.title, adapter); + + ok(fetchExpectation.isDone()); + ok(fetchExpectationCustomProperties.isDone()); + }); + + it('Action_GetPagedMembersError', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_GetPagedTeamMembers', async function () { + const conversationReference = getGroupConversationReference(); + const members = generateTeamMembers(3); + + const fetchExpectation = nock('https://api.botframework.com') + .get('/v3/conversations/team-id-1/pagedmembers') + .reply(200, { continuationToken: 'token', members }); + + const fetchExpectationCustomProperties = nock( + 'https://api.botframework.com' + ) + .get( + '/v3/conversations/team-id-1/pagedmembers?pageSize=2&continuationToken=token' + ) + .reply(200, { + continuationToken: 'customToken', + members: members.slice(0, 2), + }); + + const adapter = getTeamsTestAdapter(conversationReference); + + await TestUtils.runTestScript(resourceExplorer, this.test?.title, adapter); + + ok(fetchExpectation.isDone()); + ok(fetchExpectationCustomProperties.isDone()); + }); + + it('Action_GetPagedTeamMembersError', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_GetTeamChannels', async function () { + const conversationReference = getGroupConversationReference(); + const conversations = [ + { + id: '19:ChannelIdgeneralChannelId@thread.skype', + name: 'Testing0', + }, + { + id: '19:somechannelId2e5ab3df9ae9b594bdb@thread.skype', + name: 'Testing1', + }, + { + id: '19:somechannelId388ade16aa4dd375e69@thread.skype', + name: 'Testing2', + }, + ]; + + const fetchExpectation = nock('https://api.botframework.com') + .get('/v3/teams/team-id-1/conversations') + .reply(200, { conversations }); + + const fetchExpectationCustomProperties = nock( + 'https://api.botframework.com' + ) + .get('/v3/teams/customTeamId/conversations') + .reply(200, { conversations }); + + const adapter = getTeamsTestAdapter(conversationReference); + + await TestUtils.runTestScript(resourceExplorer, this.test?.title, adapter); + + ok(fetchExpectation.isDone()); + ok(fetchExpectationCustomProperties.isDone()); + }); + + it('Action_GetTeamChannelsError', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_GetTeamDetails', async function () { + const conversationReference = getGroupConversationReference(); + const teamDetails = { + id: '19:generalChannelIdgeneralChannelId@thread.skype', + name: 'TeamName', + aadGroupId: 'Team-aadGroupId', + }; + + const fetchExpectation = nock('https://api.botframework.com') + .get('/v3/teams/team-id-1') + .reply(200, teamDetails); + + const fetchExpectationCustomProperties = nock( + 'https://api.botframework.com' + ) + .get('/v3/teams/customTeamId') + .reply(200, teamDetails); + + const adapter = getTeamsTestAdapter(conversationReference); + + await TestUtils.runTestScript(resourceExplorer, this.test?.title, adapter); + + ok(fetchExpectation.isDone()); + ok(fetchExpectationCustomProperties.isDone()); + }); + + it('Action_GetTeamDetailsError', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_GetTeamMember', async function () { + const conversationReference = getGroupConversationReference(); + const members = generateTeamMembers(1); + + const fetchExpectation = nock('https://api.botframework.com') + .get('/v3/conversations/team-id-1/members/29%3AUser-Id') + .reply(200, members[0]); + + const fetchExpectationCustomProperties = nock( + 'https://api.botframework.com' + ) + .get('/v3/conversations/customTeamId/members/customMemberId') + .reply(200, members[0]); + + const adapter = getTeamsTestAdapter(conversationReference); + + await TestUtils.runTestScript(resourceExplorer, this.test?.title, adapter); + + ok(fetchExpectation.isDone()); + ok(fetchExpectationCustomProperties.isDone()); + }); + + it('Action_GetTeamMemberError', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_GetTeamMemberErrorWithAdapter', async function () { + const conversationReference = getGroupConversationReference(); + const adapter = getTeamsTestAdapter(conversationReference); + + await TestUtils.runTestScript(resourceExplorer, this.test?.title, adapter); + }); + + it('Action_SendAppBasedLinkQueryResponse', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_SendAppBasedLinkQueryResponseError', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_SendMessageToTeamsChannel', async function () { + const conversationReference = getGroupConversationReference(); + const adapter = getTeamsTestAdapter(conversationReference); + adapter.use(new AddConnectorClientMiddleware()); + + const fetchExpectation = nock('https://api.botframework.com') + .post('/v3/conversations') + .times(2) + .reply(200); + + await TestUtils.runTestScript(resourceExplorer, this.test?.title, adapter); + + ok(fetchExpectation.isDone()); + }); + + it('Action_SendMessageToTeamsChannelError', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_SendMEActionResponse', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_SendMEActionResponseError', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_SendMEAttachmentsResponse', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_SendMEAttachmentsResponseError', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_SendMEAuthResponse', async function () { + // Note: the test.dialog for this test uses `StartsWith` at the end due to differences in JS and .NET TestAdapter.getSignInlink + const conversationReference = getPersonalConversationReference(); + conversationReference.conversation.id = 'Action_SendMEAuthResponse'; + const adapter = getTeamsTestAdapter(conversationReference); + + await TestUtils.runTestScript(resourceExplorer, this.test?.title, adapter); + }); + + it('Action_SendMEAuthResponseError', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_SendMEAuthResponseErrorWithAdapter', async function () { + const adapter = getTeamsTestAdapter(); + // eslint-disable-next-line + // @ts-ignore: We have to set this to null to test the error but tsconfig "strict" doesn't allow it. + adapter.getUserToken = null; + await TestUtils.runTestScript(resourceExplorer, this.test?.title, adapter); + }); + + it('Action_SendMEBotMessagePreviewResponse', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_SendMEBotMessagePreviewResponseError', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_SendMEConfigQuerySettingUrlResponse', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_SendMEConfigQuerySettingUrlResponseError', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_SendMEMessageResponse', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_SendMEMessageResponseError', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_SendMESelectItemResponse', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_SendMESelectItemResponseError', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_SendTaskModuleCardResponse', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_SendTaskModuleCardResponseError', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_SendTaskModuleMessageResponse', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_SendTaskModuleUrlResponse', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); + + it('Action_SendTaskModuleUrlResponseError', async function () { + await TestUtils.runTestScript(resourceExplorer, this.test?.title); + }); +}); diff --git a/tests/unit/packages/Teams/js/tests/conditionalTests.test.ts b/tests/unit/packages/Teams/js/tests/conditionalTests.test.ts new file mode 100644 index 0000000000..9c6a66b6ef --- /dev/null +++ b/tests/unit/packages/Teams/js/tests/conditionalTests.test.ts @@ -0,0 +1,21 @@ +// Licensed under the MIT License. +// Copyright (c) Microsoft Corporation. All rights reserved. + +import { TestUtils } from 'botbuilder-dialogs-adaptive-testing'; +import 'mocha'; +import { AdaptiveTeamsBotComponent } from '@microsoft/bot-components-teams'; +import { makeResourceExplorer } from './utils'; + +describe('Conditional Tests', function () { + const resourceExplorer = makeResourceExplorer( + 'ConditionalTests', + AdaptiveTeamsBotComponent + ); + + it('OnTeamsActivityTypes', async () => { + await TestUtils.runTestScript( + resourceExplorer, + 'ConditionalsTests_OnTeamsActivityTypes' + ); + }); +}); diff --git a/tests/unit/packages/Teams/js/tests/utils.ts b/tests/unit/packages/Teams/js/tests/utils.ts new file mode 100644 index 0000000000..8998dbef16 --- /dev/null +++ b/tests/unit/packages/Teams/js/tests/utils.ts @@ -0,0 +1,41 @@ +// Licensed under the MIT License. +// Copyright (c) Microsoft Corporation. All rights reserved. + +import { AdaptiveBotComponent } from 'botbuilder-dialogs-adaptive'; +import { + ServiceCollection, + noOpConfiguration, +} from 'botbuilder-dialogs-adaptive-runtime-core'; +import { AdaptiveTestBotComponent } from 'botbuilder-dialogs-adaptive-testing'; +import { + ResourceExplorer, + ResourceExplorerOptions, +} from 'botbuilder-dialogs-declarative'; +import path from 'path'; +import { BotComponent } from 'botbuilder'; + +export function makeResourceExplorer( + resourceFolder: string, + ...botComponents: Array BotComponent> +): ResourceExplorer { + const services = new ServiceCollection({ + declarativeTypes: [], + }); + + new AdaptiveBotComponent().configureServices(services, noOpConfiguration); + new AdaptiveTestBotComponent().configureServices(services, noOpConfiguration); + + botComponents.forEach((BotComponent) => { + new BotComponent().configureServices(services, noOpConfiguration); + }); + + const declarativeTypes = services.mustMakeInstance('declarativeTypes'); + + return new ResourceExplorer({ + declarativeTypes, + } as ResourceExplorerOptions).addFolder( + path.join(__dirname, '..', '..', 'Shared Tests', resourceFolder), + true, + false + ); +} diff --git a/tests/unit/packages/Teams/js/tsconfig.json b/tests/unit/packages/Teams/js/tsconfig.json new file mode 100644 index 0000000000..fe0f8351e4 --- /dev/null +++ b/tests/unit/packages/Teams/js/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@tsconfig/recommended", + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "composite": true, + "sourceMap": true, + "strict": true + } + } + \ No newline at end of file diff --git a/tests/unit/skills/calendar/Microsoft.Bot.Dialogs.Tests.Skills.Calendar.csproj b/tests/unit/skills/calendar/Microsoft.Bot.Dialogs.Tests.Skills.Calendar.csproj index e98d945c2c..cd04caac54 100644 --- a/tests/unit/skills/calendar/Microsoft.Bot.Dialogs.Tests.Skills.Calendar.csproj +++ b/tests/unit/skills/calendar/Microsoft.Bot.Dialogs.Tests.Skills.Calendar.csproj @@ -7,10 +7,10 @@ - - - - + + + + diff --git a/tests/unit/skills/common/Microsoft.Bot.Dialogs.Tests.Common.csproj b/tests/unit/skills/common/Microsoft.Bot.Dialogs.Tests.Common.csproj index 05c521c926..84135e3144 100644 --- a/tests/unit/skills/common/Microsoft.Bot.Dialogs.Tests.Common.csproj +++ b/tests/unit/skills/common/Microsoft.Bot.Dialogs.Tests.Common.csproj @@ -6,10 +6,10 @@ - - - - + + + + diff --git a/tests/unit/skills/people/Microsoft.Bot.Dialogs.Tests.Skills.People.csproj b/tests/unit/skills/people/Microsoft.Bot.Dialogs.Tests.Skills.People.csproj index 02c6c2f4e2..cd9c89cd5b 100644 --- a/tests/unit/skills/people/Microsoft.Bot.Dialogs.Tests.Skills.People.csproj +++ b/tests/unit/skills/people/Microsoft.Bot.Dialogs.Tests.Skills.People.csproj @@ -6,10 +6,10 @@ - - - - + + + + diff --git a/yarn.lock b/yarn.lock index faed4e0a0e..676d12eb0c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,6 +5,35 @@ __metadata: version: 4 cacheKey: 7 +"@azure/abort-controller@npm:^1.0.0": + version: 1.0.4 + resolution: "@azure/abort-controller@npm:1.0.4" + dependencies: + tslib: ^2.0.0 + checksum: e772f6c9afd2c448260f08ef796e4ff73348c5dfd100ce557cf73dd08d7664e819f11f8e59c19a76daa46c1b271ce3061db23072c2150b112df655d38e82944b + languageName: node + linkType: hard + +"@azure/cognitiveservices-luis-runtime@npm:2.0.0": + version: 2.0.0 + resolution: "@azure/cognitiveservices-luis-runtime@npm:2.0.0" + dependencies: + "@azure/ms-rest-js": ^1.6.0 + tslib: ^1.9.3 + checksum: 15d51d16a707a29e9e72e74e96a4227f43a76e12e920328a8f5c7ebb41c711ac11a9676035b2410a198ba9f0007521f650ebd0046709677b557755327a41a325 + languageName: node + linkType: hard + +"@azure/core-auth@npm:^1.1.4": + version: 1.3.2 + resolution: "@azure/core-auth@npm:1.3.2" + dependencies: + "@azure/abort-controller": ^1.0.0 + tslib: ^2.2.0 + checksum: 66c7d074b55e15ecf75c2de64841693c680c326c969dd037bc3800674b658ae1d1b717975c543a34de2da1a1eb1410983d7d2f96ad1d26b61f0372d9214feeb7 + languageName: node + linkType: hard + "@azure/ms-rest-js@npm:1.9.1": version: 1.9.1 resolution: "@azure/ms-rest-js@npm:1.9.1" @@ -21,6 +50,22 @@ __metadata: languageName: node linkType: hard +"@azure/ms-rest-js@npm:^1.6.0": + version: 1.11.2 + resolution: "@azure/ms-rest-js@npm:1.11.2" + dependencies: + "@azure/core-auth": ^1.1.4 + axios: ^0.21.1 + form-data: ^2.3.2 + tough-cookie: ^2.4.3 + tslib: ^1.9.2 + tunnel: 0.0.6 + uuid: ^3.2.1 + xml2js: ^0.4.19 + checksum: a96f2f075ecbef968ad85606087ad8a1d40382d4b9581d184049c46027f2d470b6b669d5dfec722545f54b10e75f8d60ea5a950a69393bc8c431ec81dd5f561b + languageName: node + linkType: hard + "@babel/code-frame@npm:7.12.11": version: 7.12.11 resolution: "@babel/code-frame@npm:7.12.11" @@ -85,39 +130,94 @@ __metadata: languageName: node linkType: hard +"@eslint/eslintrc@npm:^0.4.2": + version: 0.4.2 + resolution: "@eslint/eslintrc@npm:0.4.2" + dependencies: + ajv: ^6.12.4 + debug: ^4.1.1 + espree: ^7.3.0 + globals: ^13.9.0 + ignore: ^4.0.6 + import-fresh: ^3.2.1 + js-yaml: ^3.13.1 + minimatch: ^3.0.4 + strip-json-comments: ^3.1.1 + checksum: 60b66ce4257bf5c36a920dea83a056102fef746e7afd7100a6fe245a126ff455f67f4948e75d28ed73090bff8f8556b6a996e74a124911ca703440bc245dbc23 + languageName: node + linkType: hard + +"@humanwhocodes/config-array@npm:^0.5.0": + version: 0.5.0 + resolution: "@humanwhocodes/config-array@npm:0.5.0" + dependencies: + "@humanwhocodes/object-schema": ^1.2.0 + debug: ^4.1.1 + minimatch: ^3.0.4 + checksum: 71e3c1fef40166ecaacbe29b681499dc6bab3fe45df5bfb3e137baf6e50f22813cf14f24ff759a4da43b6743d7f5a776298ae1e0e266c9602bab62da2ee3b302 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^1.2.0": + version: 1.2.0 + resolution: "@humanwhocodes/object-schema@npm:1.2.0" + checksum: ef533ee0d227b8036e4220013575fedc3d0346e2e40bc5f5536ba5761825f23577eb4b71e52f18a2d3b827c9d83cfa60c821a71e30d5f6537918a94bc1990963 + languageName: node + linkType: hard + "@microsoft/bot-components-helpandcancel@workspace:packages/HelpAndCancel": version: 0.0.0-use.local resolution: "@microsoft/bot-components-helpandcancel@workspace:packages/HelpAndCancel" languageName: unknown linkType: soft +"@microsoft/bot-components-teams-tests@workspace:tests/unit/packages/Teams/js": + version: 0.0.0-use.local + resolution: "@microsoft/bot-components-teams-tests@workspace:tests/unit/packages/Teams/js" + dependencies: + "@microsoft/bot-components-teams": "workspace:packages/Teams/js" + "@types/mocha": ^8.2.2 + botbuilder: 4.14.0 + botbuilder-dialogs-adaptive: 4.14.0-preview + botbuilder-dialogs-adaptive-testing: 4.14.0-preview + botframework-connector: 4.14.0 + eslint: ^7.30.0 + mocha: ^9.0.2 + nock: ^13.1.1 + ts-node: ^10.0.0 + languageName: unknown + linkType: soft + "@microsoft/bot-components-teams@workspace:packages/Teams/js": version: 0.0.0-use.local resolution: "@microsoft/bot-components-teams@workspace:packages/Teams/js" dependencies: "@tsconfig/recommended": ^1.0.1 "@types/lodash": ^4.14.168 - "@typescript-eslint/eslint-plugin": latest - "@typescript-eslint/parser": latest - adaptive-expressions: 4.13.4 - botbuilder: 4.13.4 - botbuilder-dialogs: 4.13.4 - botbuilder-dialogs-adaptive: 4.13.4-preview - botbuilder-dialogs-adaptive-runtime-core: 4.13.4-preview - botbuilder-dialogs-declarative: 4.13.4-preview - botbuilder-stdlib: 4.13.4-internal - eslint: latest + "@typescript-eslint/eslint-plugin": ^4.28.2 + "@typescript-eslint/parser": ^4.28.2 + adaptive-expressions: 4.14.0 + botbuilder: 4.14.0 + botbuilder-dialogs: 4.14.0 + botbuilder-dialogs-adaptive: 4.14.0-preview + botbuilder-dialogs-adaptive-runtime-core: 4.14.0-preview + botbuilder-dialogs-declarative: 4.14.0-preview + botbuilder-stdlib: 4.14.0-internal + botframework-connector: 4.14.0 + eslint: ^7.30.0 + eslint-plugin-prettier: latest lodash: ^4.17.21 rimraf: ^3.0.2 typescript: ^4.0.5 peerDependencies: - adaptive-expressions: ~4.13.4 - botbuilder: ~4.13.4 - botbuilder-dialogs: ~4.13.4 - botbuilder-dialogs-adaptive: ~4.13.4-preview - botbuilder-dialogs-adaptive-runtime-core: ~4.13.4-preview - botbuilder-dialogs-declarative: ~4.13.4-preview - botbuilder-stdlib: ~4.13.4-internal + adaptive-expressions: ~4.14.0 + botbuilder: ~4.14.0 + botbuilder-dialogs: ~4.14.0 + botbuilder-dialogs-adaptive: ~4.14.0-preview + botbuilder-dialogs-adaptive-runtime-core: ~4.14.0-preview + botbuilder-dialogs-declarative: ~4.14.0-preview + botbuilder-stdlib: ~4.14.0-internal + botframework-connector: ~4.14.0 lodash: ^4.17.21 languageName: unknown linkType: soft @@ -134,7 +234,7 @@ __metadata: languageName: unknown linkType: soft -"@microsoft/generator-bot-adaptive@workspace:^1.0.0, @microsoft/generator-bot-adaptive@workspace:generators/generator-bot-adaptive": +"@microsoft/generator-bot-adaptive@workspace:^1.1.1, @microsoft/generator-bot-adaptive@workspace:generators/generator-bot-adaptive": version: 0.0.0-use.local resolution: "@microsoft/generator-bot-adaptive@workspace:generators/generator-bot-adaptive" dependencies: @@ -157,7 +257,7 @@ __metadata: version: 0.0.0-use.local resolution: "@microsoft/generator-bot-core-assistant@workspace:generators/generator-bot-core-assistant" dependencies: - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0" + "@microsoft/generator-bot-adaptive": "workspace:^1.1.1" eslint: latest eslint-config-prettier: latest eslint-plugin-prettier: latest @@ -171,7 +271,7 @@ __metadata: version: 0.0.0-use.local resolution: "@microsoft/generator-bot-core-language@workspace:generators/generator-bot-core-language" dependencies: - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0" + "@microsoft/generator-bot-adaptive": "workspace:^1.1.1" eslint: latest eslint-config-prettier: latest eslint-plugin-prettier: latest @@ -185,7 +285,7 @@ __metadata: version: 0.0.0-use.local resolution: "@microsoft/generator-bot-core-qna@workspace:generators/generator-bot-core-qna" dependencies: - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0" + "@microsoft/generator-bot-adaptive": "workspace:^1.1.1" eslint: latest eslint-config-prettier: latest eslint-plugin-prettier: latest @@ -199,7 +299,7 @@ __metadata: version: 0.0.0-use.local resolution: "@microsoft/generator-bot-empty@workspace:generators/generator-bot-empty" dependencies: - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0" + "@microsoft/generator-bot-adaptive": "workspace:^1.1.1" eslint: latest eslint-config-prettier: latest eslint-plugin-prettier: latest @@ -213,9 +313,9 @@ __metadata: version: 0.0.0-use.local resolution: "@microsoft/generator-bot-enterprise-assistant@workspace:generators/generator-bot-enterprise-assistant" dependencies: - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0" - "@microsoft/generator-bot-enterprise-calendar": "workspace:^1.0.0" - "@microsoft/generator-bot-enterprise-people": "workspace:^1.0.0" + "@microsoft/generator-bot-adaptive": "workspace:^1.1.1" + "@microsoft/generator-bot-enterprise-calendar": "workspace:^1.1.1" + "@microsoft/generator-bot-enterprise-people": "workspace:^1.1.1" eslint: latest eslint-config-prettier: latest eslint-plugin-prettier: latest @@ -226,11 +326,11 @@ __metadata: languageName: unknown linkType: soft -"@microsoft/generator-bot-enterprise-calendar@workspace:^1.0.0, @microsoft/generator-bot-enterprise-calendar@workspace:generators/generator-bot-enterprise-calendar": +"@microsoft/generator-bot-enterprise-calendar@workspace:^1.1.1, @microsoft/generator-bot-enterprise-calendar@workspace:generators/generator-bot-enterprise-calendar": version: 0.0.0-use.local resolution: "@microsoft/generator-bot-enterprise-calendar@workspace:generators/generator-bot-enterprise-calendar" dependencies: - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0" + "@microsoft/generator-bot-adaptive": "workspace:^1.1.1" eslint: latest eslint-config-prettier: latest eslint-plugin-prettier: latest @@ -240,11 +340,11 @@ __metadata: languageName: unknown linkType: soft -"@microsoft/generator-bot-enterprise-people@workspace:^1.0.0, @microsoft/generator-bot-enterprise-people@workspace:generators/generator-bot-enterprise-people": +"@microsoft/generator-bot-enterprise-people@workspace:^1.1.1, @microsoft/generator-bot-enterprise-people@workspace:generators/generator-bot-enterprise-people": version: 0.0.0-use.local resolution: "@microsoft/generator-bot-enterprise-people@workspace:generators/generator-bot-enterprise-people" dependencies: - "@microsoft/generator-bot-adaptive": "workspace:^1.0.0" + "@microsoft/generator-bot-adaptive": "workspace:^1.1.1" eslint: latest eslint-config-prettier: latest eslint-plugin-prettier: latest @@ -467,6 +567,34 @@ __metadata: languageName: node linkType: hard +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.8 + resolution: "@tsconfig/node10@npm:1.0.8" + checksum: 0336493b89fb7c06409a1247a3fb00fac2755f21f3f8ae4b9dd2457859abfc5e8ca42b6d9ca5a279fe81bc70fe1f3450eef61e5dd5a63a7b4a6946ff31874816 + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.9 + resolution: "@tsconfig/node12@npm:1.0.9" + checksum: 5532bfb5df47ed3a507da533c731a2fb80ee2e886edadbf20e664dcd3172d5c159577a281d15733b8d0c30bfa4e6b48496bef0704192c085520bc76bb9938068 + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.1 + resolution: "@tsconfig/node14@npm:1.0.1" + checksum: d0068287dba46dc98e7d49c229b0fee034fbac2bb4bc2efe12cc67227a1c68ec0728ca1e535dff7f033f7455de6c67e9b8f9d90f4fc3bb07c0d9ac08186fe65c + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.1": + version: 1.0.1 + resolution: "@tsconfig/node16@npm:1.0.1" + checksum: c389a4a81c291a27b96705de7fbe46d29aa4eb771450a41dfc075d89e1fdd63141898043a0d9f627460a1c409d06635a044dc4b3a4516173769a7d0a1558c51d + languageName: node + linkType: hard + "@tsconfig/recommended@npm:^1.0.1": version: 1.0.1 resolution: "@tsconfig/recommended@npm:1.0.1" @@ -498,10 +626,10 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:^7.0.3": - version: 7.0.7 - resolution: "@types/json-schema@npm:7.0.7" - checksum: b9d2c509fa4e0b82f58e73f5e6ab76c60ff1884ba41bb82f37fb1cece226d4a3e5a62fedf78a43da0005373a6713d9abe61c1e592906402c41c08ad6ab26d52b +"@types/json-schema@npm:^7.0.7": + version: 7.0.8 + resolution: "@types/json-schema@npm:7.0.8" + checksum: 435a3d18a88aeac7bc88c2cdd2c19466c62ce79303493edd72380cd4af9775c05f35d424d5e76ffe3f94575ebb535305c6cae928c5bfb9c39eafbfb6932520a1 languageName: node linkType: hard @@ -523,6 +651,22 @@ __metadata: languageName: node linkType: hard +"@types/lodash.isequal@npm:^4.5.5": + version: 4.5.5 + resolution: "@types/lodash.isequal@npm:4.5.5" + dependencies: + "@types/lodash": "*" + checksum: 141df617686010657bb3e46b21facce2dd15b771fdfebd9df2f3d6fd3603d6336b64da4027257402c640f71b65d91eca9305b53d282cf604bcbb88e662034aad + languageName: node + linkType: hard + +"@types/lodash@npm:*": + version: 4.14.171 + resolution: "@types/lodash@npm:4.14.171" + checksum: e48668fb030ad7d8c0c7751061bd332ad8704937d976bd4e24fd9e2128f80c17112be11e5c13d39f6a210336dc3549f7fb00eaebb56b94c2bfb89ad64c57d721 + languageName: node + linkType: hard + "@types/lodash@npm:^4.14.168": version: 4.14.168 resolution: "@types/lodash@npm:4.14.168" @@ -544,6 +688,13 @@ __metadata: languageName: node linkType: hard +"@types/mocha@npm:^8.2.2": + version: 8.2.2 + resolution: "@types/mocha@npm:8.2.2" + checksum: 3455211b134b0cfcfc71fee2d4f22a6ac3e313a93bf6c0cd3519c1e85653ffb8c9bb68dcff083b8e9e15b4ea3cb4f50d9916709946c082f072807aeba747575b + languageName: node + linkType: hard + "@types/node@npm:*": version: 14.14.31 resolution: "@types/node@npm:14.14.31" @@ -606,103 +757,102 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:latest": - version: 4.22.0 - resolution: "@typescript-eslint/eslint-plugin@npm:4.22.0" +"@typescript-eslint/eslint-plugin@npm:^4.28.2": + version: 4.28.2 + resolution: "@typescript-eslint/eslint-plugin@npm:4.28.2" dependencies: - "@typescript-eslint/experimental-utils": 4.22.0 - "@typescript-eslint/scope-manager": 4.22.0 - debug: ^4.1.1 + "@typescript-eslint/experimental-utils": 4.28.2 + "@typescript-eslint/scope-manager": 4.28.2 + debug: ^4.3.1 functional-red-black-tree: ^1.0.1 - lodash: ^4.17.15 - regexpp: ^3.0.0 - semver: ^7.3.2 - tsutils: ^3.17.1 + regexpp: ^3.1.0 + semver: ^7.3.5 + tsutils: ^3.21.0 peerDependencies: "@typescript-eslint/parser": ^4.0.0 eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 40485bbf51283616b5098b33fa5285104a80419c4dcf75659442ae780352289bc238a64591939012ebc47823485497ae6ba8a35e653b0e33ff7f58743b46c34e + checksum: 6af8ea7665d5eaf0bafe241d71e3a85df07c0c82e59f530bd6627e0371e66a2d4a517cacd00d030680fe13d423b065c53185d3f48daa174fea316f024b1ab545 languageName: node linkType: hard -"@typescript-eslint/experimental-utils@npm:4.22.0": - version: 4.22.0 - resolution: "@typescript-eslint/experimental-utils@npm:4.22.0" +"@typescript-eslint/experimental-utils@npm:4.28.2": + version: 4.28.2 + resolution: "@typescript-eslint/experimental-utils@npm:4.28.2" dependencies: - "@types/json-schema": ^7.0.3 - "@typescript-eslint/scope-manager": 4.22.0 - "@typescript-eslint/types": 4.22.0 - "@typescript-eslint/typescript-estree": 4.22.0 - eslint-scope: ^5.0.0 - eslint-utils: ^2.0.0 + "@types/json-schema": ^7.0.7 + "@typescript-eslint/scope-manager": 4.28.2 + "@typescript-eslint/types": 4.28.2 + "@typescript-eslint/typescript-estree": 4.28.2 + eslint-scope: ^5.1.1 + eslint-utils: ^3.0.0 peerDependencies: eslint: "*" - checksum: afabf0d6f9e70b910575d8bc2e8ccd3416e8d05ed968296fc56379f71f8cf3a27107598b98f7c76a91e6b0be796dc102c866381a3af5bf24799a333532d1e997 + checksum: 5b3fed818af9882ae54bf258351c2740a92aa0bb5a85478ce1d4d957e594882ece42048149b1a1a8500023c1d334d9846048bc96f309ed60715232be8ef5d1a8 languageName: node linkType: hard -"@typescript-eslint/parser@npm:latest": - version: 4.22.0 - resolution: "@typescript-eslint/parser@npm:4.22.0" +"@typescript-eslint/parser@npm:^4.28.2": + version: 4.28.2 + resolution: "@typescript-eslint/parser@npm:4.28.2" dependencies: - "@typescript-eslint/scope-manager": 4.22.0 - "@typescript-eslint/types": 4.22.0 - "@typescript-eslint/typescript-estree": 4.22.0 - debug: ^4.1.1 + "@typescript-eslint/scope-manager": 4.28.2 + "@typescript-eslint/types": 4.28.2 + "@typescript-eslint/typescript-estree": 4.28.2 + debug: ^4.3.1 peerDependencies: eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 679e14a5cec5bae3b392b1736f5d919897fd1a269a9d25366babfd12c1d275b320ae36a0b8be215ba14780cb1feec2b386001b4e0225ef82bd0040bf5dbaf99f + checksum: 4d71ddbe039007f366b6e9deca12183e45ea165053a29b64e8e4534451a134fe664fd3bf8ec06951e2afe8b5fd14143fb2ef3182a9ee8d2b20a89a3c0f4f2529 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:4.22.0": - version: 4.22.0 - resolution: "@typescript-eslint/scope-manager@npm:4.22.0" +"@typescript-eslint/scope-manager@npm:4.28.2": + version: 4.28.2 + resolution: "@typescript-eslint/scope-manager@npm:4.28.2" dependencies: - "@typescript-eslint/types": 4.22.0 - "@typescript-eslint/visitor-keys": 4.22.0 - checksum: c6f5565f517373cba61d29be919c69ad0e178f2a007eed6f1d8f80518853c3c4e6a3a059e492920b71675f0828e093eb36ec9eef318b9e2b4e9e65b0e93f03b6 + "@typescript-eslint/types": 4.28.2 + "@typescript-eslint/visitor-keys": 4.28.2 + checksum: 31c30f428ba50087fc6a8dacc00b4d007d6653f1ea261a468e0a5425d730c5bf1e87bea581494862687c294d1f2ace30813f919800a05190fa332db6cd192bef languageName: node linkType: hard -"@typescript-eslint/types@npm:4.22.0": - version: 4.22.0 - resolution: "@typescript-eslint/types@npm:4.22.0" - checksum: db2717132540feba39b002cdb2483aa822e0b50c17f9deff918a52609178df071444188a1e76c07c51018c353b01509dd741272b6d482edf7d9e7d60adc6c70e +"@typescript-eslint/types@npm:4.28.2": + version: 4.28.2 + resolution: "@typescript-eslint/types@npm:4.28.2" + checksum: 9f5e6bf3df4540adf8eb1f83909bac778257f60a6ef7fcafa7df5224949839a63dba61fe4b58de538ffe17517e88ff6b29f691209f80a55df87935bac6349f69 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:4.22.0": - version: 4.22.0 - resolution: "@typescript-eslint/typescript-estree@npm:4.22.0" +"@typescript-eslint/typescript-estree@npm:4.28.2": + version: 4.28.2 + resolution: "@typescript-eslint/typescript-estree@npm:4.28.2" dependencies: - "@typescript-eslint/types": 4.22.0 - "@typescript-eslint/visitor-keys": 4.22.0 - debug: ^4.1.1 - globby: ^11.0.1 + "@typescript-eslint/types": 4.28.2 + "@typescript-eslint/visitor-keys": 4.28.2 + debug: ^4.3.1 + globby: ^11.0.3 is-glob: ^4.0.1 - semver: ^7.3.2 - tsutils: ^3.17.1 + semver: ^7.3.5 + tsutils: ^3.21.0 peerDependenciesMeta: typescript: optional: true - checksum: 538d932361d1463c9450c155fc5696f4cc1a07db2bfd4ca9079e1f919e5062fd95d8dc128fc2fa8368c9582787cfc97ee6284083b94fe8d580cd1a9fca688efa + checksum: 4fe36863b8af9808ee86b3cf64d6076a8b9a3224f9e1c17650d06ea46d80225b7e94903f71e7330a682b84eb1045189f1f09dc896165e9cab36714d24992ee84 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:4.22.0": - version: 4.22.0 - resolution: "@typescript-eslint/visitor-keys@npm:4.22.0" +"@typescript-eslint/visitor-keys@npm:4.28.2": + version: 4.28.2 + resolution: "@typescript-eslint/visitor-keys@npm:4.28.2" dependencies: - "@typescript-eslint/types": 4.22.0 + "@typescript-eslint/types": 4.28.2 eslint-visitor-keys: ^2.0.0 - checksum: 645896d05aa757fac02d952574ecda0eecd0be120162e28533c4528bb70d2162e9df62c3547217c69f18a72ceecaf212ea585afd20f976db64b59ac6de0d1ec8 + checksum: cec563831f563bb057f00045104db7ed92576755065d7563607c5f3581e5588fe8b83229767cd81763136aeb663dd49b99e7ee24decfbfc5fc7bd7b36bb1a525 languageName: node linkType: hard @@ -792,30 +942,31 @@ __metadata: languageName: node linkType: hard -"adal-node@npm:0.2.1": - version: 0.2.1 - resolution: "adal-node@npm:0.2.1" +"adal-node@npm:0.2.2": + version: 0.2.2 + resolution: "adal-node@npm:0.2.2" dependencies: "@types/node": ^8.0.47 async: ^2.6.3 + axios: ^0.21.1 date-utils: "*" jws: 3.x.x - request: ^2.88.0 underscore: ">= 1.3.1" uuid: ^3.1.0 xmldom: ">= 0.1.x" xpath.js: ~1.1.0 - checksum: 93cbb8a159873865996194cbc0ef2036927622c8ff21d2be0b093a476785b6d31e97cba80bc23fdd4ff0714aae62a43f507e3742a7c27e5ced92078519ecd554 + checksum: eafd8acda0ff50d57ce5939a801f6d72596aaeea26798d3ca006af713abd124d942f1a83d338c1472c23ca743b1940a7dc27e67b0bd63efb44e0568f6c2a96a8 languageName: node linkType: hard -"adaptive-expressions@npm:4.13.4": - version: 4.13.4 - resolution: "adaptive-expressions@npm:4.13.4" +"adaptive-expressions@npm:4.14.0": + version: 4.14.0 + resolution: "adaptive-expressions@npm:4.14.0" dependencies: "@microsoft/recognizers-text-data-types-timex-expression": 1.3.0 "@types/atob-lite": ^2.0.0 "@types/btoa-lite": ^1.0.0 + "@types/lodash.isequal": ^4.5.5 "@types/lru-cache": ^5.1.0 "@types/xmldom": ^0.1.30 antlr4ts: 0.5.0-alpha.3 @@ -825,13 +976,14 @@ __metadata: d3-format: ^1.4.4 dayjs: ^1.10.3 jspath: ^0.4.0 + lodash.isequal: ^4.5.0 lru-cache: ^5.1.1 uuid: ^8.3.2 x2js: ^3.4.0 xml2js: ^0.4.23 xmldom: ^0.5.0 xpath: ^0.0.32 - checksum: fc5a86ec925509d28275eec36a9285e8beb67a6b5b670de77a858ab9ea95cb03b53737f3dc657f4d5ce90275d60c7a98fef0c72dbb9ac69756c66e8678757e57 + checksum: de9b382e92ffe2bea6236ad40a19e73ab797e65943180e54392159c1731f3dc2138dda1d1af81c51bcc36e9a41410f64783f3ca13085933d36cbb2826e3a55b0 languageName: node linkType: hard @@ -859,6 +1011,18 @@ __metadata: languageName: node linkType: hard +"ajv@npm:^8.0.1": + version: 8.6.1 + resolution: "ajv@npm:8.6.1" + dependencies: + fast-deep-equal: ^3.1.1 + json-schema-traverse: ^1.0.0 + require-from-string: ^2.0.2 + uri-js: ^4.2.2 + checksum: 9abb66b4ced54f0e955313387183615028df1affc28859332d5d935258e391ead880ad5a4e5c59e3b82367486b3824faefdaf7b87cfd3a5b6629f14e8edc2fd7 + languageName: node + linkType: hard + "ansi-colors@npm:4.1.1, ansi-colors@npm:^4.1.1": version: 4.1.1 resolution: "ansi-colors@npm:4.1.1" @@ -945,7 +1109,7 @@ __metadata: languageName: node linkType: hard -"anymatch@npm:~3.1.1": +"anymatch@npm:~3.1.1, anymatch@npm:~3.1.2": version: 3.1.2 resolution: "anymatch@npm:3.1.2" dependencies: @@ -981,6 +1145,13 @@ __metadata: languageName: node linkType: hard +"arg@npm:^4.1.0": + version: 4.1.3 + resolution: "arg@npm:4.1.3" + checksum: 81b3b40b1529c4fbf75b12f7c3e6fb2dcce9e78072063babc169de9b4f40777788f3d2b04380f659ef676a756e03ccfbfe78adf4477353bda906295fa69dab89 + languageName: node + linkType: hard + "argparse@npm:^1.0.7": version: 1.0.10 resolution: "argparse@npm:1.0.10" @@ -1122,16 +1293,6 @@ __metadata: languageName: node linkType: hard -"assert@npm:^1.4.1": - version: 1.5.0 - resolution: "assert@npm:1.5.0" - dependencies: - object-assign: ^4.1.1 - util: 0.10.3 - checksum: 9bd01a7a574d99656d3998b95e904c35fe41c9e18b8193a4b1bb3b1df2772f4fb03bf75897093daca9d883ed888d9be5da2a9a952da6f1da9101f4147a2f00c1 - languageName: node - linkType: hard - "assign-symbols@npm:^1.0.0": version: 1.0.0 resolution: "assign-symbols@npm:1.0.0" @@ -1508,6 +1669,13 @@ __metadata: languageName: node linkType: hard +"bitwise@npm:^2.0.4": + version: 2.1.0 + resolution: "bitwise@npm:2.1.0" + checksum: 51c7ae49c2c109444c6aafaf221b86c8caf10c60c3ac0316b0cb1a76d12c8af383170bec22863bdd378ac05730a145a0026a9ce1fe2ff4925dc75c3288e45011 + languageName: node + linkType: hard + "bl@npm:^4.1.0": version: 4.1.0 resolution: "bl@npm:4.1.0" @@ -1519,156 +1687,194 @@ __metadata: languageName: node linkType: hard -"botbuilder-core@npm:4.13.4": - version: 4.13.4 - resolution: "botbuilder-core@npm:4.13.4" +"botbuilder-ai@npm:4.14.0": + version: 4.14.0 + resolution: "botbuilder-ai@npm:4.14.0" dependencies: - assert: ^1.4.1 - botbuilder-dialogs-adaptive-runtime-core: 4.13.4-preview - botbuilder-stdlib: 4.13.4-internal - botframework-connector: 4.13.4 - botframework-schema: 4.13.4 + "@azure/cognitiveservices-luis-runtime": 2.0.0 + "@azure/ms-rest-js": 1.9.1 + adaptive-expressions: 4.14.0 + botbuilder-core: 4.14.0 + botbuilder-dialogs: 4.14.0 + botbuilder-dialogs-adaptive-runtime-core: 4.14.0-preview + botbuilder-dialogs-declarative: 4.14.0-preview + botbuilder-stdlib: 4.14.0-internal + lodash: ^4.17.21 + node-fetch: ^2.6.0 + url-parse: ^1.5.1 + zod: ~1.11.17 + checksum: 1da331cc766169cf5b1a2ecca9e8c242ad51eced86656bafc134f3a53683aedb26d8bd1806e43ec14be2bba1950abbd7ef8a389b686f6d4e6339fb9eb2588f38 + languageName: node + linkType: hard + +"botbuilder-core@npm:4.14.0": + version: 4.14.0 + resolution: "botbuilder-core@npm:4.14.0" + dependencies: + botbuilder-dialogs-adaptive-runtime-core: 4.14.0-preview + botbuilder-stdlib: 4.14.0-internal + botframework-connector: 4.14.0 + botframework-schema: 4.14.0 uuid: ^8.3.2 - checksum: 6aaff87b1213008c6f3f49efb066a2866a89017bea3cf8b521842387068fafe74854f188df5a9c3753e767d9a72a9c63a1f964232f4b1bf2d9ded04dfb70efbd + zod: ~1.11.17 + checksum: b617e7fea0120460113d59062cdf12f7903eea36d7941089dfe55aae3ba4abf8b3990e09273d76a584095303c972712762a0d87263360f7b4eab3e2c5ed6e017 languageName: node linkType: hard -"botbuilder-dialogs-adaptive-runtime-core@npm:4.13.4-preview": - version: 4.13.4-preview - resolution: "botbuilder-dialogs-adaptive-runtime-core@npm:4.13.4-preview" +"botbuilder-dialogs-adaptive-runtime-core@npm:4.14.0-preview": + version: 4.14.0-preview + resolution: "botbuilder-dialogs-adaptive-runtime-core@npm:4.14.0-preview" dependencies: dependency-graph: ^0.10.0 - runtypes: ~5.1.0 - checksum: 6cd8217d06c11ed97867967986af875d3ac1c8b404bc5ed57e9a8a3111cac1d9b22918eaabbb2a4497ce45d97e86add3e75b76ddf01b015c35daabe66675b552 + checksum: 8bc38639faa59e541a32feac99d7eb3428d6a5a2071d2cdaaee3b1480224ed213cfa00f974236f76b4169848bf2189e19e4e08a1415b4646b4e58ebc3aee1da1 + languageName: node + linkType: hard + +"botbuilder-dialogs-adaptive-testing@npm:4.14.0-preview": + version: 4.14.0-preview + resolution: "botbuilder-dialogs-adaptive-testing@npm:4.14.0-preview" + dependencies: + adaptive-expressions: 4.14.0 + bitwise: ^2.0.4 + botbuilder-ai: 4.14.0 + botbuilder-core: 4.14.0 + botbuilder-dialogs: 4.14.0 + botbuilder-dialogs-adaptive: 4.14.0-preview + botbuilder-dialogs-adaptive-runtime-core: 4.14.0-preview + botbuilder-dialogs-declarative: 4.14.0-preview + botbuilder-stdlib: 4.14.0-internal + murmurhash-js: ^1.0.0 + nock: ^11.9.1 + url-parse: ^1.5.1 + checksum: 6bff035cf41273596df50a0755026a34a7b55ae31af21d2c0574b961e84d3622ae545a74db296de7df533f028daa96c563ba70df3dc864b291cccce35d4c61d2 languageName: node linkType: hard -"botbuilder-dialogs-adaptive@npm:4.13.4-preview": - version: 4.13.4-preview - resolution: "botbuilder-dialogs-adaptive@npm:4.13.4-preview" +"botbuilder-dialogs-adaptive@npm:4.14.0-preview": + version: 4.14.0-preview + resolution: "botbuilder-dialogs-adaptive@npm:4.14.0-preview" dependencies: "@microsoft/recognizers-text-suite": 1.1.4 - adaptive-expressions: 4.13.4 - botbuilder: 4.13.4 - botbuilder-dialogs: 4.13.4 - botbuilder-dialogs-adaptive-runtime-core: 4.13.4-preview - botbuilder-dialogs-declarative: 4.13.4-preview - botbuilder-lg: 4.13.4 - botframework-connector: 4.13.4 - botframework-schema: 4.13.4 + adaptive-expressions: 4.14.0 + botbuilder: 4.14.0 + botbuilder-dialogs: 4.14.0 + botbuilder-dialogs-adaptive-runtime-core: 4.14.0-preview + botbuilder-dialogs-declarative: 4.14.0-preview + botbuilder-lg: 4.14.0 lodash: ^4.17.21 node-fetch: ^2.6.0 - checksum: d11907e44030b3dc2ed1c822679de512642ec1d0ad222d4e318292922c45d36cd37d82645f9835c4928065aca5cc75ab11f2e34aea124baac2b7ac6c0ab86686 + checksum: 622237a71b8f63e8cb5e536910a0e6997dc47c1f130c09877d134dd9909873fb1a12677e4d3228c97ae7a4dd1933cdd2314c4a1c5dda059ff879687eec151ecc languageName: node linkType: hard -"botbuilder-dialogs-declarative@npm:4.13.4-preview": - version: 4.13.4-preview - resolution: "botbuilder-dialogs-declarative@npm:4.13.4-preview" +"botbuilder-dialogs-declarative@npm:4.14.0-preview": + version: 4.14.0-preview + resolution: "botbuilder-dialogs-declarative@npm:4.14.0-preview" dependencies: - botbuilder-core: 4.13.4 - botbuilder-dialogs: 4.13.4 - botbuilder-stdlib: 4.13.4-internal + botbuilder-core: 4.14.0 + botbuilder-dialogs: 4.14.0 + botbuilder-stdlib: 4.14.0-internal chokidar: ^3.4.0 - checksum: e18d637ca5cff9d0df34d813ac57108a617bc989dc37ae85130a2dc8756e11bb695fa47b8283fea8e629f47acae65d067ef9bd064411e8d27fc82d0e053e4d15 + checksum: 25863f1a2e4edd5982a5d103c44aa8f66c2ff16adf07a2fff8d49c48084f2c2143470478b978fbae0c6c82cf2f88e6fcd82a6887453f53526d186bd96d462c50 languageName: node linkType: hard -"botbuilder-dialogs@npm:4.13.4": - version: 4.13.4 - resolution: "botbuilder-dialogs@npm:4.13.4" +"botbuilder-dialogs@npm:4.14.0": + version: 4.14.0 + resolution: "botbuilder-dialogs@npm:4.14.0" dependencies: "@microsoft/recognizers-text-choice": 1.1.4 "@microsoft/recognizers-text-date-time": 1.1.4 "@microsoft/recognizers-text-number": 1.1.4 "@microsoft/recognizers-text-suite": 1.1.4 - botbuilder-core: 4.13.4 - botbuilder-dialogs-adaptive-runtime-core: 4.13.4-preview - botbuilder-stdlib: 4.13.4-internal - botframework-connector: 4.13.4 + botbuilder-core: 4.14.0 + botbuilder-dialogs-adaptive-runtime-core: 4.14.0-preview + botbuilder-stdlib: 4.14.0-internal + botframework-connector: 4.14.0 globalize: ^1.4.2 lodash: ^4.17.21 - runtypes: ~5.1.0 - uuid: ^8.3.2 - checksum: b7ac611bbf67946d0e32383a2df03c8b16f15d80850bb2e235686d588150c015db8d3c1475cad7d452c03d61ac8c5d0e70e30e86508489936e9862090da9cbe7 + zod: ~1.11.17 + checksum: c1f58e6b4bddeeea500f5bea3e1552478b39e11ea679f7d7771cf1bfb29cb79df627ac8405f3997a713338dde6861e0c465e4ab5fa78bf817264b5e49132a56a languageName: node linkType: hard -"botbuilder-lg@npm:4.13.4": - version: 4.13.4 - resolution: "botbuilder-lg@npm:4.13.4" +"botbuilder-lg@npm:4.14.0": + version: 4.14.0 + resolution: "botbuilder-lg@npm:4.14.0" dependencies: - adaptive-expressions: 4.13.4 + adaptive-expressions: 4.14.0 antlr4ts: 0.5.0-alpha.3 lodash: ^4.17.19 - path: ^0.12.7 uuid: ^8.3.2 - checksum: d1788d7ad6cc6fc64d818b89200e7d65b2a3e62e26267838b6b5861030f46fd54250bb46e6aa6da4c04425e317c002c51d00d09c22b894468cecd27ab20c4ee6 + checksum: b7602b0fabdb80994c6949f78fcd6f467917799586d857be37add227a8c261a6b4e4b24ad4d12e41ab458c062fa6fe68cb0bdb8cffa0f4f60b5ef7ea291add08 languageName: node linkType: hard -"botbuilder-stdlib@npm:4.13.4-internal": - version: 4.13.4-internal - resolution: "botbuilder-stdlib@npm:4.13.4-internal" - checksum: c6dd92a039fcca421841d9c0ebec88438152edcc8cab6ef16b2e3653c0cee5d287b4b0df02117c24b51af72a13c095c0b25e34fe2631cd5572addc15a8b735ce +"botbuilder-stdlib@npm:4.14.0-internal": + version: 4.14.0-internal + resolution: "botbuilder-stdlib@npm:4.14.0-internal" + checksum: e38630a1ae535c06422033b1301b764977cfd06259904d25c6a8bd72a676865c456fcdb792ce3abf03a3bb508bb212ab93a4b81702a32384cf297abe7dc9b8d4 languageName: node linkType: hard -"botbuilder@npm:4.13.4": - version: 4.13.4 - resolution: "botbuilder@npm:4.13.4" +"botbuilder@npm:4.14.0": + version: 4.14.0 + resolution: "botbuilder@npm:4.14.0" dependencies: "@azure/ms-rest-js": 1.9.1 axios: ^0.21.1 - botbuilder-core: 4.13.4 - botbuilder-dialogs-adaptive-runtime-core: 4.13.4-preview - botbuilder-stdlib: 4.13.4-internal - botframework-connector: 4.13.4 - botframework-streaming: 4.13.4 + botbuilder-core: 4.14.0 + botbuilder-stdlib: 4.14.0-internal + botframework-connector: 4.14.0 + botframework-streaming: 4.14.0 dayjs: ^1.10.3 filenamify: ^4.1.0 fs-extra: ^7.0.1 htmlparser2: ^6.0.1 uuid: ^8.3.2 - checksum: 20b1ca64457e1c371401f3e79476d4395f829ef7c74ef529958d2a58f90c214f68e679c7c9d73beeee1ec94fda2ad41ad017778a9d05c55c11a0b36a5b11573e + zod: ~1.11.17 + checksum: a916227bc341fc106be36f8fde60f7e83ebb8e05014d5c314c0a515711cd70595615d183989286557bad1ef08a5ad923a4bb03758a03cbc28440facafb9b0932 languageName: node linkType: hard -"botframework-connector@npm:4.13.4": - version: 4.13.4 - resolution: "botframework-connector@npm:4.13.4" +"botframework-connector@npm:4.14.0": + version: 4.14.0 + resolution: "botframework-connector@npm:4.14.0" dependencies: "@azure/ms-rest-js": 1.9.1 "@types/jsonwebtoken": 7.2.8 "@types/node": ^10.17.27 - adal-node: 0.2.1 + adal-node: 0.2.2 + axios: ^0.21.1 base64url: ^3.0.0 - botframework-schema: 4.13.4 + botbuilder-stdlib: 4.14.0-internal + botframework-schema: 4.14.0 cross-fetch: ^3.0.5 jsonwebtoken: 8.0.1 rsa-pem-from-mod-exp: ^0.8.4 - checksum: 2d1ab8b2fd4af68634cb23e31014bbc5464abfe4d76722a275a551a0b81819f15ee89bc343a8a1b918498aecb062020d638a0b2ed3c660169bd005443986dc1d + checksum: 565e2475524cd3ee3d2e4ddd83890e58a15e68f128daf9be5ad943e38c3088e8ed1a7f04c082825059a83fb007106ec1047e90aec19235665c27a526d0e9443e languageName: node linkType: hard -"botframework-schema@npm:4.13.4": - version: 4.13.4 - resolution: "botframework-schema@npm:4.13.4" +"botframework-schema@npm:4.14.0": + version: 4.14.0 + resolution: "botframework-schema@npm:4.14.0" dependencies: - botbuilder-stdlib: 4.13.4-internal - checksum: 5cf0ec42293396802b083e8099077fcb86e40ab41efd4b955aeb76253754b50f35e7d602bf3d88dafb90586bc05ad1d55d959f793333fce6f522d831a1e487ac + botbuilder-stdlib: 4.14.0-internal + uuid: ^8.3.2 + checksum: fd86f0a6eb5be4f84c90bdb58de20129fdd92138652aaebc4cc29ccdf7e0f7944e85c1c007ecb654d576b734fce984466ff2d7edc2f98c344f1210b23f0badf1 languageName: node linkType: hard -"botframework-streaming@npm:4.13.4": - version: 4.13.4 - resolution: "botframework-streaming@npm:4.13.4" +"botframework-streaming@npm:4.14.0": + version: 4.14.0 + resolution: "botframework-streaming@npm:4.14.0" dependencies: "@types/node": ^10.17.27 "@types/ws": ^6.0.3 uuid: ^8.3.2 ws: ^7.1.2 - checksum: b85af5123e04968e5cf89518f643531b15e33da0a42153b33ff8f6f39aebe6b2a5083707c6c6a87a45d755a5f6243216acaee9d3ca24338d2d207c6af05f4f4e + checksum: c23f75c1ddd95f2265bbf77c68ba0c188492398daaa0cda1cab113e9d22dcf63aec1831a5ce1df7382b91f20c0202c12e9afa4c6de799d64690825d3c3b5f76a languageName: node linkType: hard @@ -1991,6 +2197,25 @@ __metadata: languageName: node linkType: hard +"chokidar@npm:3.5.2": + version: 3.5.2 + resolution: "chokidar@npm:3.5.2" + dependencies: + anymatch: ~3.1.2 + braces: ~3.0.2 + fsevents: ~2.3.2 + glob-parent: ~5.1.2 + is-binary-path: ~2.1.0 + is-glob: ~4.0.1 + normalize-path: ~3.0.0 + readdirp: ~3.6.0 + dependenciesMeta: + fsevents: + optional: true + checksum: 52fbff3acebf06ec0125872110f6c8403e66cd3d613264c83405496e199554d99380342d9b3a7ffd7910c53c5865e242ed7dd72fcb2e883d8e3ad3f3883aee6c + languageName: node + linkType: hard + "chownr@npm:^2.0.0": version: 2.0.0 resolution: "chownr@npm:2.0.0" @@ -2292,6 +2517,13 @@ __metadata: languageName: node linkType: hard +"create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: babd307893abfb26d77ae11cb9d6b6cfa6d18c9cee435cf70b5a3fb44aa8d90c9ec26ea89cbb16e0a94b8d34f5fcaee164b90ed526cdd3158955673ab9652d01 + languageName: node + linkType: hard + "cross-fetch@npm:^3.0.5": version: 3.1.4 resolution: "cross-fetch@npm:3.1.4" @@ -2433,7 +2665,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^4.0.1, debug@npm:^4.1.0": +"debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.3.1": version: 4.3.2 resolution: "debug@npm:4.3.2" dependencies: @@ -2864,7 +3096,7 @@ __metadata: languageName: node linkType: hard -"escape-string-regexp@npm:4.0.0": +"escape-string-regexp@npm:4.0.0, escape-string-regexp@npm:^4.0.0": version: 4.0.0 resolution: "escape-string-regexp@npm:4.0.0" checksum: c747be8d5ff7873127e3e0cffe7d2206a37208077fa9c30a3c1bb4f26bebd081c8c24d5fba7a99449f9d20670bea3dc5e1b6098b0f074b099bd38766271a272f @@ -2930,7 +3162,7 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^5.0.0, eslint-scope@npm:^5.1.1": +"eslint-scope@npm:^5.1.1": version: 5.1.1 resolution: "eslint-scope@npm:5.1.1" dependencies: @@ -2940,7 +3172,7 @@ __metadata: languageName: node linkType: hard -"eslint-utils@npm:^2.0.0, eslint-utils@npm:^2.1.0": +"eslint-utils@npm:^2.1.0": version: 2.1.0 resolution: "eslint-utils@npm:2.1.0" dependencies: @@ -2949,6 +3181,17 @@ __metadata: languageName: node linkType: hard +"eslint-utils@npm:^3.0.0": + version: 3.0.0 + resolution: "eslint-utils@npm:3.0.0" + dependencies: + eslint-visitor-keys: ^2.0.0 + peerDependencies: + eslint: ">=5" + checksum: 035451529f016e28edd26e8951f15e28a6a4e58adff67bd0cb494879f360080750b9c779e46561369aec0657ac2b89dd8b0aa38476e8cdf50e635aa872fa27b6 + languageName: node + linkType: hard + "eslint-visitor-keys@npm:^1.1.0, eslint-visitor-keys@npm:^1.3.0": version: 1.3.0 resolution: "eslint-visitor-keys@npm:1.3.0" @@ -2963,6 +3206,56 @@ __metadata: languageName: node linkType: hard +"eslint@npm:^7.30.0": + version: 7.30.0 + resolution: "eslint@npm:7.30.0" + dependencies: + "@babel/code-frame": 7.12.11 + "@eslint/eslintrc": ^0.4.2 + "@humanwhocodes/config-array": ^0.5.0 + ajv: ^6.10.0 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.0.1 + doctrine: ^3.0.0 + enquirer: ^2.3.5 + escape-string-regexp: ^4.0.0 + eslint-scope: ^5.1.1 + eslint-utils: ^2.1.0 + eslint-visitor-keys: ^2.0.0 + espree: ^7.3.1 + esquery: ^1.4.0 + esutils: ^2.0.2 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^6.0.1 + functional-red-black-tree: ^1.0.1 + glob-parent: ^5.1.2 + globals: ^13.6.0 + ignore: ^4.0.6 + import-fresh: ^3.0.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + js-yaml: ^3.13.1 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.4.1 + lodash.merge: ^4.6.2 + minimatch: ^3.0.4 + natural-compare: ^1.4.0 + optionator: ^0.9.1 + progress: ^2.0.0 + regexpp: ^3.1.0 + semver: ^7.2.1 + strip-ansi: ^6.0.0 + strip-json-comments: ^3.1.0 + table: ^6.0.9 + text-table: ^0.2.0 + v8-compile-cache: ^2.0.3 + bin: + eslint: bin/eslint.js + checksum: 028048847e0252d6c972ac612fe37be55822ae2255d10d1bf68255749f7ae1364b2aa538cd95f3bc4d951fc7d36195e46b62fe8d215297ef9a6a8aeb8ca28a90 + languageName: node + linkType: hard + "eslint@npm:latest": version: 7.21.0 resolution: "eslint@npm:7.21.0" @@ -3252,7 +3545,7 @@ __metadata: languageName: node linkType: hard -"fast-deep-equal@npm:^3.1.1": +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" checksum: 451526766b219503131d11e823eaadd1533080b0be4860e316670b039dcaf31cd1007c2fe036a9b922abba7c040dfad5e942ed79d21f2ff849e50049f36e0fb7 @@ -3641,7 +3934,7 @@ fsevents@^1.2.3: languageName: node linkType: hard -"fsevents@patch:fsevents@~2.3.1#builtin": +"fsevents@patch:fsevents@~2.3.1#builtin, fsevents@patch:fsevents@~2.3.2#builtin": version: 2.3.2 resolution: "fsevents@patch:fsevents@npm%3A2.3.2#builtin::version=2.3.2&hash=11e9ea" dependencies: @@ -3650,7 +3943,7 @@ fsevents@^1.2.3: languageName: node linkType: hard -fsevents@~2.3.1: +"fsevents@~2.3.1, fsevents@~2.3.2": version: 2.3.2 resolution: "fsevents@npm:2.3.2" dependencies: @@ -3841,7 +4134,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"glob-parent@npm:^5.0.0, glob-parent@npm:^5.1.0, glob-parent@npm:~5.1.0": +"glob-parent@npm:^5.0.0, glob-parent@npm:^5.1.0, glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.0, glob-parent@npm:~5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" dependencies: @@ -3871,6 +4164,20 @@ fsevents@~2.3.1: languageName: node linkType: hard +"glob@npm:7.1.7": + version: 7.1.7 + resolution: "glob@npm:7.1.7" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.0.4 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: 352f74f08247db5420161a2f68f2bd84b53228b5fcfc9dcc37cd54d3f19ec0232495d84aeff1286d0727059e9fdc1031400e00b971bdc59e30f8f82b199c9d02 + languageName: node + linkType: hard + "globalize@npm:^1.4.2": version: 1.6.0 resolution: "globalize@npm:1.6.0" @@ -3889,6 +4196,15 @@ fsevents@~2.3.1: languageName: node linkType: hard +"globals@npm:^13.6.0, globals@npm:^13.9.0": + version: 13.10.0 + resolution: "globals@npm:13.10.0" + dependencies: + type-fest: ^0.20.2 + checksum: ae5f8d4ef26b845a3d2a370a0dd0b7cc8bce09d11bf75dbde8dce8a0855e8ad4f34613090eaad8e71d24fb01fe00d8b2708533b32da08f104c0ddd19b70219f1 + languageName: node + linkType: hard + "globals@npm:^9.18.0": version: 9.18.0 resolution: "globals@npm:9.18.0" @@ -3896,9 +4212,9 @@ fsevents@~2.3.1: languageName: node linkType: hard -"globby@npm:^11.0.1, globby@npm:^11.0.3": - version: 11.0.3 - resolution: "globby@npm:11.0.3" +"globby@npm:^11.0.2": + version: 11.0.2 + resolution: "globby@npm:11.0.2" dependencies: array-union: ^2.1.0 dir-glob: ^3.0.1 @@ -3906,13 +4222,13 @@ fsevents@~2.3.1: ignore: ^5.1.4 merge2: ^1.3.0 slash: ^3.0.0 - checksum: f17da0f869918656ec8c16c15ad100f025fbd13e4c157286cf340811eb1355a7d06dde77be1685a7a051970ec6abeff96a9b2a1a97525f84bc94fbd518c1d1db + checksum: d23f2a6b8897b97fb27422cde243e0fd406ebbaa821929293b27c977d169884f8112494cda4f456a51d0ec1e133e3ac703ec24bfed484e327305ea34a665eb06 languageName: node linkType: hard -"globby@npm:^11.0.2": - version: 11.0.2 - resolution: "globby@npm:11.0.2" +"globby@npm:^11.0.3": + version: 11.0.3 + resolution: "globby@npm:11.0.3" dependencies: array-union: ^2.1.0 dir-glob: ^3.0.1 @@ -3920,7 +4236,7 @@ fsevents@~2.3.1: ignore: ^5.1.4 merge2: ^1.3.0 slash: ^3.0.0 - checksum: d23f2a6b8897b97fb27422cde243e0fd406ebbaa821929293b27c977d169884f8112494cda4f456a51d0ec1e133e3ac703ec24bfed484e327305ea34a665eb06 + checksum: f17da0f869918656ec8c16c15ad100f025fbd13e4c157286cf340811eb1355a7d06dde77be1685a7a051970ec6abeff96a9b2a1a97525f84bc94fbd518c1d1db languageName: node linkType: hard @@ -4377,20 +4693,6 @@ fsevents@~2.3.1: languageName: node linkType: hard -"inherits@npm:2.0.1": - version: 2.0.1 - resolution: "inherits@npm:2.0.1" - checksum: 6f59f627a64cff6f4b5a2723184d831e6fc376cf88b8a94821caa2cad9d44da6d79583335024c01a541d9a25767785928a28f6e2192bb14be9ce800b315b4faa - languageName: node - linkType: hard - -"inherits@npm:2.0.3": - version: 2.0.3 - resolution: "inherits@npm:2.0.3" - checksum: 9488f9433effbc24474f6baee8014e5337c7f99305ecb4204fa5864ae7655c24225780d87fc65ed8d3d374715a18c5dc8c69fe3bf9745cde2e7acd0ac068a07b - languageName: node - linkType: hard - "ini@npm:~1.3.0": version: 1.3.8 resolution: "ini@npm:1.3.8" @@ -5530,6 +5832,17 @@ fsevents@~2.3.1: languageName: node linkType: hard +"js-yaml@npm:4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: 8973cf4296c944cc2551d1e3d3d064e7de0d0a6db3f7bafe40339ee9e5e0329560b52c4b8492b9b22365404c9be0822b62340ab49884e1dedfcc7ff80158abe0 + languageName: node + linkType: hard + "js-yaml@npm:^3.13.1, js-yaml@npm:^3.7.0": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" @@ -5641,7 +5954,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"json-stringify-safe@npm:~5.0.1": +"json-stringify-safe@npm:^5.0.1, json-stringify-safe@npm:~5.0.1": version: 5.0.1 resolution: "json-stringify-safe@npm:5.0.1" checksum: 261dfb8eb3e72c8b0dda11fd7c20c151ffc1d1b03e529245d51708c8dd8d8c6a225880464adf41a570dff6e5c805fd9d1f47fed948cfb526e4fbe5a67ce4e5f4 @@ -5902,6 +6215,13 @@ fsevents@~2.3.1: languageName: node linkType: hard +"lodash.clonedeep@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.clonedeep@npm:4.5.0" + checksum: 41e2fe4c57c56a66a4775a6ddeebe9272f0ce4d257d97b3cb8724a9b01eeec9b09ce7e8603d6926baf5f48c287d988f0de4bf5aa244ea86b1f22c1e6f203cc27 + languageName: node + linkType: hard + "lodash.escaperegexp@npm:^4.1.2": version: 4.1.2 resolution: "lodash.escaperegexp@npm:4.1.2" @@ -5979,6 +6299,13 @@ fsevents@~2.3.1: languageName: node linkType: hard +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: 4e2bb42a87a148991458d7c384bc197e96f7115e9536fc8e2c86ae9e99ce1c1f693ff15eb85761952535f48d72253aed8e673d9f32dde3e671cd91e3fde220a7 + languageName: node + linkType: hard + "lodash.once@npm:^4.0.0": version: 4.1.1 resolution: "lodash.once@npm:4.1.1" @@ -5986,6 +6313,13 @@ fsevents@~2.3.1: languageName: node linkType: hard +"lodash.set@npm:^4.3.2": + version: 4.3.2 + resolution: "lodash.set@npm:4.3.2" + checksum: 4dfedacae1c1cf86385a2b6e30ba538f06c90d703a0abd83a11432d80ec24b4016fe27359cdc0554a02a31a468789cbb282801dd755e54581cf0295477e2341d + languageName: node + linkType: hard + "lodash.sortby@npm:^4.7.0": version: 4.7.0 resolution: "lodash.sortby@npm:4.7.0" @@ -6007,6 +6341,13 @@ fsevents@~2.3.1: languageName: node linkType: hard +"lodash.truncate@npm:^4.4.2": + version: 4.4.2 + resolution: "lodash.truncate@npm:4.4.2" + checksum: b1b0d7d993bb73d0032fe909d4523a836b6aa91566fa88ff78c3eac008bd3d3b2ba0f2e8381d7f906b1d6913a64982f34bea95dd556355c0d418bfddf3ab7b06 + languageName: node + linkType: hard + "lodash.zip@npm:^4.0.0": version: 4.2.0 resolution: "lodash.zip@npm:4.2.0" @@ -6014,7 +6355,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.3.0": +"lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.13, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.3.0": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: 4983720b9abca930a4a46f18db163d7dad8dd00dbed6db0cc7b499b33b717cce69f80928b27bbb1ff2cbd3b19d251ee90669a8b5ea466072ca81c2ebe91e7468 @@ -6030,16 +6371,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"log-symbols@npm:^2.2.0": - version: 2.2.0 - resolution: "log-symbols@npm:2.2.0" - dependencies: - chalk: ^2.0.1 - checksum: e2dfd255f3e3080134055597fb67bd67798d65383488683ed90f0376f7264dd21028f30d4c3a0686251dcfc4dc71172e8061cef21e89c6deabb8b375450d5166 - languageName: node - linkType: hard - -"log-symbols@npm:^4.1.0": +"log-symbols@npm:4.1.0, log-symbols@npm:^4.1.0": version: 4.1.0 resolution: "log-symbols@npm:4.1.0" dependencies: @@ -6049,6 +6381,15 @@ fsevents@~2.3.1: languageName: node linkType: hard +"log-symbols@npm:^2.2.0": + version: 2.2.0 + resolution: "log-symbols@npm:2.2.0" + dependencies: + chalk: ^2.0.1 + checksum: e2dfd255f3e3080134055597fb67bd67798d65383488683ed90f0376f7264dd21028f30d4c3a0686251dcfc4dc71172e8061cef21e89c6deabb8b375450d5166 + languageName: node + linkType: hard + "lolex@npm:^2.4.2": version: 2.7.5 resolution: "lolex@npm:2.7.5" @@ -6126,6 +6467,13 @@ fsevents@~2.3.1: languageName: node linkType: hard +"make-error@npm:^1.1.1": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: 2c780bab8409b865e8ee86697c599a2bf2765ec64d21eb67ccda27050e039f983feacad05a0d43aba3c966ea03d305d2612e94fec45474bcbc61181f57c5bb88 + languageName: node + linkType: hard + "makeerror@npm:1.0.x": version: 1.0.11 resolution: "makeerror@npm:1.0.11" @@ -6507,6 +6855,42 @@ fsevents@~2.3.1: languageName: node linkType: hard +"mocha@npm:^9.0.2": + version: 9.0.2 + resolution: "mocha@npm:9.0.2" + dependencies: + "@ungap/promise-all-settled": 1.1.2 + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.2 + debug: 4.3.1 + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.1.7 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 3.0.4 + ms: 2.1.3 + nanoid: 3.1.23 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + which: 2.0.2 + wide-align: 1.1.3 + workerpool: 6.1.5 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + bin: + _mocha: bin/_mocha + mocha: bin/mocha + checksum: 305d820f2e7237f54c2c034198978c1ef7c0cf99ddf0c511c8e65e0d7cd00a2b87f7826dc91afa080473152159c1402f419f18d67f831dc55ebc84710ee97823 + languageName: node + linkType: hard + "moment@npm:^2.15.1, moment@npm:^2.24.0": version: 2.29.1 resolution: "moment@npm:2.29.1" @@ -6573,6 +6957,13 @@ fsevents@~2.3.1: languageName: node linkType: hard +"murmurhash-js@npm:^1.0.0": + version: 1.0.0 + resolution: "murmurhash-js@npm:1.0.0" + checksum: 7b0f02796fde7a6fe0e41ed3197b758e6824f33b284a5cbdcca0942e629d34309a4e344760204ad5503dc1d75f9ba7574b72406ac654dc56ab69f22b1e9ee821 + languageName: node + linkType: hard + "mute-stream@npm:0.0.7": version: 0.0.7 resolution: "mute-stream@npm:0.0.7" @@ -6605,6 +6996,15 @@ fsevents@~2.3.1: languageName: node linkType: hard +"nanoid@npm:3.1.23": + version: 3.1.23 + resolution: "nanoid@npm:3.1.23" + bin: + nanoid: bin/nanoid.cjs + checksum: e6dea1da5a593ffdc8cf2676d1d02f0626f07a54a5947a7a1f5ff1fd07901b2f53044c285e98b87eb367f016fde285fd8785d54a2dceeab9c3721f4e618f8326 + languageName: node + linkType: hard + "nanomatch@npm:^1.2.9": version: 1.2.13 resolution: "nanomatch@npm:1.2.13" @@ -6671,6 +7071,31 @@ fsevents@~2.3.1: languageName: node linkType: hard +"nock@npm:^11.9.1": + version: 11.9.1 + resolution: "nock@npm:11.9.1" + dependencies: + debug: ^4.1.0 + json-stringify-safe: ^5.0.1 + lodash: ^4.17.13 + mkdirp: ^0.5.0 + propagate: ^2.0.0 + checksum: 4cbbe7ee50d7a1514c60dfdbd40e10b9ec51035b8f0282dbb1bdd795ae2dd6d8612713b5edcf7fb1034f2d6b4449f672be71880702f1f5d36e06b0e718731ffc + languageName: node + linkType: hard + +"nock@npm:^13.1.1": + version: 13.1.1 + resolution: "nock@npm:13.1.1" + dependencies: + debug: ^4.1.0 + json-stringify-safe: ^5.0.1 + lodash.set: ^4.3.2 + propagate: ^2.0.0 + checksum: fa118c2c62a432b4665fa2a8fe549959ba41666bebf5939873a0fbc3a860310580272de74b3ea9538758a7f08dddd807edf35f162854763a0056f2ed892b210f + languageName: node + linkType: hard + "node-fetch@npm:2.6.1, node-fetch@npm:^2.6.0": version: 2.6.1 resolution: "node-fetch@npm:2.6.1" @@ -6845,7 +7270,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": +"object-assign@npm:^4.1.0": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: 66cf021898fc1b13ea573ea8635fbd5a76533f50cecbc2fcd5eee1e8029af41bcebe7023788b6d0e06cbe4401ecea075d972f78ec74467cdc571a0f1a4d1a081 @@ -7322,16 +7747,6 @@ fsevents@~2.3.1: languageName: node linkType: hard -"path@npm:^0.12.7": - version: 0.12.7 - resolution: "path@npm:0.12.7" - dependencies: - process: ^0.11.1 - util: ^0.10.3 - checksum: 0e2d3342ca6f91aba8e514919cae8a08ad12071297a3a99da6e3ea493f5296d9bb323ca9bece4d035fc280e91b701a740ce1e48ff65802004deaaae2f2cd623e - languageName: node - linkType: hard - "performance-now@npm:^2.1.0": version: 2.1.0 resolution: "performance-now@npm:2.1.0" @@ -7504,13 +7919,6 @@ fsevents@~2.3.1: languageName: node linkType: hard -"process@npm:^0.11.1": - version: 0.11.10 - resolution: "process@npm:0.11.10" - checksum: ed93a85e9185b40fb01788c588a87c1a9da0eb925ef7cebebbe1b8bbf0eba1802130366603a29e3b689c116969d4fe018de6aed3474bbeb5aefb3716b85d6449 - languageName: node - linkType: hard - "progress@npm:^2.0.0": version: 2.0.3 resolution: "progress@npm:2.0.3" @@ -7528,6 +7936,13 @@ fsevents@~2.3.1: languageName: node linkType: hard +"propagate@npm:^2.0.0": + version: 2.0.1 + resolution: "propagate@npm:2.0.1" + checksum: dd67518106bb3f1ee230b7e246a18285467e010b89703844f120c38e1462b52d79bddd4be0f8db080377a3d55218209674eae9eb672c29a033bf6b44cfc42828 + languageName: node + linkType: hard + "psl@npm:^1.1.28": version: 1.8.0 resolution: "psl@npm:1.8.0" @@ -7570,6 +7985,13 @@ fsevents@~2.3.1: languageName: node linkType: hard +"querystringify@npm:^2.1.1": + version: 2.2.0 + resolution: "querystringify@npm:2.2.0" + checksum: 6235036be3aedff7919dfc06b23f759264915c5794c6352d52a917401d40d2b9bb43b1d82e4e5be983e469aa320e06992aefc218192f6fa1d9eba4f54dc4786c + languageName: node + linkType: hard + "queue-microtask@npm:^1.2.2": version: 1.2.2 resolution: "queue-microtask@npm:1.2.2" @@ -7740,6 +8162,15 @@ fsevents@~2.3.1: languageName: node linkType: hard +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: ^2.2.1 + checksum: 7da2fe8d5abf17ae0bf97a052718e16d29fa185f3e461153035728d93642326ae8e44c17b9a9b3a5fa616dff160e96be3184e0323efaac7211f80c0aab5f622b + languageName: node + linkType: hard + "realpath-native@npm:^1.0.0": version: 1.1.0 resolution: "realpath-native@npm:1.1.0" @@ -7784,7 +8215,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"regexpp@npm:^3.0.0, regexpp@npm:^3.1.0": +"regexpp@npm:^3.1.0": version: 3.1.0 resolution: "regexpp@npm:3.1.0" checksum: 69d0ce6b449cf35d3732d6341a1e70850360ffc619f8eef10629871c462e614853fffb80d3f00fc17cd0bb5b8f34b0cde5be4b434e72c0eb3fbba2360c8b5ac4 @@ -7861,7 +8292,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"request@npm:^2.87.0, request@npm:^2.88.0, request@npm:^2.88.2": +"request@npm:^2.87.0, request@npm:^2.88.2": version: 2.88.2 resolution: "request@npm:2.88.2" dependencies: @@ -7910,6 +8341,13 @@ fsevents@~2.3.1: languageName: node linkType: hard +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: 0db25fb2ac9b4f2345a350846b7ba99d1f25a6686b1728246d14f05450c8f2fc066bdfae4561b4be2627c184a030a27e17268cfefdf46836e271db13734bc49e + languageName: node + linkType: hard + "resolve-cwd@npm:^2.0.0": version: 2.0.0 resolution: "resolve-cwd@npm:2.0.0" @@ -8205,6 +8643,17 @@ resolve@1.1.7: languageName: node linkType: hard +"semver@npm:^7.3.5": + version: 7.3.5 + resolution: "semver@npm:7.3.5" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: c53624ddf4b9779bcbf55a1eb8b37074cc44bfeca416f3cc263429408202a8a3c59b00eef8c647d697303bc39b95c022a5c61959221d3814bfb1270ff7c14986 + languageName: node + linkType: hard + "serialize-javascript@npm:5.0.1": version: 5.0.1 resolution: "serialize-javascript@npm:5.0.1" @@ -8214,6 +8663,15 @@ resolve@1.1.7: languageName: node linkType: hard +"serialize-javascript@npm:6.0.0": + version: 6.0.0 + resolution: "serialize-javascript@npm:6.0.0" + dependencies: + randombytes: ^2.1.0 + checksum: e086a40bfcb9d341c37a4e52bc200d143b54397cf1bb486f38cd40cdbaac4b82437d981472df94dbcff6334269e0d82daffbd6b75dd50fe54a5a5da2273f2360 + languageName: node + linkType: hard + "set-blocking@npm:^2.0.0, set-blocking@npm:~2.0.0": version: 2.0.0 resolution: "set-blocking@npm:2.0.0" @@ -8445,7 +8903,7 @@ resolve@1.1.7: languageName: node linkType: hard -"source-map-support@npm:^0.5.6": +"source-map-support@npm:^0.5.17, source-map-support@npm:^0.5.6": version: 0.5.19 resolution: "source-map-support@npm:0.5.19" dependencies: @@ -8835,6 +9293,20 @@ resolve@1.1.7: languageName: node linkType: hard +"table@npm:^6.0.9": + version: 6.7.1 + resolution: "table@npm:6.7.1" + dependencies: + ajv: ^8.0.1 + lodash.clonedeep: ^4.5.0 + lodash.truncate: ^4.4.2 + slice-ansi: ^4.0.0 + string-width: ^4.2.0 + strip-ansi: ^6.0.0 + checksum: 66107046b7226051552d53c1260facfed03f4050373d3888620af7b1353f6a5429d9a4a5fb796c56c29b9dd5ffca7b661a815f42ec392cb5956432585578772a + languageName: node + linkType: hard + "tar@npm:^6.0.2": version: 6.1.0 resolution: "tar@npm:6.1.0" @@ -9029,14 +9501,55 @@ resolve@1.1.7: languageName: node linkType: hard -"tslib@npm:^1.8.1, tslib@npm:^1.9.0, tslib@npm:^1.9.2": +"ts-node@npm:^10.0.0": + version: 10.0.0 + resolution: "ts-node@npm:10.0.0" + dependencies: + "@tsconfig/node10": ^1.0.7 + "@tsconfig/node12": ^1.0.7 + "@tsconfig/node14": ^1.0.0 + "@tsconfig/node16": ^1.0.1 + arg: ^4.1.0 + create-require: ^1.1.0 + diff: ^4.0.1 + make-error: ^1.1.1 + source-map-support: ^0.5.17 + yn: 3.1.1 + peerDependencies: + "@swc/core": ">=1.2.45" + "@swc/wasm": ">=1.2.45" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + bin: + ts-node: dist/bin.js + ts-node-cwd: dist/bin-cwd.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: dc461e2b9b931b00ff065530a0247f86da1d035e72a7ef6d7ed072dd8e6b236d1879f113dcc73a354d240c81b6b845445c3d32b16eeb68022ed27ab6d130c049 + languageName: node + linkType: hard + +"tslib@npm:^1.8.1, tslib@npm:^1.9.0, tslib@npm:^1.9.2, tslib@npm:^1.9.3": version: 1.14.1 resolution: "tslib@npm:1.14.1" checksum: f44fe7f216946b17d3e3074df3746372703cf24e9127b4c045511456e8e4bf25515fb0a1bb3937676cc305651c5d4fcb6377b0588a4c6a957e748c4c28905d17 languageName: node linkType: hard -"tsutils@npm:^3.17.1": +"tslib@npm:^2.0.0, tslib@npm:^2.2.0": + version: 2.3.0 + resolution: "tslib@npm:2.3.0" + checksum: 7b4fc9feff0f704743c3760f5d8d708f6417fac6458159e63df3a6b1100f0736e3b99edb9fe370f274ad15160a1f49ff05cb49402534c818ff552c48e38c3e6e + languageName: node + linkType: hard + +"tsutils@npm:^3.21.0": version: 3.21.0 resolution: "tsutils@npm:3.21.0" dependencies: @@ -9102,6 +9615,13 @@ resolve@1.1.7: languageName: node linkType: hard +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 1f887bc6150e632fb772fd28e33c22a4ab036c6f484fa9ac2e2115f6cae9d62bba7ca0368e3332b539d85bd2c8391c7bff22ad410abcbc9ab3774d61e250b210 + languageName: node + linkType: hard + "type-fest@npm:^0.6.0": version: 0.6.0 resolution: "type-fest@npm:0.6.0" @@ -9257,6 +9777,16 @@ typescript@^4.0.5: languageName: node linkType: hard +"url-parse@npm:^1.5.1": + version: 1.5.1 + resolution: "url-parse@npm:1.5.1" + dependencies: + querystringify: ^2.1.1 + requires-port: ^1.0.0 + checksum: d8342b597bf1760c4b9e3c78458524d783fa1c901658f3db8b576fc73451c89e6686d218ddca4845b082a63b23971b4a8b916cccc91f4156cc9f97ffdabe0079 + languageName: node + linkType: hard + "url-to-options@npm:^1.0.1": version: 1.0.1 resolution: "url-to-options@npm:1.0.1" @@ -9291,24 +9821,6 @@ typescript@^4.0.5: languageName: node linkType: hard -"util@npm:0.10.3": - version: 0.10.3 - resolution: "util@npm:0.10.3" - dependencies: - inherits: 2.0.1 - checksum: 05c1a09f3af90250365386331b3986c0753af1900f20279f9302409b27e9d9d3c03a9cf4efba48aae859d04348ebfe56d68f89688113f61171da9c4fbe6baaca - languageName: node - linkType: hard - -"util@npm:^0.10.3": - version: 0.10.4 - resolution: "util@npm:0.10.4" - dependencies: - inherits: 2.0.3 - checksum: 6682ea8239076243495c45e81f19c2c002e02805de4de08554dc815500805923f27f504ec1a9c7599d420b62bf7452efbab6fa078219d529188b0ca830f142a5 - languageName: node - linkType: hard - "uuid@npm:^3.1.0, uuid@npm:^3.2.1, uuid@npm:^3.3.2": version: 3.4.0 resolution: "uuid@npm:3.4.0" @@ -9558,6 +10070,13 @@ typescript@^4.0.5: languageName: node linkType: hard +"workerpool@npm:6.1.5": + version: 6.1.5 + resolution: "workerpool@npm:6.1.5" + checksum: aaf220c463d32c146887d28b45f0291e803c8c41d77a559ff525347f178b3b53b3b029a240bb92529a72771093f7cf5afdc81a28396ecc2f2f3179ad31d03456 + languageName: node + linkType: hard + "wrap-ansi@npm:^2.0.0": version: 2.1.0 resolution: "wrap-ansi@npm:2.1.0" @@ -9960,9 +10479,23 @@ typescript@^4.0.5: languageName: node linkType: hard +"yn@npm:3.1.1": + version: 3.1.1 + resolution: "yn@npm:3.1.1" + checksum: bff63b80568d80c711670935427494dde47cdf97e8b04196b140ce0af519c81c5ee857eddad0caa8b422dd65aea0157bbfaacbb1546bebba623f0f383d5d9ae5 + languageName: node + linkType: hard + "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0" checksum: 096c3b40beb2804659539be1605a35c58eb0c85285f94b77b3e924f42ee265c1a40bf9f4153770039517146b469a964d51742395f35ca8135fc9f7e4982b785d languageName: node linkType: hard + +"zod@npm:~1.11.17": + version: 1.11.17 + resolution: "zod@npm:1.11.17" + checksum: 27e8799fa87ea4478a3155f40c39c4bef331b3c3273f00252ca646879c92eef54a5c36dcf31b6cd29bfd723fa4c1502e24d59e252d657183eab1252f273dfd7f + languageName: node + linkType: hard From 1d51db8ab8249a32f4a5d0a506c3e683fd5a353b Mon Sep 17 00:00:00 2001 From: Ryan Lengel Isgrig <43043272+ryanlengel@users.noreply.github.com> Date: Wed, 14 Jul 2021 15:17:59 -0700 Subject: [PATCH 39/39] build: add functions app deployment/testing to functional tests (#1218) * Add stub for functions ARM resource * Import functions ARM tempalte from composer and test deploying to it * add shared service farm to function app * add fnctions steps to js deploy * revert shared serverfarm and fix js build directory * separate dotnet/js function arm deployment templates * Add functions bots to test scenarios * Fix ref for DotNetFunctions consumer --- ...emplate-function-dotnet-bot-resources.json | 115 +++++++++++++++++ .../template-function-js-bot-resources.json | 116 ++++++++++++++++++ .../Common/HostBot.cs | 12 +- .../EmptyBot/EmptyBotTests.cs | 4 +- .../appsettings.json | 8 ++ .../yaml/deployBotResources/dotnet/deploy.yml | 71 +++++++---- .../yaml/deployBotResources/js/deploy.yml | 71 +++++++---- .../yaml/testScenarios/configureConsumers.yml | 18 ++- .../yaml/testScenarios/runTestScenarios.yml | 6 +- 9 files changed, 373 insertions(+), 48 deletions(-) create mode 100644 build/templates/template-function-dotnet-bot-resources.json create mode 100644 build/templates/template-function-js-bot-resources.json diff --git a/build/templates/template-function-dotnet-bot-resources.json b/build/templates/template-function-dotnet-bot-resources.json new file mode 100644 index 0000000000..4d8ee5aeaf --- /dev/null +++ b/build/templates/template-function-dotnet-bot-resources.json @@ -0,0 +1,115 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "appId": { + "type": "string", + "metadata": { + "description": "Active Directory App ID, set as MicrosoftAppId in the Web App's Application Settings." + } + }, + "appSecret": { + "type": "string", + "metadata": { + "description": "Active Directory App Password, set as MicrosoftAppPassword in the Web App's Application Settings." + } + }, + "botName": { + "type": "string" + }, + "botLocation": { + "type": "string" + }, + "appInsightsName": { + "type": "string", + "defaultValue": "" + }, + "appServicePlanName": { + "type": "string" + }, + "appServicePlanResourceGroup": { + "type": "string" + }, + "botSku": { + "type": "string", + "defaultValue": "F0", + "metadata": { + "description": "The pricing tier of the Bot Service Registration. Acceptable values are F0 and S1." + } + } + }, + "variables": { + "siteHost": "[concat(parameters('botName'), '.azurewebsites.net')]", + "botEndpoint": "[concat('https://', variables('siteHost'), '/api/messages')]", + "publishingUsername": "[concat('$', parameters('botName'))]" + }, + "resources": [ + { + "type": "Microsoft.Web/sites", + "apiVersion": "2015-08-01", + "location": "[parameters('botLocation')]", + "kind": "functionapp", + "name": "[parameters('botName')]", + "properties": { + "name": "[parameters('botName')]", + "kind": "functionapp", + "httpsOnly": true, + "alwaysOn": true, + "webSocketsEnabled": true + }, + "resources": [ + { + "name": "appsettings", + "type": "config", + "apiVersion": "2015-08-01", + "dependsOn": [ + "[concat('Microsoft.Web/Sites/', parameters('botName'))]" + ], + "properties": { + "FUNCTIONS_EXTENSION_VERSION": "~3", + "FUNCTIONS_WORKER_RUNTIME": "dotnet", + "APPINSIGHTS_INSTRUMENTATIONKEY": "[if(empty(parameters('appInsightsName')), '', reference(resourceId(parameters('appServicePlanResourceGroup'),'Microsoft.Insights/components', parameters('appInsightsName')), '2015-05-01', 'Full').properties.InstrumentationKey)]", + "MicrosoftAppId": "[parameters('appId')]", + "MicrosoftAppPassword": "[parameters('appSecret')]" + } + } + ] + }, + { + "type": "Microsoft.Web/sites/hostNameBindings", + "apiVersion": "2020-09-01", + "name": "[concat(parameters('botName'), '/', parameters('botName'), '.azurewebsites.net')]", + "location": "[parameters('botLocation')]", + "dependsOn": [ + "[resourceId('Microsoft.Web/sites', parameters('botName'))]" + ], + "properties": { + "siteName": "[parameters('botName')]", + "hostNameType": "Verified" + } + }, + { + "type": "Microsoft.BotService/botServices", + "apiVersion": "2020-06-02", + "name": "[parameters('botName')]", + "location": "global", + "kind": "bot", + "sku": { + "name": "[parameters('botSku')]" + }, + "dependsOn": [ + "[resourceId('Microsoft.Web/sites', parameters('botName'))]" + ], + "properties": { + "name": "[parameters('botName')]", + "displayName": "[parameters('botName')]", + "endpoint": "[variables('botEndpoint')]", + "msaAppId": "[parameters('appId')]", + "developerAppInsightsApplicationId": "", + "developerAppInsightKey": "", + "publishingCredentials": null, + "storageResourceId": null + } + } + ] +} \ No newline at end of file diff --git a/build/templates/template-function-js-bot-resources.json b/build/templates/template-function-js-bot-resources.json new file mode 100644 index 0000000000..03c4145641 --- /dev/null +++ b/build/templates/template-function-js-bot-resources.json @@ -0,0 +1,116 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "appId": { + "type": "string", + "metadata": { + "description": "Active Directory App ID, set as MicrosoftAppId in the Web App's Application Settings." + } + }, + "appSecret": { + "type": "string", + "metadata": { + "description": "Active Directory App Password, set as MicrosoftAppPassword in the Web App's Application Settings." + } + }, + "botName": { + "type": "string" + }, + "botLocation": { + "type": "string" + }, + "appInsightsName": { + "type": "string", + "defaultValue": "" + }, + "appServicePlanName": { + "type": "string" + }, + "appServicePlanResourceGroup": { + "type": "string" + }, + "botSku": { + "type": "string", + "defaultValue": "F0", + "metadata": { + "description": "The pricing tier of the Bot Service Registration. Acceptable values are F0 and S1." + } + } + }, + "variables": { + "siteHost": "[concat(parameters('botName'), '.azurewebsites.net')]", + "botEndpoint": "[concat('https://', variables('siteHost'), '/api/messages')]", + "publishingUsername": "[concat('$', parameters('botName'))]" + }, + "resources": [ + { + "type": "Microsoft.Web/sites", + "apiVersion": "2015-08-01", + "location": "[parameters('botLocation')]", + "kind": "functionapp", + "name": "[parameters('botName')]", + "properties": { + "name": "[parameters('botName')]", + "kind": "functionapp", + "httpsOnly": true, + "alwaysOn": true, + "webSocketsEnabled": true + }, + "resources": [ + { + "name": "appsettings", + "type": "config", + "apiVersion": "2015-08-01", + "dependsOn": [ + "[concat('Microsoft.Web/Sites/', parameters('botName'))]" + ], + "properties": { + "FUNCTIONS_EXTENSION_VERSION": "~3", + "FUNCTIONS_WORKER_RUNTIME": "node", + "WEBSITE_NODE_DEFAULT_VERSION": "~14", + "APPINSIGHTS_INSTRUMENTATIONKEY": "[if(empty(parameters('appInsightsName')), '', reference(resourceId(parameters('appServicePlanResourceGroup'),'Microsoft.Insights/components', parameters('appInsightsName')), '2015-05-01', 'Full').properties.InstrumentationKey)]", + "MicrosoftAppId": "[parameters('appId')]", + "MicrosoftAppPassword": "[parameters('appSecret')]" + } + } + ] + }, + { + "type": "Microsoft.Web/sites/hostNameBindings", + "apiVersion": "2020-09-01", + "name": "[concat(parameters('botName'), '/', parameters('botName'), '.azurewebsites.net')]", + "location": "[parameters('botLocation')]", + "dependsOn": [ + "[resourceId('Microsoft.Web/sites', parameters('botName'))]" + ], + "properties": { + "siteName": "[parameters('botName')]", + "hostNameType": "Verified" + } + }, + { + "type": "Microsoft.BotService/botServices", + "apiVersion": "2020-06-02", + "name": "[parameters('botName')]", + "location": "global", + "kind": "bot", + "sku": { + "name": "[parameters('botSku')]" + }, + "dependsOn": [ + "[resourceId('Microsoft.Web/sites', parameters('botName'))]" + ], + "properties": { + "name": "[parameters('botName')]", + "displayName": "[parameters('botName')]", + "endpoint": "[variables('botEndpoint')]", + "msaAppId": "[parameters('appId')]", + "developerAppInsightsApplicationId": "", + "developerAppInsightKey": "", + "publishingCredentials": null, + "storageResourceId": null + } + } + ] +} \ No newline at end of file diff --git a/tests/functional/Tests/ComponentsFunctionalTests/Common/HostBot.cs b/tests/functional/Tests/ComponentsFunctionalTests/Common/HostBot.cs index 9d18a41068..8412fa936f 100644 --- a/tests/functional/Tests/ComponentsFunctionalTests/Common/HostBot.cs +++ b/tests/functional/Tests/ComponentsFunctionalTests/Common/HostBot.cs @@ -10,9 +10,19 @@ public enum HostBot /// EmptyBotDotNetWebApp, + /// + /// Empty bot implemented using DotNet and Functions. + /// + EmptyBotDotNetFunctions, + /// /// Empty bot implemented using JS and Web App. /// - EmptyBotJSWebApp + EmptyBotJSWebApp, + + /// + /// Empty bot implemented using JS and Functions. + /// + EmptyBotJSFunctions } } diff --git a/tests/functional/Tests/ComponentsFunctionalTests/EmptyBot/EmptyBotTests.cs b/tests/functional/Tests/ComponentsFunctionalTests/EmptyBot/EmptyBotTests.cs index 5eaeae0a2a..883a4dbdc3 100644 --- a/tests/functional/Tests/ComponentsFunctionalTests/EmptyBot/EmptyBotTests.cs +++ b/tests/functional/Tests/ComponentsFunctionalTests/EmptyBot/EmptyBotTests.cs @@ -37,7 +37,9 @@ public static IEnumerable TestCases() var hostBots = new List { HostBot.EmptyBotDotNetWebApp, - HostBot.EmptyBotJSWebApp + HostBot.EmptyBotDotNetFunctions, + HostBot.EmptyBotJSWebApp, + HostBot.EmptyBotJSFunctions }; var scripts = new List { "EmptyBot.json" }; diff --git a/tests/functional/Tests/ComponentsFunctionalTests/appsettings.json b/tests/functional/Tests/ComponentsFunctionalTests/appsettings.json index af1a042508..ff4b218749 100644 --- a/tests/functional/Tests/ComponentsFunctionalTests/appsettings.json +++ b/tests/functional/Tests/ComponentsFunctionalTests/appsettings.json @@ -13,9 +13,17 @@ "BotId": "bfcfnemptybotdotnetwebapp", "DirectLineSecret": "" }, + "EmptyBotDotNetFunctions": { + "BotId": "bfcfnemptybotdotnetfunctions", + "DirectLineSecret": "" + }, "EmptyBotJSWebApp": { "BotId": "bfcfnemptybotjswebapp", "DirectLineSecret": "" + }, + "EmptyBotJSFunctions": { + "BotId": "bfcfnemptybotjsfunctions", + "DirectLineSecret": "" } } } diff --git a/tests/functional/build/yaml/deployBotResources/dotnet/deploy.yml b/tests/functional/build/yaml/deployBotResources/dotnet/deploy.yml index d7084aa0ad..8f03969b23 100644 --- a/tests/functional/build/yaml/deployBotResources/dotnet/deploy.yml +++ b/tests/functional/build/yaml/deployBotResources/dotnet/deploy.yml @@ -154,30 +154,57 @@ stages: pathToPublish: "$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ parameters.buildFolder }}/${{ bot.name }}/${{ bot.name }}.zip" artifactName: dotnet-$(BUILD.BUILDID) + - ${{ if eq(bot.project.integration, 'webapp') }}: # Create App Service and Bot Channel Registration - - template: ../common/createAppService.yml - parameters: - appId: $(APPID) - appInsight: "${{ parameters.appInsight }}" - appSecret: $(APPSECRET) - appServicePlan: "${{ parameters.appServicePlan }}" - appServicePlanRG: "${{ parameters.appServicePlanRG }}" - azureSubscription: "${{ parameters.azureSubscription }}" - botGroup: "${{ parameters.resourceGroup }}" - botName: "${{ bot.name }}" - botPricingTier: "${{ parameters.botPricingTier }}" - resourceSuffix: "${{ parameters.resourceSuffix }}" - templateFile: "build/templates/template-bot-resources.json" + - template: ../common/createAppService.yml + parameters: + appId: $(APPID) + appInsight: "${{ parameters.appInsight }}" + appSecret: $(APPSECRET) + appServicePlan: "${{ parameters.appServicePlan }}" + appServicePlanRG: "${{ parameters.appServicePlanRG }}" + azureSubscription: "${{ parameters.azureSubscription }}" + botGroup: "${{ parameters.resourceGroup }}" + botName: "${{ bot.name }}" + botPricingTier: "${{ parameters.botPricingTier }}" + resourceSuffix: "${{ parameters.resourceSuffix }}" + templateFile: "build/templates/template-bot-resources.json" - # Deploy bot - - task: AzureWebApp@1 - displayName: 'Deploy Azure Web App : ${{ bot.name }}-$(BUILD.BUILDID)' - inputs: - azureSubscription: "${{ parameters.azureSubscription }}" - appName: '${{ bot.name }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)' - resourceGroupName: '${{ parameters.resourceGroup }}' - package: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ parameters.buildFolder }}/${{ bot.name }}/${{ bot.name }}.zip' - deploymentMethod: runFromPackage + # Deploy bot to Azure Web App + - task: AzureWebApp@1 + displayName: 'Deploy Azure Web App : ${{ bot.name }}-$(BUILD.BUILDID)' + inputs: + azureSubscription: "${{ parameters.azureSubscription }}" + appName: '${{ bot.name }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)' + resourceGroupName: '${{ parameters.resourceGroup }}' + package: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ parameters.buildFolder }}/${{ bot.name }}/${{ bot.name }}.zip' + deploymentMethod: runFromPackage + + - ${{ if eq(bot.project.integration, 'functions') }}: + # Create Functions App and Bot Channel Registration + - template: ../common/createAppService.yml + parameters: + appId: $(APPID) + appInsight: "${{ parameters.appInsight }}" + appSecret: $(APPSECRET) + appServicePlan: "${{ parameters.appServicePlan }}" + appServicePlanRG: "${{ parameters.appServicePlanRG }}" + azureSubscription: "${{ parameters.azureSubscription }}" + botGroup: "${{ parameters.resourceGroup }}" + botName: "${{ bot.name }}" + botPricingTier: "${{ parameters.botPricingTier }}" + resourceSuffix: "${{ parameters.resourceSuffix }}" + templateFile: "build/templates/template-function-dotnet-bot-resources.json" + + # Deploy bot to Azure Functions + - task: AzureFunctionApp@1 + displayName: 'Deploy Functions App : ${{ bot.name }}-$(BUILD.BUILDID)' + inputs: + azureSubscription: "${{ parameters.azureSubscription }}" + appType: 'functionApp' + appName: '${{ bot.name }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)' + package: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ parameters.buildFolder }}/${{ bot.name }}/${{ bot.name }}.zip' + deploymentMethod: runFromPackage # Configure OAuth - ${{ if eq(bot.type, 'Skill') }}: diff --git a/tests/functional/build/yaml/deployBotResources/js/deploy.yml b/tests/functional/build/yaml/deployBotResources/js/deploy.yml index a8994dc8b8..ff5ea602a7 100644 --- a/tests/functional/build/yaml/deployBotResources/js/deploy.yml +++ b/tests/functional/build/yaml/deployBotResources/js/deploy.yml @@ -172,30 +172,57 @@ stages: pathToPublish: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/build/${{ bot.name }}.zip' artifactName: javascript-$(BUILD.BUILDID) + - ${{ if eq(bot.project.integration, 'webapp') }}: # Create App Service and Bot Channel Registration - - template: ../common/createAppService.yml - parameters: - appId: $(APPID) - appInsight: "${{ parameters.appInsight }}" - appSecret: $(APPSECRET) - appServicePlan: "${{ parameters.appServicePlan }}" - appServicePlanRG: "${{ parameters.appServicePlanRG }}" - azureSubscription: "${{ parameters.azureSubscription }}" - botGroup: "${{ parameters.resourceGroup }}" - botName: "${{ bot.name }}" - botPricingTier: "${{ parameters.botPricingTier }}" - resourceSuffix: "${{ parameters.resourceSuffix }}" - templateFile: "build/templates/template-bot-resources.json" + - template: ../common/createAppService.yml + parameters: + appId: $(APPID) + appInsight: "${{ parameters.appInsight }}" + appSecret: $(APPSECRET) + appServicePlan: "${{ parameters.appServicePlan }}" + appServicePlanRG: "${{ parameters.appServicePlanRG }}" + azureSubscription: "${{ parameters.azureSubscription }}" + botGroup: "${{ parameters.resourceGroup }}" + botName: "${{ bot.name }}" + botPricingTier: "${{ parameters.botPricingTier }}" + resourceSuffix: "${{ parameters.resourceSuffix }}" + templateFile: "build/templates/template-bot-resources.json" - # Deploy bot - - task: AzureWebApp@1 - displayName: 'Deploy Azure Web App : ${{ bot.name }}-$(BUILD.BUILDID)' - inputs: - azureSubscription: "${{ parameters.azureSubscription }}" - appName: '${{ bot.name }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)' - resourceGroupName: '${{ parameters.resourceGroup }}' - package: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/build/${{ bot.name }}.zip' - deploymentMethod: runFromPackage + # Deploy bot to Azure Web App + - task: AzureWebApp@1 + displayName: 'Deploy Azure Web App : ${{ bot.name }}-$(BUILD.BUILDID)' + inputs: + azureSubscription: "${{ parameters.azureSubscription }}" + appName: '${{ bot.name }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)' + resourceGroupName: '${{ parameters.resourceGroup }}' + package: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/build/${{ bot.name }}.zip' + deploymentMethod: runFromPackage + + - ${{ if eq(bot.project.integration, 'functions') }}: + # Create Functions App and Bot Channel Registration + - template: ../common/createAppService.yml + parameters: + appId: $(APPID) + appInsight: "${{ parameters.appInsight }}" + appSecret: $(APPSECRET) + appServicePlan: "${{ parameters.appServicePlan }}" + appServicePlanRG: "${{ parameters.appServicePlanRG }}" + azureSubscription: "${{ parameters.azureSubscription }}" + botGroup: "${{ parameters.resourceGroup }}" + botName: "${{ bot.name }}" + botPricingTier: "${{ parameters.botPricingTier }}" + resourceSuffix: "${{ parameters.resourceSuffix }}" + templateFile: "build/templates/template-function-js-bot-resources.json" + + # Deploy bot to Azure Functions + - task: AzureFunctionApp@1 + displayName: 'Deploy Functions App : ${{ bot.name }}-$(BUILD.BUILDID)' + inputs: + azureSubscription: "${{ parameters.azureSubscription }}" + appType: 'functionApp' + appName: '${{ bot.name }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)' + package: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/build/${{ bot.name }}.zip' + deploymentMethod: runFromPackage # Configure OAuth - ${{ if eq(bot.type, 'Skill') }}: diff --git a/tests/functional/build/yaml/testScenarios/configureConsumers.yml b/tests/functional/build/yaml/testScenarios/configureConsumers.yml index c6100be4fe..df53957890 100644 --- a/tests/functional/build/yaml/testScenarios/configureConsumers.yml +++ b/tests/functional/build/yaml/testScenarios/configureConsumers.yml @@ -4,7 +4,9 @@ parameters: type: object default: EmptyBotDotNetWebApp: "" + EmptyBotDotNetFunctions: "" EmptyBotJSWebApp: "" + EmptyBotJSFunctions: "" - name: azureSubscription displayName: Azure Service Connection @@ -401,12 +403,24 @@ steps: resourceGroup = $groups.DotNet configType = $types.Appsettings } + @{ + key = "EmptyBotDotNetFunctions" + botName = "bfcfnemptybotdotnetfunctions" + resourceGroup = $groups.DotNet + configType = $types.Appsettings + } @{ key = "EmptyBotJSWebApp" botName = "bfcfnemptybotjswebapp" resourceGroup = $groups.JS configType = $types.Appsettings } + @{ + key = "EmptyBotJSFunctions" + botName = "bfcfnemptybotjsfunctions" + resourceGroup = $groups.JS + configType = $types.Appsettings + } ) # Bots Test Scenarios @@ -415,7 +429,9 @@ steps: name = "EmptyBot"; consumers = @( "EmptyBotDotNetWebApp", - "EmptyBotJSWebApp" + "EmptyBotDotNetFunctions", + "EmptyBotJSWebApp", + "EmptyBotJSFunctions" ); } ) diff --git a/tests/functional/build/yaml/testScenarios/runTestScenarios.yml b/tests/functional/build/yaml/testScenarios/runTestScenarios.yml index 9f947008bd..c3fe9839e2 100644 --- a/tests/functional/build/yaml/testScenarios/runTestScenarios.yml +++ b/tests/functional/build/yaml/testScenarios/runTestScenarios.yml @@ -17,7 +17,9 @@ variables: ## Bots Configuration (Define these variables in Azure) # BfcfnEmptyBotDotNetWebAppId: (optional) App Id for BfcfnEmptyBotDotNetWebApp bot. - # BfcfnEmptyBotJSWebAppAppId: (optional) App Id for BfcfnEmptyBotJSWebApp bot. + # BfcfnEmptyBotDotNetFunctionsId: (optional) App Id for BfcfnEmptyBotDotNetFunctions bot. + # BfcfnEmptyBotJSWebAppId: (optional) App Id for BfcfnEmptyBotJSWebApp bot. + # BfcfnEmptyBotJSFunctionsId: (optional) App Id for BfcfnEmptyBotJSFunctions bot. # DeployBotResourcesGuid: (optional) Deploy Bot Resources pipeline GUID. @@ -64,7 +66,9 @@ stages: parameters: appIds: EmptyBotDotNetWebApp: "$(BFCFNEMPTYBOTDOTNETWEBAPPID)" + EmptyBotDotNetFunctions: "$(BFCFNEMPTYBOTDOTNETFUNCTIONSID)" EmptyBotJSWebApp: "$(BFCFNEMPTYBOTJSWEBAPPID)" + EmptyBotJSFunctions: "$(BFCFNEMPTYBOTJSFUNCTIONSID)" azureSubscription: "$(AZURESUBSCRIPTION)" buildConfiguration: "$(BUILDCONFIGURATION)" buildIdSuffix: $[stageDependencies.Download_Variables.Download_Variables.outputs['Set_Variables.DeploymentBuildSuffix']]
    -
    -
    Your bot is ready!
    -
    You can test your bot in the Bot Framework Emulator
    - by connecting to http://localhost:3978/api/messages.
    -
    -
    Visit Azure - Bot Service to register your bot and add it to
    - various channels. The bot's endpoint URL typically looks - like this:
    -
    https://your_bots_hostname/api/messages
    -
    -
    -

    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 z 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 S|B-LI|KfuG|MK5*0{;W>vfD%e diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/Files/teams-logo.png b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/Files/teams-logo.png deleted file mode 100644 index 78b0a0c308939206aee5f15e2c052def7a18a74e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6412 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 F{{vnI6G{L8 diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/SampleData.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/SampleData.cs deleted file mode 100644 index 13b7d9d744..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/SampleData.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Cards -{ - public class SampleData - { - public SampleData() - { - MultiSelect = "true"; - } - - public string Question { get; set; } - - public string MultiSelect { get; set; } - - public string Option1 { get; set; } - - public string Option2 { get; set; } - - public string Option3 { get; set; } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Delete/DeleteDialog.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Delete/DeleteDialog.cs deleted file mode 100644 index 616ddfd70c..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Delete/DeleteDialog.cs +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Connector; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Delete -{ - public class DeleteDialog : ComponentDialog - { - private readonly List _deleteSupported = new List - { - Channels.Msteams, - Channels.Slack, - Channels.Telegram - }; - - public DeleteDialog() - : base(nameof(DeleteDialog)) - { - AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[] { HandleDeleteDialog })); - InitialDialogId = nameof(WaterfallDialog); - } - - private async Task HandleDeleteDialog(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - var channel = stepContext.Context.Activity.ChannelId; - if (_deleteSupported.Contains(channel)) - { - var id = await stepContext.Context.SendActivityAsync(MessageFactory.Text("I will delete this message in 5 seconds"), cancellationToken); - await Task.Delay(5000, cancellationToken); - await stepContext.Context.DeleteActivityAsync(id.Id, cancellationToken); - } - else - { - await stepContext.Context.SendActivityAsync(MessageFactory.Text($"Delete is not supported in the {channel} channel."), cancellationToken); - } - - return new DialogTurnResult(DialogTurnStatus.Complete); - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/FileUpload/FileUploadDialog.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/FileUpload/FileUploadDialog.cs deleted file mode 100644 index 67a3885d27..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/FileUpload/FileUploadDialog.cs +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.IO; -using System.Net; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Schema; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.FileUpload -{ - public class FileUploadDialog : ComponentDialog - { - public FileUploadDialog() - : base(nameof(FileUploadDialog)) - { - AddDialog(new AttachmentPrompt(nameof(AttachmentPrompt))); - AddDialog(new ConfirmPrompt(nameof(ConfirmPrompt))); - AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[] { PromptUploadStepAsync, HandleAttachmentStepAsync, FinalStepAsync })); - - InitialDialogId = nameof(WaterfallDialog); - } - - private async Task PromptUploadStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - var promptOptions = new PromptOptions - { - Prompt = MessageFactory.Text("Please upload a file to continue."), - RetryPrompt = MessageFactory.Text("You must upload a file."), - }; - - return await stepContext.PromptAsync(nameof(AttachmentPrompt), promptOptions, cancellationToken); - } - - private async Task HandleAttachmentStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - var fileText = string.Empty; - - foreach (var file in stepContext.Context.Activity.Attachments) - { - var remoteFileUrl = file.ContentUrl; - var localFileName = Path.Combine(Path.GetTempPath(), file.Name); - string fileContent; - - using (var webClient = new WebClient()) - { - webClient.DownloadFile(remoteFileUrl, localFileName); - using var reader = new StreamReader(localFileName); - fileContent = await reader.ReadToEndAsync(); - } - - fileText += $"Attachment \"{file.Name}\" has been received.\r\n"; - fileText += $"File content: {fileContent}\r\n"; - } - - await stepContext.Context.SendActivityAsync(MessageFactory.Text(fileText), cancellationToken); - - // Ask to upload another file or end. - const string messageText = "Do you want to upload another file?"; - const string repromptMessageText = "That's an invalid choice."; - var options = new PromptOptions - { - Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), - RetryPrompt = MessageFactory.Text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput) - }; - - return await stepContext.PromptAsync(nameof(ConfirmPrompt), options, cancellationToken); - } - - private async Task FinalStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - var tryAnother = (bool)stepContext.Result; - if (tryAnother) - { - return await stepContext.ReplaceDialogAsync(InitialDialogId, cancellationToken: cancellationToken); - } - - return new DialogTurnResult(DialogTurnStatus.Complete); - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/MessageWithAttachment/MessageWithAttachmentDialog.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/MessageWithAttachment/MessageWithAttachmentDialog.cs deleted file mode 100644 index 443413e20d..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/MessageWithAttachment/MessageWithAttachmentDialog.cs +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Builder.Dialogs.Choices; -using Microsoft.Bot.Schema; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.MessageWithAttachment -{ - public class MessageWithAttachmentDialog : ComponentDialog - { - private const string Picture = "architecture-resize.png"; - private readonly Uri _serverUrl; - - public MessageWithAttachmentDialog(Uri serverUrl) - : base(nameof(MessageWithAttachmentDialog)) - { - _serverUrl = serverUrl; - AddDialog(new ChoicePrompt(nameof(ChoicePrompt))); - AddDialog(new ConfirmPrompt(nameof(ConfirmPrompt))); - AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[] { SelectAttachmentTypeAsync, SendActivityWithAttachmentAsync, FinalStepAsync })); - InitialDialogId = nameof(WaterfallDialog); - } - - private async Task SelectAttachmentTypeAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - const string messageText = "What attachment type do you want?"; - const string repromptMessageText = "That was not a valid choice, please select a valid card type."; - var options = new PromptOptions - { - Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), - RetryPrompt = MessageFactory.Text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput), - Choices = new List - { - new Choice("Inline"), - new Choice("Internet") - } - }; - - // Ask the user to enter their name. - return await stepContext.PromptAsync(nameof(ChoicePrompt), options, cancellationToken); - } - - private async Task SendActivityWithAttachmentAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - var attachmentType = ((FoundChoice)stepContext.Result).Value.ToLowerInvariant(); - var reply = new Activity(ActivityTypes.Message) { InputHint = InputHints.IgnoringInput }; - switch (attachmentType) - { - case "inline": - reply.Text = "This is an inline attachment."; - reply.Attachments = new List { GetInlineAttachment() }; - break; - - case "internet": - reply.Text = "This is an attachment from a HTTP URL."; - reply.Attachments = new List { GetInternetAttachment() }; - break; - - default: - throw new InvalidOperationException($"Invalid card type {attachmentType}"); - } - - await stepContext.Context.SendActivityAsync(reply, cancellationToken); - - // Ask to submit another or end. - const string messageText = "Do you want another type of attachment?"; - const string repromptMessageText = "That's an invalid choice."; - var options = new PromptOptions - { - Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), - RetryPrompt = MessageFactory.Text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput), - }; - - return await stepContext.PromptAsync(nameof(ConfirmPrompt), options, cancellationToken); - } - - private async Task FinalStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) - { - var tryAnother = (bool)stepContext.Result; - if (tryAnother) - { - return await stepContext.ReplaceDialogAsync(InitialDialogId, cancellationToken: cancellationToken); - } - - return new DialogTurnResult(DialogTurnStatus.Complete); - } - - private Attachment GetInlineAttachment() - { - var imagePath = Path.Combine(Environment.CurrentDirectory, "wwwroot", "images", Picture); - var imageData = Convert.ToBase64String(File.ReadAllBytes(imagePath)); - - return new Attachment - { - Name = $"Files/{Picture}", - ContentType = "image/png", - ContentUrl = $"data:image/png;base64,{imageData}", - }; - } - - private Attachment GetInternetAttachment() - { - return new Attachment - { - Name = $"Files/{Picture}", - ContentType = "image/png", - ContentUrl = $"{_serverUrl}images/{Picture}", - }; - } - } -} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Proactive/ContinuationParameters.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Proactive/ContinuationParameters.cs deleted file mode 100644 index ef2970a643..0000000000 --- a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Proactive/ContinuationParameters.cs +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Security.Principal; -using Microsoft.Bot.Schema; - -namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Proactive -{ - ///

  • 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 z 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 S|B-LI|KfuG|MK5*0{;W>vfD%e diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/files/teams-logo.png b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/files/teams-logo.png deleted file mode 100644 index 78b0a0c308939206aee5f15e2c052def7a18a74e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6412 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 F{{vnI6G{L8 diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/delete/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/delete/__init__.py deleted file mode 100644 index 414664e1eb..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/delete/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from .delete_dialog import DeleteDialog - -__all__ = ["DeleteDialog"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/delete/delete_dialog.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/delete/delete_dialog.py deleted file mode 100644 index 216701f750..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/delete/delete_dialog.py +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import time -from botbuilder.core import MessageFactory -from botbuilder.dialogs import ( - ComponentDialog, - WaterfallDialog, - WaterfallStepContext, - DialogTurnResult, - DialogTurnStatus, -) -from botframework.connector import Channels - - -class DeleteDialog(ComponentDialog): - def __init__(self): - super().__init__(DeleteDialog.__name__) - self._delete_supported = [Channels.ms_teams, Channels.slack, Channels.telegram] - - self.add_dialog( - WaterfallDialog(WaterfallDialog.__name__, [self.handle_delete_dialog_step]) - ) - - self.initial_dialog_id = WaterfallDialog.__name__ - - async def handle_delete_dialog_step(self, step_context: WaterfallStepContext): - channel = step_context.context.activity.channel_id - - if channel in self._delete_supported: - response = await step_context.context.send_activity( - MessageFactory.text("I will delete this message in 5 seconds") - ) - time.sleep(5) - await step_context.context.delete_activity(response.id) - - else: - await step_context.context.send_activity( - MessageFactory.text( - f"Delete is not supported in the {channel} channel." - ) - ) - - return DialogTurnResult(DialogTurnStatus.Complete) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/file_upload/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/file_upload/__init__.py deleted file mode 100644 index b665b303db..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/file_upload/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from .file_upload_dialog import FileUploadDialog - -__all__ = ["FileUploadDialog"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/file_upload/file_upload_dialog.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/file_upload/file_upload_dialog.py deleted file mode 100644 index 374a1906a6..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/file_upload/file_upload_dialog.py +++ /dev/null @@ -1,86 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import tempfile -import os -import urllib.request -import shutil -from botbuilder.core import MessageFactory -from botbuilder.dialogs import ( - ComponentDialog, - DialogTurnResult, - DialogTurnStatus, - WaterfallDialog, - WaterfallStepContext, - ConfirmPrompt, -) -from botbuilder.dialogs.prompts import PromptOptions, AttachmentPrompt -from botbuilder.schema import InputHints - - -class FileUploadDialog(ComponentDialog): - def __init__(self): - super().__init__(FileUploadDialog.__name__) - - self.add_dialog(AttachmentPrompt(AttachmentPrompt.__name__)) - self.add_dialog(ConfirmPrompt(ConfirmPrompt.__name__)) - self.add_dialog( - WaterfallDialog( - WaterfallDialog.__name__, - [self.prompt_upload_step, self.handle_attachment_step, self.final_step], - ) - ) - - self.initial_dialog_id = WaterfallDialog.__name__ - - async def prompt_upload_step(self, step_context: WaterfallStepContext): - return await step_context.prompt( - AttachmentPrompt.__name__, - PromptOptions( - prompt=MessageFactory.text( - "Please upload a file to continue.", input_hint=InputHints.accepting_input - ), - retry_prompt=MessageFactory.text("You must upload a file."), - ), - ) - - async def handle_attachment_step(self, step_context: WaterfallStepContext): - file_text = "" - file_content = "" - - for file in step_context.context.activity.attachments: - remote_file_url = file.content_url - local_file_name = os.path.join(tempfile.gettempdir(), file.name) - with urllib.request.urlopen(remote_file_url) as response, open( - local_file_name, "wb" - ) as out_file: - shutil.copyfileobj(response, out_file) - - file_content = open(local_file_name, "r").read() - file_text += f'Attachment "{ file.name }" has been received.\r\n' - file_text += f'File content: { file_content }\r\n' - - await step_context.context.send_activity(MessageFactory.text(file_text)) - - # Ask to upload another file or end. - message_text = "Do you want to upload another file?" - reprompt_message_text = "That's an invalid choice." - - options = PromptOptions( - prompt=MessageFactory.text( - message_text, message_text, InputHints.expecting_input - ), - retry_prompt=MessageFactory.text( - reprompt_message_text, reprompt_message_text, InputHints.expecting_input - ), - ) - - return await step_context.prompt(ConfirmPrompt.__name__, options) - - async def final_step(self, step_context: WaterfallStepContext): - try_another = step_context.result - - if try_another: - return await step_context.replace_dialog(self.initial_dialog_id) - - return DialogTurnResult(DialogTurnStatus.Complete) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/message_with_attachment/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/message_with_attachment/__init__.py deleted file mode 100644 index efe3140792..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/message_with_attachment/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from .message_with_attachment_dialog import MessageWithAttachmentDialog - -__all__ = ["MessageWithAttachmentDialog"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/message_with_attachment/message_with_attachment_dialog.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/message_with_attachment/message_with_attachment_dialog.py deleted file mode 100644 index 419fc3cbe4..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/message_with_attachment/message_with_attachment_dialog.py +++ /dev/null @@ -1,125 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import os -import base64 -from botbuilder.core import MessageFactory -from botbuilder.dialogs import ( - ComponentDialog, - ConfirmPrompt, - ChoicePrompt, - DialogTurnResult, - DialogTurnStatus, - WaterfallDialog, - WaterfallStepContext, - Choice, -) -from botbuilder.dialogs.prompts import PromptOptions -from botbuilder.schema import ( - Attachment, - InputHints -) - -from config import DefaultConfig - - -class MessageWithAttachmentDialog(ComponentDialog): - def __init__(self, configuration: DefaultConfig): - super().__init__(MessageWithAttachmentDialog.__name__) - - self._picture = "architecture-resize.png" - self.configuration = configuration - - self.add_dialog(ChoicePrompt(ChoicePrompt.__name__)) - self.add_dialog(ConfirmPrompt(ConfirmPrompt.__name__)) - self.add_dialog( - WaterfallDialog( - WaterfallDialog.__name__, - [ - self.select_attachment_type_step, - self.send_activity_with_attachment_step, - self.final_step, - ], - ) - ) - - self.initial_dialog_id = WaterfallDialog.__name__ - - async def select_attachment_type_step(self, step_context: WaterfallStepContext): - # Create the PromptOptions from the skill configuration which contain the list of configured skills. - message_text = "What attachment type do you want?" - reprompt_message_text = ( - "That was not a valid choice, please select a valid card type." - ) - - options = PromptOptions( - prompt=MessageFactory.text( - message_text, message_text, InputHints.expecting_input - ), - retry_prompt=MessageFactory.text( - reprompt_message_text, reprompt_message_text, InputHints.expecting_input - ), - choices=[Choice("Inline"), Choice("Internet")], - ) - - return await step_context.prompt(ChoicePrompt.__name__, options) - - async def send_activity_with_attachment_step( - self, step_context: WaterfallStepContext - ): - attachment_type = str(step_context.result.value).lower() - reply = MessageFactory.text("", input_hint=InputHints.ignoring_input) - - if attachment_type == "inline": - reply.text = "This is an inline attachment." - reply.attachments = [await self.get_inline_attachment()] - - elif attachment_type == "internet": - reply.text = "This is an attachment from a HTTP URL." - reply.attachments = [await self.get_internet_attachment()] - - else: - raise TypeError(f"Invalid card type {attachment_type}") - - await step_context.context.send_activity(reply) - - message_text = "Do you want another type of attachment?" - reprompt_message_text = "That's an invalid choice." - - options = PromptOptions( - prompt=MessageFactory.text( - message_text, message_text, InputHints.expecting_input - ), - retry_prompt=MessageFactory.text( - reprompt_message_text, reprompt_message_text, InputHints.expecting_input - ), - ) - - return await step_context.prompt(ConfirmPrompt.__name__, options) - - async def final_step(self, step_context: WaterfallStepContext): - try_another = step_context.result - - if try_another: - return await step_context.replace_dialog(self.initial_dialog_id) - - return DialogTurnResult(DialogTurnStatus.Complete) - - async def get_inline_attachment(self): - file_path = os.path.join(os.getcwd(), "images", self._picture) - - with open(file_path, "rb") as in_file: - file = base64.b64encode(in_file.read()).decode() - - return Attachment( - name=f"Files/{ self._picture }", - content_type="image/png", - content_url=f"data:image/png;base64,{file}", - ) - - async def get_internet_attachment(self): - return Attachment( - name=f"Files/{ self._picture }", - content_type="image/png", - content_url=f"{self.configuration.SERVER_URL}/images/{self._picture}", - ) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/__init__.py deleted file mode 100644 index 9f8161fa73..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from .continuation_parameters import ContinuationParameters -from .wait_for_proactive_dialog import WaitForProactiveDialog - -__all__ = ["ContinuationParameters", "WaitForProactiveDialog"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/continuation_parameters.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/continuation_parameters.py deleted file mode 100644 index 0ab78fb9e3..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/continuation_parameters.py +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from botbuilder.schema import ConversationReference - - -class ContinuationParameters: - def __init__( - self, - claims_identity: str, - oauth_scope: str, - conversation_reference: ConversationReference, - ): - self.claims_identity = claims_identity - self.oauth_scope = oauth_scope - self.conversation_reference = conversation_reference diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/wait_for_proactive_dialog.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/wait_for_proactive_dialog.py deleted file mode 100644 index 845295d6dd..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/wait_for_proactive_dialog.py +++ /dev/null @@ -1,77 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from typing import Dict -from botbuilder.core import MessageFactory, BotAdapter, TurnContext -from botbuilder.dialogs import Dialog, DialogContext, DialogTurnResult, DialogTurnStatus -from botbuilder.schema import ( - ActivityTypes, - ActivityEventNames -) -from config import DefaultConfig -from .continuation_parameters import ContinuationParameters - - -class WaitForProactiveDialog(Dialog): - def __init__( - self, - configuration: DefaultConfig, - continuation_parameters_store: Dict[str, ContinuationParameters], - ): - super().__init__(WaitForProactiveDialog.__name__) - self.configuration = configuration - self.continuation_parameters_store = continuation_parameters_store - - def notify_message(self, url: str, user_id: str): - return f"Navigate to { url }/api/notify?user={ user_id } to proactively message the user." - - async def begin_dialog(self, dialog_context: DialogContext, options: object = None): - # Store a reference to the conversation. - self.add_or_update_continuation_parameters(dialog_context.context) - - # Render message with continuation link. - await dialog_context.context.send_activity( - MessageFactory.text( - self.notify_message( - self.configuration.SERVER_URL, - dialog_context.context.activity.from_property.id, - ) - ) - ) - return Dialog.end_of_turn - - async def continue_dialog(self, dialog_context: DialogContext): - activity = dialog_context.context.activity - if ( - activity.type == ActivityTypes.event - and activity.name == ActivityEventNames.continue_conversation - ): - # We continued the conversation, forget the proactive reference. - self.continuation_parameters_store[activity.id] = None - - # The continue conversation activity comes from the ProactiveController when the notification is received - await dialog_context.context.send_activity( - "We received a proactive message, ending the dialog" - ) - - # End the dialog so the host gets an EoC - return DialogTurnResult(DialogTurnStatus.Complete) - - # Keep waiting for a call to the ProactiveController. - await dialog_context.context.send_activity( - f"We are waiting for a proactive message. " - f"{self.notify_message(self.configuration, activity.from_property.id)}" - ) - - return Dialog.end_of_turn - - def add_or_update_continuation_parameters(self, context: TurnContext): - self.continuation_parameters_store[ - context.activity.from_property.id - ] = ContinuationParameters( - claims_identity=context.turn_state.get(BotAdapter.BOT_IDENTITY_KEY), - conversation_reference=TurnContext.get_conversation_reference( - context.activity - ), - oauth_scope=context.turn_state.get(BotAdapter.BOT_OAUTH_SCOPE_KEY), - ) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/__init__.py deleted file mode 100644 index fc79378126..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from .sso_skill_dialog import SsoSkillDialog -from .sso_skill_signin_dialog import SsoSkillSignInDialog - -__all__ = ["SsoSkillDialog", "SsoSkillSignInDialog"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/sso_skill_dialog.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/sso_skill_dialog.py deleted file mode 100644 index 042c00c0e8..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/sso_skill_dialog.py +++ /dev/null @@ -1,112 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from botbuilder.core import MessageFactory -from botbuilder.dialogs import ( - DialogTurnResult, - DialogTurnStatus, - ChoicePrompt, - PromptOptions, - WaterfallDialog, - WaterfallStepContext, - ComponentDialog, - Choice, -) -from botbuilder.schema import InputHints -from config import DefaultConfig -from .sso_skill_signin_dialog import SsoSkillSignInDialog - - -class SsoSkillDialog(ComponentDialog): - def __init__(self, configuration: DefaultConfig): - super().__init__(SsoSkillDialog.__name__) - - self.connection_name = configuration.SSO_CONNECTION_NAME - - self.add_dialog(SsoSkillSignInDialog(self.connection_name)) - self.add_dialog(ChoicePrompt(ChoicePrompt.__name__)) - - self.add_dialog( - WaterfallDialog( - WaterfallDialog.__name__, - [ - self.prompt_action_step, - self.handle_action_step, - self.prompt_final_step, - ], - ) - ) - - self.initial_dialog_id = WaterfallDialog.__name__ - - async def prompt_action_step(self, step_context: WaterfallStepContext): - message_text = "What SSO action would you like to perform on the skill?" - reprompt_message_text = ( - "That was not a valid choice, please select a valid choice." - ) - - options = PromptOptions( - prompt=MessageFactory.text( - message_text, message_text, InputHints.expecting_input - ), - retry_prompt=MessageFactory.text( - reprompt_message_text, reprompt_message_text, InputHints.expecting_input - ), - choices=await self.get_prompt_choices(step_context), - ) - - return await step_context.prompt(ChoicePrompt.__name__, options) - - async def get_prompt_choices(self, step_context: WaterfallStepContext): - choices = list() - token = await step_context.context.adapter.get_user_token( - step_context.context, self.connection_name - ) - - if token is None: - choices.append(Choice("Login")) - - else: - choices.append(Choice("Logout")) - choices.append(Choice("Show token")) - - choices.append(Choice("End")) - - return choices - - async def handle_action_step(self, step_context: WaterfallStepContext): - action = str(step_context.result.value).lower() - - if action == "login": - return await step_context.begin_dialog(SsoSkillSignInDialog.__name__) - - if action == "logout": - await step_context.context.adapter.sign_out_user( - step_context.context, self.connection_name - ) - await step_context.context.send_activity("You have been signed out.") - return await step_context.next(None) - - if action == "show token": - token = await step_context.context.adapter.get_user_token( - step_context.context, self.connection_name - ) - - if token is None: - await step_context.context.send_activity("User has no cached token.") - else: - await step_context.context.send_activity( - f"Here is your current SSO token: { token.token }" - ) - - return await step_context.next(None) - - if action == "end": - return DialogTurnResult(DialogTurnStatus.Complete) - - # This should never be hit since the previous prompt validates the choice. - raise Exception(f"Unrecognized action: { action }") - - async def prompt_final_step(self, step_context: WaterfallStepContext): - # Restart the dialog (we will exit when the user says end). - return await step_context.replace_dialog(self.initial_dialog_id) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/sso_skill_signin_dialog.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/sso_skill_signin_dialog.py deleted file mode 100644 index 4d974f4703..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/sso_skill_signin_dialog.py +++ /dev/null @@ -1,56 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from botbuilder.dialogs import ( - ComponentDialog, - OAuthPrompt, - OAuthPromptSettings, - WaterfallDialog, - WaterfallStepContext, -) - - -class SsoSkillSignInDialog(ComponentDialog): - def __init__(self, connection_name: str): - super().__init__(SsoSkillSignInDialog.__name__) - - self.add_dialog( - OAuthPrompt( - OAuthPrompt.__name__, - OAuthPromptSettings( - connection_name=connection_name, - text="Sign in to the Skill using AAD", - title="Sign In", - ), - ) - ) - - self.add_dialog( - WaterfallDialog( - WaterfallDialog.__name__, [self.signin_step, self.display_token] - ) - ) - - self.initial_dialog_id = WaterfallDialog.__name__ - - async def signin_step(self, step_context: WaterfallStepContext): - return await step_context.begin_dialog(OAuthPrompt.__name__) - - async def display_token(self, step_context: WaterfallStepContext): - sso_token = step_context.result - if sso_token: - if isinstance(sso_token, dict): - token = sso_token.get("token") - else: - token = sso_token.token - - await step_context.context.send_activity( - f"Here is your token for the skill: {token}" - ) - - else: - await step_context.context.send_activity( - "No token was provided for the skill." - ) - - return await step_context.end_dialog() diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/update/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/update/__init__.py deleted file mode 100644 index 3f01584aaa..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/update/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from .update_dialog import UpdateDialog - -__all__ = ["UpdateDialog"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/update/update_dialog.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/update/update_dialog.py deleted file mode 100644 index 30c4907d04..0000000000 --- a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/update/update_dialog.py +++ /dev/null @@ -1,90 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from typing import Dict - -from botbuilder.core import MessageFactory -from botbuilder.dialogs import ( - ComponentDialog, - ConfirmPrompt, - WaterfallDialog, - WaterfallStepContext, - DialogTurnResult, - DialogTurnStatus, - PromptOptions, -) -from botframework.connector import Channels - - -class UpdateDialog(ComponentDialog): - def __init__(self): - super().__init__(UpdateDialog.__name__) - - self._update_supported = [Channels.ms_teams, Channels.slack, Channels.telegram] - - self._update_tracker: Dict[str, (str, int)] = {} - - self.add_dialog(ConfirmPrompt(ConfirmPrompt.__name__)) - self.add_dialog( - WaterfallDialog( - WaterfallDialog.__name__, - [self.handle_update_dialog_step, self.final_step], - ) - ) - - self.initial_dialog_id = WaterfallDialog.__name__ - - async def handle_update_dialog_step(self, step_context: WaterfallStepContext): - channel = step_context.context.activity.channel_id - if channel in self._update_supported: - if step_context.context.activity.conversation.id in self._update_tracker: - conversation_id = step_context.context.activity.conversation.id - tracked_tuple = self._update_tracker[conversation_id] - activity = MessageFactory.text( - f"This message has been updated {tracked_tuple.item2} time(s)." - ) - - tracked_tuple.item2 += 1 - activity.id = tracked_tuple.item1 - self._update_tracker[conversation_id] = tracked_tuple - - await step_context.context.update_activity(activity) - - else: - response = await step_context.context.send_activity( - MessageFactory.text("Here is the original activity.") - ) - self._update_tracker[step_context.context.activity.conversation.id] = ( - response.id, - 1, - ) - - else: - await step_context.context.send_activity( - MessageFactory.text( - f"Delete is not supported in the {channel} channel." - ) - ) - - return DialogTurnResult(DialogTurnStatus.Complete) - - # Ask if we want to update the activity again. - message_text = "Do you want to update the activity again?" - reprompt_message_text = "Please select a valid answer" - options = PromptOptions( - prompt=MessageFactory.text(message_text, message_text), - retry_prompt=MessageFactory.text( - reprompt_message_text, reprompt_message_text - ), - ) - - return await step_context.prompt(ConfirmPrompt.__name__, options) - - async def final_step(self, step_context: WaterfallStepContext): - try_another = step_context.result - if try_another: - return await step_context.replace_dialog(self.initial_dialog_id) - - self._update_tracker.pop(step_context.context.activity.conversation.id) - - return DialogTurnResult(DialogTurnStatus.Complete) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/images/architecture-resize.png b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/images/architecture-resize.png deleted file mode 100644 index e65f0f7332b79a3f65cd5a4ea6c33c7b5f979f25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137666 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%0DQgMmd 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

  • 0QPIpJL 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%0D3cp!!XdtPG=ij(RM(3)uo!W4_AfOg4m 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Ɏ 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 H@%H}#AiiSr literal 0 HcmV?d00001 diff --git a/tests/functional/Docs/media/setupPipelines4.png b/tests/functional/Docs/media/setupPipelines4.png new file mode 100644 index 0000000000000000000000000000000000000000..1c17ed1b2cd756839b68ec19bf3e17cc9a1e43d0 GIT binary patch literal 102426 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 j+U>s$wMmV!^r_CmVDYV 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%0D5^>TSj2c}JK?fNic%r8x~>Y# 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 H^Y{M?|GMI6 literal 0 HcmV?d00001 diff --git a/tests/functional/Docs/media/setupPipelines6.png b/tests/functional/Docs/media/setupPipelines6.png new file mode 100644 index 0000000000000000000000000000000000000000..07f561587d749fb0348b6d156b526cc97634acb3 GIT binary patch literal 54426 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 deybWa`hVY2xvwT~I&1&{002ovPDHLkV1i + + + true + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + \ No newline at end of file diff --git a/tests/functional/Libraries/TranscriptConverter/ConvertTranscriptHandler.cs b/tests/functional/Libraries/TranscriptConverter/ConvertTranscriptHandler.cs new file mode 100644 index 0000000000..49712f7b94 --- /dev/null +++ b/tests/functional/Libraries/TranscriptConverter/ConvertTranscriptHandler.cs @@ -0,0 +1,70 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.CommandLine; +using System.CommandLine.Invocation; +using System.IO; +using Newtonsoft.Json; + +namespace TranscriptConverter +{ + public class ConvertTranscriptHandler + { + ///

    7D(SW)F>unF@Up)0H84s=9N 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Œ-3@VIgjc()p@*))<}A{b`jw zfosHsD6~ZhesL6gcU$tzD7-%QD(m<+NpYxQgJ-`cM=-|NRjTY+r^or@ieMuqi>nzl zEJ!4PnyU~V;Vyj-$Mq_IbT2

  • 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 z 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 S|B-LI|KfuG|MK5*0{;W>vfD%e literal 0 HcmV?d00001 diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/files/teams-logo.png b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/files/teams-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..78b0a0c308939206aee5f15e2c052def7a18a74e GIT binary patch literal 6412 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 F{{vnI6G{L8 literal 0 HcmV?d00001 diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/delete/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/delete/__init__.py new file mode 100644 index 0000000000..414664e1eb --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/delete/__init__.py @@ -0,0 +1,6 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from .delete_dialog import DeleteDialog + +__all__ = ["DeleteDialog"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/delete/delete_dialog.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/delete/delete_dialog.py new file mode 100644 index 0000000000..216701f750 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/delete/delete_dialog.py @@ -0,0 +1,44 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import time +from botbuilder.core import MessageFactory +from botbuilder.dialogs import ( + ComponentDialog, + WaterfallDialog, + WaterfallStepContext, + DialogTurnResult, + DialogTurnStatus, +) +from botframework.connector import Channels + + +class DeleteDialog(ComponentDialog): + def __init__(self): + super().__init__(DeleteDialog.__name__) + self._delete_supported = [Channels.ms_teams, Channels.slack, Channels.telegram] + + self.add_dialog( + WaterfallDialog(WaterfallDialog.__name__, [self.handle_delete_dialog_step]) + ) + + self.initial_dialog_id = WaterfallDialog.__name__ + + async def handle_delete_dialog_step(self, step_context: WaterfallStepContext): + channel = step_context.context.activity.channel_id + + if channel in self._delete_supported: + response = await step_context.context.send_activity( + MessageFactory.text("I will delete this message in 5 seconds") + ) + time.sleep(5) + await step_context.context.delete_activity(response.id) + + else: + await step_context.context.send_activity( + MessageFactory.text( + f"Delete is not supported in the {channel} channel." + ) + ) + + return DialogTurnResult(DialogTurnStatus.Complete) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/file_upload/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/file_upload/__init__.py new file mode 100644 index 0000000000..b665b303db --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/file_upload/__init__.py @@ -0,0 +1,6 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from .file_upload_dialog import FileUploadDialog + +__all__ = ["FileUploadDialog"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/file_upload/file_upload_dialog.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/file_upload/file_upload_dialog.py new file mode 100644 index 0000000000..374a1906a6 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/file_upload/file_upload_dialog.py @@ -0,0 +1,86 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import tempfile +import os +import urllib.request +import shutil +from botbuilder.core import MessageFactory +from botbuilder.dialogs import ( + ComponentDialog, + DialogTurnResult, + DialogTurnStatus, + WaterfallDialog, + WaterfallStepContext, + ConfirmPrompt, +) +from botbuilder.dialogs.prompts import PromptOptions, AttachmentPrompt +from botbuilder.schema import InputHints + + +class FileUploadDialog(ComponentDialog): + def __init__(self): + super().__init__(FileUploadDialog.__name__) + + self.add_dialog(AttachmentPrompt(AttachmentPrompt.__name__)) + self.add_dialog(ConfirmPrompt(ConfirmPrompt.__name__)) + self.add_dialog( + WaterfallDialog( + WaterfallDialog.__name__, + [self.prompt_upload_step, self.handle_attachment_step, self.final_step], + ) + ) + + self.initial_dialog_id = WaterfallDialog.__name__ + + async def prompt_upload_step(self, step_context: WaterfallStepContext): + return await step_context.prompt( + AttachmentPrompt.__name__, + PromptOptions( + prompt=MessageFactory.text( + "Please upload a file to continue.", input_hint=InputHints.accepting_input + ), + retry_prompt=MessageFactory.text("You must upload a file."), + ), + ) + + async def handle_attachment_step(self, step_context: WaterfallStepContext): + file_text = "" + file_content = "" + + for file in step_context.context.activity.attachments: + remote_file_url = file.content_url + local_file_name = os.path.join(tempfile.gettempdir(), file.name) + with urllib.request.urlopen(remote_file_url) as response, open( + local_file_name, "wb" + ) as out_file: + shutil.copyfileobj(response, out_file) + + file_content = open(local_file_name, "r").read() + file_text += f'Attachment "{ file.name }" has been received.\r\n' + file_text += f'File content: { file_content }\r\n' + + await step_context.context.send_activity(MessageFactory.text(file_text)) + + # Ask to upload another file or end. + message_text = "Do you want to upload another file?" + reprompt_message_text = "That's an invalid choice." + + options = PromptOptions( + prompt=MessageFactory.text( + message_text, message_text, InputHints.expecting_input + ), + retry_prompt=MessageFactory.text( + reprompt_message_text, reprompt_message_text, InputHints.expecting_input + ), + ) + + return await step_context.prompt(ConfirmPrompt.__name__, options) + + async def final_step(self, step_context: WaterfallStepContext): + try_another = step_context.result + + if try_another: + return await step_context.replace_dialog(self.initial_dialog_id) + + return DialogTurnResult(DialogTurnStatus.Complete) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/message_with_attachment/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/message_with_attachment/__init__.py new file mode 100644 index 0000000000..efe3140792 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/message_with_attachment/__init__.py @@ -0,0 +1,6 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from .message_with_attachment_dialog import MessageWithAttachmentDialog + +__all__ = ["MessageWithAttachmentDialog"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/message_with_attachment/message_with_attachment_dialog.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/message_with_attachment/message_with_attachment_dialog.py new file mode 100644 index 0000000000..419fc3cbe4 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/message_with_attachment/message_with_attachment_dialog.py @@ -0,0 +1,125 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import os +import base64 +from botbuilder.core import MessageFactory +from botbuilder.dialogs import ( + ComponentDialog, + ConfirmPrompt, + ChoicePrompt, + DialogTurnResult, + DialogTurnStatus, + WaterfallDialog, + WaterfallStepContext, + Choice, +) +from botbuilder.dialogs.prompts import PromptOptions +from botbuilder.schema import ( + Attachment, + InputHints +) + +from config import DefaultConfig + + +class MessageWithAttachmentDialog(ComponentDialog): + def __init__(self, configuration: DefaultConfig): + super().__init__(MessageWithAttachmentDialog.__name__) + + self._picture = "architecture-resize.png" + self.configuration = configuration + + self.add_dialog(ChoicePrompt(ChoicePrompt.__name__)) + self.add_dialog(ConfirmPrompt(ConfirmPrompt.__name__)) + self.add_dialog( + WaterfallDialog( + WaterfallDialog.__name__, + [ + self.select_attachment_type_step, + self.send_activity_with_attachment_step, + self.final_step, + ], + ) + ) + + self.initial_dialog_id = WaterfallDialog.__name__ + + async def select_attachment_type_step(self, step_context: WaterfallStepContext): + # Create the PromptOptions from the skill configuration which contain the list of configured skills. + message_text = "What attachment type do you want?" + reprompt_message_text = ( + "That was not a valid choice, please select a valid card type." + ) + + options = PromptOptions( + prompt=MessageFactory.text( + message_text, message_text, InputHints.expecting_input + ), + retry_prompt=MessageFactory.text( + reprompt_message_text, reprompt_message_text, InputHints.expecting_input + ), + choices=[Choice("Inline"), Choice("Internet")], + ) + + return await step_context.prompt(ChoicePrompt.__name__, options) + + async def send_activity_with_attachment_step( + self, step_context: WaterfallStepContext + ): + attachment_type = str(step_context.result.value).lower() + reply = MessageFactory.text("", input_hint=InputHints.ignoring_input) + + if attachment_type == "inline": + reply.text = "This is an inline attachment." + reply.attachments = [await self.get_inline_attachment()] + + elif attachment_type == "internet": + reply.text = "This is an attachment from a HTTP URL." + reply.attachments = [await self.get_internet_attachment()] + + else: + raise TypeError(f"Invalid card type {attachment_type}") + + await step_context.context.send_activity(reply) + + message_text = "Do you want another type of attachment?" + reprompt_message_text = "That's an invalid choice." + + options = PromptOptions( + prompt=MessageFactory.text( + message_text, message_text, InputHints.expecting_input + ), + retry_prompt=MessageFactory.text( + reprompt_message_text, reprompt_message_text, InputHints.expecting_input + ), + ) + + return await step_context.prompt(ConfirmPrompt.__name__, options) + + async def final_step(self, step_context: WaterfallStepContext): + try_another = step_context.result + + if try_another: + return await step_context.replace_dialog(self.initial_dialog_id) + + return DialogTurnResult(DialogTurnStatus.Complete) + + async def get_inline_attachment(self): + file_path = os.path.join(os.getcwd(), "images", self._picture) + + with open(file_path, "rb") as in_file: + file = base64.b64encode(in_file.read()).decode() + + return Attachment( + name=f"Files/{ self._picture }", + content_type="image/png", + content_url=f"data:image/png;base64,{file}", + ) + + async def get_internet_attachment(self): + return Attachment( + name=f"Files/{ self._picture }", + content_type="image/png", + content_url=f"{self.configuration.SERVER_URL}/images/{self._picture}", + ) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/__init__.py new file mode 100644 index 0000000000..9f8161fa73 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/__init__.py @@ -0,0 +1,7 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from .continuation_parameters import ContinuationParameters +from .wait_for_proactive_dialog import WaitForProactiveDialog + +__all__ = ["ContinuationParameters", "WaitForProactiveDialog"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/continuation_parameters.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/continuation_parameters.py new file mode 100644 index 0000000000..0ab78fb9e3 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/continuation_parameters.py @@ -0,0 +1,16 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from botbuilder.schema import ConversationReference + + +class ContinuationParameters: + def __init__( + self, + claims_identity: str, + oauth_scope: str, + conversation_reference: ConversationReference, + ): + self.claims_identity = claims_identity + self.oauth_scope = oauth_scope + self.conversation_reference = conversation_reference diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/wait_for_proactive_dialog.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/wait_for_proactive_dialog.py new file mode 100644 index 0000000000..845295d6dd --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/proactive/wait_for_proactive_dialog.py @@ -0,0 +1,77 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from typing import Dict +from botbuilder.core import MessageFactory, BotAdapter, TurnContext +from botbuilder.dialogs import Dialog, DialogContext, DialogTurnResult, DialogTurnStatus +from botbuilder.schema import ( + ActivityTypes, + ActivityEventNames +) +from config import DefaultConfig +from .continuation_parameters import ContinuationParameters + + +class WaitForProactiveDialog(Dialog): + def __init__( + self, + configuration: DefaultConfig, + continuation_parameters_store: Dict[str, ContinuationParameters], + ): + super().__init__(WaitForProactiveDialog.__name__) + self.configuration = configuration + self.continuation_parameters_store = continuation_parameters_store + + def notify_message(self, url: str, user_id: str): + return f"Navigate to { url }/api/notify?user={ user_id } to proactively message the user." + + async def begin_dialog(self, dialog_context: DialogContext, options: object = None): + # Store a reference to the conversation. + self.add_or_update_continuation_parameters(dialog_context.context) + + # Render message with continuation link. + await dialog_context.context.send_activity( + MessageFactory.text( + self.notify_message( + self.configuration.SERVER_URL, + dialog_context.context.activity.from_property.id, + ) + ) + ) + return Dialog.end_of_turn + + async def continue_dialog(self, dialog_context: DialogContext): + activity = dialog_context.context.activity + if ( + activity.type == ActivityTypes.event + and activity.name == ActivityEventNames.continue_conversation + ): + # We continued the conversation, forget the proactive reference. + self.continuation_parameters_store[activity.id] = None + + # The continue conversation activity comes from the ProactiveController when the notification is received + await dialog_context.context.send_activity( + "We received a proactive message, ending the dialog" + ) + + # End the dialog so the host gets an EoC + return DialogTurnResult(DialogTurnStatus.Complete) + + # Keep waiting for a call to the ProactiveController. + await dialog_context.context.send_activity( + f"We are waiting for a proactive message. " + f"{self.notify_message(self.configuration, activity.from_property.id)}" + ) + + return Dialog.end_of_turn + + def add_or_update_continuation_parameters(self, context: TurnContext): + self.continuation_parameters_store[ + context.activity.from_property.id + ] = ContinuationParameters( + claims_identity=context.turn_state.get(BotAdapter.BOT_IDENTITY_KEY), + conversation_reference=TurnContext.get_conversation_reference( + context.activity + ), + oauth_scope=context.turn_state.get(BotAdapter.BOT_OAUTH_SCOPE_KEY), + ) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/__init__.py new file mode 100644 index 0000000000..fc79378126 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/__init__.py @@ -0,0 +1,7 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from .sso_skill_dialog import SsoSkillDialog +from .sso_skill_signin_dialog import SsoSkillSignInDialog + +__all__ = ["SsoSkillDialog", "SsoSkillSignInDialog"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/sso_skill_dialog.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/sso_skill_dialog.py new file mode 100644 index 0000000000..042c00c0e8 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/sso_skill_dialog.py @@ -0,0 +1,112 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from botbuilder.core import MessageFactory +from botbuilder.dialogs import ( + DialogTurnResult, + DialogTurnStatus, + ChoicePrompt, + PromptOptions, + WaterfallDialog, + WaterfallStepContext, + ComponentDialog, + Choice, +) +from botbuilder.schema import InputHints +from config import DefaultConfig +from .sso_skill_signin_dialog import SsoSkillSignInDialog + + +class SsoSkillDialog(ComponentDialog): + def __init__(self, configuration: DefaultConfig): + super().__init__(SsoSkillDialog.__name__) + + self.connection_name = configuration.SSO_CONNECTION_NAME + + self.add_dialog(SsoSkillSignInDialog(self.connection_name)) + self.add_dialog(ChoicePrompt(ChoicePrompt.__name__)) + + self.add_dialog( + WaterfallDialog( + WaterfallDialog.__name__, + [ + self.prompt_action_step, + self.handle_action_step, + self.prompt_final_step, + ], + ) + ) + + self.initial_dialog_id = WaterfallDialog.__name__ + + async def prompt_action_step(self, step_context: WaterfallStepContext): + message_text = "What SSO action would you like to perform on the skill?" + reprompt_message_text = ( + "That was not a valid choice, please select a valid choice." + ) + + options = PromptOptions( + prompt=MessageFactory.text( + message_text, message_text, InputHints.expecting_input + ), + retry_prompt=MessageFactory.text( + reprompt_message_text, reprompt_message_text, InputHints.expecting_input + ), + choices=await self.get_prompt_choices(step_context), + ) + + return await step_context.prompt(ChoicePrompt.__name__, options) + + async def get_prompt_choices(self, step_context: WaterfallStepContext): + choices = list() + token = await step_context.context.adapter.get_user_token( + step_context.context, self.connection_name + ) + + if token is None: + choices.append(Choice("Login")) + + else: + choices.append(Choice("Logout")) + choices.append(Choice("Show token")) + + choices.append(Choice("End")) + + return choices + + async def handle_action_step(self, step_context: WaterfallStepContext): + action = str(step_context.result.value).lower() + + if action == "login": + return await step_context.begin_dialog(SsoSkillSignInDialog.__name__) + + if action == "logout": + await step_context.context.adapter.sign_out_user( + step_context.context, self.connection_name + ) + await step_context.context.send_activity("You have been signed out.") + return await step_context.next(None) + + if action == "show token": + token = await step_context.context.adapter.get_user_token( + step_context.context, self.connection_name + ) + + if token is None: + await step_context.context.send_activity("User has no cached token.") + else: + await step_context.context.send_activity( + f"Here is your current SSO token: { token.token }" + ) + + return await step_context.next(None) + + if action == "end": + return DialogTurnResult(DialogTurnStatus.Complete) + + # This should never be hit since the previous prompt validates the choice. + raise Exception(f"Unrecognized action: { action }") + + async def prompt_final_step(self, step_context: WaterfallStepContext): + # Restart the dialog (we will exit when the user says end). + return await step_context.replace_dialog(self.initial_dialog_id) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/sso_skill_signin_dialog.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/sso_skill_signin_dialog.py new file mode 100644 index 0000000000..4d974f4703 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/sso/sso_skill_signin_dialog.py @@ -0,0 +1,56 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from botbuilder.dialogs import ( + ComponentDialog, + OAuthPrompt, + OAuthPromptSettings, + WaterfallDialog, + WaterfallStepContext, +) + + +class SsoSkillSignInDialog(ComponentDialog): + def __init__(self, connection_name: str): + super().__init__(SsoSkillSignInDialog.__name__) + + self.add_dialog( + OAuthPrompt( + OAuthPrompt.__name__, + OAuthPromptSettings( + connection_name=connection_name, + text="Sign in to the Skill using AAD", + title="Sign In", + ), + ) + ) + + self.add_dialog( + WaterfallDialog( + WaterfallDialog.__name__, [self.signin_step, self.display_token] + ) + ) + + self.initial_dialog_id = WaterfallDialog.__name__ + + async def signin_step(self, step_context: WaterfallStepContext): + return await step_context.begin_dialog(OAuthPrompt.__name__) + + async def display_token(self, step_context: WaterfallStepContext): + sso_token = step_context.result + if sso_token: + if isinstance(sso_token, dict): + token = sso_token.get("token") + else: + token = sso_token.token + + await step_context.context.send_activity( + f"Here is your token for the skill: {token}" + ) + + else: + await step_context.context.send_activity( + "No token was provided for the skill." + ) + + return await step_context.end_dialog() diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/update/__init__.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/update/__init__.py new file mode 100644 index 0000000000..3f01584aaa --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/update/__init__.py @@ -0,0 +1,6 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from .update_dialog import UpdateDialog + +__all__ = ["UpdateDialog"] diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/update/update_dialog.py b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/update/update_dialog.py new file mode 100644 index 0000000000..30c4907d04 --- /dev/null +++ b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/dialogs/update/update_dialog.py @@ -0,0 +1,90 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +from typing import Dict + +from botbuilder.core import MessageFactory +from botbuilder.dialogs import ( + ComponentDialog, + ConfirmPrompt, + WaterfallDialog, + WaterfallStepContext, + DialogTurnResult, + DialogTurnStatus, + PromptOptions, +) +from botframework.connector import Channels + + +class UpdateDialog(ComponentDialog): + def __init__(self): + super().__init__(UpdateDialog.__name__) + + self._update_supported = [Channels.ms_teams, Channels.slack, Channels.telegram] + + self._update_tracker: Dict[str, (str, int)] = {} + + self.add_dialog(ConfirmPrompt(ConfirmPrompt.__name__)) + self.add_dialog( + WaterfallDialog( + WaterfallDialog.__name__, + [self.handle_update_dialog_step, self.final_step], + ) + ) + + self.initial_dialog_id = WaterfallDialog.__name__ + + async def handle_update_dialog_step(self, step_context: WaterfallStepContext): + channel = step_context.context.activity.channel_id + if channel in self._update_supported: + if step_context.context.activity.conversation.id in self._update_tracker: + conversation_id = step_context.context.activity.conversation.id + tracked_tuple = self._update_tracker[conversation_id] + activity = MessageFactory.text( + f"This message has been updated {tracked_tuple.item2} time(s)." + ) + + tracked_tuple.item2 += 1 + activity.id = tracked_tuple.item1 + self._update_tracker[conversation_id] = tracked_tuple + + await step_context.context.update_activity(activity) + + else: + response = await step_context.context.send_activity( + MessageFactory.text("Here is the original activity.") + ) + self._update_tracker[step_context.context.activity.conversation.id] = ( + response.id, + 1, + ) + + else: + await step_context.context.send_activity( + MessageFactory.text( + f"Delete is not supported in the {channel} channel." + ) + ) + + return DialogTurnResult(DialogTurnStatus.Complete) + + # Ask if we want to update the activity again. + message_text = "Do you want to update the activity again?" + reprompt_message_text = "Please select a valid answer" + options = PromptOptions( + prompt=MessageFactory.text(message_text, message_text), + retry_prompt=MessageFactory.text( + reprompt_message_text, reprompt_message_text + ), + ) + + return await step_context.prompt(ConfirmPrompt.__name__, options) + + async def final_step(self, step_context: WaterfallStepContext): + try_another = step_context.result + if try_another: + return await step_context.replace_dialog(self.initial_dialog_id) + + self._update_tracker.pop(step_context.context.activity.conversation.id) + + return DialogTurnResult(DialogTurnStatus.Complete) diff --git a/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/images/architecture-resize.png b/tests/functional/Bots/Python/Skills/CodeFirst/WaterfallSkillBot/images/architecture-resize.png new file mode 100644 index 0000000000000000000000000000000000000000..e65f0f7332b79a3f65cd5a4ea6c33c7b5f979f25 GIT binary patch literal 137666 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%0DQgMmd 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

  • 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%0D`!{J7<*jP93$p#* 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 b7On43EM4=dB^(`JDI-si{pp%v_$nOfp(Kaus+ zpE}x>%H&*0-mGY|uN%8!8+GdY&i*{2s=7JF;)@L@ll_38bH4fA&w20HfBDID3qGUU zyf1B-v=%34Q&Ek5kyT$^|DH<_=3nzyz(NrHY+r_bEMCCKm7S}|i05t(~?u$#dgc?H{(P>;hy z6D?o@Uq{=GybztdgccmC3yO!7vSIF**O}$8a_2MS=ftDss1sm?hHA0`0i{BU7!X1$ zwtiG(tO_M$gAc%ac0N}JJ}2!fo)|_7)mS801$(z|*SGz0UObv4!7s{2POaix+@hj3 z#|BkQ#5i*y$n3=Ehr2y!mh&O?%5^p4A+Xtl0QER$-S@+_B#0`oqeSwNHj63wt?zbg zSAT-UdJ##3;prC_4QhQ(gV|MEXU`%D6YJ5%Zx7aW30{%@`Kf_1NRyI^8t%`m6S5tf zuF@@3k8ArDTVA#qi}Jj)O>8`Tc^u_9>9!G1&-1IBG<* z2!dP`FcL%%JTy&ohk#Cx%m5-u=fM5!sPH`%*a(vTWrdO^y0cTQkpxk)rK6DvaqhN* z>Y9dGPNvLYuTYeDA6o$Ks6IyUGORfGC_FVC8t$otrZ zTgJ05s!+xWZ@Z+(j}-40hA3$h_-CxVd#3d`AEcaOHpj$+q8|4vT2p`c_jb*W%>H`$ z>1smf-*Y|YANer&6StB!QQ?RlUMjYA5VASIN30;5_-FeG#@FTIr&M>||yw zDZ?kT40opdcLWKLzmf>PH(V)#YIR{y-Lb-Y#k;1|_^_0P7d}`Zg{y0E zfw8b<#JcGDkb^Y`97asI6smfpS+`VaiLG#q!i?Q{%TN~NPXxUb-{gd+#-FaaCLk}= zVX0Ne_BuNa=m>!MQBZOQ#qqMpW+F|2?%s3?+!XBkBQhwqn-SL}5X=}hL#dd!{zA82 z+dFOGg@MP{)J^|fRkEZx9h+~HyMPie;U1Q^5{!)@BN#!Pj%TdS%3m3g-=u!Q-$D$E{&zE+XOuWc zaQS)b*w~IccBXUAhLCJ0m`kxR$x&I&$j8yl`a~y6J}K5A%DQLsn|Iy4(n)pntu1D> z>Q^8*-b7w@7z=}s3%Eb6acvl<6+S7-!{p%2ONEbRXFU)b`XE`frO%n-c&Y2Bj|qfy zf8a-p9wK*0J!K~9(k1IMAezBafkn5Zdb6|1we5RNOnh#>`H2motR+yW4HWHYWH z2m$X}O`<)bsL=Yy`Flf9J#*z3c#%d(;Gk#56eFfh{83vQey@X%F0ajjEKYMP&*1Pk zBzSvl*j0TFXxPlg#%?!!T=-zz&?kE~cJPWaxih=W3tL_$+p7^tc9$hQ{)HtDvjwDh zJDn(2F>>~VvS(dH37JMolv}-DFpriD2Z?W^@=H2sTD#4zNz6MYfvN4CyG;G=6t^-- z0H$P-#G{UW%TS7RUq@DLo=H_gIvJU$2N6_mHKVj#mItvXU{Sl8%PA*NruV&U3{z7} z@81$h`VY_G|LgHjcB$22=|c3i{~Zp+D|=8e4O6MsRbMVcE&q9Nbz7&2*0Hu)Wi6*G z{;MGdfVdU~6B?Fba~v*iX*iN{7QNSe<&E*Q-;JArv$SrCx;$jqr{-|`vJQ=wf>dYi zvTT*#xkPiSFyYGqM!aP5rDd-Ep|GBa(I#xBm zzPWII$*epiFYY0dx3w@8Yxgw|8%tf^cSY%0by)Qn#&Pd?V4J zSw#3ZfmqTj0gm?dKu= zoH`!Z{p+JgMAXsSkY|^gK!9$%%*j7%_ab!5d4ZR6+;Ng%iR{7NU@tY1wLQGZ6b` zDX>UP**Iv)P-K%OrTG0b2RIS6BI1} z(S?UWT+-t;7K3YDF%6h@?2SKmGIwvnZ9GaMu0|tGWMya1Wt_?$Q&x@pkPmO~vVjC$ zUB!n9wR@9x?399(LUo6`ML)mZkZ-waf1|dZ46PL$U7th-RHJX5zk5`a{_V+?GvqCx z3Pm=NC!)sTqbnsBOGXZd0+G_m`B0)tKWlfe+(UR;DvcKq7W}j;#kj);vbZFfo%=H_<|TPR+(8RrMpW^$Rp55O{z1eK=ibiBj`ZeGXIQ<8$fj0J zsUD~9ICjEns$W7bJUF>mlCkhzlj%Jyh7U2ngb$_XjEii!o6z)b8$Fk8Kg;*QE08~| zY0T^#aQ~G?o9~Pd`!3;+;SOQ_NF@QD`qyICX8i&`O3#z)NHD)Kr=4weWTwvNkcZlZ2z(?*g+Ad(>D zN8O9_iCCR44~exc=?3aCMMq-Om{XxlB<1N3N6@eRF0J#?rljV7O{?2gCA4Sm1^dGd zjK6pwG;OWYIbLe;q|I+-_gpT5!>yOyi9ZqgkMo$cE9)0!SsgvpH6M2UzW8eme2Mqk zF-Q$})-Z1Bm8Po0(IW6rLd2YhtzLDi<*;u0N;!zUMw*E2&Fz?&qMCpPPor_gk+OWO z8=Xbp7~h}jR*jIW{y!H>j}^l{Eh{W<#1c0A0{*TKPTDem#r^CzvpDugyuLi(5^0-g zrs3uHj`ZqqFnLcJJB;;Kly?Xg_zf#lArVx7`kqy?3yvQzZ@*1QYgQd>yf-#E?rKRN zn(}t)v&YNCcbJm8bK`ketW*e~|ZekXz=?$+#jxNu>m>>=W zn9IhD+_X5}BAoq%0z*=yr1jjEmnykFS-jg!e|?v1=2VfFe%SO|WmWUHuM~OTyY)1OJI-8QTw5zP|9JrTKaqxiKw-~zHNN&)ZP! zD@fhn&QK(LV%@V$`51e@-tH}S;etdMwF1nA?MfJ~ zM2wCjOHX|9hhWrxM;aBTjVA<8yh9VNq6*~9Z7b2x!7rWBUNdiBpw^sYPthfI=EC+S zvea4CX%r^d6Ch4?`i`+ad*UrqbD_E?Z zl?2~fgWQkQPSK&B%_xVYLETL)#YCF$nmeofqhQyKh2Gi4=u;KBQOfU!Ok&ZsJiO3w z3N>x^c8Q@sovj^9PTj(;#{vh`^CHP8WSJaP%v9a(6Dz0Sy5~!J5Z)mYK6wf=f2M0S z`Dow&#@t&4#r1XT-ZbvoxCCjeX`s7lpmA&5-3g7m1qcvGaCe6g+}$-KxD(t7Az07^ z2}vM!ICcIvr}nO|_FH>@r{2po*Q#}~YRzAbG3I!lk!9!Jrr@?~7G@MAti z`*)}F<;1rQ-e2Fc$AB00x4XC+;; z9Y=6}Y0iZGhrfUS2e_k$=%QX1)m7OIA`6{B##FiO+>}2W5GbEYDAFE;D(n*pj z&|8_bRG6Fqy2(@$JLnttHlwL=>24P)1J;u;usR5;%T1k|WNmnBqhTY2Y1L9%$F8_Nx3h8G|D-%v9_bJOhtQW#vQhABgGNZx@5^^i4>m_l+vKuK4xr{r4@B*_o%=rr{J) zX~up*J`PE(Dj13Q7O*f@C)vFAA^AmU5VV4|`b4GFW`TwfD-PywS9^G0;G=Ngf89bMUGv~NrL@HP6P zLTXH7Z7fL)t@w^ymKW%TW>@qQym2#n_3f?E zLfkIEJ7nO2MHW*^oUfMo{;$>&7&0Q)&ta4jAG9;W26mm{TXKg4LTTn(7l&DChEsW_ zGRQLtF*V>jOQE3;CPF3bH?One;!o=U)#90uQU>v|Zmw{Rm!9poCSVsHRZ8fVt(~Re zdB;ePU0R%hV;h*-KVYOdC?mKsd5x4}=9P_wtVal$j(+TgsfqKVc-Q4N)MzMqIoIW#bu`$U_{;WsLrrfwd+7JzIx9gr z^?a5%3IkKbJFHUEw5pu|X9SC#3#mpIC_6ulYf#HWE^KYqsk#ortV3@7+LM3GTQb<( z8#KxAQF`jifwv76pp)JrP>Y;g>=;D^ikLRe6|ziB9?6u!`)w8v<6F&)@sgmR&>-b> z#dfn=;SJ>*d&=7Kqi66qAxcJKWaMEDQDbgMVMqOF`qLH@LZ|6SqVYOWPYs2j-St5R zVElTvPJ`FTxD_hRE#2-yE&-Qa)sNCwn8Ws)IcHWv8^bqY+&aSb$_ofQYz?Igu-%*x zKPTWw?QLwEaYk2g#;NppyrE^oi`k!ZF&JBHg4cz=L?=&P7zgMzWmgeO!73464 z{%0Y;e{t=fNI})v;HQa=%^`nnlXF}m(Rqd4bv(dle4N>)IFJF zTtZHK54R&%u)iLTB^5ocRbPa4abm`MP5Zt9; zyl5>-f@9@hc1qMiSg{W}D`{7q{1Hq{U8(r#@JMU~l7nR(hlE2ZSsP@amZ|T)Ir9lm zRL^2ww_ds+D?El=^0ogcSr{dJbn<93(ldjvyz~{p&|bDah_YHKxfl%IT3cPQiSjq} zU)co7Mh(OR*-7L#dCP*f-n>}5(d4(qOYf5#gUU{g;o|^iv=*VEm<~)acG*GAW9Otn zGwfRq7)l_x0TvH0Mg$fXPQgql>-dN!lpvCQzp!Bb%*!XUCqD;=$Fh@?KLgpQ!SH!e zrsM_$<4&)!h!l^-^A+dHir?gii9uyzy+ds5rczIX`*!S@g&$K~Vf+SiD`_&vD$H*) zmwrI9=V*~CRTIas9oI7zQK_nC(7UXW7|fS$1l+prc#JdGM1FmLJw-pcx6E^27Bzm_!>sxWcjpQ6mpcjr5nRuvSsY-MRMl!RoLZVQmIH|yS%r*K<+5FQ0d0woSA z8W*c{CSYQ8Xx5q{mlBKDXBcHetnx+`6N7+;THw0!g+(T)yGkn$h@19QFMBl_IQ;~z zwp-_!__|Rc*NnQ?r4HO7a?K%$)qSiBE`lFIcGqz7sIZ&N6c+s$RZBj{YR6~V#qP~! z;x1CLTzR-FTPx$UY7D!kfI>?cu9RvH)`5+7F*+aXRVx%NPg@kGhYzcj9LOYTY_O;C z*}(!sgkfvh;I`$}lTrNiO|^N>;5x|ZnQ)m`_J==T|9jcOe?Y}Qkpk3V?Wd=D&>{)L z2j}xR`immti;r<<_wCNVXC;w1fq5~p?!Psth?!L0B@mZ4kA@SA%ZB1-+Swt;hi0&W zCKpv1*stSGF@PpBPe$IxfBdDPjYYCY?_g}I zHFUJHpzfp>eDp|5?FXn-EkZx`kqD@Eo}EJ{azPi&u5(Fw%|1f&$k~9N-=v&~lD{Dk zSft*>jhD~Y)|bvTZObrYf?Saty0VTc04vnmG@+{<)r7WmH9!7I2%>S%(AAsThA*i` zs`4(rMQYbXtzer*=R`{ht7H%d?l<7Cl?x3gR-)&zu~2x#J%H+wkt-IPNku?z2@je1 z(1c~XU1%b(O+dScVy0-L&k;G`|*6# z*@LsSCD3=A=q2U;=;?UHsgs4Y($c%(Ay~0_CNhg~rE|NN5RoG|#CLlUs}p=K}x_{fUDravNb)MVX3^qUc!V zpK_R+1*NkHai-dA%BlCHkHS(vXR{d*&B|8W_+EaM65s`_$14_cET0&7#?NgJci{=w ztQ(1nnN0B!kOckEven9bfehldWL_n!V!0`zH+gDKac1(o{r5Ac+Pqxb?~lDz&--wU z;O?s?&!fz<-ZmIBKNl%{VWm+<- zz9I%T%}l`k5tRM#IMCUKu9R$)5ROza0PA^4T4Sxn`Ml2m0-QlO&cmarWqw@3~g(=}v2HXyc{2&?Ngu{*anbqXOlB_HQoj~6!Rv1(ZV*drT~$DmHyFssvA z>088!CjLzwG4%`SluNIpIbf#t6lT63>h zShq&2$b?C~hooZBay65pDqEC%gXO#Q z7lbNRl65_IB7R1Rv>6$aKJ8^XJt(F9hS}_|ClR*Mkf@Wmovxq!iftVg)OO{HZ~y)& z=88?ouUQ?5BNizBj!*B)gbnr`GO17!#p)z`co8r6!Xp`^r42a&2%Oav z(lC()b{rq;9^&^9SJ6PzgLD(02BmffmFQ1Nl*jinUgvuTmGa`wa`ITB1|emvEX6_Z z#6r+_s&47Y$xAqwjhytg$i%k}B`80PjLWz+%MihRNQL!}Z?EEvRsNJXwx3Fc;TI`t zcifmc>4Gw~TZE{JihS9LJ zmOge__R?-nPkPBmDI=u^*M=xSf3>Pf%vM-cBoRUMu?8-?QI;#k) zO5K@HX?-?l=fsuLC+QOrf2QoTG9&=piX-el%dmLHu{K}o`aQe?lN;XsgCmeR$k(Qo z?_GOlL2!U5&L|D=2d>^D_(Vz@+8f?!u0H<7~QV*@B|` z_dhZBy=~gXO`fB<-Z9D0qJO_J1);Oa%f!gt$cqLf!3fw%80n!D=p*EQP;f;O^oB z6&3O3LBtW`&=};AsV7nOW-AA&bvWlh{mj{7tpg1Ozsfds#ffaQ@FoPO{bmR3jL8e8JwTb{rUPV%ll8jvcGuN6wk-B zn-hTp(545_& zXst^5WWYc{4n-SVIkN@_Yq~(k?E-sOi7!j?YD6{+r_%*|qGoioACO52ZR0i2whanx zlhp=)ap%8{!=S^A+zdBk# zsbQ9h!b!Ss8BJhJLf{7N_fRUWZj%URAy!^8WG_C>RFY7PQ`1-hETTgQyf^N2eMun} zZl=$#D&*n3l*BKUlodcR9C}sO!Cz+*uh}nn=SP^rWZae6*RrTt+NWB?b&ZcwiA73% z^@?Rn;5V`s268y`X|v|E6`#0mVvQa*At|YPRM%+a`UuE-?C>)aJFcFqLHeV`P{rPY zqTYfRn(4c^8smW3VmD$pYlndf4mdS5oxFJd$~20C?J6b$ONFAG3AZpo776}24l{n7g5!t%D!igvXMVI0k2xh4o~P{eOkB7Kuz{2RZW)a~;Tt)$ zV5!_T_GV=}!ub(nD?f;QE@sA>%jaum%IQORXI<_UVuw1`=2xstZBQrFw5RA;tK`mE zYt=XRGd2%ks4#P?oVIhKVFRkEBoE0?-Z^z^2*wH)JTkb&;r%pF!e)5q&lB=!N^9@; zV}B8Di=987H?Yx7+{+A;1%}fFE)2Vw0H%#7*-?cGB{(*&DfF@n=uA8?PJ|upPsgm3 zH9^A8a2yI0;==vTv()`1G`ouURjMlUNw9jWi4WjK6?gylEj~+%N_!G@^oiqb1hUSU*S=oE`wX1br*d9ZBOE~$&^pinON?muNd>mV=LdS**6-QKJ(lh7wz0S_Udi%8$1BvKx zZ&Q!Tgq}91`irdLrwipbKPAA>{kMP3{{M4e{=YZ&f9L8SDD*h3{tUF8SgyY>@+1gg z)GX6Y`k2DuiEs_6acH9VhQI=SRgC08C z+F~jNJhw@}1rahK?H+_`=+9!IrZ72`&`pJzyX@*G{MsX-FMT=GyWf1~i{j`$>uuc| z6k018nCySEM8&fqSR};c7N?w=wuXZ8sh)K}dPk@0e(y~@h$9Q$Y^Jg9MIUF#C>%z1 zX)k|s^?Wou{r+XI{3ntk_VVb8wURK`-xU`&kBnP+jD?djHHa!qbrUYp(Vqx4EnxrrxpLe!!fY z4rZk2#EOn5Nh-TUnzUYuB$7f7F$sFP7o{=Q)*0*RULiDTt1OCkxw zAzp(nQN3=HVP>2!RU_v>1y++@e=`Z*)t1mF%CDE749FUUWo1w+a;>T?Z`ToRlBFtA zc`!P(Fs2CWZ0iewrDbSO+z;#@Oqo27|F(+))A}q!9hgg950BRU?LlMlolq{c28SF9 zM}90!ZeO|vf`P9S5le(eLLHd4mpDP=aW5E9-FCEHt+pQW;gh(1oN*S2!=|CWItlnrM}j#qr+{5c{E_+Ax|uf3feHc3G7Z>%?BL z>d6b%Xh$jWKhyRcyRyZY0NYeAF==%oJVvbHtMvW#D3!r$;ZbcW{K(|MMRu6l2w&!E zyR=3hj;vA+Mbt>SGn0HBitXCrqL71ut(Zc!#21>Rl28mS${H!x=3gjT+sBaeXC$U@ zD%Yx&gjzwR**x%AOT@@uu`Uf&ljcDk5$m*Iksd}~uAb2id1nSAw!^*W8-M5jpSh>} z*HH0)pn!AkVEj;M3>qV0xNs#_XId$#9_N@EVGOdJO!ln8GoSvFd{u%d4!p+`{pv2RiF8J=)wCa;<8Slrx*A-Qb zDfdy2Y)M~fZkxHF^FL3M(lwm>b=J*)nJc~Tvl{!{*daf5Cv^Fql<2~&oaX6cS!A7G z5|BDVtLU}%*Fd5op&oOaNsbo#7{jl9O1k9&v(By9185t(X?zJ?!Wccw88x}j@-Wg> zRf0@8r!-QF&N|^Z`_fn=uP>q~=howJ_4ir3ciK~vdZB5Mfl-rR#mm1nVC~_)yQiUM z`O*P3dKp8m>$bGrPXIBmTO!~?H&eYm)X<5>5_6uM5BZwhKuuFIvx7=8v*_1buL8r_ z^8P9u>%07{KfHQk)z6^Ju_MU;juDoPS}7bMG-6 ztCmyVF0z{aCpFTKT2Ul_i{mvqZxHT!iGfGYa|EeL@U_>(N(dh*Zzh(#+6Cxqm>AfE zu#$rTA{mDQ24?ykdIMgnprss=W~LeZbayr*D*M$Z>w~NjS8w19@%pa__cgodYupq9P!T;da|z5;=USEvV#LzQ{22q3^}mY zzH}-qCFk!H8q#MFD^tZEhL=udR$EzcHyT{`9I53c6XIKxR@IQjm8dNZw;E>V(ay|} zPgWdwRmP6GLeRk@uY>BC87S(#?vode8z?z{X6w^p^U?Joq(4k-4QCcsy$Ycl!;%ps z_@uiXK1|j-lRQuwdZ>9sSj9b+2_QC_m}<_o#;k_qKZg_S@w^jTU%3P;6m!nl=tVX8 z%kS}5+~G6MYhjM`=`hSBU9M|&<8z<-YE-N0t7OBY75K*v1_0OzuYXyqxv4^#t!gSa zh_yzL@;U}g$n`K^A%T)?g~bdnpgch;S}ZfIVpMUy%sH7|Y92|#lXru_;(+14B)ywS z*7qS)dL7!ilN#bm7)ypYmSVIk22bjuh}iOfEHYUIG_wC2)e8P=Nci8zOS>ox3|zR= z`ZEntx}gh(-}Z4G4|WQs4gI1V(013`s!BI*gpNME;9HC6(CE8KD*xqKLW)vOIvmMm zB8LQWK z)QXfDKbjSCK(U3WV%M`IBoh2e%B{DqNg4hk6cS$@up@rFczc;q z1P7#oNapEZP-3#NrhJehSA}mK!`*1qkAd*80?~Q4_AoF=j*FFHH~LF>_&|b=eskv0 zkgB-pcoWa5m;9VGQ2L^NBwQ>Zb0@@1E1onc+AY5bs}yG)2PLQin!mD(UT?Pp6M~UK zAV{z82qW=t3OMBoOZ;2yp*MQ2xNms3Tyo55(@pSMF^`7*@v?r2QENpOzh|s{Ih6k- z5;r|J)>MZ_1S^vbuobtFR)%&I$Ir4PcXn6AOy`7}3a=wsq@1{(>Vcg(_0Xc_oy3+D zOU_&``bE;@&uo;vbYfa7UQ3T5@}flWvL&|EcqJ2!76@Bc$n%bGDSRQ>Jq9MnH@z%v zO{VU^Q;M{gEXD z-Bl<7Mb)W7>DK1Z7)DXY5=YP!@Oc_O)pC!VTAgn7NR4~Yudb@K4^pyxYbxRQ6QA(I zIG}H)l011Q57!x~k`qPnwM>%-2BIH%8cr|P3!GtGLU=iF^<{}`5Vkc+qyo}Q-fk@s zz3%NH6k=KP7P;Pppl_!6SCYv@P_0PP21UHG@ZD$PlS(z%VGm=9X`45_NZL4t>nUEM zGJGCAXMfV3tkr_Ehg8F((=1uyEf2ED9{GqP4S-a5Q*g~=6l+h=>1*ic==t&OEs?0< zgsxeL*s45?6z}VJklU$jm{A@5c%5;KjR1%;*3+}UOrCm_6=Q$mKgCK*ikXvr6H(Sm$*pVTi7gWl3{O97N)Z)hm| z*vt3jBVup4p4hU1UO)I= zabUSV!HJ<3EeUyH8$RyeK;E`qXDtJm$f^G$&c^15WvgXL1}AoXMb@4B=ta z*IJcr=1du6G;9yDVGC?5#pE_czuG{d+Yjp$g}*notm5iJ`&rx#A>OV~WiaBcl9qL! za5y)sMf7K$loDeu+Xu(zC}(H)-{M~<*{ni@4_Azd1kzzyZcS60F=yszY7Y5UhWwpo zt@e&!n(~wP38O|wf2)4xlXFrQj4>laPGza(7@P<+AZ8Bb4uo(=G_I92dN-QI&74Y- zKxn~M*IlpTR1*HR#Epf98kXwlL8S31Zo!^Ja#WUKnT#_Fg$9LVD{5N4Z0c=}iOnU( z{yb>h8QlI`X3!_rVp){>RR|aDA~$jwGKoB!i?qz@w2$?BK15T-bh(7llm$0qqe_ zJGVWoTZi*?#tNX7vjKopc8tnObUNH^ptTfx8kENyMoM@3Seg_wjbI6j&YH7!eSo%K zxeR=n#;;>bg6Ppw=jx$FIhx^xd{~WOFdgKxPh@zUOkGROX=W*5l`iGNm9=(s#MU^R zlb4TOT;q=TbJRw(V7@zP;O`L6kn^U6(f_c>`)5Y)ZOOMJ4*#|~RnpD4eVZUTf(G8) zfc)usL(+O`mAVdg__zkG4JLJQWFkJRorv847;cvw+p~^DNym+LaRq}R$xi3jFm)JS zY;sP5V%n;xS@4qQ#ZBtDn(F^U<@7&LIB;Bi8ECt^NE|=wN|0hn{}3oh71&z0oeSr* zB?3|jeF4=W*Rm94eWEOh%t!<}0~kU{Dg-<VH5NY%Qx=&;<2WEOy-@IFF8&_7&5Y3TR^*qvL z&)|FUj=9Qp1iV{g0f-KjITk=hzIr zug)nn8HzM2^ry{NtBv&3R6ZA$lGE@hwZg-0Gr@JKZyhYH2OK&R3XpNU*ZwP&zE@96 zq)zseZIosi;}^=hS&A{ZFdn)k)524egRHBEA5NyLC(-1r4XIEpapyXmq--=LVHgQ3 zFVNj=`E*Lq7Q>eb-IsQ6-hD6)z73k6DLeG*;bUWmhM;I@m`zYU zOg1{#RL9$Jp4fa;sxswFQ;`l=Ake6-A@f?nIbU{i{4F{Ml*^j#WwrC2JQe=SDiUY+ zJ6!shPLN?)x6rs#CAJ5e3dEpPL%iRe!DB|-Pn^7590DjASSJ+&$ngWy1xUAP;pF_W zd4n$gXX5kvd`92k5Zsf%VZhsF%yINL8?V!K17hz#TB&;9`+s;`RCEueWJqOw@(<7Y z+xd!22=8J`hbWPdbkwvQO=etDWg8k_J3Eeil`M3F-F~&(092N|ZnSWInjuOVAGww= zoJ7F{!BSkCo5Q{iZ&L8>I&yXYCL@vA56BeEZS_hPP5>Kfw0GViTMK5ol_5z^pm0j` zVY+KJe1Xm9HZe?YHXu_-`e(K9d*|EW{^6U?bB^}%9~As8!k!R?d5uwAf8c)-Z{m?# zJN)=%32UN~_oYshweDdSb}lWX+XZTNA2e@sV1EM{tzYx7zqIyXcSIhd5hkbc?4YoF zfjU+157ASbJ=fF{Jfln5j~j%vgUytxJPa{sjGq%l*Ap*FE|C)X%`Gz2IOcC8S7W-< zSBajL?_;eK8Y)1P)T@-!S_b}@dtC%h@u)>se}gfpCPhejH~MER@K*i|SVQ=q3(L0& z5fZL6A){YpNF+?1piQ%*an>eLJbno7+0HB%k-3hKkb~~>y~Pz*90{{N#PR=(Mf<-J z82pE4|AB(YL!=;RkDO^>6tq8CVQMJT*X++yh!S$`sE11t^OAFj?E6@$wxmO^tFRQD zTB!n1JL0n>Y(MeiOi{^#sWvm8WltyUPS@Ajer5P}kwyTs=yhIklPKxdQB==SoEPcX zhqNF;4%3XMCb_lb<)?8Ey@pKX;@WxIyzXfSS~i{6h}y8Nh$tX z=&)A6R7E5L!XTjNQj7z$%C)!Sv9z1?6VSD@^ykASc-;;ben zkDv>-r~^u)ba_<~o5{&r{le~6Y$4e=N9tqCc{Ld5GE!x`7I>)hlKAw3pVQ6yS-rdkJcE9pQ-hp3YED;ks8TDiZDQwvODZhr@WybP5&JtfR<$QE( zpn{p6l?hoCs6xp(i89(L#e10Zz|TRkE%VZLWaW#_dAq{!&7IEXy)!+%CkHB7SfeH& zhjHSw$0Fa!0w-W8C%X~OS^vm1AiupixIIgqEv)-a(Jc{?=$yUZrVP{5 z!H4zYKBXn>p~FWS%=WMh*hUhE^J&NfOH$DaOq}te6_`0bLR?FQZ+klzBY53>QOX^= zv%FMeHVkn!u2XrTlnatQiFz~2d?K{LGo^$qzM?~I+pxp) zoBpRjfr>g^gz-w-YHxFo&J~UN%yjyggnS_yE*_SP zD9aetiU%COoR zIS9+%%iaPFdd7Ki0-Gbgs9u*epc7HZv$l)}<3A=j6C3x$dGEw03{^`$e)$34Tg z1Y`IfTDbRFHGUM9@TAE?6v!#pB!W^u$v>IH<79m-A@NP|=wk0Qc?$EY|Bu!Y=~DCd zwkYiDA^OSEtE24AX5ZkQe#-Z%k9!{}?N1s^-5MG;vEC#-;S%r2*|rtI6|{UVW(RKB^!nxeL-{=z$F4W2lrBgpd z$2%*~<>-ml^H9F@GTDj;1o?qlYXf%=mKO-PSs0%%245t-D-s?YG0sp-E{O^`I_-ZK zb<$(M>A8fr60J+LEBX%J?k9sq;x6+sCd4D5Ok7TF?8dDi1~8 zIPC)J&c zw1k{jqakfMf;mP^;=@XxeQ$F6zxdXVxMpy+V;;A-Gg(47OqMkJUr}vfj_Vd?d`P-I z*W-4!KUZ|%7ft4KDLrfV`uYd+^ar<<{Yo9_o(m0Act;nE8E)Uucdoh8d)|;QCc8lm z8<345{z!uvSuETJ^1>uQCr&IZs$lYvGg(#*CnV*If*2qe>{#gUJdFCSw^;6F4$+jXEmbr!^>JjGZtaZ_LNPaH`hSrKBITX9mD zY45t&2jXkEP<;jmDZ7z=`1pKn+)wh0bq0L5lgCdupXVwFi)gO;mV9ZQ9yxc^jiq)(Nbxs|zjEe5Mf^B(Gac=upZPIliratNw3 zJZLv9yFJrVKRF*f$T~Atra~@CKoS;pm9sY@USS<(i$?&{ZR2?XO;z9}YX{3KnEif5^l#)#4(bA)AveB|AqIJ?Ko#kZ)7A`Qsmr?mXy_%(t;VE_6 zI0EWMDIFsv|HPbee@ovLoxP)M&YDc;F(TH)%LZR$Lr`(;?EyAt(k9Z%N+!3D5$8;^I!$i4iqyDFrN6ofB%%xOgzAC|>Zj zs!$%p!J!!wT4qOPj;fSb=ci3*m_mqslus{^n*+_XGnOn~Ly7FoPbB*kKXizbIO&mO zG^$u9&NmsdPK!Ncg zebCla*>GpjcR#6SK6ywVKA!LUAY3}CTI*rRQntR%bS-e`HW{g#twZit&CsD-Xf^S! z7X_VDWS?%G#;Dc$*2vd zdf(SGedKM&&yRN_qZE>rPou1>x_iZo`kqC|CKe7m9>EQEh`}BXq!0t^bkmwv0BmESk;gc-RHQVOliYgS-+9yhYqMR$&X9D|D08#G% z&&-rP7`n(E)2PZ)ZONGjcH5a4F02Q4?FN7hWrvh1BCN#{9#pD0gutl@zk)7=T(O9~ zrFJ%597ql50ZvQMR-hYKeWPID&4MCcWEeY0s`CBy2{g_dpiq)GE(SJra8S;{nf@g} z)W^A=Yy1At0Q{Y18x=(_5;Ph;QEgN1_$(^dGW&!(KY?^wv*~eT;jj$1lRjT!v?fBv zD>%(Spb)Hom!}tJZP8i2LCx*$OKC`0GftMF?lSUc0WuTP0)GylseNr~(+ty-Y+)J2 zmZjqoFICCqK)y(Rxrl2A_@#z~4Dt$H0%{YHC)YrL53UM1xoQ|d5wBWr%N}3L4O6z^ zHA=;E*mE794VQ~l_FR{Tz%)RxvPLaTEJdJ49yh_wbM4qvNx^pdihKQubEYH&DwOwffgN{{0`61_@WA z>eZav@6$zbPWdVs#rKxadpkS&eg(WqZmZt*esec|^iC~ZIYA%!`tP=7z;5Zcd}od) zB+2jB8^@)fDY0e_WcMb_23rY#PbJ*uUi_UwWKK?peA|+gR&u5}j7d&gC9XA@tcWn& za)5HAr(hr!b<|yDlBNK<&~XU81dd(G4iSB(c>$Rtrvf-MiUyzmf;VdOO08JA|3?_G zuV1!ZGKy;~K5U<9wqbEW%cfUf^8NmMUwx&lWvqrdA2X`48aqRtFjy^*(G00TI2gS;;i!g4G$_)T)Q$@cl|W zT^9Lokl~}$!~55up=+g_N)N1ijr-Aq86$?p3ClinivnL=Q4C|ihSX3M)z^jCWu6IU zs-zV>b9q%L7saV+U4sDaisKXHpe&^(mqMDJJOg3a%qA!I;SSvQn(ZoCB=VU$kdwETnYQ2bMpqS$Xqs}30 zQg;h43$n$+BeFVPK2?Zviqom2Pg;KO|B1oGF7+4QDw0Bc(a2hT2m|nv9?*5977m;i zrz?d?elxDUUCf1KuYL_M5TIW!DX!(d;bO3Ogv@n`yJB~tl=aTB4Og{#^v;FUW6-hNJ9?P!40k_e|bOVPRT4*X)oA1We-{6V6pS6$&LG<0k@MaQ=MzsfTbXvl$=Ut{!o~0P>vQ}b zdV%Tsq#gLl0YxRc!1TP;fWTjkS5bjPW|u>qc!QlppkXKGQ@OLzf#qh5?APmWT1Aa| z&Y!%iK5@pP1Z~MjKlB!SjDiK)c3pQD0RH?Q{#xW?(Q5;Jhl`)^e8E62;0UKFuQmOs ze*YwksS)vLMUoR@HZMJFa&lFA+WnqI{;Y#h{T+vwspnUHY;&XK&S&dOHF%-xIswAs zqE6YeCE@^H@$hhT%;}t+d`~I;Ya>fan>mWK&Tq4b4X{v_geqdEW2d-vLEg!|JtOOQ z$v}Slj9h{(>AKB};K85^gD^q>dz3YvuEaKcbBH_C#JExM$F+FO<&UDqlse%z0#4qW zFGa|Er)v18`ONb~DYR@EuZOq4oZBPVT$B?9h!w)rsr#`FDgj;~l$ok`B3=?AF55Jf zuH?y6%q+y%D}rhmeMVUY+*vj$+Se{4)PM(nOImBC`D^9Yfhmg+2d<4&ien+fG)_om z>m^YSZ$qk6H?~vE!j&DBwraC%h#%Resw$HD_oG+j6p^_@g(%9G?x2&1`@((Q*9D9T zayiN^OV;don0dBzlk_Rr^zzUL0}<~;d||e0`B8X$gEu?xx2`kJ(!D;MUV`mhttFA{ zrteY`1)w>-Epi2Qo$lW3h)iA$5}vRR_yX7(Dqi4is%a-D_TdmzI!#24fpZD^PwFFw zbjfU?9+t*=N@2l9@(x**$;I}JO(tWi6QH=JuQVV;wVOAyg2U&85#x($7r)4mqc%4| zIz^V<)c$0LZauUa`YMJYt)azgwMlavp7o^GBFjGUiy?3J0ls*HnkVyN*~?6W(h{Ri z-;Rxtfo>wgx5TIZzS0znV@}Z59*X^OIcGZ7!<#n+iYMD227LkS(Xo;?7f0}J@yQ}a+`aq7_g64ocG$febkwOWSE6B8sZj=y8Dt4`O-A4%g-G`Rq zO^~Ly$ed$G?n`j7w9acFu<+ z4FaBXuNrOTTm!BeWXS)*T%ua1nI}?7I~{$5YI0VbhnhfX3aHQ}9A zllRRUO;*>Yb1KF031^I@Em|+Xpvf01Kylz$UybJGrBsdPuNW44xw@CdDxlZaa`SMx z3RyyR8Wt#^gv0lx*%g->m@7--CGHR@rmB^x5N^H;A;GLYidB>1F(1*H931bCT`+ES zwWE4uGOf@A$_^v4P+S>*N)BX#+a*4i;mo7?LLgVRUk$Bgt{3Gfbt_UR!ST_LncOpL zr_o3p$*Rk^uzoV5rIAr(pK80@|_~VWmTc0fOFTrlxDbK|_z>FJz-n=b07^#`rPDfO~ zyJ3RjmJc|J%tqnSEr6QvbyG3Sar4;xl(Ui~Xy8XErI@NRr(`FLSGgV|lMKR$I36Hd zk>QYKp^~s!r@&^4FZvhkos$bw)m(hWN%qnu&jxThxHox3ldiaVKwC_7)xY%l!)ziB z4%hFTq-Z9);z|GJ0wpBS?=q*bonULLAJbTBgn4FTSt!P*dn?Eg~V#>~-Yy4Gx9a_Q|NjiGh;MOr#8y#0tyiPf6`_ibqJ>-3wS$E4&MHsDJm% zH>L!nc)V(bjT}5p*(WiJ_jYmj!aUCdne&ayl1t}&t%eE=wD&%jzR$#j_1L{p4I73D zi$P#gx>Z#Iw3p2-DDS(;{lsjYspEbfugdi^uuM4aSawMP+UTAcZvo` zAb4lADo`#L` z?$bb0=7j!)4}qx}6F7)t;xENyo3TJaiWoND>GP72$6&a8xj;7tn?>&;i5mz5XR&?D|c~`F6Al! z^HA+Zo<2kDWmb0dZO#{|=sWVcB)H#@wYR&U^N%Ei#R70-HXypMu zBX^mu^R!{P)zd}{x>c55SLl{BennQjI>|Kky$78^la}x9V|u@BDoL8;s@k zGino7pGF&v_R#2m2b1z2p^)dc=BcNBH`efg!uh=V!D_j2!$Y|PD+$m0K4T$qy9H3T z9IhZ+zY#APL6+NQLkU4FF)-6Orlmxu;wPbXd1`gBqu-D{Gig5Ot`-@11XR9Ka2t9a z5c365h*W2;LDo+}@y6pB$;@ODAaIwFUqinm$gJwJTKnim7?e=&9>1|OGhv-tdp|QR zSmv|N);UEA(Gm`WXspxbns-nE&ZK9i*)Vi9X)ly$0`yqQ0K5Qwby$W& zl-Zd{yvOjBQP-))P@+AT4LgRy?f|-6R#`we`NV}hjflt`s?mC&UFd$yV$r4#j1=Wi zV{B-f+8)V^D#tJJsP*~cL9WcsNwBm}!xl+AZbp^hnI^)Bx3c=8v-N`}k;A&lpcxud znI;dp*6Ls}OLmL|+y%A}W1{mM2%egio_89{>@L{krcNBq6X*O49oOj!F=Swn(}=|9 zf8ZQU@iZa2lQIwS^FlFp^LtV5vki-+zjEoqWgYi!(n<6CE>jGWr35eKl(o@yy}k{+HQW;7{fb{Ge`;8VZqQkZVZq+>CWFP^_%h#=`t7jM(Hxo*`@+R$GCh|$3z(@= zmXgT$R#c0AG{ztKm%LM?*Ry+*Fb(_sl9!jXNv6_&8cdZcFYm+gs2paifB(uQubqi= zsEH8@%3{;;*@Rl;?fTY05dI{QLlQ_8LMu~hP~w!=K7x&Y$Esj=h1=lrfZoyJ&=N1k zuq-j@W$SvQUl;6QvBVxbUID4P&ae=h_(r)3+vQ#y)OL>;YrF~|vgnq{sQm1fZMus4 zy42m#T0k(4)Cbs5v;-QnQ#2_Fd)FHepsFooM_(jID<3?QKZfBRW_c=F>;ASbO>Z z7_c;Vkp`Qg|NRrt|MVGIoENEc9sL&se$2X`R5MtYJD&HaR*-Z-oM%LPh_I-M4fSy9 zL?-TL2FnSnXTIf>o`6EP)*EGRV3x1g7} z?5t|uD@luRzKwk)o-+31I9Tuz$1!KSsBC(}w%*!<%`^Fj&6@PZ&Q?td-O_(s>Sl(e zf%NK`HCq33=>R-`#gtxFQXyXDHIyJp2?+h-7>z@oN6U855+Gu1Oq`5`jwW_I z`~JLjk`yOXSC?B<%q$CUa{J)-U~+SnmZ&;7b;nMIJ1y!~Ke&cYXs$fqey9&lYr~9T z=PX%sa$6ErD=)Dg4EvWdImD2oBHSf>o<5&O;)u9JVc9`2gL6d>kHa+CX+q}^Y8J^; zeA1ywiha@-KK$yfbAgp6H;!8E0dCpePey26OQw@sQav=^!O<Z<87g^|m&bC~?!R z=+!i=DH{RTwWp=70g}eflOK537o-so3Vei&D4d0eh&=y5M`)noYe8ftM8vOe5GkTX z?dAF-=9sjC!DNRtf*~n@Xwl6z*D^X4S$ae~ckRkUB;i6BDOsfBhB!Z*g~ehrfuf3P zD?A*{egZtAOZK9n@S1T{;-&KGk6Kagz3)sf8GA=tjD2tww9~E=q!J_c&yU0YrYtC924n*kDi??I_>fowa`>L%_7okZn4+D%21Sxc$ z!jd0o(NE)|@Y9H26kIBXG;~p5pvR36)JJTxEtX|`!{b0;0|$wAn~lL$0w6^-K`hQj zG*TR`gc?Ym09j;Flz664Td;{lFZf#QR?Or*_#_UDJadj?R$)bHlI>LG!tWa6pOW~! zwZ>MUh~_F&;p+2fC74RLF*ihd4bm~E;(y%?uN|&RQn|fenH=rppPAO~Ki<^$q&eeCxq$H9vF|egNAI6`z ztqbv*;uBRvya{*1B^Q(0j97&erencw5&Alv2JE`_0(uRv*)$oSk;r1n3$^=3&iw`` zy>WXiUyE2{jY@i_Vna$)SQ-%>KQ-+lo62IRNb!J&jgnMBp?iY`B_#4>*AVwL0~o}j zg3HyI+saEutld*vLv50!W8W>q8Obg+n{u_9>p%6ZxbFx*Jlc2y4Xl(zi2lr@R9nQp-XUSpFgV~Xjrr%^0a zL1v4DhnyFN8>?N^dp`pcz8rX{1TZ`cv}W4eMAvDOQTKrKy|PizvW^3DjaABwDx&yB zVjF8PN96a;4sVI>sK!?C{CBB0g(C&Vkq$0`E>)Z>QPCAM918i(v+7f&sxe2CU!8Q= zXwf<~8E-BdNK+gl7g(>Yk13n$D#H6ihqS}7xUh}j*=P|_nF=qbCE3X6Sbd6IHjslD z(H?-v6qmrbJH!cj){0WrOxKbrARZ>n9ZPG_va7*b?&1CNT3fZpTyPUv^wa#)&%6D; zg`27AkDg`Q+L7EV&7DhTLZaMg>cX^ffBjDcqy=eUH( z-n4F$jGw|W5rcp%LoPR3_#GF8AS2!Q{ZLJ%gpUY{PkxTKgr?6dK4xdF@T#hPlsW7S z-jd)iRsPz#HSAH}uSfY^4*9XmiYp1)w)Rp8loI8iCT-z8M)=dQL!F(DfP6l)UE8EC zEZNJZG^{xO?95fXe1Sj}HsdU&WFeG*#|!Y(LZLtrj!{%!kl*iZKAg$eJX$;fhxfpU z=NV)+joTL;oG+`MN}!KT;U9XD;N{=Ni&Tb9G?iS9qv>42+*KIgVMC3TV4xlk)*A^?kAPD4dprwduLH+;uy&p(NKJK zEfZ*JWy^RRkizU+(hwy*;|I|~ERYIrFiAcgSB+&#h4SDl-Nfwm4^+2*S~}#wiif>s z`6m{io(vN9e>x9=TQDx=(wQ>qmmI#AQ$2J{SdIeeCp2cVDT#2iwN6ZvClDaGh&fd2 zqRV;ARR`!%wx;=R14Gj1 z>`(ksgoBHbkMS|c%mk^2q99$@plDCQ{G^1oIo2mqI0X;n8Ff1+5~5;p#F=Q>ln2)a z*#>#YGL?BtYVaw*h9VFFK(3t?PEOCv+X78S#EQphFb!D_oMEYey{c>($C}lIedtf- zz0Y9u762{Q`ld%kPl$+zI=MkHe3u2dC+!@3P%lWk9gF!PL?@o5S>jFa1VM&7V8M(C z7Vi$`eCZVS@Q2o7?!mU?FF!|1fIrk0W6aw`$W_Nq11)MmHKkh6HI89q)ur;1A_=)= zyE1|kI(i-o!!=k1zVsn)mzzO;pfpjbCBt2?--jwjkU>RB-c{(!^4z`9tV+;{J7v0Z zd>W95(d5cIFBZDPupE93sHJ%Fh<&2kD;b#^FG90=SoVw)>2;!+P*obOU1FLsF^J7Z z_)5(I$a&_Wc6T6yp12L&SNVuE7v?Da5qRk3(VH&vd+ zF46Putk>H+a1(aZ(k7zEaJsc(cYDeS%iC+Mu2- zGMU=%JDz2UfljpH<>Y?itCV-YyHW_L1{FXG%*|65AFaB1bSSS(%K4E$a!#qXi=vv; zRM?2;=NG%Od~M-|hYjRdOTf#vgQbtmX$WH{B#b0f;8Eid0>BO;p$amMjwRTUDry;o zX;Xdzi3%L38HJn`{e^oLL>4YwD@aV}CrFu3OOcG-EW7VUj25Z{Ufz1A=0~%dG{rJr zPWVTV+WGN&Ho=mwmJ%BB!hv`4+}Iy!1*j9DF^ggqAGI4qg=q$FzTlfE0Bz&NV?^_k z44;tQeIHtctrB;aXn8YiSG!Jo%!sCW&hc`$T4+1$A$M$6u=y*wria&BO})k(88Dga zYD=OEqO?LGHP5gqGpvLBHtk8NXz7bmVhIV|6!wYH>FW4SfU)9`;rG2B12j={r88&m z9$)?Um<|7HUHC^S+y@#x5xS723&!{NFg7OMa?^&R!~-V@&xh5m6=brVJ{ITheWIY{ z6iOmsu@jz@I9-TPAg!cVjcA-+ylOKg9>0APu0HBjP3)4*lh2V!BhLB?3XP_^?|4q9 zhnAwT1JVYChueUqdFIdq2jUY&QMT+w8Z|{GlRSQU!6Xbci9_jwm5rSyR?tIx)&!n( z6$vq`%^~%x?CHS_n|GXNJayU>Ogd5`Wp#3SOA-$QHs$lN+ryHMPL?k>4S*i=d6M+G zcZW1ABY0oP5Z5l2(q(FwwC?KDYV9g~GVy`_ag)L&RRlAqe*OMjW}|8jW?9M)HfxFK zM6w(?RglE0(K4E1-x$NiqJ{Bg-4kiyZOA4c%twu)IRrW?otQJfcJ+y^8+u)Xh`m6# z_GiRmule@D(c#6;N+FV3Tp#}EbInY#=I+?bZIx;6=_k{(xkpgRz zOpft@<3~_KDP1Neb9N=h+%cJI2s_`$SE3di#o7bjCX)*RynuqN)WFXPE# zE$#|OKYLCGb8&{e_GvMqJ}sS(?8m<0mv;%a_XqE`n`VzC3l{iwFMAS|Cbg$6FeZ6T zjKGwmH6TKWd`HKa(-bsb1PN7zOiz-&v-{Lujrf;BYORE99G#-=xI)dN68PHiJfTYR zBE8TH=cXsKo9jNDdJf2ohhmbkY3jM4hRdVG4EG_5KZu ze@lgs-NJJjjv|@@sIG5KdT3!$Cru{KP^CeIiK!x(Im(ayAO_#@y}Z{%-++XK7n;+e z%RRQXD!ZlisKbNyWLEI807?QTgZxsQcBefbQXj8#S~4ke-uVM2urojgt@3^*|D3uc zP|eg?cIh}BU=&d*;n~H~qQWslx;tKV$=e38pHe9qfkq&jjUYO-`h75lz@^0>u-xgG zP%&ZdeYM#8!)mqcsiTXPE;zf80lsA3b*)(YcOTZ~Uh)(m>#|5=uqUdX>&2XZ)H39n zusleMW7ncP;=Mb1>zzrLqE&b7@SH-^F_r>)wb1U<3^uWQMW)5)=+9kIFa8kPpwN9% z&HA2Eten28C)AXGnfkMqxnhy(^{2a%KQ^zo@Ax$rdxd!QI*83SX>8(jXXH5_Rylh{UtuzNHWOzO9aWn|Lr$I~WaWZ~ zw!o}Tn>`}wBsi_?(#9UB+NT%GEwzNVaHP6(0>N!rB!P^4zW*_@tlojyiy7k#ttsoUDfFD;VdArV=V zY0j=-OmaO+Ir|X2M7JzZ>N2zkiC_OP#A=nCJ>dfrE5${H?r(JX- zzbG1%cNdH+Q7CiK9q=w|Vw+*4_qow^xwXuUS*E;OSyQwYd!!0h@hj}i#He(_NY(6S zO#fkchr=TEEcO6$Jt_j_Gg7#DV;?)q1(wns--D_&rnZwYWm#go=_VL`2ofGGA$7I#0&TK zCdBCse~)iQ$i_g-f(z9BjC*u3p5RfgKw_^rseAnDYMpSI#Uo+m`ilTp;|dYu)8#F> zq-B-}3!azp>xooqb0Rypd-)GF0(p{ha=6(-%efFg2X@I~ag3TYCG!IB^c%d^J zwss(C73y6Fz5NVE~oN3J{NpG@ttbaq0@TvpAN zykJ;}f~s}sglS*BMkyQ|?vOrXqAM%lZ9nx`SIn(S86imjv(zg`GsPOG5S?s7oa*kdku{p1z2*-VM<7A z)3&eWU-T9l+`?O^odw{f^|^&5%~PNyr(%w7L9?QyUON+D()^cfXP}@G%V?!0eGVbD z{w{fX%f`lOV;Qxl3AaDtUcx9~Z)0AMUP##-sYxs1gI`A{9L3^zS8+A$%hChAP>Sm4-e_FEW9Y&!(KG#tqeP`Bwg|#linnJpL&PrvKVL z=t0&IKjz(2Ps~H_VQiu@2UYFv9i2)gbRPq=w*}G_RVTIyMGR)xjG(CQF)Q;-0H+{@ zQM_3-9UB4A8lC@_cX;HgJ}U>pL!Z;L=FvA7b{bnjHbpSTh>9o4Hp`fB?kby`&70iX zG%#$g4GrSnH2OyMniiwbC+Q)%P$U$6IXE&Q(pyR9!oZ^8YxyX#`fKjg!PEwHbrLv9 z6=0U!5ff8uHquapX2zBIoPaLKwtR0r>F6&lIP*Ej!l~bTbzb$;xuL}1-iP6Ru2f!t zTOI&@d4^XRN`m{=iD_l=1)l7tII_f+QCNmQbgG zGO>v&XHA+OgAxT)6=&AByteFd$G1rToNyOZ%)K)<=`xhG6QSjw6vr8L7B+%Maz7HN zHGNb+ER0r^f$fIyC0dGcxA^PpjB=qgE2VoJR-~9QzQ46^+2npuhot*!i^SoMPB%qn zTU|x*+c!X}-et5~`oEWQcz&ZF{M2g|FlWk|gYf9B6K5TP5 zXf8xzSIF4lfiCJubuh5@#i^eb$Q+N@+-)C2M!_hjwIME)2`r+0&s$~dSIi}nGRMyB zjV|ZubxOXqn%1l|EY~>-N-%D$cqVa}Ug``q$fH?N$DgLP$8*uYV6E7=XJ1LhR4k_- zW>i(hxbFq&mMg>N_%v~&sZZ{NMA;$JIvPuXxLD8Ps<^eBE4+P2P&4g#qZwm5D&aGr z`8V$k9PCSi6*JY?O6+b^a%cT0)uS-fcPO&IIg+&Ij4ldpYeC`*Wz9zOe3iRcG#Wl%Qo`9xPAO;Z?POF|R1~7X+v83K7pG|Q#(mH&!J8#vMkH+|^d>k5;zovTcMJn&U5AIp_a6FILa0*})xZ5swmDJtp)sZ>RNdmK`)y`F*&n{ZliVYKVHaqI zB4j$sJn(xJ@oD(JD=})lTByH{wq|@>Y}%7iDWsUEh@xUd^AI=)&_bq2S!p0;{2{-8 zwVn*S>D%!I`d_f_Xx&1c`10K8a^|1YZ~g4Bd0S=m8;9t^t!SfVE%RoQ=J##To(^tm z`epZHiZjCUct1w*n&uyshNVlnm2du+CE|K`&=q%aVUl&O4s4Ms~SAb zh0@(Jdk!~4cM`r5NIovG!vNC~R7Ng070*9iTcQ8(ef#@5Cd|UXqR^307SSlQZdl}y z{Li=xTRyM1gnaF>@@(N2y%tMU$y4v8;Z+~;=MiwC+3a=3m)DY)wh^h4X0a~~S9+Db z@%g2L^@d{7K+Qva;r zN&@VabBA|x*!JR^T`bB)=qnFTos!q3)Lf$@43?*hb_p4VZFsaMNJcO*ubJBBN=1v+ z8|IIEr3yaT>|eGXp@ovE@me5p91`YEGHIG^oaMM&3=mj(R!vrIT0ifgYWqr^G-+A9 zCew&sDduk0O}rtwyHkPZ^U8>*EpoFgf(e#A9xM7nk7Lz&WFMA~xfPviOnBNsAKiQP z0%qrsg7*LnT3IUE*W*r!rG+16**hJt%hG2hB_1|D2%zK=e>GJ8xj(tDedN3BKE!QD z=45wLfDI^$FEPOVN-z52J%nl)O*qt&inK7m%ah0 zkPLe`Yii3KZDYs3+BQIfq2QJ{&N+4>kPsT%jmfQzHgVFBvd(fNt1auLv?^r-0f{3H z)2Ne(C+8{#z#~Q^__&`c>7P|$#ER;_GTItKm1C($sHJoT%rWZl<9a-APV~3f*6>0ON|$Mu;a#*Zu=Ck<_}`RM z5hz&9`R;Wryk+1UeZf$!8V7OG?Z@>dlp^>mJ=hb4({Ca7U9m28q+^7yjWddUDtDp| zx=&p5EhO_n3&DsfM8T~Q@Vanp^LZTCxM3xoFtpO8mYp7|Axea1FM1O*R=}5Kvtk(T zXqWD?U=*L%RPMG}#55~Oa8f2o#HiJx9z>faU9-I1UB)&2&M(5l;BCfLLiM{k`wOi$ zvbDo!Tf@rEqmH`W%euHmW7_~Lw;}AL-M|qIgosGm%tYJ-K2<%H!!XFdN}cWwi_&jH z+&8Jr>$$yPdO~Fwcz3{YsPf?%PU3LIB4u~X1iTbtLJ##fp* z>D&EavKLAsA@R_;_OkW0JDYVs9LF_lySxYKa~^;z>Q^W%=<)sWQT2~OXP>mP;V=Ilc#lUxWq0i z5^F8b?%WxY+P%g)8ZrYI4C;S~;b_MH^&a)X$)Pr#NTDje7SBw_+0g#7k}0(ET1tsG z?-0yxlZCp>To2Err>+@=sri4i_q#k5g>n~O{~rC|L*Xeh5OWrn{i9F$iIytyls3k-@{)sXERrqz5cef)UlxL#`*Xo z#lCoejsC?wi=$EU(gG(+r+!O%oa{TC<)QIJ!?!9OM_YmI`paIu;7-d5_q_-DA;XcV zT_Q<=Xk|md6w`hFC7pnn324SPr5~L}Cccw4$LZ)gf<>JYBcFh4^vC;fB1hb@-=Gzb zEZccI79GIk@W?S5X(%227^=zI{>^naTV^?3JtZF`&eon!(v>Rf#>Cy{1*8krg*T98*{ z*>v+z_&PRY6oH-nT^jbHE&<6^H=C)Ix;}1$O{E68Oj63Cn)h>8RcwB>wb&qYTyp%G zV6q}-#y&L(;1qux;^_sr#pePGryiFvC+>{l5lQl?Rn|? zZS(qex!POh*O!QG(A+Osw`-q5v&B>A#C%yfHKm~A*_0SSw+0%WP7JKvj&&X&Crk+v$}lbEAg4^FQaw&*9f}|BEG=J<(>EZlEZ2`MD;S4_m`Q&%vf!P0 zy~GA1pn=1(w5y2U7lbt1i}z$`R=2uTMEyj;9|Fi}yOaFy}&l(rYMXu;Qi(|zZE#j99DrLEqDBj%RYcZxs7C7tZy7ja-t395Uq?)>0 zc$C=o{W@EYUB5Ni!2?!jW~F^nq@jTu;WZ^|^U%vqafw@sp33sUaZIlnLN0bwLGwKM z{8X@8?or4Ac5I82cfvItEzqQngh^dRjSF&strhaJRyCCQYn6cj4|{8~VoIskV=~{7 z7<^G=$x7F=|LtlI3NP z?&&K5f$RJt72?bxW5=Y(hmD#{?Uv@pUL~3UY0tC-2ZqT$&Qhn9_JmR>C7&FuzSG6Z zuhGIBQ1Fb*O$w4fxn9WgpB#<;rzmK+u0Jue4;k=&!0LSRu)V~iB9D4Z9y0>7OPq!yYI))^pqwXM`y5+bqJq-q z(vEWmWmLV+S7IbXg(=yiD19@&)>%ErR`qq8iz1u-3NKa_k+hmK?FQ^=s%8lRtEE0TEE(^Z(306UKKuq=5@xV#73GFa7q(E}7|`Qf`v9K5m9Lr5rt($- z$$t&`wA;!*s>OAb@76Qa{QRv&QS1XCd(@7Rkh{UyCm;RvyfHEM!}y#(?uK=>FZhk} z&I7zOiBEd;c)s$<2I#&%Pw^aksl?0YqDGuV-2FBNa^x*zHVudp8{8c|P)6cq5+Xgf zoCEC@Qpee#Ny8`$yOi;Kl4(8qybfER-*MmdM!#Nn23*Nr?`aq{6F|>1JdY;Ew*~k) zLGiaZ(WU3@tta;Jl_Ye<_c&@lqUNpEZA`|1jgr>j6qH5qsYzgX_-5vJ$L^U_7Iom@ zp8v0LD~mSI3qI$ZXTldvv(~8IA3vp4L&YG|HJa1kQHo4QuuKXRz-)JSK zcq2}PHa>uAX7|Uuo!jG_Zm7+JR{sXNoMo4Cm@v6FkWyA3y#uga**GY_GQ;CcAn$^Cb(UjDP@b4< zqbp7Jv=l=wqtg#`xcmIv)w-Q;(2eO5am-$PCr&mVk@fHnQZ+o8`3IYs#N2gUB3X6@ z2YQmZQWEfyrKM zb-z-r2(kx0baQnxE^-Fx@KbAKmS0}TVN;ujZl~uxwPDJMJ%Bs|<=L_h1AT3vi3eM5gGlYlZuG{XT(C2pBE_25@5-2{cu6{&oyVoT zK=P@t{tc&ke^idW17^M@=+okX zedncfz4*Q%M3bXe3+9teN?FlF2#LyynmD9KnosWMkct%j09q)&w#9dOjBJku6<}EPS4K?Fy*I;9|;@CielH~p7S}GHN>>?R_P7;!Nk?&S!dq8EUM|P2ZE;D9nx2-KJm(3E z8-n+4r_K!gJA*6*CAGs8wKO_h8sIf8BU0eBcMxoIv~|hWg;&be#G7X*TzN9F zTW*Otujaj!a@G)1!nXU*Dv52)(5fLiM%(E)(xUV8#K&(zPZj;FPNn~bVG*&w1(uHl z=qMb+vpLggI?pP8-IiA(#%wWL?t2KHc-rIorVpc#b*QA4}{SxA6-9=OgiAJyQZ!y!Zuhw zp7(?5uXU4bw%qCbv>!l&Ssp#%Q6oI8hmTZy=y{UisI|UomEKy(C?}bNQ4y;tK)2K+ ziDFdkKF>(r~zh=nlQxP^qTHZ2HWRQ273{+e;UvT&(oqw=Gy z=vad{!6)%wdn^>sdvydMBmM>^L~%$m!S2C&_ZF=Ndh2;}q)Hcx)eyS1)nYOiM4Z-3 z?XfJeCH|r67H3Re9e0IQ&9zYLZGT{rsF~Dr4-B$!nbODrF`c5Tovi#Ht-XKSd;chf zpKj|vg&mIP5WVy6=W+I<DJJGTE0@ZF)nVYAEUy<(m>y_PG#p^emt6zRt-*eC}NYJGlIyJA%eVWMnzFa6cxrLdCB6^zf>+@dNYK49(9m2@s%OPHFbIbGv~f8z^rr&P{L_ zy-;~{LN91>n~^&H2wWOmznWPCCunM(p|H!HEK{oiWXV6sc~b68p5TApoBBIczv56w z8fa8A>5(%O?60l*44`ZgL{(7PvCuJ*VLidFhuOD(CMzkDu&MujbuqU=?v<{fx7;`{ zsidaySyipBRX8UOt5~N5n8}4ZH=8rpkRUgf90UY{N`T?v`dIBrE#gFY_X^*K2oI1O zBqbF2MK|)zzDWM|ES2Lr=X8W2f7$g?Gq)qWhX^Sqy@gwRA_C1RoM!lNowQ;@oJoce z`Vw5tIciN&=|j9kd9Dg@OzY=dA#ME;%4Y?rkew9kwQj?-zf_t4jf&=_7<`yGpJ1!; zjQ`Wcmp2&`$~Cd@?n7Qcc&&AHbuYc+<&Ti&H+un(c?&tsC29Q|^uXyl!mC@bhIs;D zQcow-H{Xv_q<%SXJ7jJ;+_!$p(fs!9>nnCL6h`LLucrmk3~0OX*Jc@t9F1DLbp}bY zn9U!7bB40AOsY=$jF~^}*1jczd;gWKY^m_nS7g%x`1)ps$&AN~3<1>k;aDTySwq}3 zW+ZeD(V#`Py(td~D&e9bW$h6FFYpoL&Loc zLv2co%+R0U&NTdHQT*&jw}k=rl;}~YS+NyzGbBvOuu#pLEEXR}gh~eZl2szjr7LM< z7y~4;bkf)1d}bvoVRr8NiDOKCTpjm)N3k%!64JT31jLp%N2}+kB>IZKFf;)YpV+v? zBOd=$^NYvx+ldJ`4-4b6ePJ>6WWi0XuUpEnF7c7Dp3e-9ie7m!MgQGd=YN!f>b)bW zr*$`jm}>A85VoMoxi=s9&vGR^B>V2OOK(4{{;cP!)+2!m5@nvY{QAk${>%SlU@r@kre?91>a|0Ye< z@&zhd25x*)(oTwrv~Dv5Ai*FU=osxo!^cUk_0T0FkYE%i?ro9Oo>}P^c1cwftoBQ+ zVCfg{E|o(Prs_eH)-^5Pl>vKVh3nY1-h@?(CkD+rVNPe5ZSQFmDf$PYm%%Xc!|?Zk@nL zNJ#TG`L<{%a}xIr?qufR=&@18O!DAL$RVGe_QDj(IdtRm#6)0<#Z-68xTOq%e^nwG zTGJ(61ZIQO{@~^@d3JPgZlmFrn|0!9Y+##X9@X73u2*aeaI?a=?~iy7bSbXZajV9Z z*j{>7#DeYO5e;wLT&i82{%&lA*eko0`wNWak}^tZ=MAfk`NYoI1> z$H`F{Gp$DtZ@p0#6R*otyEA`v!x_mh6nkq#Ry$NT?m$aC`wi5?)%SM>p zk5OrZ$EET*Uy~-a-1(VaMx(UVVFc0sxp}Hn2OYu8#jwRm{>~K<1ZdzLjZn$B(A6MI=CZ?{_)2KA%tjlRJX{MOx#ZqCoGm{zTYGZakUs zv-3$ZBmAZHg?-|g=e<&>7gZoIc5`*H4oaSkl^`}dNb4G_bWih6ur}i6#*G~Yg`ly4 zH7V;gVR_+?ex~qw?wq)8UTYoVQby{bH!0r(aFBjECs@fR0L`si z&EZu~{jb_;+sRE6=RUogcaBNK4~*9yB5pP5f8b>7+Vx|SH;yXAiL^hbo}r6`){$aA zsUIXhX7y@HAo0_(ECQOc47BN*O0_V(6})a9dnNTTr;l+ks;;k=$~#!&t=$S zn@l<$`>7H&wtgmg_12It$qm>F41W)>;B=$KbhGD&Pw_bf(8y8VaKX5jl1Q;4Q9ISz z?JOvt=@5>}DoUqCj?QZOO%oxkv&URR9UNib#w_{2`+wAL;*^EMG&y9E(X=^4)3cbmyOkE(I4_~5L1?JtMASPK7LI&>_50;Onw)@AfQ80!W2d-tHeT4L5%=m;$}P>d zS6eq6*x23mFy`gglt`Tq4?QAOlNwb!*>@q#_N{r2hMz8#?bsMuJp+4kyhVJ^>C4Sz zQqKby_nEraw&&x7`tTLxV|q`Sc|WG}JZ)37OdyYOH%)!1AjqD_+NsA1|L{2{ceT=+ zjh@){K0*EVJ{rzjQ{_C)!#!5=U$l7ts~-DLQIPmoOhLnA^5VXya8k{vQf_-8D$8jo ze)g&%0Ffs5#s(llMdbt5|Qpw;Wki0!$B3l@7TXE`@ie zLS60UW%b~k z$ENS^wnCzIMU=HO6ae8TyHzS}`D!3`9+g9T2sa)o38+YDfPNYwwcm3N^@QAAEq-_5 z`~BTNaKK3GO%u)w9|4kF*Bfz*DqQ60s^hA`(?qId%2$Y2dLv3pD*f?|L=TjnYi@J- z(^z5ByW?H9@$-*Wwc{rMoiZ_>IYd;I;z3=v#Ea*WO)|frGYlPvBRwN3hwtD3>M}7k zm$hT%ru?Kg&Rk9&&G(ZP?e=6ud=pIJ0`yi8uyc23W$O?cT=CfGsXRO2ii&c+YYiUC zMd0L3M&(YzCLCWNVwa50!^e${cG1S!vSah0rc8blLPLy9?|4|Z*wIydj;-4abm?%g zB|Qp_+zo#1D0KOuFP~4!rkPtB>JZ#hc^M@p?uwWGeK}S;sq?v(De%LTrGqv`*swC5 z@L<#3KOhMMkTj=q7$53>slcV(IMz{qOygug&snXm7BJ2St*Hti-{+v`bFRY0Y>$C`~R7rT##8J&ciQ2KGmL%vD3A5R}*D;J+E+}=fkqN)6e&HY?kFynE3xi-FZgC z-M{Nz@4a^hqnA;m*U@_$UGz>61R;;kj5d0SKFa8f5(LqEZ$ZctohVTgLXzWu_Vf0v zz0RBc|L@noHScC!>$>mnb$_l@!;tzPOVoTJ!LgkepRv@PmvCs6j@Ni?_q07A3}JkWh?|L$I}(n;Mk5B!vnzPsHaDyUls8W5LJkli4!{Pl`k*+VqL z{5V)&4Wps-WK3Ht$tAjZIm3Vi0N!ISGnAYFRUjNLZwLCW1K2<|rcz3im-4s2U*&Gv z9OeG{^I;3&yjW2opik}*0~w5oWrWxP9HfPdt$U(aF(zV=*Gt+n3XgN!*Qv6@=F#+7LMRm3|i~^X)a$g z#)9+2#Q*wYztb-OC8VkMN_YzFAzH|HrKZb8L8=k)+g@4g5nQ~#O2CgihdDovuUvm@ z7=E}68>M;B%K2{R;M&al949B1Q*T%=2;Y%N*qGo$*x(I8-yf_-6!k{6^(m6a#)X{2 zJ*!mmQP4-Ezh?qH20K+*#fcIYHDr%=PeQysk#CswAdNwhvK(W?T*IkNT5q1giMV;@ zTD&ilr~lD1wEfxE7YDR`mb})iJ;^FdcwlL^@8>M;&m=k2mV?d3&e6j{{t1 zW8q4ym#?_hr&*=yb`3$o%oItOCFHo`UjO(iVRM!fm2E;;^S!G7-avraa0ZJ~rI)FC zv~Z1D0577r+jMZ``TA46xaiX9#-%ETu|}R*>!D_9XmBu5m9jnjbdIRS=PUzxDk2t@ zBAg?u? zG$HItzO}H`i1tshr8*VQ@}wBH{jO#od$jMgxMz1Jjfi;qo&JVI&#k$dmmDf!?&^ca^uM5*g|uH z>EbUz1@Extx$5gC2_;WA{mNxR!(8~$wb1}dtXIvo9H1SPWGq7BD`(1|y=z5$*jge? zsE^mq5yS7>!rsBSxiMeNlMSo;pD%;>C(zjBzIfuTPu4%Z@y+F+&Qc=Z`m{HtF0GC4 z*AtBmyI|eDh60~X?8_@OS0cNtc#x?5{x%U7I+w949)6ify4pdGBe`glnMayD9x5G5 zFjy*MKI+QScKA$2qEdsu8i6_|B{g2`Hr3gbe%k914rvAi(-w4r#nr1Fc|x?f1z9Fi z}@~rP$17s z)~wqIJ}m%72YS1{C$1#j8!cH66|~#WL!qmPT40gICC+8j43OC-w=)`H$k{f$7ErKk zU9~pRk}>%78K-gj^u+vyF<-{1kfw3R9!{32AJ)KVK5vHTqV6KTGLL&3&qj6rOHKW3 zEPue*qQ9Dnyl-o+VVMg)d&qm0>++urdcC1v=kL{cKc-WI2O~BLb*m>+nvb<8d7q^c zyqfj;DbK819n$TWWYug3^WOEKy?amkI<5kbfC`HltDl*KjPgZ=m%hBwS<)8jUP>V3 zTU(0dNb{+h{c_pOORZqb+xK%`HW`MoqfD3-a#ZLYOgqiSI+txKbY;0@;1D|g!uR~5 z-_G>3#r$4W^rgw+ZUZJo-7pr@Jjf(yo7?+=Xf#$FxKYB~+X8Y)v4HE?Ya$F#V8I-@ zP{uS-%;HN{)yOxQjtd0Yp?nEq5@O1bp~FPnN@ePRcbIkf)jDPkek-bRx|FO-r*HVv z+7(v}6v`Cn;Qd`)xT_amEd^y_=Y;v0ddvcz_1Rk7KN^@6)W(#L(3${zXa`Q?Atffw>3 zZ>umh<=}3ZuhB-K)XwfOhRC?D5{Z`m4y~ee7Tq`%(E_Cb_*;Pas0lA3(iCYgQILHM z_gDj+xNdMT))Ad+bg7&XdpAjI9z%TMA6q0@7jtnkorn#|vh%enms(~ek1bE zn#iG%-K+%u=w<)Zy*M{qzzzOh34WFy6OmBZ_Uv~xN}*J4-#-xf7i{-KN2HuE1+ zIe2@VvL6-k=XduNRRp^BF>`Q9dnZwXLT2T`L`K za9*&>U%wlqB9NITNEY6nJgh>O?q)nm+jj<+iHJ^4T? zD%F}qpI|Ip_VE*JFZAv76tj+%Ozv6 zadK1lL&WwnXqd3MilS%L!v!&%DpR)L;}JO~MumVLPWz=;Lkh;SETU4Oq;jc-i85<= zfMfkRumSc$B#!_;&Si&Ibp*4DeF2J00)9cj#z-L}Jd&L6 zj=6o0B8k)!ae)%VM<6~&!zfd{FcLTpKHlrnofxJ!nlBl}P#-qOE>EiLei}VnWC&%x zvEoVN8ho$*wG>4Zlf=P+`m(4<+7^`ag)(7$RE*9z3P0auai{E9bi9vZ$*JJv2Um4G ztnC+Ghdq2XGfwh;RoY~3eT}V-eAPnrl|XlPPOAN5UDCoLw@_fH#$QWf6#KW1E$y;y zCO3quy(jho3kEXJy_0>0EF ztKulj<`c>Au!E5M9Lg9*^Oim;BphhyrF4FG18BhtC-lQiXnyXgU)0n!2Vbjv=Z!3q z{4^CR01^TX(5p0i0Eseo;zwCVpn;o6yO)k$wh95Vqy{zuB;@%anl2vF&fc{D7`PvJC2EnhYu^ z8wn{fE?uWX0<0q_upcvWiC&Z)Q_1-0f}dy++x7TT$lILi&Au1tODX@lEU8X-cOia% zAKl2^PDp~Ho7hx6*E76th2{M$Ss-NO!LT(A`ApJ#1%(vJgan4Kn(VpJqG0Z}@}Mg@xvWRv^Tc;&_IMHn2j~z)oc{^25{~8K<)m&I?p=w+G31(e ztEx6_(Ol6gUY1YCjxWV2HJw6@ms*BF)~6=^I8rE)wREmZP|Xkv{^Xj*7}k3m#VsL+ z$T*qDL>{+F4E}06BL5uQ^N>~6AM+{|O0dG>(f`x_lOg`4+=y0qa_1cih@_!aVJj*$ z+E*vd1}JBS9DVo*Xt0_lc?SVHQVb-*jg>7c$Y zo;RC?X(^hny^_+7y%NuOMt@Fh*OWq37?ORU<75cI#W0X~yUp+K=*MT>R<9TzV^XCW z=hJnyj|EYSiSOje{^4HvZo1`@lZv0>Rvn||atl>X>g?U3V!Ez>9$>jdx`myXx}c(1 zDJF3)9ps-u2~saaxB_U*RbOjTWU!=c3BDLpQ1+!xMT!~0B;Yjae_e@TZpFbNg?)7^ z-TiTI@{ij$rei6PiAeXb>+=v7}!Tjno1(seCFxb2W93<9(}Ch+_sy{vuUgORvIj z+1MH=Rq8Z&OM^K!p;E@36kQR*ZMm-T-gJpYiMAro$hb!D;5PKezxur-PknlDmB*5u zIqBbmtwP}~S>J6$%^BZguWZKe7V2)+Yc_0ec1Dn<`d^ZJH^U;9~yF$J)wO(Y?PK zHuqG+J5f!CKe8--B{9j*ZihjQsXdsq;_HGZ1eQ->wfIzs&l`mPKaXw}L*{JTklPg>>uP zrvAH`>8OcTkh~NqAlf66s1^13;pCuXRosLK~P9c=uo?OrAD{j;P}1(G#|+ zRNER9aC5g_96q_KC8=u`DVXwic-VXdb-gK@VcWewB+%)zeO-UQWv&zu+>qFIX|#K& z_nF^ywMMkZ7*hSjk;`9KEeBbc1)7NaN~H&CEPDg$@chx}v~ha2`z49cIOr_ZDjXw6 zSE)23O;udmj#vHGEVIQXm_znc+Pfji2CxcpFDoS!v0;k47LW$40egXbQ)}7qz~P8B zR%tON=0MWSHiA@*)zL_pdYxSsytiALoILGj19b;$k%>nw&}fu*KR>go+2n1diB2-~x`f$F?7aF5ti!X2DFMm)gl zL#j|yJnTiZVQA(EwPb;3ZNVnCe=GUv2W>)$XT^dW2Cw;h`drlVDVtO#S-gZu#ULd{ z_cov83o{)5cZ8hL{&5P{Pl3h|$B=pAf89g9rf?PM4b3F}QpkXXd&qc}g#2d?q*{6QK1n6G zz*9dHw4lI{NiG>H+K_(aC1<7Ouoh})Uq$gV`@{;%u=+CnqCC!#>*{8jG_}!^0JA$Q zu@TSU^uaH;jK3Y+Fwm?hAi5!78Kka-*C3fhX}mai`hWncRdF$-lR0wM;XjSx`^Kj~)ZXv2|k`JN=eGB|T zc1$1UH4|N4FoLwO!K7PB%4g?y$tOx?QUB3ZwJr)!o*%{!w*Mu8T^jo~Mi~ov(o)+P z!h!!X%BtJ!nRI>GF7Py2Z~F8z){Ir;a0~GswkU;cwrDl+(bre7iDeHtJM*kAe0??_Fhi0sqk<|4FIuPReRu=%@n zy->1zUt?jE7f8R0AcYyc1m(mT7z4y=#rRBAI8O47nF@#t(CGkaIh@HXxTBrEu(8=W ziqNMHanVr_;%R7nK`RAm7prq&W~=bGz_AC2>t$M_(ed}0ViIHh9FgUG?Nc^^mn>NC z=*GY3CW1Cwqm0Wsm7AA~0;Jxt(uCdjWL~-jaB&rP^Reo{)3t!Ak)7Rx0t?dC*y4Kg z(m*cZt#_R79QdJxsnhxO8VJKeM^zvvOKf@9g#Us<+Uq$dxo-6JY9oM|jg(@c1U$#2 z^RmzjmNZF+T#sRghu@5j5UZS zQOHL83$fB85>7q0nIY?>i8L!CArY;-77@fjho#cr;nBJCvElKgWs)mgSiVt zv*$A|TzsePBEK%M>C$5@Dh-3{FcsX3&em1)k<$QKEj%Tk=CZLiNpt#QhO#^wVq)Af zfjiZt7JRR>wv8RB;;5GuM?tY2(YA?Kdb5y4(9r>}h!tniTl;6vkLi5+T*7S$JUQXI zjH>SIjP5R=3s~Va{Rl0Em>3}?K*;-VE@g;>m^{?EzAHfWn8TuM*$0)EZ>^dxRN+#isfkmj&1zQ)BOM7aY66TX5V& zV{IHP8P_`h$?&g5m%CB{rh4+Dwe)CyKY3ybT$UnM`k@y-Uv&XzN4{T%}Q&jnU4(}=4RQA z7=WuF&CTx|fffyO8ed=4zK+R0SbKeX@^17+u`aY7X92lFpANA|B0oUwH_pu3e-3uSqH z0i!cR6pRhS4MCrb1;R$GpEv|WCT(GbAG4Etnu$yus`iz4iP^=WObjz09C0gQ*FGsxJnd;5d=q^%;vbgwiPMwyn?n7Z;wM)Aqx~Cj}wR+yW{EvsruvTag_rElXDRIM*W@nXm2`uUb45ljV58RdBz6j-Q3mc#2&>% zEz?of3;s&yUqDBluZ+&cn7K2I*o8Mc{rY?SuN)5vg9nZo)SA>7jna5+1Dh}#Yaz~g zjhy}3eE6zgznl*Tm)R-QJA@9#RbHcSB9A+O&>v=c=e2c;zi<8%IV=B&0>EwcK|oJ? zK=)^Z2eiwk5@FQv)cSza!P7o1(up0E82>7?qeXf`kyUOjZ(WN8OD@T^6JvpBjx^u7 zZ;u0mL`Zb&1&fO^fwJZlwl^VXp88MDN4|U)feuEkiwX)A8L+oGw~8!vsy;;PTA+bn zjXvrkC$4r}6=M)_n7W|I2z+JGxT}SEmmkh26J?igmTfPzzr4bM={Bs!V6viHp#T!( zD=HN4xo6shvQzD>oRV{}ajAH@AVN|$7k!jY4=FBJJ`pn0O{!60Axk=tRIXIW>i!~RSh(ok`X4i}*oq=+$}W1uJTOk)*t(LqFApM-P_iqA_9oufEE z1ZPg?uF5b`hZ=(l8z07UU6`E$^09Qt#I^6?tYdB)W{3_+C64 z-W7a?J!6ygW<*fe$&u@%?!3pxv03|=)M8*Mt0ZBnPa%gs8~GYvn%dZKnWK-4vX!~6 zX?V`06v;FZH6ogFwGT95$+a0Enh}qYQ+UeYIOq@;8Ba$}M`q~QQhEs*bhuR7q0hSj zrNjwh<%xM&F2N`Vrrqat$pSa z)N=IRqPQezy9<*hn*AG95K6IC40N%l{p_YwA3s)^H^b_~;H6xc`URC8Q}b8Ez$$Kd zA88Vy+HQKZpPX#HBmE*(oUP}4tcshyNJav$Qno5QBQ{%XBofxB74N9jeIS_ z&-CVgXs6~u9U^Coz7B0Y7`Ten_Kn~er>1?{4&m!NT3SGTShDAL29KFt2xohpfpm)c zzv_gB(BZ7jF>m(&BL<9rM1kLV^|gVn)x?uia5?p1kw=)EZ67=3wt3ukC~{&)y)spo zzD<7?PnuA|lqbHt1*8gaoT&-9O@B(~1t4_Cv(2ni#L6*NybAwr+t2Wp{4d!o%cDi@IQx8#RBQK&g7otNO5 zTmdDwigli1cd}?bH|_Kp7JzvrK(fPMvMP>|czGse1|?&}FrNP1Y$P)PD@AjCb-sNL z)cJexW31q4P}^{W>7|J1xSH;a%e0_-%=jZvs%717sw)JYpp_3f^?jw|VsQII-U1_j z6gp^2(gS47kCX+Vt1nNo&^^?Xs}5foCeY)=mXq8n4f*JGAPhT92H?bBvhBXj?kC_G zXNavcQiTh&RAi@fXcQDE>Tldz0c!JV9i=@p<79e{-ZER-2B)q--Jwk&@BNfrU7HAJ zU6PL~kicmkk5%c^jV$kuZ>(##L;DA54F^s^;$=SOl}pjnyz+@6t1M~rr9U^XgOWVy zH?DuqNd@St`$AV>2M&477%Zb$dm<& zVRGRBR6v7Q5s``B9yb^(YypJ*GcBe>g&)$*xMtJwiUd@a1hS-(B@^}xe2k&%H@AMN zimClEK)829W($*N%x8#+GQN362%gho9JpL)*)!akLvQ&d+PG;A9V$6I7HQUygxG#X z4!Q4@01L@9ED5+<+l;0&O;?p)eeyb5dTU74tc4Nxio{jQi&W=+^ltL`^cMW7JVgTd_ z`L?}|?L#)p%XNA1vK31aeWZ@h^tCBsJfmQ;Vh3cN&@;E5S=rd+oF%%wpO_Qcyg%2ciBvP2p8^Z;NiWKCNH_>6h=B_~^cu>}2_U!wvp z=dOEhqpWjsNe29L#&xpvtgZKrVb~!Pjzfr;YSNhpkZ_zkdA0?Ms$VnJ{P z4nY}Vk3)lY9OiMg6GoJaFrqA5eXxgqNh@RRq)te0vBfmrtCB#|dKUDRl^+XGP8LC@ z8Tim|WG#b)4xbA#rLV5^o_@#P)@IV00s6Lh%8SYGcW_DkxE~XaevBHbx9C*MTwG z;6ep=`a6s1&r!>5`^GTu&#TI%oHVhjRFbPYrb=riYcvcO7@U2M5UwsHCk~fYBpLbu zo73^8xa|&fh_~&A$GeYYpqmgoeIsZuuZN~Vc`L*o82razlHXW{$n2`5hAK@lU4Md$ z`RI)pf6|9~j~}r4iS4+EFplxhTx|(%+bPi6eL~VSw*3QmH-w*_H!#1_qD0)2#;Uwp zM9yiC2e?r1L-5pLAb;SVQQJ}5wtP1hIwHY@lw(scf5O5#Ap&sgJQ|-Z#5j|&twJkW z1>j6DA{Pvu9iznZ&eMXx?l(EOu_0hJ=(&3(mJasG+t*bvxYYoj6Hl|s+6=p3*aE2o zkt$7PKbzcB-ZoCN+4vRj{YF@glUiCE#h&ul38P(ohBWKdy3(-%E&dR+sIq|;akvtA zWI<3CL!XmBA1qUdSH&sc^EQVZQAPqN8=L*cT1d$OAT8hJf@<*Yui1w*c2FGZ_>~nK zZdcp3_*+k@ogWwFaQ)oj$h&nU_MRp*5|wVNBZbhGd6l|SC0K25rIzYG>NQVl5FFO+ zL>`aS6}61ECbXeae+Iq}lh;vv-FfxD2+s6RcFFgtUDm)wX7-F>&gD3bEvizr(PMw; zU+uC_qCh!w`f`fHy_OxWJ`PEIi3k8O_>IVdqLmloaOy&MHu7S*urS%_)(fab*AqU* zR_1szmh?T#e}P}AyMZ6YYi$Z zjXVmh)GY5{WH2KZl?zy`Jn@p^Ec5Znpv(x!@rJ*1D%qkUac{&krhv;M;hR;7%KQ9U zrk512e-)MA8E({u>)1Iam6pL$|Dykq>Xa6!?;=iCW!~;9F|Ae|OOQ_R80*3-jB8uh7x*bcy0a}yr!11Qiwc6&z<@$L*T{$0|fO;?v znqBz2IQU4jk_jB{056cvdV*W0ZL*OWYhr&Q;?yQ)QwmSl%JIMu7qG}#sMg~6RK&6D z^RDiisN9Q%ky^m4Tpy(U9?P8!z*eqVCZ1-eix3u#tnECkU9-<8z%+VmO-G*BBXb((q=PEtk8f1G8oaIDcE{C`x$;F zwws2?E_)1iQk>A0IQ_iQG))=AHG7P34x5a|Y48!ykD4fDkX+J#>S9y{L~w1Z;K*mz5CGh%Dhe!$*OOI0*sC*#mhPu110PiF)p z82OX*^|jpx`xAHQJ85un2|3E0<30%?3-c_DFSK5H5hlZi*jmz^1yi}~bJRjMMEs@- zR?~8Dk-5cEgQn|p4%pNpEp#C@#u^!{V3bdAHJjr+!YrRhlTR*)+dYz!t(0vdAKBbX zNjifuLp@rVdeokm6Ft8ye7^y-TjsJdr%r!HEt9#ae1jp=#$MjqHwr^!VK6Gj%uQd4 z*0-!2fEHrJpMSp@PyS0SsTM6pVBwDg27ckMpVX*i>ezdW5C(5t&L2unt`or6$>#66 z+~uSYnyDs-_Nvh{02kDwid~L%TQw?2!p3P3tYJX$6~N^AJ!)`W3AH)kM{jd%%V4o=jp|n+3zUA4v+kw&9JbUt|6Kw7 zaPM910;w>G)3Du4O#ZgOz&GhN_2hOE_Y$k{$SoH76svCtt?em{fp|trLXmM5Brz|5 zo{}pIO%UHz(8x4OsS1Kc;mzhdLK#X&&%KN;BN~f#AWB0|G|n6Ajb8>86PVQmGT4tQ zy>~5AnD*c_n6F<>g+=-)>Dp(-+8bX_*AA;7M>yx5C3IRUxCHbgZ@65=#E*qcCWH5Mu2pINXpY`qiCMCRjCciBY>!^yv(qI~@S5ytL#w<3hyzGO z&8jH!W5_U4o(|Aj^EkE<>mNfP(|$^0As_ETG*Q{iNd{dz>MSRf<-QTZxy8 zgr~noOjt=gGeJXo}{u2~!n^!osm zQR}NuIK0$uFPsToJOu7XPd_^B+t)6Xe&?R}65(~DN3TgtJ{(gKC#pK8!5~xAy%Yma z?j1R!4Z2=~gzW>ZyC_FK$V)dVxP|I8&YxZ-1jV#|QyeCeNEI8~YI%IWTF()p5828- zVNj4M)(~QkB0d4|hcyai-mymYYAvSFj^=+viN%Ux6HX@JR>B5TRC!NjpuEuUkN$h+ z9@yZCJ)+5NPIA3U({r+Y+hQk@0+^+Z z9X;w$(F32%?s0dmk)|zZdN+0_DgsEP(Dj`A~@0JeoFLYZOtxK9QA!iWZk4NOMYti%_a!-8ejrqj)D! zz^yhfNp)c|>Ft7Rb88w{u|1>W{Vj#}YDl}S2u+Wgx7i~A$wU5yARDO` zR#QF#T6S4h@ZLNvHov(5z)Ebeo5<~i&qjk9c3NXMUm5>VvMb=QP>1o2jYSCrAf#uY znBvTIs$;Oi>kcVx1D;t+@zeE(%Qy0QjZ7`LpPl%q;ea;yedwR_+j=9<7ll1(#Y%qp z95kRYB2;+G{tg7^X_3*vIrtcq8H7Q`n9Ks0I1D_>%5*$gJakG@a(2(rqG;XSamFuN z`NGEhP7IK$EiMn3QCx&8^z4LgnvQLKEN=Ftf)$TH)sag&=bj^#V&g8qN*ybSs>L1w zU-7u%8F+jjJ~$yTv;qSZ6w1zlYNyo^p?BA|q2d9*7P4}8dSqlcZYy>Y@M_I`<^8I- zAvC(HRw2jjIhH3gi;SOuaMi*2b#tRRiM*ao;C|rrjd22oTCFL|2;~XSMkX%p z*GK=h68)gbvF2%hlYd(<@&8{A{_7Y2hyu$~OhH%oZsti8yoeOp+7UVp$Gf{vh?U-I zR6XVUeSIA#_gdLfSvHBMtz0gZPkM@oh9Uam>}P^>0Ntc%e!v<>P~R2!Kd@j#TN zuf)(=GA&CAb|LHV61$ai*(1~qvvjX{F0~kBX+Fg#Z-Om;3Sc6mke+X_;kFccd{Oju zC|f5sc9(E@Cp+|$041U8_)06|3=JOePkj+f$pR*Y7WaY>t&jCErO^@1Pfd1=XZVc4Q7gEb{eNl3cT>$-uAfAr~lfU<51-zDlJFt)!~WcvAjYBL-Tm1z>mM`z}sQ0Zo$tP{D3|S z$Yt(sjI_5@QI{951Zv7Mp-D-*7SC-QExsls>T%hq>yhgPx=(3bu+le%BF@yquEa{i zw_Gf0DXF90bb(prRrJ@Vu3A3QJ{t%(@HhINa@_I|IQVBf^``|{FTRn@#o6BGwxnlZ zHK_;w!Uhwlzt?N()6kEV%|v@O7lHK&f)9|WkznPUf?pY`P?1UK*!PtOtUXMM{1I0_YR;D)} zFjIHZ;iYI2h17`9DS=}M>CWS37WL4Kl`mgX)C|%2oAG1&J>7-g*hljr8&3?PG5Lk5 zxM6C_H6)OoC8EQM>Xnw-Ca0Qsjd5Wn_skI0gRi1~9@a|jQbifCs73b8TkX+0$0@!d z^*VKCKPuO5WrCVJUr`aB`>bW8Cc`oK6oOw!O|ZhmYf~8^*Tnzl=YRu4cJ|u{gxbLR zzyXeH!7k3odMckcm?9TV$`Z{mJ{U9ai z&t~_-r5a=b^tZeS_fV3V9_+&plbzeDHY0R52ECJ{%^f!hX=425*!rxU7a+8myv*pt zP*PR^8J4tSGSc4ue79g0(IPSSmb(Vs+NG>zq6H8%M+(j!srw9MU+cRmj&>$q0ToO9dVjW#>*mhw zw;xw2-|Bg3r2bnh$3LQ=`XmYlPDcw33?ICRych)k6;lvF$Uf~EtGG4^72g$Tc{?zO z9!0n#f}|y*iMjyXbxLap9r0r^PEA}aA}z9=C^REc`#qsS5MXbus01&dEHLfsu!#F$ zkjED7QDBaR8=t_a{JPnT98|ojjQ}O(DAQMQ5oxjf#daOfIFqGUX?7;uS~}zF+ebI1 z6Gn(dOYGg#riJBtS+O&4J8TQGp%AK7tD$x-Bp5E`8@JF1^}dSvzByO$dyn1)W`F+Y z6LO{PL|6@`TPmj#*f{CgSML?uxSiT-DT8`A5n0~YqIs#LnQ3*tzwD>z z*@>mHd&u4OvC%kiD_9^)d*srsx-^+N>BmMR5du5Kq-C|IES(3r$bbY$WAQH-x zIhqzSz^XUB+ZKyS$^kV_Xu;%48&tT{`YJs~yhZ0JmcyhGE%wbmPuKSi4UrbfQA|dp zCZgg)cp`kscj@$)0-9vuOjyz(M}zjFl@JoV_~xH_AI@WaGN$t8FD-S6gNLyivKP|j zxHzaIUy3?rN({2^4A?&>xB{$CB;GJ#pJ$B?uHCWq_!@A3VjRW+)YE7?x~JHinvY`* z{D@5wQ9EORSC0!~2oUnaeaq$15kfoxN6ia*J7$r28-Xg^*mxdi@s_}^y|{;yT|FHyk$#2P#5KP2L4~A9=dZ3#=ul=|EYRjj!IQZRCeqrGm-P`o<$o?NYAGFXw-=u}Ybf8QER#P$IRlKBPP|5%u1POYnXexV$u+ z86tlzA^vXK;6y;x2JxK};pV~6)?v4;wGL8ql}WZUs9t3)DuPlc?t7(HA4}P#a)0Yy zSSqsnh$2{*mBNEJ5hMp&tntO^XKj=3FeH=c;%U0i#u*a`+7HBl38J97WR9-rD!j$w z`1e}hO>MB^eP1BD8_ZmARh!QOXx%Q(Ll_0;HW_IWruNy%K4MhfTe(PXEn4P1>ensk zbp~c};_Wk?n`GWMj*bsk<^5euQA@}^1)XhD1vEK8hJKY9#_d0K_-Q#%?j_!&Vt_k_ zDJc3?$m{Tw<$c)C?zov%BVD-2qeGZD01$521GPh7hI-_$3_qA4EV-GSI%9aSCze6^ zJG_;c>yy3?fzc;;`7LZp3{eh7acM@GR{T-P!Z0g@4APFOSr~R@1eZ=IIjJC9C=xiO z0xpHKV%q`^gIc7ozj8txiXy@-y*aO}SEpc6LTUL&L5pd7; zJNORQ2Vw8ee`qcgFv&cK`MTaB^{$cU)T6^Jw7T8xqiWKNWF$vwv<=bf;eJ-NNzf8B zo9blECOVB@!7R>1<5&b?`}6nme_}T2zZ)z5aSFojX0I*n@0JAlN?s7zFol*GH1wwP zUx~Y4_R57~x~m7OS$k_{V%sD&fKJeKh;Vgth>oAymWeoti_n?r!1fs)8TfZjSrbQJ zYF=tRy)hUi?r~RO$HW4^l>dmMwg?LuP>Vh%Oo#7<$SWE zmMf3NEd-41Xd%Ad1!8A=Jm*KOab^Vn<@PtH)B{V2&iIbpa&VH3LX}xafrph&R!T`t z`vFlY1;!C4(lp##|9pmK$E&%k#Hg*D`;EbzFo8Kleii_bJ{% zYGMqfEh7wXeyB|s2Tz5{Ocg|RfleVrL`D`rs!C=qRbt`S%IVpGi$#GR0z6lEi%!jW z7a?W`@o|hOR*U%UGWi=f^AY-pi@C%un$Jc%yZ0p;dq}KX*`JsIYvB~DfO?|w15?QT z8L0`i?#JT(Mv5V_3V8+RncXP1%QrC+peAYH2b+MS?9Mm42QOaE2wAS`dKdjb$QjHj zury6b{5&E1aPZW7Kl0J`>eldf%4smmFhl!$x|l|et7tB zb3$v|6FkA7lt&H4+maAdEf&B?z&6*lXBx+uAsV)?5t|lAI&U&DfCD%w1n|1;oyp&0 zMA_@XuB)8DB)(Hg2)Kh3CBK{<>+oxF>f0M~<8V~7P{%zukQX{Mj5ZTm#sb6FRCj6} z)XY~kXE1dSpWJ4<2$3LzqHT7RV4@oAxS82V{t%w`t)q@?Z7bs%Xm^*6J~Ca2750zc zS;!%4-eTKWO@7SjLm8YopF@Y2FeTJyD{O)7!WpzOJr`Y0F4{xU6Vi})jZrKy=i79G zskt;A-`;!l?Imo?+MYj~)r<#$bg6n(pAqVW=b`9Ts#tC@7-TpE`MIvNd=C0B0?-hN z^nghPgkimgfs?)gwM&xns2hMJ8(K-kpvUt}W*_+OQ#eOZ1$)MY7tkc|ARQ}#@7Z#Q z&z8W)L_Jo{QmvtCRAbGwtamnk*kDLUskN5X2Qd*dirB6iJ}dm?=@+?L=klf#_Nyx* zU6E?xwW|iqToytazIN%6t1am^MqE&EBZAb_A4+!A##YCNPifbtQ1}WYtJ4=8Bm=2@8+-t%hUlq zb3ti;421PEPs^c8|E6ukKcb-EzWme~=f3De5b=UYfr0sHeArGx+;{R^PK$I={%H?h zcVy!d8%{dT)z@pD<`#kKSy77j6Fajl2C`&GHG5?Eyhf@B4%PI^MPr?SHF=BFsf1Wv z&%!K9{b_Z&-Tf)&1qPfGRcW&gw$n=kWxe+kAdOKOUt$REDDlQp-Uq#l(&mPkeag*Z zVQtow^QFiD-^TOmt}po(8B12GfW=^sr8&B8KeAR`34V_)f8_bLHH`{HZ5WAAG%8GS z%E{`zay;p^7EZnu(eE72ahlBGZ>sP5dwm)H%=_<+l|+uUV@=yOeoiBPP9M&^`gJvE zVluG;Ui37b($p{}uAU06?VIRwu>dx0<^FUI#>oWuHS89pwfr60ngiJv?&#UxvNnat zNu%xmNM}LMmT!1Y3bC9+XfV8Qz z`vNj6D7O9Zsrxp)1-)@#?&I@-nwGH=%a!7^O;ePhw9(5MRo(22L*a7%5?Zr*u&#ov zb}6!QXm<~&nZu={GBoGI#tS)l>tOwHFYVp^w2)*}gnjzkmeW(8q?;JoHr4XR)eap5 zKZi<{Fo_FW6^}QM9}lM!V6bAquS1Th!i;x>4=&{VPRH|j3a#!tMyKtw+Fb$YSYdY2 zBrf}Nzz0TMH&0r|4+_MwT~?feyiT(gr+xMiPUvfMEso=Ss|4Z7Ypub8Z*d;|#XY%k zMjfI#_6{DKLhA2k=St*EHwW)`3GY1~8pe{|rd-3aJCVS1BJ4Zhah;bUri=`O?TnZx++M9k#LmcD*{H zrT+7o<$h$Zt3b0z6`5f|%S>nOe2}L-1|?h(eD0^1}-q z_oqeU)A*qG^!o6WU6R_v??$>z_uOO0S!9dbI)ljxni~gV`ty-_7Q@pc&}3bvEG2#W zXiSv@P00__SWM2~zJzA*DBhBxfU&a(p%`IEwpxjX;aA$(4BV5I$+ZDR!@y#8bc=3T zx^-%IN0Gul02*PT3>_wxFIrgzR}>acx~z?}kbVrtAl9fJx|-_DfR00Y0Q=DrxfIiO z@HXajNtukqW)P-2rTodjZRzGbbucW8TPtLy<7_;Yj*j<7x+Q2 z5=>|9_ixq`)3XO%M~R%nXx|R;#5GjtxLmzEr%#q+FhNe|hebN(@q>pEtR{VASd>q#t zDtTtNkT4aTy)1kRW(N-~DokP)Au$LY)l`m?7BEUZ5nnMN$s(DTZQRz6z&x;7>T7#e zM}tX^Sc=6>t@Z~#^@gi~=8#}^uEI1|KaN6l!ArmqyC;Zm2X*Z~-YS%S?$}hAjZULq z6&0R>#)wzz=kSP{BMzx1mguc~0%(%TortG$jP@LYlD+Caars>miR=JJh(b-8QWo5T zfOOpU-QcI%zUkZ*AI*kp9ZUT<*y%7N`1OXhQzFDT{pjM!68SS2SgfpBfVwnYcBuk% zPlm8mQ@^1|oJ_1DV~_9?)6t|5(9j-7o2Y!&O4IGid5TT#mb$8nu4x4< z{kEc4cAkTh(E|+;_p;cj4KCJ#INvcv!_1ixtuO<+?x(1u5}~;5g}|IiTgGp?0M_w~ zpezUP^MR-Cf%Lz{j_HiVh}jp)>U?jzu=Z+@m^1r`hn;f4oF_`}`jc=+f-0dO&un<8 zJ}(EpnQ9>+(f;s|)FAxc#xv86F3s}U?HYO(I65yORJZndkKPgDZ(p|c%RA12YY`DO zGg2P3PwlKQt0CcXc84TY$}C6l*earX-)~5IY`nfFW=tab`S(Ex3%jnKM85Cf?td!e z^&e1B{@0>WcWaLHQKxX8M9)`j-Z&sCNYddpFfZCe?)5e_1kP4tHe!Jq0x>AL>m+f5 zHFe1G)WK16Mv*YW2PSk3pe+oQQ`neJ7swv6DFHT$IoX!Dbg9AM+4RX|1v9Yw?}s zy>N^MnZh8#iY5rdrmF%uc|!u|7_A*=`d*UB)5}k#`Y|9`40m0J^{O+Gk}4=IHAw`~ z=S7&K|hkD~(DZ4v(Uw zK`;>*x$@98lZ{G5#ib+ zmBJDDPBS@E_+?$1^6U$T{JeV|bj1aUMmR{Pw!(1BU07Z2MTuH{jtG6*Ohx>r_vR-@ zWYC7bl#tzM1J7OlU$39R8|=7N-QP7qBEc|;+=ij7%nWe=IacNn`yqA(drA(M%3RO< zYl7K1%?SJmm0=PMHn~KB9-Y*2+#74EeCj%rB(#Y(lxj>ZmWSAw5EKb!Ek!((l}^~#kPENiXl;3E@M1~7Fz10U zF+8zZ@k?p_sh&63API!%x5mWH)Ys0(Rv7p4ym_B7B}A4xY!0eR-Wnm46@%(C9ZXt! zN(p@+EaTWVp^C*E;owZ|YLnQB!m0V9Jw_1Cm57O4r6NW-;)=!xk3>)syv9|VV8>>_ zLwlNwQcNvK%d*XtkBtjRyh&f*cMsqjG=5|ifs z$isiNqiwquug2$PanH+lx(X4{(o#2q%BxqEZW=m4ZPNkDyuVc^ccYwof=p z4PP7Q=GRd^-EURF-!L09bkXX!(Ew?DqrEAA-(l1bQG!R^{JBq`^^ig+Z-W}vv${8Q zX*M!*58T;8>^vL=zyuvHW^&lskI+38Xs_?1#{wRB!T%A7GQi}k0V#+qB_8edXNKZCC2 z*gkD{uH2O&Lu@|jq|zqUQq?1h@c z{{FVrU}cl9NubvFic>5;sf%^jDnIhM?s4Zfm{X%cHB;n`b3Ix}$*vF#yRcwITP(9n zUP@vfN;_nEcRgS1&)xbV?|s>!-BP2Bpk%2rT`rbB^B^Yc*1GDS8Ih{3edgiCt4hFm zrcoeO!byP7E-$*APH|AvgP{S_E673Yl`X63;i!S8Pd*TQk0EpRhMJkNS*HkRsgPiL zgF5*vlOFg#0QdWxS~UWm^AxPimYoIGn_ThRs)faY2Xy;#Cm>dTv^!gd!7FO>yuvt|~^AI>IO6Ok`^fo-|_rC*-^UH!EB7}V-v46{*2a`6|q zC9xO$_=(cM`Yo?_IHzPT9^&z4xkyOfY7G~XG!M#V5H0J$cd>m1JoJQ)>^0lF^pk}A zZV382Su)3iFsSfP8n@cas6WLBPlO+GXg^+me}7ZY(WGKICbFYF5i?F?>GP5sLiE|E zj+|PIW2c(Nq(p`$*aK}8c_EmacGx3@3qz0&pHn51muAKcY8a}c-cI91Fx0UG)o|-< zq%I0EzH^>kDN_}!2^&Bsp77rumh0Jl%g)H^Ymc3^>{oODZCm`Y=7DuN%;ART=c34( zgci9_;JE&(;d#BQe9Q159Ty`Wd5Z zQbFGng+Yn`inZfEgF@lspkM_Lp7nZ6Q;3~rWv)~;fF&mlO1KU5i?&GHPHtXvAnMX8 z73S1$e0lVI8;JO~_$8*Oh{^C>k8a*(R^eegcJ8nE7D-WXYhAz1D*GXhjAnao(i<}2 z94xnzlWxwNZ;$#)=fMFTp2RB~_T!{Mo3F@5QG5)km==fRQN~dJ3hp`o!QCGgUlfzt zLfB!(t8TiY4b6H%j8mzFANRe>vVib%8`W#=XKbFO!yKCXKJ@|OwI16IcbF4qW>qtX zn1&61KfF&-1w8u-oGn`>K-dnkvwWeybQ?b*rai|0&6#7`>LQUfCGyN#M?DYpcLub5xFV`dDJR6Q z3;3v;Jg;dgeM3*-rD5r^=(>s_LxD5{2Dz=K`%jddfy=5cx7_NqJc!2#bDoJOg537% zC}s1J>1?ArtZd_ON)@G4_#F<6AA3xnjZ9uW!k0$H+JxXlW0ZqB0SiV{5sxEINEh+U zr*(}DixUS)5R1v2lcR0$l!()V(j7@BzcQ=-(PTpf~fOQs}(P8WE1b>M$e3l=SbeN8f6xuHrJN+!pbQDe)7qdQ1D@%fzrn4<0Uq3s)&`Zu zDAP2E2E3#M7Hn-Lo@Kr@5n<_ghQtPttX;)x0WFw18pW5h0Mb>M`*~XwMigl@v{C`n zaPvGSN?IntX1ryijoWJ=x25*2G`g-pVQP~ig@&fiimRvpIz0zvOUNv0^Fy-+0u=(R zZf$)pQC2yqSkjs-HlP%dUY__kC0fz%-ZT4T372b*2r)CU3ysE4SQ=?Qaa3~i`9P_T zMS+!%Z0BQ~lESQ`nqq zf%{v5HhbwCpe58=?ndQV=K{izzpVAP460j9xxi^x3XObmN>&hQTSRSIOsM`{G?`HQ z0x_`KR`1p+^T8q6hYFNFO$d@JEgCe{ynx_rc&_!{M@0Qim7xUzoeg}q_u}Ns5^}#Y z3R~ZX%PcIt7tXrm;cjxV!#XE7NzqJ5S#%KOrBH2|s_^Mo@olz(hw1W(2s1S`Xz7w? z+oY{pG}Abr{~ud8`~wQGN8_{=JakTo;l0~cIsL%DRL&w!S`zM$HS{u)vCr`!ufL^D z#sH#TA`dcIu$Uy+BPx-^bR}GP4&Vi9PF>COCg&t~Q)>N(d3-#$;LY)}Y~|O!;Vb#{ zho@>hEor^8Qf#IiGM{4w&EjxKO3MH$Yuu)t#v*FMfCDcPg`lWrQ1|r2mk|v8 zLA;)gwJ#^?VCzj4juU(Ai=eMCDy3e#^GIP)+cpUB9iiK*Z|f>A8! z=!3t=R>d1u3sqH}fU@_JS=p7{v|G-^ONV6>)LuTDpDVghWSHx7vkRZ@%Q61JHQi0S zFS-$F;r~*J(HDN_@;S!wC z2HO^U3aVvxO*mJ)qc7DJ05;C5xwQa8Ii z#pie(8?S6C`Z{P``LY^^)6+eGLG$JHOM9&6b0QAGru=i9Gh&6SIL@Xg2k`z9+je3F zsm`f-0J|MYB^7n7sEOF;?Yy5E5%*#5%77~d8)2QT_bdGDW;a+LDbi|cXwr!hzmnlx zf@Zi*mE~6;PNJ!;8R67`bo`X~cpLq4&?+Hiws4&*DnWEcz8e0An5NYOwU|s+NdaWY1HAaSX~tc9EeS~MnLNLB9e?Sd>BOQ=;*kp=@2=% zvYu!vwP42tt3PxU96F|FJ*s-q!FH^o%%$rzi2VwlYY}U}C$rNZuViVSw6RwKxACn- z%|5Y;bDw$UT(jdIGLCc2gLzs3`^`@p4xSwZRxbCuxmD)Yj;e5HvOL$^0Lk+kF^i8C zsv3|x@nD$0nO=zdWA}e{SUy)j-oA&QuuzQnW}g@_G$!jWa5KD1g&tj zBG1s&wb5xa5PZv9r|)}elF#Sg^109Jhy|F#WZe%^Sq2Qd9fRyRnzsRXWgs4T(N>aj`NFq-iX;hvU;@c@bH1T2{vv36YJ=oK%)1RKzhR zzs$wgzQSWB4t81tc_%v-qU%QCH$=l$`E6cek&^m7{@Y9cDYCA<#o zUtfJ$$&)HS|y~60@<#C{t&m6q?u!|8KEL{xc~sK3*jC^tYxS{ZP(V zFBmb)4X+2%4ksntB>Tl=h;>tpA9f&ge60j12Bf9r(9raBGqnyW84d&Dgjr>X{WJ*Z zY$-%f)y7px+V(s8?8CP<_-?1j3mYac-}z(?3{pBOAR0heX|n(MYi#Uo=(ay1`@kym z?IlA|QU!t}WQ!?yc>J@%`!JRnz+Sc0AD%SL6 z6#yQS*m%PNStH%~6iCB~l%>i(Uf}sFO#}uz6lX1u7gW$q%t)Mir|y#es7$ z89!ipt7_PvRv|Z_*!~HBdzBidwWo*kL_>C-No&J0`xMCo0o!4m7ga~P|za~kYBQ9KFP{3e35!6WyokDxY zY%Sdcx+K7)w2dpb-s`hydHa&S3{E1lvAL)#9riG{xws_ve|u6vWG=DA%`NlM*JaX}<=a7=3)}Q3PibI&Mnv8He9LQm)B01pLb0Lw#KvW^ z>Yt&5RG!u3uB2$i2^oy1?ieCV(JfGd7^9I%)RbO{EI-z;nxx~03AE#o(WQYaAzqd% zB9`xM#!seRRl=vA!=T3kvX+W41UcA9oyppG+h2HZF!`?U}kZ<6?dl!+r@8i|F& zeBsO)5O)`wYbG`b^~jWjW2kP7-)G1iak={Yxj9dH^NmpZMCAOY+l%&8cWnuaZ)rU2 z3`kB}$R;U)Us;7X**G)?gqcF4vQ{5?KzYSst6gTVtjM(H1Wp;u_^a03fPp5G5Sw09y3ILAFRoEoJ{_vyhe8EsH~;aRHxM=GHzAaoV#Z*3so;L zS=L13oR)?uV5^yT)(fpHmTDcfa7)OydFJn9Jo-|^9YGr?k7ny>pSjAM;d;mG7>P4! zfd3W;w2$lXlzOKN)^#m?!cj!QW#_caQYStuY7}c@r zv84`Wmet+^Js*KI53NZ~$B)m@#0r<^n;y2oEj?fiTzUypqL>jOEMkmBB4K8mWKBt# zOH3ZpAr;cZ(dJ(vcQCKWvS9QbAOAKY3QInkuMudy^sO77t4vQ(g^*>dWhfr6_ZVL$ zuzYk{wz<1>$m{owAbs6yvn6MyY92$-`zh#a;G+~669o<$ort!>Eu=@rYQP9n)j_Td zspe{jnRNaiO0njjUQPm+-;fffc2oCHSEf@#Z)nXA6M8pFs?lpPbloSJqAiegCIwLR|~2q!7yCd`y)I z9=bIMsHR_Jf&_*%R6AL)mbCf_`v7LRWQEH;gLYi8=@>v>x*ej_cJXcEgwzeZ zaU9@{vxDUcF$H5!N0|TBU>|UJqKFPfbO63{h8@*}+c~9B?&2F7 z)OJ;fkUq_`uU28VeV>TZIca@zp7@`4PUC)kJU)o%O--X73ZIcYc@kKz(RhA(IMCsy z*ri-TNlX@M+u_8wqC!TlM~aYadh8%*(io>iCIvoIq7%~qJUiRbHb}|&(7uY%^8b1CbY@wu~4^d zg+@YmN`M~#Ya*}X7gSn{JC@^yITCb5VvwA&`SLCZ>7~d*LuS>H6_QGRLn3|6genrIq$kj=a`?xxWl#=brrB6BE)h6ns%&VcV|l z;bpt=BZK)@QC1DBv$>E^0ORv>5_#}NeBk!8v{l=U5%^HF4vh*Awlnq*l5>eAD2nbo zgSY>6dE`C;3B#&`%wiSJ91ye-AH_-397Yu50AW@IfOA#ZfP7?-Habg@8j5nBaK{HE zAe^WtnSVV~R-0&rdVwA$NW+5=1>43_#AY7lJX^QTxF-|zPCM7k+&MPd=*i3<3hjl- zuQ#OyaS>6rHcIu)!exHRTbWtu_2efO9dcr|9@M;pdqmtT#L$WoY0ktNTMf7a@h{0z z^a_^uS?e?~L-KG_NoKa!W{X)Xt*pxU=>S*cPt47+)DBFn@-;k^&8NR|`@JMHCBOX^ z#CIqq_QuYvDfd?@&}*h)$hrJ1Ut|fdWR42rHnnOHZ-e2D7cXqQ;iM61If^vrCZ-nR zC(E6}jIY7g(?BtP@1a+CvzUeTVM!ddN$<_q^7t+}U+@apq~lUW!d+%U<5W zfVV+LD+o1VzIJ!%nBIP-UfnIb9LmE9f}1oex=v;4^OL4bI!{e>8)RCa;r9$J?^fij z)`|)jN@&xQsriPLR8VfP|R*Cpk%F<`{CuLfEo`cl_NT5 zRB^~9R!)FEr6x}@iB?~eT=LVdOGIa0@{BDviO8f`1LZ9@#U;U07ID8nCeH_^LWRsm zcp3Fy#gCc`7|M0bI1VyVO+_6i=DzfiLQYXr8f;cR8I!09cnx!QVaZ4k?ho%nCKK|< zEK0p)uCtvJSTF$O9-ycw+KF@L)~P;eouo>C?NSOMEnK~VXE9Ks+L<|9lqoD?023n<7Sa?xbG!O&I#)Cq^W?;9>80=1 zax|hB!@NSOLWA#IjTLus#>~~slfNzKt~^5nDzTAEt1C=wN{K0Aw>%xcQ-xw|48Hc& z<<$=DWqeN~U~BU^x=0J$kZAvC>627e`?QojyYQ~+Ln4Owb-Xwn^4=;;Qx~fO9jP1e z?)%kiTr^!fWuk6|z7Yw!M>xor+x5lVkkM4Or@^Ew0~fUVG$skv_UFQQop40_cF7=t zAWJn;^8Qqan%Rp9?w%K;9fv&HD%bJI5wi#@1bm|dbmb;=t$k8s?@#2^Vpmuz4A*}6 zMxWEL14yQU?AG-jqTTbZ0cXd1n~Q4~jFOQ)WBUiA)p4Y6DUUQ!CQ9vBzJ5 zL+tqIGHJqEH#5#B=y4VEKrU&=hB<)0bIJyU!|PFJB<7Ki1e^y47q_uPdxdd3~?+JDM#{#PwpfU{cTT#;vcRc*1|= z@nP0&7f>YHy=itCKE9Js<6lt|Y^A-PE1aG3e!ZsPC3Lk|wvqTg+1Y&^bj{$~f)UXG z=1(Zoaly(9QgPzJBLPAr@?3gyz%<^2zH(f2?5b0ici;s8U@~-yD1fuaT`b>uMpbM1 zR97>ikK<1Kk1c=5EfSe}_mbS``(P(YI54xtG=-lo+q|^i*%kid)K>2rM1R|AmrCMA4@m3 zR5%T}-aGLEgSHEYU3R8)hFIQwF&(OUzZ-qpzlex+mkKs&Vv>vmuAh*W1+g2@ef_n5 z96frBN}HO-Bk(C^JE+GhSpa@6Ta{)3g6C#AMCg-Dj`f+*j`{Wcbox` z_YGvrLQ2(OV=bIw5%86gllO^@h@@?GV$PYxF~|zu;fDU*@t>p&{|*cPfP(YmPC>-E zX1tN1**Rg7;rF9S5|(r*FLv=8&1;7XLrGFU6HeyUdO?cd+!xUALk-1PJ{D%;n8xSf z`)S*~H@@d$h+W&cR4#N^8YE(eUIaq+g)!dLTlfi4`$8!vWXs2&niJh>Xz$bZKSiCI z$F$RffYJ+Y6LVsL9|cTe{VGLwo$Vr`<2)ypTeaav^6z}zFH>3de5_>5x|TYnqRJ(k z-U`e5?NV`ynAPUXTo)r5GUuHwo4^@)UBTf&a9I1DRcN4jgS^YG&G6DMUZD+E=((cS zKufExdtyU4$bMkg`Nv=HK(G=q6u%mmJ)Db9eoL3v&LwMt9}7R$1wKMeDgldtW49$~ zZjuCz=P+Q$x|1=YzmLN;R5V)rE!^LUaC+8>7SJ*1NUK^2H8i3z z*Xz{&RE6yS^-@xMz3^g;bo7bRd#gfB`XeHp((S*)U>LzjyI@>bdxpAO8Fh1pwc8J& zuZ*NM9nZSCA~Q?plNop6I?H*bD+UREC@uns2TJ1p#4$B~F)A9vjG%5~n7ym z`AoiYqUv~&C{*@=G_gy%acI@tr9rHF4+^*ZU5Zls3g!pN-!qMxPuwn`^*wUabXvB? zysShq2P;HeT%*%=%Q-j)Udxq@>^M)z0Q|wz3YO047aY04w<8N2`GsAbx4W?#r2078 zGqVNjPqjBpBxb$H2B$}>0ENn$?!47*Bn_~d7q2_1g%{j6pJy<0hD*K{7Jj`T3l)S8 zvn?l$KK2!QpF95W`)K#`byUq*L)qlcM1s>mk_lEnAI5MQHR^O@8>dS2L(6s+V~T~oC`VpRzfk&nVY*DTs$~`7J8S9HseLL@ zp`G9~y8UK!+jlK#wWYGs-qcS|w7F-0b~^$;OSj+oTEu97y*TWb4}BGj3ICR9w$ak@ zONs?!O~Q;{QFRjOV2a>i{Foe zMvzgahJ=n#O*O$|Sr4fO!ZlMELdpsD%et1oHH;z({9Suu+>eHx>EnB4Qt zOcW6hL2BY{fT5h;@H~f!{#{*3L{C`$Lgr`#ZE^H`aX9YeNtS?d;gTW=YYFd zZ?4wvNO|{ zi`+WcAv&`VHHoe=6Q{luV;^2t+jIOtW{43)&;zc$MiJ{Gm5ajN8rRg|o79tj+Ar2Z|h5x=+X z>x=EGUWUrO*KMJZK>DhrVI2wR^*{4ozNa^&Oy4E_gZA_1QR`3R(5{69ycNp^2V%9F z-ZcqMP-YN`imfp9$Nh=S201;C-I!PsjD1VE%X$geD*!_7pjqvkQUHq504yEne;x%0Bl z7h!_Cuez;*TI{*Z)LQq4lg^Ttm6~wV_f7u%BpvUojLCbiwC9mEKHDC2`B&jL%7z@e zLD^7^8`*{Mj{g>d@z0=;^~fF!^=&pEwM!m?_KYFLj}a>c9`%n+Fx_o61aN*+tt5{| zUZRxAXnNygF4XcN7TZRdsgs1OsBD{p6DmHDc8^MNNu&i-mi-#|lKAX_dryJ@!x5TI z63ke)G0$dG2szN9CZaAcS^^3nK974?snIXBMkv#8ethlGtD6V7eGoOP*QvtuGX^(? zs=mv==+XJ6%)(&-$UDU{$myS(10=Rm9_Uhy4O_Oh0bxhlq)Gq>>@flG%r7A-P-!sB z!}jh?c~8{z3gRzQVNtQYj~wlbngOqA6KxxKE;con^@G@q!?V{6l1tS6T;tUlpb~1& zg4}A%3<@;OWsBitR*rT!aF5B*)Xu{e*I{Kg0-GR{k`II_YRNte-55w-wk2YKwc1(r zg2_+cX{;Y9(iZQ$z8c(bZCpa_q`E|9VKB|AAq*vO;kT^5VAF zPXr8?`~PmRf?DdA*T1%GvKQG{Dno`Cdd>|!dzfCi@ACzB{FooCKicOcN_#kc))e@A zJFE#OS0B@PpsSGI3)e*)joMLR_7`heBi1$Tl9`R5#_>`GV{_=JmUdKuaqWE%C~Usw z{9*r`{WbL4$X<3Do`AermRsegtFb$YLEDKe3jx0PeO7Zkaf?v88FTP{y9&i*kUg^x z!%_6}MLV0<(+-mmUe+3RmtbPO7~EmM0@O(-;9{Smvr!0X=SG?s3+-ujRSTerRM~}vLC(hRyt7rNBCKIZ@rFjPHxlSqO zoydP7)skVtQ}3mQWK@= z3fGa4wMZjGe){moR(Ws)Mq9F)^M;Hxz>932c73_X;8KWzy42*+{@2SVz#TpQ=iD97 z=k}6@+LF_|wVBDHt$SBZCQ3Ov!8L8Iv&d*9|3~opdz!CHhhxm0wg1PIi~mj;{_Xi6 zPzZFjcp+lYGkeYO$@wv%u{GcJT2ZpzPu%^!y6TDsPT(UhB$Ch@D@qI6$k7A`MRz6i zch1dk*1)P%v9K}T>Qvs1W2>1e1y+ojbsTX~XR8~!=c2(u<pC2{#dE?&3C!wqH|iy7X$8MKy#z($b5%S@eoUqkuY~2f z#!$s(LV-{5!7Of}3oE3Ogld<5J!^(;+KO^bD*39q>NQF%(SkNsYzzcd6)zdhG!I@P z$%L1vnjrEl3xeXM_~#nbYjh`A6|xkL7PoDk5w|bc*y&AGZmeZ~3ahDeA(Q&IDlx@6 zRD?(T5uV?3{l;)vQofzzp!&qtS;m{Jv1Hgf{RymxM$X`6U4v4;yzpwN^70w6=2y8? zT1de&OnR;GE|~-djPb6WXJpk2eEDrU(TU)AQ`60zqnyYo=H<3Ax%izFv1C3xfkm|T&Zq{%eJ_ej7+^<)~;DvN+uQ2k5hGK^1%sEM_P ztjgqMUgkfKPHBymj$8znDLIuRkbs>Ow05kB9XN7J#W#Y zWpSiZWINK7AhZBhJ0Fmfbk;Um!%>bM*$CCt{acOB;+v%5(f`s$j6M8T@oA)mj& zJ(Y{2Z8mYGQxlprmA-dW~Cvp#P_&jGe=bE1G_ox}W2zYCTwdvq$=i&tKX z`uHlRS?`o%XMo3nA+J>Z({fkbw!9#SQPfcn=pR%>b4IwfbVJ60^A_5)t`y=@l^2ydY|`Xj1uccFbbG| zWGeOGCyT^PjwO`Q+xvG9rdnw|d7$U!*US+ho;hx&5OZz6{ax3n`i;EwIhoJdu;ZV> zx+1l%udwo{s%EXLNs6Rg8ToBTLS~aTy^jyT$fMgte9IQ5=Js>yoW4NJBTt1G^KEfo z|0F|-nJHn@MNfm(m5-qZx~uAv=dFM&MGm{k586I0Up#+%of4K#ds`Pc7`~vLFLwE~ zG4X=QU|VZ<^Etmg^p5~u2Cu5PZD%qq&@AatZWvorm?M|r7JavCFPpIj@#WTAdBQ&w zPfwxxd9N<*=#<>~hw2l(lQxyt zL+f#fRfdJULvdECowz)Y*3l1V_fXabFIxjy%5mQ8@%5eFHfxSs8*3GW{*9y-VnDlRb@{(7D+`g|Y%i=EV3oxNr2wiR!-B z3HDxKtodmBM0;UY(Co%xcyb{lVY30ciH5MhF6CjYkUi4KsIaMcC%v!Tv2`EDZ!-t0 zs3mkZJxG&Xc?b}%bU9&Q;&(ObshGLd(^O_)bC6 z80!j81Cxc?h}_JSA|CH0!5q9pd!-#0j}925%NGva%j()^8?L>Y5P{q6_nHxx&epx- ziO+zaN6uuRP;gISZ^Kz9lG%#=II)O7lE}5sYPl5g_&@t4vN`zz3hl)1mD4`iy^}SY zc~==Uct~osws*5fFv;c~mf9xEoN&WVc-s0fI>l-UpQ93b;p*Twpy$>v3LA_Vm%))di$f z>VEEHh}@H{+?Zq2|4^RFzfB1L^YI^0U~yi(G}H%AJbEOZuc}!k%MBZyuMYo6gDSg} zOKH+RP|=rr$#5{S{F+ymAfDqA-FC6}&=su*lAd9@Fw4A2<>mJs&(fs~cWVtHOrD4Ul!+*#=?4 zcml>c@zHvW{~#gPt%6r<&rk|~K1VWfQHj$6e~d}^TTIZC3tS~Y81Nqnr*Fe}I^E41K zn6*XY94PEowgbSV(q~D&jc=`J|Up-FK)T^_fyE+9SKSlce!|Lu0HAF%; zx1Bxj7k^1LR10i#8HO@Q8m+%qzTdPy?TbAX@_!y~MLXQDWb3Y@z~KliAZ(c76%9>+ zuTrLt5z>dZWU#*@p~V<4;i-*>_U@f(sN^D^v4Oa8s7Vw-5V+LGipW%b6nM{D-BcAs zGH#N_A(B3Ep-@=EHb^@}eQcJ%%C{Pmo*#3q_wMAirS!zC39N8pNuR$sj(YL!T+1~X zTyun#Xq}RH^AS{Hdc=TO4~W9EZ{-Wby|!5w3hgzy+5U>o=BvbQThFxGW3v`?)g+}Gka+4wSNt-lu}iJ0Qa9}PESQh4mfNplPwfgw8#1XTi*5Rwq?frWjNf#=g+6h4 zHO2l??1gXb_u0gg^E>_Ea8Z_s$yMA_SM1u)2RZ`&P>eN5JFtCAM$w;xpy1WFw6q@=}SxLkyO+oI2Mg0DQ zgV!*LjY~&H3tdK&GD`O?4_j4PZZ=avHbcb!{N?`t`1%hhh&)aTGO*w=QijHV1-xq% zKl-6EFFhsPC9B&CfRuD{vVzVaQKQ`bFkKg~JXMUuN+ZUWX5wJq+>cL9%WVI`A;be` z_eF9-BW-atg(ZImE~SWIYD8AU4M;J|p<~V*$4AD)**2fe@RdT;`Nwpj7mtQ@O`z6D zXgrpQ@9=p-5J%yiYZPu{h9TMR5ii=hdPlG>(^)JHmc(Lt4Sc@3jeg=VGO|bP)AK4Q z5A0$HSgp*=u6+NO!hvU3YhG2oka@Gp81+u0YWZH9ncQA8EN`wd$FWkNJF)JhRo*W7 z^3m;E(U1XA5j4S&-xkV%u3?1xaf_#GBc8~#&h={8SO)Dkc zl7iz0m|YFF^(M{;*0VzTs*LR}gyRF^*PWc?Cx?z@TF!&E8||kSBmO+)ys^ENt4S{& zxiZGw*ep{})e;-Wb6Zu~8CK(hiyD*^TN6oJzHr~uc8IYp2pZQ^?onsjxY_~*x~M~o zqSMm5whk1zRPH6QW+X#>gE@=|F-?{3JKXE8=m+Gzn8v+KKX*$kD)h7n$yQ zC=L4FHwIoPn!{Rqm@eUNY&F&I9aCD==i${hyZq}<&}xX|(m_4z3u6ikb|xC*H?;ML zu0b67dr|8Fx5nqiAy7osm_G^7NVh2|hQ<>(ug%vO**LXdtEI z#{vUnoULA`*uFWNs3rNmPg8(WH;$yCrX?${8ng->5?Jn9(;7f7@sWTbTitiki49K{ z49(?hce$GcinZ#~VX zmg9PDIkDKWo;bEK0vr=u)FWXIxiS;5g`4MCxSM;Ek|pY@M(ZCH$;^OF0xVB>8dGF8 z1}G%LK8#%tvZjCL1PQi;Nm%t?R?WT8r-4!@XMN_6_=7;dBk5^@-VTowGJ4AVRq`kCi5gt8}wX+4mqjq@zEr!M37Y?3lfRszBye z`O|+YAm#r%TKoeFPaboZtejkD<{9SQ5+>>I%dH#slM#d+HJx(rs?v51fcU7n71OuU1*J>k^K2`Q}t#RW$jHT zDdc=2+b!#FXvttRyBL}@dfgs$@C1G^e$%%Ru-)Z;^c>dkS6k3)g39+#i6qj7DL(5s ziD78>$Pfq;3{&cH{Urj36ysn}Txch&lOW0&l=>1?T8A_mT`Qzp=jP(mIB^E(JZN^< z_r9E5_L8g8GR`L3WWk9%H)%Ceb%-&SicQ+(L^r|pBL#+~w0G<(#%ewRt2O*b@W4N=$1s53E8m^&oAW z{$?P-Z9r&YIVB7z-pMOz^uw&JGdwq&;)6xV-aHvrgec+T_r*jOsFb87LPx+iF_@8X zV{y+eJZ5D=EEFC&I49K#3*LQJsZTmol1EzEd zE^>}0fr`6Tw;YGsh^lJPE#}0_bJ>;h~%xh_A)0+zT^C3*^ zIBU*c7{342WafM7PQX&18EX>f_nwA&hAq~5_pjIxUISSjWkaPGgkNeFt?Dh`I2#8c z!;<>07dQ(-ipHbK5D$t!&*o=bXsKD&zQD9IyK2QpdTX6Q7iI@HnSu2VJrYCVJGE$T za#yIO-jy%o9-B<4hE`=Sw}0Jg^pn9SDOq~@7yq~TrTzg0_NQx3dImD1SG(j-NvxUD z%8mckLvJtfKdAePu(;Z8OWdXKqHu~T3NPHPaJRxGxD>7d0{L(#0tAY}-JRe85)#~l zL+}I*ngD@#@-=_=*Zth5M|aZqzdbtd;7rcotatCV*Ivszx|Wxosv;Kk@C1127@!8) zz@N3LNExG|FNoCwk`R#qIgWzSSbJx9FEg+(<>{$kM!5HjUOUZ`!PV zI9LnIdB5F0ei)`zP4XtUg4&738s*xgP+vce_e+zQ{M3YUQSfY{^&I_#CSBmo)4Tko zKJKDri33u&Ywd7R(E1^bu6LtF6(L(d#^c`PYkC10GAw*iRCHHoQQ*z zR&z$B1ybrh{v~|jc9h9AIFlU6v}pXJDHSN&iU60>{Tk5roTgjIJ1@oll`jBSEW9u@ ziH>9#ze5;V88MhhK4rByd-sxZL)9zG`H+RFp(S@#iEM<7VY>Y_%z(62s_{c<`0F*e zU8uU;&8ACOOD)r$;tB7vBiQ z37>$0NX)h1>1wE`!!4uHn!M14P~c{ZwU$6{{0;gxnZ+zSNh34VbRW9d_+kV2{(SDOKpQbYN|l&p9o z)$1xil~U+%c|#2|1fNoB#7q#yXii30s;e$Rdy>j~=TOq9z$J&QE{uf{5zQq#v;$l4 z*EH29-w4neNoXXx(#T6$E=f%q*C!FUB#b7A`SvXEJTdFzmT&g*>P`Ib6CL}XC?x&? z1xZh&w~>L&K}$cMKZUzBbCu=A0Jf^Q%PaJGZ8)vjNV3d6C!;u!(pb}Yhf=g6nXw2b zKAEDy?ZP3O>b>KAxRha#bbh8WpDRCjBIwMNoD+JVF3q7~(suj;;TS6Lw@~pzKjTO4=1vJ&8f4Vqk*$x`jq- z?$?p7%;O)M7))4TJYTSdcEi2~ZWI-h<%J{sI$G^nsUP02suDP2nzFbB2=}(|XN+F9 zh!EYXq805?l>I_SdT;ohjeh>Ey_aglO+eWr!!_t>olTX0pBCaXk(!l1H;qs9B!!HJ z^-SuDm}fx1f-ITf>c=!2ukeyTIcfHChgFQq6IJ9ldE8eK+E-ELg!oJtsmXjT3Ly~7 z-Y$a~f?Sl%fRuj2kLN>O>MQ0fNYH#b!R1TO{<9NC#uQuV`}gW+H|_m+B7OwB=a;f8 ztvsuf2EAvYGkHTIWpb8se?9%gKxvu94INUePowFvC@Lv_fvhK*&5Li$Z_Tb+G# z{4Rc4Y1|ilX_*S4Of@i$RYU$c67E)>-!OQOsy8Sdyrj! zb@Q^)qTww({p;6UL=R(^10`zN6+`anl1@rS?+ogjVRagMWF_y?+w*vlrbDeTvi+`s zCWvJw?&w=(X&$oXmx3?-(t}%#p&haNtPR1Asm1wXgWu0&_)VoJSwMK5od@>fW5{vF z?k6m4qh=5NCi66B^z1M<7p}*8FV21T%K9`bq@p|5ot1p&!ltt; zSA5Crd{W3f^S|;?F(ZeFO_&Gujqt#@Uo&Zi4=OgE zjbV3p|Fu-Xe*zBv*DL>k0^DQGTf{*3-ecvH2ZaIaJqy>Om~%lOT_5h7G zUj+otTOwo~Jc)kDK9&-XkN}beA3_oXK>ayA0HCvgQeVC0o9_>SgWV0BmtqgUCw!g$ zBZzjE%A;QaXKAxsPJc;LklmLV>g@KezBJJ#x$wrS`d58R|LW6;WokT>NQGpzxRJA( zgPP59y*oNcT zGF>O0w_ArOMi(78UQYa4`=%i)jtb2O&+K334!t32e459UphFSQiXA0^W`Kx zbATOO_f5Ucu^nDGo|~-%IcGgyBQE)^C*pg|2VC{XjH4KHw)zX9yRRD*90mvP+f#}X zhWG?h)CQ)Tuwvbuw=(r2T}bHfZ*ZCuyU-l=9C53`+@&6i&12pw8^FhoEP)61B@Roe zd24lR4V#!-bXX(G3iZ|3TcWhdP>rQH=PQ3HpKD4m>(C547W^?((vo(6OMZnUL-5#e0aU;w!37Fa-a zQs9oR0fQQQk}6sZbkJOVBvb>Bn_QBW!AL$38Bf&X#Y)M+TAfAaE3Dh4Fom~iZdw{( zm#I3~hBkh!!%@fMJ0j~M!wUv_o$^{%JvgSqw(lthSbin%smSgTheNZW`{l2CRkh`# zhQ!j9-8CU{gkHrb@MWQ_A|0Z6a9lkm zIc!UCUN#uMMe_(J>7M9!ew%W+@+i zTegl)yw0sKWeOhL*+_BeN_uZgK$h%w8~_Vo!6=(E<)ZPrjtSzmG7`dzN2+<^n=uD* z+?nrBHMRJ!i z(^tk>$m05>%9m$IJjOw_>kaE30CoK|T{lV(z7|ZCzP(@0TK6HiTSNGC@W*8Tn+6j9 z2pa!o+bZMyZHn?=Bgs6DsVe34fjqs|E>vjq%L@jNg!#X!-1rAaHzb~shL>XygRMkR zlqN=Gk>TFHxz;*Px4KKF#t7jt(jNH+C@NSg6#2rM2TRKB->5{v6Ou_gn8<<8wg{+3K(JRT>f39JP33ci!ns;^{$HUR z)j$0>m;yIdTEr(vJlfAs&!2UCpQ{Vp;Mw^(bFnZivetP0cA2TUSeU!>13r#71@!>y z$4J`Ymj**m8->j&yTI(JJqJIk(aJ4IqmXm7HhnZ`5+gQJG+;-H^N;jK4vs5r;JqDI#qD`MS!ipib zwG&-J*>52rBhQz1IUyu}sj0>1+fZi~QLzh;fjZS1+4s2=lU4*hQtJfAjr@rBp6p#Z zKMNkX|AY~@VBU?anLPKOiX1)VMfVqE25E%Y!FuM#yVeTsSb_Kxtmv1yUBBeXz!y~T zAZuyK2s$Be(;jo5=y!{w|FV#9fD3pRSg<9;XkCIz6nTY*=2t zv0IDZIOCJI2hk2)DZV(+m6$S~2Q?F{?Lu-5&GPjq2XDVKOeS7$e)}EXr<5uG~N6{el0Rd*HW@5*doJ5guhJDR3oGJ?}~p**YQuG@Y-|vr=0V* zHwGYkFTqW=oeI@^*Vg#>{~07%jIYHDRPzRF#}hqNA{6HrvzB@y`a{;!_`uR4N`IPQ zikrwd8@M#?o5|2T{O&JuoQj`c={z?hhIrZpL}?=n?{rm0RG6AqTQ1tJd3@f_3a&JyZQ4nq&+WM!Zl#FvqMKs5^bB*N1Gts zc?ULkWZI=VG>hDmuICnfrohL#6AKz~?j}vUPt5fEu!xYTY}Tg{i*41zGhsqj=@29w z!dAd9bZPV6aUU-T_Jq9)RYYLRvh=E7JmHBA$6xPXr^MxR@pZRW^NB@P zUtk^o0H$CL#YGgvia29t=lWDNIW^8%r*DOxG9`QsJ0`x%m8cue3 z72xrgJpUilnCk49vcUS$z22|8Kr(n^`XO~nzg*V(2rpUGJ1ujW3kC4GbEJID z-`h!fEY6BH+`o!vg#$>k@lxq~I)WR!%#?(vgwy1+Qi?_51`q=&Xz3-qfq)01ICfWi zswszd^uDQiU*tZiPiHGr^5%$1QDyxw;LV91_T0fGeewx!$T(Rxx|$+6q+OcNh#HWG z5!PZ)M`eEE0wcZ$=L*4TdlS?ijg#SWHIQz4U!W4SVF2r ztGsHrcc@2COY*_L!^3l#X-UF$1|ErA{*4)L&MywkWltieS);!&qZwQ-&bf}|!ecTy z)!TabVC>_@e9t2PwDdb#*7zZG)QeZ#Q(Hd4qd0gm>To(mLVXO8Xn?)qDB?3bWz;E{ zHX~V+h0st(VPfW zAhBEY!32EvspN7#XB{KxPu40P>#nwMi5h}$&IKb>te6PYu|n;~7n#KmgEPt6+)3)B z&cXgU9!T&`5gA!8PRxoGwt~=WGp3w;6Be?!>h(A|Ua6grrYKMc`$SyA&J}95Ml3e0CLe zac06<84w(2VLW~W7e}AM1kRbLOp5Q0vjL1^#KUQ0xG;pyW(#Mp?5G$A>2XlSiB-?= zSks1`*Z+DLu_Wf@^Gi|tXSpmg@he~?J2&@Hb8bJGX245hnF`^EaL*8<4Dh_*i_!5i zCMmki)VQ{V#@{}T$?7YT*VBV9FCZL#3XF^l{LghiUnuF&t`JZ#nU#&dBFu%0^X7F; z{;3|x&A`gV>NcAm=_RO3hu51sjMNb~8PcR@0b3oEa`k+RVRDEFlB?ghpR5m$o?~8Z zd|%c&j+kNIG>m3#$}t6(g5RtEEMNT1*WK&l^b-XkwNv zvHh2uf~f@RU+YkmgK_-kDS%6|XJTTV+#vWe9Wg!G(=ITPSfF(b4o-~1qk;}0seIc< z0&`^M58Vv;Qt&iYr($=L+0rGl`1y0XG})>e93o!6z|tnsoY^}JYL}cRqn0tJ&c+TH zp`-N8f*gCp<2PbC`lp=|6hEIlHxUDZh%W3-B-! zXuuU>$X&GFpCHgC#Vm7Ig4@o`6DNyROoq9>(`#~3SNSCXGze+!7gF*Mn z#9_;n_}mTO)ZV8J@-SwD-y9SZxAS&|b!Pq1f@G_<5?O{k!gt=%eK*G1 zXT;S`{j9r>C+aABp<2Qne+u^jV7^QTkJLQEzT$UvH}9~adS_~Klk}@eaznlNAqz;= zkel`mTRXie%2hI~KzmO!`3K~a6a^Vx3BASY5_F-FX}an}UF31wi?$MAO(l2jm(&5W z3F`9SxJY5L7M`{UaUuOoH_lXAR zZ>mGIOACFT#b}jZ(e8j0U{F3An5`El=#iU9!N%U{)_Vu@87uhd*?j5_l7BF-LKLmXzZ3G2IJqdt*0#0f zPb=^XYlTUjR@VE&g5X4SB1HNu;}?l05M6{Mzmw-|e!Zr=nQzxw8XmqFw|bpj5~ zKcFDuX7R{K?_|~&ROWTz%Vtoa)uNbPReGNUQ`hke7HLat?)wL$lgt`h1Q)&5q~}WF z_OLA!JC4!DfyowdW({gM`?QROIiw`i0){hdophcaZuwZ!dg?EtLB1u}bF&v|y}@<^ z$g+lS8LkP3p+u>9Iw7ugY)0dZ7}Y6BNnon@loTc7qUnWV=3|0E7#Yefl^NZ^KAXHG zEeRC^qv%uM08UQP1@$2U)h{tKVa2efM`DJZqUI7=&+CJ|#AQ=T0t2<@vye4>3|bn7 z*{qx>X(-`CteXE?cHb?!(1u$K(3nP+^lE*PA0R@apE-V;B4=FrnSqjQa8)O*sy!ag zq-|hIOjiDij)m}hTYsin;k=_|DV*VI*3qMi9;!!BImE1gDb@Sb>RMRN{y7HgvQt@o z7#7YS@;y?Ldo`J=Kud&PNp!M7wZep8uT95k2J$)iZR1a+UrgFQB{ipFz(_B%LN1}_ zr^ViE34>>X+K0dC&-+{k?9hut<4zW~v5{j~lZ;6@j8%^*{O=$l4w8Mcr!8Hnb;`Fe6x@j>;_FT|ypa5?f~Mp8&L;D`pQVC+R0n zH5B{FXOc!ur|MqM4{@zb@Cu4iGVZIhN~ovc_F+Cb;G<-W;U>D!rkE(aOcx+2R;XAj z2zz5buKtFxSFTBW4{;SY|EJ}O+K$nOIr)Q?raQL;a$gUHHGLV%)CWPN-y0GAqdaqou3Bikq44WRPa$bz_6}mi#T%9>Q(9_}Ve&H(}~-`*E=|0YWD{{X>%Jp2O+u=}B+zCrJ?pB$-g+#K^_!M#l3Y16*s zhoc^4FR45}Vt1og?S08~F+(6%A}iUd5D!b-;(X^gTA_6q!JBvp&w*9sZcxmM=K(>- z)N>*}s_qlbzc&L;NX=IDd=tT9Af9onE^^q-03Z<(B8Lbj^<1@XA7We)Az$oopbWim z-(`H#NJBy{{GKe4qyX`bWZ!~>lyPWjSPDS4)X*eWf&qD15*!AeF+QoTv$VA*V>}Ic z$D5~8!N1Sfv9|qz#qU(R)T^P+pgf=%5lzFxv5U&=7%l%g^||CrO#tRXr->eyGzSnj z@8PWAqCU>!<5sDPsDg5tby8Y}SP;ncj@yl&FvkXG?%R3pJ9j)JqSTb1tIyo39KPrm zu5xU?QtRfdrTCzBL%y(#>565}q_lDbtv1JEzWuRB%8M;d?Q=(lJ2@XCppjH{8N=wX8v=VbD618unp={1fA1_X5+=gg^%;!Ea7r2=pz%Qccx zs~xiX)(qpxaQMJ@-$(O!%@gvG>JhAYxUAARCl2HvkrO7zXP^T0;Ox|1kblhs$vsOk zO__&|@kQOq&cyoITEJVT`<`-@~v=DrWQwej;8(}up03zb)w znb!8R`3|s%XF2V2L-y0goaDN=K(VPW3Cyv3G3+2y>(n?9kQ3lIOOmN=|Cy5p{w{cw z-0>>7A7}zouO*o;W@Hd{BqW@Ez!6nIY*)9RwOt(KN|yc;1(*MIWtXj2Eyj#LTKRE@ zntmJ3Og$d*@MOH$^(+clnY z#+pS)A?=eUz+y9BuiDry(f*bx%%J$k)a>^k~c$i7jjWAXPJP4Jex8}-KYnDEUt$WVDUjOd>`&UOfgA! zX-m?}$1b`u4NNs9oDRdHndXup^(O|0UdHqus*mm-l$`L4~+udq$ zl>j#WYmPq%U=j#7s3Oyes6Z@IkQdQ~tF+_qZyR#HvBovabIVNfc(J(@F$p$&NW$zn z9&m#<^v*2&W9)%AK1`3pRF(%`nKlz|hG)VO;}RsXO}nB<6D#n}^DAHZsk7&BrFBDc zEtR6>3+w^G?&BK1b>jv zW}jcnv$%+om(brcFUUD?RrV!h^B?$^AEEiAFcf-5l<$=LoLsW}jN00>Qyk@4^*<>* z_Jdj1ldiI{7MC#qR-KC0_4!`8DGyRPl92(td@NvDj}``(T1lxv+v{{1{|70DfM8~SLenx zRN_w%$YO?xg2(zm+&^8zZ%Lt*X@50Qec&DqEg{oziF*j2??pitKhNk5zdR{aVrS1D zzQftF*weoZCTA$iqYzYTR<==K+O10XQQA=LFRa-}&cfLIWjww+Lgz`Bf>&uLQoFa~ zvAdC+I9hB4vU}=v5MQZ29BqDugPDrv($!rvUT!N8jBK$sv=*=rmR^|cm~}eaSZ3#L zLNOK!S)3oT-x#;NLrw7~QgbXq2d(QZT-a;hhg_T2s-^@21KK2Fi@xem7;$eU*xgD; z6%?^P0$i|0z#O!44}RsOl@Qd?FdD8V2%j?EDpsn2k$Sc^gE zUv?=OG4uT_{wT%|uk!bQU@uvXHS{$%y?pcUWEKAd82sFmAIi_ zvr`u7wYa4pY~D{K@7o6+cM?V`+t73f5d$lLGx2DFoL@+^nZ!|ziVTx7$gE3Nk-R9S1Qn}RjA2un-Lnwx%)?WFv}%^g;~so28q zI@i957TRH<)KeGn)N6$=uF!V41h6^;60eAyX*;BxG4Tk@Qs(ATezs>m3Sp_i@I(|yLvpH zYGI{ehNy}y7uYQb=TGD#lCLaD{#^8y7)yZGnMvmbL@Fsur^9@1t-WW9b8xN88rNMp z{af1fi4iq_{enUVVN@!_YZXx<_v$jF!PiIi{Ib2eJXQ2H9%&Mzv%g)HXn2e`MH9R? zMsx(KpiZwBh4_}h_k=qriRQMhG+= z2&}Boud2yGR;T{f-k`)VuAVisk`a9VuH)LCdaN)Mfo|}ugXPI#CUorBQ+4zx+WL7I zj-Y10!e9LT_4m}jw@~4NBZ^PIpR>ou``g zU#RCJU8yYQCMwdy5eq35s>#|inFomc*$hERv7}|06q9%f@Ax4uCEWLWnDvaF zcMo{6(E4jz<@_?8Jv!*=R*~=aRy(u*tF;egEf&n*(ngi0%fB7+p$9*0&!RX2VMj5i z1Gmpcq#hsGxL;#OwkjWGq?}t)jS)^5$tg({Si5N#tJ9j5n-HMnrV)C{OT!(Oub*2z z5E=ZeOd+~ywHEnITv#TclsaQRbUEdo0GX` znlTYxrO(B(!XQ#&|5+2$nWe}O@w92RO# zw40Ht&I43X+Ok@%W}qYjlQ3jOK4Dmdd^DNwnh|$Zn3ZF3O}f(1UvdkZG>ngM^0Oc3o3>ks98>4rd3Tu zqZ6R?wLB5Fb9WK%e|*&S8PR2$B5%x+xJEw^yg(vzXlTW%0}28|N%fcklvUKHU~;-= z$@MAGR|Yz@2C|6YA`fK#qBV=xWTqlYYDL_bf7{ZeU`m}p?~TPuSJkCDPvZuiN6)Y7 z7pP9y1t#6ubDw5kH9nI#F-5H~C(dOiz|E~-tQH&lgn_!ibk8$JXqw_sN3R6Q9g3MdOEMRv z<&xSPY^-dlo^TK)GaTw6!tfzuWr|3824c0k#F7>y(vwNhaf8RQI(0Z%`f+Du7Sz7&>qbD%q09&L&&+jEhs~3qH9v{5dieFiasQYfdcv$iK-`qC*UzI|`{XW#a zm-Ec**)tD)Z`+!@d*da!CcQ3HbY1Nsp(POR?s4J8t1axM`Hu9lFFV=ndzoc=lfDhE zVc^I2PWcMjnVqESYZQUxF}SBzT)sb`FEM>S?qH^TL5eM3C)1r4$&}fazJ77bcbnJu zBqO2A4OXuTFX@~EQo<|>@N1mZb2;d&I8qxuv{VvD5716Ic_-Gt6A?n^?4vwqKJ+G9 zFfiDme{iynTR4}f+c}n?S^E@S@Cs!_J9+s%0ZQpWLzO-_gkV#94?_oGZ)C8h1v{V& zaJYMDrvh_Aa%hLz^=|#WYJh!;Lg{A4^i8^CFX&0+g}+GXB(O>z7=kt5b8x+lw}UG{ z48;_5UbYL8uu0494C{apL+BiqPpf+DJp-VeLQg`O`}7fGXKm%o<>G-#8qeGN9J)wL zEtnCy^01vLscLwW`P=ONQdraoi9xNk8;^wa^lI8c&mEJs%$I3}u?zmQIvWS864G&* zuPttVwU00BC3Q_A@u1K!UnHytB09iw`kU{9SBoSlEaq7F+jeErS8Cu1OZshcD}?|) zKbL^!P0bhNL3``trZw53D^aW5s4kH1P392b=ilI9igBUXB1fl~g4 z)lljvbHP?(^%&qDThMkaBhLj9;!SO!|3!<}d4R-7|1k>)2@&P#8b#npdybM_4pHkP zV87aBlYb@H5cdU|K$qItZQs!MVIDSQF2A{W3)`@;mu}~I5yxV|s1Yn!^ZgVqOXeO~ zw|V`(qWzQ^H+PeWWrT(6n)H`~ryl&6=Nt7{%@fU}H)5M~_PC#I)9?ukk;ag~V=OX} z{h7;byA(}xyIe(s6SPew(V2Uy)V#Bv5#=_G#T=#`^l?QKgvtV3jH*2`la@SOImP@W zIFmTqOJGs%G(>H&euAK}8{Kz>Q$Vs5A>9e`lz`1uDDeRe>0_2D zGJrk3dctcAL7{&$z?Sbmnz%_xjc&$)f0-O}^I4daE~ z%k)nlv^yATrQr%@H<~-qQH$`VTgwY#pf}FAIyx-d0`e2;2bC|7Ra)AKv7x3!Q-Rga zE5{S$f&s@OTuR1M8rcC$DNLNPFCPK9i&h_Lzq3cH#;1+hST_E5cW(Sg&}i=QuhfUg zMM_Y#2WbXqqsshZFTF~)>wa^(wq8EsE3mdP| z;m|%_C0DJ$rLy3dTlkG$#%sG!#x zIB>O}i>)!>fU2i63V&sIV4Q`5f%i*BMFBZnvg*E1-X<&s0cu|OQ(fZ z)z9m5n&c8IB*ZNqW7X0clROijfdB~XS%Y37WgDd*}N4-%^>H1vTox&a2b31LbJMP zF|TSuVPy2WCRB%4u}lXb*4J1J_UhD7Kn73@gYeb?&1%MXG5M-1wM~!RDBuBo2+eL$ zlb8_5+NxZPK`DwR_dWo)$Tn}y>)HYz??B>f*M}cvArf?N$QXaUUcoe@t1rsbe;m@N zNGe1GZWtf-nU`ObmN1uy?KN!Df-EGi>2a)jwop_Rq0LH&mzt!E{#nn8OZKPcI`hz& z_CJ5q?>Q%TA(ZWL56Mep9~&3Qu|Jv4VQz_LsnLDv%W5xA48ShP4BZo9;sw zN_hl5i*Qbexz?B@)JO4{UAqc~+vqR|Xy&b<@DHZ=0#LXNyfMQ=JmRM~igTc18XDw+ z^Jfy06QLzOh|_^^Oz?sjtwY$u_{+6Fny3|AtFY(y^(fU+pN@rQ zYe~%e%~m$-b$Vp9cJSnfUL?<#Rs9L%{Qqc=`X5R`%k5unoM#`P9u0VpFq zt_|l70+m`!eYT=6XMaw>Gv<7=x#JJqfpV=QJ~Nw-8h3WNdEe(WfYc0a6yf|WkUSz| z;~r|RU=o7QGXlO7>u3uDT1LD#?VM~>H-oQLOvcQ!xOhm)=b7|p{LR=KQB&H#b(g^& zsK@!L;1p8>E>(G&B7k3b+sQEPPD&?9Z6Yq;7hU4j{G6~d2wg*uzK8fem!+Ew+Z0^~ zv=uu+v9`HLm@l8VQgf?eA8 zHsF~BJzcHtn>Pn=9&H@+8&c5b@2^{h;RL zu`%KpWR%kI0WBRa4EX*Uw?1$X2^3WU}G}DX(t^cxtCSj#AZU_Y7*- z%>2V5m~uCb=E?N+wBsR!Z7b0Wk|GwEprR?g*c1Pdi0TnZ&4dYsc?({d#dU+@%ejun zO>bo1y>#URQm-yqPsuCPA?KOk>lHi)x`z981zW}3!dX{&{>{Tv%y=QC;{A^gAm&RV zJ1G&_(Q17)M`^)6-MgVhabIFXuA8!zQJ1K0m*=KxMfvDF`v_N&$SnWW%c)RaftK%3 z$J{k6-&#^KPkN;jazSgbyAvR>Tqrg&`##>ZS!D-7RKo4?dHv9X^4y&6|Xd?9;{z3N46Rc8^&83qj={P&n`~IX7}IpB4f=bvvzQ?f#ccp>QO> zw?VX)T!w5Y#kJdp4{EpfD5=fU(K!i!g`zMRCt;k?5vpI_fx9}DkbT>>;6iw;LTSc5 z%GXt-vEOEJT=Plo>~E82Xvrs^ep)^kn)cVb^dF#FJux4qNnw+k{rw}t^pfD^x68<; zQ2EIO5VxE-S(&J-MSFYQ{tOL!75_S?a>*O87d9bYdV{}`zsjo7rV$j_O_`tYT?h7; zjJVCTwj8rQzaqM7O^D2VB?ClfrrAL9roOx?fsH4`R{b%e5N5Af)WXRFx)ZV*sP%>Fp;qT3%29GL>9 zBUQVcLuFA3qD{Uln~feF-xt&@lxE6{+^E!{-Gx1~R=HO^SC;cDq1<3D;nbSt8~0*z zL+z|Y$_h`bwu%ZlQDp$PW=NwPICFWQdx1h%^z!N86QMdt)I2HW; zcxioWAx|f7C<%E2-AFwpj#?3$FZdG&p4*4<1?f<{d$O>e(|O$UtYR{--88~60lgZ{ zn5M@+8Wr@X(4bRnprnN~JP#G~UC+HHcolzY+qsU{Nx_O!^X%I*A0GW@4x*n)r_}3r z6`-SkFlSbI%W^lb90u$hl8PT$b|pdt18(w~mD$QTw+o1wqp6A2eFd9J4r**(G?*kB zl@*muMv!Z#tyjL+unr%*)APg#t~1MO`ee*J2Sls&u65?DO^`?xry;RhKHb~z1X zA45Ob>{z)snA8+UNF0wx21qdN1hx~9TsWzurNuEAK~*F)gCf%_mBsQ?eWyMy ztBC~9t7#aXP!3^<&uJJI3PVW@cv7Fb7&iCIG}%p2O5mR64>;E{e&#uz5y5ui%v94e z>_xRlm1V)aO<_%Ss$4kR<%?btKtpS zB?NDtf;TPA8@KN+?D#H)~Q$^ZTYcmiU zD3gkF;Oqw%yY)Oo_|G~s&KtiEhJynl$7Z0$pA`rlO%mVpv${3Rw^YLXG!N%>Lj2=| zo7)<E43+!uH$$N zr0jCOk1SZYdthklx&H3$jR~m_q{F(=R%;dr4PqJ4t7!e2uSi7AViMx3 zQ8x{;i_ij^pB+5aa}$ZzOGs^u{G=5Y8brS1dw!7j_Qql@=YwBd>HG`zdrvK6M8ZdM zv8;62nzVbb9w@kOwj$TFKP`5McCTt?K<JIFgiyjyya2QYXz?3)1J#LeC6GJkKj-et+$$~*xb*1 z=8{A|oWpQlet@g5H_i24x%TB)NE6*VLebPRhRXu>;#jM^OMGJAH|EmhUvP~sp$EGb zdxs~y#aBfO>-^|@{LaMWl9oit@w~jbl`UK!sPL5a{#ENucs|c5W{va3R8;tKhnPxz zACZ$oH^&@)pvX| z#natY#APnEFOJhJh|6MvP7qGizz5;f#i^>9ln>){Eyj=tssv;uBo>BO6cFKL#Ed%P zgqjf(*{R}WqCSOJG)(ob;?F%Ft8<;I-S-hWoh+PK8Us^Me$W0l4a6`$k#^RabCo0&R9x6)k3b^i|9g=!C`k6zx zNLGS4dd#OwDsDAgM)gC`fkRiZTGE<1%{Sq8EBuyIW_&hb;6o!J4zdkKW5_S{#W&je z1ZOF~Ug&jIf;@+0Fi zS-kr=nT(%|Pg*9k*&LNx)Ti_RdN%P7D8N0J&qWO2d%k1_UZ?$_H&x~>igE{q_kzZf z4j3qc#`&$Qfvy@~FE9x|sZ-&AMg=$7e6V=t)(+lovY(_9!>ckFhxgvEKR!-!Vrnpz z6x7Yl^p4?Ctx90i3Jq-oWY$0IR}sYr@efx702?I5*FfR9i{bIL>Ks$YECB$VvYc}b zO_m>{eRLG(OCMRSufD$?0wWdfpq(!Qs;$|w=#*FL?f?X*?sn15?mY13N-ynh2&)Ps zzm-K(uGP6GAE^gt^(Ae`rltT}BGDbm2-^$ULJJ{LYI42+f9~NI+Ft!c!;4NUHY5b{ z6mMzp`aw1*TCxOw9MO~{gLu^faj5#n6Mfd}6eu1)POWGa2`NDmj_EKjZUDIo4?@z0 zEoAkVB3y9j{#iw8rjn%2Wc+35J>>9iz`*P#NgnozcJFT|b zjefcuWJpiIIdwa~PEiZe-s_m?o?COs=a#)nKw?AF-2~mpSljaE>H5;R3)3}M1@D!72@CJqQLw^BB}H{2AWYW1*J@f&T z>0tS6(-?%HQn)JOhp5Z|-N!!}q=7ppD>f$Fi5A^BYD)#t&7w(o2hJwBwsq^d@1FO* z{EKo$)1y;z?-tspz_?5~I1%I)b!f|soHgBxEr=cXamc8p=~A&!DW5UfdT*irrdGU1 zx7PI=zPgl=Y@P?rLduG0Zok{H4ThJ?wY2)(uLi19HE~3fVK0ffJB(dWUoyq6lrUK-2 z?aE*9pU*KT_UIeClL6Gl7WA&}=e4|+^TLt9$brs$sX??{9QV(+vC7dM zuqTO2);FWa8lk;AW-X`CKH#_!&4?Asd$(r`-WpN8sO#MOyW#)!kN&?03;&ttKcH~u zX>zV_*mfku&*rahXos%4cTcN{-YTli#{Cw=9g4dXAcWw-9RdWm;8G;G6fe+1k>DC2I1~-;PNBu! z-P+<-XrV3C`weHE@8+yoXU>^f^ZUXS)!VCsLs4hY5zltlH<#H+W&C}QAt zw(z3K!-sIGEpXl36BKRppn46(Z^CgWj{>F{XlntDpyFKye^P7#m3e8h)`wk-X5{dU z@B8iCw3d&{ujV%=uAhYiEw(2)HYp3F%1UoH=MDd1;lFyj*?{_+M!RoM+WU~YOb~CY zjjTXeyU!m!H=n5+3K!#~O_4%m45(fJS-<*7DrMj}YYz_22umN>Nchjf6>&am?zFL%36$$DnSklncN+wckV z;nI*`(3yR2YLri=M@$0){f4TfhHg#&XYny-e;Q4sF%(+YF+rg18nP229J!z8)nSk} z9B=suF*~hy2p|x&6?OYrkFn%)!&;l~k0KszJfD&guA`AEaa2)V;lnOgpUYh`xl2xG zR@NOhpX6=-iA)Hn!WfZjR^HQEl>>mH=HlN&COsP32yrf`LmT^o)RPyZ$p+!L$Z3j% z);pf7x916Fu_&+uyus`{SZ{I`}?%fy*SpY zfKAvM;eZU!7mayKOl|FF+b%`o`rGd8DQlNf6i>o}6Bgb1 zjGhxpEl1RY2X0d3xpHJGS$3d%MNW(qUsbLLK@EfB}Wg)OZvl|gR?u|Kq|d6G$%CCFS%h^Fz5xeTY!P^YzVwd(j8%|4E2VqQPxZ|)Rpkg)qm<^WqvYwpOO2e}Cp9IXl# z3Nr#2>m6`vB=VinG;`4D_$gsCa+xw4AxbHik%uv;Mlk|{ZgDtLZoY4H^!F^I=%ZA- zSO9ogT^z9&upMWELsQO0o^vxr;|WZh!C~r6j3Zm^mNAk5WksL#HMq$8I1zgcTlbw4RWRNbAIjIUUb%x<#8zcxrqw?xSJ<}nLa2B?X7XAmByF#$58eF z2`;fnCvZW>OLPXlU+D@O`rx)_K6JY3kknYcCz#Z4T(l6-^kAjT{v&w$_QYanjQ834 ztjWQiK)LWvypG@BRAkw1@yBreJOc9w{-5P4dqcOhPA2iFa`*`=j8|jo$ zl+4y-&H|o9_54bUI9Y3@)8+AC&_c{3rbf51HpgaM%{>)rp(E~gb@^qhSo^u*7QI5e zifKRzTEuKIFUc??mdvYW;LvYEm1B|GQT1qHja-|6_SE5rV_J;L?{|*;^%~pX9Wx7- zmSe&iY=s9Z6tWqFwI`+dWoEWKPEp+Kc+B|dVHo3(2zF?4; zitDI3Lt#;?mp%!|{tx>k{yQiTin$m%KXEZyPGk0Y=!|2#u2gOsM626B$P_Tj-guc& zPD@xs+yjTEsg`T7D6T4Mc5Ez4YOEyV8%t4P12Yj=^~{fCqM{`Sp!XEs3UqYnXwJVs zvyri^zKBp{g_69aL{4pFXu({9$e+|w38jtq*>QFBv)kc$Y-CgB$MC(akGO1$a}5;V zQddSFRcj)f8fH zDg=uY4QWICBpWZ{Y&_PE%5e4REyMU=wm&^R%{Z!8mRbWPAbdZf+!gs0sk_Bgem{TD zMKoz#DKrq?FQnX{lThxmNS`yU<@m>_!K*U}xg^db{`;kg?kppRrL8GQF?PURze8>@ z@{Yc&for=e(Z;%U!tx7g;a9)XTu5UiJh+yq`s?gV0~58tFzz#Fh57cSUfr*$G6?tk z8L9-8(zKV)#uL4xrDXI9G<<}+D8*`Zu{u@phB}C+OR#J87;Q&VQhT8@31q2Q!}FPZ z*z97Q{-#unMLJq-#Ew<0d9`EeltUv}+a_PVt4$AGoj7w7W=#M1A(KeD#r|qwQd4<1 zHW@|Y?y736lr{2CwS+VyBc;S9pI3XE^0Jth+bwFP5juUfxH6^_vCT~M&CKWei3F~u z=zfErns*-aECZX)1Nhpj4p7x-(PWynjR6 z%U8q=)8g(uv-((F%Tva(V;lywsNZi|DC0cKGBC}fD#^01=-yv-#-*D=@B#%7kqu_V z8g5?V<#xP2xcHneArsbq_v7?pI(l+tG!iC$~=OiNNE)ML^R&PdYr zOro5+CW|VOZW7dc_>pEsXu3IxaeF^-A5f#jN0SciFILOj>sP$Ht_@&PiB=YQ?0fu= z@U??pJGw30bAchnk87mFcPS~f1T*O(P~h_;Mb=OPmnOVq4(onBjdyR&^Rc@bKD6W92j(9M#N}fk7>Ed zu^Ov5RdZ%7t3Bw{0P>XCnRqGKjKHM>X6mzb0Yofhw!QU+2{;NJ0WvW2We{Qwt!#ns zqQ1UYD6CyEDG>>Hr?a{Bgy@?;in^<3xrk8w5Ri-P`@sXo(2?D9)LY(fdpZG&bQ@ugSBU)F3>aL$TSeRH$8hAjhCKnix9-KY3|rs3JEl zDJMd$O^k~QE5uOEV*xg*-RkICh0D(3GVA~xUNPT8)Y+_9Fa1Wq@-sJ~g z&XZ--y|Imx80Q$D+?Q2Fm+Q3QxnEB1oOQuEd4ocq(DgskNCrTs$es5B7one6Z0fob zLDCked&|Y5QHP`ioCtE2)!+cz1~)j9u=f3#u^9fl{IWp+SyP7P{W=L7um>NxvR?*= zk|Yu1aHCy`$(B;I&zV+XWQAVwrzDSfu#R!3zmnoqw4aYd&umeW2W1%Wl~larh~u_2 z;|?_u%Bmu%Gvjyf={=^y(WnrU*i;LA{7-X7(Yn$1)$#N+x812 zUs!lJfzxU;-tB~MsLZ6P=(8HBQD*D&*{Z4+5K7brVm%V4a-?2D!pJp=xTB(@%AiX< z!^(uT|A=-RI~%EAEa7s`%8XFbS#CgKoz$AEXcQW~1Tz0iAh z$GUB?>aSOwz5V=^bhF>iSm1~S-`bQ7b+9LO-y;iwjCX-TS|To~8iqCAnMcAbERS{P zh~#Ad-MV#sqfP z=04xtwfOG8Qt$Myc4^Fg>0wgf+$Lv!AQ~Il(jL|a$BfZ!i2L2Zz<0{dCx=?td8jy#Ug2Ieyc|@hnNh+Jmt$ew1NMlYzIZM6AZo?0s_+cp^_QIxQ8C5(;8cN?ctwy0!Ar}T3y|3sVhXo?iyK` zaN|1S?!}aC!>3ODEkPq&q8DElI~K$FJuV&*^VhJ2Za)rbTs6>J-DoV=FICHn|(k3fc{#~*2 zBPpt@T1Mhzz&gNhQFYw(gxDVGYVHe72uVs|Mz{i#oRvv!bSc*}od80d8Ioa5hNyPO zeG%HOMYSii4eUP2ZO3`(@oc_JEB*<5U4+l=xVLHdCaQEhL~AW{Y$R(wR>lvkv*=9S zSZw(R$Eh9OE|Dd;pGVHigUvT2@6N8*)Hm@>3W;r)t}?9GKlhbfwg>XV@QIcPCmAmr zT1I$gxV=82zo$77EUOghuV!=05?cjVLMT=7Nc>Kza+%}|cw-m@HbFxL`)vc%ebU#t zH{_#Ztkm538!t1_$c4pCWKKbN%SoHWQIZ(8)Bf$_xqsEF*o7Fyk@97wi z7{k~QVMj4cv*u8I)m}?`6(C6yd}u^6+&*{kUGXYKvEhz;D@b71ZrGTcXPhz>u8Qe{ z%oG&moah$r&0XVhP0VLcc+cMEX+9xWwM>5QsB)E0LotDwN?TL94UI7g>b^)?_n?%= z-|xL2c1h)DFA=8C%&VY63%B2!WH_namaiZB)tSl#DMTmCWn=@Oq9$rGjI?vCM)BJh zNam$tUP~R-sLl`J{u~E!^i9z#CPxyz79q=B8SmEOt=C#I@QcF68CX(zdQ7wf9CwS}2U9!Xz^iALk z+G!_;YHuVsW(l5R2caxqX8}HV_DJjNEzwl^YXm=c`dezp)sO?t^KcAlff`I#b{$2J zgRLB@3t36EPECu@l6`REGXyp~L?g8&kk{wRr`@oZ!Lu@UAwa4U;Pm{UbN!q9LRD5$ zD0!-ZV%&U#*lJ2XS-Rn#{)gqb4nd##I0bXeYHxr>U{7I;TFnI}FGduQ7h5ih>}CoAj!r4-cN*B(+^dpCTTA1;!8EL4^HO^Ugdp%2c7 zp7u3%54CjbBWS;+3T=U>LBFk|bw(6YMcTias6(0ttJF9BNXg)#6qGEKcrvbOFvCYEU#vm27o0`oJtO82R(Q=hNIuO&EkDi-}g%Y6o3BKoDi{R8` zSjH(0aatvcQGvt1Lzg{ni)Q`O}QgW!I?AbXDpe)=g#&ySk0LN&RHs zYbnzHAe)&q$Q5XD%$F$zPUUXQzK#T(Hj1W^If$+TZJniz?O3|^Y91@*22AX7Q48-O zqNZq=jZTej`&b?H-7=pBe237eVIj3bsq8%;~}+yuWRX(p|a&-QvJhV{OL_4Jh2-JK`|*7I@oR4)YH z_Ng>S(1;zd=fsb+F9Z4%{+tJ2{yuHU0ejiIZxx175Dg$)-^<81rfQG$F z0>Q0HJ<}qTpX}fA*(bTW;>Yl^qkMytf;yNARb1(RYLuRea@Mo^w%OFEL$Wq_pkzq* zvF??;`ne-? z(xFRGGX+PZn|{5}8MS95|C2kq5R47CdMvMjJNz{^+P9x@e(y{&DV4L2~AB-Mea+Oga&M9fsD630C;PMW1o#4E@iu zGxn_1I#bj3hM?>n(F{eJq@=7ga}g`R>pk&ZbYK-eYvh@WRYH4WKg zT%lckKAoF`E^COPq!lrss~BY3%~oeHx}Z}$D>DAI_IcB6U7u0*<&tE)Y`LFEXbLx( z3YBO~Xt*8Dgve%4ZA|AK9;VjUMkO&gL^Z$*pVr|BM+4RFF0-XML6}I^1;}h1soesR zspu(K6Axb;SF=hlN%$~^OC_rTLfiSqL9#lk4Wr#VT20VmT|5-z72A@TM|l?y7coSP zEtAy@S|g_8(ZfH20{kPDJ~96+Sk>qQly)6ml{&`GP`--glUz*gYMr!f;(~|8!~MWn zXySY4H0fbx5*)wxpS<_xu8u^kNgBsH1FpPM&OJVLgIy*^R zb!=8KM~BO$UURH?$EsU}GIfp~kh0#p`@gY&Gv#k5>8Z%3=oAkL zw+_pHM3OoPoYm@yq_Ar`A*sNX;HA*gerrf!RW__C@30fXBJBFpH@5DtbrTQhzn(kz zpFqREpup&2(BLh#G~C48;&Snf?QNy@LlX=SAH*{vm+y)bi)c|STaekqkC8|X%n1_X z9FE4N;ej4M7gt{)Uri*ZW_K2JpC3KQG15_K#jj>esrbN8LF%{$zNTuLX;v1EAbr9z z!V+59F1;OZUmf4a!igQ`GT~M($I}(p0iz&?7bO@riS##i;v3>QsVuo1@i^D$WyY%+ zpU3;2%=8RKf6L5F1nJozd|jwrGd8--BjW<&pkq1)k6=&6nbN4ksc{pZaxu^;KW+2? z+b2`NJ+?14Z1PGAtqHHM$TTGpgpJ8_SfrZh(8rDL%5Q8MWkhv8ynF6Y7$yR_mwW1Z zl!zaafDg4nxT8txgjEz>vFi36H`rD3T?1SLW{DW~9L3Wrz24>UK^3@&HKCbb>#{Q9 zs^K%gKNu^iQ`HB5`2!hQN%t#()w;zOm>saDI;hhb(I^zdKt^?mxS6&&{q!@hE42CJ zka&O&o@O9OZv%V+Nt!LOJJwu58Q$XkoQCGr>*F&SMSdodvg;MB>MvJd4dvXrh1|)k^5a;inGY%Eh1OVt7<8y}E8+YBQ_2IhpIs4|stRuqAHk zPZXYI?12)%iBUWT$&oqHr6||bWwNgYaQqWC0#{vr?k}KdAjKRl8yk0;0C~k?Wil2Q ziE!O2nluMpbkgU;d0OVQB9NF{gJ8fPH@@UoU#jQj|GB-DAV`z3gp6VTQDDENNx>o` zxUqtFr<4C$xe~-rp>YX(p}>ZP>Vs5uF_LsGgM+%8+^@~>1ExFFzT~Iyxs89JZK6+L z+_wZ^c$qlMe(*J+jcXvs(6;ZN$5+c|GdG};ukG^~ziLn^3VLXb#*NMQ=UN~&-1 z5$X&WK6Qw8u@8p}X`a=uSZev1^DStiL_?0aaDz-01Dw;mMn1&7WKx(n7N4unOS1jQ z^(+x8eo{*&omN^o?{X7nPa^5=J*MAFo$JVTcze~XXoop}POF48WqjF8&sty9>s>-~ zV)_!Q+pwEk8QnRdZWk=)S72?k-e$kLDcxo_2_aE^m=)$kqLrG4JM>yGr922K}I=TN|HXbp%rHu@^xA=?~xIo zx~R?RcGgBzn}D`Pm)|;#GPAe%?R-Ehg|BCozq&6pm${c>h{_N7_S2pIc=6Q{IQ+Z+qtWq)BsJfYO8BKG>z}QHWJK zR)~4DB(M;g1V%YfVVfA_&Jbd;x=jV@IpiSHJqo=BfaM&EeNWA|U*lKe#l;~&&^0au zj&~@}C?qGb@C_Mk{Wv`7QB33ZS41e`7u3kRYI&17R}2AnlI_9wp z5u3q+Mk2Q-q-v9flj1`z^xocJA-Z052ag~9La|W0S>MokBky(ao}tVyI`i&>NL#%f znFAX;nzc$L`Lnl1quunv(cd43{K+d0tE^eu&0U)LHd=oy<>ZvKMgOYp@Y<}g6ChtU zU&^59;z3cUDxLf}Ad zM4!EJ4iSa;`I=iZQa0!blNTl)O?}Jc!*#-(-1^{lgWWhJmzT)y(8Gf@8aRp?zesdd zayHJ!pGnW$Z6A*XcGu_Iw69Iv&Bu^Vr|{j~eb-*3APdS)bvLqN0xsulGnlcXf@0@) z+Bi|B3JmK+{Qx)J=s;e10jcFiCGukLcFzTKF1N=0?^+aDWd)#|25oNjFd1&Ma>gcb zQy8h>#(dXYb8B0`MwT$H6$>wPT?arwA=VmYq1u2)q?*9g7U#-YCM8f98!gbwa(E<8 zF^b}?4AGN=*ptz3ys!CD+EzOzI&@-q3>l^y*@$M#3oBIck6-xp$~akTg~}k)fdxyy zoGcdl-43#_OD|7tHfrKnQM{5*4Z?Ac;U4qVD}`wq4d~&}3y)d4J5j-;c4nHRH@2QQ z_&Sz+?fY8vc&I~+FRON4?HBl9f9TiSP&WM;DJ59|5uHY?Cn!Q3kTiGhPra*3MoPJf zF+v9Y4(QEo%J$uTXD&J9@^ZQ`9A*9go7v!h1crY>!QFlN1K1#H`I`BON74Xm+e__- zCK!bB06*O%<`sE$Ok5o^pjXs!PlZGMXJB1BBRNBKN8v2@2P!TwH2+tCKcz?R^VDWF zJ~YEe9`0O9B1J}&Xt(eM1US&#u77L{U#4y0Z7H4P-iZSPaFCOqf-%5^_E2~N1k7My$ew+ zM$kMKtoY?QXQf=!6-QM(C6jxqPLJjc-QDXIHR&lk4ZM^>j86mhXMq|#qpmz&-gCa) zB~^fzw#X%qsVRQ6G{C2ZfS46~WKl0l0;GVmH=Kyq1{tRnW~Kx)<^u|v1ZAT9@OQB1 z_HgltI!(QI=}g#_@kf8mFymjgJiJ}kxVWAJ4hvxJj1!MJ&}a@xQ#ca6Tx+6BsdF~f zsjGBmP-a~hqAkM{(=uaJ%C zfVLjvAY$|uU}0DeJ(q#zJw1}zeGMP8(G!(Px6A8(@ zI)W%U+A(MYVi#nw5B0xXt7woeYT()6QIbYrF=C0rqP9kyg~`;ghbmh+>m4~|k$Aj_ zdslp{d~g7EBLk&_ngX`2DPM9XrxT}~bY<_9nf8FgkiVG6e8i!iBOD1*cM*Q&AaPLS zx$<#n;<44z3W=PVRzZIw{1Y=da`%jf4G_-spiFR{`c*b!QfJCDFF-Uio=>ZQ{s&p#;8X` z$vBrmlBzR-%^L1ripPrt3~S;I^p;=|kVx{-kWdj1=L6YUFG8a6wZdOz9iN0h6ACzXYOtD?Gbp9+OMDT+m#hb0?8ZXS?qZC%UY+!$!*jI1`j3aDtg& zodEBNkRz04|15P+N=AjOUzYwFm6csTKwsByMSo&$1xx!SC9MI2(OS?DwssT+mo`i_ z=@C75MO|bwl%>B@E5|ztW9k|V0tp?O2b4iQ;(%p3F28T^( za)3bvd{T@u$hvsn9R$mH{!jU6N~5W2WgwPo-<|Gilcz+w3SF5RGJX}2{Bm@Cvnb`+ zdx$#E2!Kr^Rc1^`pxf8>C-bM4mfJtlpSxWb0yYotcXs-}dUmm-)0=mPWmbt;)He~6 z%&(hBw!KE8gZs9Mq-e@%am49t(*)Jx76K$3Ax6^^22YOCpaf`IcrRJ#GL|?#?)=j8 z2@f^;Padvz6h84YRnlRQ~Nomp*=*3%UH@eKuw3}YB3$^7+fSsyVy*&;ib1hPqLym@x9IPpU zn?lwbOzTo2^ZeFYu|%q_fU)@FP)Hl|koZ~&THDp4h*7~^md1j;_c4ivOEvzswCrk9 z+XPp6aL(uhR1#7NH=0y4UAhP|$hFV*16sG^xm=S;bG@=u;e3W$i)|~7ZW-k=YXzP; znU6GuJ}0J^O0|vZ2Vbkl|Ga+YqsmrvCV#|^<&YAEmEY&46NZF{ns7Q=;cCP%B$mI4 z_a2VU#D)Yv!cL(ec<67$B~FQsMVeR3^(Y05XU))8J@i~!;;Eh2Cbp7Zi(X8WF?Ps% z8Pa^dGF^6|O_liJvQuD(psy0IZ8?d|8qW!lRAVa=Y7n-KUs>_m02V~I?-%N@&!j0i zS?9h!R;5p(XL+mhP9a)XzpjF5%#U4&>m^7aT!~NN!|dX5U*H{i-j>r5^R#|SH}YNq zE*lo)CMp+X5-Wr~-RSd_Nz(^Bb9BG2;X2qYUmWY-e}5|NoN84?OUeSWKCQ)hW8JS# zN!^AWi1k!r%oGph-l}ea0HaA(J83qS5&r zHlDWo_BTS=5`ol-khF2P_ONP` z^WXjoDBUwP@)$_MXJhUvISj&ycYGWMt!LeS+^!T^wjJb-8~xx!E7TJA*BnCyB~ue6 zPH?s|xg71+x3?SF7J9~|BvZ9;aZbm7)JU$WURJiqy8gwbeMv6mEj6W}W`L`rS9HVr zNR!G*zh(zhC_JH^bM@Q!r629jM6e7-qcI>G_U)3$C?^$*jCgO6ehy#8^7#^WD)jky za$G7I=fgIXPgKk7L~>On(ua)W*iI_Kqrl~M8rH!jdiO1@uzL3LOsP(lF(;j9wCDZg zZA{10b;qjq{9peFL|z>>{KS{1u&~efocZfO z2w6Z31SJ~C*HJ-v_ERV&5Ln7b{~2WY7Zh|KvYf#NurqyTA2&k;hjFD=lgr1^o=*3N zNkK*n?J63Qa_7@C@~x1dM3Sun=bjXa@7=F?VbrIZuT82KJk|J{P{;Z!;c3Dr+hmis zG_qY!d0L)7QZ+(`#Iomfhs^xadB@nnMKGjofvh)5shT$Wz^ipLj?~cQs8e{^XxyEf zF8YDgU>2;4Et|hgt0x`+S5I<(tk!<8?qc>;a35@CmsuvA`ppHGN}k5;DYK|qw^pHe z8XIHf*Dc*|o^m-k7?9MD*My9i1z}*rQScNlY{=v=Q>D*5V5eewI5+JJh4Zc%cbqh* z{kpA3wc57=WFbfr<)rOQNsniAf~|+dW~NSUSMYWvBNY(cj2a<3qGeJ65s#w8Hxl7_ zW-9KFViQLLxrp`M;jF0seYO914HORJYD@!`5`)ou1Ifu<}F ze?N0Mv_ALeq$Y~iVoa&1rUPP+9xq%>CI3kfCJS6-D-OGucq;SgKml!g0=7B?eWRd# zr&;%0*GWM}YNy=zsoy)94ihrP%JSFAKNXz^g0X)CD)y`UFYR8oP%W{PNVa#|l^f(H z5Qn#dZ$4gLP-HeTwWf*pfcYSrjI<)8}4;xWcYtRqeLi?Ec408LaI3GFzbb9b4EVp zO~SVnhEm|RkPEYO>x&WwdhBDwvQjmu2%{pJg$iwq)`q8r-73y8mxg7p`K?!X8Y?s> zz>4c*zuwFq{Mi&dXF=Z!GB9*@9?+C+#h|^RJS63O>dGYMm7dhqMe<3+;U?max6X+N z%C=~X`2dHo6T>3wYW}R&^YCG7GwG{SYCw^1 z6}P&d<46p)jI`5Ft&DI;j8Mh<;aBLY>#r(0Ac?0+o?$?_$n0?8%?CP4wu8gece(BE ztP-hn9x#*6bHeh~DeIue>P=V?QJKCjz3}!|h#50q*P{d5IJV#C2P~}8Fb_8|oza?{ zq9B)&2^*`NhI@r3hru-iduexa?P2a(Y9cacs}!);X}&2RxIDe;36x=KVHzt&OPr3t zeY*qZ1_czDc@zy%IJlMayw=Fplya~uulFP*mqteGEyclg>24SazzJzbO&;SR4lj{? z!#`z>Zmm_;{7#F%3s0^xvs!3`Vco*ZKV2{t&p6BN+U_%KGSH+DR?Oj}-6I&rK7Uy! zaCjwB#v0=}mbW3yDPB`f%T4jgJcy6v^=*5uBBj-Ng7gu5D?6CiaYI}sAC2{G5 zJMg3lY;WM`*@_4=(|{&;aVVtN9Y}&HVL$;}n`WqbpUL#D0$v zymBkA!Ti9L&;;ZN@_5K5(h%ezFi)d!Dg9|2mM7=SvV!oKU-5$NN+@DD9ZuG^sIcPt z#49>4|~SmcYl^$@a@qxyO5%_tzoJy4lJr*>3< zLxOWMhA@BZ`a4wbB$x8|wH9ZO#+gXl*?D>{hs3W`$eFtJzr|fTnn>z>Tp|2Z^yh+3O~Clx?q5!zwD6n)P;l zdc&Ng_U&8y<}C3DElmy|JLyGliSeYw?{oaAS8=7FrxF?|CoN;Z3^6($GBi88q3BKB zox`M$n9B`wr{y%!37EpXIylbBlm@f?bG+X#;1=C;wriY zr98pgzGUi^@tSJ+;`B!<3^-pF>|*u3|FlXh>1DOGYKoS>F@h@KAto6}hp8(ro7c~M zEz}7*^(bp6)v)8sfi5y@{PcLPnWMIDLO#m5&f|`e9p3_&Jp4Cs-q2ISH>?rlu0wuz zJ~dJA;)nh|erET*vQFvEEO${6e(Zr?Bbd8Kt*z5_c3Lwr${gp!sc+}YM*3Ut`-vET z@e{L8)dn9SZC@mKF^L7R+RXfyMCa5@AVmZImrXFI*9lO%=owjJVVDytFoh1UyUl_! z{cPdHVCu7&cjYPW-lVsV%r&6VNVC9EIFG>;<&X9}BwUd-CP6zZFmcsy`gCM>w2EVPS`1&K%3&9^*{LF6vmkuAv?!L>O9CsESd{qH0BgYCbRFx_qwt zI6s+_Wz;5CJ#E;427xJPN?i54KOK4OH&7A$6JeYN^xP$ETy2L37lLnMg2>){P&GR}7QC5z+3;YO36U&0WUhURw!Ug2lPoL>+(r4xxf~?Ie z6xqp`IyCffjCPtc@6l&5L_Rp_ReMOdsqIK>J!T6T7VJjvv|$ab1l4VZa}a9|br$ zUXFwp^PK&^H8}kDL4lCz0TT>eEceKn4If0#%t@7oSA!_$FEVH72TYKJL%CwD1YxmQ zMDu&jjf_~xITALgE0WPPUe=0|(Qi7JDI8+XpiGfON05L8<_0+>O>Ze{W1-~S#WVxX z#j{67JbEh@PurtPv=o`FQ>aW_suv|~u&A-r(&#}E%e9}G#`f~ywqf zjS)T6r5CzjA8UFCtX1{*ozY4vR>Z1XwV%FwKF%%nV|jn;&dPGWYrre{G|5Iu@1haa2fyD|4=Qg<;?ib7mjl= z#^fRPeiPgU+%>HB&yuaz^hJba(A2O=jc_w5pq>_4JYNE-gULxr=7}h~jSr+!0gyCt zqKk-;v8pNNu8#-+?l;=X{y*$pOrQ#qVL&>7xKZH`){aVTm=u7VjW1s!pWdJwmnwkK z<+IaH-p#cFw@RghQ7Vx3c!!IHloQ$_R%c6jC-72WW~J1;&R!+l0R478!t(Ip8ie4n z^fP2^OX_f@&H}YAj~I^tQwY4~#fqBv(v6yvfKuMiz|G*{fBa4>K2*i9TEFjVXI%!yiM~ayuAI=$|##V`F8MT>dY3f#INPL=-!rGj0 zI42YhzD<|Nz6SdWdtcSwOVeYjw+^3J@Y<5maHXr~ocX7p9%em`)Hh$Q-+sq-H6K`G zN!fhBHUc`xkg}WIUaSAb|2Rt&Hj_dRhLMTnBswQlo$G&bJ+xj5yPim@qo43vd&y=J zmNvXl6^7+%%wM_lW2)!xG9M?Vq9Bj8IFC8%fAPlufB5si+rt;PhvS3uM=8-`yy2+&^6x#3#8_j=O2 z?YGqQKJ}H}_>OBEL#dD_4Yqp2B!KaJ|8hBL3^$dPljD~Bk{zRp z3Ed9{^LNewoic|sXA5o49gkcML&+Nu&oVVm-n-IF!KkE^@PAL`D8f@SXvz=h*?=gJj`qgP!oz&kzkGaRN#qQ$|DG!)P)YEhChWL4=td4^vJ5;BW!1xtRpw1zDFN()h zLiqUYP79qxkJwY2(uF!CZ6)NqM*`oR)Doj(UZ}QoXfW2Bz6~0c_=+DigG(YCkf&@@ zp8SQIabJ<5h<5%-m5b9iVxilokF~6t9OOo+gC9E|Ii}mGnS5xfANMO_&))N%%^1BC zqsr%P3fppc-fIe+82%Y&WF}|BsTme3I#6Ou>g+@AfgP9*b`{8(+YRrCcsXV;t9|AU zVBqnn%QAYKCP_AirRRZ*dotO z!;$o3Q{NPcqO+s~&%t}b0BmFad1^BMn7BgCGJt&8v(RniD>Gxam$hqeuL`Hu#hSjH zRa@)}!Ji-X*`OzOo_%@IIgo!W>eN~VAgcIy=TPMbJ74iPZzF+L0JD3HBjfk!^UDOBwUY`*ZDH`lk-G5<$dUL47;4hBW?aW# z&K~=LOIkC?J07`p`R4rho)9+jX>OYA#@Ac?p{gY9q&d9rM4<+-BZb#6G|SQ! zYKgC0-Giz9JPB>rxp^3)mn-~`aHCGVqvPYF&aKiy*}lkWVgDhJj1jTo=u25wg(AYx z?L)`8N+fES+N=ma`M>SJ>yY9i89VN-cWc-+cewC{-JGz0lJ=M?sf{>H00dHD?1Fbn znv{8SGAnwXl*|*N!c=PLJ{bg`W8#YtZ{7R@gJITFpOI2#_y*1soTRztwF0MvO=Fh50MK|moEw%Dr#a0m<59d!C0-<5&Xw90^5msw zw^|N`zGj~LY-+jX2VyN2<8LLHkKpGCEwtM&1hR+axuN--aQ`nQ+HNky)s*CocGQFk zVjf1QDsJ}${JfMRn>3${jIRh=aU&+`f5v#*+o5R(yDna-QaG0THx;zV#OQ<{1pGDD z=yMN29ln_322NiOgcx2Q2cR|p57AR^wED;V)SX|q18)lJFI{rQ-}|JMaNKT2(nPPk zJk`Wp&AKr~nY%m>^Hs6~FD(|(+JQQg6_d`uROJn6Y|_)Z*9#j4dAwVm$FG@4?!n|a z&Dt?^bn|)xRpEU}?Z#Bw3x|BZrO@Qy?Ku0_y$Y0DY4a{@8}%~Yf|t2w38%)AVBqA% z{XL$nO8inBtKWR~9V9Kh)-mUg)e9=yCUy8A2lIcW0rGzz6v`eF8XqE7*3%xW4_DP3 zZIy~?KA%S)vYh`sls-rX>!@d1T|o)8ImH4Yw=(+j#*_wbIkc8SSd0?dT(2}majS~w z#@w;i^zKv-y2hP#5qMSb+}&VD}anZ4)Cod0|F{+PM*^sr@umA0etY6$3RwUwX9K<|J$LX{NE zhTK4RR=eModdx?2xXywp-E!>(-erR#{)rV|{8pHGmzY{|-tq3eZzIy`zoaM=F7Q{q zI?XIfx%CVrhSd^sF=L!_Kf-Bgxdc)`wEX?9VJv!g=w@EMLClh!`6)~Cm*)lY9`Q*Q zeg@U){1eO+15%AtR;5V?8|*4PdQKb!>bZFftTy=D8Cc3GCp^xXr9@_l=M}w!=(M5F z?eP>AFX1l%Yn5tq3TjiCY>)Eoa&5*XmoL03e`EnHX;yJ1sEMEG&3L6=FSm%Fx=NO2 z6ZRQ$eFU5j8TcWqji=&`h**NX^M?Cjjx&bm4$tBNd^X3{dJ_YuB8z1C#YY*xK4CTs zo^OSJx70$noWJ!}yNJr)SuH3w#q~{fsq{728~WuGg2)v+Vb@7#nw2y7B{CLa{(0RIa`@ z+R9`|m+NZsjlMDN+B4mha?P|B=-_zO;P*}Xg&6Bwcg)|{aNVamnig|o#+_QhEmUh+J zMZwCs-bkD2=u>?=zu-AvyjOe4@Waqg*%ZzEoC}rQtx>4T5dM*Mdx8_%*ztA3LXTvm zK0fd#%YZ5lh@tg08S92HB2&PiW-6;=FsEiXjJlUfbc~S&zh9q*RZIYY9WRec!e_3S z7Zw%c7o<)k^Zxa^>i?(taiRlZXoa>Rq%&z%n92}g~8qFLxql%mr^yqnP!-k zSvJ*~M;$tZfRM%qnND_Kn97Xblm=@9ln(G^gf4E@?Jvq{kP0}lB)C(>_pjBgNtxK@ zUt3fZJ<26k%SIaH^r`0^>jz}E%k zAy<|}DI8kAOx;1pq4^r4mF_||Uwu0*o4k#IT~v+_5%DhKx|Wg;_~s0==j^`A{S^3Qf*dM+Ch)`^nbt|g>cK1%&7R_?#!yiLgkr*h4#7t^X7Ng>S52Kg4k&+%)Q41 zosFroCmF3)$PT;@JBd4lS3S+EVP@MoYXtJy6Gf~mIxtB#iXbKBDRNMz+G<%>jRrIu zoa7H~jrt*GBJTtFQOdz6hUzV|HjW;xD%-E@7&0ZCpZ?7!NJn9oV!&;;v-YXh>^6&R z6z3Y8l**JR7l#EB9VBuNYxfZ5gnyAsuB#cnYIB>Rrsc~S&mf@|5CM@rC4htHS}-gc zUUT2Lm+|oLp$=kkS5HPVpvi_lL|7Rue0+V>c5|I7+1D=yuD1!h5H&EM$=2+5>ToY< zuwVh}fhVLb{b%No3FOPOljpGq?~&WN=HkfP0vYxlyGjX7qrIgn1f6vd*v?CqZQ`QY zb>G2LA>mu6&gWf+5y%#P1$*)uOL0|O1nPRbUoDnzfu=k12jA&a z7`V<$yCZWf7fc~=UyZtW&`4_At(xBLffhS_A?W`mv+%Ddc-*ziT04eMiiD@#IR(e; zJ*lQQ(o+WiB?^3-mL48jIQ_;HL9~Ag0Z)iZmRtvb(SjvllTyo8%K<;nWx$!9jHnjR z*~yd*35%O2W_yE5+7_zaMtA_?W5Y=f*Nrq-i?i|4TXv}s*-Qzmltg9!gb&Kf-#o8T zs8`!09pPe+#(h&w`d}{+>_c)fXs%^0PfMNW1va)Of2ah7?Nb!VzmN(r8Q?qFEB}em zZxwaBX=rSW^d?r@_fasDXAKB2XIo?jk`{vCeUv)=KdBs<9bv7*7hTFsW7Q^G~kfcx}O3vsw5kFJq z9t-SNT^htcjPrmlk``;_FS^P9?G>AdCE>(1*Wf;O*I}#72TRC=bS1l$+E^O14X|YF zyLjDoV6&H0oeKFy*)Vk-HQ;qRiH3w3#RD~XkA4W(SbG&g|o0N=rU|AK0;pN2A zlHyc|%#TEoE<1cCQE)?MvTfo-fX6rs1PpZ2sHTP(3t6Wh^5B!u@p04ZjPZKDbfGd* z)6L|j7XSjt?HdG>`y`^fC*e7oE$jByH1xVW@8ywkl+3en)B~q{dIQR0LMUDmKToza zgDZaCS^U2481L1%a5W`(ji4%CQPBF;Xa#_pJ?i-`zw8W&q1EfZ1k zl2Y%hHTo|wOm$yj*Ri59?~{xDxX~3mWyU5va}HYZFMa6>>w6AA{n@P^ls##F`Qgv( z?&T-@4ymo$ytRDPF7Z}6H@y%eR5yG6`9oh!YAlPIXEA{_EPbFfwk&kmh6&EBW53h& z0k^*}oK#_#Ve41RItp|i$@iv`4=8DU!d-6U-ZOW3iUP>rsr3snQ}ssr;fSTplsOeu$;5b}_IRM5@KHrUXyy z`EUX`QcHz$ETicto}dO*V9{4cm^^_LW?-^&7a9RecIAJZ%Pe(J;W}IhKB+C|vIp4x zXrDd}uE^e@lVtl(?GpZ9d@uY@fB7GxKnnJF=WOJPyo)J3b3Jaj7gwR*q$JH_`(L7P z-v@7a0wsXAYMwsc@06Is3%CCqA>YlGbN1cn0sfIpptR;`5^*xQ4QG|q;G=&70q6VuyONu|9EM}Y$=xJ<{ zaPFOE%0<{H6_r(~A_NZmRU;H5N?_IfV%T$+@rA7#LyDh^A&-8er*-8dv&f8l^!rmy z`bMn^@;|rLJhm~TrEqnfhQ`c7@#^Oy(|Wn`IZCw_rsHG&EBWnt7?V&Jsa-Px>@UUE z(QJm|$WTnS^%##d1fjC&CB#su;}Rn>k`X-phJetNxV=eRe*Gk7rc-@FP3f3RXKazDvooZE?1c$|pOI6O0|m$XuyXyM1Bsj7wz^UwmmYe(k85$B^S z&Y&R9ZeKCGuaELs><`F^5*je01E0Wl@e);4e1vih9lc zt;$Vv)jN1Kvn)N|n8yNVvsaTskAJ^jJkgpGEZ=`}$@D_3v}~+#B-B>Q=k?`>y7eTn zgzd3(J%j!wz7E8<*JIAn!V`xP!92;2sZRkdk$d+8GCluq0y*Ca#J^7A^&L(@+?8`l zYg@UM3!7xF)dq>k76j8^VNA&_Pynb|dtQD_1Wgo2@r7EK+jUWYxc;;|M zL!*IaE+oj>Wn;i*Jm`n;`}zd`Blj1YpF0L@6->qpU>U^DT#qet7Io&V<>%AV2gc=- zD9>`Ea6hPYl0n5lP-rrjn4yBok1P2X(h^Fp0Y_)GZ!2({)!7qzpH~s0sv=C!4-#@- z`h?b3G#K^BrU?D^r(gujF8db4*7kY*mBKY4^PgWR4-SPg{i#nV-fE99pL<>P>Y!Xr z>KX&6oDuEKvA116S^kTtXt&#M`fFYBt0Pi*SjG&hOXRDS;U|PzfXfbQ#^?Wt4ybb0x7T2F6cxBMANF9RcfdZ0A}!gOltUCt+jD=j85-3O~j)W)ch1@+7*ucs4<@C*>d002;8#vh#5s8-N z#=>5pKPARkV*#%%Fo`f;H&xzGQ_GmIMIO9?i~NcHwvRcP;&SXSyAn7|7cE=dRqcKY z&S-Epb}sjm2)Liu>`Y1Tu|Gj&!%8zCxNITFvK*?TbO0Fa6M*dV$YJq5rbK@ObPt(G zUjg>69b7RCbwmtM{u#I_5$`PsV*P#xkb=j~#$%D~L*{)yu{ma8=QJKNWB)e~(IfOg zkN4qBfv_Y{;q*&1`GGE>RPm6YViX^lZvBtXjtcY%-?;PnW{4f(38Kq7MDHRo#2{2Km0)!aJ0N-62v4(H;qlc5^Iyp z(jI@wog`s$R@>W0a1i0;V%4Rq20^5@aT%n_N8IG$*({phsS=v^u&NSNl~6^ zprL#e1x?PIaX=0u1GJp*9;;Kss+BxeR*yjNn4P(u;vh7^ zn+{*iQz+|ol~{{d3W~U4cHJd|oH>~GXSvcQ`F)b(yU2aNs4!vk6hxgg3;l|jV2{1l z3;D8ChFwifA`-^Zg8d4m|6~=!zoL-kxNvHPm|PI~`N$PJh19 z-FyV@sOL`BQm?`vIus|%@W*%}*2}Zo<4>i@VjXgALWXUIcwkNBew2Dylg07Rfl0`> zX${x-)Vg8fwUl8Jym)w?_%obGSiJ89QFb7H|IDbfLZ@erbn5#Vqu6;#Q(awwjLrg0 z{;oz@ziMtPCwgHWw>%>o-5>z1(tCeNms-9x`o;|k@NpLrFK~Fbp++P~w9x#M@x8~A zbOMqRlK93_s-knSIyfz{1}9>8{Gd1_U!O(2s4}U5X^ZEM`L3c}Lv9UL z%U)Os-)dNhYu-gsV8NUe&6AmrP`A!OnBtfCXmNhLy&j?xx3t8!r5~GpdlpQB0z6;wuec3!!lt=;|mW*vrm?UXCeJ|SH zCT`ejwhy#kU`SN|RIRRw>?0#_%J{=ijan!iCe$zQ>pz)<70qUD=3Bd2tBVBqrAV98 z*Wf5R@l+*2x^p_Fs!|hR*qClYta%f&xS2TC7aLwZ8yrG{BdlR8&oKfmQc?#<|PcZ7gL4w{CCNkOT>Yw=4X^;+B_ z6s!+Zc`)^9zjX%-8nhX5l^0=0T!ZYCaGG(FJvAqj!R~$y9xbJeE#9I;pk*UGvHnPe zBOJ#SgH8CpE8(y}uv?IkP1$|5Qv@Zgv95MEwt&DVkAXf#1v9*vW5J7{b>cGZNc7h* zagGuR7s>Bnt+ff@Glj_Psa_q@vxbJo*XCZyHnNg#y}TPv*3^3IhEa$@qZ(bVXon=1 z_+-EyK&Trgdq~ zK@Ny{Da53Pn$~2Fd_}b+jQVsyhqdI4y z*um{dwM4UlOHIDJh1Cs1&iH4*xE^TtM7w&>)74GUl0q1mXA|Fl)F-&2BOP{&*|=|z z`_P0tHO{6iS{#;0DL2U-P;d3Q({|0uHg_t}B>XX*y8FP-gvR@bSIJ9zS0Df1J%9K&&=~Dub}AyP(?`Yf#`U;{#kj(}QK`WB zVcYRPHEmltr{1+jQYq8iKAIl9dt^8!E@y2u>1h)Bq@mQ)I9QOV+8v8oymspg@UH77qQX=>Xy_Z#SO{~*Z|2Sgsuzq-k->WpN*yE$nd zSgiFW_a0N_ykrp|Ro`t1S4D((j1a3!kYSz%+4R^>Pyi0TWfFTAw*}|)mT+X-JHHT; z+#|k_UwI>J=$6jbPL?#3(M-+VIJ77JgTZ8FRhT8xv<^AaEU8C8|~PFs7j4 zMup4+(nTmvcz#HG=;^mg)#O_TEU(2ZI&uMj}u4JVs~?ii@Gn0q;l139wAS+{|0UA z(GG;=gQP2&$MLLP6K2)hFWWm6B{7zw%=I>HxUHMqlSKdLY?X9up@G@3dIeFf(1QuTk^|;(n}==Jo)i`JLQ;e$ z8=68qVy;a2o$&%>O1&GbVAqX&NiruXBHV5r%f-kbC<+p^0g=#{4nXdrIlUuIN{yMd za==w}&}dY{XNQlka2*oPdZZ`C>{CMW;iB@{$@G)siP~S~_Cje{@A-Tvw`=66J21X_ zq~X#@;~0Kn(!yp27UGkq0h&uJURt0J6R>5jCVREg<1`*=tCo+c5{_a7a5~m;Bw#16 zdVd=}qasXSombv7=g2mW7jfQ#Y;cbOBY16luqEBFJqzj1&70QL4;KfH2cL}VC*^Uy zJs>Fw)Bk1``~Nfz_>cVj*C=S;l|EQI{+LJn6m>nT<)o@mYP#D<4&5PE8s9vz2n!GL zyZ<@$)u?G6Pj!*5>LMS}P>Gbr^Z}mJwmF#!X)2irO2fQmyR5B2kiVnyG8gg}l>Rd! zLguf@kT>r}{1i{ex|!&=`46i_&1GN7G_Z?_{ZNcGrJ;2}ca!$_J^>*iG7M#$3vsDi_A6{n@TN6)y?xZXl z{yVabS7OL@#B-%Q2i4tkeY_6c+cbqrp9IdocM4B@%JTYmNL-|`GKE@}ibu7spX;I= z-4aNg3a4ofW0C`~X=piy&&c9M6QN^F6@yABVQs`2fm_Vojs3e7D9K}hlFQe`BsZ7T zY!?ZBb6C%0VE@Qd9_&;%uwcb^l-KNDN{;D2)DYy3LezCnlM-XVens=Uw|Iv4i)bo` zt4Ac1)?2lWo8{0Kn#INj(WVNr))D3@Xtx|<=Ht}&BiX)%FR&|O57jlCs==5qWh3>Z zZZx=$YKRq?ICoiU@#M`i{Q8&wsA){Hfvs)K{yzV)?npwRK1+0Vbh z45qTQ9P`8hieY9XZ(6I{oz*LG*UYIt2 zp&l+_Oi>DY`6$T90yiSDpKDs;e6I1ggX?jO9-xM?=H#%;f4c~0Z=sbkqUD)xWtILY zyVgUrlpJnBC@eu%Vw zkk|^!uozY>WJ$I-=G@coMBRJI9GcLIMRLglB3Ib`1{;NhYQk6|zbiI#xCT&?bKtYQ9}~(OGaI z-{j``IZ3}u*skFt9Kl4Z9SC&UvpW9WsmPM3X-cUd=>0OwYRc&X%Z+Zyt@5sxM9uqY zp?a0kCH95XLK@#P&4Qa0J4eqb93ewZr>QAdlu^AUnyk< zZ=|{BuLXE3Z^X-^Zo1FK>E9{D+4lK5K)-b~3hnAu8P4^V(#N}E?oZSRi4fxu@aU1N z@tXjL#L{J-$q>ay*VzTlXaD>szY+e|`th$Qta=zN+PbvN-62+7&#LbEKfgPN%J$Zl zx)TKnC<3K2jNyffd{Y6>H>tkFOP&)&($e{xoSw7IP(XW(abC$7VW{qkfxrr-I{NjO zi6|)$L1$4nI`SZj)AsQ-t*Tj|cT;5HBx`NBw5`ZUF~nX z4+a_S-nY6hBB^69k4Z%D1(9U%HE6^pU?E@gxb8KD3}2_c2Qw!U)UpiA$XJK=2vbnf z36EM{7s0QvO{~VPT3lg1!7z{!lW7I=4G#dmVb5xuv-gC#@2$)6K}MPD$MCI&Q-oDP zTc7wf&h6K$O5VTMkq8+2u_`wMt41urb>TF#Vrgr(hd1XAnJhFCN(Wm|$wME2)o)n# zSEhH(;S(bv-6R`3xP&!zI73M~4}Yr68sCTxoi)-#>zk5@_{p4$tMV>3U-HSS%Dk`4G%j`GYVZ&VE-@Wm&9l2kQd6o8l z2OIk1@3<_a*+{4Trgc%qQUOM{VN)!D6ig)j6lGG|)5m2AcWER1sD|A^UQ)?~n5t<( zRWcX7lq6~$wNm0phJ$)D1uBLVovOZ2!^x_*5A}!akw^2P#je#lFE&;Erf7v87#q#V z67^hV1V(p+vpn2MW$6>jru7+j{a7ljnsDacdO==qXh=h*0@& zOXH%6>HQe+vmkKuDSu&kxV4a{)rdJHAc$P(O0847&&BNqBeD zdn@|V$R}583$IDqy1x!@w$(n-kUNc08?hwa(dvn3znj7`7hIYlUWJOgQRkZd^Ica; z|06!+1!Xeq%ZYSVa5`sm0K?cP88>I4&PDyK+DJ(mb3rKH`CWa9m97 z?@jk!hb8IH(&6_Py4HU6qDzo@>Yj(|`b{Go3V>x99Uk z!g39th2oZY1rV>#IeJX)Kj|=t$&Je{cak?)RcyO;jC88dmbOp-W@+W|dgO{Pyajsf zoL}YS`Qv)|diqUPlhH@Qz8A)h<&I#c$UQw*CR#;$WJKkCifxjwgtVO(Im|fPe9ssG zzqsWmj<~}lJO-mtyLT^J$W5&$-3ImXL+n{=>rB{ug;u5o<9W75UHO=JK{LQ9F?`7} zeZBWJ-Io&syl=?gBXsSM#9WRgo{|&?{oR!d`vcBeu6Xo<(DQmNRmm#}bf50Z z^}M;LYWi*07h%{?8(d^TqiB1u`l&=IVrn#%f=O~f!W&K_5e-B$E28G<+ld!LDK9@k z_QR4suT;S*KH&InyIn$KbJ#-pb z`|Ye%e#Mo{$>6ns&Tyr1aCzuabi?nRPo=%T9-N>JZ8k$vdLmZ>P@l}IyRD#e1Z`!MJCXV6l%~r zI?Gl8QWBHuyBk7M0)mWkk@Ux8^}pYoIHL{?i-bQXvoT`SZ!Dl4Rlq~_k#wCBi_u4s ziV3f$DaJDoHHYUbspX@&+UWXG%9DN(6x1wQJYZyAe;f=W&ONKB)$WEpK?Fv@s<-E1 zGIYKcMcC}SOWdg$;rp2VM!ppMI}TUM8_l|Y6AqCp5DvFS-o7f3!@_S zcC!T_0HL=}+{HOqxHYs|_jK}Aj2J}Jl#hxSU6~cszpVDARbwo3W%E~LDyq#pJ&Pi) zMstlUVkWanuP&Ra-6kE?&s!_;Jx28gI$}Lq+lg+T#JLouWyKiQC^3&zzVhb0(OM(n z35zpxt0%~cjl;0yareieqN6p2HApMTmgSJaHl+j%{V~ACThTRltA52(Yb~4K@)L)S z1z!_gD>jJYh$i_66Q+ZNvj`tZTJlN^N7}S~>3lzUOp$=K6e5}6F%h#S2mV$QkD6e3-)?R3>%k&ow*JBZW5-;$9ebQWL}G6ZM}biHW4yW^^#QQmA5n z%J{7*(-5SSzsz=&aA6lk$F@pt1YHmHrp2Z=idWV5%jp;bRTT$v zE*TfbhxHV=jwmu}&@>m?r(l99D6azLy1f{)8p5aXxKC(_HsD!T;{6Asd>G>SsYvJCH%nf&e-T zP>8oZt=bbJ_KNCn@o*UFALkNOM`)*9AZK*RhG41CBbAZpMP`nacSACIbJMPSAbiaf z5<+IdojD8|SmimR3M$LiI5C-YS)a7_BF3%OBqOzXzCLN*=%2I%y+!wY9(Jn&oGa=6 z%DS>dDa*az50O$oAG; zSbz6&%GSLfSJTz?UF3Pgq)#=U0GlxT_Z@xM$&N#KK~l1(_(#nCVv^qCqxxD-l~6Hj z8hz)qm&I<7i=GC8>2zTC`ff=XS#%|7waOqUQk@`PlX!w?KK}=U+c-;F4VOqjL5Fs^ zvxN}cs>g#2qLt`zBHJ3@dGh70I9cOfvH7WsOY8UK+3QXHF9sMAP!yg(pQy6(H~ZT|=X@NeaC)FkpNPj% zkfliHYX!!vVXQY|VTw6bQTB^DS&bH>1H29@|B556&B;2QXtbT@=A*<#>p zv&~;oM=!rEn07AgZmb&YXlUE9V;j$ZtubGB)+IL7>6<;L^&j6w{Oc43@2X(nh_5rg zEYDq!$60;vjwIhGtJmGl6lz{_Mi_PYrkoah2G9>>jR#p1rVtv_DWXKR2@drz5K2Cw zup(Q-sCYuXb_2h%BQx-g)Uv5Cg5vM}+2yn53PCAh(yI5VeF1rlluZhpvHM6n%?Zkx z28+rDBZ4UpAN#{beZf;>QTNWOU#~k-rTGORkL3(jI&+w-bNr34e48<``iDB-i8y-`xWSmtLJ?*HB5ob`HfW{et{}WZ&()?k>8E$LnTpnG zP2glY->|4=kSEvcj8wSsvKHdyY;|&h&KkytWi$ zxS&7joWCXzEteU1JLK?^EBF}OLsXs0d$XCLqn5rKf&!0ddW;Z^PT0_#a1VUGD;J|R zDDKr+HVEbbT}C9IpN;Jh=NRs1y5?L?f2g{gG82htOx?rBgRM$R`bzsTn9;LB@iLip zIVpgcT!a{$k(7ZFNZD#x^@vljslh97m`66d2$NzUJpOQPR#Bb=kxxtt5TBrfW=K`j zDQOc;mA_E@2MiUp)ZXg)$vO0>EuQnnRBD&9O z{=U%#*y@*3v###Hf9zc#U!KtNbcG`(TXw5o?i=o>`{$+KGu2@Ua1xBlWIs zFRq`Zx~S|JNF*c-l*UgXW3nn~7R2GNE=oIa;Y2%~vY?dpKUd+UWs$FtL@? z@V8QXE{k#rG+{EP(;q|!S+~Vc#>>%#RL}ZHSkDJm!c9^8lWrIioi9q%FO}V40!s=- zIj*yQZXc%yciD6T%*U_1!rSZDoCxq2$3u@|^0aE?k7LFt=MIccuCfMnz{lSIEWNj2 zyxI0G=0vX~1;juO3~#J{nKNZ@=@e6mqob1FtCG=HkCdns$6!i&R z>-ytF!@~#fTLiy2|9eJWLyMnm17U0`HR0=s5|qdxB9?cY$n74@rKeBpuTeGcuZ&yJ zi$5Z!ff!hfaGcJtb1{NFtA<|Ci99}bDVO2ix88=UKFij9A`C=jrE&r1wzsrM!p2?} z)uAt3R99(6!DNwkvvkL*0AO_A2J^|KkWhN%M@KUyyRlEAhhnGkT91?a4#w4|Wndm} zqRI)*-bgon(Up6upbOnVABRbwwe~99LkH-_?zfR_myouA2dZdyl?ULTp}dIBVxwGBkNXuH#EajR_5eF z5sM>pVd4;JpQ>+e(_7uXFF#BQKeQho`Vz8qyZUvN2A`O z`+%>t!stqFCY4*(oE9N*F@9pgufKmF5Gs6%3b5`g^-sOa$ex_N`e9WQ`~pf}##3^o zlVQI+Z^3@MM55DLr>#fb==D9griOofoFY}c8uqdBG7DL@Q0nf0MU=zw# z<80yGnpX`t%qQq$;q2A^da)7azMdI_>fqrGMfH9$5z*SYYjWGmQDj2=D7ylDBBpFD5gySFjt>SCYYh zOfG7cK)%WQlLv)-rZY}jp?bfO)bSD3u0gn%FGbR(1nE!Jg2S443`rTFt$$-iU6B>{ zS9-D4Or?ny$g_cPDqfAsAB}DBXXv+r+5m|Ud#3GI+#>+$QshJ!1LKZPBRbr#W>M5( zSolGc^X}r82;z7i(aN}E86JMSth}~k?=Z(Wsvh503Yi59QIvz#;o|ogJ3dzZ$NTF4 z6@?u41#crm+#R8j%@sS2DtoTl)$+OB82 zJA(WjWinVL?20IzbnoDT5}Jg_S605=kd42W3x{y=EqM#cGRH5dM7?D0qkOaFwjW{2 z=%{qKpQd*Y=H%sArK!WB?^d$a_>!Yze>A|2u;6|brVtV(!3hKfFu!8sp@j)aR0$qp z8`Gh?+BQIKt!x}(*lSw(e7O+cEPkWnt~(!9G2 z&_CDL-d6=E_~zHPJXebj`Ns@l*YeZ%`6}UlZGBN64~UMhwR)66h-7>~(m(xEq2l0- zjO$qeMCLi6J|VX=&INbd%^-jC5p!nIuDznJV9y{+e_p%rfu)xH@mx?QV)W?X;_ug* zmGTIK3R*!L6G1p!;N5~kcx++53LZTPCOXfFh`SFEW*SaE93^BM--FBHVeSEt^yJ1# za%2P8St>&AkUGIh?!K6mBo%ThbY~ed57i=;?uHB@(PFlJ2Y|MyajW+=WSs?nGuEpx zM-<_@3Oq7bC8%?>R(K3#<7iVKREM??k?h4qTNy6Qv@9h95cMvT(J8Y+J-Y8lFSB9q ztSj@2m58&WzkPbVe&8+aBM>;WH7H5x`9LNkKu*IK8+7@Z1%2-RWEw4AUfx{X%xHIj z?DY??7CY)dKuq3HdYd-F8=>45d5*8G?)KA{N;lih_D)CdByaeejtS#zdwbH^@-;Mp zo{7O-2sHJEAfFEB()#^UMwmVUJ+pLl;`DCDB=>CvBNWmr#8=fc4lnpBra+*BmH!j( zfsGHmClz`M55k^huxo4lbORi8JfVoy6|P?1sG(qOEqSA4R^MgmZO+Mx0#DgMhl)gyZSdFlESkF>DPXJyoc7@X?< zXv^RkJOA}B?ca|5DWMKW@n;N8g8$i=^uMAo(ASjt7L9_}Td*ZWJ&l#fA({1EyewmXh92 z51xTyz~^-Zf(2$peADSV>9ivEl0<{5#*dAN4YfEaLIpHFCAxNG!~8Fz)BS$@cna)i zuUZDFbECt1XRY;?MF0z{oM*0dV zw*u1OnT12Om$UB$8slFH6*Y%_QU1B&SNjC@TavD}vExj%?X)ssgjPx$?r6l)w`fms z(jIARY)TP+(d?vD?9)=7sDp>65;eJiuaAe}hA|)ML3QhfKcE46UO59*kNWX+J4jba<3lf%jNb)w(w$tTT z;{Oy_7^J7KeY((rvSWOvdvxfwLRlfG--ob81#}Vfz`MCszC#$9K0?TrmV8X~7V4(z zW_TaIN?eF37I58q<$Z;)LVc;eiro4t`tzBZ$Sz2&ot%prMAFMl5<*VINFgg#1L#J! zt~`+kwv|^nEr`jAHsQxMfPoYVFY>sGWUBUAY?_%P(DOb^IrS}9qriSp_KvEcm6TEF zVnCa#?L(@w&RYL+PTcNszEuLBrFLTL+QQRj#?^Wwla$sE#bc%bV%y{?09A_KAVJBb zoH}hQC|I`VwJCqO(*3oK-U%$V$h@8DiFtr(D-7ZfC&LYp{UnY<%Cn2%aP8=GG3YXo zZ&0m*61wjt_S9re*6)E)5a)U&Jyw-vyM5bPCAh>0c+1o49{_jYj`>>_di)Y2lZ>5b z!-TsRm5jcqz*USIfGEK#ZjT5qS-JW4TQeaZhTyW%19-B{qXPe3!dgF=fPT~qf>`|y zLXqF~ybizwO)`3l+`K52q(Ec(DgK5a#BgRrKe5Eot*fx`FF^+{B&ADI8obPc7s4CV{)!&L%8HzACuAh9}WH1ZTxyZ}hZq3Vd ze3}Mdrx&{IFglOE0m~L&0CF_9Rvk z|2H&O+FueV(4MZ64X6RZ$8|~dEj)o~(7Bh0`4*V|3%%Y5q(^>e$~cLxSLXzwLE^h@ zxLLFFBfaaG{D2ScnCw>`sRJq6a}Um2!$u+QHx@(cfW;AgN#V+v7?3J2xm-?1^8|4Q zEq`TirnmPg>Nh`+5MNlN+Uif<>l!g*{cuoWma}%mT>T!C0jc~q4viHvfBX1Ka|4$m zn7_@(Jy}Or;T-lWVF6~gQVd$1V5*Ttj^p;{jlDw3@s@a9`8{v5UfE}VTFCJ5Iheb& z_dHRxlz1}HnNTaJ#}J-AJq3Y*7Uwl*`A#&lvQX#&j@DcBrKZXLD_}gpqB-bBK_7ri z{+%lq>FRpdG!yqmxmb==C=w|>rzbmeFzhU}%aL!?#Yb-Gw0~|mx?Tootw&g_Y2#Oi z3z${^xVXQV;I|d%&*h2lBs2Hfer-d?HYuV&=j2HP%~U0prNiO+bYCK5a4yTmCVB9K zvyu}d*NY~uYcD^gOzok>Fp&U7Kfh2T+Fx#n`sK5hkY4kL6r=3RDRG*5J`EZz$`1(k zR(0sm6xDLJr?;DfRe4IqW5H)mO3%AyEpl$a@t6Pb^>{wZ4muEddF)^+Oh%56N5m&t zmD&PSZ5%Q~0|cb6V=hZBYeAu5IhlONx{k)&Z?Y)qIboANxEZSb z+6Jy2y+vc%3{Fp&#bD*paAv?8IP`F3CR)*@X46yGU^zRa>&410abSy7F2#)2ElzFK zxmf~%5$w%LxS3JB-q)HJ4EloZ-je*(X26iqc_u_a~UNTz4fKMB2hfxtgnnJkV?WMhx%2C zrFNY!2--i2#!qk1xt##UVeusadnhAd+srO%KlvIw#1_Z^-4895iPafaHyj}s0UYkv zJJEhX)qW9Tj29`Z`T5HUOanR#OKfGi^V8Y&Jj3tnH1+kz@N@zD)rQa~jV(_Em90=~ z-(ZR&Oo``(Trj;y8?2l6A*_7C>Bon&Oj3i=W3%jSXSrujLpsKa#h4G?lrUc}=-y7A z^$j~%Qmr&Pb$yu_7o11@BcExoDkxKObVAblGGW<@@zLOQU!CoO1)d8W_ep>Nii@{y zCLq@!XvgF8QO)nt0=FPr9QQa)L=Y$nJOL^!0k*1zzL%Akc9o*Ytf+<4FhH^-ROb*uwW3U_LBMVU5d8Fi?=|9Qrh?M&Ae;PIqS?>Yu3y+bN)-Ro`0WT_I+Rb z+ME5M=z*pg3BOKyJ4`c6x=SWX4-Vog>M(#&d9lKXjK3XaRC;InCMe63~&iOUJtZeCf(0Pw7q9blb?{?Ge#S@k7@_u%Xk zpI>f)z%K1VFXNBTD1t~fdSirB35Sj)wo z$M41B1E?3VsCjri7L_w4y7p#jGr)Pz$Np*m?4AZiR`_WPnrNn9*FLDviOL6M0B@G68fO_~EmCN!NrDX;SfCx`A6P$d5ZJd6Yg480G0K`((qj3`H=w%OmI=@?i3llJXbGEJ)cbbgI>*X7)J~J9aye@! zGCUkb%OfEqT~iS7qAREWG@mVrU;55$UEcHXq8nbh)p~OFh5xRnP_b~n6iu?$7(-LF zHD7}UMu1Ox6tmr9uB?=HgV&leHVM9t+R?x-%UFB~nEZ;YP2;slCYfFY^iEHI&<*35!nQ&4)@KED5|un=E3kBv^Q15Um1gk=*r z-Jmf}A8U1`ZGF*`h0silkl`7hVF?5|yAF_zh_T4oU?idNq4`>`$~V2|lfK^`6Ep)d zDl<}hL1lMH{jwfnGm+=e+Udqiv}!o;1cQ%b$ni|t%aC)6mgd;f<<guX*+KB%pp&NA$NUly9U>EqDgFrfh^M)fC zzL#g43U=?%VqdP<>)!_O(q&yalk2YXedJ@8XC}|~X?eeC(5{7>b{Ej8-O^@|cTCx2ODdE7k9)@0|5$x!?(+G)@6fHMSgE*JW7b(5xSK*_ z3aux|WYUAJ2i9R4~%y2WyB4u0JdbTv%jpHJ}zjCn4#{S)Bu!n_M&VCn-%|Mlx$ z>#+xU4Y=GJY^AO;h;TE~Cq%co+vjUM7hHtI6`=Huh-)<4xXTVED$1)RI^f0Xb?x*D zM+3Q%8m|eoTEuQ^)Y-lMm~Y%WwkxycG%Muy^3xm?(9tlk z#yqb$Ba>QKq437W;eXwP46QV`u5Hov*d-M=f*CdhC`L(xGiF;O~(JZ0E=vZU-7iiaBC7;%FJCRCqEUZ*~6^P%Ml!LN#aT#&{2nslZq#dZfAL>p_4wn z?48A7g0DVVLu3(tiKhoKBB|W)6!;*<{px~xJ8hSwyap1AYqIH=+?1c|*4@UK0Hg2q zW!$w&%a#{k=@79}2J&z7}AmZT64b^OlXxZ~env zJ|F)RM8N-$hw{Hd;Srg`9KV^}w}*%oZAbJb{X-aAeP13Ir34SAs@0Ydix3-ohv|_( z5Fy=HtmE;_P=kf&oTlP&u!}A-(IoP!fRh*}*-a|4);e7_+{s@#$LUfqF+c&NLwNXOog#Nnw!HOnRU0%;k4XQ{C9n?3N*{B=bw2pp`z400x za`TOwfBjnkdt-pnO4qBZ4io$5<3VmlG6t*{AK#4%$@PPT3UA4GyktzR$BzL~15wsm zJwT2Eiw*8qOtXPpxZbK6dZ3aW_D0ugqAc6YlYae}cy9*N?DGXKn+5MPTqZBaF*A|w zs-MmIBqs=qK;q8>-+mNB8Nrp(u;+@a1-vJx+Qb5`ov<3PRF*WfP{~z4HJuO)k+b4v z$ZP7UhA)+<8H()3>h7@j_;Sk_^G8H&w3(aLoh@!SQKi+WZv3^sXJvc6jzOv(p+unQ&JHtgGzaZ0P)oSKG$-kGoHZF_UH?22dtk$hSIKiEoe^1L2S;qD)it zTp-nHJ19pr{dqnk1yNUf?U%#TP#qMd=sJ7FGSr<*zM0SnR$$}9Y>>`4(8Ew0tztgYhd-%w+*BYQ84 zlA~a(VqD#MhvDT+yn)>$EkmT%$8>RaxGpF1+S|s*&z2xUlX3!|-4!c6Ye}60@ePG1 zK#)U_PBTu@q*vcK}9u~!_Mb@ ze;R-NFWe6N4>92X_0Ydc!S7-CAf*|+{-6|`0bcCDVX=pR_Zi-{s`mQ6V8KsRh+aEI z@R~MZGTnFw9u`eKFqM`n=WA1-wknzw)_$2lxGlnfH$Q|kCjoCE`uH1G{KJ;bukZ>% z=Joc;OR9LDP6He!NR0kdhLuh>^0#ciMyv0(0zc*S#(Lw+CJ6IB8dVODDUIeGm}FN1 z-?{;zeAM;)`c%`DERw#|(QnG|oKs2_KX4(S-vuYr^F5s##yI;R;I*1f0DkC@eg_wE8K^8{lT-dMGC%Sv=?cb{DcKj1JPyEiMA^5iXJ9_Bd2C=_4}D-VlgX;!D}XyBlU#rdOdGVspZeS z=)pnPkw^1Dji40$cjiBy;B8;M72@auxJ{nYUpC7BWK?KgqAd}V-J8=lhc3nVN!$NW z!XnqIR{1_K#Eu(_ncteKkXr&VU~=C(`tlq8PLrZevG|i3?}bgK1r$ zB@M_YY*u%vLRc0NL`mdcS9CmVQ<*IK>^i6bYn|FkOx0CaY27C*i>_KV`qQWMnnrH9 zbAHzOIXoysSk80r>TTSN5hD?SXu)fc;ar)IxVjtSK9`IxQ&y9J z^o<~GR^?NQ_|oHpRZTiYt^P*~YphRqBmU85=8$P<@$INIcdnCuE43U!=cn{%(tp+| z$>`9Wj2}Enlx5G&!vwmt6N@Lch$`?Odgu%GKqqgCz#WbPx;Rzp6>B)yXzDpX1In^; z2|5P%gz@Oer2Xo%(q{{gIaHD1@#?=$OiU`*8B2}Z%dJAJ>5cA9+PdC{nV;c5*Ls_E z6|R(Fk46O1iiiIeQcL|Q4IGAnka1#(=0r>E%0oLkI@t#lSNG~nnlV{bm#ckSBlLM& zk-upo7@kiJt#+s*9&gBa+^=yz(r>%%dLwz^O6xx=PA6E|8jF9i&xve^_}x4|2GDRg?CD1Q7z+T0DfIday|oDxD~rk9Yx}LYOWKT z<3&be0|9jfsbS^tqAV{n2WBa6cYG2F%OWlee%G2ln!#1xKz?@xhA>q(Vv2hsjIZsP3%#ze4mh z$(B&XfZes6X+ID}s{Ys*krjK(I4-#SbWxp_n@B*#dm%LKInKZgnVBj{(SAB%~VMmomZV3ap2lCf;T>h*CI0x z|0F5*gt2>l&1dP-ra7{ou5~@yfeCP6=^1S^CY3ZT5o^_h7^G~q35Xf&MqE3zz*wvh z4XGh4F~u z>tKe*=z}xhHpxu|HS@!si@4Rl2K5*9wX22CE)&5WWi5TgbG)af9B-ysx*=WaLuAZ6 zJVOfWt{{KGn`n2s87rA>AF;RT$(AdV4V+DL(8*a@?BD*#l!BtOKpmt|#~wPq`B%gA~ighMD{@e55ij-ysgd)zdxRy8tFa*;nkv>TR- zCW?c>0fIYhs1K~qZ@Eot`u$=qdftqOzB9`;w_3VieYW&Yrx*I4y?*sC6s#YhAfQvc z>q&p{FnwV0e27z!&x`7XI{Q?$>cJ))908>oz1W$^eY*j}dM-ifA^K+5o~H6Qxi1pn zg7$32bzSwy6CY#GklPMd8D?DTAm&Y`5aZ}fPNj5raLbH8m0+kCvav$4yn}B*Ww^C0 z#>SwJZ9P8FwS)m%V*gKA=qEZZ2{Rr?btlS@hc)8bH1@8W!+6!gwi-T-dM?G$lw+R; zl54$Ij8&A$k~TD`{jkQT6#+qE04ugFh9~naohmzTo0=V-?+^}CG2r111iP3_oUAyf z7HXuM<%u~x%7|*`d08h>pLu|V#iklgkr2pE>Py5>=Avw4oG32tHCPW|`#LyAz3_DK zj3JLkyn>q&!jL24{>Xfu*fExTrj+bn`=9cL-~zf@+c%!$|me zyfgtJF<=C*hJ@T>kBSYKfY8@o6ua~ka6(ODrXO=Oyb2Bn`H#$HEBE|D>`(N=aO4F| zeE)){sx;L4pPCGkw!~lyItta~&^CPuiQMiM&sJg;Gmjk-lbRRYTT(CNmz1H33bhdw zT5wy7-`o6H3>_`b&o=y?EZtQf29(D(y7EGrDiOfuJST!hbW-sO7ZLrj!xAZBj#8D8x?wWo=h9O!4#AHA@O1mj&!&% zkqh*INx}LiSClXiNo+h%9UGxZy`=V!Y6a-AD1~JyjwkV@d@7W9d-5DMhZB zioK7&=1sGsw_gc*7<=hPOq#sIXf?^ikDoRF8D<8tzNGp*nrsE8?aTI#lcsi_580=8 zu)8Wkg_ud!;`W=*+oL4jfVq$s*4)L)Wz$D_&|DXFCzOO3)dr)`KTVlTTwI)r@MD@x z*NW_Pn5Uvn!K7fUIzkdN6{AMbuDnlX^gq!LZv?H9x+lLpd74^{z30KR-z=#AYzF*) z9UqEa=9eF!uqCi5=yDk!8S9h8S3&U>xmZLThx*w{;-$N2W`?JEy{X+w%X#u zxfASh8bwiTLA?dONc+TrW&Kv+l`!qjkjvVn2q9sxqwStoc_VfNVm%zApWa8u7+GmB zauC{_Z5U>{F61Yfz$}cKNhzVs!07R?5U0GmJ5@I8p1fP1pS&DOqbI=W&KJ1rbSHM} zU(w6#H8G3r;bSF}8iK#b(&~|sgyBuGQT>!~VsU<*3qvcW5#Rfgw1{{ED5%4uQ7;8J z@@Uc~tfJ!5)##N*aB=iS!7^GX!*4y@n+ds|^2r7sPfxgIro;30G^AWR9;`*Z-dwuW zNbp7i#jfJAN8E@f9t_m$LFRyFX`Bjq4~{u&PhJ*;et+~LG zUUH#FKJB^YT{>%{F)QpPi4o@}llk~q-ZL>Kg9kQ@7j$RlhHA|G=^lSgEdf<$Z=giu zx|-zc13p#FC!0DH|ElT5Dq%D3{9#e z1aE?1_%2EHJp=BNrpm6OO#noJm(B9MsxB#~Q*indd{m8wN$eA4V5jbP^36n%2S<51 zly)FP%_Z9=RrIx;mj8k#U<{wsMkC2QE3&9BzLTp&NQPeG+rZmQ#c;*%1-W^qhTSR5 zyDGrLdqHpMGn!8T#sJe4BST4E+MLQl-7!}IZW$fix_xeCIf@b$o@8PowP@pnG{!hA z2w{TDYf*0cNR3IdNPazP*1SPw93mee2zApgEfGd4adgFoDZda~+N_n|kJ7S{#X8=! zUu+(~;0PQx()yk2o#lb(IkHaGIRl!umQ(_%EtClBGf638_ zq5@5m`I(9!3$XjTBbdknbRZp8VlRvyMwCjNE!>xx^DAiZJY}TTQew@^G&jRipTJkr z2$7MMGN+E5BujfSwAZ{Fl14@fNJb6e8B`h#POqy-jHYG+p4a*hBh!oY5=|StEz&2> z#|!V4A(i-rh)*+BVGH(Nobxak)91#&Y3eCjNW5{Ag4M5 zS-qS@%X-^e^Gv3amJHfwa*xmGw(_umMQ7XZp~Ic{TL4V&>QHH)ib=1S z^;D<5dBcxEobcq{L#FV}ETw2wcaOwx?A%8Kjms@Jepy>7u;}Ti9m#fJ?STt|>FF08 z3Zaa=1DmC&jDhEz>a;C%1xf{zCWoor-FtF|I$-;{IRpY{MO%e7PULsV9E$ZGZH4v7Q@iw9Lj&ZQ^xE5jf^ied6Jzb7Wzy_qrx+ zl@jN#0h!G48=3jxu){-dtBzFSD%AtgMLwhB<0kDkhmOdA@wg8$3oOh9Lqi7=pZ#mj zKKpA1Eh2c$Z2Y9HPaVo`NGG##_wz0_#EfkRmCt7hillG6Bwc{me8Af}vMgXlya9tjMU+uLogu$>?=4H1s z>3;8;yKZgj&qpO6gK|!^?o<^!iLv`52N14s;oKJr^=;$k+?tL z0yU11Jlvz;#>qB(I~aNI(bOair$sg&(a67H?0j(QH*s$qG!epd73-R>js`MpzfEA; z;i3_P`-fLg+M^tla&lN%RZSn#`=*a^^w@Y#%>#WZnB;hk+~MVT?_1fQ&sYBM?vMO$ zSoqh_nBk)L0EMs1=XXr5=rN|rhk$q6g#Fq!m-c#va99<+O%58|g(YUUn7a~@lu&Qu zh@G5Mv9sz#t`P(jiM`h@+xPO!2|>T?&csP)bo|n?ZscK7k+42|CAvyNfKxa*Q@L6m z`^r|xh{*URmL^H%z$k`qp5DK=c&7&Ix`OW_Zz9D+$XeIZHMRa}HDY`iyJGQnYRT9P zRIoo~bcZRJ(Pl1>n#(u$BR*!My8jHV>^^HOcWQX+#=i6n-@~ovJK~9Ks*s{|7^9@- zjFOXcuCnb~x>d%Cdff%JGe6y0n#x)3kLD!b>7VS*$do^TiFNqf%txY#31B{z)&VVG z0v}Qe_Haf-V@KkVa8Y0^1uihE1_VG_@-=!7ZNqn3<-sj**`#x+ExBLmAP#MVQ)Ar``zZEmo6W~|Q1VcD52-o#CxxD!83KbH9l!sS zZRbqwLSmKsI)Q}v=u~B0E#RG{SfnApQ$gIF=h~0yHI44G*m9i>m4+g95DEWEZg6c0 zwlR5qaj;b`@e%=yJL6icE^XGBqAYXC01l0kdu7=;9vjT~#xHN}#~BF{t&<~FS?}}O zrfpCYVENS$7aKXs0%;Pl)r#QaNu>tj64UA-ITcxdIpe)j$jfV43uDUewn=XFdA06=tMg$?jSPz^OGgJ@!d7I>gkedfrXbD8S|A?t=|$NQ z6*Yv8XVIW2yMD-UlnXQ_OVLshC@b@3&<1a#r^Tw#wVJaOOq_(eZ-P?dQ^f*}RUp$u z@2Nl13{vP0Uk};eVt`;TxtKP%We*O9{lf=Rba=jGA%j03ih|$^_)u zU`enAik(h51vhC57iG*L0#|*zi z{n#f}ejra@l_`Z-{zQ0`@K?DVaml}&nTfBt7Cs#as9<~N=JzaQu8KOQ{{FLtP8}N8 zH~L&%P~Fxxf=b8>T2$@j_d)3e3Gf0F0$jdbbn~4zIjRC_*HOqSD_qt^dzHAkJs!ja zzd>U+Zm_M`_CeKkK`I~u-1OSM|*BMiq3%N-|2>s18NoW4>779UkZwI5T9_LJi!=Uj& z_%9zV6TC@O$r5ZbpRBlJ1<*27O&JxM6NYCYtR41{cLF|Onwp~62bnR^N%K093K`&| zCMMR+op;h)sWS4lPNBdAiV@W?KSJ6uyBkk3<_y1&`W@{8(@kaTnWfN{(o})>s>(5- zngmO&nGqaOWwafshyaV^ZX&U>%RnO6rficD+6E#F(u^mh`O~bGUUemE0zU1e$z>11 z4>r-Hc#N^3Eh9uh2h*VO2+)CqhOz(f4}`06I^FS4!|cLLa#{^>#l*Jt%&U;Jk<{SM zAD2n-)p)z{*~^0bE3<^VP5MkQ2R{G8r0+RSHW`znDL5E$OFGycOv+bPc52esE$>5+^R7|b=>cJ<{r%cwXiYp7COMraq@G+aU&REZh zJSonra*dDSJ3HYiw|S(55>)d}u}2tj)Q(<|bS3X1Rr!d;B|7AYBa z*xqH>@i^_-MA!*O0gqXMefZ=(-#7fXAXaV7?N~Oca{kr;FWxXTL99C>S z6W%*-feTGocuJQ0htZJY_c_g)Ie&njZO_|7QY{l`MA}e+z4vY12R?=LCmR|*Os^ix zUP;yT`R@G0NmbBQlO=K&FhF7^eCjCE4jdChEBn0`Pe*hG;PglM4HozL-}(UCzLSH*25rrnjYTX=5|Po zSNDOx|Npo5|NlvYf4}{EdPsKuFZYZOX$qdsfTv8%WhxIsVMIWdm%FM}pKmxlJSPL( z6;b(dL?~Y=DxEoX06t^Ga9Hf-6t85W8fk(GcUY;TkSJ~FL;qs%O449`Wp6~s$4^-> zY75xd2xQnFs#=~rYz9SZT{363fLQV1p`kKe7B&Xnw{cb~AxncCT(oX37ED?xc(8*1*O(^tJvP4Ls1wI^W+B0C@68<QfqRkAM+LU&ucVmkZul1+coW1 z*{I!x^*>{yzSHf<@YQGNz4Tqijr#mr8J~vi4R<=J z=Y-oM?7`v8Jn!yA9#ICnY)A;lVVIY1?B(ctF7?ichW7F=&lusgii$8~4T-yjO2nBg zb3&K1%A6eJS^d^vn7s9ybrFu(=x0z@*`KaI%Vc{PZub0KnTPM5HZT=dxzBdd@KG0t zILx`@atlzaQa8=jP%`ll4$f$wsE|Y;0>dhZknm`e%%VmFV`R63`ji~X+yFM>5oaQ60q-xC{tQm4_;Fss+4jU zzxCKTT|vLz7HHGHW#l(yq0#uEmD3pL78(32BUVWDMuVNX-r?%Yh<|l`pC#GK*Ta^K z(7Vm|?H)Tj=c!MHD>PcZotZ1cF8XHzW%SZs6ui}$NPQjTPf;=&YY_YbPp#=9;S)fYLrxOY`tZ*zXdOx?FHN0@#_^77|%s36==M!iWd`Y#1bCcN%%rG~@rO?>w$F6=DKHDyQEYbNcQo z&;3DDx^UyMld4#-G@7Qa&4`h;4wg5X5Xn?{XsvSLkwQ>nCLF4%Ql|9+;ou^3K0H+O zLOCZZ`^ZThf$I`$mW6Qg{+$Ii&MQ%Dm+4WO^1TiD4r*n?ictSlwx^1sRGME((A=CH z#u__=)pB3|yds0`JACFots};bSZ`{G8lOBr&DusjUkWyIMVxz<7%l#MpZ9lEV99mi zu6B99rJ;@TyfZHFYotlrM#cY`9HxJv@Z4$XH`4C;x*)?tmh%`JrthIM?s3Ays!)4& z%Z_R$%tTMZo(*S4&%ShFANY_6cbw|eAKIRwGhc(OQqH_(c2VojwxU!FCUq7@z#LkF^!d8 z6twgm!lEZ1edDbD$Xdt%T(D@cMXyalQs=>^$ouqz8~%~X#X`xJ4k@oi>h~(tkoUb6 zt5fv0^lOcc>>OIC+0NiSTF+l=FSm&Q+BSdpwaWZV{zdT&F%Mp*lkUqK@A$IDrxS6d z;km})2UW(;O8p1P6{A>)MS^%nilkKv(gQfo;OT{Sf;)GI$@;Si;KVP7d&Zfs7O~xG z{LO}6?S4NvCY34`IZtL0ib?^Q&}_%gfZfjjKC>K^o*DxdH6!y^nvBWpTE)QmdmY9q zuYvO7lmY05t#3MxI#%W?ObwD%<)2kHv?io@#gOp?+@y(3=j6>(zdBO#VaA{S5ImkS zKKh`~oORxNVYat5x#RHG@@#ec%;&Y}q$yFuXl6@fTIBQ}@Ov1ePu=08bmvU_N6>0h3vT0G=@ISh zYqC*#u)l8{5p!HMih`6l(26%VVq3zAwKF*EO$>pYmP6zycKZ560j~5NeJ2(a1VT6Uek8qQ zd978YHid%bLYO}*fNyFMVm7d&S&O~b6S|Y4-XobzyK;~jg#=j~T?p^r+_H`zS*`en zr#UjN>ALKjee#`Uh+K(HCjx5hyU{XlSeSSlLQ#B6Lt2%X6htMphz77rf7THpC)}qFIILE~D-u|85%>3F#%-!?#*_pe zw#kz8Zy>2e3A_fi#g*Tyz9$;Ijr?c*&x@?Z#a5|rf9uF-?|Gjk&-4d&YkM^Pkt`GlG9PWu zNa4?x%dxfy(!otx8{!ouSt z^T&u<^4!k`k&rxYTJZYUKIw3+v(#{$=0urR%kp79xKRwhs2Vx7W0P3g^HISs;3jelx#$tf0Vk(63bX#uw{Tt1`S;IGZPbDsO(wYSwL^!-MF-ae7Ja7hPD{o~Ft=nYPZE-QC`tLlzuw(-Z@2Y>&Q!0zE8vMJ=mMW84|#iY&nj`$ufjFOyo6k0FQB5NOce_iNT+Tskw{=kG4tJrg>$8 z7>|J|-3Pp48Ey*&*Vl4uUK%?T@Wia^+w@VDV2hA=e>p-Ix$qj+Mioq1JV_U3;Yc=$ zIBy#$cC%+4G!TSiY<*4hhwk51rR;h59sfz3s7mc)<~_+A8)kvjpp)7u{i{GFe8B99 z;FHIoCwj(+?ZSG#X`NvCO@scfV%rI~H$fT8zo2GMTV;(cYP-8(!-r*`I9 z9&kc^4I-|Gr7iI3i?uL6yuAKD`Mm08F*L~* zs!H3U#^n6R@}Me-irC|X0DLk0PDrKVl?@lt3Rb0KLpe2!rRZ_3Cd2++x}~xL2S8)E z45po=4v9pGF`0T=dwLtFnyNfiZIcv9X!=H=f6D~>Mg8q##6#AD|9X#WZuK`Fw}VI; zHN#8J=R{q9^&TzD93plhu=~Vkc^u7>!lfy{3|$FngE;!)n>N<%xiVoJ%?4c#0lA+b z{*AHi2^!dW;_HPHg1m!C)mP=7n)G6lRx0$#^|eTM;z;=0XMukdGDVhaK|sy&-@ccO z@h%2NRq<)oA3x*YZI$1wdb!GA$T?m4oN~niQ__RZ{`aeef1!YWI6mlV4=l|-tUjD~ zvH#hZ5bO<^Ve0?vSd}78=33tdPUn__*o>4}jCCoE5_-fI1ceW&CB+Nz(x=M_V1ZQ8 z6ah=OJ#GN=?i`el(%LmW1#Q;W+v>{4oOp=h72kqeR;|;{$P1cWTncr3lqpY04&*zR z1_j)I<|595lgi>$*;n~6j2V)sOfyX%K`EoJC%b_x@|^AVnv>y6LnW}KmmVBab}XnD z>-dTYO)D+OH=T2d)xtH*%|B+|Yb5FuPMlyS_o3fkW>6*##M6-?Ci*Jrc#Wc2N`}HS z>BSej`3&d`zKm5gi@zEptn;bd)~3#+hvP!HXlz*$)qd40Ws^fYbA$3m@UswE1zK|5 zk9ta$L)6VU8}o*Ug6_X;JqnGoO4PxvU{0*RDT>hUijXBpEM zgK0797Yp3!i!{MLI#nzZ!?g;O9qe8l3l-bzj?s8WoX502d+kPIt@BnKa=z&CS8$%D zrXS*t?bd^rwJH%gUkAk;Cwk9ATby^$t)AbWzo|v|{-$gDeXz<6^DKPBp3*=&-|q91 z$rQMS>|XoPN22Fph>)~;TDFA8#g2tdk8i`>yI`a8S`m&{k2j)*fRdLgQ@$n87#f6k z6>uwZyW>T`D5h{s_P#VfG9%reng?KNrVd2ce*FgMgzc_slf&S7sTNaCHApj_gPeCP z;aJl{rH~?i>C!7=VGSCEVS)bFkDd#HYGF6!AMK3D%Y$g!WAN^1u>@RWgWGV@Y?)kM zFRTh`47W2a1Q%Qa1rRoUFJhn~GGD)Un=ibT(wHnrP-i|ry`4eO)oTKhV>J^z@bb)n z(PYjD?xQjmA#%asFLpyVfq!Lv#EW`j+-Fv46y|#S%k5o^7Uji9J0`SA$>wUv3zg6; z{I@J|6CGYRQf5tE0yDD4_38t zZ?0Yj(oPf1hU94;rw+5ra<>8?>0Y?!o@i4X#z?=h$IiAV5n0xgBIePaBH^ z_0wfl=%iI+93t~CmZZ25NhCp@06_IusA`^_be3*ls>jk!1HUU*$ zl6m=amGp~sj5G0u@xha7p?4ps&x)+%rqNkO6wtHk|2a$Jzfc%-S$t3m-s=xxY!6Ui zF8mLhLelWygHot!IVMM%*ek=*;Z<6)*f>-yv+=o61celHASStk0bOX%lMNpnRWpui z%l4ibJ<#-qEVf5ME+sYkgCW{7>!!DV5+jr~mEAIq5t9MBIf3QZ1I7^6?0Rbn9N36a%l86GAzqy^G1-lkbJ%h(2!m>X- zqhw)f_viNh)8OmRKeJ}#yy-HnYTx@-owQq^qbJ)e_&vMmqD*_#_1naZWFsL#$wjST zM1IA!6-RWmw_;53drNcF>Drsigf#QURx3dqBhgE-GTH(x+o2}xG8!L_BvG1cs##k? zJ%PPzTwH!bx+H~c3%c+_CMT82UZGWo&u>|t;=D&_tJ5H3k}$iyN}};vYBG1kVz=uBfslE zT+Z9JYZv8FMwq`EFWTbI!lp799tZzA4ND}}Z=ft;tA83@_CDi-?@_O}F>zc%wC%z7 z{nj?oh=uf`1PXT8ykLaQPeb*Ka#bQ>V2Ap%lLylJ6#i5 zt+Pezx^8z`HnsAkZ#cc%=d}F%c)T;|sdwR)>~wnZqg83Fgv6FTN3@0sq6&XY_>;=M zEh&wNs)e~+ie$CEr4Hbs(3{iKqH?1ikP=bXMl72D_bbd<1Gp1p5ai5``IZpt zKdvsZHMapzOr5w|zND`o6GxE0d4jq4h;yTrv`EM#>GI|4$4~YeWR_Lqer&$1%Y9UTTYOPivnegFgw})pY;rWE#5yU z=S?Y2q3Fo?g@JjmJA1v&OoBs#aCjToG9^ts? zxj#%K7iWnD9noW~W+n0$j-OG$E}q@`-fjX%ZXXjkUYG425nPN<2jM4_I)*Q?3uvKY z>k`7pQCgVx(7C=uH-)=x_fswrMXX15a-9M(Nr%~uCx{QvcO0o1eQA2?4d|$RKe<-f z3BF{E-;B8w{Xri&5f6{exSF;73ywba=$z}@OgTxbunboy5<4x0h>B58E6ymdspR)!wr*6{c7l>-z0- zaQ=>~T2#F~uWh^64b8UDz$i{Xa`%HwJroZ#yVUAZ9i{UDr zZM%oP$zvwx1+!4mr7+(hiW zTH^N6w_C+>PFfnis^f8k6+AEYa@FE_{Rwrj3!YUID~QM`4@avjb##?go2um>Y;@x5 zg57V~0V+9(l(496hzip?PA$h-i}QJ|_xPJN1?QRXa+Ai*?kp@k3iVrr=s_8)k%hLo zzeenv_&})^4h1)%M@P9(maf(Ac0fczA+8zX)$t_@uTuZ!(02)}W$Vu-+7;D^t!vv1R3wLFH)0s7NHq_yV6Np8?v@v#(9U;wI){z;T zzASFA=|)^LSYXybK()GL4xd!}K{K4;+ued+-ulV$r7Bi9Hr9}k1SM&828*g2{A|yF zv|-lBFqdO=(r(}wdl8R}gi_SLSL5`%;^CRoB{Kb)zt#5+g$-8XtKy=}!mO`f%(Dc) zGOu*jsmN%Y0nOVBVJJ9Q*Ok|bIP;RDeJ%4# zXYn;fLy;CT>sn>!2eRhbx`nQ}*TW=Kt|LW;!||mrKh>D#mu1FM6_|W@msLBZ4K=A= z^RD~O6{LHkz_XQQWAMG>RZ{o8m5?IrKBctyODv(lL>h^R#pLA%E8iy-79P1vkgb(q zr-;a0$x|o2M#lHM@SS%o`~v9n(o?x&MJVr`L*(=Q3Xw`E zA4-5Br6yKPr)ikCS{h=nH;u6}ef-ZcX-!&#c_b*QxdY`fN?VU_^FqH?ggmt* z!ebCVk;0dzgrcz(BPq65LaFwdRzEi`Lc#=R(Hczbl5=<%$Txl@PyX?Y%4(m!rX?l#-IKr3Y(&Qr&o zOvtq)ZIED=*eAhnJPl88_lFLx@;4e%Jr+`a`AtA_>SyZVCTG}-D~&C>yoZVHTOe1* zmEyJW%CX&IDR<3Y3}F`I*ocwLt1u5ydC{hhDq*);ZBE*#mPv`Qanef)bH1LpD4rOCGjk6Zm(m&H?!KY!F0s7M?;HdGuY z(0%0dIf#S$>-NnXETbqkIE$<{o%ashtzE&V$HUn>cY&sm!%zSR#H%5d1aolf3oQAz zgzx2R!B9Y9Us|~0bGzYWSw`@~(Of;A$F|NAbFno}M_(n0Vg*QUeFyNEO>3WVD$YoH z984AF5ir-}v>K={DMsPh%!y$~$FTWw#!W=xJbFn{tYq6!rD_wdUk*sExrYPra!cX} zv#W#So5_gWK*vo)XO10h4KAMob!x5nTWJ?d zs4ywlIEWvOAJb_q#M~%yA>yhb1kOg>+9pjv4jM$Lzx^-2>Hpo~JhqC*9KKnv`(l=+w%ETe>V6mUeQqA4(xA_|a) z!bFs)!n7Y1Wbd>xTp^^AA~v;pGIx(V^)P!#Kg!U<(}xz5j+QjD8!aPnHL)`wE_nq5 zed2oioY^&yxW0UH-baa2ATqj!tVp|*Mr2M2qQ1Oyn}5vZ=mJyZTvm-@i_*ZA+S?%r zCnxTQZiz69B}=m7i34-ccmOytG5#a0;&9`c4?9R-!X%Z(6(L^bkE*YCoT?WNvD;Og zNNcifj_t8~>VS=ILEJL6vg2tahqQu1ZJV#erFnsr2iT&_L@QPMvXm_+WcyEY>j$4V z7GkCt(@zW`6pNM{PZTHHFvP!Ado+qFVgDCzUlr8m!+wdApdonh;O_2Da3^T7K+vKs zw57!f?m^ooNN@@iDA3a4?rv>yDAEE2+EQD--QUj6&irpyzVGUt_r1$Z=FEAX=g0vv zd$gwGwx#u{o`Ze8h8eMWYD1OxoRD@7XCxJ_Rt8Wbpeubi0-bCfA{PSk>y|mU=CG8F zz;!uDdD4d1D+^>35!_H3$3UYrG6}|B|HQL%i8ygks%A0BJ&8F-u!GqJD5+s}Dr`CX z%J5ndj4J!t@ve|8=*a1$OHzK{RKPeQp~67x+nzzkbXTXT4S3Cl-O=LB>4dGWQHLr6xPS)l z5sxHcPB=L%wm^1LUnmy;Ce2w>zRzg{Cz|Atm(am_z9qQ?(iqb$Hp|>qWf=NsLsNSg zodQ)LbFN8CTd^M@*ja4I)Sc5Ya#)2p+~!yWxmDdzr-)3; zXSSK)@m-e+-9CSR{l`+@{~-#+$hn7RrV?wXLX_UdzAU1*L}3fvza#6l`s!tm6g*7U zifheeJcb-L#LTm+N1074Wz6cNBv>NE>*k9`AQ}W_ASiCMco3s&`N8(}X7~^C`+BIC zLaeyEA9~`Gwe8L4=w3yFZM>TKSE32DWTw+UIZ=7x6pHMG>x7CUx7U=)ymk~C?sazk zQLci#(2RMa*zt+du0?W=iazHPUX4hZr*sbtu~&dlCG|FOxMQ+xs=TK)orDNkN z$QLpqu&F?nHP09nh45zO)-1|JwbWVdT5n=zk9ADSlT{ArpXvwVUfTM6sa@h1S`26( zP3egt1Sbo|3JdHW>P#(&!ajq@2w2k9jpOMe7Sgi8p9f2ZMDCPbSD&~Cx% z>N&R*zwDM|a`b3{DUvoDMzJv%dGM}oysjWHtyt9FN6OHAd1^^kbWITpcmXf^f$)Hp zriXK~jenu*vrof|K zW8GM$RHC>%UYYFChtkSNnu|PS`pjVgWA}JXrBk?r33Do?yr3+UCZt?qE=x*vTt6)x z7c6DJie~9LD|VnatDh?W^fgi&EDWudqPsR%%)U7zT5LxcPq;c-)GNV6mu&ojhZhfCm)1%jat0t^|UNk{G8 z$P_U(hV_*b7R--yYyqCs2UCxLC>K1%-bUa^Yh=E^qLqx`^!@06XYrkju=*W$>;2eU zPjd9p7d>9Squl@0CGvmLhJQd|`PL(8X3BXhXf(U^O0sm8>)&dZ`v11^%i`2Aq9aQ& z8Dp?1*XklIoKLdX#8$B8kc>|vg_{vxjPyCDJMIqJ8WcVTaA?TsfPCSR5vmx0JIP&` znvHXFCyruz^#DrE@=}YnI_^$ag@s$P5FrJjwPqL9;!5v_srufYc2C#%5&nKnJ|XW{ z?1 z-ZGmy@jJ%dNu6Id$nOob23fwuf$3G|(~|ikg_qc#QV#c8l@qL>Is04IkIS9RImnWr zK07;y6?&GD2B|F<4@!Y2O82_x>+=@!-$yp90-BL?;+{?82h=s0cS_i~UQ}k!7BIy; zG@RL}D;#AL$I}NYW^|IwH@=<#o;z#9H&)?QKiu*X z&)hUaGVq!m@pFIstz6;2s)86*ppQhSJk#6Yve3-bXs1-@(Y%&PADAW;s%=^DcuY6@ zq)tZa`F+Izf|!pnj)i#j%bip7daA3Ig!Ubp8V07!EgDt3zI12rD2Qj_eD~F9wg7x^ zK1vNGPGfTe$&^n|HI^8~jK-h2;R(xdv%}TJB6XE?H*Uu^PHHF*g13e&Q!7kVeLgPk zt*o-48*yqEexSyO{tK?C3#jhDz*)6(v~T%x8IKbzd-LCh4c zq3fqJK_*WDq$`r-y-nW8Wb&XC%)!t9`S?5ke5-*%GOJ#~`rSJt;g}38Eek$hpA>A4 zM#G^)!f-!M*7-6lPYzJA=~&rW`izuL|IoOv8sJ7i~NRTm#U-v;to?<==-t+TvkF2fZAi=py0Yv_cL08 z&SMts(EPml>0kI(1eqK`cOR$6X z=6-~7x5xZmgUbA&oEx!Fw~}oX&dBb$PV1H@LILOvo~fx!YN7#=9!^;ai+yF(R10@U zEGO(SpgtWvia>{Y(1!ciBBa+15&+?JPDl?gPKl~|zY3C~o}3L$ZKo{)%-MXWD%Vz) z(b2f;h*Hd;rzlsdxz4jO_)usafo)zStL110&d{-J!UoyM%vK8#!HsKGjkHBbzU&piyS&hdxklZ-TGu)N?3|? ziP#I7PmmD zX##{7N4UqXWa}uP#q)T~)$-l0(SLd+Va=683kwWcxKDFnR^AtQ)<*5vAYVI5B=ff`6 zNRn{)c=$6gX6|j#hZl%Mv^72}YE%tsPolBeDOw=W)vXj9OY|dhr|wReYtNRlt5&u8 z93s{HgP+}T+{yWV$UY?fkPm00rSNUv`R;#!H~bG!AQktT@`!XlTS@f5flo_}$Al-DIh$XW|E!1xh{?g7F=bPv;mO`BZ_bTQgRrd&ivt9{8P5H& z{ZV<&j__3iN&C>F+6>$QPvC_c$s?s{Px&gTv;k@Sufv+D^z7dTk8sUDaS&0c=0)8S zY(j)*OQ*p@Qul}vowNvbB~_`Y7T1x9mdM6Neij|Df>$2Sutilc>zPQSlgc9HwI2Tg zYee_{a%Q_`^jph`1jn?{!-Br1bHPW!)>l&{{%5~N{m73TqqaMbzHXoA@gMAI)Yy0R zw^=BCuJ^Kkb}+S;=w$lK=bhy06HQm*4vp9LcNUi@L+MgzWGu{khN-B$%_+*|$R=Lm zg`Ce1F)NrW(~*_?$4@M;?cN)VmL8P1dhmt#`sn1vz7fU9sor^G+MWkz0?|`%vr{D{ z=_JnxFk$b+6Gc_qQH_V-ftbrWZ^KUsx}oQlWj@HJLoZ8*cxNBMZwzD2aWaRjT{3h* z&l@{f?(8WfRU$%PN>U8O{+1~^Lm@gH5$CtON%&Nz1TvwvFDMrJRa&ud9slNJ{G zOyT4uAvx6sC55ksA|73)!>B}UNgfm}$jjYejOe$HNQ9F->EMsFo?7Q|w zU_Xr@zMye4fox8XwG*4+H+gY;D}=@_i$wLA8I+Cn8OQQVcOmS7^_<-=vda7CQHjq5 z`w~ExvGoy(2JWQ`TF4OY=TG(We*3}C?PFs6KMz#f=9y{ZG_k80`Mz% z=53niA&3aM)f#Y4qTuSRfR7PzR-(F8L%M|~e{2eQ69^y(%EOoV7A+DEVS<I}~g z{&=YqYm*EC5Dqcm&sa343oQBNMNy8ttcO_Nn+Fo2%A>Sz0fS|;*z;p;A!oH_s#h;3jcSCga0`Z{2x94VG8K~ZheqCIc1*k zIca6zDwj9uF3?7_97dH&R!ceN`l51R6O{2^gZ6%%k9@VyD(ROZ6kkk`ie{ll&=@xf zlZ@MzHS0WI(xr=hPI5q@>+Wm&eO_N2gr0FrWU9SD%Pp3F7LjnEQ_^?J%hA^BprcLJ z9+kPo#U|UEgboRqwcHD_RTWn|kIY%U)QG6JVbKVDWSU@v;%`%sUJC~THnZ{Na1$eE z1x(q&8r33*7z$*jR@s8?zOvn-4g73B%n?nlZy`{0sj|0Teb^dyh|G#f;_8QMyz#P$Bj)s|bsS|@@Kbhld#gHo z;6F}QK}I00$fw|L#1t+RGeYd~61zCOy9eitXQfEQsHlTnIUI%Pjd(0%t`dw?-A0Dp zoy_1a=AB%QuGsLL+9+Y5x7UHF!qYC593e=Li;|(&Dt+*GVUHHS zLyE+>)8dDk0X?pMUp4F0Yfe9=J_=)^tRqv7=7oWQBWJdnK@S8xmFA(ZzgI*F=kb9h zYq^bp3u@QpT=Vh&Cnd;^O=^8Eys9DEIjaBeI;{ambCRQPr6$0{S#M~J=nWUR;gms z*rO2omY6nS>I#b$Jz4f)T6Cr^IawI$?VE|sPw*Q{LoM4xrEFO7k7$&odP3F~%D{w) zs=ClA7Dty(#ohOfp&H_@sG;si&aAaPs5H@LV|09fvoM3<#dpSUx`w_37Fk=0>VCPP zwU@?4mh@5jyVFW1)vSYO;TcIgHWi5$DxH#R(`lyxY&P_^eCB=9(TB8$|8_;=KcJv; zo2DQrhn%H^u=!D_u{D?9s+^06)LXry-gH+>pFRz&U*l3*dy0chiE@(SyQlFG!vMbq zDXAxRNXejNTF;FDHCt80ST%7Ouc$5_r9+Q^_w~A-Ejm|x4=BCIkaya?afPfyKWpQO zfPk^n^u-SA#%dbGZ;TO8uscYjj}wI>wj*5U#a}FTD%?xs(dC9tO2v|I1zhp-3}H>} zucYp6Uf5jW{bdV2hc-)OR?i1u*SVf;R@=JzgxQXU`;Y@{BC2^zyLK~Sd95#U~Qv8`!kQ z5}VNP5*Ye1=6{HCpZV-RqIefN>wRu_bcdfSrM!a^zc=TS%fRx8E99jtpYEUqzX+gD zQ8ZZRH1@|>{_-H@%4M@o!jr*)Mcgrpl9l~AmAT%D=-oy|9)`<1Fd|1s zNhM}JH=q@Vmsm-P{1627s&iEa*;&`*l-cqw0*kYWTudx?l8&6S0QUx8~D;n z+T8M10{I+-2#AauElgSRHh?=`vWJ#3fQYZaen-v!#HMu4*QUWl#>Ac`OM1a^q&1GVrsZ2%DizK`@=SRdy#a@>@WLQnu25pp*2j$3f~Yf zpA^i<^x2?a=LACru*F)Dm_k@r%||zF_FH<`m)<4|Q)Sk(Y1n%}p9i6TesKp>cAHfw z@!d1-ytUfMtFfiMd8O^r^`SL`a(aTGl5`h)g0cxhDU`NAXF@H<`L!5mJVpiNd>io;eRVH)ro5o?0^)9r!;;J?gw@#3CW`Wn#PePL` zO0I{E*;;T00&IAu9#NW$O|>Az5J#GL74QL_)bxT-dj&4H(2&G84?;VRDQ`QJMmYg^ zAWO|J6hSe}b68hB3V3jq7XASEjIL~i(3BD><{D4th}qE=HzIKm-`3T(&ttzM4!!Z8 z@_YNUohZa_kieB7cT`Iu)5`T~4@IVv(Yot;o$K=}oDy zEt9|mMY!+pokXBRvZr{sZNiXqSrb+kVeUB=1}%Lt_M6EW!i1w4Wl=I+fRV58t<&o~ zS){7>Mp*3w8stsUbdHD$Gln3!y zLy>%-allLBXn?i-lYX?EqVU5kd ztqV8Cgx?`jG3iQ{FfNN)o3Ye!JAR!OfbCE-(T_^WMbHJ0@K3gNOayt)C}q zGV?5S?91!i%z45J+xSRWI9O!;LurO#+$%2hvm=#@#pbKz+p_adkKAKP)0FZadsw}+ zf_f4Mvwp&C4%F-(GSosyFB7fphK1{0RCK(W>KYCW2$}CZG?rN1MTbb!{Kb~-rFTc6 zKAZA~YZI+JvqP1+7)c^OY+c;met!K{PR)Fe>fcWNK>IjN8tpxWpjG=S z%*zUj$`76sQb}ceSw8)@6NP``6iB}R_mgDPy2y>Q&!;69&0CeTYKhUUA4>Jr%Pjh^ z3Mmj?oXL1EhyoP~Pcz<%WkO&f61~ww9z>QR$U$`&==Xo2eTh4 zcgzT0jED{dEwRS27%sER)IFqe*99tF}7meA!!j%rQBDZ(ky(x-Gw z4RpzHh z?Uh99Ds1G@qGBt8az{)(tP{dUQ^2KOXHq+W(u6WDX-Q5lz22jMM0#E^xq<-Os}?!x zGLT+b>oqtGwRs7W_Wgv{eIKkzB0lX76BX_() zvy#vRZHn|V+1KeFgRc?7LoFGR~-1AG(nJJuf7udC7FW(y`u zeI}(5{Thjk@nSRtw5Vx6sv70SWm7W5MB`E5IgxD22pCJ{vgWO25#i*BjRoQyoc);F zqG`;qX>|4dx-tD4I(bvp?M@w0@YOl}dKsH_tI2ee%|fwpANJQo3NtJ%OPHi1=)o(- z?06jp>;%)PF7s{qFiSkf8Uj_r(&*ypNNI)W+Cl-(cUE2 zgLfUYA}l}v5m%03BDn%m&YcRlK&YvnsR(9>@;mQu#qvr8<5>)5dpQO@h&)^l!0jJ9E|pihB!EaX_d9WDHi`jr~J94?w0Mvro&g~^I) zV04jO^-2S)HaZbUT#E`2CVpEd&Iih%!)$kOtPH=FqlJ5-c3V*9ck{IR+lGiIvuuS8 zdPu8X*@deizPOl2j35e40>Lz4b~U|_%6+x}q+ zvB>$K;-*atCJ+;! z>7$b^F(zdKn`xRpk-3vkW6Kmg=t(_)J;%)Ql`O5d1?XSZ?bs zvwh+Nej!k$6_idnMNonEf?0Zbq+SKcypv@PxK3zTOchBnG^F6+A#p!Wm@F;Fx(Agj z0rEDA^mGa`vb`A~#e;Md4Rz;R6&-&SCRBgCCe@bM)%=nRTk?424VmWvrE7i_-?(h_ zG81FBp(}Pxd0I8jdq&8Q2`^!}n6mGDbeQ!3>$g)2OH48xue7Q-5E%D9VI21w9!BXb zwT1dVo1YnlKy%ns9c*e@C4Q6#-!@$Ifs6Ld%f(uB2K1IseHoS|o6B<@Ep-kp=Y4>L zKFj>1#0@7i$o#flUK*t!6Ph)>@bAU1*;IUMriz!s%C>AH^TMRkc#gw7wr0)3jde30 zQWErjW?+`umtqu)Y2>W+?5i{snknj0513Tq&@&Qjd}|HWhq!=nlA=f=0-loa`APB+ zNa%22u^r^K<*5M=UHmD5%qh}XbnF1M2WwRetC`mhm39cHi|Vq|u8#xMZQNVqc&TYo!lw1?2my8`c^r=oT&3ynGZTOa3~)J6C5txPfR4#;^4;9yalM zjsUl@Rrm;DUqZXzDe12jN7>v``^ETCiuDJ8MKYnb7*PzSSB{y5ttzRw64I{JBs_D} zR2bFnINCb1(P_gnRlIQbYp$>fXb!yBKxy7Bt3OY6aw9|j$ugd&$T8Q;|F8-=G!fb? zq3L}$(7LJg+_y2nI!~{2;)hz#*vi$m`G%#TA=u-q*s8mHbG?*Y+r;Uh%Zu?9Nu?pV z3zqod+aQcFX!bbTKw|nt(CV9mMg5?2^~dL;pT3XWb|1rw=tO{Vy&%hHzKHc4u&O`q zDA_bww2;5y=uHn25piw-52C(?oBZ)exX=a30&M{L+KK!^HL{PIJli3K`60V+-G%RI8=jcX-Fd~D zy~(>yvmWs|{r4;J9BsEmKo+4F9bx>LNHQ5X(P~C>B)4MZm(Hw$8M@w1qGpdXT`e<+ z*j_6hHR3HMLQLN3){zgYoh2X=*Z37o^Bq@HY1}_mfuS`l)=a0LVAVn->cB!Kf#6zg z0Nw{6BoXu|;tZ87h_=Ow-vGFLqW>B`BQdyW5@Iqje(nT`>rZJ>$$P!PNSmTeQ+4F- z>~$&YMaFET8m@9;I#SWR{<+oO{as)Slz}w?-wPSDwTmCp;k1QIZ5qX&Z*OWO8uG3< zJUwA6B%~Gi*r>Mw(i+=uw01_cn3Y}yy9B>_?oK$ZunY}4X`UYH`&k)jGVfec)%$YrnqeX%~)o%U$rNyC5|5`4EHaeBKMUcbB!AVn}tmcr||=ElRLv zG)br{6SiK$wJ#AW$4?=(Vb|^AP7{p+S^_(hgk@#d~m<%HU1j0%{ zUIoZ9k;RU#yX$wuKNW`eH8H8k(ee{Io5w{dJ>%scDIxi2Tt|ltCBF@BU*l6RN_|K` zk5A?*HT`EA_{XD+LmmT%3C&d|GZ|}d?u6RNcRvU#Awyu#&W2`+hs-ZxDv@PASv@?I zxwqwY@uxWj3=;5co{9jX4CEReti+xe01B-J(^-?m#&$##96?zqAUhKLlMc9|-1MlN$__Uz(@L;;HPKp}(R#VIK#P9pi zJNPX6xG%`*4@q5WWDZ20$2*q2^v&=RaF^GGN0wf219^rnY~XSCrMP)eKK7=G_tbPM z1T+`#byZQB>X+4?D>01g-)k$YtG)bfdFnIZ6meqCUC-=(BP_F7YL@WO7wvY-CMB0v z5I!q6J9@;SOYE`J98`lgPkGnn>|R_FojcsybeD}ge(^#%ceugE7|WrWavaKJE2`Oe zxBistR`^5f1moAyrE>ESGPeJL^JmcVcfpTg-U(EulStMjesN^c$1V$aGEZ!57ne)@ zO6J1aDt}9Y@Gm4Uhrs-Jk>9jcswAyF?8q{yVK|&Q)it}}+v^Rs;vG+q?? z=jR{;yR^q*g@Q5l?DLxHYeyb-h3pDlgew)dnwf(O$x_6niY4~u3Ao1+J)5htP`$`z zfZ6iX%Vd>ve{&#p8DHV+K`c&h{_1j$jAoHd>gCbn%Ji>sud-5wc4~RX7#kE61VrT3 zkZ*WsRkxUZnMSXC*i9#N2ea9R+L<3To~+hgrKoV%m9dqz&zHqn~r8w52kPVevAz<8Xv360wsL?zFB3}X;*>aLt3H@7bH z>%~niG2{vj8NhrCF?_%FI)Fs#zyV*_X>mR;z2v5!und1rj_9iVI*XYVc$hNmnfvmc z?YS6HoKn4Xubasg$juA#;KU6_v6E}TZm;9_-2<#qcRpL>Es-8iRvui)8BoyC#j0F0 zlRcuFc@5wktD567-tV_wXbWMDTejzy%6D!Z_z%bs{x??eU%dPS3Teo>+dX5`lK;)E zM{Y?C4Tlz7@4#R%|m zBtO!DPTgIvd+@ET!%^79zcWOA{ON}=s!Bb}X09Rdn5R!^H%2d*bqE)h|FGp^?qnof zS&X^@K{C{Yj&C^^0w8UFwmkZwa@!4~O-!Uju=@|8hQTWxJMBG+z;dpXTO;niZ&a z!pf}02+n~G#HD8kD`mEJkW6K7ibmXfp@yzpnWT8SY_>(C;7xjjZ;1&59w84KnPpr? z6b1fJwDCSg75TZxWan+oBJfV`m)FzRZVP}+O)Am6nJB%ayLs{3FI_sHFP{c!Nux)0 zlDh`9$2E&&%EG!hU7*<&M6WE*Gs)xTUo_j-F=IfnRiG4S;w^p}nrBd*!PJawOn@i# z;tpd(0Z)hlN)vIkJ&{9wIb`|*MIkZylPvtUUXqDz!%xDW#w?yi zKG_;93DavxfB!r=!Pg<%c4k+k=p~&G(bs`cA%+9)zWu6x;SOpvdW<%~@TpZ>k5MNR zX)usCO2hi{E;DZhy+TlN*k7pu5}x@zepScY$?j{jJHcR3Wz_Ip-An;tmH4*cPm)}| z4DRNMDPJKAG6svH@ehn$v}EMdnnB+usSBg?j{D)@(U|gf+dJgOQ|j zCX1l?hphB;&H-r7;9a}s!`3If)6~{^Z?o@5H~HsU(h;2RN`d;mSMV*UIGW=^kSD8f zW#-92zoLy5gPDAb+KQA9Lm5gW3TD)XSfI6JttoMyz#)ayz6y=EgU0hg3$fZ=r=x6Z zjt!b@Pzk z?9Gd#a#TtNN6m^bae-wD#Kq;&)=w_6z?WI@{;aA~(}s(?l>Y4j4Gpx$tUuEK_K9Jm zkpDLL_y-gwZatE>X$q4kH*ARHC1?D~TkTSE|3?{Qa8=7DjDIg0ZAh%(rdPT-6gfjA z!943GfCghYxdw>iPgjn2u22Otv*X8tnY(mRMzS3ydaal9 z3frE=8Hm^NgKfNFf>BWSatZ&hL~;0g%n@(GmJ8h%u3B1x*D9(H$Bk!3bol$s?(qI> zAG>JSJ(-e8v#YiHYwN5(-^2g_oCR-zAKo$iE6ROFbtz% z&}f!idg^+U1(3i`pT*$E2&t4Ja`0>)rkyp$>>zD_rZT3#$rVX3c%8FM;wwsb9;=fa zi(MB|n`nI9vbs`UQ6yI39Sr`>)9)-HL}(fuTli!wdnPPC5Du~y4cOw1!H|?nT-;k` zEv@8Sn4ViwMTN3 zsjXP>)KrNL$b%Eb92$6+*){s}SEm<(){d2})VnzXmglk>XWvzQeUoa}-JCbVQ=s+3 zEQ@=~T=CPI79yu43o6Oy|0#xmq_-@VQW!)Ev?X&D6G$YBduuJ!tY-AK3#x2+bj_^u z6eAITj*H&FX$(5DTsAVJWIQtj1Vz}#db^U)Yxr~7g<3}G%^+7B4eN+JZB3UbyfAo4 zy-0ON`Pv{i>X~g&qnZCeeJAYUPFkdxc)azUK!7oqxU4jlkjvzjy?j*Cv=zhD(|ZIv zL3(ApJQb3xQQD}AAXUCqc-UQghS9b6Nw@*tuf{=VWA=~X;`YFnw5;S98 z$Bl~0N)7mkzx?F)Q!eG!$+wk`G_MKGWl>se;_l@=0y};h(>=swR@}ygd9JzK>x zBEfhvDI&NB*q!%Jr2WGw5zWszR#HP*1(hqTR6M~RP`EL+`f`agk!eJpI`mw`n1&P9 zZN^&Ji=gJ`S8@s0BorTZ_rY^<6MX}B7d`0Q53Z}@dK>nFw?dK0FbDk9Pur@ILcr${ zzc5Ja)^s{ELur1SZ+tT=-cHN|QS#5gQ4&gC<8EcY7VsJo>R(PH+~(E4HBu~Cv2410 zVsD(sN)&jyLivt@%cOFl63u9HAkhfW zaR0A<=>LKf{MVoU0fl_z?6J5BW+wom>PO+iF*~U&x|P~L*jg=HFWE%-{@S1gMyzBM zS)E)_(^E9j)33LeB7uN{QfkSLnil~JW#cWpj7Y=$iM&^nQE$*ZM5#?9fpbyqM<9Fx{sx6ScJ}NXI$}Axi8(ou#&sZNdSrdCC z#Y2xzbPFIN^eKpo;)P+pL@IzqzuLad0!>9)18*Jk#Jugf2*?`q_Oa3BnWF|du~4eA zbtfLs5%LdIvkaXOlyTCEp|Wh#R+;>}`UIQwN0@De&&iR^uOI<(>KT9GEz_aMiWDv_ z-F=MDoP?hZb4bo{g~r_KH>y~+AnxFA#p@@}Db~Ub;;qCp897KD*ce)*arHKIoan$1ZyZbu ziKQS*+FOhnkyVAv47aT7{b2PnfVT|pv_&KL+}5iWl34Xcp?c3g#1wY@mN70<=FngE zWwifBWxRw_5f(8v7h~f1`sS8pO5D)Mx=>=nZtCW<<;qJ zo{YmJwDe0?B+H@R@7ZYlG``){lnITEp417a-G0q9N)bF`PY?2R8GvqPXng)66;&)L zJ|3zTW7AR~?p0cD;CnJyx=f$iDHcghGIl6-kC(Dt*Em!9(^EV-1HP2q7A)uh5)2P^ zk^wW24&*@%F4U>{5**{qkHD)ST_%9*M6n4U_0ZsyI3zBX=}<9i7~C|H@yJM4gl^Kd z+(BKADl_0sWm~-4-ibkLyO|JsQPxzm#AW;OAb{}P!grsh9Qk7*fKS?Gk!$-?DlGDz z1#G>}6pWRD%SFZ4caU1vX=PfqEXcx!M;qaR6VnR)R-+HRa+RO_Z8V)2zJ8v>6?#ac zww0pPSNygwIT=i#@pRup5glaEwAD#6PaY@RqtD4C!#g6Q-&+wq-^(>b*F~Cf-P6z; zB^~~&W+nE~+`GBL@%m+_7EM|{p7{y)rdejoGw-zIXKjk8QrA5h3fT0Ru_0xbV) zr;t3$KKoj=LGq`LW~=w_+v5X)ydgqI7oU@mSX7#Z$#cGR66u*s>%LS-QENpJ6W=rb zPJ^4g(JAk{x8LtH$&~xLZJyNR4o(ZN%7e5;xnO*5-+sT48&Q7D^aL$@NS2&0&Kf_L z38L9%wpdDcsP^p6?nkQwb4g^3lKyI&w>dVj z((NZL=4u@cbF*9a!W2VBFKWPDQAA>=hPAFCZbpPlk7|<~@5m-TWL-}67ue3zA0p@< z4QK8fXT?d<{^9)8k7gG8F{OAX@(BTVyHI)a*zK8>CI(AX&50Sz(y7654Z8A$+%WUd zw;JS3i8lw&klje$3p{w2sr`MCrOc%ziTTMZC3_n#f%FrT*|3t-+N)aqqF9adr0six z=>Q_+kOmkm5yHt4Q%xqy)fydZBxWy&r553a<`N)CW{w0YG~PE=AG?Rf<6r8=Q4`z2 zW}V6iv-JW7`{)@5JaaS*?$|;Ni>d!YMIOuZU{>$#)(PaBjsV`?BboMC%yp15=Z-f? z){5?dE>Z$fpsem-!*PNhR5BwMCE=UCtd|C`*bIj`t{fN@@waIG!Y16J;;I)Z#9Opz z3+GEPOd;cA4}lU4j+(?oXX9(^Ey=(X@7$`ctD`YG_^n+9=_p3yCvX?IdYq$pL= z26Nj}+uVxED}}Rr({Hjc;zbpZS&nXI4SB9qQ|Rbw22IN zV}79L`DRb3q{7$hJBA%sI{c&uGi9`%C?4T;nPyM2f`!Szx81%ARq4rUYpg*)J8@mR zWo9lwmCH64Yj5J@K;;<<=mqT$4&Xbt8g^8=4U~oZ2R`fQN28K1GOo0(S+|Mgr#HqNi1w5_d^ab}!SE2FnsQs${PK zr-;;@`>j5=)`v&$Y6N3Qm7o*^uBF|qdp87U=Fr49$Q?T&=@{n)L0DhN?2 zCE`3nrSvweT&3()!3jRYxeF;1nglVHNj!8CVyKlcl`sR5+zeP-9*u$XtS@o4mDT`e zbZTv1#7Ky6u=E#5!ruDBxfXA6_L6HYiA+y@0T+?Kp#F*(bIw<1UK*t3Qe;c8k(jS` zQm~3ap!A32*ERkh#nvfRPTZHaJg#K#+ZG^d@VaysXmlT=VhUgGK;x9qAjX-V5@`<# zLCI`2JWYzSf%ZMkslu zuG?6T7=COtvLJ$7_?KZs6H!EjO-eq~AiHt0SYWMdAEPKAdl1r?gsJt}nCrVLzvYTf zJ|WIJXQHk$6MODn!2NP*^6g?6wbgfQ*hjL&rt53?H*%rK6sc)?nn8-gI0c8Fi_>d#l7xJo@y);B^`Znd;47I+w@!PViG{bTlWhrk7v|l+>h&5qhkWLA1q`3A8p41Q)pN0G1}nX1gj5AFO#qvQ!#u z1b>rWYCRsBVycICrMLbV<@Ka_|F_Jbn@$hu>VIv)Z!!bl8uS9+OP-xwOr#DR-Q_nI zuUPF2mL!&?o9Nix?O6D)x&43O>px7v+k5ud%mlM>awB>>K5!C0zfEX7jq{Q|Y%ArB zFjQp~Ff4{S0G{~{Gt&=6WaVq)Sue#B#mHj8GkBZ;b1)}}_$g-#VO|NiFF$);@nwyY zt(0>}o6W-S@kC=O1CSz4uf_;C1fSqZKA<@f!S+aT&W*0MU`b)6*$w%QCK|O!2&s)2 zbL6mr(c4izZODA5X$!;=QHNm27e$`;KedK{aYc5qmg9ZH#+&d2m)>QjVf(aNNd@A`=OI;=GgmcvaTFPdMp2avFT6spJ+z(j2L}D-34hLON!% zS}lX{!#?9|dKf)z^{rzy|Me3j@bGz}>vGOW@~(-2e5HLma`J9&bIdDtg014VPa&NT z((B(LV0@t+qh-?rV&i3}ZPk<1JaT-3(YKl*UPE8(VBB{vl?Xb7d;`jj zc4GpYsAhi5LkC@zz{FUxC<|cCNBF6l)8q$-Z$(D*?#Ro2rrPfsk#7VXPU;p(jVv)w z7~6U6^)_su>t5j{l+VPa)tF7SH;8U$EhXvc?ZTd z@}*ul*XxH3ENr|a*6T8rKjnNPr=2QHm&q=)!7SEOI50uO>V9D6u=DawgJUU8xwxfB z_3+h(^$Uf#9J(B1Vb~N`BZl8nF?zSCskke~Bc&KaWSI-y(~pc`8fe#k4i_t(A?u>>xAN8ya0Br=P8X%uDfFZ(G7 z_sp_MVM7C(C}a>O7oc+{5-%;8y@ex6z*B@)i4bzd4E9~<%6LttT$%?rm5rd??5h>X z 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 + /// Stores the information needed to resume a conversation when a proactive message arrives. + /// + public class ContinuationParameters + { + public IIdentity ClaimsIdentity { get; set; } + + public string OAuthScope { get; set; } + + public ConversationReference ConversationReference { get; set; } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Proactive/WaitForProactiveDialog.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Proactive/WaitForProactiveDialog.cs new file mode 100644 index 0000000000..aa6cf4b55a --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Proactive/WaitForProactiveDialog.cs @@ -0,0 +1,76 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Concurrent; +using System.Security.Principal; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Schema; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Proactive +{ + public class WaitForProactiveDialog : Dialog + { + // Message to send to users when the bot receives a Conversation Update event + private const string NotifyMessage = "Navigate to {0}api/notify?user={1} to proactively message the user."; + private readonly ConcurrentDictionary _continuationParametersStore; + + private readonly Uri _serverUrl; + + public WaitForProactiveDialog(IHttpContextAccessor httpContextAccessor, ConcurrentDictionary continuationParametersStore) + { + _continuationParametersStore = continuationParametersStore; + _serverUrl = new Uri($"{httpContextAccessor.HttpContext.Request.Scheme}://{httpContextAccessor.HttpContext.Request.Host.Value}"); + } + + public override async Task BeginDialogAsync(DialogContext dc, object options = null, CancellationToken cancellationToken = default) + { + // Store a reference to the conversation. + AddOrUpdateContinuationParameters(dc.Context); + + // Render message with continuation link. + await dc.Context.SendActivityAsync(MessageFactory.Text(string.Format(NotifyMessage, _serverUrl, dc.Context.Activity.From.Id)), cancellationToken); + return EndOfTurn; + } + + public override async Task ContinueDialogAsync(DialogContext dc, CancellationToken cancellationToken = default) + { + if (dc.Context.Activity.Type == ActivityTypes.Event && dc.Context.Activity.Name == ActivityEventNames.ContinueConversation) + { + // We continued the conversation, forget the proactive reference. + _continuationParametersStore.TryRemove(dc.Context.Activity.From.Id, out _); + + // The continue conversation activity comes from the ProactiveController when the notification is received + await dc.Context.SendActivityAsync("We received a proactive message, ending the dialog", cancellationToken: cancellationToken); + + // End the dialog so the host gets an EoC + return new DialogTurnResult(DialogTurnStatus.Complete); + } + + // Keep waiting for a call to the ProactiveController. + await dc.Context.SendActivityAsync($"We are waiting for a proactive message. {string.Format(NotifyMessage, _serverUrl, dc.Context.Activity.From.Id)}", cancellationToken: cancellationToken); + + return EndOfTurn; + } + + /// + /// Helper to extract and store parameters we need to continue a conversation from a proactive message. + /// + /// A turnContext instance with the parameters we need. + private void AddOrUpdateContinuationParameters(ITurnContext turnContext) + { + var continuationParameters = new ContinuationParameters + { + ClaimsIdentity = turnContext.TurnState.Get(BotAdapter.BotIdentityKey), + ConversationReference = turnContext.Activity.GetConversationReference(), + OAuthScope = turnContext.TurnState.Get(BotAdapter.OAuthScopeKey) + }; + + _continuationParametersStore.AddOrUpdate(turnContext.Activity.From.Id, continuationParameters, (_, __) => continuationParameters); + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Sso/SsoSkillDialog.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Sso/SsoSkillDialog.cs new file mode 100644 index 0000000000..90add0aca3 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Sso/SsoSkillDialog.cs @@ -0,0 +1,119 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Builder.Dialogs.Choices; +using Microsoft.Bot.Schema; +using Microsoft.Extensions.Configuration; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Sso +{ + public class SsoSkillDialog : ComponentDialog + { + private readonly string _connectionName; + + public SsoSkillDialog(IConfiguration configuration) + : base(nameof(SsoSkillDialog)) + { + _connectionName = configuration.GetSection("SsoConnectionName")?.Value; + AddDialog(new SsoSkillSignInDialog(_connectionName)); + AddDialog(new ChoicePrompt("ActionStepPrompt")); + + var waterfallSteps = new WaterfallStep[] + { + PromptActionStepAsync, + HandleActionStepAsync, + PromptFinalStepAsync + }; + + AddDialog(new WaterfallDialog(nameof(WaterfallDialog), waterfallSteps)); + + InitialDialogId = nameof(WaterfallDialog); + } + + private async Task PromptActionStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + const string messageText = "What SSO action would you like to perform on the skill?"; + const string repromptMessageText = "That was not a valid choice, please select a valid choice."; + var options = new PromptOptions + { + Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), + RetryPrompt = MessageFactory.Text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput), + Choices = await GetPromptChoicesAsync(stepContext, cancellationToken) + }; + + // Prompt the user to select a skill. + return await stepContext.PromptAsync("ActionStepPrompt", options, cancellationToken); + } + + private async Task> GetPromptChoicesAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + var promptChoices = new List(); + var adapter = (IUserTokenProvider)stepContext.Context.Adapter; + var token = await adapter.GetUserTokenAsync(stepContext.Context, _connectionName, null, cancellationToken); + + if (token == null) + { + promptChoices.Add(new Choice("Login")); + } + else + { + promptChoices.Add(new Choice("Logout")); + promptChoices.Add(new Choice("Show token")); + } + + promptChoices.Add(new Choice("End")); + + return promptChoices; + } + + private async Task HandleActionStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + var action = ((FoundChoice)stepContext.Result).Value.ToLowerInvariant(); + + switch (action) + { + case "login": + return await stepContext.BeginDialogAsync(nameof(SsoSkillSignInDialog), null, cancellationToken); + + case "logout": + var adapter = (IUserTokenProvider)stepContext.Context.Adapter; + await adapter.SignOutUserAsync(stepContext.Context, _connectionName, cancellationToken: cancellationToken); + await stepContext.Context.SendActivityAsync("You have been signed out.", cancellationToken: cancellationToken); + return await stepContext.NextAsync(cancellationToken: cancellationToken); + + case "show token": + var tokenProvider = (IUserTokenProvider)stepContext.Context.Adapter; + var token = await tokenProvider.GetUserTokenAsync(stepContext.Context, _connectionName, null, cancellationToken); + if (token == null) + { + await stepContext.Context.SendActivityAsync("User has no cached token.", cancellationToken: cancellationToken); + } + else + { + await stepContext.Context.SendActivityAsync($"Here is your current SSO token: {token.Token}", cancellationToken: cancellationToken); + } + + return await stepContext.NextAsync(cancellationToken: cancellationToken); + + case "end": + return new DialogTurnResult(DialogTurnStatus.Complete); + + default: + // This should never be hit since the previous prompt validates the choice + throw new InvalidOperationException($"Unrecognized action: {action}"); + } + } + + private async Task PromptFinalStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + // Restart the dialog (we will exit when the user says end) + return await stepContext.ReplaceDialogAsync(InitialDialogId, null, cancellationToken); + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Sso/SsoSkillSignInDialog.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Sso/SsoSkillSignInDialog.cs new file mode 100644 index 0000000000..61c57301dc --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Sso/SsoSkillSignInDialog.cs @@ -0,0 +1,47 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Schema; +using Microsoft.Extensions.Configuration; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Sso +{ + public class SsoSkillSignInDialog : ComponentDialog + { + public SsoSkillSignInDialog(string connectionName) + : base(nameof(SsoSkillSignInDialog)) + { + AddDialog(new OAuthPrompt(nameof(OAuthPrompt), new OAuthPromptSettings + { + ConnectionName = connectionName, + Text = "Sign in to the Skill using AAD", + Title = "Sign In" + })); + AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[] { SignInStepAsync, DisplayTokenAsync })); + InitialDialogId = nameof(WaterfallDialog); + } + + private async Task SignInStepAsync(WaterfallStepContext context, CancellationToken cancellationToken) + { + // This prompt won't show if the user is signed in to the host using SSO. + return await context.BeginDialogAsync(nameof(OAuthPrompt), null, cancellationToken); + } + + private async Task DisplayTokenAsync(WaterfallStepContext context, CancellationToken cancellationToken) + { + if (!(context.Result is TokenResponse result)) + { + await context.Context.SendActivityAsync("No token was provided for the skill.", cancellationToken: cancellationToken); + } + else + { + await context.Context.SendActivityAsync($"Here is your token for the skill: {result.Token}", cancellationToken: cancellationToken); + } + + return await context.EndDialogAsync(null, cancellationToken); + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Update/UpdateDialog.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Update/UpdateDialog.cs new file mode 100644 index 0000000000..1ec0a5217d --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Update/UpdateDialog.cs @@ -0,0 +1,85 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Connector; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Update +{ + public class UpdateDialog : ComponentDialog + { + private readonly List _updateSupported = new List + { + Channels.Msteams, + Channels.Slack, + Channels.Telegram + }; + + private readonly Dictionary _updateTracker; + + public UpdateDialog() + : base(nameof(UpdateDialog)) + { + _updateTracker = new Dictionary(); + AddDialog(new ConfirmPrompt(nameof(ConfirmPrompt))); + AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[] { HandleUpdateDialog, FinalStepAsync })); + InitialDialogId = nameof(WaterfallDialog); + } + + private async Task HandleUpdateDialog(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + var channel = stepContext.Context.Activity.ChannelId; + if (_updateSupported.Contains(channel)) + { + if (_updateTracker.ContainsKey(stepContext.Context.Activity.Conversation.Id)) + { + var conversationId = stepContext.Context.Activity.Conversation.Id; + var tuple = _updateTracker[conversationId]; + var activity = MessageFactory.Text($"This message has been updated {tuple.Item2} time(s)."); + tuple.Item2 += 1; + activity.Id = tuple.Item1; + _updateTracker[conversationId] = tuple; + await stepContext.Context.UpdateActivityAsync(activity, cancellationToken); + } + else + { + var id = await stepContext.Context.SendActivityAsync(MessageFactory.Text("Here is the original activity"), cancellationToken); + _updateTracker.Add(stepContext.Context.Activity.Conversation.Id, (id.Id, 1)); + } + } + else + { + await stepContext.Context.SendActivityAsync(MessageFactory.Text($"Delete is not supported in the {channel} channel."), cancellationToken); + return new DialogTurnResult(DialogTurnStatus.Complete); + } + + // Ask if we want to update the activity again. + const string messageText = "Do you want to update the activity again?"; + const string repromptMessageText = "Please select a valid answer"; + var options = new PromptOptions + { + Prompt = MessageFactory.Text(messageText, messageText), + RetryPrompt = MessageFactory.Text(repromptMessageText, repromptMessageText), + }; + + // Ask the user to enter their name. + return await stepContext.PromptAsync(nameof(ConfirmPrompt), options, cancellationToken); + } + + private async Task FinalStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + var tryAnother = (bool)stepContext.Result; + if (tryAnother) + { + return await stepContext.ReplaceDialogAsync(InitialDialogId, cancellationToken: cancellationToken); + } + + _updateTracker.Remove(stepContext.Context.Activity.Conversation.Id); + return new DialogTurnResult(DialogTurnStatus.Complete); + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Middleware/SsoSaveStateMiddleware.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Middleware/SsoSaveStateMiddleware.cs new file mode 100644 index 0000000000..f0fb5e5bad --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Middleware/SsoSaveStateMiddleware.cs @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Schema; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Middleware +{ + /// + /// A middleware that ensures conversation state is saved when an OAuthCard is returned by the skill. + /// + /// + /// In SSO, the host will send an Invoke with the token if SSO is enabled. + /// This middleware saves the state of the bot before sending out the SSO card to ensure the dialog state + /// is persisted and in the right state if an InvokeActivity comes back from the Host with the token. + /// + public class SsoSaveStateMiddleware : IMiddleware + { + private readonly ConversationState _conversationState; + + public SsoSaveStateMiddleware(ConversationState conversationState) + { + _conversationState = conversationState; + } + + public async Task OnTurnAsync(ITurnContext turnContext, NextDelegate next, CancellationToken cancellationToken = new CancellationToken()) + { + // Register outgoing handler. + turnContext.OnSendActivities(OutgoingHandler); + + // Continue processing messages. + await next(cancellationToken); + } + + private async Task OutgoingHandler(ITurnContext turnContext, List activities, Func> next) + { + foreach (var activity in activities) + { + // Check if any of the outgoing activities has an OAuthCard. + if (activity.Attachments != null && activity.Attachments.Any(attachment => attachment.ContentType == OAuthCard.ContentType)) + { + // Save any state changes so the dialog stack is ready for SSO exchanges. + await _conversationState.SaveChangesAsync(turnContext, false, CancellationToken.None); + } + } + + return await next(); + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Program.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Program.cs new file mode 100644 index 0000000000..31e4c693d2 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Program.cs @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot +{ + public class Program + { + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }); + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Properties/launchSettings.json b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Properties/launchSettings.json new file mode 100644 index 0000000000..f3bdbffd6c --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Properties/launchSettings.json @@ -0,0 +1,28 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:35420/", + "sslPort": 0 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": false, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "WaterfallSkillBotDotNet": { + "commandName": "Project", + "launchBrowser": true, + "applicationUrl": "http://localhost:35420/", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/SkillAdapterWithErrorHandler.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/SkillAdapterWithErrorHandler.cs new file mode 100644 index 0000000000..a4098b193c --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/SkillAdapterWithErrorHandler.cs @@ -0,0 +1,100 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Bot.Builder.TraceExtensions; +using Microsoft.Bot.Connector.Authentication; +using Microsoft.Bot.Schema; +using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Middleware; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot +{ + public class SkillAdapterWithErrorHandler : BotFrameworkHttpAdapter + { + private readonly ConversationState _conversationState; + private readonly ILogger _logger; + + public SkillAdapterWithErrorHandler(IConfiguration configuration, ICredentialProvider credentialProvider, AuthenticationConfiguration authConfig, ILogger logger, ConversationState conversationState) + : base(configuration, credentialProvider, authConfig, logger: logger) + { + _conversationState = conversationState ?? throw new ArgumentNullException(nameof(conversationState)); + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + OnTurnError = HandleTurnError; + + // Add autosave middleware for SSO. + Use(new SsoSaveStateMiddleware(_conversationState)); + } + + private async Task HandleTurnError(ITurnContext turnContext, Exception exception) + { + // Log any leaked exception from the application. + _logger.LogError(exception, $"[OnTurnError] unhandled error : {exception.Message}"); + + await SendErrorMessageAsync(turnContext, exception); + await SendEoCToParentAsync(turnContext, exception); + await ClearConversationStateAsync(turnContext); + } + + private async Task SendErrorMessageAsync(ITurnContext turnContext, Exception exception) + { + try + { + // Send a message to the user. + var errorMessageText = "The skill encountered an error or bug."; + var errorMessage = MessageFactory.Text(errorMessageText + Environment.NewLine + exception, errorMessageText, InputHints.IgnoringInput); + errorMessage.Value = exception; + await turnContext.SendActivityAsync(errorMessage); + + errorMessageText = "To continue to run this bot, please fix the bot source code."; + errorMessage = MessageFactory.Text(errorMessageText, errorMessageText, InputHints.ExpectingInput); + await turnContext.SendActivityAsync(errorMessage); + + // Send a trace activity, which will be displayed in the Bot Framework Emulator. + // Note: we return the entire exception in the value property to help the developer; + // this should not be done in production. + await turnContext.TraceActivityAsync("OnTurnError Trace", exception.ToString(), "https://www.botframework.com/schemas/error", "TurnError"); + } + catch (Exception ex) + { + _logger.LogError(ex, $"Exception caught in SendErrorMessageAsync : {ex}"); + } + } + + private async Task SendEoCToParentAsync(ITurnContext turnContext, Exception exception) + { + try + { + // Send an EndOfConversation activity to the skill caller with the error to end the conversation, + // and let the caller decide what to do. + var endOfConversation = Activity.CreateEndOfConversationActivity(); + endOfConversation.Code = "SkillError"; + endOfConversation.Text = exception.Message; + await turnContext.SendActivityAsync(endOfConversation); + } + catch (Exception ex) + { + _logger.LogError(ex, $"Exception caught in SendEoCToParentAsync : {ex}"); + } + } + + private async Task ClearConversationStateAsync(ITurnContext turnContext) + { + try + { + // Delete the conversationState for the current conversation to prevent the + // bot from getting stuck in a error-loop caused by being in a bad state. + // ConversationState should be thought of as similar to "cookie-state" for a Web page. + await _conversationState.DeleteAsync(turnContext); + } + catch (Exception ex) + { + _logger.LogError(ex, $"Exception caught on attempting to Delete ConversationState : {ex}"); + } + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Startup.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Startup.cs new file mode 100644 index 0000000000..7405acb74d --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Startup.cs @@ -0,0 +1,103 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Collections.Concurrent; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.BotFramework; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Bot.Builder.Integration.AspNet.Core.Skills; +using Microsoft.Bot.Builder.Skills; +using Microsoft.Bot.Connector.Authentication; +using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Authentication; +using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Bots; +using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs; +using Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Proactive; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot +{ + public class Startup + { + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + + public IConfiguration Configuration { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + services.AddControllers() + .AddNewtonsoftJson(); + + // Configure credentials. + services.AddSingleton(); + if (!string.IsNullOrEmpty(Configuration["ChannelService"])) + { + // Register a ConfigurationChannelProvider -- this is only for Azure Gov. + services.AddSingleton(); + } + + // Register AuthConfiguration to enable custom claim validation. + services.AddSingleton(sp => new AuthenticationConfiguration { ClaimsValidator = new Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Authentication.AllowedCallersClaimsValidator(sp.GetService()) }); + + // Register the Bot Framework Adapter with error handling enabled. + // Note: some classes use the base BotAdapter so we add an extra registration that pulls the same instance. + services.AddSingleton(); + services.AddSingleton(sp => sp.GetService()); + + // Register the skills conversation ID factory, the client and the request handler. + services.AddSingleton(); + services.AddHttpClient(); + services.AddSingleton(); + + // Create the storage we'll be using for User and Conversation state. (Memory is great for testing purposes.) + services.AddSingleton(); + + // Create the Conversation state. (Used by the Dialog system itself.) + services.AddSingleton(); + + // The Dialog that will be run by the bot. + services.AddSingleton(); + + // The Bot needs an HttpClient to download and upload files. + services.AddHttpClient(); + + // Create a global dictionary for our ConversationReferences (used by proactive) + services.AddSingleton>(); + + // Create the bot as a transient. In this case the ASP Controller is expecting an IBot. + services.AddTransient>(); + + // Gives us access to HttpContext so we can create URLs with the host name. + services.AddHttpContextAccessor(); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseDefaultFiles() + .UseStaticFiles() + .UseWebSockets() + .UseRouting() + .UseAuthorization() + .UseEndpoints(endpoints => + { + endpoints.MapControllers(); + }); + + // Uncomment this to support HTTPS. + // app.UseHttpsRedirection(); + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/WaterfallSkillBot.csproj b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/WaterfallSkillBot.csproj new file mode 100644 index 0000000000..a534c34089 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/WaterfallSkillBot.csproj @@ -0,0 +1,46 @@ + + + + netcoreapp3.1 + latest + Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot + Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot + cca62821-0d1d-4b4d-8e5b-8ee934324a2c + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + + + + + + + + + + + + + Always + + + Always + + + PreserveNewest + + + + \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/appsettings.json b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/appsettings.json new file mode 100644 index 0000000000..aeba3b0618 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/appsettings.json @@ -0,0 +1,20 @@ +{ + "MicrosoftAppId": "", + "MicrosoftAppPassword": "", + "ConnectionName": "TestOAuthProvider", + "SsoConnectionName": "", + "ChannelService": "", + // This is a comma separate list with the App IDs that will have access to the skill. + // This setting is used in AllowedCallersClaimsValidator. + // Examples: + // [ "*" ] allows all callers. + // [ "AppId1", "AppId2" ] only allows access to parent bots with "AppId1" and "AppId2". + "AllowedCallers": [ "*" ], + + "SkillHostEndpoint": "http://localhost:35420/api/skills", + "EchoSkillInfo": { + "Id": "EchoSkillBot", + "AppId": "", + "SkillEndpoint": "http://localhost:35400/api/messages" + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/wwwroot/default.htm b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/wwwroot/default.htm new file mode 100644 index 0000000000..53166d3e75 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/wwwroot/default.htm @@ -0,0 +1,420 @@ + + + + + + + WaterfallSkillBot + + + + + +
    +
    +
    +
    WaterfallSkillBot Bot
    +
    +
    +
    +
    + +
    + + + \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/wwwroot/images/architecture-resize.png b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/wwwroot/images/architecture-resize.png new file mode 100644 index 0000000000000000000000000000000000000000..e65f0f7332b79a3f65cd5a4ea6c33c7b5f979f25 GIT binary patch literal 137666 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%0DQgMmd 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

    paC55m_>ryRNvbU22jABe5< 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 zak + + + true + + + + + $(NoWarn);SA1412;NU1701 + + + + + + \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/.gitignore b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/.gitignore new file mode 100644 index 0000000000..eaa9cf70cc --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/.gitignore @@ -0,0 +1,5 @@ +# files generated during the lubuild process +# IMPORTANT: In regular composer bots the generated folder should be excluded and regenerated on the build server +# or by the dev running composer locally. But in this case we include it so we don't have to run bf luis:cross-train +# in the build server +# generated/ diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Controllers/BotController.cs b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Controllers/BotController.cs new file mode 100644 index 0000000000..c9bccdb753 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Controllers/BotController.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime.Settings; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +namespace EchoSkillBotComposer.Controllers +{ + // This ASP Controller is created to handle a request. Dependency Injection will provide the Adapter and IBot + // implementation at runtime. Multiple different IBot implementations running at different endpoints can be + // achieved by specifying a more specific type for the bot constructor argument. + [ApiController] + public class BotController : ControllerBase + { + private readonly Dictionary _adapters = new Dictionary(); + private readonly IBot _bot; + private readonly ILogger _logger; + + public BotController( + IConfiguration configuration, + IEnumerable adapters, + IBot bot, + ILogger logger) + { + _bot = bot ?? throw new ArgumentNullException(nameof(bot)); + _logger = logger; + + var adapterSettings = configuration.GetSection(AdapterSettings.AdapterSettingsKey).Get>() ?? new List(); + adapterSettings.Add(AdapterSettings.CoreBotAdapterSettings); + + foreach (var adapter in adapters ?? throw new ArgumentNullException(nameof(adapters))) + { + var settings = adapterSettings.FirstOrDefault(s => s.Enabled && s.Type == adapter.GetType().FullName); + + if (settings != null) + { + _adapters.Add(settings.Route, adapter); + } + } + } + + [HttpPost] + [HttpGet] + [Route("api/{route}")] + public async Task PostAsync(string route) + { + if (string.IsNullOrEmpty(route)) + { + _logger.LogError($"PostAsync: No route provided."); + throw new ArgumentNullException(nameof(route)); + } + + if (_adapters.TryGetValue(route, out IBotFrameworkHttpAdapter adapter)) + { + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogInformation($"PostAsync: routed '{route}' to {adapter.GetType().Name}"); + } + + // Delegate the processing of the HTTP POST to the appropriate adapter. + // The adapter will invoke the bot. + await adapter.ProcessAsync(Request, Response, _bot).ConfigureAwait(false); + } + else + { + _logger.LogError($"PostAsync: No adapter registered and enabled for route {route}."); + throw new KeyNotFoundException($"No adapter registered and enabled for route {route}."); + } + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Controllers/SkillController.cs b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Controllers/SkillController.cs new file mode 100644 index 0000000000..88c36f2b1c --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Controllers/SkillController.cs @@ -0,0 +1,62 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Integration.AspNet.Core; +using Microsoft.Bot.Schema; +using Microsoft.Extensions.Logging; + +namespace EchoSkillBotComposer.Controllers +{ + ///

    + /// A controller that handles skill replies to the bot. + /// + [ApiController] + [Route("api/skills")] + public class SkillController : ChannelServiceController + { + private readonly ILogger _logger; + + public SkillController(ChannelServiceHandlerBase handler, ILogger logger) + : base(handler) + { + _logger = logger; + } + + public override Task ReplyToActivityAsync(string conversationId, string activityId, Activity activity) + { + try + { + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogDebug($"ReplyToActivityAsync: conversationId={conversationId}, activityId={activityId}"); + } + + return base.ReplyToActivityAsync(conversationId, activityId, activity); + } + catch (Exception ex) + { + _logger.LogError(ex, $"ReplyToActivityAsync: {ex}"); + throw; + } + } + + public override Task SendToConversationAsync(string conversationId, Activity activity) + { + try + { + if (_logger.IsEnabled(LogLevel.Debug)) + { + _logger.LogDebug($"SendToConversationAsync: conversationId={conversationId}"); + } + + return base.SendToConversationAsync(conversationId, activity); + } + catch (Exception ex) + { + _logger.LogError(ex, $"SendToConversationAsync: {ex}"); + throw; + } + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/EchoSkillBotComposer.botproj b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/EchoSkillBotComposer.botproj new file mode 100644 index 0000000000..247bba8b18 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/EchoSkillBotComposer.botproj @@ -0,0 +1,5 @@ +{ + "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/main/Composer/packages/server/schemas/botproject.schema", + "name": "EchoSkillBotComposer", + "skills": {} +} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/EchoSkillBotComposer.csproj b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/EchoSkillBotComposer.csproj new file mode 100644 index 0000000000..d3c03d57e2 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/EchoSkillBotComposer.csproj @@ -0,0 +1,19 @@ + + + + netcoreapp3.1 + OutOfProcess + 720cb418-9c27-47a3-b473-1b8771598297 + + + + PreserveNewest + + + + + + + + + \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Program.cs b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Program.cs new file mode 100644 index 0000000000..b9cc275c38 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Program.cs @@ -0,0 +1,33 @@ +using System; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime.Extensions; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; + +namespace EchoSkillBotComposer +{ + public class Program + { + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureAppConfiguration((hostingContext, builder) => + { + var applicationRoot = AppDomain.CurrentDomain.BaseDirectory; + var environmentName = hostingContext.HostingEnvironment.EnvironmentName; + var settingsDirectory = "settings"; + + builder.AddBotRuntimeConfiguration(applicationRoot, settingsDirectory, environmentName); + + builder.AddCommandLine(args); + }) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }); + } +} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Properties/launchSettings.json b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Properties/launchSettings.json new file mode 100644 index 0000000000..5e20497847 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:35410/", + "sslPort": 0 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": false, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "EchoSkillBotComposerDotNet": { + "commandName": "Project", + "launchBrowser": false, + "applicationUrl": "http://localhost:35410", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/README.md b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/README.md new file mode 100644 index 0000000000..b48822a762 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/README.md @@ -0,0 +1,27 @@ +# Welcome to your new bot + +This bot project was created using the Empty Bot template, and contains a minimal set of files necessary to have a working bot. + +## Next steps + +### Start building your bot + +Composer can help guide you through getting started building your bot. From your bot settings page (the wrench icon on the left navigation rail), click on the rocket-ship icon on the top right for some quick navigation links. + +Another great resource if you're just getting started is the **[guided tutorial](https://docs.microsoft.com/en-us/composer/tutorial/tutorial-introduction)** in our documentation. + +### Connect with your users + +Your bot comes pre-configured to connect to our Web Chat and DirectLine channels, but there are many more places you can connect your bot to - including Microsoft Teams, Telephony, DirectLine Speech, Slack, Facebook, Outlook and more. Check out all of the places you can connect to on the bot settings page. + +### Publish your bot to Azure from Composer + +Composer can help you provision the Azure resources necessary for your bot, and publish your bot to them. To get started, create a publishing profile from your bot settings page in Composer (the wrench icon on the left navigation rail). Make sure you only provision the optional Azure resources you need! + +### Extend your bot with packages + +From Package Manager in Composer you can find useful packages to help add additional pre-built functionality you can add to your bot - everything from simple dialogs & custom actions for working with specific scenarios to custom adapters for connecting your bot to users on clients like Facebook or Slack. + +### Extend your bot with code + +You can also extend your bot with code - simply open up the folder that was generated for you in the location you chose during the creation process with your favorite IDE (like Visual Studio). You can do things like create custom actions that can be used during dialog flows, create custom middleware to pre-process (or post-process) messages, and more. See [our documentation](https://aka.ms/bf-extend-with-code) for more information. diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Startup.cs b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Startup.cs new file mode 100644 index 0000000000..dae17d4283 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/Startup.cs @@ -0,0 +1,56 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.StaticFiles; +using Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime.Extensions; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +namespace EchoSkillBotComposer +{ + public class Startup + { + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + + public IConfiguration Configuration { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + services.AddControllers().AddNewtonsoftJson(); + services.AddBotRuntime(Configuration); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseDefaultFiles(); + + // Set up custom content types - associating file extension to MIME type. + var provider = new FileExtensionContentTypeProvider(); + provider.Mappings[".lu"] = "application/vnd.microsoft.lu"; + provider.Mappings[".qna"] = "application/vnd.microsoft.qna"; + + // Expose static files in manifests folder for skill scenarios. + app.UseStaticFiles(new StaticFileOptions + { + ContentTypeProvider = provider + }); + app.UseWebSockets(); + app.UseRouting(); + app.UseAuthorization(); + app.UseEndpoints(endpoints => + { + endpoints.MapControllers(); + }); + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/dialogs/emptyBot/knowledge-base/en-us/emptyBot.en-us.qna b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/dialogs/emptyBot/knowledge-base/en-us/emptyBot.en-us.qna new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/echoskillbotcomposer.dialog b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/echoskillbotcomposer.dialog new file mode 100644 index 0000000000..5abf65c6df --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/echoskillbotcomposer.dialog @@ -0,0 +1,115 @@ +{ + "$kind": "Microsoft.AdaptiveDialog", + "$designer": { + "name": "EchoSkillBotComposer", + "description": "", + "id": "A79tBe" + }, + "autoEndDialog": true, + "defaultResultProperty": "dialog.result", + "triggers": [ + { + "$kind": "Microsoft.OnConversationUpdateActivity", + "$designer": { + "id": "376720" + }, + "actions": [ + { + "$kind": "Microsoft.Foreach", + "$designer": { + "id": "518944", + "name": "Loop: for each item" + }, + "itemsProperty": "turn.Activity.membersAdded", + "actions": [ + { + "$kind": "Microsoft.IfCondition", + "$designer": { + "id": "641773", + "name": "Branch: if/else" + }, + "condition": "string(dialog.foreach.value.id) != string(turn.Activity.Recipient.id)", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "$designer": { + "id": "859266", + "name": "Send a response" + }, + "activity": "${SendActivity_Greeting()}" + } + ] + } + ] + } + ] + }, + { + "$kind": "Microsoft.OnUnknownIntent", + "$designer": { + "id": "mb2n1u" + }, + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "$designer": { + "id": "kMjqz1" + }, + "activity": "${SendActivity_DidNotUnderstand()}" + } + ] + }, + { + "$kind": "Microsoft.OnMessageActivity", + "$designer": { + "id": "esM1JY" + }, + "actions": [ + { + "$kind": "Microsoft.IfCondition", + "$designer": { + "id": "SK42Qt" + }, + "condition": "turn.activity.text != 'end' && turn.activity.text != 'stop'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "$designer": { + "id": "HHAFpn" + }, + "activity": "${SendActivity_HHAFpn()}" + }, + { + "$kind": "Microsoft.SendActivity", + "$designer": { + "id": "dZ2zwR" + }, + "activity": "${SendActivity_dZ2zwR()}" + }, + { + "$kind": "Microsoft.EndTurn", + "$designer": { + "id": "YzX0HZ" + } + } + ], + "elseActions": [ + { + "$kind": "Microsoft.SendActivity", + "$designer": { + "id": "xvwomh" + }, + "activity": "${SendActivity_xvwomh()}" + } + ] + } + ] + } + ], + "generator": "EchoSkillBotComposer.lg", + "id": "EchoSkillBotComposer", + "recognizer": { + "$kind": "Microsoft.RegexRecognizer", + "intents": [] + } +} diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/generated/interruption/EchoSkillBotComposer.en-us.lu b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/generated/interruption/EchoSkillBotComposer.en-us.lu new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/generated/interruption/EchoSkillBotComposer.en-us.qna b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/generated/interruption/EchoSkillBotComposer.en-us.qna new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/knowledge-base/en-us/echoskillbotcomposer.en-us.qna b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/knowledge-base/en-us/echoskillbotcomposer.en-us.qna new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/language-generation/en-us/common.en-us.lg b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/language-generation/en-us/common.en-us.lg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/language-generation/en-us/echoskillbotcomposer.en-us.lg b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/language-generation/en-us/echoskillbotcomposer.en-us.lg new file mode 100644 index 0000000000..f49f92107e --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/language-generation/en-us/echoskillbotcomposer.en-us.lg @@ -0,0 +1,31 @@ +[import](common.lg) + +# SendActivity_Greeting() +[Activity + Text = Welcome to EchoSkillBotComposerDotNet. +] + +# SendActivity_DidNotUnderstand() +[Activity + Text = ${SendActivity_DidNotUnderstand_text()} +] + +# SendActivity_DidNotUnderstand_text() +- Sorry, I didn't get that. +# SendActivity_HHAFpn() +[Activity + Text = Echo: ${turn.activity.text} + InputHint = acceptingInput +] + +# SendActivity_dZ2zwR() +[Activity + Text = Say "end" or "stop" and I'll end the conversation and back to the parent. + InputHint = acceptingInput +] + +# SendActivity_xvwomh() +[Activity + Text = Ending conversation from the skill... + InputHint = acceptingInput +] diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/language-understanding/en-us/echoskillbotcomposer.en-us.lu b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/language-understanding/en-us/echoskillbotcomposer.en-us.lu new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/manifests/echoskillbotcomposer-manifest.json b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/manifests/echoskillbotcomposer-manifest.json new file mode 100644 index 0000000000..25205b9286 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/manifests/echoskillbotcomposer-manifest.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/skills/v2.1/skill-manifest.json", + "$id": "EchoSkillBotComposerDotNet", + "name": "EchoSkillBotComposerDotNet", + "version": "1.0", + "description": "This is a skill for echoing what the user sent to the bot (using Composer with the dotnet runtime).", + "publisherName": "Microsoft", + "privacyUrl": "https://microsoft.com/privacy", + "copyright": "Copyright (c) Microsoft Corporation. All rights reserved.", + "license": "https://github.com/microsoft/BotFramework-FunctionalTests/blob/main/LICENSE", + "tags": [ + "echo" + ], + "endpoints": [ + { + "name": "default", + "protocol": "BotFrameworkV3", + "description": "Localhost endpoint for the skill (on port 35410)", + "endpointUrl": "http://localhost:35410/api/messages", + "msAppId": "00000000-0000-0000-0000-000000000000" + } + ] +} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/media/create-azure-resource-command-line.png b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/media/create-azure-resource-command-line.png new file mode 100644 index 0000000000000000000000000000000000000000..497eb8e649d4f1d2d456d337246d01805132ac86 GIT binary patch literal 13842 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 VJv|35z<=2CX{u{u@3nB{{{s`&K;i%Z literal 0 HcmV?d00001 diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/media/publish-az-login.png b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/media/publish-az-login.png new file mode 100644 index 0000000000000000000000000000000000000000..4e721354bccb6d4a83aa70ca55da1b571c2886db GIT binary patch literal 16726 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 13" + ] + }, + "integerExpression": { + "$role": "expression", + "title": "Integer or expression", + "description": "Integer constant or expression to evaluate.", + "oneOf": [ + { + "type": "integer", + "title": "Integer", + "description": "Integer constant.", + "default": 0, + "examples": [ + 15 + ] + }, + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=user.age" + ] + } + ] + }, + "Microsoft.ActivityTemplate": { + "$role": "implements(Microsoft.IActivityTemplate)", + "title": "Microsoft activity template", + "type": "object", + "required": [ + "template", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "template": { + "title": "Template", + "description": "Language Generator template to use to create the activity", + "type": "string" + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ActivityTemplate" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.AdaptiveDialog": { + "$role": "implements(Microsoft.IDialog)", + "title": "Adaptive dialog", + "description": "Flexible, data driven dialog that can adapt to the conversation.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "pattern": "^(?!(=)).*", + "title": "Id", + "description": "Optional dialog ID." + }, + "autoEndDialog": { + "$ref": "#/definitions/booleanExpression", + "title": "Auto end dialog", + "description": "If set to true the dialog will automatically end when there are no further actions. If set to false, remember to manually end the dialog using EndDialog action.", + "default": true + }, + "defaultResultProperty": { + "type": "string", + "title": "Default result property", + "description": "Value that will be passed back to the parent dialog.", + "default": "dialog.result" + }, + "dialogs": { + "type": "array", + "title": "Dialogs", + "description": "Dialogs added to DialogSet.", + "items": { + "$kind": "Microsoft.IDialog", + "title": "Dialog", + "description": "Dialog to add to DialogSet.", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "recognizer": { + "$kind": "Microsoft.IRecognizer", + "title": "Recognizer", + "description": "Input recognizer that interprets user input into intent and entities.", + "$ref": "#/definitions/Microsoft.IRecognizer" + }, + "generator": { + "$kind": "Microsoft.ILanguageGenerator", + "title": "Language generator", + "description": "Language generator that generates bot responses.", + "$ref": "#/definitions/Microsoft.ILanguageGenerator" + }, + "selector": { + "$kind": "Microsoft.ITriggerSelector", + "title": "Selector", + "description": "Policy to determine which trigger is executed. Defaults to a 'best match' selector (optional).", + "$ref": "#/definitions/Microsoft.ITriggerSelector" + }, + "triggers": { + "type": "array", + "description": "List of triggers defined for this dialog.", + "title": "Triggers", + "items": { + "$kind": "Microsoft.ITrigger", + "title": "Event triggers", + "description": "Event triggers for handling events.", + "$ref": "#/definitions/Microsoft.ITrigger" + } + }, + "schema": { + "title": "Schema", + "description": "Schema to fill in.", + "anyOf": [ + { + "$ref": "#/definitions/schema" + }, + { + "type": "string", + "title": "Reference to JSON schema", + "description": "Reference to JSON schema .dialog file." + } + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.AdaptiveDialog" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.AgeEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Age entity recognizer", + "description": "Recognizer which recognizes age.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.AgeEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.Ask": { + "$role": [ + "implements(Microsoft.IDialog)", + "extends(Microsoft.SendActivity)" + ], + "title": "Send activity to ask a question", + "description": "This is an action which sends an activity to the user when a response is expected", + "type": "object", + "$policies": { + "interactive": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "expectedProperties": { + "$ref": "#/definitions/arrayExpression", + "title": "Expected properties", + "description": "Properties expected from the user.", + "examples": [ + [ + "age", + "name" + ] + ], + "items": { + "type": "string", + "title": "Name", + "description": "Name of the property" + } + }, + "defaultOperation": { + "$ref": "#/definitions/stringExpression", + "title": "Default operation", + "description": "Sets the default operation that will be used when no operation is recognized in the response to this Ask.", + "examples": [ + "Add()", + "Remove()" + ] + }, + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action." + }, + "activity": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Activity", + "description": "Activity to send.", + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.Ask" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.AttachmentInput": { + "$role": [ + "implements(Microsoft.IDialog)", + "extends(Microsoft.InputDialog)" + ], + "title": "Attachment input dialog", + "description": "Collect information - Ask for a file or image.", + "$policies": { + "interactive": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "type": "object", + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "defaultValue": { + "$role": "expression", + "title": "Default value", + "description": "'Property' will be set to the object or the result of this expression when max turn count is exceeded.", + "oneOf": [ + { + "$ref": "#/definitions/botframework.json/definitions/Attachment", + "title": "Object", + "description": "Attachment object." + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "value": { + "$role": "expression", + "title": "Value", + "description": "'Property' will be set to the object or the result of this expression unless it evaluates to null.", + "oneOf": [ + { + "$ref": "#/definitions/botframework.json/definitions/Attachment", + "title": "Object", + "description": "Attachment object." + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "outputFormat": { + "$role": "expression", + "title": "Output format", + "description": "Attachment output format.", + "oneOf": [ + { + "type": "string", + "title": "Standard format", + "description": "Standard output formats.", + "enum": [ + "all", + "first" + ], + "default": "first" + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "default": false, + "examples": [ + false, + "=user.isVip" + ] + }, + "prompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Initial prompt", + "description": "Message to send to collect information.", + "examples": [ + "What is your birth date?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "unrecognizedPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Unrecognized prompt", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "invalidPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Invalid prompt", + "description": "Message to send when the user input does not meet any validation expression.", + "examples": [ + "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "defaultValueResponse": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Default value response", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "maxTurnCount": { + "$ref": "#/definitions/integerExpression", + "title": "Max turn count", + "description": "Maximum number of re-prompt attempts to collect information.", + "default": 3, + "minimum": 0, + "maximum": 2147483647, + "examples": [ + 3, + "=settings.xyz" + ] + }, + "validations": { + "type": "array", + "title": "Validation expressions", + "description": "Expression to validate user input.", + "items": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Expression which needs to met for the input to be considered valid", + "examples": [ + "int(this.value) > 1 && int(this.value) <= 150", + "count(this.value) < 300" + ] + } + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", + "examples": [ + "$birthday", + "dialog.${user.name}", + "=f(x)" + ] + }, + "alwaysPrompt": { + "$ref": "#/definitions/booleanExpression", + "title": "Always prompt", + "description": "Collect information even if the specified 'property' is not empty.", + "default": false, + "examples": [ + false, + "=$val" + ] + }, + "allowInterruptions": { + "$ref": "#/definitions/booleanExpression", + "title": "Allow Interruptions", + "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", + "default": true, + "examples": [ + true, + "=user.xyz" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.AttachmentInput" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.BeginDialog": { + "$role": "implements(Microsoft.IDialog)", + "title": "Begin a dialog", + "description": "Begin another dialog.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "dialog": { + "oneOf": [ + { + "$kind": "Microsoft.IDialog", + "pattern": "^(?!(=)).*", + "title": "Dialog", + "$ref": "#/definitions/Microsoft.IDialog" + }, + { + "$ref": "#/definitions/equalsExpression" + } + ], + "title": "Dialog name", + "description": "Name of the dialog to call." + }, + "options": { + "$ref": "#/definitions/objectExpression", + "title": "Options", + "description": "One or more options that are passed to the dialog that is called.", + "examples": [ + { + "arg1": "=expression" + } + ], + "additionalProperties": { + "type": "string", + "title": "Options", + "description": "Options for dialog." + } + }, + "activityProcessed": { + "$ref": "#/definitions/booleanExpression", + "title": "Activity processed", + "description": "When set to false, the dialog that is called can process the current activity.", + "default": true + }, + "resultProperty": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property to store any value returned by the dialog that is called.", + "examples": [ + "dialog.userName" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.BeginDialog" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.BeginSkill": { + "$role": "implements(Microsoft.IDialog)", + "title": "Begin a skill", + "description": "Begin a remote skill.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the skill dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + true, + "=f(x)" + ] + }, + "activityProcessed": { + "$ref": "#/definitions/booleanExpression", + "title": "Activity processed", + "description": "When set to false, the skill will be started using the activity in the current turn context instead of the activity in the Activity property.", + "default": true, + "examples": [ + true, + "=f(x)" + ] + }, + "resultProperty": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property to store any value returned by the dialog that is called.", + "examples": [ + "dialog.userName" + ] + }, + "botId": { + "$ref": "#/definitions/stringExpression", + "title": "Skill host bot ID", + "description": "The Microsoft App ID that will be calling the skill.", + "default": "=settings.MicrosoftAppId" + }, + "skillHostEndpoint": { + "$ref": "#/definitions/stringExpression", + "title": "Skill host", + "description": "The callback Url for the skill host.", + "default": "=settings.skillHostEndpoint", + "examples": [ + "https://mybot.contoso.com/api/skills/" + ] + }, + "connectionName": { + "$ref": "#/definitions/stringExpression", + "title": "OAuth connection name (SSO)", + "description": "The OAuth Connection Name, that would be used to perform Single SignOn with a skill.", + "default": "=settings.connectionName" + }, + "skillAppId": { + "$ref": "#/definitions/stringExpression", + "title": "Skill App Id", + "description": "The Microsoft App ID for the skill." + }, + "skillEndpoint": { + "$ref": "#/definitions/stringExpression", + "title": "Skill endpoint ", + "description": "The /api/messages endpoint for the skill.", + "examples": [ + "https://myskill.contoso.com/api/messages/" + ] + }, + "activity": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Activity", + "description": "The activity to send to the skill.", + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "allowInterruptions": { + "$ref": "#/definitions/booleanExpression", + "title": "Allow interruptions", + "description": "A boolean expression that determines whether the parent should be allowed to interrupt the skill.", + "default": true, + "examples": [ + true, + "=user.xyz" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.BeginSkill" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.BreakLoop": { + "$role": "implements(Microsoft.IDialog)", + "title": "Break loop", + "description": "Stop executing this loop", + "type": "object", + "required": [ + "$kind" + ], + "$policies": { + "lastAction": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.BreakLoop" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.CancelAllDialogs": { + "$role": "implements(Microsoft.IDialog)", + "title": "Cancel all dialogs", + "description": "Cancel all active dialogs. All dialogs in the dialog chain will need a trigger to capture the event configured in this action.", + "type": "object", + "$policies": { + "lastAction": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "activityProcessed": { + "$ref": "#/definitions/booleanExpression", + "title": "Activity processed", + "description": "When set to false, the caller dialog is told it should process the current activity.", + "default": true + }, + "eventName": { + "$ref": "#/definitions/stringExpression", + "title": "Event name", + "description": "Name of the event to emit." + }, + "eventValue": { + "$ref": "#/definitions/valueExpression", + "title": "Event value", + "description": "Value to emit with the event (optional).", + "additionalProperties": true + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.CancelAllDialogs" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.CancelDialog": { + "$role": "implements(Microsoft.IDialog)", + "title": "Cancel all dialogs", + "description": "Cancel all active dialogs. All dialogs in the dialog chain will need a trigger to capture the event configured in this action.", + "type": "object", + "$policies": { + "lastAction": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "activityProcessed": { + "$ref": "#/definitions/booleanExpression", + "title": "Activity processed", + "description": "When set to false, the caller dialog is told it should process the current activity.", + "default": true + }, + "eventName": { + "$ref": "#/definitions/stringExpression", + "title": "Event name", + "description": "Name of the event to emit." + }, + "eventValue": { + "$ref": "#/definitions/valueExpression", + "title": "Event value", + "description": "Value to emit with the event (optional).", + "additionalProperties": true + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.CancelDialog" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ChannelMentionEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)" + ], + "title": "Channel mention entity recognizer", + "description": "Promotes mention entities passed by a channel via the activity.entities into recognizer result.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ChannelMentionEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ChoiceInput": { + "$role": [ + "implements(Microsoft.IDialog)", + "extends(Microsoft.InputDialog)" + ], + "title": "Choice input dialog", + "description": "Collect information - Pick from a list of choices", + "type": "object", + "$policies": { + "interactive": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "defaultValue": { + "$ref": "#/definitions/stringExpression", + "title": "Default value", + "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", + "examples": [ + "hello world", + "Hello ${user.name}", + "=concat(user.firstname, user.lastName)" + ] + }, + "value": { + "$ref": "#/definitions/stringExpression", + "title": "Value", + "description": "'Property' will be set to the value of this expression unless it evaluates to null.", + "examples": [ + "hello world", + "Hello ${user.name}", + "=concat(user.firstname, user.lastName)" + ] + }, + "outputFormat": { + "$role": "expression", + "title": "Output format", + "description": "Sets the desired choice output format (either value or index into choices).", + "oneOf": [ + { + "type": "string", + "title": "Standard", + "description": "Standard output format.", + "enum": [ + "value", + "index" + ], + "default": "value" + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "choices": { + "$role": "expression", + "title": "Array of choices", + "description": "Choices to choose from.", + "oneOf": [ + { + "type": "array", + "title": "Simple choices", + "description": "Simple choices to choose from.", + "items": [ + { + "type": "string", + "title": "Simple choice", + "description": "One choice for choice input." + } + ] + }, + { + "type": "array", + "title": "Structured choices", + "description": "Choices that allow full control.", + "items": [ + { + "type": "object", + "title": "Structured choice", + "description": "Structured choice to choose from.", + "properties": { + "value": { + "type": "string", + "title": "Value", + "description": "Value to return when this choice is selected." + }, + "action": { + "$ref": "#/definitions/botframework.json/definitions/CardAction", + "title": "Action", + "description": "Card action for the choice." + }, + "synonyms": { + "type": "array", + "title": "Synonyms", + "description": "List of synonyms to recognize in addition to the value (optional).", + "items": { + "type": "string", + "title": "Synonym", + "description": "Synonym for value." + } + } + } + } + ] + }, + { + "$ref": "#/definitions/stringExpression" + } + ] + }, + "defaultLocale": { + "$ref": "#/definitions/stringExpression", + "title": "Default locale", + "description": "The default locale to use to parse confirmation choices if there is not one passed by the caller.", + "default": "en-us", + "examples": [ + "en-us" + ] + }, + "style": { + "$role": "expression", + "title": "List style", + "description": "Sets the ListStyle to control how choices are rendered.", + "oneOf": [ + { + "type": "string", + "title": "List style", + "description": "Standard list style.", + "enum": [ + "none", + "auto", + "inline", + "list", + "suggestedAction", + "heroCard" + ], + "default": "auto" + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "choiceOptions": { + "title": "Choice options", + "description": "Sets the choice options used for controlling how choices are combined.", + "oneOf": [ + { + "type": "object", + "title": "Object", + "description": "Choice options object.", + "properties": { + "inlineSeparator": { + "type": "string", + "title": "Inline separator", + "description": "Character used to separate individual choices when there are more than 2 choices", + "default": ", " + }, + "inlineOr": { + "type": "string", + "title": "Inline or", + "description": "Separator inserted between the choices when there are only 2 choices", + "default": " or " + }, + "inlineOrMore": { + "type": "string", + "title": "Inline or more", + "description": "Separator inserted between the last 2 choices when their are more than 2 choices.", + "default": ", or " + }, + "includeNumbers": { + "type": "boolean", + "title": "Include numbers", + "description": "If true, 'inline' and 'list' list style will be prefixed with the index of the choice.", + "default": true + } + } + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "recognizerOptions": { + "title": "Recognizer options", + "description": "Sets how to recognize choices in the response", + "oneOf": [ + { + "type": "object", + "title": "Object", + "description": "Options for recognizer.", + "properties": { + "noValue": { + "type": "boolean", + "title": "No value", + "description": "If true, the choices value field will NOT be search over", + "default": false + }, + "noAction": { + "type": "boolean", + "title": "No action", + "description": "If true, the choices action.title field will NOT be searched over", + "default": false + }, + "recognizeNumbers": { + "type": "boolean", + "title": "Recognize numbers", + "description": "If true, the number recognizer will be used to recognize an index response (1,2,3...) to the prompt.", + "default": true + }, + "recognizeOrdinals": { + "type": "boolean", + "title": "Recognize ordinals", + "description": "If true, the ordinal recognizer will be used to recognize ordinal response (first/second/...) to the prompt.", + "default": true + } + } + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "default": false, + "examples": [ + false, + "=user.isVip" + ] + }, + "prompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Initial prompt", + "description": "Message to send to collect information.", + "examples": [ + "What is your birth date?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "unrecognizedPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Unrecognized prompt", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "invalidPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Invalid prompt", + "description": "Message to send when the user input does not meet any validation expression.", + "examples": [ + "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "defaultValueResponse": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Default value response", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "maxTurnCount": { + "$ref": "#/definitions/integerExpression", + "title": "Max turn count", + "description": "Maximum number of re-prompt attempts to collect information.", + "default": 3, + "minimum": 0, + "maximum": 2147483647, + "examples": [ + 3, + "=settings.xyz" + ] + }, + "validations": { + "type": "array", + "title": "Validation expressions", + "description": "Expression to validate user input.", + "items": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Expression which needs to met for the input to be considered valid", + "examples": [ + "int(this.value) > 1 && int(this.value) <= 150", + "count(this.value) < 300" + ] + } + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", + "examples": [ + "$birthday", + "dialog.${user.name}", + "=f(x)" + ] + }, + "alwaysPrompt": { + "$ref": "#/definitions/booleanExpression", + "title": "Always prompt", + "description": "Collect information even if the specified 'property' is not empty.", + "default": false, + "examples": [ + false, + "=$val" + ] + }, + "allowInterruptions": { + "$ref": "#/definitions/booleanExpression", + "title": "Allow Interruptions", + "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", + "default": true, + "examples": [ + true, + "=user.xyz" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ChoiceInput" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ConditionalSelector": { + "$role": "implements(Microsoft.ITriggerSelector)", + "title": "Conditional trigger selector", + "description": "Use a rule selector based on a condition", + "type": "object", + "required": [ + "condition", + "ifTrue", + "ifFalse", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Expression to evaluate" + }, + "ifTrue": { + "$kind": "Microsoft.ITriggerSelector", + "$ref": "#/definitions/Microsoft.ITriggerSelector" + }, + "ifFalse": { + "$kind": "Microsoft.ITriggerSelector", + "$ref": "#/definitions/Microsoft.ITriggerSelector" + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ConditionalSelector" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ConfirmationEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Confirmation entity recognizer", + "description": "Recognizer which recognizes confirmation choices (yes/no).", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ConfirmationEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ConfirmInput": { + "$role": [ + "implements(Microsoft.IDialog)", + "extends(Microsoft.InputDialog)" + ], + "title": "Confirm input dialog", + "description": "Collect information - Ask for confirmation (yes or no).", + "type": "object", + "$policies": { + "interactive": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "outputFormat": { + "$ref": "#/definitions/valueExpression", + "title": "Output format", + "description": "Optional expression to use to format the output.", + "examples": [ + "=concat('confirmation:', this.value)" + ] + }, + "defaultLocale": { + "$ref": "#/definitions/stringExpression", + "title": "Default locale", + "description": "The Default locale or an expression which provides the default locale to use as default if not found in the activity.", + "default": "en-us", + "examples": [ + "en-us" + ] + }, + "style": { + "$role": "expression", + "title": "List style", + "description": "Sets the ListStyle to control how choices are rendered.", + "oneOf": [ + { + "type": "string", + "title": "Standard style", + "description": "Standard style for rendering choices.", + "enum": [ + "none", + "auto", + "inline", + "list", + "suggestedAction", + "heroCard" + ], + "default": "auto" + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "choiceOptions": { + "title": "Choice options", + "description": "Choice Options or expression which provides Choice Options to control display choices to the user.", + "oneOf": [ + { + "type": "object", + "title": "Choice options", + "description": "Choice options.", + "properties": { + "inlineSeparator": { + "type": "string", + "title": "Inline separator", + "description": "Text to separate individual choices when there are more than 2 choices", + "default": ", " + }, + "inlineOr": { + "type": "string", + "title": "Inline or", + "description": "Text to be inserted between the choices when their are only 2 choices", + "default": " or " + }, + "inlineOrMore": { + "type": "string", + "title": "Inline or more", + "description": "Text to be inserted between the last 2 choices when their are more than 2 choices.", + "default": ", or " + }, + "includeNumbers": { + "type": "boolean", + "title": "Include numbers", + "description": "If true, inline and list style choices will be prefixed with the index of the choice.", + "default": true + } + } + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "defaultValue": { + "$ref": "#/definitions/booleanExpression", + "title": "Default value", + "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", + "examples": [ + true, + "=user.age > 3" + ] + }, + "value": { + "$ref": "#/definitions/booleanExpression", + "title": "Value", + "description": "'Property' will be set to the value of this expression unless it evaluates to null.", + "examples": [ + true, + "=user.isVip" + ] + }, + "confirmChoices": { + "$role": "expression", + "title": "Array of choice objects", + "description": "Array of simple or structured choices.", + "oneOf": [ + { + "type": "array", + "title": "Simple choices", + "description": "Simple choices to confirm from.", + "items": [ + { + "type": "string", + "title": "Simple choice", + "description": "Simple choice to confirm." + } + ] + }, + { + "type": "array", + "title": "Structured choices", + "description": "Structured choices for confirmations.", + "items": [ + { + "type": "object", + "title": "Choice", + "description": "Choice to confirm.", + "properties": { + "value": { + "type": "string", + "title": "Value", + "description": "Value to return when this choice is selected." + }, + "action": { + "$ref": "#/definitions/botframework.json/definitions/CardAction", + "title": "Action", + "description": "Card action for the choice." + }, + "synonyms": { + "type": "array", + "title": "Synonyms", + "description": "List of synonyms to recognize in addition to the value (optional).", + "items": { + "type": "string", + "title": "Synonym", + "description": "Synonym for choice." + } + } + } + } + ] + }, + { + "$ref": "#/definitions/stringExpression" + } + ] + }, + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "default": false, + "examples": [ + false, + "=user.isVip" + ] + }, + "prompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Initial prompt", + "description": "Message to send to collect information.", + "examples": [ + "What is your birth date?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "unrecognizedPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Unrecognized prompt", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "invalidPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Invalid prompt", + "description": "Message to send when the user input does not meet any validation expression.", + "examples": [ + "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "defaultValueResponse": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Default value response", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "maxTurnCount": { + "$ref": "#/definitions/integerExpression", + "title": "Max turn count", + "description": "Maximum number of re-prompt attempts to collect information.", + "default": 3, + "minimum": 0, + "maximum": 2147483647, + "examples": [ + 3, + "=settings.xyz" + ] + }, + "validations": { + "type": "array", + "title": "Validation expressions", + "description": "Expression to validate user input.", + "items": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Expression which needs to met for the input to be considered valid", + "examples": [ + "int(this.value) > 1 && int(this.value) <= 150", + "count(this.value) < 300" + ] + } + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", + "examples": [ + "$birthday", + "dialog.${user.name}", + "=f(x)" + ] + }, + "alwaysPrompt": { + "$ref": "#/definitions/booleanExpression", + "title": "Always prompt", + "description": "Collect information even if the specified 'property' is not empty.", + "default": false, + "examples": [ + false, + "=$val" + ] + }, + "allowInterruptions": { + "$ref": "#/definitions/booleanExpression", + "title": "Allow Interruptions", + "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", + "default": true, + "examples": [ + true, + "=user.xyz" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ConfirmInput" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ContinueConversation": { + "$role": "implements(Microsoft.IDialog)", + "title": "Continue conversation (Queue)", + "description": "Continue a specific conversation (via StorageQueue implementation).", + "type": "object", + "required": [ + "conversationReference", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "conversationReference": { + "$ref": "#/definitions/objectExpression", + "title": "Conversation Reference", + "description": "A conversation reference. (NOTE: Minimum required values or channelId, conversation).", + "examples": [ + { + "channelId": "skype", + "serviceUrl": "http://smba.skype.com", + "conversation": { + "id": "11111" + }, + "bot": { + "id": "22222" + }, + "user": { + "id": "33333" + }, + "locale": "en-us" + } + ] + }, + "value": { + "$ref": "#/definitions/valueExpression", + "title": "Value", + "description": "Value to send in the activity.value." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ContinueConversation" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ContinueConversationLater": { + "$role": "implements(Microsoft.IDialog)", + "title": "Continue conversation later (Queue)", + "description": "Continue conversation at later time (via StorageQueue implementation).", + "type": "object", + "required": [ + "date", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "date": { + "$ref": "#/definitions/stringExpression", + "title": "Date", + "description": "Date in the future as a ISO string when the conversation should continue.", + "examples": [ + "=addHours(utcNow(), 1)" + ] + }, + "value": { + "$ref": "#/definitions/valueExpression", + "title": "Value", + "description": "Value to send in the activity.value." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ContinueConversationLater" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ContinueLoop": { + "$role": "implements(Microsoft.IDialog)", + "title": "Continue loop", + "description": "Stop executing this template and continue with the next iteration of the loop.", + "type": "object", + "required": [ + "$kind" + ], + "$policies": { + "lastAction": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ContinueLoop" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.CrossTrainedRecognizerSet": { + "$role": "implements(Microsoft.IRecognizer)", + "title": "Cross-trained recognizer set", + "description": "Recognizer for selecting between cross trained recognizers.", + "type": "object", + "required": [ + "recognizers", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional unique id using with RecognizerSet." + }, + "recognizers": { + "type": "array", + "title": "Recognizers", + "description": "List of Recognizers defined for this set.", + "items": { + "$kind": "Microsoft.IRecognizer", + "$ref": "#/definitions/Microsoft.IRecognizer" + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.CrossTrainedRecognizerSet" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.CurrencyEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Currency entity recognizer", + "description": "Recognizer which recognizes currency.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.CurrencyEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.DateTimeEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Date and time entity recognizer", + "description": "Recognizer which recognizes dates and time fragments.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.DateTimeEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.DateTimeInput": { + "$role": [ + "implements(Microsoft.IDialog)", + "extends(Microsoft.InputDialog)" + ], + "title": "Date/time input dialog", + "description": "Collect information - Ask for date and/ or time", + "type": "object", + "defaultLocale": { + "$ref": "#/definitions/stringExpression", + "title": "Default locale", + "description": "Default locale.", + "default": "en-us" + }, + "$policies": { + "interactive": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "defaultValue": { + "$ref": "#/definitions/stringExpression", + "format": "date-time", + "title": "Default date", + "description": "'Property' will be set to the value or the result of the expression when max turn count is exceeded.", + "examples": [ + "=user.birthday" + ] + }, + "value": { + "$ref": "#/definitions/stringExpression", + "format": "date-time", + "title": "Value", + "description": "'Property' will be set to the value or the result of the expression unless it evaluates to null.", + "examples": [ + "=user.birthday" + ] + }, + "outputFormat": { + "$ref": "#/definitions/expression", + "title": "Output format", + "description": "Expression to use for formatting the output.", + "examples": [ + "=this.value[0].Value" + ] + }, + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "default": false, + "examples": [ + false, + "=user.isVip" + ] + }, + "prompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Initial prompt", + "description": "Message to send to collect information.", + "examples": [ + "What is your birth date?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "unrecognizedPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Unrecognized prompt", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "invalidPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Invalid prompt", + "description": "Message to send when the user input does not meet any validation expression.", + "examples": [ + "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "defaultValueResponse": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Default value response", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "maxTurnCount": { + "$ref": "#/definitions/integerExpression", + "title": "Max turn count", + "description": "Maximum number of re-prompt attempts to collect information.", + "default": 3, + "minimum": 0, + "maximum": 2147483647, + "examples": [ + 3, + "=settings.xyz" + ] + }, + "validations": { + "type": "array", + "title": "Validation expressions", + "description": "Expression to validate user input.", + "items": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Expression which needs to met for the input to be considered valid", + "examples": [ + "int(this.value) > 1 && int(this.value) <= 150", + "count(this.value) < 300" + ] + } + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", + "examples": [ + "$birthday", + "dialog.${user.name}", + "=f(x)" + ] + }, + "alwaysPrompt": { + "$ref": "#/definitions/booleanExpression", + "title": "Always prompt", + "description": "Collect information even if the specified 'property' is not empty.", + "default": false, + "examples": [ + false, + "=$val" + ] + }, + "allowInterruptions": { + "$ref": "#/definitions/booleanExpression", + "title": "Allow Interruptions", + "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", + "default": true, + "examples": [ + true, + "=user.xyz" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.DateTimeInput" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.DebugBreak": { + "$role": "implements(Microsoft.IDialog)", + "title": "Debugger break", + "description": "If debugger is attached, stop the execution at this point in the conversation.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.DebugBreak" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.DeleteActivity": { + "$role": "implements(Microsoft.IDialog)", + "title": "Delete Activity", + "description": "Delete an activity that was previously sent.", + "type": "object", + "required": [ + "activityId", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "activityId": { + "$ref": "#/definitions/stringExpression", + "title": "ActivityId", + "description": "expression to an activityId to delete", + "examples": [ + "=turn.lastresult.id" + ] + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.DeleteActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.DeleteProperties": { + "$role": "implements(Microsoft.IDialog)", + "title": "Delete Properties", + "description": "Delete multiple properties and any value it holds.", + "type": "object", + "required": [ + "properties", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "properties": { + "type": "array", + "title": "Properties", + "description": "Properties to delete.", + "items": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property to delete." + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.DeleteProperties" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.DeleteProperty": { + "$role": "implements(Microsoft.IDialog)", + "title": "Delete property", + "description": "Delete a property and any value it holds.", + "type": "object", + "required": [ + "property", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property to delete." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.DeleteProperty" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.DimensionEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Dimension entity recognizer", + "description": "Recognizer which recognizes dimension.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.DimensionEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.EditActions": { + "$role": "implements(Microsoft.IDialog)", + "title": "Edit actions.", + "description": "Edit the current list of actions.", + "type": "object", + "required": [ + "changeType", + "actions", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "changeType": { + "title": "Type of change", + "description": "Type of change to apply to the current actions.", + "oneOf": [ + { + "type": "string", + "title": "Standard change", + "description": "Standard change types.", + "enum": [ + "insertActions", + "insertActionsBeforeTags", + "appendActions", + "endSequence", + "replaceSequence" + ] + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Actions to apply.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.EditActions" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.EditArray": { + "$role": "implements(Microsoft.IDialog)", + "title": "Edit array", + "description": "Modify an array in memory", + "type": "object", + "required": [ + "itemsProperty", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "changeType": { + "title": "Type of change", + "description": "Type of change to the array in memory.", + "oneOf": [ + { + "type": "string", + "title": "Change type", + "description": "Standard change type.", + "enum": [ + "push", + "pop", + "take", + "remove", + "clear" + ] + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "itemsProperty": { + "$ref": "#/definitions/stringExpression", + "title": "Items property", + "description": "Property that holds the array to update." + }, + "resultProperty": { + "$ref": "#/definitions/stringExpression", + "title": "Result property", + "description": "Property to store the result of this action." + }, + "value": { + "$ref": "#/definitions/valueExpression", + "title": "Value", + "description": "New value or expression.", + "examples": [ + "milk", + "=dialog.favColor", + "=dialog.favColor == 'red'" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.EditArray" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.EmailEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Email entity recognizer", + "description": "Recognizer which recognizes email.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.EmailEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.EmitEvent": { + "$role": "implements(Microsoft.IDialog)", + "title": "Emit a custom event", + "description": "Emit an event. Capture this event with a trigger.", + "type": "object", + "required": [ + "eventName", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "eventName": { + "$role": "expression", + "title": "Event name", + "description": "Name of the event to emit.", + "oneOf": [ + { + "type": "string", + "title": "Built-in event", + "description": "Standard event type.", + "enum": [ + "beginDialog", + "resumeDialog", + "repromptDialog", + "cancelDialog", + "endDialog", + "activityReceived", + "recognizedIntent", + "unknownIntent", + "actionsStarted", + "actionsSaved", + "actionsEnded", + "actionsResumed" + ] + }, + { + "type": "string", + "title": "Custom event", + "description": "Custom event type", + "pattern": "^(?!(beginDialog$|resumeDialog$|repromptDialog$|cancelDialog$|endDialog$|activityReceived$|recognizedIntent$|unknownIntent$|actionsStarted$|actionsSaved$|actionsEnded$|actionsResumed))(\\S){1}.*" + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "eventValue": { + "$ref": "#/definitions/valueExpression", + "title": "Event value", + "description": "Value to emit with the event (optional)." + }, + "bubbleEvent": { + "$ref": "#/definitions/booleanExpression", + "title": "Bubble event", + "description": "If true this event is passed on to parent dialogs." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.EmitEvent" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.EndDialog": { + "$role": "implements(Microsoft.IDialog)", + "title": "End dialog", + "description": "End this dialog.", + "type": "object", + "$policies": { + "lastAction": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "value": { + "$ref": "#/definitions/valueExpression", + "title": "Value", + "description": "Result value returned to the parent dialog.", + "examples": [ + "=dialog.userName", + "='tomato'" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.EndDialog" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.EndTurn": { + "$role": "implements(Microsoft.IDialog)", + "title": "End turn", + "description": "End the current turn without ending the dialog.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.EndTurn" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.FirstSelector": { + "$role": "implements(Microsoft.ITriggerSelector)", + "title": "First trigger selector", + "description": "Selector for first true rule", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.FirstSelector" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.Foreach": { + "$role": "implements(Microsoft.IDialog)", + "title": "For each item", + "description": "Execute actions on each item in an a collection.", + "type": "object", + "required": [ + "itemsProperty", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "itemsProperty": { + "$ref": "#/definitions/stringExpression", + "title": "Items property", + "description": "Property that holds the array.", + "examples": [ + "user.todoList" + ] + }, + "index": { + "$ref": "#/definitions/stringExpression", + "title": "Index property", + "description": "Property that holds the index of the item.", + "default": "dialog.foreach.index" + }, + "value": { + "$ref": "#/definitions/stringExpression", + "title": "Value property", + "description": "Property that holds the value of the item.", + "default": "dialog.foreach.value" + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Actions to execute for each item. Use '$foreach.value' to access the value of each item. Use '$foreach.index' to access the index of each item.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.Foreach" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ForeachPage": { + "$role": "implements(Microsoft.IDialog)", + "title": "For each page", + "description": "Execute actions on each page (collection of items) in an array.", + "type": "object", + "required": [ + "itemsProperty", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "itemsProperty": { + "$ref": "#/definitions/stringExpression", + "title": "Items property", + "description": "Property that holds the array.", + "examples": [ + "user.todoList" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Actions to execute for each page. Use '$foreach.page' to access each page.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "pageIndex": { + "$ref": "#/definitions/stringExpression", + "title": "Index property", + "description": "Property that holds the index of the page.", + "default": "dialog.foreach.pageindex" + }, + "page": { + "$ref": "#/definitions/stringExpression", + "title": "Page property", + "description": "Property that holds the value of the page.", + "default": "dialog.foreach.page" + }, + "pageSize": { + "$ref": "#/definitions/integerExpression", + "title": "Page size", + "description": "Number of items in each page.", + "default": 10 + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ForeachPage" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.GetActivityMembers": { + "$role": "implements(Microsoft.IDialog)", + "title": "Get activity members", + "description": "Get the members who are participating in an activity. (BotFrameworkAdapter only)", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property (named location to store information).", + "examples": [ + "user.age" + ] + }, + "activityId": { + "$ref": "#/definitions/stringExpression", + "title": "Activity Id", + "description": "Activity ID or expression to an activityId to use to get the members. If none is defined then the current activity id will be used.", + "examples": [ + "turn.lastresult.id" + ] + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.GetActivityMembers" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.GetConversationMembers": { + "$role": "implements(Microsoft.IDialog)", + "title": "Get conversation members", + "description": "Get the members who are participating in an conversation. (BotFrameworkAdapter only)", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property (named location to store information).", + "examples": [ + "user.age" + ] + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.GetConversationMembers" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.GetConversationReference": { + "$role": "implements(Microsoft.IDialog)", + "title": "Get ConversationReference", + "description": "Gets the ConversationReference from current context and stores it in property so it can be used to with ContinueConversation action.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property (named location to store information).", + "examples": [ + "user.age" + ] + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.GetConversationReference" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.GotoAction": { + "$role": "implements(Microsoft.IDialog)", + "title": "Go to action", + "description": "Go to an an action by id.", + "type": "object", + "required": [ + "actionId", + "$kind" + ], + "$policies": { + "lastAction": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "actionId": { + "$ref": "#/definitions/stringExpression", + "title": "Action Id", + "description": "Action Id to execute next" + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.GotoAction" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.GuidEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Guid entity recognizer", + "description": "Recognizer which recognizes guids.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.GuidEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.HashtagEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Hashtag entity recognizer", + "description": "Recognizer which recognizes Hashtags.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.HashtagEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.HttpRequest": { + "$role": "implements(Microsoft.IDialog)", + "type": "object", + "title": "HTTP request", + "description": "Make a HTTP request.", + "required": [ + "url", + "method", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "method": { + "type": "string", + "title": "HTTP method", + "description": "HTTP method to use.", + "enum": [ + "GET", + "POST", + "PATCH", + "PUT", + "DELETE" + ], + "examples": [ + "GET", + "POST" + ] + }, + "url": { + "$ref": "#/definitions/stringExpression", + "title": "Url", + "description": "URL to call (supports data binding).", + "examples": [ + "https://contoso.com" + ] + }, + "body": { + "$ref": "#/definitions/valueExpression", + "title": "Body", + "description": "Body to include in the HTTP call (supports data binding).", + "additionalProperties": true + }, + "resultProperty": { + "$ref": "#/definitions/stringExpression", + "title": "Result property", + "description": "A property to store the result of this action. The result can include any of the 4 properties from the HTTP response: statusCode, reasonPhrase, content, and headers. If the content is JSON it will be a deserialized object. The values can be accessed via .content for example.", + "default": "turn.results", + "examples": [ + "dialog.contosodata" + ] + }, + "contentType": { + "$ref": "#/definitions/stringExpression", + "title": "Content type", + "description": "Content media type for the body.", + "examples": [ + "application/json", + "text/plain" + ] + }, + "headers": { + "type": "object", + "title": "Headers", + "description": "One or more headers to include in the request (supports data binding).", + "additionalProperties": { + "$ref": "#/definitions/stringExpression" + } + }, + "responseType": { + "$ref": "#/definitions/stringExpression", + "title": "Response type", + "description": "Defines the type of HTTP response. Automatically calls the 'Send a response' action if set to 'Activity' or 'Activities'.", + "oneOf": [ + { + "type": "string", + "title": "Standard response", + "description": "Standard response type.", + "enum": [ + "none", + "json", + "activity", + "activities", + "binary" + ], + "default": "json" + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.HttpRequest" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.IActivityTemplate": { + "title": "Microsoft ActivityTemplates", + "description": "Components which are ActivityTemplate, which is string template, an activity, or a implementation of ActivityTemplate", + "$role": "interface", + "oneOf": [ + { + "$ref": "#/definitions/Microsoft.ActivityTemplate" + }, + { + "$ref": "#/definitions/Microsoft.StaticActivityTemplate" + }, + { + "$ref": "#/definitions/botframework.json/definitions/Activity", + "required": [ + "type" + ] + }, + { + "type": "string" + } + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Declarative", + "version": "4.13.2" + } + }, + "Microsoft.IAdapter": { + "$role": "interface", + "title": "Bot adapter", + "description": "Component that enables connecting bots to chat clients and applications.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime", + "version": "4.13.2" + }, + "properties": { + "route": { + "type": "string", + "title": "Adapter http route", + "description": "Route where to expose the adapter." + }, + "type": { + "type": "string", + "title": "Adapter type name", + "description": "Adapter type name" + } + } + }, + "Microsoft.IDialog": { + "title": "Microsoft dialogs", + "description": "Components which derive from Dialog", + "$role": "interface", + "oneOf": [ + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog" + }, + { + "$ref": "#/definitions/Microsoft.Ask" + }, + { + "$ref": "#/definitions/Microsoft.AttachmentInput" + }, + { + "$ref": "#/definitions/Microsoft.BeginDialog" + }, + { + "$ref": "#/definitions/Microsoft.BeginSkill" + }, + { + "$ref": "#/definitions/Microsoft.BreakLoop" + }, + { + "$ref": "#/definitions/Microsoft.CancelAllDialogs" + }, + { + "$ref": "#/definitions/Microsoft.CancelDialog" + }, + { + "$ref": "#/definitions/Microsoft.ChoiceInput" + }, + { + "$ref": "#/definitions/Microsoft.ConfirmInput" + }, + { + "$ref": "#/definitions/Microsoft.ContinueConversation" + }, + { + "$ref": "#/definitions/Microsoft.ContinueConversationLater" + }, + { + "$ref": "#/definitions/Microsoft.ContinueLoop" + }, + { + "$ref": "#/definitions/Microsoft.DateTimeInput" + }, + { + "$ref": "#/definitions/Microsoft.DebugBreak" + }, + { + "$ref": "#/definitions/Microsoft.DeleteActivity" + }, + { + "$ref": "#/definitions/Microsoft.DeleteProperties" + }, + { + "$ref": "#/definitions/Microsoft.DeleteProperty" + }, + { + "$ref": "#/definitions/Microsoft.EditActions" + }, + { + "$ref": "#/definitions/Microsoft.EditArray" + }, + { + "$ref": "#/definitions/Microsoft.EmitEvent" + }, + { + "$ref": "#/definitions/Microsoft.EndDialog" + }, + { + "$ref": "#/definitions/Microsoft.EndTurn" + }, + { + "$ref": "#/definitions/Microsoft.Foreach" + }, + { + "$ref": "#/definitions/Microsoft.ForeachPage" + }, + { + "$ref": "#/definitions/Microsoft.GetActivityMembers" + }, + { + "$ref": "#/definitions/Microsoft.GetConversationMembers" + }, + { + "$ref": "#/definitions/Microsoft.GetConversationReference" + }, + { + "$ref": "#/definitions/Microsoft.GotoAction" + }, + { + "$ref": "#/definitions/Microsoft.HttpRequest" + }, + { + "$ref": "#/definitions/Microsoft.IfCondition" + }, + { + "$ref": "#/definitions/Microsoft.LogAction" + }, + { + "$ref": "#/definitions/Microsoft.NumberInput" + }, + { + "$ref": "#/definitions/Microsoft.OAuthInput" + }, + { + "$ref": "#/definitions/Microsoft.QnAMakerDialog" + }, + { + "$ref": "#/definitions/Microsoft.RepeatDialog" + }, + { + "$ref": "#/definitions/Microsoft.ReplaceDialog" + }, + { + "$ref": "#/definitions/Microsoft.SendActivity" + }, + { + "$ref": "#/definitions/Microsoft.SendHandoffActivity" + }, + { + "$ref": "#/definitions/Microsoft.SetProperties" + }, + { + "$ref": "#/definitions/Microsoft.SetProperty" + }, + { + "$ref": "#/definitions/Microsoft.SignOutUser" + }, + { + "$ref": "#/definitions/Microsoft.SwitchCondition" + }, + { + "$ref": "#/definitions/Microsoft.TelemetryTrackEventAction" + }, + { + "$ref": "#/definitions/Microsoft.TextInput" + }, + { + "$ref": "#/definitions/Microsoft.ThrowException" + }, + { + "$ref": "#/definitions/Microsoft.TraceActivity" + }, + { + "$ref": "#/definitions/Microsoft.UpdateActivity" + }, + { + "type": "string", + "pattern": "^(?!(=)).*" + } + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Declarative", + "version": "4.13.2" + } + }, + "Microsoft.IEntityRecognizer": { + "$role": "interface", + "title": "Entity recognizers", + "description": "Components which derive from EntityRecognizer.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "oneOf": [ + { + "$ref": "#/definitions/Microsoft.AgeEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.ConfirmationEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.CurrencyEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.DateTimeEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.DimensionEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.EmailEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.GuidEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.HashtagEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.IpEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.MentionEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.NumberEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.NumberRangeEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.OrdinalEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.PercentageEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.PhoneNumberEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.RegexEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.TemperatureEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.UrlEntityRecognizer" + }, + { + "type": "string", + "title": "Reference to Microsoft.IEntityRecognizer", + "description": "Reference to Microsoft.IEntityRecognizer .dialog file." + } + ] + }, + "Microsoft.IfCondition": { + "$role": "implements(Microsoft.IDialog)", + "title": "If condition", + "description": "Two-way branch the conversation flow based on a condition.", + "type": "object", + "required": [ + "condition", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Expression to evaluate.", + "examples": [ + "user.age > 3" + ] + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + true, + "=user.age > 3" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Actions to execute if condition is true.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "elseActions": { + "type": "array", + "title": "Else", + "description": "Actions to execute if condition is false.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.IfCondition" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ILanguageGenerator": { + "title": "Microsoft LanguageGenerator", + "description": "Components which dervie from the LanguageGenerator class", + "$role": "interface", + "oneOf": [ + { + "$ref": "#/definitions/Microsoft.ResourceMultiLanguageGenerator" + }, + { + "$ref": "#/definitions/Microsoft.TemplateEngineLanguageGenerator" + }, + { + "type": "string" + } + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + } + }, + "Microsoft.InputDialog": { + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "default": false, + "examples": [ + false, + "=user.isVip" + ] + }, + "prompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Initial prompt", + "description": "Message to send to collect information.", + "examples": [ + "What is your birth date?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "unrecognizedPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Unrecognized prompt", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "invalidPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Invalid prompt", + "description": "Message to send when the user input does not meet any validation expression.", + "examples": [ + "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "defaultValueResponse": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Default value response", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "maxTurnCount": { + "$ref": "#/definitions/integerExpression", + "title": "Max turn count", + "description": "Maximum number of re-prompt attempts to collect information.", + "default": 3, + "minimum": 0, + "maximum": 2147483647, + "examples": [ + 3, + "=settings.xyz" + ] + }, + "validations": { + "type": "array", + "title": "Validation expressions", + "description": "Expression to validate user input.", + "items": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Expression which needs to met for the input to be considered valid", + "examples": [ + "int(this.value) > 1 && int(this.value) <= 150", + "count(this.value) < 300" + ] + } + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", + "examples": [ + "$birthday", + "dialog.${user.name}", + "=f(x)" + ] + }, + "alwaysPrompt": { + "$ref": "#/definitions/booleanExpression", + "title": "Always prompt", + "description": "Collect information even if the specified 'property' is not empty.", + "default": false, + "examples": [ + false, + "=$val" + ] + }, + "allowInterruptions": { + "$ref": "#/definitions/booleanExpression", + "title": "Allow Interruptions", + "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", + "default": true, + "examples": [ + true, + "=user.xyz" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.InputDialog" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.IpEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "IP entity recognizer", + "description": "Recognizer which recognizes internet IP patterns (like 192.1.1.1).", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.IpEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.IRecognizer": { + "title": "Microsoft recognizer", + "description": "Components which derive from Recognizer class", + "$role": "interface", + "oneOf": [ + { + "$ref": "#/definitions/Microsoft.AgeEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.ChannelMentionEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.ConfirmationEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.CrossTrainedRecognizerSet" + }, + { + "$ref": "#/definitions/Microsoft.CurrencyEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.DateTimeEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.DimensionEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.EmailEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.GuidEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.HashtagEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.IpEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.LuisRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.MentionEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.MultiLanguageRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.NumberEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.NumberRangeEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.OrdinalEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.PercentageEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.PhoneNumberEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.QnAMakerRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.RecognizerSet" + }, + { + "$ref": "#/definitions/Microsoft.RegexEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.RegexRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.TemperatureEntityRecognizer" + }, + { + "$ref": "#/definitions/Microsoft.UrlEntityRecognizer" + }, + { + "type": "string" + } + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Declarative", + "version": "4.13.2" + } + }, + "Microsoft.ITextTemplate": { + "title": "Microsoft TextTemplate", + "description": "Components which derive from TextTemplate class", + "$role": "interface", + "oneOf": [ + { + "$ref": "#/definitions/Microsoft.TextTemplate" + }, + { + "type": "string" + } + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Declarative", + "version": "4.13.2" + } + }, + "Microsoft.ITrigger": { + "$role": "interface", + "title": "Microsoft Triggers", + "description": "Components which derive from OnCondition class.", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "oneOf": [ + { + "$ref": "#/definitions/Microsoft.OnActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnAssignEntity" + }, + { + "$ref": "#/definitions/Microsoft.OnBeginDialog" + }, + { + "$ref": "#/definitions/Microsoft.OnCancelDialog" + }, + { + "$ref": "#/definitions/Microsoft.OnChooseEntity" + }, + { + "$ref": "#/definitions/Microsoft.OnChooseIntent" + }, + { + "$ref": "#/definitions/Microsoft.OnChooseProperty" + }, + { + "$ref": "#/definitions/Microsoft.OnCommandActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnCommandResultActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnCondition" + }, + { + "$ref": "#/definitions/Microsoft.OnContinueConversation" + }, + { + "$ref": "#/definitions/Microsoft.OnConversationUpdateActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnDialogEvent" + }, + { + "$ref": "#/definitions/Microsoft.OnEndOfActions" + }, + { + "$ref": "#/definitions/Microsoft.OnEndOfConversationActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnError" + }, + { + "$ref": "#/definitions/Microsoft.OnEventActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnHandoffActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnInstallationUpdateActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnIntent" + }, + { + "$ref": "#/definitions/Microsoft.OnInvokeActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnMessageActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnMessageDeleteActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnMessageReactionActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnMessageUpdateActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnQnAMatch" + }, + { + "$ref": "#/definitions/Microsoft.OnRepromptDialog" + }, + { + "$ref": "#/definitions/Microsoft.OnTypingActivity" + }, + { + "$ref": "#/definitions/Microsoft.OnUnknownIntent" + }, + { + "type": "string", + "title": "Reference to Microsoft.ITrigger", + "description": "Reference to Microsoft.ITrigger .dialog file." + } + ] + }, + "Microsoft.ITriggerSelector": { + "$role": "interface", + "title": "Selectors", + "description": "Components which derive from TriggerSelector class.", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "oneOf": [ + { + "$ref": "#/definitions/Microsoft.ConditionalSelector" + }, + { + "$ref": "#/definitions/Microsoft.FirstSelector" + }, + { + "$ref": "#/definitions/Microsoft.MostSpecificSelector" + }, + { + "$ref": "#/definitions/Microsoft.RandomSelector" + }, + { + "$ref": "#/definitions/Microsoft.TrueSelector" + }, + { + "type": "string", + "title": "Reference to Microsoft.ITriggerSelector", + "description": "Reference to Microsoft.ITriggerSelector .dialog file." + } + ] + }, + "Microsoft.LanguagePolicy": { + "title": "Language policy", + "description": "This represents a policy map for locales lookups to use for language", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": { + "type": "array", + "title": "Per-locale policy", + "description": "Language policy per locale.", + "items": { + "type": "string", + "title": "Locale", + "description": "Locale like en-us." + } + }, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.LanguagePolicy" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.LogAction": { + "$role": "implements(Microsoft.IDialog)", + "title": "Log to console", + "description": "Log a message to the host application. Send a TraceActivity to Bot Framework Emulator (optional).", + "type": "object", + "required": [ + "text", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + true, + "=user.age > 3" + ] + }, + "text": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Text", + "description": "Information to log.", + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "label": { + "$ref": "#/definitions/stringExpression", + "title": "Label", + "description": "Label for the trace activity (used to identify it in a list of trace activities.)" + }, + "traceActivity": { + "$ref": "#/definitions/booleanExpression", + "title": "Send trace activity", + "description": "If true, automatically sends a TraceActivity (view in Bot Framework Emulator)." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.LogAction" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.LuisRecognizer": { + "$role": "implements(Microsoft.IRecognizer)", + "title": "LUIS Recognizer", + "description": "LUIS recognizer.", + "type": "object", + "required": [ + "applicationId", + "endpoint", + "endpointKey", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.AI.Luis", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." + }, + "applicationId": { + "$ref": "#/definitions/stringExpression", + "title": "LUIS application id", + "description": "Application ID for your model from the LUIS service." + }, + "version": { + "$ref": "#/definitions/stringExpression", + "title": "LUIS version", + "description": "Optional version to target. If null then predictionOptions.Slot is used." + }, + "endpoint": { + "$ref": "#/definitions/stringExpression", + "title": "LUIS endpoint", + "description": "Endpoint to use for LUIS service like https://westus.api.cognitive.microsoft.com." + }, + "endpointKey": { + "$ref": "#/definitions/stringExpression", + "title": "LUIS prediction key", + "description": "LUIS prediction key used to call endpoint." + }, + "externalEntityRecognizer": { + "$kind": "Microsoft.IRecognizer", + "title": "External entity recognizer", + "description": "Entities recognized by this recognizer will be passed to LUIS as external entities.", + "$ref": "#/definitions/Microsoft.IRecognizer" + }, + "dynamicLists": { + "$ref": "#/definitions/arrayExpression", + "title": "Dynamic lists", + "description": "Runtime defined entity lists.", + "items": { + "title": "Entity list", + "description": "Lists of canonical values and synonyms for an entity.", + "type": "object", + "properties": { + "entity": { + "title": "Entity", + "description": "Entity to extend with a dynamic list.", + "type": "string" + }, + "list": { + "title": "Dynamic list", + "description": "List of canonical forms and synonyms.", + "type": "array", + "items": { + "type": "object", + "title": "List entry", + "description": "Canonical form and synonynms.", + "properties": { + "canonicalForm": { + "title": "Canonical form", + "description": "Resolution if any synonym matches.", + "type": "string" + }, + "synonyms": { + "title": "Synonyms", + "description": "List of synonyms for a canonical form.", + "type": "array", + "items": { + "title": "Synonym", + "description": "Synonym for canonical form.", + "type": "string" + } + } + } + } + } + } + } + }, + "predictionOptions": { + "type": "object", + "title": "Prediction options", + "description": "Options to control LUIS prediction behavior.", + "properties": { + "includeAllIntents": { + "$ref": "#/definitions/booleanExpression", + "title": "Include all intents", + "description": "True for all intents, false for only top intent." + }, + "includeInstanceData": { + "$ref": "#/definitions/booleanExpression", + "title": "Include $instance", + "description": "True to include $instance metadata in the LUIS response." + }, + "log": { + "$ref": "#/definitions/booleanExpression", + "title": "Log utterances", + "description": "True to log utterances on LUIS service." + }, + "preferExternalEntities": { + "$ref": "#/definitions/booleanExpression", + "title": "Prefer external entities", + "description": "True to prefer external entities to those generated by LUIS models." + }, + "slot": { + "$ref": "#/definitions/stringExpression", + "title": "Slot", + "description": "Slot to use for talking to LUIS service like production or staging." + } + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.LuisRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.MentionEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Mentions entity recognizer", + "description": "Recognizer which recognizes @Mentions", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.MentionEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.MostSpecificSelector": { + "$role": "implements(Microsoft.ITriggerSelector)", + "title": "Most specific trigger selector", + "description": "Select most specific true events with optional additional selector", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "selector": { + "$kind": "Microsoft.ITriggerSelector", + "$ref": "#/definitions/Microsoft.ITriggerSelector" + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.MostSpecificSelector" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.MultiLanguageRecognizer": { + "$role": "implements(Microsoft.IRecognizer)", + "title": "Multi-language recognizer", + "description": "Configure one recognizer per language and the specify the language fallback policy.", + "type": "object", + "required": [ + "recognizers", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." + }, + "languagePolicy": { + "$kind": "Microsoft.LanguagePolicy", + "type": "object", + "title": "Language policy", + "description": "Defines fall back languages to try per user input language.", + "$ref": "#/definitions/Microsoft.LanguagePolicy" + }, + "recognizers": { + "type": "object", + "title": "Recognizers", + "description": "Map of language -> Recognizer", + "additionalProperties": { + "$kind": "Microsoft.IRecognizer", + "$ref": "#/definitions/Microsoft.IRecognizer" + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.MultiLanguageRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.NumberEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Number entity recognizer", + "description": "Recognizer which recognizes numbers.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.NumberEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.NumberInput": { + "$role": [ + "implements(Microsoft.IDialog)", + "extends(Microsoft.InputDialog)" + ], + "title": "Number input dialog", + "description": "Collect information - Ask for a number.", + "type": "object", + "$policies": { + "interactive": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "defaultValue": { + "$ref": "#/definitions/numberExpression", + "title": "Default value", + "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", + "examples": [ + 13, + "=user.age" + ] + }, + "value": { + "$ref": "#/definitions/numberExpression", + "title": "Value", + "description": "'Property' will be set to the value of this expression unless it evaluates to null.", + "examples": [ + 13, + "=user.age" + ] + }, + "outputFormat": { + "$ref": "#/definitions/expression", + "title": "Output format", + "description": "Expression to format the number output.", + "examples": [ + "=this.value", + "=int(this.text)" + ] + }, + "defaultLocale": { + "$ref": "#/definitions/stringExpression", + "title": "Default locale", + "description": "Default locale to use if there is no locale available..", + "default": "en-us" + }, + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "default": false, + "examples": [ + false, + "=user.isVip" + ] + }, + "prompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Initial prompt", + "description": "Message to send to collect information.", + "examples": [ + "What is your birth date?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "unrecognizedPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Unrecognized prompt", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "invalidPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Invalid prompt", + "description": "Message to send when the user input does not meet any validation expression.", + "examples": [ + "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "defaultValueResponse": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Default value response", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "maxTurnCount": { + "$ref": "#/definitions/integerExpression", + "title": "Max turn count", + "description": "Maximum number of re-prompt attempts to collect information.", + "default": 3, + "minimum": 0, + "maximum": 2147483647, + "examples": [ + 3, + "=settings.xyz" + ] + }, + "validations": { + "type": "array", + "title": "Validation expressions", + "description": "Expression to validate user input.", + "items": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Expression which needs to met for the input to be considered valid", + "examples": [ + "int(this.value) > 1 && int(this.value) <= 150", + "count(this.value) < 300" + ] + } + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", + "examples": [ + "$birthday", + "dialog.${user.name}", + "=f(x)" + ] + }, + "alwaysPrompt": { + "$ref": "#/definitions/booleanExpression", + "title": "Always prompt", + "description": "Collect information even if the specified 'property' is not empty.", + "default": false, + "examples": [ + false, + "=$val" + ] + }, + "allowInterruptions": { + "$ref": "#/definitions/booleanExpression", + "title": "Allow Interruptions", + "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", + "default": true, + "examples": [ + true, + "=user.xyz" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.NumberInput" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.NumberRangeEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Number range entity recognizer", + "description": "Recognizer which recognizes ranges of numbers (Example:2 to 5).", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.NumberRangeEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OAuthInput": { + "$role": "implements(Microsoft.IDialog)", + "title": "OAuthInput Dialog", + "description": "Collect login information before each request.", + "type": "object", + "required": [ + "connectionName", + "$kind" + ], + "$policies": { + "interactive": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "connectionName": { + "$ref": "#/definitions/stringExpression", + "title": "Connection name", + "description": "The connection name configured in Azure Web App Bot OAuth settings.", + "examples": [ + "msgraphOAuthConnection" + ] + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + true, + "=user.age > 3" + ] + }, + "text": { + "$ref": "#/definitions/stringExpression", + "title": "Text", + "description": "Text shown in the OAuth signin card.", + "examples": [ + "Please sign in. ", + "=concat(x,y,z)" + ] + }, + "title": { + "$ref": "#/definitions/stringExpression", + "title": "Title", + "description": "Title shown in the OAuth signin card.", + "examples": [ + "Login" + ] + }, + "timeout": { + "$ref": "#/definitions/integerExpression", + "title": "Timeout", + "description": "Time out setting for the OAuth signin card.", + "default": 900000 + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Token property", + "description": "Property to store the OAuth token result. WARNING: Changing this location is not recommended as you should call OAuthInput immediately before each use of the token.", + "default": "turn.token", + "examples": [ + "dialog.token" + ] + }, + "invalidPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Invalid prompt", + "description": "Message to send if user response is invalid.", + "examples": [ + "Sorry, the login info you provided is not valid." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "defaultValueResponse": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Default value response", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Login failed." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "maxTurnCount": { + "$ref": "#/definitions/integerExpression", + "title": "Max turn count", + "description": "Maximum number of re-prompt attempts to collect information.", + "default": 3, + "examples": [ + 3 + ] + }, + "defaultValue": { + "$ref": "#/definitions/expression", + "title": "Default value", + "description": "Expression to examine on each turn of the conversation as possible value to the property.", + "examples": [ + "@token" + ] + }, + "allowInterruptions": { + "$ref": "#/definitions/booleanExpression", + "title": "Allow interruptions", + "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", + "default": true, + "examples": [ + true, + "=f(x)" + ] + }, + "alwaysPrompt": { + "$ref": "#/definitions/booleanExpression", + "title": "Always prompt", + "description": "Collect information even if the specified 'property' is not empty.", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OAuthInput" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On activity", + "description": "Actions to perform on receipt of a generic activity.", + "type": "object", + "required": [ + "type", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "type": { + "type": "string", + "title": "Activity type", + "description": "The Activity.Type to match" + }, + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnAssignEntity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On entity assignment", + "description": "Actions to apply an operation on a property and value.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "operation": { + "type": "string", + "title": "Operation", + "description": "Operation filter on event." + }, + "property": { + "type": "string", + "title": "Property", + "description": "Property filter on event." + }, + "value": { + "type": "string", + "title": "Value", + "description": "Value filter on event." + }, + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnAssignEntity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnBeginDialog": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On begin dialog", + "description": "Actions to perform when this dialog begins.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnBeginDialog" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnCancelDialog": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On cancel dialog", + "description": "Actions to perform on cancel dialog event.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnCancelDialog" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnChooseEntity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On choose entity", + "description": "Actions to be performed when value is ambiguous for operator and property.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "operation": { + "type": "string", + "title": "Operation", + "description": "Operation filter on event." + }, + "property": { + "type": "string", + "title": "Property", + "description": "Property filter on event." + }, + "value": { + "type": "string", + "title": "Ambiguous value", + "description": "Ambiguous value filter on event." + }, + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnChooseEntity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnChooseIntent": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On ambiguous intent", + "description": "Actions to perform on when an intent is ambiguous.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "intents": { + "type": "array", + "title": "Intents", + "description": "Intents that must be in the ChooseIntent result for this condition to trigger.", + "items": { + "title": "Intent", + "description": "Intent name to trigger on.", + "type": "string" + } + }, + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnChooseIntent" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnChooseProperty": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On choose property", + "description": "Actions to take when there are multiple possible mappings of entities to properties and operations.", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "type": "object", + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnChooseProperty" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnCommandActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On Command activity", + "description": "Actions to perform on receipt of an activity with type 'Command'. Overrides Intent trigger.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnCommandActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnCommandResultActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On Command Result activity", + "description": "Actions to perform on receipt of an activity with type 'CommandResult'. Overrides Intent trigger.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnCommandResultActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnCondition": { + "$role": "implements(Microsoft.ITrigger)", + "title": "On condition", + "description": "Actions to perform when specified condition is true.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnCondition" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnContinueConversation": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On continue conversation", + "description": "Actions to perform when a conversation is started up again from a ContinueConversationLater action.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnContinueConversation" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnConversationUpdateActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On ConversationUpdate activity", + "description": "Actions to perform on receipt of an activity with type 'ConversationUpdate'.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnConversationUpdateActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnDialogEvent": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On dialog event", + "description": "Actions to perform when a specific dialog event occurs.", + "type": "object", + "required": [ + "event", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "event": { + "type": "string", + "title": "Dialog event name", + "description": "Name of dialog event." + }, + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnDialogEvent" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnEndOfActions": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On end of actions", + "description": "Actions to take when there are no more actions in the current dialog.", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "type": "object", + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnEndOfActions" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnEndOfConversationActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On EndOfConversation activity", + "description": "Actions to perform on receipt of an activity with type 'EndOfConversation'.", + "type": "object", + "required": [ + "$kind" + ], + "$policies": { + "nonInteractive": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnEndOfConversationActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnError": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On error", + "description": "Action to perform when an 'Error' dialog event occurs.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnError" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnEventActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On Event activity", + "description": "Actions to perform on receipt of an activity with type 'Event'.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnEventActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnHandoffActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On Handoff activity", + "description": "Actions to perform on receipt of an activity with type 'HandOff'.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnHandoffActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnInstallationUpdateActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On InstallationUpdate activity", + "description": "Actions to perform on receipt of an activity with type 'InstallationUpdate'.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnInstallationUpdateActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnIntent": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On intent recognition", + "description": "Actions to perform when specified intent is recognized.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "intent": { + "type": "string", + "title": "Intent", + "description": "Name of intent." + }, + "entities": { + "type": "array", + "title": "Entities", + "description": "Required entities.", + "items": { + "type": "string", + "title": "Entity", + "description": "Entity that must be present." + } + }, + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnIntent" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnInvokeActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On Invoke activity", + "description": "Actions to perform on receipt of an activity with type 'Invoke'.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnInvokeActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnMessageActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On Message activity", + "description": "Actions to perform on receipt of an activity with type 'Message'. Overrides Intent trigger.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnMessageActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnMessageDeleteActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On MessageDelete activity", + "description": "Actions to perform on receipt of an activity with type 'MessageDelete'.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnMessageDeleteActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnMessageReactionActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On MessageReaction activity", + "description": "Actions to perform on receipt of an activity with type 'MessageReaction'.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnMessageReactionActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnMessageUpdateActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On MessageUpdate activity", + "description": "Actions to perform on receipt of an activity with type 'MessageUpdate'.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnMessageUpdateActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnQnAMatch": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On QnAMaker match", + "description": "Actions to perform on when an match from QnAMaker is found.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnQnAMatch" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnRepromptDialog": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On RepromptDialog", + "description": "Actions to perform when 'RepromptDialog' event occurs.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnRepromptDialog" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnTypingActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On Typing activity", + "description": "Actions to perform on receipt of an activity with type 'Typing'.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnTypingActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OnUnknownIntent": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On unknown intent", + "description": "Action to perform when user input is unrecognized or if none of the 'on intent recognition' triggers match recognized intent.", + "type": "object", + "required": [ + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/numberExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OnUnknownIntent" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.OrdinalEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Ordinal entity recognizer", + "description": "Recognizer which recognizes ordinals (example: first, second, 3rd).", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.OrdinalEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.PercentageEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Percentage entity recognizer", + "description": "Recognizer which recognizes percentages.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.PercentageEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.PhoneNumberEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Phone number entity recognizer", + "description": "Recognizer which recognizes phone numbers.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.PhoneNumberEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.QnAMakerDialog": { + "$role": "implements(Microsoft.IDialog)", + "title": "QnAMaker dialog", + "description": "Dialog which uses QnAMAker knowledge base to answer questions.", + "type": "object", + "required": [ + "knowledgeBaseId", + "endpointKey", + "hostname", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.AI.QnA", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "knowledgeBaseId": { + "$ref": "#/definitions/stringExpression", + "title": "KnowledgeBase Id", + "description": "KnowledgeBase Id of your QnA Maker KnowledgeBase.", + "default": "=settings.qna.knowledgebaseid" + }, + "endpointKey": { + "$ref": "#/definitions/stringExpression", + "title": "Endpoint key", + "description": "Endpoint key for the QnA Maker KB.", + "default": "=settings.qna.endpointkey" + }, + "hostname": { + "$ref": "#/definitions/stringExpression", + "title": "Hostname", + "description": "Hostname for your QnA Maker service.", + "default": "=settings.qna.hostname", + "examples": [ + "https://yourserver.azurewebsites.net/qnamaker" + ] + }, + "noAnswer": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Fallback answer", + "description": "Default answer to return when none found in KB.", + "default": "Sorry, I did not find an answer.", + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "threshold": { + "$ref": "#/definitions/numberExpression", + "title": "Threshold", + "description": "Threshold score to filter results.", + "default": 0.3 + }, + "activeLearningCardTitle": { + "$ref": "#/definitions/stringExpression", + "title": "Active learning card title", + "description": "Title for active learning suggestions card.", + "default": "Did you mean:" + }, + "cardNoMatchText": { + "$ref": "#/definitions/stringExpression", + "title": "Card no match text", + "description": "Text for no match option.", + "default": "None of the above." + }, + "cardNoMatchResponse": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Card no match response", + "description": "Custom response when no match option was selected.", + "default": "Thanks for the feedback.", + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "strictFilters": { + "$ref": "#/definitions/arrayExpression", + "title": "Strict filters", + "description": "Metadata filters to use when calling the QnA Maker KB.", + "items": { + "type": "object", + "title": "Metadata filter", + "description": "Metadata filter.", + "properties": { + "name": { + "type": "string", + "title": "Name", + "description": "Name of filter property.", + "maximum": 100 + }, + "value": { + "type": "string", + "title": "Value", + "description": "Value to filter on.", + "maximum": 100 + } + } + } + }, + "top": { + "$ref": "#/definitions/numberExpression", + "title": "Top", + "description": "The number of answers you want to retrieve.", + "default": 3 + }, + "isTest": { + "type": "boolean", + "title": "IsTest", + "description": "True, if pointing to Test environment, else false.", + "default": false + }, + "rankerType": { + "$ref": "#/definitions/stringExpression", + "title": "Ranker type", + "description": "Type of Ranker.", + "oneOf": [ + { + "title": "Standard ranker", + "description": "Standard ranker types.", + "enum": [ + "default", + "questionOnly", + "autoSuggestQuestion" + ], + "default": "default" + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "strictFiltersJoinOperator": { + "$ref": "#/definitions/stringExpression", + "title": "StrictFiltersJoinOperator", + "description": "Join operator for Strict Filters.", + "oneOf": [ + { + "title": "Join operator", + "description": "Value of Join Operator to be used as conjunction with Strict Filter values.", + "enum": [ + "AND", + "OR" + ], + "default": "AND" + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.QnAMakerDialog" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.QnAMakerRecognizer": { + "$role": "implements(Microsoft.IRecognizer)", + "title": "QnAMaker recognizer", + "description": "Recognizer for generating QnAMatch intents from a KB.", + "type": "object", + "required": [ + "knowledgeBaseId", + "endpointKey", + "hostname", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.AI.QnA", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional unique id using with RecognizerSet." + }, + "knowledgeBaseId": { + "$ref": "#/definitions/stringExpression", + "title": "KnowledgeBase Id", + "description": "Knowledge base Id of your QnA Maker knowledge base.", + "default": "=settings.qna.knowledgebaseid" + }, + "endpointKey": { + "$ref": "#/definitions/stringExpression", + "title": "Endpoint key", + "description": "Endpoint key for the QnA Maker KB.", + "default": "=settings.qna.endpointkey" + }, + "hostname": { + "$ref": "#/definitions/stringExpression", + "title": "Hostname", + "description": "Hostname for your QnA Maker service.", + "default": "=settings.qna.hostname", + "examples": [ + "https://yourserver.azurewebsites.net/qnamaker" + ] + }, + "threshold": { + "$ref": "#/definitions/numberExpression", + "title": "Threshold", + "description": "Threshold score to filter results.", + "default": 0.3 + }, + "strictFilters": { + "$ref": "#/definitions/arrayExpression", + "title": "Strict filters", + "description": "Metadata filters to use when calling the QnA Maker KB.", + "items": { + "type": "object", + "title": "Metadata filters", + "description": "Metadata filters to use when querying QnA Maker KB.", + "properties": { + "name": { + "type": "string", + "title": "Name", + "description": "Name to filter on.", + "maximum": 100 + }, + "value": { + "type": "string", + "title": "Value", + "description": "Value to restrict filter.", + "maximum": 100 + } + } + } + }, + "top": { + "$ref": "#/definitions/numberExpression", + "title": "Top", + "description": "The number of answers you want to retrieve.", + "default": 3 + }, + "isTest": { + "$ref": "#/definitions/booleanExpression", + "title": "Use test environment", + "description": "True, if pointing to Test environment, else false.", + "examples": [ + true, + "=f(x)" + ] + }, + "rankerType": { + "title": "Ranker type", + "description": "Type of Ranker.", + "oneOf": [ + { + "type": "string", + "title": "Ranker type", + "description": "Type of Ranker.", + "enum": [ + "default", + "questionOnly", + "autoSuggestQuestion" + ], + "default": "default" + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "strictFiltersJoinOperator": { + "$ref": "#/definitions/stringExpression", + "title": "StrictFiltersJoinOperator", + "description": "Join operator for Strict Filters.", + "oneOf": [ + { + "title": "Join operator", + "description": "Value of Join Operator to be used as onjuction with Strict Filter values.", + "enum": [ + "AND", + "OR" + ], + "default": "AND" + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "includeDialogNameInMetadata": { + "$ref": "#/definitions/booleanExpression", + "title": "Include dialog name", + "description": "When set to false, the dialog name will not be passed to QnAMaker. (default) is true", + "default": true, + "examples": [ + true, + "=f(x)" + ] + }, + "metadata": { + "$ref": "#/definitions/arrayExpression", + "title": "Metadata filters", + "description": "Metadata filters to use when calling the QnA Maker KB.", + "items": { + "type": "object", + "title": "Metadata filter", + "description": "Metadata filter to use when calling the QnA Maker KB.", + "properties": { + "name": { + "type": "string", + "title": "Name", + "description": "Name of value to test." + }, + "value": { + "type": "string", + "title": "Value", + "description": "Value to filter against." + } + } + } + }, + "context": { + "$ref": "#/definitions/objectExpression", + "title": "QnA request context", + "description": "Context to use for ranking." + }, + "qnaId": { + "$ref": "#/definitions/integerExpression", + "title": "QnA Id", + "description": "A number or expression which is the QnAId to paass to QnAMaker API." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.QnAMakerRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.RandomSelector": { + "$role": "implements(Microsoft.ITriggerSelector)", + "title": "Random rule selector", + "description": "Select most specific true rule.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "seed": { + "type": "integer", + "title": "Random seed", + "description": "Random seed to start random number generation." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.RandomSelector" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.RecognizerSet": { + "$role": "implements(Microsoft.IRecognizer)", + "title": "Recognizer set", + "description": "Creates the union of the intents and entities of the recognizers in the set.", + "type": "object", + "required": [ + "recognizers", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." + }, + "recognizers": { + "type": "array", + "title": "Recognizers", + "description": "List of Recognizers defined for this set.", + "items": { + "$kind": "Microsoft.IRecognizer", + "$ref": "#/definitions/Microsoft.IRecognizer" + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.RecognizerSet" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.RegexEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Regex entity recognizer", + "description": "Recognizer which recognizes patterns of input based on regex.", + "type": "object", + "required": [ + "name", + "pattern", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "name": { + "type": "string", + "title": "Name", + "description": "Name of the entity" + }, + "pattern": { + "type": "string", + "title": "Pattern", + "description": "Pattern expressed as regular expression." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.RegexEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.RegexRecognizer": { + "$role": "implements(Microsoft.IRecognizer)", + "title": "Regex recognizer", + "description": "Use regular expressions to recognize intents and entities from user input.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional unique id using with RecognizerSet. Other recognizers should return 'DeferToRecognizer_{Id}' intent when cross training data for this recognizer." + }, + "intents": { + "type": "array", + "title": "RegEx patterns to intents", + "description": "Collection of patterns to match for an intent.", + "items": { + "type": "object", + "title": "Pattern", + "description": "Intent and regex pattern.", + "properties": { + "intent": { + "type": "string", + "title": "Intent", + "description": "The intent name." + }, + "pattern": { + "type": "string", + "title": "Pattern", + "description": "The regular expression pattern." + } + } + } + }, + "entities": { + "type": "array", + "title": "Entity recognizers", + "description": "Collection of entity recognizers to use.", + "items": { + "$kind": "Microsoft.IEntityRecognizer", + "$ref": "#/definitions/Microsoft.IEntityRecognizer" + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.RegexRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.RepeatDialog": { + "$role": "implements(Microsoft.IDialog)", + "type": "object", + "title": "Repeat dialog", + "description": "Repeat current dialog.", + "$policies": { + "lastAction": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "allowLoop": { + "$ref": "#/definitions/booleanExpression", + "title": "AllowLoop", + "description": "Optional condition which if true will allow loop of the repeated dialog.", + "examples": [ + "user.age > 3" + ] + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "options": { + "$ref": "#/definitions/objectExpression", + "title": "Options", + "description": "One or more options that are passed to the dialog that is called.", + "additionalProperties": { + "type": "string", + "title": "Options", + "description": "Options for repeating dialog." + } + }, + "activityProcessed": { + "$ref": "#/definitions/booleanExpression", + "title": "Activity processed", + "description": "When set to false, the dialog that is called can process the current activity.", + "default": true + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.RepeatDialog" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ReplaceDialog": { + "$role": "implements(Microsoft.IDialog)", + "type": "object", + "title": "Replace dialog", + "description": "Replace current dialog with another dialog.", + "$policies": { + "lastAction": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "dialog": { + "oneOf": [ + { + "$kind": "Microsoft.IDialog", + "pattern": "^(?!(=)).*", + "title": "Dialog", + "$ref": "#/definitions/Microsoft.IDialog" + }, + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=settings.dialogId" + ] + } + ], + "title": "Dialog name", + "description": "Name of the dialog to call." + }, + "options": { + "$ref": "#/definitions/objectExpression", + "title": "Options", + "description": "One or more options that are passed to the dialog that is called.", + "additionalProperties": { + "type": "string", + "title": "Options", + "description": "Options for replacing dialog." + } + }, + "activityProcessed": { + "$ref": "#/definitions/booleanExpression", + "title": "Activity processed", + "description": "When set to false, the dialog that is called can process the current activity.", + "default": true + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ReplaceDialog" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ResourceMultiLanguageGenerator": { + "$role": "implements(Microsoft.ILanguageGenerator)", + "title": "Resource multi-language generator", + "description": "MultiLanguage Generator which is bound to resource by resource Id.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional generator ID." + }, + "resourceId": { + "type": "string", + "title": "Resource Id", + "description": "Resource which is the root language generator. Other generaters with the same name and language suffix will be loaded into this generator and used based on the Language Policy.", + "default": "dialog.result" + }, + "languagePolicy": { + "type": "object", + "title": "Language policy", + "description": "Set alternate language policy for this generator. If not set, the global language policy will be used." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ResourceMultiLanguageGenerator" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.SendActivity": { + "$role": "implements(Microsoft.IDialog)", + "title": "Send an activity", + "description": "Respond with an activity.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action." + }, + "activity": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Activity", + "description": "Activity to send.", + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.SendActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.SendHandoffActivity": { + "$role": "implements(Microsoft.IDialog)", + "title": "Send a handoff activity", + "description": "Sends a handoff activity to trigger a handoff request.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "context": { + "$ref": "#/definitions/objectExpression", + "title": "Context", + "description": "Context to send with the handoff request" + }, + "transcript": { + "$ref": "#/definitions/objectExpression", + "title": "transcript", + "description": "Transcript to send with the handoff request" + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.SendHandoffActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.SetProperties": { + "$role": "implements(Microsoft.IDialog)", + "title": "Set property", + "description": "Set one or more property values.", + "type": "object", + "required": [ + "assignments", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + true, + "=user.age > 3" + ] + }, + "assignments": { + "type": "array", + "title": "Assignments", + "description": "Property value assignments to set.", + "items": { + "type": "object", + "title": "Assignment", + "description": "Property assignment.", + "properties": { + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property (named location to store information).", + "examples": [ + "user.age" + ] + }, + "value": { + "$ref": "#/definitions/valueExpression", + "title": "Value", + "description": "New value or expression.", + "examples": [ + "='milk'", + "=dialog.favColor", + "=dialog.favColor == 'red'" + ] + } + } + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.SetProperties" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.SetProperty": { + "$role": "implements(Microsoft.IDialog)", + "title": "Set property", + "description": "Set property to a value.", + "type": "object", + "required": [ + "property", + "value", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + true, + "=user.age > 3" + ] + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property (named location to store information).", + "examples": [ + "user.age" + ] + }, + "value": { + "$ref": "#/definitions/valueExpression", + "title": "Value", + "description": "New value or expression.", + "examples": [ + "='milk'", + "=dialog.favColor", + "=dialog.favColor == 'red'" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.SetProperty" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.SignOutUser": { + "$role": "implements(Microsoft.IDialog)", + "title": "Sign out user", + "description": "Sign a user out that was logged in previously using OAuthInput.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "userId": { + "$ref": "#/definitions/stringExpression", + "title": "UserId", + "description": "Expression to an user to signout. Default is user.id.", + "default": "=user.id" + }, + "connectionName": { + "$ref": "#/definitions/stringExpression", + "title": "Connection name", + "description": "Connection name that was used with OAuthInput to log a user in." + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + true, + "=user.age > 3" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.SignOutUser" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.StaticActivityTemplate": { + "$role": "implements(Microsoft.IActivityTemplate)", + "title": "Microsoft static activity template", + "description": "This allows you to define a static Activity object", + "type": "object", + "required": [ + "activity", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "activity": { + "$ref": "#/definitions/botframework.json/definitions/Activity", + "title": "Activity", + "description": "A static Activity to used.", + "required": [ + "type" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.StaticActivityTemplate" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.SwitchCondition": { + "$role": "implements(Microsoft.IDialog)", + "title": "Switch condition", + "description": "Execute different actions based on the value of a property.", + "type": "object", + "required": [ + "condition", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "condition": { + "$ref": "#/definitions/stringExpression", + "title": "Condition", + "description": "Property to evaluate.", + "examples": [ + "user.favColor" + ] + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + true, + "=user.age > 3" + ] + }, + "cases": { + "type": "array", + "title": "Cases", + "description": "Actions for each possible condition.", + "items": { + "type": "object", + "title": "Case", + "description": "Case and actions.", + "required": [ + "value" + ], + "properties": { + "value": { + "type": [ + "number", + "integer", + "boolean", + "string" + ], + "title": "Value", + "description": "The value to compare the condition with.", + "examples": [ + "red", + "true", + "13" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + } + } + } + }, + "default": { + "type": "array", + "title": "Default", + "description": "Actions to execute if none of the cases meet the condition.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.SwitchCondition" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.TelemetryTrackEventAction": { + "$role": "implements(Microsoft.IDialog)", + "type": "object", + "title": "Telemetry - track event", + "description": "Track a custom event using the registered Telemetry Client.", + "required": [ + "url", + "method", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "eventName": { + "$ref": "#/definitions/stringExpression", + "title": "Event name", + "description": "The name of the event to track.", + "examples": [ + "MyEventStarted", + "MyEventCompleted" + ] + }, + "properties": { + "type": "object", + "title": "Properties", + "description": "One or more properties to attach to the event being tracked.", + "additionalProperties": { + "$ref": "#/definitions/stringExpression" + } + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.TelemetryTrackEventAction" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.TemperatureEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Temperature recognizer", + "description": "Recognizer which recognizes temperatures.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.TemperatureEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.TemplateEngineLanguageGenerator": { + "$role": "implements(Microsoft.ILanguageGenerator)", + "title": "Template multi-language generator", + "description": "Template Generator which allows only inline evaluation of templates.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional generator ID." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.TemplateEngineLanguageGenerator" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.TextInput": { + "$role": [ + "implements(Microsoft.IDialog)", + "extends(Microsoft.InputDialog)" + ], + "type": "object", + "title": "Text input dialog", + "description": "Collection information - Ask for a word or sentence.", + "$policies": { + "interactive": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "defaultValue": { + "$ref": "#/definitions/stringExpression", + "title": "Default value", + "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", + "examples": [ + "hello world", + "Hello ${user.name}", + "=concat(user.firstname, user.lastName)" + ] + }, + "value": { + "$ref": "#/definitions/stringExpression", + "title": "Value", + "description": "'Property' will be set to the value of this expression unless it evaluates to null.", + "examples": [ + "hello world", + "Hello ${user.name}", + "=concat(user.firstname, user.lastName)" + ] + }, + "outputFormat": { + "$ref": "#/definitions/stringExpression", + "title": "Output format", + "description": "Expression to format the output.", + "examples": [ + "=toUpper(this.value)", + "${toUpper(this.value)}" + ] + }, + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "default": false, + "examples": [ + false, + "=user.isVip" + ] + }, + "prompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Initial prompt", + "description": "Message to send to collect information.", + "examples": [ + "What is your birth date?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "unrecognizedPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Unrecognized prompt", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "invalidPrompt": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Invalid prompt", + "description": "Message to send when the user input does not meet any validation expression.", + "examples": [ + "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "defaultValueResponse": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Default value response", + "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", + "examples": [ + "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." + ], + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "maxTurnCount": { + "$ref": "#/definitions/integerExpression", + "title": "Max turn count", + "description": "Maximum number of re-prompt attempts to collect information.", + "default": 3, + "minimum": 0, + "maximum": 2147483647, + "examples": [ + 3, + "=settings.xyz" + ] + }, + "validations": { + "type": "array", + "title": "Validation expressions", + "description": "Expression to validate user input.", + "items": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Expression which needs to met for the input to be considered valid", + "examples": [ + "int(this.value) > 1 && int(this.value) <= 150", + "count(this.value) < 300" + ] + } + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", + "examples": [ + "$birthday", + "dialog.${user.name}", + "=f(x)" + ] + }, + "alwaysPrompt": { + "$ref": "#/definitions/booleanExpression", + "title": "Always prompt", + "description": "Collect information even if the specified 'property' is not empty.", + "default": false, + "examples": [ + false, + "=$val" + ] + }, + "allowInterruptions": { + "$ref": "#/definitions/booleanExpression", + "title": "Allow Interruptions", + "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", + "default": true, + "examples": [ + true, + "=user.xyz" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.TextInput" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.TextTemplate": { + "$role": "implements(Microsoft.ITextTemplate)", + "title": "Microsoft TextTemplate", + "description": "Use LG Templates to create text", + "type": "object", + "required": [ + "template", + "$kind" + ], + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "template": { + "title": "Template", + "description": "Language Generator template to evaluate to create the text.", + "type": "string" + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.TextTemplate" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.ThrowException": { + "$role": "implements(Microsoft.IDialog)", + "title": "Throw an exception", + "description": "Throw an exception. Capture this exception with OnError trigger.", + "type": "object", + "required": [ + "errorValue", + "$kind" + ], + "$policies": { + "lastAction": true + }, + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "errorValue": { + "$ref": "#/definitions/valueExpression", + "title": "Error value", + "description": "Error value to throw." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.ThrowException" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.TraceActivity": { + "$role": "implements(Microsoft.IDialog)", + "title": "Send a TraceActivity", + "description": "Send a trace activity to the transcript logger and/ or Bot Framework Emulator.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + true, + "=user.age > 3" + ] + }, + "name": { + "$ref": "#/definitions/stringExpression", + "title": "Name", + "description": "Name of the trace activity" + }, + "label": { + "$ref": "#/definitions/stringExpression", + "title": "Label", + "description": "Label for the trace activity (used to identify it in a list of trace activities.)" + }, + "valueType": { + "$ref": "#/definitions/stringExpression", + "title": "Value type", + "description": "Type of value" + }, + "value": { + "$ref": "#/definitions/valueExpression", + "title": "Value", + "description": "Property that holds the value to send as trace activity." + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.TraceActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.TrueSelector": { + "$role": "implements(Microsoft.ITriggerSelector)", + "title": "True trigger selector", + "description": "Selector for all true events", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.TrueSelector" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.UpdateActivity": { + "$role": "implements(Microsoft.IDialog)", + "title": "Update an activity", + "description": "Respond with an activity.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + true, + "=user.age > 3" + ] + }, + "activityId": { + "$ref": "#/definitions/stringExpression", + "title": "Activity Id", + "description": "An string expression with the activity id to update.", + "examples": [ + "=turn.lastresult.id" + ] + }, + "activity": { + "$kind": "Microsoft.IActivityTemplate", + "title": "Activity", + "description": "Activity to send.", + "$ref": "#/definitions/Microsoft.IActivityTemplate" + }, + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.UpdateActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.UrlEntityRecognizer": { + "$role": [ + "implements(Microsoft.IRecognizer)", + "implements(Microsoft.IEntityRecognizer)" + ], + "title": "Url recognizer", + "description": "Recognizer which recognizes urls.", + "type": "object", + "$package": { + "name": "Microsoft.Bot.Builder.Dialogs.Adaptive", + "version": "4.13.2" + }, + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", + "type": "string", + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", + "const": "Microsoft.UrlEntityRecognizer" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "numberExpression": { + "$role": "expression", + "title": "Number or expression", + "description": "Number constant or expression to evaluate.", + "oneOf": [ + { + "type": "number", + "title": "Number", + "description": "Number constant.", + "default": 0, + "examples": [ + 15.5 + ] + }, + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=dialog.quantity" + ] + } + ] + }, + "objectExpression": { + "$role": "expression", + "title": "Object or expression", + "description": "Object or expression to evaluate.", + "oneOf": [ + { + "type": "object", + "title": "Object", + "description": "Object constant." + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "role": { + "title": "$role", + "description": "Defines the role played in the dialog schema from [expression|interface|implements($kind)|extends($kind)].", + "type": "string", + "pattern": "^((expression)|(interface)|(implements\\([a-zA-Z][a-zA-Z0-9.]*\\))|(extends\\([a-zA-Z][a-zA-Z0-9.]*\\)))$" + }, + "stringExpression": { + "$role": "expression", + "title": "String or expression", + "description": "Interpolated string or expression to evaluate.", + "oneOf": [ + { + "type": "string", + "title": "String", + "description": "Interpolated string", + "pattern": "^(?!(=)).*", + "examples": [ + "Hello ${user.name}" + ] + }, + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=concat('x','y','z')" + ] + } + ] + }, + "valueExpression": { + "$role": "expression", + "title": "Any or expression", + "description": "Any constant or expression to evaluate.", + "oneOf": [ + { + "type": "object", + "title": "Object", + "description": "Object constant." + }, + { + "type": "array", + "title": "Array", + "description": "Array constant." + }, + { + "type": "string", + "title": "String", + "description": "Interpolated string.", + "pattern": "^(?!(=)).*", + "examples": [ + "Hello ${user.name}" + ] + }, + { + "type": "boolean", + "title": "Boolean", + "description": "Boolean constant", + "examples": [ + false + ] + }, + { + "type": "number", + "title": "Number", + "description": "Number constant.", + "examples": [ + 15.5 + ] + }, + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=..." + ] + } + ] + }, + "schema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Core schema meta-schema", + "definitions": { + "schemaArray": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/schema" + } + }, + "nonNegativeInteger": { + "type": "integer", + "minimum": 0 + }, + "nonNegativeIntegerDefault0": { + "type": "integer", + "minimum": 0, + "default": 0 + }, + "simpleTypes": { + "enum": [ + "array", + "boolean", + "integer", + "null", + "number", + "object", + "string" + ] + }, + "stringArray": { + "type": "array", + "uniqueItems": true, + "default": [], + "items": { + "type": "string" + } + } + }, + "type": [ + "object", + "boolean" + ], + "default": true, + "properties": { + "$schema": { + "type": "string", + "format": "uri" + }, + "$ref": { + "type": "string", + "format": "uri-reference" + }, + "$comment": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "default": true, + "readOnly": { + "type": "boolean", + "default": false + }, + "writeOnly": { + "type": "boolean", + "default": false + }, + "examples": { + "type": "array", + "items": true + }, + "multipleOf": { + "type": "number", + "exclusiveMinimum": 0 + }, + "maximum": { + "type": "number" + }, + "exclusiveMaximum": { + "type": "number" + }, + "minimum": { + "type": "number" + }, + "exclusiveMinimum": { + "type": "number" + }, + "maxLength": { + "$ref": "#/definitions/schema/definitions/nonNegativeInteger" + }, + "minLength": { + "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" + }, + "pattern": { + "type": "string", + "format": "regex" + }, + "additionalItems": { + "$ref": "#/definitions/schema" + }, + "items": { + "anyOf": [ + { + "$ref": "#/definitions/schema" + }, + { + "$ref": "#/definitions/schema/definitions/schemaArray" + } + ], + "default": true + }, + "maxItems": { + "$ref": "#/definitions/schema/definitions/nonNegativeInteger" + }, + "minItems": { + "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" + }, + "uniqueItems": { + "type": "boolean", + "default": false + }, + "contains": { + "$ref": "#/definitions/schema" + }, + "maxProperties": { + "$ref": "#/definitions/schema/definitions/nonNegativeInteger" + }, + "minProperties": { + "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" + }, + "required": { + "$ref": "#/definitions/schema/definitions/stringArray" + }, + "additionalProperties": { + "$ref": "#/definitions/schema" + }, + "definitions": { + "type": "object", + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/schema" + } + }, + "properties": { + "type": "object", + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/schema" + } + }, + "patternProperties": { + "type": "object", + "propertyNames": { + "format": "regex" + }, + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/schema" + } + }, + "dependencies": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "$ref": "#/definitions/schema" + }, + { + "$ref": "#/definitions/schema/definitions/stringArray" + } + ] + } + }, + "propertyNames": { + "$ref": "#/definitions/schema" + }, + "const": true, + "enum": { + "type": "array", + "minItems": 1, + "uniqueItems": true, + "items": true + }, + "type": { + "anyOf": [ + { + "$ref": "#/definitions/schema/definitions/simpleTypes" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/schema/definitions/simpleTypes" + }, + "minItems": 1, + "uniqueItems": true + } + ] + }, + "format": { + "type": "string" + }, + "contentMediaType": { + "type": "string" + }, + "contentEncoding": { + "type": "string" + }, + "if": { + "$ref": "#/definitions/schema" + }, + "then": { + "$ref": "#/definitions/schema" + }, + "else": { + "$ref": "#/definitions/schema" + }, + "allOf": { + "$ref": "#/definitions/schema/definitions/schemaArray" + }, + "anyOf": { + "$ref": "#/definitions/schema/definitions/schemaArray" + }, + "oneOf": { + "$ref": "#/definitions/schema/definitions/schemaArray" + }, + "not": { + "$ref": "#/definitions/schema" + } + } + }, + "botframework.json": { + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "ChannelAccount": { + "description": "Channel account information needed to route a message", + "title": "ChannelAccount", + "type": "object", + "required": [ + "id", + "name" + ], + "properties": { + "id": { + "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", + "type": "string", + "title": "id" + }, + "name": { + "description": "Display friendly name", + "type": "string", + "title": "name" + }, + "aadObjectId": { + "description": "This account's object ID within Azure Active Directory (AAD)", + "type": "string", + "title": "aadObjectId" + }, + "role": { + "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", + "type": "string", + "title": "role" + } + } + }, + "ConversationAccount": { + "description": "Channel account information for a conversation", + "title": "ConversationAccount", + "type": "object", + "required": [ + "conversationType", + "id", + "isGroup", + "name" + ], + "properties": { + "isGroup": { + "description": "Indicates whether the conversation contains more than two participants at the time the\nactivity was generated", + "type": "boolean", + "title": "isGroup" + }, + "conversationType": { + "description": "Indicates the type of the conversation in channels that distinguish between conversation types", + "type": "string", + "title": "conversationType" + }, + "id": { + "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", + "type": "string", + "title": "id" + }, + "name": { + "description": "Display friendly name", + "type": "string", + "title": "name" + }, + "aadObjectId": { + "description": "This account's object ID within Azure Active Directory (AAD)", + "type": "string", + "title": "aadObjectId" + }, + "role": { + "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", + "enum": [ + "bot", + "user" + ], + "type": "string", + "title": "role" + } + } + }, + "MessageReaction": { + "description": "Message reaction object", + "title": "MessageReaction", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "Message reaction type. Possible values include: 'like', 'plusOne'", + "type": "string", + "title": "type" + } + } + }, + "CardAction": { + "description": "A clickable action", + "title": "CardAction", + "type": "object", + "required": [ + "title", + "type", + "value" + ], + "properties": { + "type": { + "description": "The type of action implemented by this button. Possible values include: 'openUrl', 'imBack',\n'postBack', 'playAudio', 'playVideo', 'showImage', 'downloadFile', 'signin', 'call',\n'payment', 'messageBack'", + "type": "string", + "title": "type" + }, + "title": { + "description": "Text description which appears on the button", + "type": "string", + "title": "title" + }, + "image": { + "description": "Image URL which will appear on the button, next to text label", + "type": "string", + "title": "image" + }, + "text": { + "description": "Text for this action", + "type": "string", + "title": "text" + }, + "displayText": { + "description": "(Optional) text to display in the chat feed if the button is clicked", + "type": "string", + "title": "displayText" + }, + "value": { + "description": "Supplementary parameter for action. Content of this property depends on the ActionType", + "title": "value" + }, + "channelData": { + "description": "Channel-specific data associated with this action", + "title": "channelData" + } + } + }, + "SuggestedActions": { + "description": "SuggestedActions that can be performed", + "title": "SuggestedActions", + "type": "object", + "required": [ + "actions", + "to" + ], + "properties": { + "to": { + "description": "Ids of the recipients that the actions should be shown to. These Ids are relative to the\nchannelId and a subset of all recipients of the activity", + "type": "array", + "title": "to", + "items": { + "title": "Id", + "description": "Id of recipient.", + "type": "string" + } + }, + "actions": { + "description": "Actions that can be shown to the user", + "type": "array", + "title": "actions", + "items": { + "$ref": "#/definitions/botframework.json/definitions/CardAction" + } + } + } + }, + "Attachment": { + "description": "An attachment within an activity", + "title": "Attachment", + "type": "object", + "required": [ + "contentType" + ], + "properties": { + "contentType": { + "description": "mimetype/Contenttype for the file", + "type": "string", + "title": "contentType" + }, + "contentUrl": { + "description": "Content Url", + "type": "string", + "title": "contentUrl" + }, + "content": { + "type": "object", + "description": "Embedded content", + "title": "content" + }, + "name": { + "description": "(OPTIONAL) The name of the attachment", + "type": "string", + "title": "name" + }, + "thumbnailUrl": { + "description": "(OPTIONAL) Thumbnail associated with attachment", + "type": "string", + "title": "thumbnailUrl" + } + } + }, + "Entity": { + "description": "Metadata object pertaining to an activity", + "title": "Entity", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "Type of this entity (RFC 3987 IRI)", + "type": "string", + "title": "type" + } + } + }, + "ConversationReference": { + "description": "An object relating to a particular point in a conversation", + "title": "ConversationReference", + "type": "object", + "required": [ + "bot", + "channelId", + "conversation", + "serviceUrl" + ], + "properties": { + "activityId": { + "description": "(Optional) ID of the activity to refer to", + "type": "string", + "title": "activityId" + }, + "user": { + "description": "(Optional) User participating in this conversation", + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", + "title": "user" + }, + "bot": { + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", + "description": "Bot participating in this conversation", + "title": "bot" + }, + "conversation": { + "$ref": "#/definitions/botframework.json/definitions/ConversationAccount", + "description": "Conversation reference", + "title": "conversation" + }, + "channelId": { + "description": "Channel ID", + "type": "string", + "title": "channelId" + }, + "serviceUrl": { + "description": "Service endpoint where operations concerning the referenced conversation may be performed", + "type": "string", + "title": "serviceUrl" + } + } + }, + "TextHighlight": { + "description": "Refers to a substring of content within another field", + "title": "TextHighlight", + "type": "object", + "required": [ + "occurrence", + "text" + ], + "properties": { + "text": { + "description": "Defines the snippet of text to highlight", + "type": "string", + "title": "text" + }, + "occurrence": { + "description": "Occurrence of the text field within the referenced text, if multiple exist.", + "type": "number", + "title": "occurrence" + } + } + }, + "SemanticAction": { + "description": "Represents a reference to a programmatic action", + "title": "SemanticAction", + "type": "object", + "required": [ + "entities", + "id" + ], + "properties": { + "id": { + "description": "ID of this action", + "type": "string", + "title": "id" + }, + "entities": { + "description": "Entities associated with this action", + "type": "object", + "title": "entities", + "additionalProperties": { + "$ref": "#/definitions/botframework.json/definitions/Entity" + } + } + } + }, + "Activity": { + "description": "An Activity is the basic communication type for the Bot Framework 3.0 protocol.", + "title": "Activity", + "type": "object", + "properties": { + "type": { + "description": "Contains the activity type. Possible values include: 'message', 'contactRelationUpdate',\n'conversationUpdate', 'typing', 'endOfConversation', 'event', 'invoke', 'deleteUserData',\n'messageUpdate', 'messageDelete', 'installationUpdate', 'messageReaction', 'suggestion',\n'trace', 'handoff'", + "type": "string", + "title": "type" + }, + "id": { + "description": "Contains an ID that uniquely identifies the activity on the channel.", + "type": "string", + "title": "id" + }, + "timestamp": { + "description": "Contains the date and time that the message was sent, in UTC, expressed in ISO-8601 format.", + "type": "string", + "format": "date-time", + "title": "timestamp" + }, + "localTimestamp": { + "description": "Contains the date and time that the message was sent, in local time, expressed in ISO-8601\nformat.\nFor example, 2016-09-23T13:07:49.4714686-07:00.", + "type": "string", + "format": "date-time", + "title": "localTimestamp" + }, + "localTimezone": { + "description": "Contains the name of the timezone in which the message, in local time, expressed in IANA Time\nZone database format.\nFor example, America/Los_Angeles.", + "type": "string", + "title": "localTimezone" + }, + "serviceUrl": { + "description": "Contains the URL that specifies the channel's service endpoint. Set by the channel.", + "type": "string", + "title": "serviceUrl" + }, + "channelId": { + "description": "Contains an ID that uniquely identifies the channel. Set by the channel.", + "type": "string", + "title": "channelId" + }, + "from": { + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", + "description": "Identifies the sender of the message.", + "title": "from" + }, + "conversation": { + "$ref": "#/definitions/botframework.json/definitions/ConversationAccount", + "description": "Identifies the conversation to which the activity belongs.", + "title": "conversation" + }, + "recipient": { + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", + "description": "Identifies the recipient of the message.", + "title": "recipient" + }, + "textFormat": { + "description": "Format of text fields Default:markdown. Possible values include: 'markdown', 'plain', 'xml'", + "type": "string", + "title": "textFormat" + }, + "attachmentLayout": { + "description": "The layout hint for multiple attachments. Default: list. Possible values include: 'list',\n'carousel'", + "type": "string", + "title": "attachmentLayout" + }, + "membersAdded": { + "description": "The collection of members added to the conversation.", + "type": "array", + "title": "membersAdded", + "items": { + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount" + } + }, + "membersRemoved": { + "description": "The collection of members removed from the conversation.", + "type": "array", + "title": "membersRemoved", + "items": { + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount" + } + }, + "reactionsAdded": { + "description": "The collection of reactions added to the conversation.", + "type": "array", + "title": "reactionsAdded", + "items": { + "$ref": "#/definitions/botframework.json/definitions/MessageReaction" + } + }, + "reactionsRemoved": { + "description": "The collection of reactions removed from the conversation.", + "type": "array", + "title": "reactionsRemoved", + "items": { + "$ref": "#/definitions/botframework.json/definitions/MessageReaction" + } + }, + "topicName": { + "description": "The updated topic name of the conversation.", + "type": "string", + "title": "topicName" + }, + "historyDisclosed": { + "description": "Indicates whether the prior history of the channel is disclosed.", + "type": "boolean", + "title": "historyDisclosed" + }, + "locale": { + "description": "A locale name for the contents of the text field.\nThe locale name is a combination of an ISO 639 two- or three-letter culture code associated\nwith a language\nand an ISO 3166 two-letter subculture code associated with a country or region.\nThe locale name can also correspond to a valid BCP-47 language tag.", + "type": "string", + "title": "locale" + }, + "text": { + "description": "The text content of the message.", + "type": "string", + "title": "text" + }, + "speak": { + "description": "The text to speak.", + "type": "string", + "title": "speak" + }, + "inputHint": { + "description": "Indicates whether your bot is accepting,\nexpecting, or ignoring user input after the message is delivered to the client. Possible\nvalues include: 'acceptingInput', 'ignoringInput', 'expectingInput'", + "type": "string", + "title": "inputHint" + }, + "summary": { + "description": "The text to display if the channel cannot render cards.", + "type": "string", + "title": "summary" + }, + "suggestedActions": { + "description": "The suggested actions for the activity.", + "$ref": "#/definitions/botframework.json/definitions/SuggestedActions", + "title": "suggestedActions" + }, + "attachments": { + "description": "Attachments", + "type": "array", + "title": "attachments", + "items": { + "$ref": "#/definitions/botframework.json/definitions/Attachment" + } + }, + "entities": { + "description": "Represents the entities that were mentioned in the message.", + "type": "array", + "title": "entities", + "items": { + "$ref": "#/definitions/botframework.json/definitions/Entity" + } + }, + "channelData": { + "description": "Contains channel-specific content.", + "title": "channelData" + }, + "action": { + "description": "Indicates whether the recipient of a contactRelationUpdate was added or removed from the\nsender's contact list.", + "type": "string", + "title": "action" + }, + "replyToId": { + "description": "Contains the ID of the message to which this message is a reply.", + "type": "string", + "title": "replyToId" + }, + "label": { + "description": "A descriptive label for the activity.", + "type": "string", + "title": "label" + }, + "valueType": { + "description": "The type of the activity's value object.", + "type": "string", + "title": "valueType" + }, + "value": { + "description": "A value that is associated with the activity.", + "title": "value" + }, + "name": { + "description": "The name of the operation associated with an invoke or event activity.", + "type": "string", + "title": "name" + }, + "relatesTo": { + "description": "A reference to another conversation or activity.", + "$ref": "#/definitions/botframework.json/definitions/ConversationReference", + "title": "relatesTo" + }, + "code": { + "description": "The a code for endOfConversation activities that indicates why the conversation ended.\nPossible values include: 'unknown', 'completedSuccessfully', 'userCancelled', 'botTimedOut',\n'botIssuedInvalidMessage', 'channelFailed'", + "type": "string", + "title": "code" + }, + "expiration": { + "description": "The time at which the activity should be considered to be \"expired\" and should not be\npresented to the recipient.", + "type": "string", + "format": "date-time", + "title": "expiration" + }, + "importance": { + "description": "The importance of the activity. Possible values include: 'low', 'normal', 'high'", + "type": "string", + "title": "importance" + }, + "deliveryMode": { + "description": "A delivery hint to signal to the recipient alternate delivery paths for the activity.\nThe default delivery mode is \"default\". Possible values include: 'normal', 'notification'", + "type": "string", + "title": "deliveryMode" + }, + "listenFor": { + "description": "List of phrases and references that speech and language priming systems should listen for", + "type": "array", + "title": "listenFor", + "items": { + "type": "string", + "title": "Phrase", + "description": "Phrase to listen for." + } + }, + "textHighlights": { + "description": "The collection of text fragments to highlight when the activity contains a ReplyToId value.", + "type": "array", + "title": "textHighlights", + "items": { + "$ref": "#/definitions/botframework.json/definitions/TextHighlight" + } + }, + "semanticAction": { + "$ref": "#/definitions/botframework.json/definitions/SemanticAction", + "description": "An optional programmatic action accompanying this request", + "title": "semanticAction" + } + } + } + } + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/schemas/sdk.uischema b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/schemas/sdk.uischema new file mode 100644 index 0000000000..9cf19c6919 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/schemas/sdk.uischema @@ -0,0 +1,1409 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema", + "Microsoft.AdaptiveDialog": { + "form": { + "description": "This configures a data driven dialog via a collection of events and actions.", + "helpLink": "https://aka.ms/bf-composer-docs-dialog", + "hidden": [ + "triggers", + "generator", + "selector", + "schema" + ], + "label": "Adaptive dialog", + "order": [ + "recognizer", + "*" + ], + "properties": { + "recognizer": { + "description": "To understand what the user says, your dialog needs a \"Recognizer\"; that includes example words and sentences that users may use.", + "label": "Language Understanding" + } + } + } + }, + "Microsoft.Ask": { + "flow": { + "body": { + "field": "activity", + "widget": "LgWidget" + }, + "footer": { + "description": "= Default operation", + "property": "=action.defaultOperation", + "widget": "PropertyDescription" + }, + "header": { + "colors": { + "icon": "#5C2E91", + "theme": "#EEEAF4" + }, + "icon": "MessageBot", + "widget": "ActionHeader" + }, + "hideFooter": "=!action.defaultOperation", + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-send-activity", + "label": "Send a response to ask a question", + "order": [ + "activity", + "*" + ], + "subtitle": "Ask Activity" + } + }, + "Microsoft.AttachmentInput": { + "flow": { + "body": "=action.prompt", + "botAsks": { + "body": { + "defaultContent": "", + "field": "prompt", + "widget": "LgWidget" + }, + "header": { + "colors": { + "icon": "#5C2E91", + "theme": "#EEEAF4" + }, + "icon": "MessageBot", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "nowrap": true, + "userInput": { + "header": { + "colors": { + "icon": "#0078D4", + "theme": "#E5F0FF" + }, + "disableSDKTitle": true, + "icon": "User", + "menu": "none", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "widget": "PromptWidget" + }, + "form": { + "helpLink": "https://aka.ms/bfc-ask-for-user-input", + "label": "Prompt for a file or an attachment", + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Attachment Input" + } + }, + "Microsoft.BeginDialog": { + "flow": { + "body": { + "dialog": "=action.dialog", + "widget": "DialogRef" + }, + "footer": { + "description": "= Return value", + "property": "=action.resultProperty", + "widget": "PropertyDescription" + }, + "hideFooter": "=!action.resultProperty", + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-understanding-dialogs", + "label": "Begin a new dialog", + "order": [ + "dialog", + "options", + "resultProperty", + "*" + ], + "properties": { + "resultProperty": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Begin Dialog" + } + }, + "Microsoft.BeginSkill": { + "flow": { + "body": { + "operation": "Host", + "resource": "=coalesce(action.skillEndpoint, \"?\")", + "singleline": true, + "widget": "ResourceOperation" + }, + "colors": { + "color": "#FFFFFF", + "icon": "#FFFFFF", + "theme": "#004578" + }, + "footer": { + "description": "= Result", + "property": "=action.resultProperty", + "widget": "PropertyDescription" + }, + "hideFooter": "=!action.resultProperty", + "icon": "Library", + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bf-composer-docs-connect-skill", + "label": "Connect to a skill", + "properties": { + "resultProperty": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Skill Dialog" + } + }, + "Microsoft.BreakLoop": { + "form": { + "label": "Break out of loop", + "subtitle": "Break out of loop" + } + }, + "Microsoft.CancelAllDialogs": { + "flow": { + "body": { + "description": "(Event)", + "property": "=coalesce(action.eventName, \"?\")", + "widget": "PropertyDescription" + }, + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-understanding-dialogs", + "label": "Cancel all active dialogs", + "subtitle": "Cancel All Dialogs" + } + }, + "Microsoft.ChoiceInput": { + "flow": { + "body": "=action.prompt", + "botAsks": { + "body": { + "defaultContent": "", + "field": "prompt", + "widget": "LgWidget" + }, + "header": { + "colors": { + "icon": "#5C2E91", + "theme": "#EEEAF4" + }, + "icon": "MessageBot", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "nowrap": true, + "userInput": { + "header": { + "colors": { + "icon": "#0078D4", + "theme": "#E5F0FF" + }, + "disableSDKTitle": true, + "icon": "User", + "menu": "none", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "widget": "PromptWidget" + }, + "form": { + "helpLink": "https://aka.ms/bfc-ask-for-user-input", + "label": "Prompt with multi-choice", + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Choice Input" + } + }, + "Microsoft.ConfirmInput": { + "flow": { + "body": "=action.prompt", + "botAsks": { + "body": { + "defaultContent": "", + "field": "prompt", + "widget": "LgWidget" + }, + "header": { + "colors": { + "icon": "#5C2E91", + "theme": "#EEEAF4" + }, + "icon": "MessageBot", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "nowrap": true, + "userInput": { + "header": { + "colors": { + "icon": "#0078D4", + "theme": "#E5F0FF" + }, + "disableSDKTitle": true, + "icon": "User", + "menu": "none", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "widget": "PromptWidget" + }, + "form": { + "helpLink": "https://aka.ms/bfc-ask-for-user-input", + "label": "Prompt for confirmation", + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Confirm Input" + } + }, + "Microsoft.ContinueLoop": { + "form": { + "label": "Continue loop", + "subtitle": "Continue loop" + } + }, + "Microsoft.DateTimeInput": { + "flow": { + "body": "=action.prompt", + "botAsks": { + "body": { + "defaultContent": "", + "field": "prompt", + "widget": "LgWidget" + }, + "header": { + "colors": { + "icon": "#5C2E91", + "theme": "#EEEAF4" + }, + "icon": "MessageBot", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "nowrap": true, + "userInput": { + "header": { + "colors": { + "icon": "#0078D4", + "theme": "#E5F0FF" + }, + "disableSDKTitle": true, + "icon": "User", + "menu": "none", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "widget": "PromptWidget" + }, + "form": { + "helpLink": "https://aka.ms/bfc-ask-for-user-input", + "label": "Prompt for a date or a time", + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Date Time Input" + } + }, + "Microsoft.DebugBreak": { + "form": { + "label": "Debug Break" + } + }, + "Microsoft.DeleteProperties": { + "flow": { + "body": { + "items": "=action.properties", + "widget": "ListOverview" + }, + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-using-memory", + "label": "Delete properties", + "properties": { + "properties": { + "intellisenseScopes": [ + "user-variables" + ] + } + }, + "subtitle": "Delete Properties" + } + }, + "Microsoft.DeleteProperty": { + "flow": { + "body": "=action.property", + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-using-memory", + "label": "Delete a property", + "properties": { + "property": { + "intellisenseScopes": [ + "user-variables" + ] + } + }, + "subtitle": "Delete Property" + } + }, + "Microsoft.EditActions": { + "flow": { + "body": "=action.changeType", + "widget": "ActionCard" + }, + "form": { + "label": "Modify active dialog", + "subtitle": "Edit Actions" + } + }, + "Microsoft.EditArray": { + "flow": { + "body": { + "operation": "=coalesce(action.changeType, \"?\")", + "resource": "=coalesce(action.itemsProperty, \"?\")", + "widget": "ResourceOperation" + }, + "footer": { + "description": "= Result", + "property": "=action.resultProperty", + "widget": "PropertyDescription" + }, + "hideFooter": "=!action.resultProperty", + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-using-memory", + "label": "Edit an array property", + "properties": { + "itemsProperty": { + "intellisenseScopes": [ + "user-variables" + ] + }, + "resultProperty": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Edit Array" + } + }, + "Microsoft.EmitEvent": { + "flow": { + "body": { + "description": "(Event)", + "property": "=coalesce(action.eventName, \"?\")", + "widget": "PropertyDescription" + }, + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-custom-events", + "label": "Emit a custom event", + "subtitle": "Emit Event" + } + }, + "Microsoft.EndDialog": { + "form": { + "helpLink": "https://aka.ms/bfc-understanding-dialogs", + "label": "End this dialog", + "subtitle": "End Dialog" + } + }, + "Microsoft.EndTurn": { + "form": { + "helpLink": "https://aka.ms/bfc-understanding-dialogs", + "label": "End turn", + "subtitle": "End Turn" + } + }, + "Microsoft.Foreach": { + "flow": { + "loop": { + "body": "=concat(\"Each value in \", coalesce(action.itemsProperty, \"?\"))", + "widget": "ActionCard" + }, + "nowrap": true, + "widget": "ForeachWidget" + }, + "form": { + "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", + "hidden": [ + "actions" + ], + "label": "Loop: For each item", + "order": [ + "itemsProperty", + "*" + ], + "properties": { + "index": { + "intellisenseScopes": [ + "variable-scopes" + ] + }, + "itemsProperty": { + "intellisenseScopes": [ + "user-variables" + ] + }, + "value": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "For Each" + } + }, + "Microsoft.ForeachPage": { + "flow": { + "loop": { + "body": "=concat(\"Each page of \", coalesce(action.pageSize, \"?\"), \" in \", coalesce(action.page, \"?\"))", + "widget": "ActionCard" + }, + "nowrap": true, + "widget": "ForeachWidget" + }, + "form": { + "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", + "hidden": [ + "actions" + ], + "label": "Loop: For each page (multiple items)", + "order": [ + "itemsProperty", + "pageSize", + "*" + ], + "properties": { + "itemsProperty": { + "intellisenseScopes": [ + "user-variables" + ] + }, + "page": { + "intellisenseScopes": [ + "variable-scopes" + ] + }, + "pageIndex": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "For Each Page" + } + }, + "Microsoft.GetActivityMembers": { + "flow": { + "body": { + "description": "= ActivityId", + "property": "=coalesce(action.activityId, \"?\")", + "widget": "PropertyDescription" + }, + "footer": { + "description": "= Result property", + "property": "=coalesce(action.property, \"?\")", + "widget": "PropertyDescription" + }, + "widget": "ActionCard" + } + }, + "Microsoft.GetConversationMembers": { + "flow": { + "footer": { + "description": "= Result property", + "property": "=action.property", + "widget": "PropertyDescription" + }, + "widget": "ActionCard" + } + }, + "Microsoft.HttpRequest": { + "flow": { + "body": { + "operation": "=action.method", + "resource": "=action.url", + "singleline": true, + "widget": "ResourceOperation" + }, + "footer": { + "description": "= Result property", + "property": "=action.resultProperty", + "widget": "PropertyDescription" + }, + "hideFooter": "=!action.resultProperty", + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-using-http", + "label": "Send an HTTP request", + "order": [ + "method", + "url", + "body", + "headers", + "*" + ], + "properties": { + "resultProperty": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "HTTP Request" + } + }, + "Microsoft.IfCondition": { + "flow": { + "judgement": { + "body": "=coalesce(action.condition, \"\")", + "widget": "ActionCard" + }, + "nowrap": true, + "widget": "IfConditionWidget" + }, + "form": { + "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", + "hidden": [ + "actions", + "elseActions" + ], + "label": "Branch: If/Else", + "subtitle": "If Condition" + } + }, + "Microsoft.LogAction": { + "form": { + "helpLink": "https://aka.ms/composer-telemetry", + "label": "Log to console", + "subtitle": "Log Action" + } + }, + "Microsoft.NumberInput": { + "flow": { + "body": "=action.prompt", + "botAsks": { + "body": { + "defaultContent": "", + "field": "prompt", + "widget": "LgWidget" + }, + "header": { + "colors": { + "icon": "#5C2E91", + "theme": "#EEEAF4" + }, + "icon": "MessageBot", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "nowrap": true, + "userInput": { + "header": { + "colors": { + "icon": "#0078D4", + "theme": "#E5F0FF" + }, + "disableSDKTitle": true, + "icon": "User", + "menu": "none", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "widget": "PromptWidget" + }, + "form": { + "helpLink": "https://aka.ms/bfc-ask-for-user-input", + "label": "Prompt for a number", + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Number Input" + } + }, + "Microsoft.OAuthInput": { + "flow": { + "body": { + "operation": "Connection", + "resource": "=coalesce(action.connectionName, \"?\")", + "singleline": true, + "widget": "ResourceOperation" + }, + "footer": { + "description": "= Token property", + "property": "=action.property", + "widget": "PropertyDescription" + }, + "hideFooter": "=!action.property", + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-using-oauth", + "label": "OAuth login", + "order": [ + "connectionName", + "*" + ], + "subtitle": "OAuth Input" + } + }, + "Microsoft.OnActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Activities", + "order": [ + "condition", + "*" + ], + "subtitle": "Activity received" + }, + "trigger": { + "label": "Activities (Activity received)", + "order": 5.1, + "submenu": { + "label": "Activities", + "placeholder": "Select an activity type", + "prompt": "Which activity type?" + } + } + }, + "Microsoft.OnAssignEntity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Handle a condition when an entity is assigned", + "order": [ + "condition", + "*" + ], + "subtitle": "EntityAssigned activity" + } + }, + "Microsoft.OnBeginDialog": { + "form": { + "hidden": [ + "actions" + ], + "label": "Dialog started", + "order": [ + "condition", + "*" + ], + "subtitle": "Begin dialog event" + }, + "trigger": { + "label": "Dialog started (Begin dialog event)", + "order": 4.1, + "submenu": { + "label": "Dialog events", + "placeholder": "Select an event type", + "prompt": "Which event?" + } + } + }, + "Microsoft.OnCancelDialog": { + "form": { + "hidden": [ + "actions" + ], + "label": "Dialog cancelled", + "order": [ + "condition", + "*" + ], + "subtitle": "Cancel dialog event" + }, + "trigger": { + "label": "Dialog cancelled (Cancel dialog event)", + "order": 4.2, + "submenu": "Dialog events" + } + }, + "Microsoft.OnChooseEntity": { + "form": { + "hidden": [ + "actions" + ], + "order": [ + "condition", + "*" + ] + } + }, + "Microsoft.OnChooseIntent": { + "form": { + "hidden": [ + "actions" + ], + "order": [ + "condition", + "*" + ] + }, + "trigger": { + "label": "Duplicated intents recognized", + "order": 6 + } + }, + "Microsoft.OnCommandActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Command received", + "order": [ + "condition", + "*" + ], + "subtitle": "Command activity received" + }, + "trigger": { + "label": "Command received (Command activity received)", + "order": 5.81, + "submenu": "Activities" + } + }, + "Microsoft.OnCommandResultActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Command Result received", + "order": [ + "condition", + "*" + ], + "subtitle": "Command Result activity received" + }, + "trigger": { + "label": "Command Result received (Command Result activity received)", + "order": 5.81, + "submenu": "Activities" + } + }, + "Microsoft.OnCondition": { + "form": { + "hidden": [ + "actions" + ], + "label": "Handle a condition", + "order": [ + "condition", + "*" + ], + "subtitle": "Condition" + } + }, + "Microsoft.OnConversationUpdateActivity": { + "form": { + "description": "Handle the events fired when a user begins a new conversation with the bot.", + "helpLink": "https://aka.ms/bf-composer-docs-conversation-update-activity", + "hidden": [ + "actions" + ], + "label": "Greeting", + "order": [ + "condition", + "*" + ], + "subtitle": "ConversationUpdate activity" + }, + "trigger": { + "label": "Greeting (ConversationUpdate activity)", + "order": 5.2, + "submenu": "Activities" + } + }, + "Microsoft.OnDialogEvent": { + "form": { + "hidden": [ + "actions" + ], + "label": "Dialog events", + "order": [ + "condition", + "*" + ], + "subtitle": "Dialog event" + }, + "trigger": { + "label": "Custom events", + "order": 7 + } + }, + "Microsoft.OnEndOfActions": { + "form": { + "hidden": [ + "actions" + ], + "label": "Handle a condition when actions have ended", + "order": [ + "condition", + "*" + ], + "subtitle": "EndOfActions activity" + } + }, + "Microsoft.OnEndOfConversationActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Conversation ended", + "order": [ + "condition", + "*" + ], + "subtitle": "EndOfConversation activity" + }, + "trigger": { + "label": "Conversation ended (EndOfConversation activity)", + "order": 5.3, + "submenu": "Activities" + } + }, + "Microsoft.OnError": { + "form": { + "hidden": [ + "actions" + ], + "label": "Error occurred", + "order": [ + "condition", + "*" + ], + "subtitle": "Error event" + }, + "trigger": { + "label": "Error occurred (Error event)", + "order": 4.3, + "submenu": "Dialog events" + } + }, + "Microsoft.OnEventActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Event received", + "order": [ + "condition", + "*" + ], + "subtitle": "Event activity" + }, + "trigger": { + "label": "Event received (Event activity)", + "order": 5.4, + "submenu": "Activities" + } + }, + "Microsoft.OnHandoffActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Handover to human", + "order": [ + "condition", + "*" + ], + "subtitle": "Handoff activity" + }, + "trigger": { + "label": "Handover to human (Handoff activity)", + "order": 5.5, + "submenu": "Activities" + } + }, + "Microsoft.OnInstallationUpdateActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Installation updated", + "order": [ + "condition", + "*" + ], + "subtitle": "Installation updated activity" + } + }, + "Microsoft.OnIntent": { + "form": { + "hidden": [ + "actions" + ], + "label": "Intent recognized", + "order": [ + "intent", + "condition", + "entities", + "*" + ], + "subtitle": "Intent recognized" + }, + "trigger": { + "label": "Intent recognized", + "order": 1 + } + }, + "Microsoft.OnInvokeActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Conversation invoked", + "order": [ + "condition", + "*" + ], + "subtitle": "Invoke activity" + }, + "trigger": { + "label": "Conversation invoked (Invoke activity)", + "order": 5.6, + "submenu": "Activities" + } + }, + "Microsoft.OnMessageActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Message received", + "order": [ + "condition", + "*" + ], + "subtitle": "Message activity received" + }, + "trigger": { + "label": "Message received (Message activity received)", + "order": 5.81, + "submenu": "Activities" + } + }, + "Microsoft.OnMessageDeleteActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Message deleted", + "order": [ + "condition", + "*" + ], + "subtitle": "Message deleted activity" + }, + "trigger": { + "label": "Message deleted (Message deleted activity)", + "order": 5.82, + "submenu": "Activities" + } + }, + "Microsoft.OnMessageReactionActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Message reaction", + "order": [ + "condition", + "*" + ], + "subtitle": "Message reaction activity" + }, + "trigger": { + "label": "Message reaction (Message reaction activity)", + "order": 5.83, + "submenu": "Activities" + } + }, + "Microsoft.OnMessageUpdateActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Message updated", + "order": [ + "condition", + "*" + ], + "subtitle": "Message updated activity" + }, + "trigger": { + "label": "Message updated (Message updated activity)", + "order": 5.84, + "submenu": "Activities" + } + }, + "Microsoft.OnQnAMatch": { + "trigger": { + "label": "QnA Intent recognized", + "order": 2 + } + }, + "Microsoft.OnRepromptDialog": { + "form": { + "hidden": [ + "actions" + ], + "label": "Re-prompt for input", + "order": [ + "condition", + "*" + ], + "subtitle": "Reprompt dialog event" + }, + "trigger": { + "label": "Re-prompt for input (Reprompt dialog event)", + "order": 4.4, + "submenu": "Dialog events" + } + }, + "Microsoft.OnTypingActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "User is typing", + "order": [ + "condition", + "*" + ], + "subtitle": "Typing activity" + }, + "trigger": { + "label": "User is typing (Typing activity)", + "order": 5.7, + "submenu": "Activities" + } + }, + "Microsoft.OnUnknownIntent": { + "form": { + "hidden": [ + "actions" + ], + "label": "Unknown intent", + "order": [ + "condition", + "*" + ], + "subtitle": "Unknown intent recognized" + }, + "trigger": { + "label": "Unknown intent", + "order": 3 + } + }, + "Microsoft.QnAMakerDialog": { + "flow": { + "body": "=action.hostname", + "widget": "ActionCard" + } + }, + "Microsoft.RegexRecognizer": { + "form": { + "hidden": [ + "entities" + ] + } + }, + "Microsoft.RepeatDialog": { + "form": { + "helpLink": "https://aka.ms/bfc-understanding-dialogs", + "label": "Repeat this dialog", + "order": [ + "options", + "*" + ], + "subtitle": "Repeat Dialog" + } + }, + "Microsoft.ReplaceDialog": { + "flow": { + "body": { + "dialog": "=action.dialog", + "widget": "DialogRef" + }, + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-understanding-dialogs", + "label": "Replace this dialog", + "order": [ + "dialog", + "options", + "*" + ], + "subtitle": "Replace Dialog" + } + }, + "Microsoft.SendActivity": { + "flow": { + "body": { + "field": "activity", + "widget": "LgWidget" + }, + "header": { + "colors": { + "icon": "#5C2E91", + "theme": "#EEEAF4" + }, + "icon": "MessageBot", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-send-activity", + "label": "Send a response", + "order": [ + "activity", + "*" + ], + "subtitle": "Send Activity" + } + }, + "Microsoft.SendHandoffActivity": { + "flow": { + "widget": "ActionHeader" + }, + "form": { + "helpLink": "https://aka.ms/bfc-send-handoff-activity", + "label": "Send a handoff request", + "subtitle": "Send Handoff Activity" + }, + "menu": { + "label": "Send Handoff Event", + "submenu": [ + "Access external resources" + ] + } + }, + "Microsoft.SetProperties": { + "flow": { + "body": { + "items": "=foreach(action.assignments, x => concat(coalesce(x.property, \"?\"), \" : \", coalesce(x.value, \"?\")))", + "widget": "ListOverview" + }, + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-using-memory", + "label": "Set properties", + "properties": { + "assignments": { + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + } + } + }, + "subtitle": "Set Properties" + } + }, + "Microsoft.SetProperty": { + "flow": { + "body": "${coalesce(action.property, \"?\")} : ${coalesce(action.value, \"?\")}", + "widget": "ActionCard" + }, + "form": { + "helpLink": "https://aka.ms/bfc-using-memory", + "label": "Set a property", + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Set Property" + } + }, + "Microsoft.SignOutUser": { + "form": { + "label": "Sign out user", + "subtitle": "Signout User" + } + }, + "Microsoft.SwitchCondition": { + "flow": { + "judgement": { + "body": "=coalesce(action.condition, \"\")", + "widget": "ActionCard" + }, + "nowrap": true, + "widget": "SwitchConditionWidget" + }, + "form": { + "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", + "hidden": [ + "default" + ], + "label": "Branch: Switch (multiple options)", + "properties": { + "cases": { + "hidden": [ + "actions" + ] + }, + "condition": { + "intellisenseScopes": [ + "user-variables" + ] + } + }, + "subtitle": "Switch Condition" + } + }, + "Microsoft.TextInput": { + "flow": { + "body": "=action.prompt", + "botAsks": { + "body": { + "defaultContent": "", + "field": "prompt", + "widget": "LgWidget" + }, + "header": { + "colors": { + "icon": "#5C2E91", + "theme": "#EEEAF4" + }, + "icon": "MessageBot", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "nowrap": true, + "userInput": { + "header": { + "colors": { + "icon": "#0078D4", + "theme": "#E5F0FF" + }, + "disableSDKTitle": true, + "icon": "User", + "menu": "none", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "widget": "PromptWidget" + }, + "form": { + "helpLink": "https://aka.ms/bfc-ask-for-user-input", + "label": "Prompt for text", + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Text Input" + } + }, + "Microsoft.ThrowException": { + "flow": { + "body": { + "description": "= ErrorValue", + "property": "=coalesce(action.errorValue, \"?\")", + "widget": "PropertyDescription" + }, + "widget": "ActionCard" + }, + "form": { + "label": "Throw an exception", + "subtitle": "Throw an exception" + } + }, + "Microsoft.TraceActivity": { + "form": { + "helpLink": "https://aka.ms/composer-telemetry", + "label": "Emit a trace event", + "subtitle": "Trace Activity" + } + }, + "Microsoft.UpdateActivity": { + "flow": { + "body": { + "field": "activity", + "widget": "LgWidget" + }, + "header": { + "colors": { + "icon": "#656565", + "theme": "#D7D7D7" + }, + "icon": "MessageBot", + "title": "Update activity", + "widget": "ActionHeader" + }, + "widget": "ActionCard" + }, + "form": { + "label": "Update an activity", + "subtitle": "Update Activity" + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/schemas/update-schema.ps1 b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/schemas/update-schema.ps1 new file mode 100644 index 0000000000..67715586e4 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/schemas/update-schema.ps1 @@ -0,0 +1,27 @@ +$SCHEMA_FILE="sdk.schema" +$UISCHEMA_FILE="sdk.uischema" +$BACKUP_SCHEMA_FILE="sdk-backup.schema" +$BACKUP_UISCHEMA_FILE="sdk-backup.uischema" + +Write-Host "Running schema merge." + +if (Test-Path $SCHEMA_FILE -PathType leaf) { Move-Item -Force -Path $SCHEMA_FILE -Destination $BACKUP_SCHEMA_FILE } +if (Test-Path $UISCHEMA_FILE -PathType leaf) { Move-Item -Force -Path $UISCHEMA_FILE -Destination $BACKUP_UISCHEMA_FILE } + +bf dialog:merge "*.schema" "!**/sdk-backup.schema" "*.uischema" "!**/sdk-backup.uischema" "!**/sdk.override.uischema" "!**/generated" "../*.csproj" "../package.json" -o $SCHEMA_FILE + +if (Test-Path $SCHEMA_FILE -PathType leaf) +{ + if (Test-Path $BACKUP_SCHEMA_FILE -PathType leaf) { Remove-Item -Force -Path $BACKUP_SCHEMA_FILE } + if (Test-Path $BACKUP_UISCHEMA_FILE -PathType leaf) { Remove-Item -Force -Path $BACKUP_UISCHEMA_FILE } + + Write-Host "Schema merged succesfully." + if (Test-Path $SCHEMA_FILE -PathType leaf) { Write-Host " Schema: $SCHEMA_FILE" } + if (Test-Path $UISCHEMA_FILE -PathType leaf) { Write-Host " UI Schema: $UISCHEMA_FILE" } +} +else +{ + Write-Host "Schema merge failed. Restoring previous versions." + if (Test-Path $BACKUP_SCHEMA_FILE -PathType leaf) { Move-Item -Force -Path $BACKUP_SCHEMA_FILE -Destination $SCHEMA_FILE } + if (Test-Path $BACKUP_UISCHEMA_FILE -PathType leaf) { Move-Item -Force -Path $BACKUP_UISCHEMA_FILE -Destination $UISCHEMA_FILE } +} diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/schemas/update-schema.sh b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/schemas/update-schema.sh new file mode 100644 index 0000000000..50beec9c4c --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/schemas/update-schema.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash +SCHEMA_FILE=sdk.schema +UISCHEMA_FILE=sdk.uischema +BACKUP_SCHEMA_FILE=sdk-backup.schema +BACKUP_UISCHEMA_FILE=sdk-backup.uischema + +while [ $# -gt 0 ]; do + if [[ $1 == *"-"* ]]; then + param="${1/-/}" + declare $param="$2" + fi + shift +done + +echo "Running schema merge." +[ -f "$SCHEMA_FILE" ] && mv "./$SCHEMA_FILE" "./$BACKUP_SCHEMA_FILE" +[ -f "$UISCHEMA_FILE" ] && mv "./$UISCHEMA_FILE" "./$BACKUP_UISCHEMA_FILE" + +bf dialog:merge "*.schema" "!**/sdk-backup.schema" "*.uischema" "!**/sdk-backup.uischema" "!**/sdk.override.uischema" "!**/generated" "../*.csproj" "../package.json" -o $SCHEMA_FILE + +if [ -f "$SCHEMA_FILE" ]; then + rm -rf "./$BACKUP_SCHEMA_FILE" + rm -rf "./$BACKUP_UISCHEMA_FILE" + echo "Schema merged succesfully." + [ -f "$SCHEMA_FILE" ] && echo " Schema: $SCHEMA_FILE" + [ -f "$UISCHEMA_FILE" ] && echo " UI Schema: $UISCHEMA_FILE" +else + echo "Schema merge failed. Restoring previous versions." + [ -f "$BACKUP_SCHEMA_FILE" ] && mv "./$BACKUP_SCHEMA_FILE" "./$SCHEMA_FILE" + [ -f "$BACKUP_UISCHEMA_FILE" ] && mv "./$BACKUP_UISCHEMA_FILE" "./$UISCHEMA_FILE" +fi diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/settings/appsettings.json b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/settings/appsettings.json new file mode 100644 index 0000000000..531e75ff37 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/settings/appsettings.json @@ -0,0 +1,76 @@ +{ + "customFunctions": [], + "defaultLanguage": "en-us", + "defaultLocale": "en-us", + "importedLibraries": [], + "languages": [ + "en-us" + ], + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "luFeatures": { + "enableCompositeEntities": true, + "enableListEntities": true, + "enableMLEntities": true, + "enablePattern": true, + "enablePhraseLists": true, + "enablePrebuiltEntities": true, + "enableRegexEntities": true + }, + "luis": { + "authoringEndpoint": "", + "authoringRegion": "", + "defaultLanguage": "en-us", + "endpoint": "", + "environment": "composer", + "name": "EchoSkillBotComposer" + }, + "MicrosoftAppId": "", + "publishTargets": [], + "qna": { + "hostname": "", + "knowledgebaseid": "", + "qnaRegion": "westus" + }, + "runtime": { + "command": "dotnet run --project EchoSkillBotComposer.csproj", + "customRuntime": true, + "key": "adaptive-runtime-dotnet-webapp", + "path": "../" + }, + "runtimeSettings": { + "adapters": [], + "features": { + "removeRecipientMentions": false, + "showTyping": false, + "traceTranscript": false, + "useInspection": false, + "setSpeak": { + "voiceFontName": "en-US-AriaNeural", + "fallbackToTextForSpeechIfEmpty": true + } + }, + "components": [], + "skills": { + "allowedCallers": ["*"] + }, + "storage": "", + "telemetry": { + "logActivities": true, + "logPersonalInformation": false, + "options": { + "connectionString": "" + } + } + }, + "downsampling": { + "maxImbalanceRatio": -1 + }, + "skillConfiguration": {}, + "skillHostEndpoint": "http://localhost:35410/api/skills" +} \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/wwwroot/default.htm b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/wwwroot/default.htm new file mode 100644 index 0000000000..696762e394 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/wwwroot/default.htm @@ -0,0 +1,364 @@ + + + + + + + EchoSkillBotComposer + + + + + +
    +
    +
    +
    EchoSkillBotComposer
    +
    +
    +
    +
    +
    Your bot is ready!
    +
    You can test your bot in the Bot Framework Emulator
    + by connecting to http://localhost:3978/api/messages.
    +
    +
    Visit Azure + Bot Service to register your bot and add it to
    + various channels. The bot's endpoint URL typically looks + like this:
    +
    https://your_bots_hostname/api/messages
    +
    +
    +
    +
    + +
    + + + \ No newline at end of file diff --git a/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/wwwroot/manifests/echoskillbotcomposer-manifest.json b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/wwwroot/manifests/echoskillbotcomposer-manifest.json new file mode 100644 index 0000000000..25205b9286 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/Composer/EchoSkillBotComposer/wwwroot/manifests/echoskillbotcomposer-manifest.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/skills/v2.1/skill-manifest.json", + "$id": "EchoSkillBotComposerDotNet", + "name": "EchoSkillBotComposerDotNet", + "version": "1.0", + "description": "This is a skill for echoing what the user sent to the bot (using Composer with the dotnet runtime).", + "publisherName": "Microsoft", + "privacyUrl": "https://microsoft.com/privacy", + "copyright": "Copyright (c) Microsoft Corporation. All rights reserved.", + "license": "https://github.com/microsoft/BotFramework-FunctionalTests/blob/main/LICENSE", + "tags": [ + "echo" + ], + "endpoints": [ + { + "name": "default", + "protocol": "BotFrameworkV3", + "description": "Localhost endpoint for the skill (on port 35410)", + "endpointUrl": "http://localhost:35410/api/messages", + "msAppId": "00000000-0000-0000-0000-000000000000" + } + ] +} \ No newline at end of file diff --git a/tests/functional/Bots/JavaScript/.gitignore b/tests/functional/Bots/JavaScript/.gitignore new file mode 100644 index 0000000000..52b57b278e --- /dev/null +++ b/tests/functional/Bots/JavaScript/.gitignore @@ -0,0 +1,3 @@ + +# Ignore web.config files generated to deploy JS to IIS on Windows +**/web.config \ No newline at end of file diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/.env b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/.env new file mode 100644 index 0000000000..34470cb8a8 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/.env @@ -0,0 +1,24 @@ +MicrosoftAppId= +MicrosoftAppPassword= +SkillHostEndpoint=http://localhost:36000/api/skills/ + +skill_EchoSkillBotComposerDotNet_appId= +skill_EchoSkillBotComposerDotNet_endpoint=http://localhost:35410/api/messages + +skill_EchoSkillBotDotNet_appId= +skill_EchoSkillBotDotNet_endpoint=http://localhost:35400/api/messages + +skill_EchoSkillBotDotNet21_appId= +skill_EchoSkillBotDotNet21_endpoint=http://localhost:35405/api/messages + +skill_EchoSkillBotDotNetV3_appId= +skill_EchoSkillBotDotNetV3_endpoint=http://localhost:35407/api/messages + +skill_EchoSkillBotJS_appId= +skill_EchoSkillBotJS_endpoint=http://localhost:36400/api/messages + +skill_EchoSkillBotJSV3_appId= +skill_EchoSkillBotJSV3_endpoint=http://localhost:36407/api/messages + +skill_EchoSkillBotPython_appId= +skill_EchoSkillBotPython_endpoint=http://localhost:37400/api/messages diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/authentication/allowedSkillsClaimsValidator.js b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/authentication/allowedSkillsClaimsValidator.js new file mode 100644 index 0000000000..39435af7c7 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/authentication/allowedSkillsClaimsValidator.js @@ -0,0 +1,25 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { JwtTokenValidation, SkillValidation } = require('botframework-connector'); +const { SkillsConfiguration } = require('../skillsConfiguration'); + +const skillsConfig = new SkillsConfiguration(); +// Load the appIds for the configured skills (we will only allow responses from skills we have configured). +const allowedSkills = Object.values(skillsConfig.skills).map(skill => skill.appId); + +/** + * Sample claims validator that loads an allowed list from configuration if present + * and checks that responses are coming from configured skills. + */ +const allowedSkillsClaimsValidator = async (claims) => { + if (SkillValidation.isSkillClaim(claims)) { + // Check that the appId claim in the skill request is in the list of skills configured for this bot. + const appId = JwtTokenValidation.getAppIdFromClaims(claims); + if (!allowedSkills.includes(appId)) { + throw new Error(`Received a request from an application with an appID of "${appId}". To enable requests from this skill, add the skill to your configuration file.`); + } + } +}; + +module.exports.allowedSkillsClaimsValidator = allowedSkillsClaimsValidator; diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/bots/hostBot.js b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/bots/hostBot.js new file mode 100644 index 0000000000..11c5cebf4a --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/bots/hostBot.js @@ -0,0 +1,168 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { ActivityHandler, ActivityTypes, DeliveryModes, MessageFactory } = require('botbuilder'); + +class HostBot extends ActivityHandler { + constructor (dialog, conversationState, skillsConfig, skillClient) { + super(); + if (!conversationState) throw new Error('[HostBot]: Missing parameter. conversationState is required'); + if (!skillsConfig) throw new Error('[HostBot]: Missing parameter. skillsConfig is required'); + if (!skillClient) throw new Error('[HostBot]: Missing parameter. skillClient is required'); + + this.conversationState = conversationState; + this.skillsConfig = skillsConfig; + this.skillClient = skillClient; + this.dialog = dialog; + this.dialogStateProperty = this.conversationState.createProperty('DialogState'); + + this.botId = process.env.MicrosoftAppId; + + // Create state property to track the delivery mode and active skill. + this.deliveryModeProperty = this.conversationState.createProperty(HostBot.DeliveryModePropertyName); + this.activeSkillProperty = this.conversationState.createProperty(HostBot.ActiveSkillPropertyName); + + this.onTurn(async (context, next) => { + // Forward all activities except EndOfConversation to the active skill. + if (context.activity.type !== ActivityTypes.EndOfConversation) { + // Try to get the active skill. + const activeSkill = await this.activeSkillProperty.get(context); + + if (activeSkill) { + const deliveryMode = await this.deliveryModeProperty.get(context); + + // Send the activity to the skill + await this.sendToSkill(context, deliveryMode, activeSkill); + return; + } + } + + await next(); + }); + + // See https://aka.ms/about-bot-activity-message to learn more about the message and other activity types. + this.onMessage(async (context, next) => { + const deliveryMode = await this.deliveryModeProperty.get(context); + const selectedSkill = this.skillsConfig.skills[context.activity.text]; + const v3Bots = ['EchoSkillBotDotNetV3', 'EchoSkillBotJSV3']; + + if (selectedSkill && deliveryMode === DeliveryModes.ExpectReplies && v3Bots.includes(selectedSkill.id)) { + const message = MessageFactory.text("V3 Bots do not support 'expectReplies' delivery mode."); + await context.sendActivity(message); + + // Forget delivery mode and skill invocation. + await this.deliveryModeProperty.delete(context); + await this.activeSkillProperty.delete(context); + + // Restart setup dialog + await this.conversationState.delete(context); + } + + await this.dialog.run(context, this.dialogStateProperty); + }); + + this.onEndOfConversation(async (context, next) => { + // Handle EndOfConversation returned by the skill. + await this.EndConversation(context.activity, context); + + // By calling next() you ensure that the next BotHandler is run. + await next(); + }); + + this.onMembersAdded(async (context, next) => { + const membersAdded = context.activity.membersAdded; + for (let cnt = 0; cnt < membersAdded.length; ++cnt) { + if (membersAdded[cnt].id !== context.activity.recipient.id) { + await context.sendActivity('Hello and welcome!'); + await this.dialog.run(context, this.dialogStateProperty); + } + } + + // By calling next() you ensure that the next BotHandler is run. + await next(); + }); + } + + async EndConversation (activity, context) { + if (activity.type === ActivityTypes.EndOfConversation) { + // Forget delivery mode and skill invocation. + await this.deliveryModeProperty.delete(context); + await this.activeSkillProperty.delete(context); + + // Show status message, text and value returned by the skill. + let eocActivityMessage = `Received ${ActivityTypes.EndOfConversation}.\n\nCode: ${activity.code}.`; + if (activity.text) { + eocActivityMessage += `\n\nText: ${activity.text}`; + } + + if (activity.value) { + eocActivityMessage += `\n\nValue: ${activity.value}`; + } + + await context.sendActivity(eocActivityMessage); + + // We are back at the host. + await context.sendActivity('Back in the host bot.'); + + // Restart setup dialog + await this.dialog.run(context, this.dialogStateProperty); + + await this.conversationState.saveChanges(context); + } + } + + async sendToSkill (context, deliveryMode, targetSkill) { + // NOTE: Always SaveChanges() before calling a skill so that any activity generated by the skill + // will have access to current accurate state. + await this.conversationState.saveChanges(context, true); + + if (deliveryMode === DeliveryModes.ExpectReplies) { + // Clone activity and update its delivery mode. + const activity = JSON.parse(JSON.stringify(context.activity)); + activity.deliveryMode = deliveryMode; + + // Route the activity to the skill. + const expectRepliesResponse = await this.skillClient.postToSkill(this.botId, targetSkill, this.skillsConfig.skillHostEndpoint, activity); + + // Check response status. + if (!(expectRepliesResponse.status >= 200 && expectRepliesResponse.status <= 299)) { + throw new Error(`[HostBot]: Error invoking the skill id: "${targetSkill.id}" at "${targetSkill.skillEndpoint}" (status is ${expectRepliesResponse.status}). \r\n ${expectRepliesResponse.body}`); + } + + if (expectRepliesResponse.body && expectRepliesResponse.body.activities) { + // Route response activities back to the channel. + const responseActivities = expectRepliesResponse.body.activities; + + for (let index = 0; index < responseActivities.length; index++) { + if (responseActivities[index].type === ActivityTypes.EndOfConversation) { + await this.EndConversation(responseActivities[index], context); + } else { + await context.sendActivity(responseActivities[index]); + } + } + } + } else { + // Route the activity to the skill. + const response = await this.skillClient.postToSkill(this.botId, targetSkill, this.skillsConfig.skillHostEndpoint, context.activity); + + // Check response status. + if (!(response.status >= 200 && response.status <= 299)) { + throw new Error(`[HostBot]: Error invoking the skill id: "${targetSkill.id}" at "${targetSkill.skillEndpoint}" (status is ${response.status}). \r\n ${response.body}`); + } + } + } + + /** + * Override the ActivityHandler.run() method to save state changes after the bot logic completes. + */ + async run (context) { + await super.run(context); + + // Save any state changes. The load happened during the execution of the Dialog. + await this.conversationState.saveChanges(context, false); + } +} + +module.exports.HostBot = HostBot; +HostBot.ActiveSkillPropertyName = 'activeSkillProperty'; +HostBot.DeliveryModePropertyName = 'deliveryModeProperty'; diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/dialogs/setupDialog.js b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/dialogs/setupDialog.js new file mode 100644 index 0000000000..77e25eee63 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/dialogs/setupDialog.js @@ -0,0 +1,122 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { InputHints, MessageFactory, DeliveryModes } = require('botbuilder'); +const { ChoicePrompt, ComponentDialog, DialogSet, DialogTurnStatus, WaterfallDialog, ListStyle } = require('botbuilder-dialogs'); +const { HostBot } = require('../bots/hostBot'); + +const SETUP_DIALOG = 'SetupDialog'; +const CHOICE_PROMPT = 'ChoicePrompt'; +const WATERFALL_DIALOG = 'WaterfallDialog'; + +/** + * The setup dialog for this bot. + */ +class SetupDialog extends ComponentDialog { + constructor (conversationState, skillsConfig) { + super(SETUP_DIALOG); + + this.deliveryModeProperty = conversationState.createProperty(HostBot.DeliveryModePropertyName); + this.activeSkillProperty = conversationState.createProperty(HostBot.ActiveSkillPropertyName); + this.skillsConfig = skillsConfig; + this.deliveryMode = ''; + + // Define the setup dialog and its related components. + // Add ChoicePrompt to render available skills. + this.addDialog(new ChoicePrompt(CHOICE_PROMPT)) + // Add main waterfall dialog for this bot. + .addDialog(new WaterfallDialog(WATERFALL_DIALOG, [ + this.selectDeliveryModeStep.bind(this), + this.selectSkillStep.bind(this), + this.finalStep.bind(this) + ])); + + this.initialDialogId = WATERFALL_DIALOG; + } + + /** + * The run method handles the incoming activity (in the form of a TurnContext) and passes it through the dialog system. + * If no dialog is active, it will start the default dialog. + * @param {*} turnContext + * @param {*} accessor + */ + async run (turnContext, accessor) { + const dialogSet = new DialogSet(accessor); + dialogSet.add(this); + + const dialogContext = await dialogSet.createContext(turnContext); + const results = await dialogContext.continueDialog(); + if (results.status === DialogTurnStatus.empty) { + await dialogContext.beginDialog(this.id); + } + } + + /** + * Render a prompt to select the delivery mode to use. + */ + async selectDeliveryModeStep (stepContext) { + // Create the PromptOptions with the delivery modes supported. + const messageText = 'What delivery mode would you like to use?'; + const repromptMessageText = 'That was not a valid choice, please select a valid delivery mode.'; + const options = { + prompt: MessageFactory.text(messageText, messageText, InputHints.ExpectingInput), + retryPrompt: MessageFactory.text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput), + choices: [DeliveryModes.Normal, DeliveryModes.ExpectReplies] + }; + + // Prompt the user to select a delivery mode. + return await stepContext.prompt(CHOICE_PROMPT, options); + } + + /** + * Render a prompt to select the skill to call. + */ + async selectSkillStep (stepContext) { + // Set delivery mode. + this.deliveryMode = stepContext.result.value; + await this.deliveryModeProperty.set(stepContext.context, stepContext.result.value); + + // Create the PromptOptions from the skill configuration which contains the list of configured skills. + const messageText = 'What skill would you like to call?'; + const repromptMessageText = 'That was not a valid choice, please select a valid skill.'; + const options = { + prompt: MessageFactory.text(messageText, messageText, InputHints.ExpectingInput), + retryPrompt: MessageFactory.text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput), + choices: Object.keys(this.skillsConfig.skills), + style: ListStyle.suggestedAction + }; + + // Prompt the user to select a skill. + return await stepContext.prompt(CHOICE_PROMPT, options); + } + + /** + * The SetupDialog has ended, we go back to the HostBot to connect with the selected skill. + */ + async finalStep (stepContext) { + const selectedSkill = this.skillsConfig.skills[stepContext.result.value]; + const v3Bots = ['EchoSkillBotDotNetV3', 'EchoSkillBotJSV3']; + + // Set active skill + await this.activeSkillProperty.set(stepContext.context, selectedSkill); + + if (this.deliveryMode === DeliveryModes.ExpectReplies && v3Bots.includes(selectedSkill.id)) { + const message = MessageFactory.text("V3 Bots do not support 'expectReplies' delivery mode."); + await stepContext.context.sendActivity(message); + + // Forget delivery mode and skill invocation. + await this.deliveryModeProperty.delete(stepContext.context); + await this.activeSkillProperty.delete(stepContext.context); + + // Restart setup dialog + return await stepContext.replaceDialog(this.initialDialogId); + } + + const message = MessageFactory.text('Type anything to send to the skill.', 'Type anything to send to the skill.', InputHints.ExpectingInput); + await stepContext.context.sendActivity(message); + + return await stepContext.endDialog(); + } +} + +module.exports.SetupDialog = SetupDialog; diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/index.js b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/index.js new file mode 100644 index 0000000000..e6e0a329e0 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/index.js @@ -0,0 +1,164 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +// index.js is used to setup and configure your bot + +// Import required packages +const http = require('http'); +const https = require('https'); +const path = require('path'); +const restify = require('restify'); + +// Import required bot services. +// See https://aka.ms/bot-services to learn more about the different parts of a bot. +const { BotFrameworkAdapter, TurnContext, ActivityTypes, ChannelServiceRoutes, ConversationState, InputHints, MemoryStorage, SkillHandler, SkillHttpClient, MessageFactory, SkillConversationIdFactory } = require('botbuilder'); +const { AuthenticationConfiguration, SimpleCredentialProvider } = require('botframework-connector'); + +// Import required bot configuration. +const ENV_FILE = path.join(__dirname, '.env'); +require('dotenv').config({ path: ENV_FILE }); + +// This bot's main dialog. +const { HostBot } = require('./bots/hostBot'); +const { SkillsConfiguration } = require('./skillsConfiguration'); +const { allowedSkillsClaimsValidator } = require('./authentication/allowedSkillsClaimsValidator'); +const { SetupDialog } = require('./dialogs/setupDialog'); + +const maxTotalSockets = (preallocatedSnatPorts, procCount = 1, weight = 0.5, overcommit = 1.1) => + Math.min( + Math.floor((preallocatedSnatPorts / procCount) * weight * overcommit), + preallocatedSnatPorts + ); + +// Create adapter. +// See https://aka.ms/about-bot-adapter to learn more about adapters. +const adapter = new BotFrameworkAdapter({ + appId: process.env.MicrosoftAppId, + appPassword: process.env.MicrosoftAppPassword, + authConfig: new AuthenticationConfiguration([], allowedSkillsClaimsValidator), + clientOptions: { + agentSettings: { + http: new http.Agent({ + keepAlive: true, + maxTotalSockets: maxTotalSockets(1024, 4, 0.3) + }), + https: new https.Agent({ + keepAlive: true, + maxTotalSockets: maxTotalSockets(1024, 4, 0.7) + }) + } + } +}); + +// Catch-all for errors. +adapter.onTurnError = async (context, error) => { + // This check writes out errors to console log .vs. app insights. + // NOTE: In production environment, you should consider logging this to Azure + // application insights. + console.error(`\n [onTurnError] unhandled error: ${error}`); + + try { + const { message, stack } = error; + + // Send a message to the user. + let errorMessageText = 'The bot encountered an error or bug.'; + let errorMessage = MessageFactory.text(errorMessageText, errorMessageText, InputHints.IgnoringInput); + errorMessage.value = { message, stack }; + await context.sendActivity(errorMessage); + + await context.sendActivity(`Exception: ${message}`); + await context.sendActivity(stack); + + errorMessageText = 'To continue to run this bot, please fix the bot source code.'; + errorMessage = MessageFactory.text(errorMessageText, errorMessageText, InputHints.ExpectingInput); + await context.sendActivity(errorMessage); + + // Send a trace activity, which will be displayed in Bot Framework Emulator + await context.sendTraceActivity( + 'OnTurnError Trace', + `${error}`, + 'https://www.botframework.com/schemas/error', + 'TurnError' + ); + } catch (err) { + console.error(`\n [onTurnError] Exception caught in onTurnError : ${err}`); + } + + try { + // Inform the active skill that the conversation is ended so that it has + // a chance to clean up. + // Note: ActiveSkillPropertyName is set by the RooBot while messages are being + // forwarded to a Skill. + const activeSkill = await conversationState.createProperty(HostBot.ActiveSkillPropertyName).get(context); + if (activeSkill) { + const botId = process.env.MicrosoftAppId; + + let endOfConversation = { + type: ActivityTypes.EndOfConversation, + code: 'RootSkillError' + }; + endOfConversation = TurnContext.applyConversationReference( + endOfConversation, TurnContext.getConversationReference(context.activity), true); + + await conversationState.saveChanges(context, true); + await skillClient.postToSkill(botId, activeSkill, skillsConfig.skillHostEndpoint, endOfConversation); + } + } catch (err) { + console.error(`\n [onTurnError] Exception caught on attempting to send EndOfConversation : ${err}`); + } + + try { + // Clear out state + await conversationState.delete(context); + } catch (err) { + console.error(`\n [onTurnError] Exception caught on attempting to Delete ConversationState : ${err}`); + } +}; + +// Define a state store for your bot. See https://aka.ms/about-bot-state to learn more about using MemoryStorage. +// A bot requires a state store to persist the dialog and user state between messages. + +// For local development, in-memory storage is used. +// CAUTION: The Memory Storage used here is for local bot debugging only. When the bot +// is restarted, anything stored in memory will be gone. +const memoryStorage = new MemoryStorage(); +const conversationState = new ConversationState(memoryStorage); + +// Create the conversationIdFactory +const conversationIdFactory = new SkillConversationIdFactory(memoryStorage); + +// Load skills configuration +const skillsConfig = new SkillsConfiguration(); + +// Create the credential provider; +const credentialProvider = new SimpleCredentialProvider(process.env.MicrosoftAppId, process.env.MicrosoftAppPassword); + +// Create the skill client +const skillClient = new SkillHttpClient(credentialProvider, conversationIdFactory); + +// Create the main dialog. +const dialog = new SetupDialog(conversationState, skillsConfig); +const bot = new HostBot(dialog, conversationState, skillsConfig, skillClient); + +// Create HTTP server +const server = restify.createServer(); +server.listen(process.env.port || process.env.PORT || 36000, function () { + console.log(`\n${server.name} listening to ${server.url}`); + console.log('\nGet Bot Framework Emulator: https://aka.ms/botframework-emulator'); + console.log('\nTo talk to your bot, open the emulator select "Open Bot"'); +}); + +// Listen for incoming activities and route them to your bot main dialog. +server.post('/api/messages', (req, res) => { + // Route received a request to adapter for processing + adapter.processActivity(req, res, async (turnContext) => { + // route to bot activity handler. + await bot.run(turnContext); + }); +}); + +// Create and initialize the skill classes +const authConfig = new AuthenticationConfiguration([], allowedSkillsClaimsValidator); +const handler = new SkillHandler(adapter, bot, conversationIdFactory, credentialProvider, authConfig); +const skillEndpoint = new ChannelServiceRoutes(handler); +skillEndpoint.register(server, '/api/skills'); diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/package.json b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/package.json new file mode 100644 index 0000000000..bddc987858 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/package.json @@ -0,0 +1,26 @@ +{ + "name": "simple-root-bot", + "version": "1.0.0", + "description": "A simple root bot for testing skills", + "author": "Microsoft", + "license": "MIT", + "main": "index.js", + "scripts": { + "start": "node ./index.js", + "watch": "nodemon ./index.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://github.com" + }, + "dependencies": { + "botbuilder": "~4.13.3", + "botbuilder-dialogs": "~4.13.3", + "dotenv": "~8.2.0", + "restify": "~8.5.1" + }, + "devDependencies": { + "nodemon": "~2.0.4" + } +} diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/skillsConfiguration.js b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/skillsConfiguration.js new file mode 100644 index 0000000000..69d7bd19fe --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/SimpleHostBot/skillsConfiguration.js @@ -0,0 +1,53 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +/** + * A helper class that loads Skills information from configuration. + */ +class SkillsConfiguration { + constructor () { + this.skillsData = {}; + + const skillVariables = Object.keys(process.env).filter(prop => prop.startsWith('skill_')); + + for (const val of skillVariables) { + const names = val.split('_'); + const id = names[1]; + const attr = names[2]; + let propName; + if (!(id in this.skillsData)) { + this.skillsData[id] = { id: id }; + } + switch (attr.toLowerCase()) { + case 'appid': + propName = 'appId'; + break; + case 'endpoint': + propName = 'skillEndpoint'; + break; + case 'group': + propName = 'group'; + break; + default: + throw new Error(`[SkillsConfiguration]: Invalid environment variable declaration ${val}`); + } + + this.skillsData[id][propName] = process.env[val]; + } + + this.skillHostEndpointValue = process.env.SkillHostEndpoint; + if (!this.skillHostEndpointValue) { + throw new Error('[SkillsConfiguration]: Missing configuration parameter. SkillHostEndpoint is required'); + } + } + + get skills () { + return this.skillsData; + } + + get skillHostEndpoint () { + return this.skillHostEndpointValue; + } +} + +module.exports.SkillsConfiguration = SkillsConfiguration; diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/.env b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/.env new file mode 100644 index 0000000000..cfef59e0a9 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/.env @@ -0,0 +1,52 @@ +MicrosoftAppId= +MicrosoftAppPassword= +SkillHostEndpoint=http://localhost:36020/api/skills/ +SsoConnectionName= + +skill_EchoSkillBotDotNet_group=Echo +skill_EchoSkillBotDotNet_appId= +skill_EchoSkillBotDotNet_endpoint=http://localhost:35400/api/messages + +skill_EchoSkillBotDotNet21_group=Echo +skill_EchoSkillBotDotNet21_appId= +skill_EchoSkillBotDotNet21_endpoint=http://localhost:35405/api/messages + +skill_EchoSkillBotDotNetV3_group=Echo +skill_EchoSkillBotDotNetV3_appId= +skill_EchoSkillBotDotNetV3_endpoint=http://localhost:35407/api/messages + +skill_EchoSkillBotJS_group=Echo +skill_EchoSkillBotJS_appId= +skill_EchoSkillBotJS_endpoint=http://localhost:36400/api/messages + +skill_EchoSkillBotJSV3_group=Echo +skill_EchoSkillBotJSV3_appId= +skill_EchoSkillBotJSV3_endpoint=http://localhost:36407/api/messages + +skill_EchoSkillBotPython_group=Echo +skill_EchoSkillBotPython_appId= +skill_EchoSkillBotPython_endpoint=http://localhost:37400/api/messages + +skill_WaterfallSkillBotDotNet_group=Waterfall +skill_WaterfallSkillBotDotNet_appId= +skill_WaterfallSkillBotDotNet_endpoint=http://localhost:35420/api/messages + +skill_WaterfallSkillBotJS_group=Waterfall +skill_WaterfallSkillBotJS_appId= +skill_WaterfallSkillBotJS_endpoint=http://localhost:36420/api/messages + +skill_WaterfallSkillBotPython_group=Waterfall +skill_WaterfallSkillBotPython_appId= +skill_WaterfallSkillBotPython_endpoint=http://localhost:37420/api/messages + +skill_TeamsSkillBotDotNet_group=Teams +skill_TeamsSkillBotDotNet_appId= +skill_TeamsSkillBotDotNet_endpoint=http://localhost:35430/api/messages + +skill_TeamsSkillBotJS_group=Teams +skill_TeamsSkillBotJS_appId= +skill_TeamsSkillBotJS_endpoint=http://localhost:36430/api/messages + +skill_TeamsSkillBotPython_group=Teams +skill_TeamsSkillBotPython_appId= +skill_TeamsSkillBotPython_endpoint=http://localhost:37430/api/messages diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/Cards/welcomeCard.json b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/Cards/welcomeCard.json new file mode 100644 index 0000000000..1fc98a2237 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/Cards/welcomeCard.json @@ -0,0 +1,29 @@ +{ + "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", + "type": "AdaptiveCard", + "version": "1.0", + "body": [ + { + "type": "Image", + "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQtB3AwMUeNoq4gUBGe6Ocj8kyh3bXa9ZbV7u1fVKQoyKFHdkqU", + "size": "stretch" + }, + { + "type": "TextBlock", + "spacing": "Medium", + "size": "Medium", + "weight": "Bolder", + "text": "Welcome to the Skill Dialog Sample!", + "wrap": true, + "maxLines": 0, + "color": "Accent" + }, + { + "type": "TextBlock", + "size": "default", + "text": "This sample allows you to connect to a skill using a SkillDialog and invoke several actions.", + "wrap": true, + "maxLines": 0 + } + ] +} \ No newline at end of file diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/TokenExchangeSkillHandler.js b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/TokenExchangeSkillHandler.js new file mode 100644 index 0000000000..6f320128f0 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/TokenExchangeSkillHandler.js @@ -0,0 +1,123 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { v4 } = require('uuid'); +const { ActivityEx, ActivityTypes, CardFactory, SkillHandler, tokenExchangeOperationName, TurnContext } = require('botbuilder'); +const { JwtTokenValidation } = require('botframework-connector'); + +const WATERFALL_SKILL_BOT = 'WaterfallSkillBot'; + +/** + * A SkillHandler specialized to support SSO Token exchanges. + */ +class TokenExchangeSkillHandler extends SkillHandler { + constructor (adapter, bot, conversationIdFactory, skillsConfig, skillClient, + credentialProvider, authConfig, channelProvider = null, logger = null) { + super(adapter, bot, conversationIdFactory, credentialProvider, authConfig, channelProvider); + this.adapter = adapter; + this.tokenExchangeProvider = adapter; + + if (!this.tokenExchangeProvider) { + throw new Error(`${adapter} does not support token exchange`); + } + + this.skillsConfig = skillsConfig; + this.skillClient = skillClient; + this.conversationIdFactory = conversationIdFactory; + this.logger = logger; + this.botId = process.env.MicrosoftAppId; + } + + async onSendToConversation (claimsIdentity, conversationId, activity) { + if (await this.interceptOAuthCards(claimsIdentity, activity)) { + return { id: v4() }; + } + + return await super.onSendToConversation(claimsIdentity, conversationId, activity); + } + + async onReplyToActivity (claimsIdentity, conversationId, activityId, activity) { + if (await this.interceptOAuthCards(claimsIdentity, activity)) { + return { id: v4() }; + } + + return await super.onReplyToActivity(claimsIdentity, conversationId, activityId, activity); + } + + getCallingSkill (claimsIdentity) { + const appId = JwtTokenValidation.getAppIdFromClaims(claimsIdentity.claims); + + if (!appId) { + return null; + } + + return Object.values(this.skillsConfig.skills).find(skill => skill.appId === appId); + } + + async interceptOAuthCards (claimsIdentity, activity) { + const oauthCardAttachment = activity.attachments ? activity.attachments.find(attachment => attachment.contentType === CardFactory.contentTypes.oauthCard) : null; + if (oauthCardAttachment) { + const targetSkill = this.getCallingSkill(claimsIdentity); + if (targetSkill) { + const oauthCard = oauthCardAttachment.content; + + if (oauthCard && oauthCard.tokenExchangeResource && oauthCard.tokenExchangeResource.uri) { + const context = new TurnContext(this.adapter, activity); + context.turnState.push('BotIdentity', claimsIdentity); + + // We need to know what connection name to use for the token exchange so we figure that out here + const connectionName = targetSkill.id.includes(WATERFALL_SKILL_BOT) ? process.env.SsoConnectionName : process.env.SsoConnectionNameTeams; + + if (!connectionName) { + throw new Error('The connection name cannot be null.'); + } + + // AAD token exchange + try { + const result = await this.tokenExchangeProvider.exchangeToken( + context, + connectionName, + activity.recipient.id, + { uri: oauthCard.tokenExchangeResource.uri } + ); + + if (result.token) { + // If token above is null, then SSO has failed and hence we return false. + // If not, send an invoke to the skill with the token. + return await this.sendTokenExchangeInvokeToSkill(activity, oauthCard.tokenExchangeResource.id, result.token, oauthCard.connectionName, targetSkill); + } + } catch (exception) { + // Show oauth card if token exchange fails. + this.logger.log('Unable to exchange token.', exception); + return false; + } + } + } + } + + return false; + } + + async sendTokenExchangeInvokeToSkill (incomingActivity, id, token, connectionName, targetSkill) { + const activity = ActivityEx.createReply(incomingActivity); + activity.type = ActivityTypes.Invoke; + activity.name = tokenExchangeOperationName; + activity.value = { + id: id, + token: token, + connectionName: connectionName + }; + + const skillConversationReference = await this.conversationIdFactory.getSkillConversationReference(incomingActivity.conversation.id); + activity.conversation = incomingActivity.conversation; + activity.serviceUrl = skillConversationReference.conversationReference.serviceUrl; + + // Route the activity to the skill + const response = await this.skillClient.postActivity(this.botId, targetSkill.appId, targetSkill.skillEndpoint, this.skillsConfig.skillHostEndpoint, activity.conversation.id, activity); + + // Check response status: true if success, false if failure + return response.status >= 200 && response.status <= 299; + } +} + +module.exports.TokenExchangeSkillHandler = TokenExchangeSkillHandler; diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/authentication/allowedSkillsClaimsValidator.js b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/authentication/allowedSkillsClaimsValidator.js new file mode 100644 index 0000000000..39435af7c7 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/authentication/allowedSkillsClaimsValidator.js @@ -0,0 +1,25 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { JwtTokenValidation, SkillValidation } = require('botframework-connector'); +const { SkillsConfiguration } = require('../skillsConfiguration'); + +const skillsConfig = new SkillsConfiguration(); +// Load the appIds for the configured skills (we will only allow responses from skills we have configured). +const allowedSkills = Object.values(skillsConfig.skills).map(skill => skill.appId); + +/** + * Sample claims validator that loads an allowed list from configuration if present + * and checks that responses are coming from configured skills. + */ +const allowedSkillsClaimsValidator = async (claims) => { + if (SkillValidation.isSkillClaim(claims)) { + // Check that the appId claim in the skill request is in the list of skills configured for this bot. + const appId = JwtTokenValidation.getAppIdFromClaims(claims); + if (!allowedSkills.includes(appId)) { + throw new Error(`Received a request from an application with an appID of "${appId}". To enable requests from this skill, add the skill to your configuration file.`); + } + } +}; + +module.exports.allowedSkillsClaimsValidator = allowedSkillsClaimsValidator; diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/bots/rootBot.js b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/bots/rootBot.js new file mode 100644 index 0000000000..9fe1b3dbb3 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/bots/rootBot.js @@ -0,0 +1,83 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { ActivityHandler, ActivityTypes, CardFactory, MessageFactory } = require('botbuilder'); +const { runDialog } = require('botbuilder-dialogs'); +const WelcomeCard = require('../cards/welcomeCard.json'); + +class RootBot extends ActivityHandler { + /** + * @param {import('botbuilder').ConversationState} conversationState + * @param {import('botbuilder').SkillHttpClient} skillClient + * @param {import('botbuilder-dialogs').Dialog} mainDialog + */ + constructor (conversationState, skillClient, mainDialog) { + super(); + if (!conversationState) throw new Error('[RootBot]: Missing parameter. conversationState is required'); + if (!mainDialog) throw new Error('[RootBot]: Missing parameter. mainDialog is required'); + + this.conversationState = conversationState; + this.skillClient = skillClient; + this.mainDialog = mainDialog; + this.botId = process.env.MicrosoftAppId; + + // Create state property to track the active skill + this.activeSkillProperty = this.conversationState.createProperty(RootBot.ActiveSkillPropertyName); + + this.onTurn(async (turnContext, next) => { + if (turnContext.activity.type !== ActivityTypes.ConversationUpdate) { + // Run the Dialog with the activity. + await runDialog(this.mainDialog, turnContext, this.conversationState.createProperty('DialogState')); + } + + await next(); + }); + + this.onMembersAdded(async (context, next) => { + const membersAdded = context.activity.membersAdded; + for (const member of membersAdded) { + if (member.id !== context.activity.recipient.id) { + const welcomeCard = CardFactory.adaptiveCard(WelcomeCard); + const activity = MessageFactory.attachment(welcomeCard); + activity.speak = 'Welcome to the waterfall host bot'; + await context.sendActivity(activity); + await runDialog(this.mainDialog, context, conversationState.createProperty('DialogState')); + } + } + + // By calling next() you ensure that the next BotHandler is run. + await next(); + }); + } + + /** + * Override the ActivityHandler.run() method to save state changes after the bot logic completes. + * @param {import('botbuilder').TurnContext} turnContext + */ + async run (context) { + await super.run(context); + + // Save any state changes. The load happened during the execution of the Dialog. + await this.conversationState.saveChanges(context, false); + } + + /** + * @param {import('botbuilder').TurnContext} turnContext + * @param {*} targetSkill + */ + async sendToSkill (context, targetSkill) { + // NOTE: Always SaveChanges() before calling a skill so that any activity generated by the skill + // will have access to current accurate state. + await this.conversationState.saveChanges(context, true); + + // route the activity to the skill + const response = await this.skillClient.postToSkill(this.botId, targetSkill, this.skillsConfig.skillHostEndpoint, context.activity); + + // Check response status + if (!(response.status >= 200 && response.status <= 299)) { + throw new Error(`[RootBot]: Error invoking the skill id: "${targetSkill.id}" at "${targetSkill.skillEndpoint}" (status is ${response.status}). \r\n ${response.body}`); + } + } +} + +module.exports.RootBot = RootBot; diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/dialogs/mainDialog.js b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/dialogs/mainDialog.js new file mode 100644 index 0000000000..8f3fb81e4c --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/dialogs/mainDialog.js @@ -0,0 +1,314 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { ActivityTypes, DeliveryModes, InputHints, MessageFactory } = require('botbuilder'); +const { ChoicePrompt, ChoiceFactory, ComponentDialog, DialogSet, SkillDialog, WaterfallDialog, DialogTurnStatus, ListStyle } = require('botbuilder-dialogs'); +const { RootBot } = require('../bots/rootBot'); +const { SsoDialog } = require('./sso/ssoDialog'); +const { TangentDialog } = require('./tangentDialog'); + +const MAIN_DIALOG = 'MainDialog'; +const DELIVERY_PROMPT = 'DeliveryModePrompt'; +const SKILL_GROUP_PROMPT = 'SkillGroupPrompt'; +const SKILL_PROMPT = 'SkillPrompt'; +const SKILL_ACTION_PROMPT = 'SkillActionPrompt'; +const TANGENT_DIALOG = 'TangentDialog'; +const WATERFALL_DIALOG = 'WaterfallDialog'; +const SSO_DIALOG_PREFIX = 'Sso'; + +class MainDialog extends ComponentDialog { + /** + * @param {import('botbuilder').ConversationState} conversationState + * @param {import('../skillsConfiguration').SkillsConfiguration} skillsConfig + * @param {import('botbuilder').SkillHttpClient} skillClient + * @param {import('../skillConversationIdFactory').SkillConversationIdFactory} conversationIdFactory + */ + constructor (conversationState, skillsConfig, skillClient, conversationIdFactory) { + super(MAIN_DIALOG); + + const botId = process.env.MicrosoftAppId; + + if (!conversationState) throw new Error('[MainDialog]: Missing parameter \'conversationState\' is required'); + if (!skillsConfig) throw new Error('[MainDialog]: Missing parameter \'skillsConfig\' is required'); + if (!skillClient) throw new Error('[MainDialog]: Missing parameter \'skillClient\' is required'); + if (!conversationIdFactory) throw new Error('[MainDialog]: Missing parameter \'conversationIdFactory\' is required'); + + this.deliveryModeProperty = conversationState.createProperty(RootBot.DeliveryModePropertyName); + this.activeSkillProperty = conversationState.createProperty(RootBot.ActiveSkillPropertyName); + this.skillsConfig = skillsConfig; + this.deliveryMode = ''; + + // Register the tangent dialog for testing tangents and resume. + this.addDialog(new TangentDialog(TANGENT_DIALOG)); + + // Create and add SkillDialog instances for the configured skills. + this.addSkillDialogs(conversationState, conversationIdFactory, skillClient, skillsConfig, botId); + + // Add ChoicePrompt to render available delivery modes. + this.addDialog(new ChoicePrompt(DELIVERY_PROMPT)); + + // Add ChoicePrompt to render available groups of skills. + this.addDialog(new ChoicePrompt(SKILL_GROUP_PROMPT)); + + // Add ChoicePrompt to render available skills. + this.addDialog(new ChoicePrompt(SKILL_PROMPT)); + + // Add ChoicePrompt to render skill actions. + this.addDialog(new ChoicePrompt(SKILL_ACTION_PROMPT)); + + // Special case: register SSO dialogs for skills that support SSO actions. + this.addSsoDialogs(); + + this.addDialog(new WaterfallDialog(WATERFALL_DIALOG, [ + this.selectDeliveryModeStep.bind(this), + this.selectSkillGroupStep.bind(this), + this.selectSkillStep.bind(this), + this.selectSkillActionStep.bind(this), + this.callSkillActionStep.bind(this), + this.finalStep.bind(this) + ])); + + this.initialDialogId = WATERFALL_DIALOG; + } + + /** + * The run method handles the incoming activity (in the form of a TurnContext) and passes it through the dialog system. + * If no dialog is active, it will start the default dialog. + * @param {import('botbuilder').TurnContext} turnContext + * @param {*} accessor + */ + async run (turnContext, accessor) { + const dialogSet = new DialogSet(accessor); + dialogSet.add(this); + + const dialogContext = await dialogSet.createContext(turnContext); + const results = await dialogContext.continueDialog(); + if (results.status === DialogTurnStatus.empty) { + await dialogContext.beginDialog(this.id); + } + } + + /** + * @param {import('botbuilder-dialogs').DialogContext} innerDc + */ + async onContinueDialog (innerDc) { + const activeSkill = await this.activeSkillProperty.get(innerDc.context, () => null); + const activity = innerDc.context.activity; + if (activeSkill != null && activity.type === ActivityTypes.Message && activity.text != null && activity.text.toLowerCase() === 'abort') { + // Cancel all dialogs when the user says abort. + // The SkillDialog automatically sends an EndOfConversation message to the skill to let the + // skill know that it needs to end its current dialogs, too. + await innerDc.cancelAllDialogs(); + return innerDc.replaceDialog(this.initialDialogId, { text: 'Canceled! \n\n What delivery mode would you like to use?' }); + } + // Sample to test a tangent when in the middle of a skill conversation. + if (activeSkill != null && activity.type === ActivityTypes.Message && activity.text != null && activity.text.toLowerCase() === 'tangent') { + // Start tangent. + return innerDc.beginDialog(TANGENT_DIALOG); + } + + return super.onContinueDialog(innerDc); + } + + /** + * Render a prompt to select the delivery mode to use. + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async selectDeliveryModeStep (stepContext) { + // Create the PromptOptions with the delivery modes supported. + const messageText = stepContext.options && stepContext.options.text ? stepContext.options.text : 'What delivery mode would you like to use?'; + const retryMessageText = 'That was not a valid choice, please select a valid delivery mode.'; + + return stepContext.prompt(DELIVERY_PROMPT, { + prompt: MessageFactory.text(messageText, messageText, InputHints.ExpectingInput), + retryPrompt: MessageFactory.text(retryMessageText, retryMessageText, InputHints.ExpectingInput), + choices: ChoiceFactory.toChoices([DeliveryModes.Normal, DeliveryModes.ExpectReplies]) + }); + } + + /** + * Render a prompt to select the group of skills to use. + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async selectSkillGroupStep (stepContext) { + // Set delivery mode. + this.deliveryMode = stepContext.result.value; + await this.deliveryModeProperty.set(stepContext.context, stepContext.result.value); + + const messageText = 'What group of skills would you like to use?'; + const retryMessageText = 'That was not a valid choice, please select a valid skill group.'; + + // Get a list of the groups for the skills in skillsConfig. + const groups = Object.values(this.skillsConfig.skills) + .map(skill => skill.group); + // Remove duplicates + const choices = [...new Set(groups)]; + + // Create the PromptOptions from the skill configuration which contains the list of configured skills. + return stepContext.prompt(SKILL_GROUP_PROMPT, { + prompt: MessageFactory.text(messageText, messageText, InputHints.ExpectingInput), + retryPrompt: MessageFactory.text(retryMessageText, retryMessageText, InputHints.ExpectingInput), + choices: ChoiceFactory.toChoices(choices) + }); + } + + /** + * Render a prompt to select the skill to call. + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async selectSkillStep (stepContext) { + const skillGroup = stepContext.result.value; + + // Create the PromptOptions from the skill configuration which contains the list of configured skills. + const messageText = 'What skill would you like to call?'; + const retryMessageText = 'That was not a valid choice, please select a valid skill.'; + + // Get skills for the selected group. + const choices = Object.entries(this.skillsConfig.skills) + .filter(([, skill]) => skill.group === skillGroup) + .map(([id]) => id); + + return stepContext.prompt(SKILL_PROMPT, { + prompt: MessageFactory.text(messageText, messageText, InputHints.ExpectingInput), + retryPrompt: MessageFactory.text(retryMessageText, retryMessageText, InputHints.ExpectingInput), + choices: ChoiceFactory.toChoices(choices), + style: ListStyle.list + }); + } + + /** + * Render a prompt to select the begin action for the skill. + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async selectSkillActionStep (stepContext) { + const selectedSkill = this.skillsConfig.skills[stepContext.result.value]; + const v3Bots = ['EchoSkillBotDotNetV3', 'EchoSkillBotJSV3']; + + // Set active skill. + await this.activeSkillProperty.set(stepContext.context, selectedSkill); + + // Exclude v3 bots from ExpectReplies. + if (this.deliveryMode === DeliveryModes.ExpectReplies && v3Bots.includes(selectedSkill.id)) { + await stepContext.context.SendActivityAsync(MessageFactory.text("V3 Bots do not support 'expectReplies' delivery mode.")); + + // Forget delivery mode and skill invocation. + await this.deliveryModeProperty.delete(stepContext.context); + await this.activeSkillProperty.delete(stepContext.context); + + // Restart setup dialog. + return stepContext.replaceDialog(this.initialDialogId); + } + + const skillActionChoices = selectedSkill.getActions(); + + if (skillActionChoices && skillActionChoices.length === 1) { + // The skill only supports one action (e.g. Echo), skip the prompt. + return stepContext.next({ value: skillActionChoices[0] }); + } + + // Create the PromptOptions with the actions supported by the selected skill. + const messageText = `Select an action to send to **${selectedSkill.id}**.`; + + return stepContext.prompt(SKILL_ACTION_PROMPT, { + prompt: MessageFactory.text(messageText, messageText, InputHints.ExpectingInput), + choices: ChoiceFactory.toChoices(skillActionChoices) + }); + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async callSkillActionStep (stepContext) { + const selectedSkill = await this.activeSkillProperty.get(stepContext.context); + + // Save active skill in state. + await this.activeSkillProperty.set(stepContext.context, selectedSkill); + + // Create the initial activity to call the skill. + const skillActivity = this.skillsConfig.skills[selectedSkill.id].createBeginActivity(stepContext.result.value); + + if (skillActivity.name === 'Sso') { + // Special case, we start the SSO dialog to prepare the host to call the skill. + return stepContext.beginDialog(`${SSO_DIALOG_PREFIX}${selectedSkill.id}`); + } + + // We are manually creating the activity to send to the skill; ensure we add the ChannelData and Properties + // from the original activity so the skill gets them. + // Note: this is not necessary if we are just forwarding the current activity from context. + skillActivity.channelData = stepContext.context.activity.channelData; + skillActivity.properties = stepContext.context.activity.properties; + + // Create the BeginSkillDialogOptions and assign the activity to send. + const skillDialogArgs = { activity: skillActivity }; + + if (this.deliveryMode === DeliveryModes.ExpectReplies) { + skillDialogArgs.activity.deliveryMode = DeliveryModes.ExpectReplies; + } + + // Start the skillDialog instance with the arguments. + return stepContext.beginDialog(selectedSkill.id, skillDialogArgs); + } + + /** + * The SkillDialog has ended, render the results (if any) and restart MainDialog. + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async finalStep (stepContext) { + const activeSkill = await this.activeSkillProperty.get(stepContext.context); + + if (stepContext.result) { + let message = `Skill "${activeSkill.id}" invocation complete.`; + message += ` Result: ${JSON.SerializeObject(stepContext.result)}`; + await stepContext.context.sendActivity(message); + } + + // Forget delivery mode and skill invocation. + await this.deliveryModeProperty.delete(stepContext.context); + await this.activeSkillProperty.delete(stepContext.context); + + // Restart setup dialog + return stepContext.replaceDialog(this.initialDialogId, { text: `Done with "${activeSkill.id}". \n\n What delivery mode would you like to use?` }); + } + + /** + * Helper method that creates and adds SkillDialog instances for the configured skills. + * @param {import('botbuilder').ConversationState} conversationState + * @param {import('../skillConversationIdFactory').SkillConversationIdFactory} conversationIdFactory + * @param {import('botbuilder').SkillHttpClient} skillClient + * @param {import('../skillsConfiguration').SkillsConfiguration} skillsConfig + * @param {string} botId + */ + addSkillDialogs (conversationState, conversationIdFactory, skillClient, skillsConfig, botId) { + Object.keys(skillsConfig.skills).forEach((skillId) => { + const skillInfo = skillsConfig.skills[skillId]; + + const skillDialogOptions = { + botId: botId, + conversationIdFactory, + conversationState, + skill: skillInfo, + skillHostEndpoint: process.env.SkillHostEndpoint, + skillClient + }; + + // Add a SkillDialog for the selected skill. + this.addDialog(new SkillDialog(skillDialogOptions, skillInfo.id)); + }); + } + + /** + * Special case. + * SSO needs a dialog in the host to allow the user to sign in. + * We create and several SsoDialog instances for each skill that supports SSO. + */ + addSsoDialogs () { + const addDialogs = (name, connectionName) => Object.values(this.dialogs.dialogs) + .filter(({ id }) => id.startsWith(name)) + .forEach(skill => this.addDialog(new SsoDialog(`${SSO_DIALOG_PREFIX}${skill.id}`, skill, connectionName))); + + addDialogs('WaterfallSkillBot', process.env.SsoConnectionName); + addDialogs('TeamsSkillBot', process.env.SsoConnectionNameTeams); + } +} + +module.exports.MainDialog = MainDialog; diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/ssoDialog.js b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/ssoDialog.js new file mode 100644 index 0000000000..061d6ea2ad --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/ssoDialog.js @@ -0,0 +1,137 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { ActivityTypes, EndOfConversationCodes, InputHints, MessageFactory } = require('botbuilder'); +const { ComponentDialog, ChoicePrompt, ChoiceFactory, DialogTurnStatus, WaterfallDialog } = require('botbuilder-dialogs'); +const { SsoSignInDialog } = require('./ssoSignInDialog'); + +const ACTION_STEP_PROMPT = 'ActionStepPrompt'; +const SSO_SIGNIN_DIALOG = 'SsoSignInDialog'; +const WATERFALL_DIALOG = 'WaterfallDialog'; + +/** + * Helps prepare the host for SSO operations and provides helpers to check the status and invoke the skill. + */ +class SsoDialog extends ComponentDialog { + /** + * @param {string} dialogId + * @param {*} ssoSkillDialog + * @param {string} connectionName + */ + constructor (dialogId, ssoSkillDialog, connectionName) { + super(dialogId); + + this.connectionName = connectionName; + this.skillDialogId = ssoSkillDialog.id; + + this.addDialog(new ChoicePrompt(ACTION_STEP_PROMPT)); + this.addDialog(new SsoSignInDialog(this.connectionName)); + this.addDialog(ssoSkillDialog); + + this.addDialog(new WaterfallDialog(WATERFALL_DIALOG, [ + this.promptActionStep.bind(this), + this.handleActionStep.bind(this), + this.promptFinalStep.bind(this) + ])); + + this.initialDialogId = WATERFALL_DIALOG; + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async promptActionStep (stepContext) { + const messageText = 'What SSO action do you want to perform?'; + const repromptMessageText = 'That was not a valid choice, please select a valid choice.'; + + return stepContext.prompt(ACTION_STEP_PROMPT, { + prompt: MessageFactory.text(messageText, messageText, InputHints.ExpectingInput), + retryPrompt: MessageFactory.text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput), + choices: await this.getPromptChoices(stepContext) + }); + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async getPromptChoices (stepContext) { + const promptChoices = []; + const adapter = stepContext.context.adapter; + const token = await adapter.getUserToken(stepContext.context, this.connectionName); + + if (!token) { + promptChoices.push('Login'); + // Token exchange will fail when the host is not logged on and the skill should + // show a regular OAuthPrompt. + promptChoices.push('Call Skill (without SSO)'); + } else { + promptChoices.push('Logout'); + promptChoices.push('Show token'); + promptChoices.push('Call Skill (with SSO)'); + } + + promptChoices.push('Back'); + + return ChoiceFactory.toChoices(promptChoices); + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async handleActionStep (stepContext) { + const action = stepContext.result.value; + + switch (action.toLowerCase()) { + case 'login': + return stepContext.beginDialog(SSO_SIGNIN_DIALOG); + + case 'logout': { + const adapter = stepContext.context.adapter; + await adapter.signOutUser(stepContext.context, this.connectionName); + await stepContext.context.sendActivity('You have been signed out.'); + return stepContext.next(); + } + + case 'show token': { + const tokenProvider = stepContext.context.adapter; + const token = await tokenProvider.getUserToken(stepContext.context, this.connectionName); + if (!token) { + await stepContext.context.sendActivity('User has no cached token.'); + } else { + await stepContext.context.sendActivity(`Here is your current SSO token: ${token.token}`); + } + return stepContext.next(); + } + + case 'call skill (with sso)': + case 'call skill (without sso)': { + const beginSkillActivity = { + type: ActivityTypes.Event, + name: 'Sso' + }; + return stepContext.beginDialog(this.skillDialogId, { activity: beginSkillActivity }); + } + + case 'back': + await stepContext.context.sendActivity({ + type: ActivityTypes.EndOfConversation, + code: EndOfConversationCodes.CompletedSuccessfully + }); + return { status: DialogTurnStatus.complete }; + + default: + // This should never be hit since the previous prompt validates the choice. + throw new Error(`[SsoDialog]: Unrecognized action: ${action}`); + } + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async promptFinalStep (stepContext) { + // Restart the dialog (we will exit when the user says end). + return stepContext.replaceDialog(this.initialDialogId); + } +} + +module.exports.SsoDialog = SsoDialog; diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/ssoSignInDialog.js b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/ssoSignInDialog.js new file mode 100644 index 0000000000..205c0db38a --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/dialogs/sso/ssoSignInDialog.js @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { ComponentDialog, WaterfallDialog, OAuthPrompt } = require('botbuilder-dialogs'); + +const SSO_SIGNIN_DIALOG = 'SsoSignInDialog'; +const OAUTH_PROMPT = 'OAuthPrompt'; +const WATERFALL_DIALOG = 'WaterfallDialog'; + +/** + * Helps prepare the host for SSO operations and provides helpers to check the status and invoke the skill. + */ +class SsoSignInDialog extends ComponentDialog { + /** + * @param {string} connectionName + */ + constructor (connectionName) { + super(SSO_SIGNIN_DIALOG); + + this.addDialog(new OAuthPrompt(OAUTH_PROMPT, { + connectionName: connectionName, + text: `Sign in to the host bot using AAD for SSO and connection ${connectionName}`, + title: 'Sign In', + timeout: 60000 + })); + + this.addDialog(new WaterfallDialog(WATERFALL_DIALOG, [ + this.signInStep.bind(this), + this.displayTokenStep.bind(this) + ])); + + this.initialDialogId = WATERFALL_DIALOG; + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async signInStep (stepContext) { + return stepContext.beginDialog(OAUTH_PROMPT); + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async displayTokenStep (stepContext) { + if (!stepContext.result.token) { + await stepContext.context.sendActivity('No token was provided.'); + } else { + await stepContext.context.sendActivity(`Here is your token: ${stepContext.result.token}`); + } + return stepContext.endDialog(); + } +} + +module.exports.SsoSignInDialog = SsoSignInDialog; diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/dialogs/tangentDialog.js b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/dialogs/tangentDialog.js new file mode 100644 index 0000000000..42dc86b6cc --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/dialogs/tangentDialog.js @@ -0,0 +1,73 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { InputHints, MessageFactory } = require('botbuilder'); +const { ComponentDialog, DialogSet, TextPrompt, WaterfallDialog, DialogTurnStatus } = require('botbuilder-dialogs'); + +const TANGENT_DIALOG = 'TangentDialog'; +const WATERFALL_DIALOG = 'WaterfallDialog'; +const TEXT_PROMPT = 'TextPrompt'; + +class TangentDialog extends ComponentDialog { + /** + * @param {string} dialogId + */ + constructor (dialogId = TANGENT_DIALOG) { + super(dialogId); + + this.addDialog(new TextPrompt(TEXT_PROMPT)); + this.addDialog(new WaterfallDialog(WATERFALL_DIALOG, [ + this.step1.bind(this), + this.step2.bind(this), + this.endStep.bind(this) + ])); + + this.initialDialogId = WATERFALL_DIALOG; + } + + /** + * The run method handles the incoming activity (in the form of a TurnContext) and passes it through the dialog system. + * If no dialog is active, it will start the default dialog. + * @param {import('botbuilder').TurnContext} turnContext + * @param {*} accessor + */ + async run (turnContext, accessor) { + const dialogSet = new DialogSet(accessor); + dialogSet.add(this); + + const dialogContext = await dialogSet.createContext(turnContext); + const results = await dialogContext.continueDialog(); + if (results.status === DialogTurnStatus.empty) { + await dialogContext.beginDialog(this.id); + } + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async step1 (stepContext) { + const messageText = 'Tangent step 1 of 2, say something.'; + const promptMessage = MessageFactory.text(messageText, messageText, InputHints.ExpectingInput); + + return stepContext.prompt(TEXT_PROMPT, promptMessage); + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async step2 (stepContext) { + const messageText = 'Tangent step 2 of 2, say something.'; + const promptMessage = MessageFactory.text(messageText, messageText, InputHints.ExpectingInput); + + return stepContext.prompt(TEXT_PROMPT, promptMessage); + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async endStep (stepContext) { + return stepContext.endDialog(); + } +} + +module.exports.TangentDialog = TangentDialog; diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/index.js b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/index.js new file mode 100644 index 0000000000..0082806e4b --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/index.js @@ -0,0 +1,204 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +// index.js is used to setup and configure your bot + +// Import required packages +const http = require('http'); +const https = require('https'); +const path = require('path'); +const restify = require('restify'); + +// Import required bot services. +// See https://aka.ms/bot-services to learn more about the different parts of a bot. +const { BotFrameworkAdapter, TurnContext, ActivityTypes, ChannelServiceRoutes, ConversationState, InputHints, MemoryStorage, SkillHttpClient, MessageFactory, SkillConversationIdFactory } = require('botbuilder'); +const { AuthenticationConfiguration, SimpleCredentialProvider } = require('botframework-connector'); + +// Import required bot configuration. +const ENV_FILE = path.join(__dirname, '.env'); +require('dotenv').config({ path: ENV_FILE }); + +// This bot's main dialog. +const { RootBot } = require('./bots/rootBot'); +const { SkillsConfiguration } = require('./skillsConfiguration'); +const { allowedSkillsClaimsValidator } = require('./authentication/allowedSkillsClaimsValidator'); +const { MainDialog } = require('./dialogs/mainDialog'); +const { LoggerMiddleware } = require('./middleware/loggerMiddleware'); +const { TokenExchangeSkillHandler } = require('./TokenExchangeSkillHandler'); + +const maxTotalSockets = (preallocatedSnatPorts, procCount = 1, weight = 0.5, overcommit = 1.1) => + Math.min( + Math.floor((preallocatedSnatPorts / procCount) * weight * overcommit), + preallocatedSnatPorts + ); + +// Create adapter. +// See https://aka.ms/about-bot-adapter to learn more about adapters. +const adapter = new BotFrameworkAdapter({ + appId: process.env.MicrosoftAppId, + appPassword: process.env.MicrosoftAppPassword, + authConfig: new AuthenticationConfiguration([], allowedSkillsClaimsValidator), + clientOptions: { + agentSettings: { + http: new http.Agent({ + keepAlive: true, + maxTotalSockets: maxTotalSockets(1024, 4, 0.3) + }), + https: new https.Agent({ + keepAlive: true, + maxTotalSockets: maxTotalSockets(1024, 4, 0.7) + }) + } + } +}); + +// Use the logger middleware to log messages. The default logger argument for LoggerMiddleware is Node's console.log(). +adapter.use(new LoggerMiddleware()); + +// Catch-all for errors. +const onTurnErrorHandler = async (context, error) => { + // This check writes out errors to the console log, instead of to app insights. + // NOTE: In production environment, you should consider logging this to Azure + // application insights. See https://aka.ms/bottelemetry for telemetry + // configuration instructions. + console.error(`\n [onTurnError] unhandled error: ${error}`); + + await sendErrorMessage(context, error); + await endSkillConversation(context); + await clearConversationState(context); +}; + +async function sendErrorMessage (context, error) { + try { + const { message, stack } = error; + + // Send a message to the user. + let errorMessageText = 'The bot encountered an error or bug.'; + let errorMessage = MessageFactory.text(errorMessageText, errorMessageText, InputHints.IgnoringInput); + errorMessage.value = { message, stack }; + await context.sendActivity(errorMessage); + + await context.sendActivity(`Exception: ${message}`); + await context.sendActivity(stack); + + errorMessageText = 'To continue to run this bot, please fix the bot source code.'; + errorMessage = MessageFactory.text(errorMessageText, errorMessageText, InputHints.ExpectingInput); + await context.sendActivity(errorMessage); + + // Send a trace activity, which will be displayed in Bot Framework Emulator. + await context.sendTraceActivity( + 'OnTurnError Trace', + `${error}`, + 'https://www.botframework.com/schemas/error', + 'TurnError' + ); + } catch (err) { + console.error(`\n [onTurnError] Exception caught in sendErrorMessage: ${err}`); + } +} + +async function endSkillConversation (context) { + try { + // Inform the active skill that the conversation is ended so that it has + // a chance to clean up. + // Note: ActiveSkillPropertyName is set by the RooBot while messages are being + // forwarded to a Skill. + const activeSkill = await conversationState.createProperty(RootBot.ActiveSkillPropertyName).get(context); + if (activeSkill) { + const botId = process.env.MicrosoftAppId; + + let endOfConversation = { + type: ActivityTypes.EndOfConversation, + code: 'RootSkillError' + }; + endOfConversation = TurnContext.applyConversationReference( + endOfConversation, TurnContext.getConversationReference(context.activity), true); + + await conversationState.saveChanges(context, true); + await skillClient.postToSkill(botId, activeSkill, skillsConfig.skillHostEndpoint, endOfConversation); + } + } catch (err) { + console.error(`\n [onTurnError] Exception caught on attempting to send EndOfConversation : ${err}`); + } +} + +async function clearConversationState (context) { + try { + // Delete the conversationState for the current conversation to prevent the + // bot from getting stuck in a error-loop caused by being in a bad state. + // ConversationState should be thought of as similar to "cookie-state" in a Web page. + await conversationState.delete(context); + } catch (err) { + console.error(`\n [onTurnError] Exception caught on attempting to Delete ConversationState : ${err}`); + } +} + +// Set the onTurnError for the singleton BotFrameworkAdapter. +adapter.onTurnError = onTurnErrorHandler; + +// Define a state store for your bot. See https://aka.ms/about-bot-state to learn more about using MemoryStorage. +// A bot requires a state store to persist the dialog and user state between messages. + +// For local development, in-memory storage is used. +// CAUTION: The Memory Storage used here is for local bot debugging only. When the bot +// is restarted, anything stored in memory will be gone. +const memoryStorage = new MemoryStorage(); +const conversationState = new ConversationState(memoryStorage); + +// Create the conversationIdFactory +const conversationIdFactory = new SkillConversationIdFactory(memoryStorage); + +// Load skills configuration +const skillsConfig = new SkillsConfiguration(); + +// Create the credential provider; +const credentialProvider = new SimpleCredentialProvider(process.env.MicrosoftAppId, process.env.MicrosoftAppPassword); + +// Create the skill client +const skillClient = new SkillHttpClient(credentialProvider, conversationIdFactory); + +// Create the main dialog. +const mainDialog = new MainDialog(conversationState, skillsConfig, skillClient, conversationIdFactory); +const bot = new RootBot(conversationState, skillClient, mainDialog); + +// Create HTTP server. +// maxParamLength defaults to 100, which is too short for the conversationId created in skillConversationIdFactory. +// See: https://github.com/microsoft/BotBuilder-Samples/issues/2194. +const server = restify.createServer({ maxParamLength: 1000 }); +server.listen(process.env.port || process.env.PORT || 36020, function () { + console.log(`\n${server.name} listening to ${server.url}`); + console.log('\nGet Bot Framework Emulator: https://aka.ms/botframework-emulator'); + console.log('\nTo talk to your bot, open the emulator select "Open Bot"'); +}); + +// Listen for incoming activities and route them to your bot main dialog. +server.post('/api/messages', (req, res) => { + // Route received a request to adapter for processing + adapter.processActivity(req, res, async (turnContext) => { + // route to bot activity handler. + await bot.run(turnContext); + }); +}); + +// Create and initialize the skill classes +const authConfig = new AuthenticationConfiguration([], allowedSkillsClaimsValidator); +const handler = new TokenExchangeSkillHandler(adapter, bot, conversationIdFactory, skillsConfig, skillClient, credentialProvider, authConfig); +const skillEndpoint = new ChannelServiceRoutes(handler); +skillEndpoint.register(server, '/api/skills'); + +// Listen for Upgrade requests for Streaming. +server.on('upgrade', (req, socket, head) => { + // Create an adapter scoped to this WebSocket connection to allow storing session data. + const streamingAdapter = new BotFrameworkAdapter({ + appId: process.env.MicrosoftAppId, + appPassword: process.env.MicrosoftAppPassword + }); + // Set onTurnError for the BotFrameworkAdapter created for each connection. + streamingAdapter.onTurnError = onTurnErrorHandler; + + streamingAdapter.useWebSocket(req, socket, head, async (context) => { + // After connecting via WebSocket, run this logic for every request sent over + // the WebSocket connection. + await bot.run(context); + }); +}); diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/middleware/loggerMiddleware.js b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/middleware/loggerMiddleware.js new file mode 100644 index 0000000000..325e331c0d --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/middleware/loggerMiddleware.js @@ -0,0 +1,49 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { ActivityTypes } = require('botbuilder'); + +/** + * Logs user and bot messages. It filters out ContinueConversation events coming from skill responses. + */ +class LoggerMiddleware { + // This defaults to using Node's console.log() method if a logger isn't passed in. + constructor (logger = console) { + this.logger = logger; + } + + /** + * @param {import('botbuilder').TurnContext} turnContext + * @param {Function} next + */ + async onTurn (turnContext, next) { + // Note: Skill responses will show as ContinueConversation events; we don't log those. + // We only log incoming messages from users. + if (turnContext.activity.type === ActivityTypes.Event && turnContext.activity.name !== 'continueConversation') { + const message = `User said: "${turnContext.activity.text}" Type: "${turnContext.activity.type}" Name: "${turnContext.activity.name}"`; + this.logger.log(message); + } + + // Register outgoing handler. + turnContext.onSendActivities(this.outgoingHandler.bind(this)); + + // Continue processing messages. + await next(); + } + + /** + * @param {import('botbuilder').TurnContext} turnContext + * @param {Partial[]} activities + * @param {Function} next + */ + async outgoingHandler (turnContext, activities, next) { + activities.forEach((activity) => { + const message = `Bot said: "${activity.text}" Type: "${activity.type}" Name: "${activity.name}"`; + this.logger.log(message); + }); + + await next(); + } +} + +module.exports.LoggerMiddleware = LoggerMiddleware; diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/package.json b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/package.json new file mode 100644 index 0000000000..197d3fb53a --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/package.json @@ -0,0 +1,26 @@ +{ + "name": "waterfall-host-bot", + "version": "1.0.0", + "description": "A simple waterfall root bot for testing skills", + "author": "Microsoft", + "license": "MIT", + "main": "index.js", + "scripts": { + "start": "node ./index.js", + "watch": "nodemon ./index.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://github.com" + }, + "dependencies": { + "botbuilder": "~4.13.3", + "botbuilder-dialogs": "~4.13.3", + "dotenv": "~8.2.0", + "restify": "~8.5.1" + }, + "devDependencies": { + "nodemon": "~2.0.4" + } +} diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/skills/echoSkill.js b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/skills/echoSkill.js new file mode 100644 index 0000000000..7c9165a319 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/skills/echoSkill.js @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { ActivityEx } = require('botbuilder-core'); +const { SkillDefinition } = require('./skillDefinition'); + +const SkillAction = { + Message: 'Message' +}; + +class EchoSkill extends SkillDefinition { + getActions () { + return Object.values(SkillAction); + } + + /** + * @param {string} actionId + */ + createBeginActivity (actionId) { + if (!this.getActions().includes(actionId)) { + throw new Error(`[EchoSkill]: Unable to create begin activity for "${actionId}".`); + } + + // We only support one activity for Echo so no further checks are needed + const activity = ActivityEx.createMessageActivity(); + activity.name = actionId; + activity.text = 'Begin the Echo Skill.'; + + return activity; + } +} + +module.exports.EchoSkill = EchoSkill; diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/skills/skillDefinition.js b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/skills/skillDefinition.js new file mode 100644 index 0000000000..73f731cbb4 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/skills/skillDefinition.js @@ -0,0 +1,14 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +class SkillDefinition { + getActions () { + throw new Error('[SkillDefinition]: Method not implemented'); + } + + createBeginActivity () { + throw new Error('[SkillDefinition]: Method not implemented'); + } +} + +module.exports.SkillDefinition = SkillDefinition; diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/skills/teamsSkill.js b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/skills/teamsSkill.js new file mode 100644 index 0000000000..74c4d4d73d --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/skills/teamsSkill.js @@ -0,0 +1,44 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { ActivityEx } = require('botbuilder-core'); +const { SkillDefinition } = require('./skillDefinition'); + +const SkillAction = { + TeamsTaskModule: 'TeamsTaskModule', + TeamsCardAction: 'TeamsCardAction', + TeamsConversation: 'TeamsConversation', + Cards: 'Cards', + Proactive: 'Proactive', + Attachment: 'Attachment', + Auth: 'Auth', + Sso: 'Sso', + Echo: 'Echo', + FileUpload: 'FileUpload', + Delete: 'Delete', + Update: 'Update' +}; + +class TeamsSkill extends SkillDefinition { + getActions () { + return Object.values(SkillAction); + } + + /** + * @param {string} actionId + */ + createBeginActivity (actionId) { + if (!this.getActions().includes(actionId)) { + throw new Error(`[TeamsSkill]: Unable to create begin activity for "${actionId}".`); + } + + // We don't support special parameters in these skills so a generic event with the right name + // will do in this case. + const activity = ActivityEx.createEventActivity(); + activity.name = actionId; + + return activity; + } +} + +module.exports.TeamsSkill = TeamsSkill; diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/skills/waterfallSkill.js b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/skills/waterfallSkill.js new file mode 100644 index 0000000000..04e14a21d6 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/skills/waterfallSkill.js @@ -0,0 +1,41 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { ActivityEx } = require('botbuilder-core'); +const { SkillDefinition } = require('./skillDefinition'); + +const SkillAction = { + Cards: 'Cards', + Proactive: 'Proactive', + Auth: 'Auth', + MessageWithAttachment: 'MessageWithAttachment', + Sso: 'Sso', + FileUpload: 'FileUpload', + Echo: 'Echo', + Delete: 'Delete', + Update: 'Update' +}; + +class WaterfallSkill extends SkillDefinition { + getActions () { + return Object.values(SkillAction); + } + + /** + * @param {string} actionId + */ + createBeginActivity (actionId) { + if (!this.getActions().includes(actionId)) { + throw new Error(`[WaterfallSkill]: Unable to create begin activity for "${actionId}".`); + } + + // We don't support special parameters in these skills so a generic event with the right name + // will do in this case. + const activity = ActivityEx.createEventActivity(); + activity.name = actionId; + + return activity; + } +} + +module.exports.WaterfallSkill = WaterfallSkill; diff --git a/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/skillsConfiguration.js b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/skillsConfiguration.js new file mode 100644 index 0000000000..e5f0f27644 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Consumers/CodeFirst/WaterfallHostBot/skillsConfiguration.js @@ -0,0 +1,59 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { EchoSkill } = require('./skills/echoSkill'); +const { WaterfallSkill } = require('./skills/waterfallSkill'); +const { TeamsSkill } = require('./skills/teamsSkill'); + +/** + * A helper class that loads Skills information from configuration. + */ +class SkillsConfiguration { + constructor () { + this.skillsData = Object.entries(process.env) + .filter(([key]) => key.startsWith('skill_')) + .reduce((acc, [key, value]) => { + const [, id, attr] = key.split('_'); + acc[id] = acc[id] || {}; + const propName = { appid: 'appId', endpoint: 'skillEndpoint', group: 'group' }[attr.toLowerCase()]; + if (!propName) { throw new Error(`[SkillsConfiguration]: Invalid environment variable declaration ${key}`); } + acc[id][propName] = value; + if (propName === 'group') { + acc[id] = this.createSkillDefinition({ id, ...acc[id] }); + } + return acc; + }, {}); + + this.skillHostEndpointValue = process.env.SkillHostEndpoint; + if (!this.skillHostEndpointValue) { + throw new Error('[SkillsConfiguration]: Missing configuration parameter. SkillHostEndpoint is required'); + } + } + + get skills () { + return this.skillsData; + } + + get skillHostEndpoint () { + return this.skillHostEndpointValue; + } + + createSkillDefinition (skill) { + // Note: we hard code this for now, we should dynamically create instances based on the manifests. + switch (skill.group) { + case 'Echo': + return Object.assign(new EchoSkill(), skill); + + case 'Waterfall': + return Object.assign(new WaterfallSkill(), skill); + + case 'Teams': + return Object.assign(new TeamsSkill(), skill); + + default: + throw new Error(`[SkillsConfiguration]: Unable to find definition class for ${skill.id}`); + } + } +} + +module.exports.SkillsConfiguration = SkillsConfiguration; diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot-v3/.env b/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot-v3/.env new file mode 100644 index 0000000000..6a8719bd3a --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot-v3/.env @@ -0,0 +1,3 @@ +MicrosoftAppId= +MicrosoftAppPassword= +AllowedCallers=* \ No newline at end of file diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot-v3/index.js b/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot-v3/index.js new file mode 100644 index 0000000000..4a3d731311 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot-v3/index.js @@ -0,0 +1,75 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const restify = require('restify'); +const builder = require('botbuilder'); +require('dotenv').config(); + +// Setup Restify Server +const server = restify.createServer(); +server.listen(process.env.port || process.env.PORT || 36407, function () { + console.log('%s listening to %s', server.name, server.url); +}); + +// Expose the manifest +server.get('/manifests/*', restify.plugins.serveStatic({ directory: './manifests', appendRequestPath: false })); + +// Bot Storage: Here we register the state storage for your bot. +// Default store: volatile in-memory store - Only for prototyping! +// We provide adapters for Azure Table, CosmosDb, SQL Azure, or you can implement your own! +// For samples and documentation, see: https://github.com/Microsoft/BotBuilder-Azure +const inMemoryStorage = new builder.MemoryBotStorage(); + +// Create chat connector for communicating with the Bot Framework Service +const connector = new builder.ChatConnector({ + appId: process.env.MicrosoftAppId, + appPassword: process.env.MicrosoftAppPassword, + enableSkills: true, + allowedCallers: [process.env.allowedCallers] +}); + +// Listen for messages from users +server.post('/api/messages', connector.listen()); + +// Create your bot with a function to receive messages from the user +new builder.UniversalBot(connector, function (session) { + session.on('error', function (error) { + const { message, stack } = error; + + // Send a message to the user. + let errorMessageText = 'The skill encountered an error or bug.'; + let activity = new builder.Message() + .text(`${errorMessageText}\r\n${message}\r\n${stack}`) + .speak(errorMessageText) + .inputHint(builder.InputHint.ignoringInput) + .value({ message, stack }); + session.send(activity); + + errorMessageText = 'To continue to run this bot, please fix the bot source code.'; + activity = new builder.Message() + .text(errorMessageText) + .speak(errorMessageText) + .inputHint(builder.InputHint.expectingInput); + session.send(activity); + + activity = new builder.Message() + .code('SkillError') + .text(message); + session.endConversation(activity); + }); + + switch (session.message.text.toLowerCase()) { + case 'end': + case 'stop': + session.say('Ending conversation from the skill...', { + inputHint: builder.InputHint.acceptingInput + }); + session.endConversation(); + break; + default: + session.say('Echo: ' + session.message.text, { + inputHint: builder.InputHint.acceptingInput + }); + session.say('Say "end" or "stop" and I\'ll end the conversation and back to the parent.'); + } +}).set('storage', inMemoryStorage); // Register in memory storage diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot-v3/manifests/echoskillbotv3-manifest-1.0.json b/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot-v3/manifests/echoskillbotv3-manifest-1.0.json new file mode 100644 index 0000000000..f99c248eb8 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot-v3/manifests/echoskillbotv3-manifest-1.0.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/skills/v2.1/skill-manifest.json", + "$id": "EchoSkillBotJSV3", + "name": "EchoSkillBotJSV3", + "version": "1.0", + "description": "This is a skill for echoing what the user sent to the bot (implemented using JS and BF v3).", + "publisherName": "Microsoft", + "privacyUrl": "https://microsoft.com/privacy", + "copyright": "Copyright (c) Microsoft Corporation. All rights reserved.", + "license": "https://github.com/microsoft/BotFramework-FunctionalTests/blob/main/LICENSE", + "tags": [ + "echo" + ], + "endpoints": [ + { + "name": "default", + "protocol": "BotFrameworkV3", + "description": "Localhost endpoint for the skill (on port 36407)", + "endpointUrl": "http://localhost:36407/api/messages", + "msAppId": "00000000-0000-0000-0000-000000000000" + } + ] +} diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot-v3/package.json b/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot-v3/package.json new file mode 100644 index 0000000000..dbc5fe99ae --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot-v3/package.json @@ -0,0 +1,29 @@ +{ + "name": "v3-skill-bot", + "version": "1.0.0", + "description": "An example of a V3 bot that can be used as a skill", + "author": "Microsoft Corp.", + "license": "MIT", + "scripts": { + "start": "node ./index.js" + }, + "dependencies": { + "async": "^1.5.2", + "base64url": "^3.0.0", + "botbuilder": "^3.30.0", + "busboy": "^0.2.13", + "chrono-node": "^1.2.5", + "dotenv": "^8.2.0", + "jsonwebtoken": "^8.2.2", + "node-uuid": "^1.4.7", + "promise": "^7.1.1", + "request": "^2.78.0", + "restify": "^8.5.1", + "rsa-pem-from-mod-exp": "^0.8.4", + "sprintf-js": "^1.0.3", + "url-join": "^1.1.0" + }, + "devDependencies": { + "mocha": "^2.4.5" + } +} diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/.env b/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/.env new file mode 100644 index 0000000000..b48405cf7f --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/.env @@ -0,0 +1,3 @@ +MicrosoftAppId= +MicrosoftAppPassword= +AllowedCallers= diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/authentication/allowedCallersClaimsValidator.js b/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/authentication/allowedCallersClaimsValidator.js new file mode 100644 index 0000000000..a0146a3aca --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/authentication/allowedCallersClaimsValidator.js @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { JwtTokenValidation, SkillValidation } = require('botframework-connector'); + +// Load the AppIds for the configured callers (we will only allow responses from skills we have configured). +// process.env.AllowedCallers is the list of parent bot Ids that are allowed to access the skill +// to add a new parent bot simply go to the .env file and add +// the parent bot's Microsoft AppId to the list under AllowedCallers, e.g.: +// AllowedCallers=195bd793-4319-4a84-a800-386770c058b2,38c74e7a-3d01-4295-8e66-43dd358920f8 +const allowedCallers = process.env.AllowedCallers ? process.env.AllowedCallers.split(',') : undefined; + +/** + * Sample claims validator that loads an allowed list from configuration if present + * and checks that requests are coming from allowed parent bots. + * @param claims An array of Claims decoded from the HTTP request's auth header + */ +const allowedCallersClaimsValidator = async (claims) => { + // If allowedCallers is undefined we allow all calls + if (allowedCallers && SkillValidation.isSkillClaim(claims)) { + // Check that the appId claim in the skill request is in the list of skills configured for this bot. + const appId = JwtTokenValidation.getAppIdFromClaims(claims); + if (!allowedCallers.includes(appId)) { + throw new Error(`Received a request from a bot with an app ID of "${appId}". To enable requests from this caller, add the app ID to your configuration file.`); + } + } +}; + +module.exports.allowedCallersClaimsValidator = allowedCallersClaimsValidator; diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/bot.js b/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/bot.js new file mode 100644 index 0000000000..bf9ce2f986 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/bot.js @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { ActivityHandler, ActivityTypes, EndOfConversationCodes } = require('botbuilder'); + +class EchoBot extends ActivityHandler { + constructor () { + super(); + // See https://aka.ms/about-bot-activity-message to learn more about the message and other activity types. + this.onMessage(async (context, next) => { + const activityText = context.activity.text.toLowerCase(); + if (activityText === 'end' || activityText === 'stop') { + await context.sendActivity('Ending conversation from the skill...'); + await context.sendActivity({ + type: ActivityTypes.EndOfConversation, + code: EndOfConversationCodes.CompletedSuccessfully + }); + } else { + await context.sendActivity(`Echo: ${context.activity.text}`); + await context.sendActivity('Say "end" or "stop" and I\'ll end the conversation and back to the parent.'); + } + + // By calling next() you ensure that the next BotHandler is run. + await next(); + }); + + this.onUnrecognizedActivityType(async (context, next) => { + // This will be called if the root bot is ending the conversation. Sending additional messages should be + // avoided as the conversation may have been deleted. + // Perform cleanup of resources if needed. + + // By calling next() you ensure that the next BotHandler is run. + await next(); + }); + } +} + +module.exports.EchoBot = EchoBot; diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/index.js b/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/index.js new file mode 100644 index 0000000000..dbcf46b4f9 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/index.js @@ -0,0 +1,109 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const dotenv = require('dotenv'); +const http = require('http'); +const https = require('https'); +const path = require('path'); +const restify = require('restify'); + +// Import required bot services. +// See https://aka.ms/bot-services to learn more about the different parts of a bot. +const { ActivityTypes, BotFrameworkAdapter, InputHints, MessageFactory } = require('botbuilder'); +const { AuthenticationConfiguration } = require('botframework-connector'); + +// Import required bot configuration. +const ENV_FILE = path.join(__dirname, '.env'); +dotenv.config({ path: ENV_FILE }); + +// This bot's main dialog. +const { EchoBot } = require('./bot'); +const { allowedCallersClaimsValidator } = require('./authentication/allowedCallersClaimsValidator'); + +// Create HTTP server +const server = restify.createServer(); +server.listen(process.env.port || process.env.PORT || 36400, () => { + console.log(`\n${server.name} listening to ${server.url}`); + console.log('\nGet Bot Framework Emulator: https://aka.ms/botframework-emulator'); + console.log('\nTo talk to your bot, open the emulator select "Open Bot"'); +}); + +// Expose the manifest +server.get('/manifests/*', restify.plugins.serveStatic({ directory: './manifests', appendRequestPath: false })); + +const maxTotalSockets = (preallocatedSnatPorts, procCount = 1, weight = 0.5, overcommit = 1.1) => + Math.min( + Math.floor((preallocatedSnatPorts / procCount) * weight * overcommit), + preallocatedSnatPorts + ); + +// Create adapter. +// See https://aka.ms/about-bot-adapter to learn more about how bots work. +const adapter = new BotFrameworkAdapter({ + appId: process.env.MicrosoftAppId, + appPassword: process.env.MicrosoftAppPassword, + authConfig: new AuthenticationConfiguration([], allowedCallersClaimsValidator), + clientOptions: { + agentSettings: { + http: new http.Agent({ + keepAlive: true, + maxTotalSockets: maxTotalSockets(1024, 4, 0.3) + }), + https: new https.Agent({ + keepAlive: true, + maxTotalSockets: maxTotalSockets(1024, 4, 0.7) + }) + } + } +}); + +// Catch-all for errors. +adapter.onTurnError = async (context, error) => { + // This check writes out errors to console log .vs. app insights. + // NOTE: In production environment, you should consider logging this to Azure + // application insights. + console.error(`\n [onTurnError] unhandled error: ${error}`); + + try { + const { message, stack } = error; + + // Send a message to the user. + let errorMessageText = 'The skill encountered an error or bug.'; + let errorMessage = MessageFactory.text(`${errorMessageText}\r\n${message}\r\n${stack}`, errorMessageText, InputHints.IgnoringInput); + errorMessage.value = { message, stack }; + await context.sendActivity(errorMessage); + + errorMessageText = 'To continue to run this bot, please fix the bot source code.'; + errorMessage = MessageFactory.text(errorMessageText, errorMessageText, InputHints.ExpectingInput); + await context.sendActivity(errorMessage); + + // Send a trace activity, which will be displayed in Bot Framework Emulator + await context.sendTraceActivity( + 'OnTurnError Trace', + `${error}`, + 'https://www.botframework.com/schemas/error', + 'TurnError' + ); + + // Send and EndOfConversation activity to the skill caller with the error to end the conversation + // and let the caller decide what to do. + await context.sendActivity({ + type: ActivityTypes.EndOfConversation, + code: 'SkillError', + text: error + }); + } catch (err) { + console.error(`\n [onTurnError] Exception caught in onTurnError : ${err}`); + } +}; + +// Create the bot that will handle incoming messages. +const myBot = new EchoBot(); + +// Listen for incoming requests. +server.post('/api/messages', (req, res) => { + adapter.processActivity(req, res, async (context) => { + // Route to main dialog. + await myBot.run(context); + }); +}); diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/manifests/echoskillbot-manifest-1.0.json b/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/manifests/echoskillbot-manifest-1.0.json new file mode 100644 index 0000000000..3ca4cfd1f2 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/manifests/echoskillbot-manifest-1.0.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/skills/v2.1/skill-manifest.json", + "$id": "EchoSkillBotJS", + "name": "EchoSkillBotJS", + "version": "1.0", + "description": "This is a skill for echoing what the user sent to the bot (implemented using JS).", + "publisherName": "Microsoft", + "privacyUrl": "https://microsoft.com/privacy", + "copyright": "Copyright (c) Microsoft Corporation. All rights reserved.", + "license": "https://github.com/microsoft/BotFramework-FunctionalTests/blob/main/LICENSE", + "tags": [ + "echo" + ], + "endpoints": [ + { + "name": "default", + "protocol": "BotFrameworkV3", + "description": "Localhost endpoint for the skill (on port 36400)", + "endpointUrl": "http://localhost:36400/api/messages", + "msAppId": "00000000-0000-0000-0000-000000000000" + } + ] +} \ No newline at end of file diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/package.json b/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/package.json new file mode 100644 index 0000000000..ff06ea8e8e --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/EchoSkillBot/package.json @@ -0,0 +1,25 @@ +{ + "name": "echo-skill-bot", + "version": "1.0.0", + "description": "Bot Builder v4 echo skill bot sample", + "author": "Microsoft", + "license": "MIT", + "main": "index.js", + "scripts": { + "start": "node ./index.js", + "watch": "nodemon ./index.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://github.com" + }, + "dependencies": { + "botbuilder": "~4.13.3", + "dotenv": "^8.2.0", + "restify": "~8.5.1" + }, + "devDependencies": { + "nodemon": "~2.0.4" + } +} diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/.env b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/.env new file mode 100644 index 0000000000..a9c638cff3 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/.env @@ -0,0 +1,11 @@ +MicrosoftAppId= +MicrosoftAppPassword= +ConnectionName=TestOAuthProvider +SsoConnectionName= +ChannelService= +AllowedCallers= +SkillHostEndpoint=http://localhost:36420/api/skills/ + +EchoSkillInfo_id=EchoSkillBot +EchoSkillInfo_appId= +EchoSkillInfo_skillEndpoint=http://localhost:36400/api/messages diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/authentication/allowedCallersClaimsValidator.js b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/authentication/allowedCallersClaimsValidator.js new file mode 100644 index 0000000000..a0146a3aca --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/authentication/allowedCallersClaimsValidator.js @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { JwtTokenValidation, SkillValidation } = require('botframework-connector'); + +// Load the AppIds for the configured callers (we will only allow responses from skills we have configured). +// process.env.AllowedCallers is the list of parent bot Ids that are allowed to access the skill +// to add a new parent bot simply go to the .env file and add +// the parent bot's Microsoft AppId to the list under AllowedCallers, e.g.: +// AllowedCallers=195bd793-4319-4a84-a800-386770c058b2,38c74e7a-3d01-4295-8e66-43dd358920f8 +const allowedCallers = process.env.AllowedCallers ? process.env.AllowedCallers.split(',') : undefined; + +/** + * Sample claims validator that loads an allowed list from configuration if present + * and checks that requests are coming from allowed parent bots. + * @param claims An array of Claims decoded from the HTTP request's auth header + */ +const allowedCallersClaimsValidator = async (claims) => { + // If allowedCallers is undefined we allow all calls + if (allowedCallers && SkillValidation.isSkillClaim(claims)) { + // Check that the appId claim in the skill request is in the list of skills configured for this bot. + const appId = JwtTokenValidation.getAppIdFromClaims(claims); + if (!allowedCallers.includes(appId)) { + throw new Error(`Received a request from a bot with an app ID of "${appId}". To enable requests from this caller, add the app ID to your configuration file.`); + } + } +}; + +module.exports.allowedCallersClaimsValidator = allowedCallersClaimsValidator; diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/bots/skillBot.js b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/bots/skillBot.js new file mode 100644 index 0000000000..51baad225e --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/bots/skillBot.js @@ -0,0 +1,61 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { ActivityHandler, ActivityTypes } = require('botbuilder'); +const { runDialog } = require('botbuilder-dialogs'); + +class SkillBot extends ActivityHandler { + /** + * @param {import('botbuilder').ConversationState} conversationState + * @param {import('botbuilder-dialogs').Dialog} dialog + * @param {string} serverUrl + */ + constructor (conversationState, dialog, serverUrl) { + super(); + if (!conversationState) throw new Error('[SkillBot]: Missing parameter. conversationState is required'); + if (!dialog) throw new Error('[SkillBot]: Missing parameter. dialog is required'); + + this.conversationState = conversationState; + this.dialog = dialog; + this.serverUrl = serverUrl; + + this.onTurn(async (turnContext, next) => { + if (turnContext.activity.type !== ActivityTypes.ConversationUpdate) { + await runDialog(this.dialog, turnContext, this.conversationState.createProperty('DialogState')); + } + + await next(); + }); + + this.onMembersAdded(async (turnContext, next) => { + const text = 'Welcome to the waterfall skill bot. \n\nThis is a skill, you will need to call it from another bot to use it.'; + + for (const member of turnContext.activity.membersAdded) { + if (member.id !== turnContext.activity.recipient.id) { + await turnContext.sendActivity({ + type: ActivityTypes.Message, + text, + speak: text.replace('\n\n', '') + }); + await turnContext.sendActivity(`You can check the skill manifest to see what it supports here: ${this.serverUrl}/manifests/waterfallskillbot-manifest-1.0.json`); + } + } + + // By calling next() you ensure that the next BotHandler is run. + await next(); + }); + } + + /** + * Override the ActivityHandler.run() method to save state changes after the bot logic completes. + * @param {import('botbuilder').TurnContext} context + */ + async run (context) { + await super.run(context); + + // Save any state changes. The load happened during the execution of the Dialog. + await this.conversationState.saveChanges(context); + } +} + +module.exports.SkillBot = SkillBot; diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/activityRouterDialog.js b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/activityRouterDialog.js new file mode 100644 index 0000000000..881f557a48 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/activityRouterDialog.js @@ -0,0 +1,159 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { ActivityTypes, InputHints, MessageFactory } = require('botbuilder'); +const { DialogTurnStatus, WaterfallDialog, ComponentDialog, SkillDialog } = require('botbuilder-dialogs'); +const { AuthDialog } = require('./auth/authDialog'); +const { CardDialog } = require('./cards/cardDialog'); +const { FileUploadDialog } = require('./fileUpload/fileUploadDialog'); +const { MessageWithAttachmentDialog } = require('./messageWithAttachment/messageWithAttachmentDialog'); +const { WaitForProactiveDialog } = require('./proactive/waitForProactiveDialog'); +const { SsoSkillDialog } = require('./sso/ssoSkillDialog'); +const { DeleteDialog } = require('./delete/deleteDialog'); +const { UpdateDialog } = require('./update/updateDialog'); + +const MAIN_DIALOG = 'ActivityRouterDialog'; +const WATERFALL_DIALOG = 'WaterfallDialog'; +const CARDS_DIALOG = 'Cards'; +const PROACTIVE_DIALOG = 'Proactive'; +const ATTACHMENT_DIALOG = 'MessageWithAttachment'; +const AUTH_DIALOG = 'Auth'; +const SSO_DIALOG = 'Sso'; +const FILE_UPLOAD_DIALOG = 'FileUpload'; +const ECHO_DIALOG = 'Echo'; +const DELETE_DIALOG = 'Delete'; +const UPDATE_DIALOG = 'Update'; + +/** + * A root dialog that can route activities sent to the skill to different sub-dialogs. + */ +class ActivityRouterDialog extends ComponentDialog { + /** + * @param {string} serverUrl + * @param {import('botbuilder').ConversationState} conversationState + * @param {import('../skillConversationIdFactory').SkillConversationIdFactory} conversationIdFactory + * @param {import('botbuilder').SkillHttpClient} skillClient + * @param {Object} continuationParametersStore + */ + constructor (serverUrl, conversationState, conversationIdFactory, skillClient, continuationParametersStore) { + super(MAIN_DIALOG); + + this.addDialog(new CardDialog(CARDS_DIALOG, serverUrl)) + .addDialog(new WaitForProactiveDialog(PROACTIVE_DIALOG, serverUrl, continuationParametersStore)) + .addDialog(new MessageWithAttachmentDialog(ATTACHMENT_DIALOG, serverUrl)) + .addDialog(new AuthDialog(AUTH_DIALOG, process.env)) + .addDialog(new SsoSkillDialog(SSO_DIALOG, process.env)) + .addDialog(new FileUploadDialog(FILE_UPLOAD_DIALOG)) + .addDialog(new DeleteDialog(DELETE_DIALOG)) + .addDialog(new UpdateDialog(UPDATE_DIALOG)) + .addDialog(this.createEchoSkillDialog(ECHO_DIALOG, conversationState, conversationIdFactory, skillClient, process.env)) + .addDialog(new WaterfallDialog(WATERFALL_DIALOG, [ + this.processActivity.bind(this) + ])); + + this.initialDialogId = WATERFALL_DIALOG; + } + + /** + * @param {string} dialogId + * @param {import('botbuilder').ConversationState} conversationState + * @param {import('../skillConversationIdFactory').SkillConversationIdFactory} conversationIdFactory + * @param {import('botbuilder').SkillHttpClient} skillClient + * @param {Object} configuration + */ + createEchoSkillDialog (dialogId, conversationState, conversationIdFactory, skillClient, configuration) { + const skillHostEndpoint = configuration.SkillHostEndpoint; + if (!skillHostEndpoint) { + throw new Error('SkillHostEndpoint is not in configuration'); + } + + const skill = { + id: configuration.EchoSkillInfo_id, + appId: configuration.EchoSkillInfo_appId, + skillEndpoint: configuration.EchoSkillInfo_skillEndpoint + }; + + if (!skill.id || !skill.skillEndpoint) { + throw new Error('EchoSkillInfo_id and EchoSkillInfo_skillEndpoint are not set in configuration'); + } + + return new SkillDialog({ + botId: configuration.MicrosoftAppId, + conversationIdFactory, + skillClient, + skillHostEndpoint, + conversationState, + skill + }, dialogId); + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async processActivity (stepContext) { + // A skill can send trace activities, if needed. + await stepContext.context.sendActivity({ + type: ActivityTypes.Trace, + timestamp: new Date(), + text: 'ActivityRouterDialog.processActivity()', + label: `Got activityType: ${stepContext.context.activity.type}` + }); + + if (stepContext.context.activity.type === ActivityTypes.Event) { + return this.onEventActivity(stepContext); + } else { + // We didn't get an activity type we can handle. + await stepContext.context.sendActivity( + `Unrecognized ActivityType: "${stepContext.context.activity.type}".`, + undefined, + InputHints.IgnoringInput + ); + return { status: DialogTurnStatus.complete }; + } + } + + /** + * This method performs different tasks based on event name. + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async onEventActivity (stepContext) { + const activity = stepContext.context.activity; + await stepContext.context.sendActivity({ + type: ActivityTypes.Trace, + timestamp: new Date(), + text: 'ActivityRouterDialog.onEventActivity()', + label: `Name: ${activity.name}, Value: ${JSON.stringify(activity.value)}` + }); + + // Resolve what to execute based on the event name. + switch (activity.name) { + case CARDS_DIALOG: + case PROACTIVE_DIALOG: + case ATTACHMENT_DIALOG: + case AUTH_DIALOG: + case SSO_DIALOG: + case FILE_UPLOAD_DIALOG: + case DELETE_DIALOG: + case UPDATE_DIALOG: + return stepContext.beginDialog(activity.name); + + case ECHO_DIALOG: { + // Start the EchoSkillBot + const messageActivity = MessageFactory.text("I'm the echo skill bot"); + messageActivity.deliveryMode = activity.deliveryMode; + return stepContext.beginDialog(activity.name, { activity: messageActivity }); + } + + default: + // We didn't get an event name we can handle. + await stepContext.context.sendActivity( + `Unrecognized EventName: "${stepContext.context.activity.name}".`, + undefined, + InputHints.IgnoringInput + ); + return { status: DialogTurnStatus.complete }; + } + } +} + +module.exports.ActivityRouterDialog = ActivityRouterDialog; diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/auth/authDialog.js b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/auth/authDialog.js new file mode 100644 index 0000000000..573df18620 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/auth/authDialog.js @@ -0,0 +1,90 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { InputHints, MessageFactory } = require('botbuilder'); +const { ComponentDialog, OAuthPrompt, WaterfallDialog, ConfirmPrompt } = require('botbuilder-dialogs'); + +const WATERFALL_DIALOG = 'WaterfallDialog'; +const OAUTH_PROMPT = 'OAuthPrompt'; +const CONFIRM_PROMPT = 'ConfirmPrompt'; + +class AuthDialog extends ComponentDialog { + /** + * @param {string} dialogId + * @param {Object} configuration + */ + constructor (dialogId, configuration) { + super(dialogId); + + this.connectionName = configuration.ConnectionName; + + this.addDialog(new ConfirmPrompt(CONFIRM_PROMPT)) + .addDialog(new OAuthPrompt(OAUTH_PROMPT, { + connectionName: this.connectionName, + text: `Please Sign In to connection: '${this.connectionName}'`, + title: 'Sign In', + timeout: 300000 // User has 5 minutes to login (1000 * 60 * 5) + })); + + this.addDialog(new WaterfallDialog(WATERFALL_DIALOG, [ + this.promptStep.bind(this), + this.loginStep.bind(this), + this.displayToken.bind(this) + ])); + + // The initial child Dialog to run. + this.initialDialogId = WATERFALL_DIALOG; + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + promptStep (stepContext) { + return stepContext.beginDialog(OAUTH_PROMPT); + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async loginStep (stepContext) { + // Get the token from the previous step. + const tokenResponse = stepContext.result; + + if (tokenResponse) { + stepContext.values.token = tokenResponse.token; + + // Show the token + const loggedInMessage = 'You are now logged in.'; + await stepContext.context.sendActivity(MessageFactory.text(loggedInMessage, loggedInMessage, InputHints.IgnoringInput)); + + return stepContext.prompt(CONFIRM_PROMPT, { + prompt: MessageFactory.text('Would you like to view your token?') + }); + } + + const tryAgainMessage = 'Login was not successful please try again.'; + await stepContext.context.sendActivity(MessageFactory.text(tryAgainMessage, tryAgainMessage, InputHints.IgnoringInput)); + return stepContext.replaceDialog(this.initialDialogId); + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async displayToken (stepContext) { + const result = stepContext.result; + + if (result) { + const showTokenMessage = 'Here is your token:'; + await stepContext.context.sendActivity(MessageFactory.text(`${showTokenMessage} ${stepContext.values.token}`, showTokenMessage, InputHints.IgnoringInput)); + } + + // Sign out + stepContext.context.adapter.signOutUser(stepContext.context, this.connectionName); + const signOutMessage = 'I have signed you out.'; + await stepContext.context.sendActivity(MessageFactory.text(signOutMessage, signOutMessage, InputHints.IgnoringInput)); + + return stepContext.endDialog(); + } +} + +module.exports.AuthDialog = AuthDialog; diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/cardDialog.js b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/cardDialog.js new file mode 100644 index 0000000000..58f61927b0 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/cardDialog.js @@ -0,0 +1,223 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { InputHints, MessageFactory, CardFactory, ActionTypes } = require('botbuilder'); +const { ComponentDialog, WaterfallDialog, ChoicePrompt, ListStyle, ChoiceFactory, DialogTurnStatus } = require('botbuilder-dialogs'); +const fs = require('fs'); +const path = require('path'); +const { CardOptions } = require('./cardOptions'); +const { CardSampleHelper } = require('./cardSampleHelper'); +const { ChannelSupportedCards } = require('./channelSupportedCards'); + +const WATERFALL_DIALOG = 'WaterfallDialog'; +const CARD_PROMPT = 'CardPrompt'; + +class CardDialog extends ComponentDialog { + /** + * @param {string} dialogId + * @param {string} serverUrl + */ + constructor (dialogId, serverUrl) { + super(dialogId); + + this.serverUrl = serverUrl; + this.mindBlownGif = 'https://media3.giphy.com/media/xT0xeJpnrWC4XWblEk/giphy.gif?cid=ecf05e47mye7k75sup6tcmadoom8p1q8u03a7g2p3f76upp9&rid=giphy.gif'; + this.corgiOnCarouselVideo = 'https://www.youtube.com/watch?v=LvqzubPZjHE'; + this.teamsLogoFileName = 'teams-logo.png'; + + this.addDialog(new ChoicePrompt(CARD_PROMPT, this.cardPromptValidator)) + .addDialog(new WaterfallDialog(WATERFALL_DIALOG, [ + this.selectCard.bind(this), + this.displayCard.bind(this) + ])); + + this.initialDialogId = WATERFALL_DIALOG; + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + * @returns {import('botframework-schema').HeroCard} + */ + makeUpdatedHeroCard (stepContext) { + const data = stepContext.context.activity.value; + data.count++; + + const { title, text, cardActions } = { + title: 'Newly updated card.', + text: `Update count - ${data.count}`, + cardActions: [ + { + type: ActionTypes.MessageBack, + title: 'Update Card', + text: 'UpdateCardAction', + value: data + } + ] + }; + + return CardFactory.heroCard(title, text, null, cardActions); + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async selectCard (stepContext) { + // Create the PromptOptions from the skill configuration which contain the list of configured skills. + const messageText = 'What card do you want?'; + const repromptMessageText = 'This message will be created in the validation code'; + const options = { + prompt: MessageFactory.text(messageText, messageText, InputHints.ExpectingInput), + retryPrompt: MessageFactory.text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput), + choices: ChoiceFactory.toChoices(Object.values(CardOptions)), + style: ListStyle.list + }; + + // Ask the user to enter a card choice. + return stepContext.prompt(CARD_PROMPT, options); + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async displayCard (stepContext) { + if (stepContext.context.activity.value != null) { + await this.handleSpecialActivity(stepContext); + } else { + // Checks to see if the activity is an adaptive card update or a bot action respose. + const card = stepContext.result.value; + const cardType = Object.keys(CardOptions).find(key => CardOptions[key].toLowerCase() === card.toLowerCase()); + const { channelId } = stepContext.context.activity; + + if (ChannelSupportedCards.isCardSupported(channelId, cardType)) { + switch (cardType) { + case CardOptions.AdaptiveCardBotAction: + await stepContext.context.sendActivity(MessageFactory.attachment(CardSampleHelper.createAdaptiveCardBotAction())); + break; + + case CardOptions.AdaptiveCardTeamsTaskModule: + await stepContext.context.sendActivity(MessageFactory.attachment(CardSampleHelper.createAdaptiveCardTaskModule())); + break; + + case CardOptions.AdaptiveCardSubmitAction: + await stepContext.context.sendActivity(MessageFactory.attachment(CardSampleHelper.createAdaptiveCardSubmit())); + break; + + case CardOptions.Hero: + await stepContext.context.sendActivity(MessageFactory.attachment(CardSampleHelper.createHeroCard())); + break; + + case CardOptions.Thumbnail: + await stepContext.context.sendActivity(MessageFactory.attachment(CardSampleHelper.createThumbnailCard())); + break; + + case CardOptions.Receipt: + await stepContext.context.sendActivity(MessageFactory.attachment(CardSampleHelper.createReceiptCard())); + break; + + case CardOptions.Signin: + await stepContext.context.sendActivity(MessageFactory.attachment(CardSampleHelper.createSigninCard())); + break; + + case CardOptions.Carousel: + // NOTE: if cards are NOT the same height in a carousel, Teams will instead display as AttachmentLayoutTypes.List + await stepContext.context.sendActivity(MessageFactory.carousel([ + CardSampleHelper.createHeroCard(), + CardSampleHelper.createHeroCard(), + CardSampleHelper.createHeroCard() + ])); + break; + + case CardOptions.List: + await stepContext.context.sendActivity(MessageFactory.list([ + CardSampleHelper.createHeroCard(), + CardSampleHelper.createHeroCard(), + CardSampleHelper.createHeroCard() + ])); + break; + + case CardOptions.O365: + await stepContext.context.sendActivity(MessageFactory.attachment(CardSampleHelper.createO365ConnectorCard())); + break; + + case CardOptions.TeamsFileConsent: { + const file = fs.readFileSync(path.resolve(__dirname, 'files', this.teamsLogoFileName)); + await stepContext.context.sendActivity(MessageFactory.attachment(CardSampleHelper.createTeamsFileConsentCard(this.teamsLogoFileName, file.byteLength))); + break; + } + + case CardOptions.Animation: + await stepContext.context.sendActivity(MessageFactory.attachment(CardSampleHelper.createAnimationCard(this.mindBlownGif))); + break; + + case CardOptions.Audio: + await stepContext.context.sendActivity(MessageFactory.attachment(CardSampleHelper.createAudioCard(`${this.serverUrl}/api/music`))); + break; + + case CardOptions.Video: + await stepContext.context.sendActivity(MessageFactory.attachment(CardSampleHelper.createVideoCard(this.corgiOnCarouselVideo))); + break; + + case CardOptions.AdaptiveUpdate: + await stepContext.context.sendActivity(MessageFactory.attachment(CardSampleHelper.createUpdateAdaptiveCard())); + break; + + case CardOptions.End: + return { status: DialogTurnStatus.complete }; + } + } else { + await stepContext.context.sendActivity(MessageFactory.text(`${card} cards are not supported in the ${channelId} channel.`)); + } + } + + return stepContext.replaceDialog(this.initialDialogId); + } + + /** + * @param {import('botbuilder-dialogs').WaterfallStepContext} stepContext + */ + async handleSpecialActivity (stepContext) { + if (!stepContext.context.activity.text) { + await stepContext.context.sendActivity(MessageFactory.Text(`I received an activity with this data in the value field ${stepContext.context.activity.value}`)); + } else { + if (stepContext.context.activity.text.toLowerCase().includes('update')) { + if (!stepContext.context.activity.replyToId) { + await stepContext.context.sendActivity(MessageFactory.Text(`Update activity is not supported in the ${stepContext.context.activity.channelId} channel.`)); + } else { + const heroCard = this.makeUpdatedHeroCard(stepContext); + const activity = MessageFactory.attachment(heroCard); + activity.id = stepContext.context.activity.replyToId; + await stepContext.context.updateActivity(activity); + } + } else { + await stepContext.context.sendActivity(MessageFactory.Text(`I received an activity with this data in the text field ${stepContext.context.activity.text} and this data in the value field ${stepContext.context.activity.value}`)); + } + } + } + + /** + * @param {import('botbuilder-dialogs').PromptValidatorContext} promptContext + */ + async cardPromptValidator (promptContext) { + if (!promptContext.recognized.succeeded) { + // This checks to see if this response is the user clicking the update button on the card + if (promptContext.context.activity.value) { + return true; + } + + if (promptContext.context.activity.attachments) { + return true; + } + + const activityJson = JSON.stringify(promptContext.context.activity, null, 4).replace(/\n/g, '\r\n'); + + // Render the activity so we can assert in tests. + // We may need to simplify the json if it gets too complicated to test. + promptContext.options.retryPrompt.text = `Got ${activityJson}\n\n${promptContext.options.prompt.text}`; + return false; + } + + return true; + } +} + +module.exports.CardDialog = CardDialog; diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/cardOptions.js b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/cardOptions.js new file mode 100644 index 0000000000..85a54205a0 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/cardOptions.js @@ -0,0 +1,69 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +module.exports.CardOptions = { + /** + * Adaptive card - Bot action + */ + AdaptiveCardBotAction: 'AdaptiveCardBotAction', + /** + * Adaptive card - Task module + */ + AdaptiveCardTeamsTaskModule: 'AdaptiveCardTeamsTaskModule', + /** + * Adaptive card - Submit action + */ + AdaptiveCardSubmitAction: 'AdaptiveCardSubmitAction', + /** + * Hero cards + */ + Hero: 'Hero', + /** + * Thumbnail cards + */ + Thumbnail: 'Thumbnail', + /** + * Receipt cards + */ + Receipt: 'Receipt', + /** + * Signin cards + */ + Signin: 'Signin', + /** + * Carousel cards + */ + Carousel: 'Carousel', + /** + * List cards + */ + List: 'List', + /** + * O365 cards + */ + O365: 'O365', + /** + * File cards + */ + TeamsFileConsent: 'TeamsFileConsent', + /** + * Animation cards + */ + Animation: 'Animation', + /** + * Audio cards + */ + Audio: 'Audio', + /** + * Video cards + */ + Video: 'Video', + /** + * Adaptive update cards + */ + AdaptiveUpdate: 'AdaptiveUpdate', + /** + * Ends the card selection dialog + */ + End: 'End' +}; diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/cardSampleHelper.js b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/cardSampleHelper.js new file mode 100644 index 0000000000..36613d78de --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/cardSampleHelper.js @@ -0,0 +1,514 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { CardFactory, ActionTypes } = require('botbuilder'); + +class CardSampleHelper { + static createAdaptiveCardBotAction () { + return CardFactory.adaptiveCard({ + type: 'AdaptiveCard', + version: '1.2', + body: [ + { + text: 'Bot Builder actions', + type: 'TextBlock' + } + ], + actions: [ + { + type: 'Action.Submit', + title: 'imBack', + data: { + msteams: { + type: 'imBack', + value: 'text' + } + } + }, + { + type: 'Action.Submit', + title: 'message back', + data: { + msteams: { + type: ActionTypes.MessageBack, + value: { + key: 'value' + } + } + } + }, + { + type: 'Action.Submit', + title: 'message back local echo', + data: { + msteams: { + type: ActionTypes.MessageBack, + text: 'text received by bots', + displayText: 'display text message back', + value: { + key: 'value' + } + } + } + }, + { + type: 'Action.Submit', + title: 'invoke', + data: { + msteams: { + type: 'invoke', + value: { + key: 'value' + } + } + } + } + ] + }); + } + + static createAdaptiveCardTaskModule () { + return CardFactory.adaptiveCard({ + type: 'AdaptiveCard', + version: '1.2', + body: [ + { + type: 'TextBlock', + text: 'Task Module Adaptive Card' + } + ], + actions: [ + { + type: 'Action.Submit', + title: 'Launch Task Module', + data: { + msteams: { + type: 'invoke', + value: '{\r\n "hiddenKey": "hidden value from task module launcher",\r\n "type": "task/fetch"\r\n}' + } + } + } + ] + }); + } + + static createAdaptiveCardSubmit () { + return CardFactory.adaptiveCard({ + type: 'AdaptiveCard', + version: '1.2', + body: [ + { + type: 'TextBlock', + text: 'Bot Builder actions' + }, + { + type: 'Input.Text', + id: 'x' + } + ], + actions: [ + { + type: 'Action.Submit', + title: 'Action.Submit', + data: { + key: 'value' + } + } + ] + }); + } + + static createHeroCard () { + const { title, subtitle, text, images, buttons } = { + title: 'BotFramework Hero Card', + subtitle: 'Microsoft Bot Framework', + text: 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.', + images: [ + { + url: 'https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg' + } + ], + buttons: [ + { + type: ActionTypes.OpenUrl, + title: 'Get Started', + value: 'https://docs.microsoft.com/bot-framework' + } + ] + }; + + return CardFactory.heroCard(title, images, buttons, { subtitle, text }); + } + + static createThumbnailCard () { + const { title, subtitle, text, images, buttons } = { + title: 'BotFramework Thumbnail Card', + subtitle: 'Microsoft Bot Framework', + text: 'Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.', + images: [ + { + url: 'https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg' + } + ], + buttons: [ + { + type: ActionTypes.OpenUrl, + title: 'Get Started', + value: 'https://docs.microsoft.com/bot-framework' + } + ] + }; + + return CardFactory.thumbnailCard(title, images, buttons, { subtitle, text }); + } + + static createReceiptCard () { + return CardFactory.receiptCard({ + title: 'John Doe', + facts: [ + { + key: 'Order Number', + value: '1234' + }, + { + key: 'Payment Method', + value: 'VISA 5555-****' + } + ], + items: [ + { + title: 'Data Transfer', + image: { + url: 'https://github.com/amido/azure-vector-icons/raw/master/renders/traffic-manager.png' + }, + price: '$ 38.45', + quantity: '368' + }, + { + title: 'App Service', + image: { + url: 'https://github.com/amido/azure-vector-icons/raw/master/renders/cloud-service.png' + }, + price: '$ 45.00', + quantity: '720' + } + ], + total: '$ 90.95', + tax: '$ 7.50', + buttons: [ + { + type: ActionTypes.OpenUrl, + title: 'More information', + image: 'https://account.windowsazure.com/content/6.10.1.38-.8225.160809-1618/aux-pre/images/offer-icon-freetrial.png', + value: 'https://azure.microsoft.com/en-us/pricing/' + } + ] + }); + } + + static createSigninCard () { + return CardFactory.signinCard('Sign-in', 'https://login.microsoftonline.com/', 'BotFramework Sign-in Card'); + } + + static createO365ConnectorCard () { + return CardFactory.o365ConnectorCard({ + title: 'card title', + text: 'card text', + summary: 'O365 card summary', + themeColor: '#E67A9E', + sections: [ + { + title: '**section title**', + text: 'section text', + activityTitle: 'activity title', + activitySubtitle: 'activity subtitle', + activityText: 'activity text', + activityImage: 'http://connectorsdemo.azurewebsites.net/images/MSC12_Oscar_002.jpg', + activityImageType: 'avatar', + markdown: true, + facts: [ + { + name: 'Fact name 1', + value: 'Fact value 1' + }, + { + name: 'Fact name 2', + value: 'Fact value 2' + } + ], + images: [ + { + image: 'http://connectorsdemo.azurewebsites.net/images/MicrosoftSurface_024_Cafe_OH-06315_VS_R1c.jpg', + title: 'image 1' + }, + { + image: 'http://connectorsdemo.azurewebsites.net/images/WIN12_Scene_01.jpg', + title: 'image 2' + }, + { + image: 'http://connectorsdemo.azurewebsites.net/images/WIN12_Anthony_02.jpg', + title: 'image 3' + } + ] + } + ], + potentialAction: + [ + { + '@type': 'ActionCard', + inputs: [ + { + '@type': 'MultichoiceInput', + choices: [ + { + display: 'Choice 1', + value: '1' + }, + { + display: 'Choice 2', + value: '2' + }, + { + display: 'Choice 3', + value: '3' + } + ], + style: 'expanded', + isMultiSelect: true, + id: 'list-1', + isRequired: true, + title: 'Pick multiple options' + }, + { + '@type': 'MultichoiceInput', + choices: [ + { + display: 'Choice 4', + value: '4' + }, + { + display: 'Choice 5', + value: '5' + }, + { + display: 'Choice 6', + value: '6' + } + ], + style: 'compact', + isMultiSelect: true, + id: 'list-2', + isRequired: true, + title: 'Pick multiple options' + }, + { + '@type': 'MultichoiceInput', + choices: [ + { + display: 'Choice a', + value: 'a' + }, + { + display: 'Choice b', + value: 'b' + }, + { + display: 'Choice c', + value: 'c' + } + ], + style: 'expanded', + isMultiSelect: false, + id: 'list-3', + isRequired: false, + title: 'Pick an option' + }, + { + '@type': 'MultichoiceInput', + choices: [ + { + display: 'Choice x', + value: 'x' + }, + { + display: 'Choice y', + value: 'y' + }, + { + display: 'Choice z', + value: 'z' + } + ], + style: 'compact', + isMultiSelect: false, + id: 'list-4', + isRequired: false, + title: 'Pick an option' + } + ], + actions: [ + { + '@type': 'HttpPOST', + body: '{"list1":"{{list-1.value}}", "list2":"{{list-2.value}}", "list3":"{{list-3.value}}", "list4":"{{list-4.value}}"}', + name: 'Send', + '@id': 'card-1-btn-1' + } + ], + name: 'Multiple Choice', + '@id': 'card-1' + }, + { + '@type': 'ActionCard', + inputs: [ + { + '@type': 'TextInput', + isMultiline: true, + id: 'text-1', + isRequired: false, + title: 'multiline, no maxLength' + }, + { + '@type': 'TextInput', + isMultiline: false, + id: 'text-2', + isRequired: false, + title: 'single line, no maxLength' + }, + { + '@type': 'TextInput', + isMultiline: true, + maxLength: 10, + id: 'text-3', + isRequired: true, + title: 'multiline, max len = 10, isRequired' + }, + { + '@type': 'TextInput', + isMultiline: false, + maxLength: 10, + id: 'text-4', + isRequired: true, + title: 'single line, max len = 10, isRequired' + } + ], + actions: [ + { + '@type': 'HttpPOST', + body: '{"text1":"{{text-1.value}}", "text2":"{{text-2.value}}", "text3":"{{text-3.value}}", "text4":"{{text-4.value}}"}', + name: 'Send', + '@id': 'card-2-btn-1' + } + ], + name: 'Text Input', + '@id': 'card-2' + }, + { + '@type': 'ActionCard', + inputs: [ + { + '@type': 'DateInput', + includeTime: true, + id: 'date-1', + isRequired: true, + title: 'date with time' + }, + { + '@type': 'DateInput', + includeTime: false, + id: 'date-2', + isRequired: false, + title: 'date only' + } + ], + actions: [ + { + '@type': 'HttpPOST', + body: '{"date1":"{{date-1.value}}", "date2":"{{date-2.value}}"}', + name: 'Send', + '@id': 'card-3-btn-1' + } + ], + name: 'Date Input', + '@id': 'card-3' + }, + { + '@type': 'ViewAction', + target: [ + 'http://microsoft.com' + ], + name: 'View Action' + }, + { + '@type': 'OpenUri', + targets: [ + { + os: 'default', + uri: 'http://microsoft.com' + }, + { + os: 'iOS', + uri: 'http://microsoft.com' + }, + { + os: 'android', + uri: 'http://microsoft.com' + }, + { + os: 'windows', + uri: 'http://microsoft.com' + } + ], + name: 'Open Uri', + '@id': 'open-uri' + } + ] + + }); + } + + static createTeamsFileConsentCard (filename, filesize) { + const consentContext = { filename }; + + return { + contentType: 'application/vnd.microsoft.teams.card.file.consent', + name: filename, + content: { + description: 'This is the file I want to send you', + sizeInbytes: filesize, + acceptContext: consentContext, + declineContext: consentContext + } + }; + } + + static createAnimationCard (url) { + return CardFactory.animationCard('Animation Card', [{ url }], null, { autostart: true }); + } + + static createAudioCard (url) { + return CardFactory.audioCard('Audio Card', [{ url }], null, { autoloop: true }); + } + + static createVideoCard (url) { + return CardFactory.videoCard('Video Card', [{ url }]); + } + + static createUpdateAdaptiveCard () { + const { title, text, buttons } = { + title: 'Update card', + text: 'Update Card Action', + buttons: [ + { + type: ActionTypes.MessageBack, + title: 'Update card title', + text: 'Update card text', + value: { count: 0 } + } + ] + }; + + return CardFactory.heroCard(title, text, null, buttons); + } +} + +module.exports.CardSampleHelper = CardSampleHelper; diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/channelSupportedCards.js b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/channelSupportedCards.js new file mode 100644 index 0000000000..31770b6939 --- /dev/null +++ b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/channelSupportedCards.js @@ -0,0 +1,46 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const { Channels } = require('botbuilder'); +const { CardOptions } = require('./cardOptions'); + +/** + * This tracks what cards are not supported in a given channel. + */ +const unsupportedChannelCards = { + [Channels.Emulator]: [ + CardOptions.AdaptiveCardTeamsTaskModule, + CardOptions.AdaptiveUpdate, + CardOptions.TeamsFileConsent, + CardOptions.O365 + ], + [Channels.Directline]: [ + CardOptions.AdaptiveUpdate + ], + [Channels.Telegram]: [ + CardOptions.AdaptiveCardBotAction, + CardOptions.AdaptiveCardTeamsTaskModule, + CardOptions.AdaptiveCardSubmitAction, + CardOptions.List, + CardOptions.TeamsFileConsent + ] +}; + +class ChannelSupportedCards { + /** + * This let's you know if a card is supported in a given channel. + * @param {string} channel Bot Connector Channel. + * @param {keyof CardOptions} type Card Option to be checked. + * @returns A bool if the card is supported in the channel. + */ + static isCardSupported (channel, type) { + const unsupportedChannel = unsupportedChannelCards[channel]; + if (unsupportedChannel) { + return !unsupportedChannel.includes(type); + } + + return true; + } +} + +module.exports.ChannelSupportedCards = ChannelSupportedCards; diff --git a/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/files/buildreactionbotframework.jpg b/tests/functional/Bots/JavaScript/Skills/CodeFirst/WaterfallSkillBot/dialogs/cards/files/buildreactionbotframework.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f410fc137e4d78ef6934f7a06f7b0e50b7b45267 GIT binary patch literal 65992 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
    +
    +
    Your bot is ready!
    +
    You can test your bot in the Bot Framework Emulator
    + by connecting to http://localhost:3978/api/messages.
    +
    +
    Visit Azure + Bot Service to register your bot and add it to
    + various channels. The bot's endpoint URL typically looks + like this:
    +
    https://your_bots_hostname/api/messages
    +
    +
    +

    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 z z7_z)enS8gtZF#qDH6^lGRxb2=s&)GdyR~}eP)Zj_>RS9i>x$_A{&)Y^e*Oamh5sja zX-bfe*yZ#EoyWhz*y2ld#hsq=-S5ytWr>|=ry zifp<9sb7JtHeX~&GL`3*zJJT*PmFO@ArgGto9ncsp-XY}7n-+RJ2F4V`!q-fM?+0= z?zXXn2Z*Zb!kxL`Tx`HpB!Vr}Veki(@JP|;pLn?+tInZk8(MF4gy(pj~K~iES;G3cB$s@GuhO?Oo;|GEGxyKePv+T!H zoz7XCgX%g1yQy-Wi*T}ghkHHz;@^oOuz@19O+0F*HeR?cp$r1E`4|c!#nXRmlru3( z$h=69EN}6HjPQlkuHxb?qa5sjQ$mC;nbMIA9nL!2)gX$cAQu_r*9LkvN! zIE&H6VXYTaNSAb0DlrLLU*GYcRm2+u zckIXKCIw)cZETvoc#x8!^>xIgktniN56g}U@MfTjBk)DznZQRW!ieKbG6%|0-N+Li zq6bIMPG6sqBXMGmFOU*8m2K5JW#^(4&!B|bO|Wj7_zAnQWAuDc3pq=;D#MoLu2mpU zE}fxTp}ZmxF%`vkrepfJGq2`8;eGlyoPB81@k@6V-M!O^hy3<|{zrh2UUr|ho~U$J z&vO??q)^M_?nW>ET+-O&yoF1eBM&y-LZ!t#CH#<*e6i3Q5|>D;t3(Tu6giX+8H!>_Ftp7U(%x&YJoNO5`HTfqh{|(QE@mqf z;4)IZNyCOO1rw#wXKpY-)tQQKv$Sxhq8wfMv^lDE0(6tUVz{lc8_|7i87+TZ?5@dQ zpqc$f=DLxSGbZ4HoL==_ALLrt^eo?U^zg?^zxAM-qpX1D#B!U5yz`l{bn4#T<4fRH zq5E@Uv4n0D)(!uL|F+zu|GxLBQfFx0{Cp^O8}*1V`Ft?;3jsnwT_ejnb_ zZ+0J-@p@S&hl!gQL?2}k#m@H$KT2LKHBP1P%c$~JeWVn2-o9#hfkp;tT5p4ux!r=I>2E$9xVrD73q86;*M2bb zv5>ERy;~gj7~XK2>fgzV{on=HHDE!sb(k-jISeP>f8vv5$qU7$YwcBSRZT77(OB?i zyCpZBMPpQiund&aiWC&FR@k_R?Aec&t5s5=Kn}M@>LzIU<=nN?qgFf4@y)u-Wi#*v zF{Naz^~4xmO~D)m1*6CF3>eCT@|^e@zG7P3WtvSV!+1^U(dZlltoFy!r2#yu;#gZG zn-HD$(hE-nibjdH`IBlBp^m}dOS>r@SR6MdS0WrIpO?Gzu^n}~wV~XD z-^ikNRRHPnFlRJ9nzehI##x7`2yvxpAWCC<6SF6+N0m47w<$TK%z;7grwO2Y=^u2n3jyv8xzmS(jZ z9%oEJnqU}0d{W(Xq@iMwoLzLi*w=42_bhNfvcgJb)bF)1??Gi;F`o=?!7xqP@4Up# zK5h`e(#MLuQ2{x&FCovFw#*%+%kON8j9SU!UUoa{8jH4anvZAu?woEv^-W*6mq2}O zmhpdzTJRsk#XnG3x1YA_hFwhv>nh%3Ug?+p)Ag`Jp)FQLxCT-6H~QZoIr6 zZM0BquFh<`7;KWL_~^pJRBVCl1R}0sDzQ&3hEZaxQK5J5K#`KUL5IAW@~uBQP*5wx zm;FI4W@1s%?ECxG05elC`V}q$^W~6nBB$g>&8v*8n7;XwA`AMJ99A*iz-~g zh<5Bn$s~Nb>W*EvUXo}PXqf=c1QE?zpg>R=0;+jn?0T+EJmIO&CnK@^Lm>0x(MX^q zLyle5u3llg><*9DGQ3i}07~kk?)m1GqJ!0-#S2H7!hR2*=Qhr+CWDX`HcBUcF$&2J z1xY|>W4#f@L?hkI#X{v*&Rm@`=d?H*!)Wx$oKpLVGmeTDM^?$&sNgIs?MN9(zZ%CB zcWVrLO|?a}2yb4hi_9k_s&>~Gd($zCeeG~z?P(L6EYlsF=!%03{t+4ungL5~NtPY? zx_pyFH6;+BV}Jk}(@dc+jIudlq2N=94ZCl^aEibN88$0$0>M)vA((ClbhBa8AsP@* zQ$aN0^Q0h1l}jBViTZ?4M);j(l2i3Tem?$lBbq5r+?k_DDp81E%X@b#da#!nb1k19 zYq$O+T_nRH?9X!T5ILbW1M+~^bZ@gCbC%iC2svI`AZ%?E9jig*O+Gok1UUJDo=Qc7 zbGSOzx^&ZWs3&!(VyF}NFesQ-&q(rFz=eq4DrbF^SYKdunumbMB?*H}l)=>+tC28C zmuODNQr?AG{EcskXp4#KFV16K6hhV#rqW*)I`a^*b&eX~@Ov@T85dIJofIzLg)k~Z zo0V}0S;?f3{kp~X>074o?3=G)5O=U{ZG?n%YcF9bCo(H2-%*Lg*Hz?qBw`75qM}MD zhc`Y(ufy_MuFsSrrNi%(&gKySz!?PWhli%)fHKkTRrEo+T*6$WEC<*+nxT&`C@&m~ z#Hg{=mZ_!VXt_#ku^VDu8nssQAba<0-x$7ua2BUomT2{7jT`nmW|DpZ(B^p-rPfH` zWS8ZB?3pZ2xy`rupLy!|4-{0NOp*bxA4{{evrn4B)0x6kz&o-`K*nBwTLFNk;JNx^ z6If+4=LGSZjU(-vnu!C;&%({F8U_i}?6%03=Z&eX4|(lhpnW&L^xF%~A1^c4J?Mpw z6?_IoYtAlJN zg>b+Q;6ZT zww(iYl=y!-Ly#HSPFT8`y}JIDQQeu1>Uq_bPv zKNuWYmp^~A{aj*NgV(!4sG^$S1%>*QDR^phwy@qp<+nlvV`2T8cu4U^K|=wr1z8f)LQ zwgRuZnT#e^nXU*cQuS+LR`oaSi^-8GWEi-H3vF(nFMS7bL<3sPY_RJ!yGvIX^5msW z(<<`aDJ^hgn6-N6Mm4tdrN55nL<(CS*6LnfvtDRB2NhMmawVK2R>_Xv|snr z-ZTlavoG8ZQzu&)J31USROy&KFteW0Wj!et!6zFAz}MYHSluV0)6<`+O!!F@G~!)h`qlidVMDFLd&JrNqW0yCMS{1W%mL2`BmFy zbYI#L zf5v8Tyl6{#8(QQtVZ=LM326t$M;e=t8Par3`)l|3kcegHxKm-CJwf}iPx!9JG)I@B z=to->F;PUeK$SGNVN(FqhKs*Em!Cy6xb6(oE!I*QIU+k&%)7^sC7J&b(Pza(iW~pV zXta){o;xziUC`K2Uv0u|oDe)EZ7St-T{0&Cy>qnO^sH+$%iMsa(^qX-dX434_YzL6 zO=mIx5jAoBlO4216Ok#bZ!P6YW~lqzYON%?+UiT8r}aw|pt^ch@GmoZU#Rp%Qqe7> zsCY{jFAbAi1Xa1{d2=yv0VT9jmqsoYR$Tw8gb2}gviT~WRhD*Qg(`04rzoLp5{4_f zn_e3}>c|OYv(9PpG$1=VM#5W?nt~N}dp?)pqKHHNZkGisgQ~Dno}Xx>^>|s)%33-; z!r`d$Fi;9cJdfw>#ahFeUD)$c=lfcwg;@8%F*lFw(4%is3Cuu~`ge9q=a;R?$ye-K zpvPB7Y0pLd|74FRn6+Qsvs%X8-lRIS8En?--+F8nekzlDcVq+j$%i5nbHm$&@iPW) zmcPGIshk{c*Nm_Mgrk_!L8esDzyt%6gF@0WgFH$l)K7TR>ev?QZgOQ*&yt@gwrzc# zD+i2d$D%^0RNE*BqN7!NRT-M=BzfU;dUQ-3S7?-&F9<$MP^qg|-b ztQ9XT`17Ic^65$=`_8d-W-O3*jaYitpkqJ{R>8V|X`uzFZ?yyt5sEa0>BJQ4h`hx4 zNIT<$!xIRL=P57RMZm!lZbF!vG45eK&1yG8Qz(OVfaSVnuhjB3oO_j3YV=yJ=<;OW zaMFN`XDR!&$FBBeW+WR5*=izFRPDOqg90HVQftBxyu5rEd z)UxoA#8}1HEwMolujmK^PF)R-OQqiEQu`?+HV5guT*^1%GX<`>tlz)g{EVzmun^h< zcJPdI@q|Vew1)YHXQ+JIREmp@;;GGS|DSZ&_zx6(pZri@i63M2PeLQImgV;vJ5j&H zblSg!#+EV^3TM;Ew{2S7p!@;Q3<|mE-A6*KXmM4z8$yEyqU(&w%L0I$m53|7k^@j> zOyUCNKNy*C1mb53hH%z%=8dYUik~3932@;yhHB7L;!A&y{lrfhl1lkuCFLZU^ zdIheo@EOe#vn+Y^c`DY(`L^kyL!9qqZXP;bc#|H-F(~4_g;HvI_uz|lK#9#4_wF@6 zrCMR%6@`W>!s%f(S={F&-pmtB4-_Y-K%tZ#8pcGy-iV#e&uz`-4ZdFMQJLIMux>DvYz=Vf-lH5Jbkn>G8pKGptGYmB(8 z@8xBgUm1igB|t6O50iJ_l_&l=&oU*#cx{C>8av2DLXhk54qu1q7_XNHI(f_ZffoV$g#=G=rwD8I+@NGgW`hz=jaxhb0rbx9Js zS>zne40$cAWc9&a1{?Txrg=?t&XN^J0z*LgI%E=|ExPETA+@==%w6|>6iBRWVw?^$ z(wQkrlT8^K>ledh_OoJ95(<9PgM*fsVVnj1U_%XjO^Gri1N?(j{B5lBqv<@)B24N ztEPqa9*Eokxa(iYft2&ccA7*q0(~TJFv1YpWtm ze3h!IBK341zEw-sXpO_ZA2G%NiqA^YZ(zPAyS?{Xw63?|6I}GGoNzO)TikVyd3T~^ zDjkISm`rw*a@KEMefQU*va|8OID+XPC>Z?952by!@brA}IPGHcemZFEPcLJTwol*g z`-#HoXdWGZiL8tk&4W6GDRUg25)2!y zjyI)4$sMB|!*{s`I9J>!4}VAoyk^Fp@&*=*OR1{9lK!Ay>89oRrZwVzZwHI0C2vcB zgInbVrp7OaiyR<8gbDPf=&Cdq4+ps_+FWAP>oAc|no@0wB;`xUO`@$5+2S@XsK+Gg z$fNLybghx?28(b@cFDAr-d z*D@DwOkr@n>HsEzd_66g06eS&CTSZAO@@fb4~7AiU?_D52qE;YqUv)r#ScTL@v4qR zm|xLA6iQjb)F`I$1rw5~(We8Jtc6M1!)R&U@*5`)I^F%^&jFb)4LeI90s{TrzIDla zN8}Isx-CClNpGrqG2%u(LI(pCHp%U8Fmct18%j>|s>q)WMi!n1h)*pBva`7g?kcD&SA3&p7xSCbOs0+Sg8ZBtlsif{*)mIS{Oq^)@h+6X zczQ;Q3?IWUKdWgNh^SjqBM{e|N&+VXv$JqihqdD4D7xsB%S%`svCK>ct?Fdsix3_0 z18@|U-*5W##PAI`7b||$PtMU|+5oj-Q*s3RI=pgWpSmr{%iIk9%vspxo!ywbzaF$T ztOkp-?1PGDoU96rdDl(yTIpuaT~m~G3_R06iBAo!Hw>Xd4JfPcRaL7idS!@0s$!Sf z{UU?barGz?$z?f8kV^*$LdJ|45=$mZN^Bok@QNKK<%wgAkd^7r4C#*M<;x6`af!v5 zaabgSnSrq4v(z#d+|^XK`p#}9W?_H-#P%0GtTwBi5Y$jGR`T2mV;r$Kft36VEee4u ztMcyrNw9kiSC(ybKtyAP(Fi`u4R7sTf2Lc@u9%53X!&5?(BG=ln$Z_o>f>OHgqH0n z*k-ti)T=XEvG|u|QB;BU)Y`QsZpm7B2vxG?jW`X$&zw`2ulI1Npbyan zstnv2ARNTuFyKq6oJE}YbQR9f?=-w@P*F5r4%K>6eOrUpWW$RBugyzcs|9JNUghGj z<3zP@YwRK0+!rGQd+?-upKkH>eIas_csxXgpIcgB-imaD(vo=pQ{lSaA zS8cT?;17G7L5hj}O7CY}s(&+0VzCH_fN`_;8clw3|CMg}&wEw;bI^F{JhlJS4>cWk z_B1JUnY6kbJj5W%_xS$ZGYm>EEtYR^>X(ACImtJWJ zqM_2nD21BOFlcftx>a4Bw4J~uZ>uc-Knq4-04m8e4-ejr6Dc5lcG6Hdtsv{q{2g(U z*=o|zADB~`SWf2&x*L%omjnCFK_mV(W*Ra9e@1#$k}8>6B9oZ%N)ye$M&y7S`o!Xl zx8q$Qj9(h`+~a)}5C#5JxU)KIqXnDR9^q@uysE#c>SAVEEr(0t--PM~Rmj98s?+Lw zVoopT&U{;Gqp)p{OMY26-JHkx%HGMwY=QRsGy(*ofZ~=x z-bAt}075Ia%$9=-gkSt76u!MPk{!6h-$@s`Tiy}Q{jrt$4AoSMaKTqA>Y#;c7kyN) zt1h7j)ryeCOV@mJ@ui!lZV?p~Q(XwF0GY8r9I0I%&b#@FI2QSlWNmOb7dGJjdhXqu zJ*h1}cPAGk0f)VSg1uk1--UeoEA^<~D^$AFq}vIq4Dad%AKy1_e_yWPs#&Mbe^Ps+ zV$$_}n6GERzrYUFk5iH~?Z)6%&(cEC5h2c4Hzs!*%`aa`$s1Q?L`-?sy>`aTQ0(pS zq(3l-BEYyPVLIDd(ukO0*7YLU(3;VQj2FEY!B(5#YZQA35$BAfG#^ZT7;_Mtihsjm z8kwiVIcT-W)v zY3x`w8LcO0M$GG8-1Cg0Ch-iSyS?d8j50?z66MnQVDKORi|x~;iS4#VeY9Vjm|z}l z=T^Q7yy921-3nSp#1(bKa)eZ)7EWRx^<@9^e#QT>rNV#oTmK9SBF+oH1SBWMpQ4-{ zkfXErU<5Q) zh(Tqqrs*b33JaEcN~aHf6h8hlJxbVdcO~1Hv=YcRPslNvZ6Hz+-e}RRMBWXG%A?Of zt$GAYg-etu{(Lxlh_dY#nue^y+yK&70bJz9@50D_ESKK_6B{T3jfIjv1AK$r&L`rHzL)2L7|1- zd1?LBW>1c$o*7uv|EIotAy0dsgPgzQ2JN{7DQhUX48*<~Q^bfP@JL6)F+@#8LL6sy_9u}rwxzg#d));;??KLccs9`O#SIrtQikXW3V!y_^<%U#m1o;~cS zPkhmFM(Xv2R#1TzrA$33D}1|bsVvjIsH2#%Wu_+To=3EVR7~r3DwevdRdhxxohsQD zYXeHRA(!RRn+x!%NHdZ6J1I^Et>B}G0B}11zFBnE*cEed>Y(l#lZk%i&hW8PH83R2 zVRI~y`mQaEf$}EJ?3Q2OWMBiMM?5fV$0~!yRnhwTOf?csMj(c%FdBfVN5%B zN)2zmh2~Y*8fHoyDwb9!DywdS(pp%x5=N^Sp-|O;J~8{dN-rQc$&L^MyQOK-fghR^ zHszSxhEM^qE>*}>GwC$TE~9I-mJW|GLen?~Ij*MRQ3mRMvoO4B6Ui|+X#z_jb5+z{ zin0k@^QUVP87ph|?E}nj@;b79Wa^K|zD@0bi-yR?k9`;JC;9Lmg;7vW4b3&0Si6#-_ry7?#}Ow7s<)vIZpq;$_dCjzf8IKo z!rFN6U{s6CwW2Il?H5qCQXj>1d{1{=JzeYKWb z=RR}cCq@QxNai`?oHLwMpk~L*$Wsm|Dq}882Bla(^QEUC{>;gQ%f)@imPRW~wd0*8 zZS)TOtd>es#tMYnwr~Q?|I$E~*zG#HEGMEvOt)B6_ znu6^0yT?ZIa09hZ=GFn<4xEaO9FspPeq8H*=ma?i-5zK5jA##FY|`$o{-xJiz{7q} za#ks%_kt@8sJbS5K9Z%lM-7L4cs3C*OSXT-6&ZXX73pUzhZE(vnuYH%JKeJKb1{I5 z;+M;y%yONuKuks_#xJP%C{K({|~o3e@XRJT{zC@1vL1I^u@E(ym?9^bH{Ge`e>xMMSmyvrKzdbGs&t6)Oo^ZY{I+Bh`}^ z#{#`rz2iji23R>**s!Q-&hJEW-V4j7^V(Xx7ao>2LfIEkG~)3DZ@F_HSOfy7hBf0F z=(e;U9FXSu(hMJbh0rbwhCjaWPCII~?N7#;KRG>>HX&ogE?_Y8U>7!L%Z>?VF6hJR zxV~)ZON~`aP19i|!)p(x{P269lu~%rh)=hl_qKd=nyMo-IAs;P1pzkPCA_|RD=*2_ zW>qYb1bx;LWaOZYtBY4Y3hjjG#=0Ffb$006b)-wTnpJMXJW6K{8?I2=a;2&rXC(?0 z*Dpo}TOB^lCeZ^<1~k=S!>Cc<+KEku6BfULA0z5ltKR`DhrTx#d z?S$mX+oBt_W?@n8*nP84kqTt?H>?9)tawKq;#@VX@FJ&|YGt!%50<**s8RU(e{qKZ zUC|7>9&>mJr0EC-g45I(X6I8{mFAkbYM4N zf6cnNZc^i#?)1i^du|r9{rty5u2U;J7i{EOGPw_%KpPAFHyj_4Bz`SQ&CF4+N|KZI zU+shju~I7B0E>;#6FdI*>p|Qv3!W_z-y7P6n~sNyCLnf> zcKp<*ZbBDDz_d=FNs1!|R**@(=&@6xMF-e`J3ctzD{=3|5PVaKTX28d+NdgRq9uj% z%Mif1TN#hO@#CwJ;?nRnXRzc@+%B#8D`o;3PZNNm!!v>m*E}&D?)HG}B|;aefS;0C_z?=qj!`auMlK(FW`q8ue( z8Z(Zk*!W&P3{pcsbxLp9?bTuxvfnew%@5%33JNh4OZrGu{MgYPK@LliZIngFVMfY0 z&kqDFG&o#(sQM9TKvx!5f*Vy=&YZIxeJ@eWreIiQhrSj8H(T^5L&ZX$;nvp@CMwD~ zyyM0eh-h^-oWCpDKQ%4(Q1wfPnTkj1(x5{0kHbJdOft|jth)4tv%|x|Lq{T{-E>wq zW23xg*VK;bbr2uap`#~}buc!LA(N=kZ)4QGE2@z_=GyA;C)L0!gT%Up_me^!je<|% zUsldNz2BsvH4oemXXf=MTNU6@L+;(#hE{Y86fREl`nDJ!nivjGui`j(kw$VN+zu#) zhaRUW1CZW^i*zWVVH<9aWq=o;REKo*B?CjJxdLbz5l6;H)>m^QmS)GJ)nm5!pK_RA zFl%`9kVK-{9NJC|4p@uNs2)1_=qm+tkCbCY^q?-bBR)V2W7xZyM7WHy{??tg@*m}hyKR<)zFE(3t*~;y9^`xk; z+Xe@S4-@8_>%lFN(vN5YVZPwJv=4? zHxhydrGXHL%(1&66Eq<$_#lQCCTB5X(W~54;piQ8y2N1WO8p1BDn0!J&wd{TE7rzs zd&iJhn3m2{D}WNe;@FDPL1L3m{$d_j->bE(kFWcz?cP=ifj~k!DjSSg;AbXXE2kpU zVwH_{gI`Epx|>FkpEX2&#l%drTrj6~$ya!Cjo2AZXEHK9!)3T0seH-bVCtJvRN&c; z+f@kjp=2+)r+CekY0^@=^*L%ehOYR~u0m!laKa~f9t8?2)!{oLI-;AYf>EI0B6Nm0 zSrEhO94LsPF;pyclzlXPnlLfek|y!HTXZV|fGgFqnGdyce>xG=S3)@>JXy84l%)4C zUvwr)!4$#-+LS2YNS|8cuUR3XR=L+brX4jcHL0C@*?;>@y`nPy)m#4)@E2@6vOa6P zKxQeO7{q)T6SBEl=m4YX?bWc5igu~GJ0c)VAJ4d`Mne@(Pk&|R{V@YDg(cTake`ff zO6Tdyv)$7-#z9LN5Pa()evti;x*;4xU$dPf(5+%}IQTu0VDJ6qLnvty35p$o96Dff z5#?YNf?@ts1cOcFMtW3^8Knb<;-}`Uvrr7<_7Mlofubs%Q(GWDH_Uw|z=gxOfHCdN zQTRG<42KZEUrumJ)$FY>uh?UHzgqEh`AGxrakR@sM}ERoBx6M~R)phs@lB>ifhqA} zSD1(e{&gRiywYvI$tktEYAm>|t2eGYKddh~g{H%>wnQOeyVOx9drPIRT*Z`XW2+bXs^1Ua}cw`MyB?MMi(2T8{krHOrFsV$iUdyn+lrO!V?GzzuMX z01FFeNvHf+PP3_FT=M^mOcnf6GK57gX7`P&NOc#p0t4yLGOw_amkRHey_UG8!! zSFgUn7dWt9rMaP)I;b%O`jEzyOph#cAytbvdj(z(dQNp)4m zArW_QQJkFq(qS~4D8ct5q>aBrvngGxCbn)Wo0p<}>A!DB`41F?{Gz2kAM7q^7Nz+zA7FLKyuJgziI>i<8G`bkB<-c6D$@Q~ySbDfL zIB(o!k-^jjuRKc)8T?=&j%0_hrjeMJsp=zkqHe#O^%{96+a;XnH`r8a#J64Gal`Tn z9jYkFtGu7&7bTDQ&OFOF2MMWJrr2yyst+;2z#~t{sM172Y0*R!aC&Jh!}=boSeqls z9e!#+iL#sAWzLq~^p;!ZC0sf>Jd}?jUtEEvrq!|;HtpVHZH3`7e8|yS`pCs)#*blp zfd!$)H}yI7GT&dkw%+j5>1ea`>HaRW+CkrKQmXo}3$luwq;9a9t*%zovC_htP@EY{ zq)tkjR`FxTVLsQ&9c~+K=MQWlKUlA&C0^%h%V7!r@Y*b0jF)K%$j+28X23yBpmB9g zG2_iM)C~r!4#Z3*&)^hIPGFEE` zyOytJRL7*^-X%5{VRA34s#;H@miV%Z^$z`JGRrWqc}wi$V97q zA#n`Cb9f-OFO4zz;Xv}y0}#BQK%l558Od?hCN?4Skr8X{6I;+w6jrsp31pxOt-3=| z>w%M)%Nx?lns4rj4(q3Lii1VHti*fClU0$TIjjZ+%!&Rm66T$DE7bvo)Fkb>JEx)z zv0#vz7ua*pf5hk6*Ucdz8T2sHV2E)^$SS{2%6q4%Taqpj{_U8et!L=%`)681)igGl zRQ=U2F=LF=9vJC(?Od3TbIEf>e)5h^R-eb>QM{;(Kg@FaH4=!4&58)3J&hmW%_ICAJ++#}L%gj&s(#c#25UAlYyu!jd$1pmAJ;7Xb{J8n?IK zcAoMd7?~$(z@vv^x8<8iUelI2hIc^z9QvevnPF0%erWFe`B`RWorz`;XPtW0_j>Tx z$PiP;;gS4~$I?5RMF46FB??1u7y`0%B2Wheo6gfz zVSuoxvY{*`{N3Iw$`m!6D)1LVIm{Iwh#;Any12^z7CB^>uE_tN1YAv4qlW7IrVqY~}g1 z(Kx;hifs0NxhWPS-w#PK^tJ$fQj%6l&HVaQElFL0I-|0BjCV=(DS1)3W_=4{{7Y!r zGuQEXw04zE@~QjcL`5i)#(t&`;xUF3T0}ctWU7v3u=&sdbZR_4oUFmH1WE}noUBT1 zbNLdNHcE--2o27+w#k~j5ehDbCG#Bh%3su0H)z(~QFX}84BO&uP1B)>AiNN-3u{+v zMAay`DsEl=I!Ba1J}J`69;7U3A5S95r8=}{M?orUCh~43@`{Bcyq-^z|DZg|#ub~Q zz?`dUlI};aavXg+2@iM!CwoF@_UG2J>kv5C^Khu_AxE-5PM`Ig&9w@apl^N2G-MdB zD5Y%^i%{1G>as%Sz8~HEzsv0K|AxmuP~dm|*Fj^z$`cga1fDTBFE9yv>}zw2J1f+Q z^pS8#I7HQ#dCSb~?*{Rkj!DbGR<(Ap*%-|ev=(2AREJR*q&p{zQM@!G9L#$jzaYRa zob5KN^jj`CMW%|MsfJ;NTw_%22Pug`nYX-&S(AJ@Y>$rYW9s5`?S}2iQ{fDSV1X`a&s+#Nf zKA@>7^ynnq!<*d`n`IZw^7(69Qu!Q$ z14$^SsWdu*<7Ke2YV#?th9mUdu7Y{{mu5=x7rjkm2MlgfDLKw8KGTIl+Eqr@kHW*s zMtqIqb_P;B{=sb9LlevO7CAmC;toExzg_riv&JsI={hnF)pl+keF}?W4C%CUdO#ty zlaml9w<)rt$)hUX8>Cg?ZLSX0i3c_Ti3AF)P`m=+1WyIw5!tV~q{7#5bCf@YvTJqR z@wyBh8&Xs5uV`TW5p{AjUvRDuLduwe5xUN4cg|mpI3GV#VT7{+qZ#aeM&iAAsmTDL z!cAKQupV8%F-lF>#INxSlniausH8XIeJY{24ea|Xwc@;X0^hrhq?}L@VWvz;&Y7*9b6`7-rK00>VwK*zqM-em~#+;&i0&%kzK$&7={q&}L zoSP2ppNf|zIz8H&VTnSrz>uNT2E%UGSfa?8#Q9c)3nrOcm7vcHqA|Fk?gY_Psw*J$F5tI;{mEM?5%lih)Vd z??721KOGrMchY_=;3WyR*IE?3+mFJFA?fk&cicXi`HKIkU*%1}!=^7m`igS#JZp*hMsM5qJpJ#iFmOxCgjX}}IP`y5HOxOy5OtdS1=j6Z zxcC|WlE9krzWhmOJhglK?~Ii`6fqNr%(os|)nGM)d3!o%sL1@na1_gY7;drrAhuE# zIg5UoigM9n_IL>-4enWOJYqf)7RH^{{wGywxh?`zr0Q;>S2(KV-laUDlZ}c&R+3tc z_=AZab}_3=l1;EgKCSRGWM6y`fv#NSiErJ;Qmy9nS#e0nfxJH@ryTVquZ>*U!eo8z~Ah)>S;<;7&qN4+D5 z_PVKXfrX(bXl*1M=@7w!L+g@_W+hL z8X|B;wGcygoeY4_R;p*jMV^y5YTTVEf%C1#nA@&)1!vZ9%b=M={Fd&io^A?ct2sZl z;!Qv9jIZtrk@>0V*_UX_e0v?kF9%b{Ky&HzB_bu`4(#nO4ffWroOtH!>W8=AH?-Qi zu9Z$%_tq9*zPCB@4QJJLDbq}{5~bVT1BH6i3^)yIp%V}hi43?G18s_>t59m6I<3Vp zLWk^F=4(`MND}A+*&2r3Ee9KcfQ;V@vAiWj7=b=4<6)oRdGKB9oEIv#LPTS?9iT6? zH$j{lgiqd3jWk>rL;Z%dku;(7`GN)vXA zTx#d42rDL4MC~Ipa#G5T5PVul zYy_=ZhHbctQ4NGuod27@9a!pmdvcf2zu@tq_X_Cc~qq*V$fP_6ZnTXS)UYEP?PSooq#>Hin6rrpaMJB z=FDkJEMB~kTd|T&~lKBrPusu4bwM0*6 zwKo4oo+X$~l}cXia~-m@SN~OAB}*Xj{pW=na+Y!}BqN+P7q_IAm7>xhj66oM-1BP~ zDv2m~Pz8=Ba!+89Z6peI(RtJISJ#rc(O<;U+L-O*@|p}n$)vF_B)R)>RQI>Qq6D|1 zcqiao|F5Z_ksrhht2UwwDy?1AV%HB}&)IqJ>*TM`W;#uzzjr8H6bR>qwG6$6Z|d$> z@d`!AIoCgx=9pK0#ApVM*f@@{)*pz(RSJ$4y-tI$T%koa7=j>Irh#HuNJ?w8`L9;h zlnB}xz>vA?IO`rZI+gVLZnay`Am`&U;D`c$7?YP*a38&og-Ai3`$tD*?K0rRQ<6Wc zU7ATzRyayXhY6vdm7dnIx=1do1(A4lC|jaqe@gcM(5Ny}Ra!~PaKGe&1!wqeG@xos zh8;xWG0HL1B0Y(q%tVBzc&ST9Ae0qqDxaUyJ_#0=QZp?AbyQ$;_9(Xp*6tqEo+=+<2!!Qd*in@7vY7QMCMai{1fHh|-F=7qDl;FTYap>gUu+OLm zI*yE~%|opozM7#6voH+o;|lx>{pV_W=_4y?jLWCe7CV%KCrgS-6jZKw*nG8Lcuy50 zCQ@Ar1l&@dA~r!B)@e^FO@u|n%4ygQrqkYtv-6(@mm?jt?k$ z`y%C44SoKYM!qvFRoVEv@!hEqBOf$}zd<+V0?UwfwPZrO^L?++)_jw(3Tn98cC*wW zji{W2w%BZI-2mKIc&l(7zVK=tegQU^zN@Mhrc0zSQlkrSV@0e?jlpw9@l8e#qLH)b zd8L>KllnGQN7vH@a3(WN=v9#uUMCwJeY&913xi$fvgh_qtp8>S@_%Id|0P%d2pWl9 z=R*QD0w?F_zIdFyWF@&`njc7=k$Gea|LUO^b_{TivsCBO;&j|a&6-DzY-%IShRM(! zX(A3o!$LJF%#n-06u@Aw@wTDobZ>?#%adn6vDCXWw*xpX4d+J9`^mX&o3VG8e};|I zAfgI|KXKHhaVxSKjGUi4)f}1zhU)b$iK&s~bINk?;DtM(*&Yv^F_zj<5hIjsF_)tvMLfH)A4&iNPp{l-9yVR{G;(-?AxPX zhGadms=hyENL&BN0&oqgcK)!I7f1wuHlo5p=~CyYT2bySMsIIl1~4R{6bK}U!X(v` zBILy*5*-Y)zXimjG`JqV`_s=gx!c4c+=X4g+Y8PUb=i;J&S$2=KTGaxTwRPT$`}Zb zwGq|@Uid%|!==}Pv1!*v;bFKw4bU}fHK=1amY&1L?}@WJ2JW@wxu~Ob{)Nwmx@T9>YB39 zeF&5bs|h2@Bfl#sBg|!?e3JKg-tgy)%h0JY26v*!P4S6{#>H_EH5kFfcL) ze5t}56uAF3KJzj0r2g9G$glFm{AXZ&?4)`92kyBekkz74p-yU`*V~q3t1ND)Uxg0W z)c3d!EU=tUt+uFz<2%+&qzEQc?y?k9u0gV4?ou5o$R-rzdP!L2YzUrGTjCVEx$g06 zDPUrT1WmF96atDO>DN*;*8NDxS)`7S%P6Xj@9I-2v`nQ2j;D6j42+s&klCMy$~d0L zSPk4P?H`Bm_jy@!%Nln`slBD(NXp8hY>?9D(peYBxUSucare&-U`Y5FB;vVBstX<6 zddJ-9cJk+={2B4O9K&+I8AgNfjPPp*PaS*dJQ`;ZdH!2R{hXnalmteM55m@306GUq z5@oBVmlfz#dMK>Tr+SFtD~?_>%%n2Gb6Q3!s)x|gx3ZY5L4N(5J&yP1DsTB& zsAPXV`Hk=Ih%TxZpUWs{T)fQcN7gJ5Cx5Y*`c&uC$t|UR?c3su&;vo``2gEI-GhZ zs$?(_s;KP5t~BjgxrG>9=wde7RtI2_>*Gvprk7V?ssaXep`Qe9n{f#kvmPqZqNQyx zUg_Zp42K{!#Bj0Lj4*}x+TqGL(On5H>@^zGtK~t@#?oBff)5@%H0V0tR!?XyGczDK znTIu~h65M5%pcnQtm3ci4=^Ih3cPIMq)e#f#a?nxnir(WFI0qgTIP{@uv4gG&e0Sn zW2eNVDF3G_S4Q`aqValmafd7&lb95S|eceHp z3kI=mK#XLfgS%;r-^=7f%oN#GDk=Rx-lSP?q--w~n<>!CyVX6+VX|&~8gOfq?%Ayf zt|MmCG|*1iOjo9lBWK+XAlyvo7W=JJodgcn8FLhD+subp$eS!H2QiMHS+!I z@OOy?z{;qt*7zR72*zViv?3U2G^og6OCl(Ni5sDF55ZOI_^6|zOm6$tKTqG5M8O4? z|8RQIE^^932mJ92GN+d$2?l@3*Nn)~OAq+;WjzlVsnGK_zN@7n*tSroAeZL(RyOp6 zgOZ(u6S7YR&s&Oq;Ft|+TGyIhrQn}eRuL&W60+$iCyhMC=(V~(g zpzWN(!63sMX{3gIau8?*wLR0Wl$@PJKxpO2?G~G!{xSn#k`Iq*oC>p1i}hI`L@sG7(OYetR_GWPV|ImhgIy~)_M9(yfxzbd`e zrpW#*BjRUjB(M`SsYFt-@RgY831vJn_vWrAX-#g_*qzuUyj(+(d@3KDHaR0v?&!XC zbR82XYyQ(J`okoQ?m z;>TZx|E^KP{|p!Z0~GM_*nFon(PH-N|C&f%zGNOcV`>@@o+0~}M=~!IfLW-3iOye? z%m<8pcHkkJ*HROtSDUf@Mo*4@MZzC!N_#6)z6VqSYs13~$1~No>0eql$b#IFCoM^^ z51niQ?Cwd5WP`j}`UKfiSEIYk6A37kU1L&KO^s`Elv^HEj*VQhq!4)20yj1`M$WH` z9GGG4czR#(lo7?5%4ajssVp%|t?-J>ZEWI;qS_)~+il&)nL|Rl^6m*6H@y9zkZ#An zGnhnv;dFEgmAfyl>WUKUK6ki+D2-cu>~QIq5RvTFd1-W>yzf+^BV*YwGXFy9WLD8y z;IylDmwLYA@0V#$OYmF1BvbuaG7mI1|456$>O@a#fSEjMKc}x);mms$s!$DTFbCP? z0+oL%5YUpy6qf@ADxy0)>R2czW40Eq}SdW`?oP;gTC zTyr44CDUj6pg6$dZN7>$dvXDd`Z>$hyLf?jLM8GkD)LjWFO{!O9H%B2`7-&y+gr%- z*=E(!M9TzbKqJM)w)efRd~ej(1~p8UKkq4$XP*-j!_l)1oU`U+v*R3S5{y|N;Aj-^ zF{_e=ngNi8RmVb#VZ2o@mh_Drnbcr6=T8!FE7Qv0@pXlLG_Ull=985Cw~F0ko?WCM zw|?D~$>>jYMqkIxp=wqB!Bf8jujVT8hdlad$P-83b!N1YvEc-1AjvrivizGe`0x%2 ztwsQ4}}b8P9bqGqiQX+!J3~igw0Sr1;%y}F!1-O$3lq?Ad`n|1i1lfu^Kag zRtfigOXU4XYOT+gdYrwsRK3v(SX@+=O{O}9+V)mtx%jug%->EeFn8ThpY~A>98tdP zDPB68Klt1H_4x(^$?Ml{0A=T(oWwg1&N!bGI&MkAJdPgw1iFB+JP|n2&rD1#ur0RQ z%o0OuGT0ys14GlO6(v2dwc*62Q+8WC(*sS*^fBki{7!e5K--2yM4E`K=qfoyMETf3z4nPJ&u76 z$ib9+MFC@!5heFp{@XN0B1{w1Hc5=SYPyCsQMWeRf>W_3fjqE5dm>F{pObd&hv737 z*Zl*&{|i%$f0#m|{ana%t^0TXDt$PMqbK-R6HHwBmWcB}b=z+MD}|X~;1;5qIEeRN zJFM!2@+5gL(vX~r96uaE=k1Ah#5NL25HBA*!Nf9C0Cnx+e7;pk{>FxLJw9w^%_F|slo?YLDKINc7-VO@^r7~p*oJmG3GV5b;`_ZHOkM;MKsB| zIJx9WoBTCJu`BKJCL}+i=8uEZN}zFqj0cTYR4&DI94RMs78Y7cE<}Ab%$M!@ur@p> z=|f#2Hw82Nu9m2BG-@D3$uA%Q5i5sXh-@*QTeEfY>SN8}N6GIhkVB+b`d?qB?hrE( z%|mw2)2Rs) zp;7gjQd=5H%d^!ZRx_Fgi|`6F<5nRfIKKz{ydlv?U&(8o+cp_Apf?%edX{K(j|=l0B(#(SJkT)5|L!-J?m;AYN9LB!;yv(~H6mtAyyM zj0Wo8 zb7E#1J>Cq4k=ID-bcX^n(ZYy@eiD6Q*kTnM6Y;4DDIm;y+MXZZ7*hVuYZl8zt^ zA`vQ70hH9C9BV}>&JLi-H2OsdL?)1Nl7 zA=7R7m>rPioZhJXXxM-t@oJ~=h$}Of@=QIG{qxa^d8=9IYms);4tD&_HHG|NPQF+G z#-%D!Z)iIyVu+E5j66lv0m=&}Ml?i4^2ZPjrXk>K_Q7N3zG~rn>%3VJo*F~92k0!| zAx$}?+{6UtcYk#1qt<|`O9JN-(YrxEdLIPa4bUM?c0O`)TL}Qw6*0amjw&m5U@}X~ zt1L9AY?3?Aeo=39_*_p-T4*l}wpo`tR8pzZxbucYFlOXzGA*v)RZNS$ zPWte@m4IJx0#rArRQfYKjuXqf=6P=kSGR}%0j37}>y_oRC%)9ga+3^tGhaUnawD7e zvn9IEq6l~|2#J8K)>#s~g_Bff*}}Xj${!rFae$3yb;+%pIW)DER7rLCQIWQZzSV4- z8!M(1xHo=|adv|@Q`U4Mufj8=#n?-4UED>cJ4r$5!8fYZj@L)$q!}z5^DVndpK9C~ zxpsdXD3#5m@i@9vYZFA^rxLQJA}6EbioRG=QLZ4s2(wx2Chy(Koa8Q_S8894G zQX`R92EfiChFd!Nq)Ns@qF5pIQ7lje46U}sJBLB91SJ-%Z`j%X1~5a5IsA~+q|s!U zf&M|aA_^^r4abWbDrAF1!4vl)FYb8rd)YIEkw=Ew*Qjj0^fhu{B%FXfeq|2Nc3A$OqUqfr;nt?~m z3`@}!GQ52ble!MO#k+=Y9jv~5N4B(PSp4^sJ^up=EdNqDYX&Y}5hQxY9ndwF%3cXc zl*_h%df6}Z65G)~{;>%rab^&NWt=lQ&e^&pWeZ9ca>144CNS)8C@E2BwP#hp8z~^; z=s6Q7np@;Op{+5|Dwf$Yr-5HK$?4vSoOSkGx<(U5hs(LG0t=ouT-8zx4d}gH7~S}= zv!y1naE@{vj?}c|Fij|o2dY&s;nfH_bqjvp1g|c0ZxkoSX7^|(=q6` z>o)DxCG1bZRr;m+ahW)gEbU~`VdJB@0E}5rItW%G$S_b%FalDZS**ApvzHL z&s>Mh5o3Byr&mKh>~-jQw7eV4DUZoF_GbyKD_cP0xbrqi6q`l;M;=P4k((*woy%tj z+Ly*pCP-a3qtG#_{8EsN6#}AF+TCqPyvsV{H$7y9Fg(h|-AV9*dssxG0Y8>j@d?vWO7D4BLz6%6SI?rG`v|5L!yg;C zDo6_8uT4weoLrRwMZt8nlwD$NEN9md6j7e7z()F4+e#B0b_^>V9K+FVjcoGOS}nZ5D9P|zyd5NP--~Ia0+&j&X?{MMW5I-5(mDn71 z9a9?zeeSBvi7qNGLIk#sk&AgV4`+$%x1}5(J#88Ay{EN&u`V)02QAeNU4u^l_uJ_I zD@O3YyY~+$xITul>1zI*Po&#LUM4bM&4Kv`#5H$BDqAPoLUEKtQQgTMiPGq-?wR=-W1a;~qgCL$L+g9zW z=V#jZ?6n$E{)JM@3@IZOa{rE0!=z7n?ntO@Igx4iCFBS9>TO*pzr_^Gehk6+QCQYW zCyZVs==i3!^|yS}j8V}^)n?cI?pVG5_^w<>$V|xs09gZ|eg8UVZKY-$YjoWA_Y7E2 zkQ?TgfR8`R3nT(SQTXh{OL`^7eAnSDP%q*S{M}q;Ys)Rg0!lz)jHjyQ^zl0vgBrFb zxI<9Q!vcvpefE?)wbN-^rOY~yV}pdKPmHwwjGRQFmsnq^rk&R^WEm;nGR`7bE05YY z3v=4CX(J8-^W!K|@lDZ~xfb4Zyl#~mc_tjxW2-bPotfXFe7zNP*@0D#t>oN?r|Ju+ zEmwW8PNjwr`O?WwdLk2BX8lQ-2bk%VmSJQ38#UZ)Hf6oJq=lmP>90b0Rt`Wn4z%@vVf!+{{LCx*h zU^-Jeh9XWp2~A0D5@2sHa8R#-P!KydI>Pm6XpIFzUp1>7;6xt{uJUDDOJJjuTgww0 z@2E3H9pG)#j-ZYOTC%neC+k(GM^lYdbT7M#;wh9f3B?O!J$0TIa3Cj35s+zh%_(>N z!txef=6X8)%hQov^q#qhD4l}ws9WDs9yYtw67WF^G4!hzugwz6ziu@1-OO@k4pn~Q zUJ&uDw(aGpo@fHnDQrc}?w(0T-X=<$y^)cG=_W*HBH9&H7Z){e@VS>*)-eG7(cqAA zt7RCn>}P<|vCCNbFLq7-0}3eDxo7TTuH#pa&gr;hI-z{|tK;Ykc>BrSY|BfcoUZj= zI{X^PB^8MP$JweX6Q@rnMs5tjc9G*2wBN-A@nJ5BIDl|Oj9y#=EIRmub%tPP&sx6f zPgAF(a8|>w6wmp>OJkkPq519ey>QIa8Xb}~ZnLNOI73nnQivBm@luFDmB?AACeGR{5C!oJkkq8sUslr ziI9xyFKeIpk(_4}ca_C!28K2j61N-QKs;3-N`18H$b+zB8BYHUm(dx0<>J%N0Of2{ zR-t>FePlC3)Ql@FizukrT9{#9S&u#%X9iJSX)mT;`xa|IQgs+SC9`1b z_sT{Z;anjzkXf!`-;$4 z>Xh-6s<^NS=rBtTd{WJfGYeu~MtcTiVIM~{DCyv#HY=zs0)SOdB6ODruiD$m3s>A3 z#jfmqIP@vpNADDB-$;Kz!%%tq?VB_@P#r>n(pg1RZiekz2VqPz@LJw&JDUoE6&Zzb zqQc}nbna<8j*mSZIw@#mdxKC&;1&rs?(*YFYp;U*6muQW8zJM;{|F%-yRll@<2}|9-`K7WW2KAZ28GaIsB|h{yV5re~Wn0IFOh<4WMr?(r%m zaOYI1Th)fuZ%HWyjT?@h{@LNn+v&J~dz(5<7!FYFih6XLS_(L1h;!e6ztCCYX(?|@s2$U@&~OT z#-@(wTn(BlGDf5nsFN7&+UcT=wZtfv)giIOcspTLq6M#NS0Y2S?O>d=#>A28W7NKG4uI=2mjj+8Snu&mmf z+~FBN=H6^ZVmR&J@38@m!W55$nGpc<&tO?9_>mR|b#b8p#d<-OVZWE()PrnC zLPwVi4Wrwp#%3xhC?DTTC zY_&9uwc%P=pu0_6kb~_ffI!t7;1LUuf`e%1wEOsm+@l~R)O9AYOmC^okCF4+wr1B{ zQKPN5W~EG6VqsDUb!b(##f<t8zGG(vV& zCeNIx{h*w?Rf}ULz0kTc% zbFCr%I?=sn!lB90gck17xyCp9- z4S4pown7+$yh@z~HcTY5|0>i7v{HQ|j4cA#$H#f;jp14}9r)Fx3 zn(cLP4QH%PBy%WAwmZjOv3Ji?iw_uICjM2dPtPu()yh9Voo2LpS+~w*GZq`=^N=-t zH2>S0P-84^`ONh*A>Nrq6OCWs@MwdBkDKo{W>#v=e=#}u4_^}hfI{(OX`HUs{TvD1 z-%fE83{(HAf)PDD>|kf#>2JX@M8?-AH)qYv5=3Uuf(G%?3w5{{LJ;P!Q&37s0kQ;D zlX7G0`icbbs|sdW=|^mSO$)}?A98v|*e|qWKt!nAA)0F7ob##N?nA0-Co8M$b6cgf zR6A~mj^bKjbUz~=Yb6oiq`i0Rxp!Q%>C*o1pcKBZ6f~&unv_^1S?J*CeD(5^jLQjW zw!d*MF!!aou6QCHGUy!b9W!I9c3Ys@)K+qQbq|`ET&)FTPOy@?HV&%zxPv&*CY=Rg z*|!L|@td=p*(C8_Z}cZ`&n}l!ma72n?PPq+8e6(_FBmiNJpdiL`3v!5H-u5XjbS zBTkB(JJ*tke?i+;?zT+0OpTd#Rq4@|?l;CDoj5|1Z+~)ksz=`9qt zBc#U1t}S&c*UxCTOu~}t3BNt7D@w6~8#O3drB8UT#Bv%Vj!BdjYVaK5IK*|O2cYjA zpgnxzN;0WL+{?0Yn8@CG8h0JSBPUZnp{l^i7*MtZ8I5`&ryBktSK~(D z7FJEj*P1(>Sh3pon~QbEW=DwjdbEg7M1XQPj)ehM+#E0GI4oE0gaBS!#c_C93bbG& zlrT;7n;PR5G}4Q6GO-?w7hRT!(@c43lv0iefVR1puW-S%-Vg$eE+fjFA!M=OC(ii5 zDuW1ICAl?@|gMAhHk#th~nO?WcT$9zW8rA`RT zT5M%M=Qubs_@xEM-&tm?il-+L>j*LmHV<$Am=2((?rrkuZZ`IG8+leQKEbsPTq?8th) zI7XG@iDjqB(s+?yNX~hJ%*lJpxK(-2X_J$K568z#jrLuHQvO-pdFGjM>=rmbd!GkHOg0j%y>R? z8u}e>{6!z%=X45|R82WWl36%z_F!v|F}TN|;5dnmEm+`apusJ8N6vvAJ~B2NKefQh zM*?RKN_oRwAcrHOLtU9i&u+{tq_4zfxLO9oxQWIn^Vd{rE1-81vG(9%MptX^IH~hZ zIorL|HiT++z%(j+c?*eLAIW&xSfxaZwn=tWWow9KoY;)fpdL9no0jkeZ;~etQz$Se z*I5BP0s1=w;p)sTh)>M)0=k8L3kv26ugmBE>8+IUb*7|)VZyq({fAeXL`LkwWZUMD zo@^~DP`+3=+EA%wucGtX2c>PA9C?%QB^j{$=-Qrf%xdV8${xinAevJ4t(v%{$R>`m z>=+@kwqNw5qnp!OB=cf=CK_bdNpE#Ca?h;hE2N*!PUIeQgSUP({<$eMtD)k|!;d`+ z#8O~LUERLG_ww0?u|C=d&rXts(zq_k-yS5j8&&YoD>hI!;FS1vDJZ(!Mf8}57@L!L^~063GPYKbn!BvNi^SkV_N$;Z^1vX6hKBy ze$fWT419U1uXINXOrMsi!b(hRSj-okfGRWCpx6>U7E`r%TM#7PWb>J1U_rdvBp~T) zQtW$S6L)@qK|{gtENS*u%}bwkBtlq3k|B;+b@uSCp84AZhqL`Z_2M6*p#SKR z6mW2zx#B8B#=W5<$(OwnTyFsPRS4|}^vhPTX$?Fj|fFO)0zUoQ1dr`{1Rc<=rA!~^1)084qe^Rji_u~?Yp zAM>O%RUFeLqOFxgioB6Vp6(Lr zyzNSSqF{>_W?$>?<5Z^6d5L7TuekVV!n(ySLUGo^8Y}U-hJ3e$=wyad(_aoo=07pp;sdo{f@Jr zc1Ufy5!PB54A5v7!}YV$?vlL!(q$OF9N^cb;bk&KH7qT%34PsiH;Hua?SfSB=QOK= zPP(*)#8e*>Er|5u5HvzfvGU+Dn6;t^ph+;42`o%ZOoryBAyCG`kMPA0kHj4D4(ovv zV1|{}<8oCD<5b;rs&ZvnSfg|M{SRPHI+xSR?z|^9e@kCY*`8$=ehSKNSYLcI{SF3CE#iTzY2^0husBAukyjidADDSVC5a;euKLlCcRRam=LH z*a6k-tqa$7ZA>Mt$~cR@;}b4@p$&WAHoMj_9*SXK?SpGl zLUlN5*`+ehu0Pp(v;JZdP%~lOOpbKO-mvRLQZ^~d$vX}IH2P?2uG8u375v4L!dvOt z8f)fv+S;AqR<Fgx3aFd=`avCtELUBx!up%HX$Lgro=GGBH=W&6;8#Hup6xZFdGBOs^Mrlu5hcA((%>pFUNVtiT$a+= z4=NqutP~~2`E+EQTbvAaU=8-UVwM5{6NPEcdP~V|y>W71@=^SQ@735eREmf&>>SZD zuEGVJ97O$s&5=MWs+vOssluYLb1m1GFzz+(3&RLbyV0xnHwsC|IZPw;dq(apczsuJHMg?$&+ z(^>Txk1!kYRC}u<1Dnt4tSZM-+25#z8Ks8B>?L)HkrSX+*-q4ygvls z=ThaCo-A?MlF^lj()z@erJ-^?5O4?ODnfc(N*K%6nnBx?g|qOO?1z{d`%3#~ zw6hB7?V;URLKp3S>DMUhZ5u-~hM-`ABlfw(M1PRKd-QegQ&N@j+$%=p? z_Zv&y3w<&F-Hq1&fC8iI{4ZV2jZv+K$9CCzTlNWX(thF$d&i^7xvBz_Qq-(E;k(C7 zl*JsKagX0zuAR>zj+3^Y zbMsfR6AeKOXO4vox~&@yz0Cqa40-Oo7j4}Y1Pg@R?N%~R-P3favs|fjB2-q8QBtfh zZv63h-V`f!D3A)Q2i#j|r=)#z{KomrLz*hBM|X6Y^2O7Qk^AB&Opy>5NLfvyeM`Kq zf;>MXo03*|>Y3Wx@73`;@lhSIJSBSmb{f4_x1I&Ec30;l{A3Q_^dwrVKtq!R2)r|x zc>Lh)=YuzQA_(nT5RL_pTDnocXRbL$ZC-t$T0b&PvG%ZBilJLQ)8XuVScPI@1uaag zy=INqRavhKLvH6F1N8lYFaQR-!JWxB{tyaVvPgQ=p{Q~jymVV|R!0!RE9l41n@L+@ z#)eNUf=|@vDdpGaRDpxWx3w)Y!ObCRC~4)k{*G%{jp3gjWVGSoY#XCN1@-D_n1dHd z9chcWM&~+GxUnwZXDtvpzax7|duq-+Q~py`ee^~Ts);2OQB8mcmeJ+g*lS~9?3#;@ z*O{(Roy-El#WrPSVeLw@&e8A{-1vFPrMS}rISTfi_v-xe!-{;{zJ5V%UavxbmQK^C z-r*Rj+(aejr~>uJ1G(z;Jo%H4S1Xjk};Aqr&t!u~^ z;QdC)ZQ7ih?OgTmlXMJ+nE1T>rp}pJQePW2MKuZXbd+NRxikh`aC%TT$JQ69wtrZn z7!hgEfT~X_`ut7qDc|mq#o>@mgY!i%+|5C;b-+bH%O#6hD0>38hE%Y^z>OyuTB<#o zcy<0THN-pTk|rux{YJ!>y`w;I!$@2ZI2f8s@Ph{HgPTz*UtIlIR)ah6w!QaT3cZ|m6;#UKiY;Q!I zgm(J_-&cug`Q7$vh|=-; z@RqkCVu>cfXzi2oF|PO`+c$5P^aA~dfB^f zcbv5{N9RSWpW_qpg~;KUgHE(Eg;Ee5ZKie1xZh96gj#Njm9Z+SbiLH=)T`F_L?K92 z7)VB2>D{)a(+Q}zjETh^m&FbqPs;%!;f@U_9S&2_j#j|J#6)D15Te3s(>~{iH^Xi2 z51r@#2#bP!zn;HO`niA43$uJ*4r1WVvC`A*A5|jNHKNI;rE2KEZ+e-{k)6-5TB{qj z(_h3ZkT4(dw@u6GeZ1e*Zrx}#AM*ohCMh-+-Nv7JJ>1rkP8ReLR-7!L4NuIky84(m zWW*!V>qhW{@1-jL3${ouE4QQ3G0oeIVDS?IdLuU-a~F$!kMSjh76J#jxclMtTK5Yf zi*^?n*p}2*$N_-l%1fjR^BQWYA&kUKLh}}kg|7keNh8l#ZK!OGYJN6OXPM+-1DZ8j zphqZARR??4W#H=Qtca1vGmX@=nBqqM)u;!N==5JrQ!`CDrfdfAo5fw95f%x|C_AL%ZT|0w zh*vKT7a26j5)F>m!J;ux#JGK{+8c5-KBu#*dh@i-W^4w8XE*!(`a)lA)jDrDM%lp% zdqRPnT@BOv`*PIPQS3MXc$xY^4^L=rQ6kD(r~)GV6-%67(w&F{PjL5iWKMjpc+fP; zqJ9<=j%5}DV1<`I2n*WC4w9qP@f>!-q>Bo8&3UX4Foa^z2+ znX1ZD$yCRW1ioKRvDz1ww5L?3p^Ih{P7vXRC-Me;ivJ_*&{Z)NT^9%cC3aiIQdO3l z%}|g{ANHTL!T-N3^A9NKxy*;Ci%m~lK7>B!WoEoC5F6@Mt-jfq~ywaKtPw~@KBhfwd3zks=ZIBu@ z-X1SRuNe~^N)rH6S>Y>Rb_rk*HsOuC) zBo`%hp5#fE4=?VLFf{~w%4F&jfC}8Cj5Jh;!Jj&?PjBq)O?a{m+vGKC4Q6Jd;iIZr zaZ_kft!r?n+FFf+jdlw+2b7p1RU+_SL4PASLi)-j(XNb(Dfvxq>XxkQLncnepub2US)|o+%eF*nMkbcDpjO@*IfXL zQI0Kc4UMoBHQ6%ThGr5wzm$yUg})QrV8OPdCZ^?u+hItsKoG<)h`GrG)gahV0EU7> z58wRrv9LsrHfk$$hXL^y!?J{k{(Wt`v)|WKqx1T^hZL<8;nut&J*SS7V}!i~>@YL6CLr7iF)sE6Rc2LnbKM z&P7hOw$fGNDxlxYRiUXuyZ`>l!v6tE`~wPL*SQM;t-vupy2s(eb9(FIN2VZjq1gUO zwz~B%%yzz?y%1!dx0`pFVhsZK21cErnw4_7IGQ_&jZa1|dNzPY$zNk4WssB8 zabzk6tMt|;&*|B#6O^SXmoZsdTWKv$@Nu+B`K4iRepSGx-uE^BV@GdJN#;6=OMX%q zUzHUt@HE>q`M0>}w`k||?k@f(iDhy_&Zc&~b=*8SOZjT}!K!p>8s(c*9O1x_>c(>a zw{9JOs?rJC^vL^xaq~K8_sTRzJ2XhH9WqOo4Max3#bVT7WInen!l34pQurh-4&W^;`$-WF%GG z-jwN~U84jtOfnitU->C_{)>;}{SqL;sD8E1#XU=YOj#LGVu1iKXf25Y6hiPN-9u9& zuYf5l{?r)Au;Cki1dN$7gPba0Ohhf;s)CS@+t4<8E6HRG(3_1|1&t_!WFg`zm?0>Cdcw!2v(0H}yHqv=VjYiX zpl?v02%;v?5(fOP^X7o?Qky9JYG8k<5ZpGAmv<(RQs}19{M0$~S~6%qjqp-t@Ho=H zg@M|=r&DJmt=ROz?HSY1hqu8*%8Na{Pggw~Uxor%c>9h1+k_|mA8h{r-6Q{ig1}?M z$|ESulF)rYo+UFEmUA^ZeJYn0ad}zAv4aJndGR8#(L*!wQ_?1Ow4{@u6$-uJmc=5p zPh}37Ofw!V)K8b=a(?k~1dDmTCB<$h(um2J4gD)|HIr{MYa8|`@X^5-3bH>0fKvrYj6!#ym;}V zE$*%fuEE`DOOfDGyhx!q#oD5!zL|Uc$2j|9pL4Osn(NHFjAZ04`TU;eeZP`PHrXD% z!EGznKifoeJ8_I7u~NX4?em%aQf{p^ssz{Bnf#);b%xHB=n?cSvPR44r8bzrQ(@g%jKbs`x&3ZgE z&Nl_#7TN;L&6oLf##uz@A10~4aEZHgYvV4E!x!%$!H-I0W;A}LGCHfxuC@iXS2!e6 z{C0h%Q%laklM3I+T``*^vBoBgZHhlLqV@hS(!ia7i%mMpJ}U8CTZ^4JRmKpXeCMOqEnY;;AAwBqQgcaFjXdiVzOHm;5@%+0BOB0T-D-OGf^#3R$VM8b1YM!Pr~ej}*;ppLn`t|b z3BaCUIPHKQBaO>=n$W~riHtJjQ6ju7FkpzIJ+Pr(d(VP5N&!bODYsZGm#oZZB;bNa z`h_T!hE1Z+r_?CQ__BPzP2;F?rVzqnsdOk<=6D z6(udXLVYdAf`#U5;e+;1<--C%zSKNbV3m>dg?S|(O(I-Js(as!X?)Ce-A^outWStf zennj7nF&8PCfD^%RDA;6L;$>;UU)?$ zUitZzZ_$F**pDQ|_&eV1iCr)#;8EMlTqv$vwrLfuvZW;vqYtm3?Vl`1t&TqbQ2z+x zScYAiO-fyTJ;jx&GL@zD6atSv9>*hZTPtik23+POEH`Zj2*>v^e0A{%h6L>7C|cFm zWZc3tJrvBpiIU8K+EG`&tU5Pb!v%Y-LA^kC)UDy0#lF|K9;;~%Q_cs762>f*$Bz1F z8zbI1^J^sWSq)BLj@BB^>({qltZem%d54(Nk)(;y#gT0U{u3*;5&;y&kDjdC<<_mP z7>hnM5aQ|xy9O&#TxW;UR0SSwfnS1+_qF=2PBk}Oy5cq@;K>m0&J)q5j^5Shp3lmM z5;==hIg2tprarR4QlO>7`ma$;dG-syre}))?4(P6%GE60g!9By98Oq*!nA@ym0dbY z46{5=L;-+{2SI9)1?@)FD70@^4)w+k!-B1el3hhjW3|Ci}B1I~MJa{nO!&Rn9I!PxS3wl@E_S@KsbbNk2%WwjJ(maDJ@tx6a76 zkoMNJVp9p+J>)u|$rCKEju;5|mX^#E%qJjlF@BR*@W#)bycce`iVt*ToD|IsIn|7e%^{so1HgvO?aNg=L< zt!WgP_9mCePVA|C52_Ipi#8!Hy(`l)_8H47Tp(BiP@z2NVr$PKA~NqyNzD}v*sIRO zCa~w)QzPi<`sHP6Yl@A!kpJaxv-*-mcS+|Bj}Xgl)P*cxG2QI&XsuFvu(YuYU)?2p zH4;J&Go|PEx$%_;GMEqC&&g6}Q<5!{HVZ3%({_{cj^f=9`eH9_^(z#oyGBO7Oo^$= z;scj)jWpX1cQFe(+Y_C0vXj8j-tEq*7$3}w7zH2` z&^X9AqJBnId2Z9vb5APjYR30k!giWbBt@BwG1?Ymj0;X_=%pB;sFiFA*@_eyrH4a_ zT0h8~idF5$@5b$OKepEIV>Fwgv{ru4Ix{tXG;Q$U^r&2!NvB;Xz z)YMBYH+Hr6JLJfFKI|OP|AqOL4D9G~5jfokC&X;Fx>QrFz1R%Ull{qtEF%qZ8_GJoM69%Jc zVgLY`Q{(MXgm+xDIJX8Xw{y-BE!JMdWtu{n6*F|l0w2SG9ZbYq7d1#Ug8~9L#JZc? zUeM-*@|f5Y0j?jSW7dJ{@{;({^Yv;xOS5>DkMwd4%Pm~lw6HW?1q-?32A()JYq1hx3THexU=yRx+)D@)5J@D-90uzd`T|_EsYZg{X*>i@ zqE`fx7-f^13Om0If_d+zD7;$MIw$9Uojo;9GL(5?!bqOqUyw@IKub%n)b_zk)=KsI z$G9q!S?by<%E_OAA>g4+`Nqt|B-tgf!nfz=mw>*H&p8GLVS){xkL#Yn2a_T=#9vK6 zzFRvOQ-wOBru}-jeg-s`{7-K>q6e zybCLToodDDki*xvMR=loFTETksa#z8>yeH|BCmaY-O|;lmu}H!+`lJYWQ?EdOvFnP zG|^-kZFS2~2}hs|i(R`67nkIC7EGpNSFM6@hKKyXiFqK9CU$6kB=0FZjK@tQCHT{* zcBdT=t%|H6+Gb<~oqr0IqWCqa z$~+sdj+N1=#ZQLGV9FYf0}~|@s*<+jDW-~9dcM+KBDq~hX0PVU!Ev3f2##WK#y10& z7~n_IHGE?Qr+rEd8!fnCxxTLcLbK7Amkk*Zzl8|eI4@aMkE%g+;x zKYdkD>0_e)o_{s(n)Xl#++?{u4er|>9ath;_%uK_h`n2Wax)2Wq-FCF)I4v@2TWPI(5gA@K)n*xIlQdRLXC=)Y-4 zfayrpanY+pLX`pCDB?G+MFyGrRzxA~5D7=!3J&V23~pv63k^lQSd1#SY5SKNAdO{B zDv^L?GXmSVjZy!N8`|1#B&KY_)KyO6PATfrm&tnE(Fe040Ht#!Yr?e`3z40Q&UtFw^J)+&m-gDzMKYlemJ(b>%x>n{t%sO=huh_s@C3{At z@~`6R2r5sOo{swU*5L?P*&}n*FCxqoYveC2_or+$FGwzad3~_t`@?!3!xl2Q1 z{K*e}ivAX#+KenYtExhA8>k|qg{Wv+~`G52QlLCa1F(fVG6WV<@Zo$6(F=XWwv%aC}NjAzX?sP=Y+V|kxV zOTptX0!8m%^G*(WCI^6i{lKt@J+9!dI<-P5INd<>yKAJ(+XtUhEr*GUK1PGtI6rbv zYTR;G+bchZ7|&H@^6t@a*PI%=4kg;qnUz939p*caAwHk7T7uV1RG(E1MkF3?*Vno; zy^{Ld?-dMzM@NeYC;X2~nE%f`;s5^nA1JsvJs789KOPbq-+7)OnIbD6E+2%e=wDSH zj*;!+sHx}IHvP%-oSBV?cQyqUv)ZntBnvmsvSVVWRO1r2+7VnT3gm!UVjDRoRdLon z>{H^gl*HN7uEntF=X#FsN|<&`Tms!IJ`nt-(dxp|^4>RTk{tEPr^q_(vd?|Jo14Z2 zp1#jgj3$)j4_ys3ub-7vmESQj2vvZ8W2gAW2%)BSq2zNwhths)ba}`s0iyKs${7f5 zfCpNdxXHDaUA$-M_?$fA(t#Voq9Fd(3InB26F;~u`m>tTES>6w`dagzJf+v8kD{<$ z7{q~_9NGUi^4u4Q5(9np)@O(rj2tB(eqDu*0jTWQ8J|EEF%(c+CoD8}LKWf7bQqTJ zr_Ez~c{ukTd<@DaT|8tU&^24k{I7UpflvK?bDhnZgMHOIkDr9xW(Eg5ufKbq;>?_i zVAS1(erMckpoa{yFQ;+`FG^23b8)~Vv?h#mGc&a=(|%9Rskvqo#FA3OnKUO)g4)|x zFA6Jtbh`dX7e5Z>Ma3JV1yc@A(we}lut&rv&k7n>P>=X=XkviOPe27w0OhQED!Y-h zngQ$AD&8RBb#L^3RXEfoV~CyHB|s(;H{3M2coMuNZ7RtbLDYbOO6;s2T{D zHqjm)S9Yl=BQcX!jasB%OIU(QKk`-e!Q`qwZ6`kUUA~BI*D#so-5^Qy*9mnWhHZT_ z8<@ulsn@q!Gj}-mBL3DTK?xfrsN~8@NWj6{C%}V&aR~{MvGrRgv3Ca*%dr767z#>@ z`ggcLvT=A=aoZb>S{rjyH?7YpT3YL@%Bx>_-$;_RNUrGGH_Sr$tVjKi)%Hzls-fqm znlj6l&)d2J-|IBJUiLw}K5u6K`}Sgsn7%wxWeDiw0}BFkSy;0|^WNCKb~17hma0yq zB9mqm4>|p7*bPf{Val#>C)n(W%9AO7*J|kra^Sl5*<8xR5|%c zs6yqhsQ>>G8UBF+-qYEiFo~%N9fr4_ansCi%6Xa(<3}#VxZl*EegQzn&x4Y?T%{ET zFxz4LK*FIId%&3aWFetz96)st*SHKS)nR{_AHZmmS|E8!fHxSxBzI~hb@g3t>2Zr- z>hS4cc1zLOiDtmM%VPXSLoRjD$F~>vw~FO`(c|uG3}t9NM7C7#37DxX)?Mnk!@{j* zlx5&5jkuNBTe#1a4BABV_@)YO(zFpP7@Ih9M7JVu`Ly;$L9Wu8GYBf;6(s5T8BWx` zva?<1o9GxYX3XQf{5Q&{^}4t{3{=ct0021F&wu_ovFH`MmFCJ!S#JxhthUD#Wn>ae z0MU;sYs=6vLVYS0g6cSldBd9Y9iyzT&1%egLsN@Ox5WIs{;jh+HQR^y{|o!zjt z3sTxT=_tXNIJ0DeZH^RB8orb``$Yn*_>M1X~u3N=X-x3RYpuWK7V4j6tZD9_iu zc!KZ`aOli3)Fl{Nj4NA;g(#U@CKBLDzq{6)v}pAI`Vvw+Z`{sB9$il}X=x};D@mlH zRrN~=ch~2|C{EDVkU~EwHslJ%FLpbXq%>S@-PXf$a{U{(T*!++r;_Gos3ESZf!R6PXj_|yJH)GUA5#Bi!BNv%lB4c zsr2{jMAHnNL9Yx5AsI_?@1gusA!RALJnnSH315EvkJZBc-$#Uh-u(v(0Z(V$pE+3U z=`eUcR8BKu{HrrAb6@Kr-#x!w4nytYz1F&#hV2gbcU)VJkp*sBa2YBB%-l@N4^!7? zPvnbNvSpT9j~~JZ1T5XT*Jw^W{R~@gL|^X4bVJ3mEQ_ij zAq*=cOT++<&uuQ%tt6PM&9A)Za@v$lam6as|H8*)oU{(5v@6PRZv(&13Vh;A5F38Y zTy@9)x2fEGwqR!4r^xH^(S0p(pFK6jXmJJTSZ3`P2>kpx9V3#s$fC&QPDO|Q47ueo>x1_%L5a!1FX zbr$)Gqc*ieP2VN)u9ngk%cYs|=AI#az&R79;l*eOkPhJSy8dPr#`GvbsB zILj-Duv2?|_i!j4LC(zw2gee?;+1~TgR3s9or*PadLya+D7yT#A3%E|@r zJ-Y2;N)jd}z7r-bmL%hB(U*&~kEaLoDC>Nfb?Oyq*sL5)TE0-5xJ=!w(TkVaWNx}k zlwW6EQ?_&KkeW+RVS~P)7AGWh$vN8#ZolT--xMLaUX7`m>0O8#_F z>*vk$uC@F2_>vh7|D-3so6`ABdE>(ZUPr-0K7L*Fm62?pu~4X^pb};K$@q*$UW%F! zJ*eQHaDoxzn&;L{EJh4$jdIR`CaSiWWpLoO|KT$9k7kYbr%(qo0M12WJr#4V>U!)M zmDO!zF)$*^uB*m@*823rP;D4|Mf=B-^g=rVzGXe4&jlu(`EKiQ-wfTuU_Mn@`VO|` zc${d_VOM+Zv82I=Iv zpbO_q&%PUjnqHyzmw3vzz^uHMT}!V6WIC`tN^ROF_x--ve3qsD&sH@41BF_bnV-)b zTqc_yE*}z`*cmZcNZ*K0@AOo)jiY)oe8o)TwE00i#HulO>@bqXsRUR!`^>n)9M))@ z1jmqBgxxxRR%BF!;%h|=LHeVi5UPBx^089Rb(;|lI*BphM(|9N)Y=L}w5P!+R=75V zj&~}+zV+^ShlXFLx(6v?idiWvW(F-|$#t;H;i&(Vd@=7Eq{G?F_FhP%n2|leNI)`x zrhFmGZ!}hFF=U*0g-+AeK*`#T*6xu_IIoL6SDr(wNq*!j21( zC3j=di@_;MfzhkBSGSuL66^WvcJ(^Od-8A0vCQL@IuW+`f|FS3rJ5!qMsDdMLbq5_i$4ezQ1jgH#AmP zsU|1UEv=2XMjak3gL5nb{5bc8={yPb-AtZ|jeaUdnqB9@q`oJCz#kdb7+3QD-x$^&I8W5QimsBT=Z-ndcfh2 z*mtU5)d+*H)jITSwEGE^#~+QJx&Vmr0X&i-AuiD1cOu@IB5Ti~{(Zt>;Q$Pj2*4Q= zJB}=(TtPz(8zW*xMFF>ggfSOL<4*N#iP(`pvDqfYHlVEpH5ES83=Dfoy!zryPOaef}B4= z5zq>1L-^Jp1#y*ZR4k4>h3Y*Z;}(M!Z@YLzPfzKpb^!145_;cbW1{^sVX283*?pDf zuODap{KrPG7uO%N(No0;Ku+eSBOUISnNM$_XDKV1MihxE>R3!^6UuQ|1eh8l06z?Z zs0w|B0Jl7Bu=(e1#WK;DS?ch9Zu=LRILlps4cxdwMO5na+J#H7<_#tcYnM?<;)#2z zSE|Mn+k18TY3TA_Pv*F9RnSPn7s+8e`_5Wb#&;j+@i@XU``j^%r$z-QOpDrQB8+=tj!40SUP)Z4DiHwo^g zswj%}XEV|EKn^KfdY?@Fd{r#0jCRa{dCJ)~v^7Zz^>jEYnAOJjN=v4(4x9kr=XbS-qlAf+K%nb>EE z(-KofTD{b3gMx+9DHoy>kae9s;r9%E0skEdF7$_H5&AfC5v*2_|#H8CRwxwe3 z?za1Q5D4S{(LiGygt=)0g6&qwba67jhn1e@rfV+`ln4Yh)!&lri?m4qI`3w|BEcgY z-$#99n5Lh#*QxmiR?Ak;qy5*;rnv79tt&j!oEMmEL?rN7@nYw4?6|HVCR#iYnQGy*FTtbQx?IY*VP{wg)}Be4aC94NqoEU@nU%u- z)v~n2sNJzC;dPtZ3V5XBeow{^rMl-|;Tutj$z`^+9S9EwH;!qU$OUeQS)eu_#daWFR7%^o_$EauE7R1yBJT-5emxBmTGNgJ zBjB_yg|!53Qh;mb-lipZG7y}IB@&DN>L#Vf*=#?*ph{U;MA|6CFg{;YtZvD9AU14R zO+d&8c|wUtcravZFZX@z9cNh3XQO7&g%Y_dLL&@IS~>4vS$s3Q%l*#zSS&Ej4Bw-{ z+&1Q=gpetGom85sg#Qfp^sKvqw<3G#VY7Ngd}WnY@lKAbdy959ocEZ+klW&~V2WTt z$qMM_I-N_8TGQ^aGiMj;7v!rC^#=boSLHuYAaI`h3D^8F+r;qB^}LiJwp99|a{63J zb|3g2)%TFiAB-&S@{vz5)n5Ptbox3JTxrI&o$VE%?1|Y^iW!3nnY1OEwzp81;NF%5 zn%qYQG^bzw1nm13E`F!l3tEU2j@XG%lBNJE)JOD^V7>tj0qUbGlOS25k-7oRsm72R zrQZ3Jgfi|PnBXK9@hlM@0?#P{&c3SKd{waVq?cbUSSnH~o7%kagh)s;kBYH3zFAdS zs*zG8BcaIH7pb%!fQUQDY{D)EUkGS0+!XyXb?u@`t)FHS=v#Iko{0p$Qh}*;_fVlk zPtsxbWGwSzLsS9ORy4#?`V*@dxI!8cQW;k#b%kH^ASc0mDX#6qX3Cmcg;zDpUpGEj zEhHB7r@)Xf6U^_CJ()-*!>2bFx8ABm6T!Cb#fQ1g{M{3e1FRbaP}P+5V+Xa|LPy2k zeyi9-o(*6W4T#nhCmzR>7*kL*`kRMQ&A#%BgI2ayWOzo)V~6F9jhZKsereR@R(ldp zton=(%_CD@G2pmd-+y_>B!9wa-VfQl^;bEI#$Bfos6UgEW&8AK)aE+FL*`PqBvS>m&pGJf&vG8A^cECa*7hX`xs}fm0bW5&B zjefhLVV}IE(O}ZXg*7XL%f`H9@R1cGvS5AR;M}P7N$G&gC!FJ_940@i^?zuVPGia$ zZ9=l-BU~D__G^>vgR825iySrJ!7aeb={j}uQJY9ZJA>CzrdpgX5xHII>@w;a zZb5(AK4~^6?+jsGo|P@*Q@K)KX$bVIV*f3?6H@!e(3hbBh@l3!KWlbFCpmFRIlDRA z!U^pOxE;N{T;N`|?8CM$lyvy&QLQelgqYI+g#-*kG=T5O`M1hp3-#5KP3up|=iBX8 z&+3RWcPZ$LX_r3$kA59;EZ29`nb+^zI4VwAlJ6<(Wh5w<^Ocs4DZx`(8>rCG30b&} ztTN%!3dwr7g|KdQ>w>LbT}er7Vjpx^d+AtMrAd#3JNDqzI^@Brp!P~n-U!MAWWFTE z3H||1=MH*`Ng16n;$5Y3tyFP-4#Z2vs*QRx{%J3s-V?)>9JW_gHBDL6&a=*q8Kc5I zqxS~0#b6%2FL_?@#CG;l4G8WRLpGYCEaqGphVkpf%LyB-mA1J}+*vvyIH0=!h+D~j zpup=g^KhmxG55a(jV){hmBJT?NBhbTg2tM*bBx-*J+4gby)G=Am1^|8cAuQ(tnk4i z-U{TvG^(;xG6fFo7?cEgOjoT{Od^#DrCL2_9d5b<_vpY`J`J(o+EvU!oQt<}3Itmz zdxoAhdqvTyM_$_G)4pChu?lq?!^U_VCf{rkKO!XM?YckM#?0bC#y^e+vYr|u;MjH7 zqA*P*8;~QdPPj2V;3Tsap7VLchHtfjti-fXV>LTp04q5sJe@V5rm?4@Ws|Xy9ITGj z^!EGHOV?Yt-H*k>vqvQZM2#3G!L_w5cm3KkP8nG${KOcUj&T^D5N%~+xs+74hGo0t ztq+PJJ$zp*!yIR?uV@SXU6FwSj{%Y({lYQ9DSTQ#ONF)?q<(CvOO~>#9u?(qg-zIi z(#py!<<65$=P~rMI!@k6p?>zI)Mf6EVyk@9OuiFFX4;bWU#idX2&+R2Sk#!LO=f>z z(}K(km`T2{Y}zbG4Bv%qr>4{Izp4gN+ZILqfYGq8yMm<}BNkoZ=tHF`8?QM#8K- z`vLUuO`B>2WmD@%2-?!lF~mvzsr`rRZBDrbW{ZL~R$jz>kDugQcyVmM#^=-5l}X#L z!e0Fh8PwRSaQ*VpGw_;+hFC!<6+m(B42VeR-QA(+pk8#DBJ!%z+1wd)BB0a|z@h)f z&-qpebHgjWz3h%AUT~GD-C&v9m5ySe)jT@lmyU^YY*=R2`!@u?GC%#m8^($9K@wmB znSEch^acioIbS!Vjd$634=$b(FXhm5FLzP303kt(;$PaczM0OM=SSr^mUwwsK2p*$ zv6`Z|=JJba;d}{~RE}L5m!KK&Q}%zo3~!UgMWy;6$7TjhgEvf)6&8=bP@FQ&HJw+l z^tZk%k8S!7ypRL{{(*wegC9yyJY)14l%haoO5PLcvp+;M-@s^?q4>OS+ngsvcgw;^FwByf z4Ge_7uClG5KFBUc2@)ZP^OLf3lXaOJR<*J)TY{*hPU?`JPc ztP)D;UpVUImnq45nd3!Wk<05YqJfj|V>`l^4cYDtSxyOh+cP|n4m zR8!&6Wc3^uRgQU)T`O!6t@Un-=DQVDpgEnC#L;-Utm$IOn3;eIA;_?m!|k||Ds8EiPm^OTZB{bJ*f-; znr;4-h`7s_lVZ18thC4kp^+_405f079cv$`91 z5}wqygD4fy4HCT8&(i!$L8*^|7E`;s)b>}_CuJizb0aXaT{iWYf<(rNr<)zPQN%CY zB`?Xh$BaP9DZBziQLsS(B?m{)JX{7liognlXHT|F{9!$+P`In$$F}dmL%Z4po|~rKdcC| z>JAQfe)T4&E;F8uo5w34@sE#IqjSI^BZk7(%CTGyCYN{#Cf3Z`C6>7*?H3g`7c_IW z-iP|?%AA=}nEa_}Vp=BVQ0(#^+r+uv_f0lxg)( zuZzL?Op68gDKu{=`WA?*-nP?`oOw?yFPIdw6cs`d$+u`9TaAHg7|BYG^T{Kl<2LRM zkkh2{V~P~k$s-bK_SRLC79&Zsj&tauH|9y7$=g|mH1f>1rct$Hfkb1!hy;R65QOf+ zxV5@MNhkKzW*-@~7LRNahM2{4C!L!Gl$F`sLz?B})1`m*F8**NyLejQX1Tg;HQlBX zZt?dqi)X>&dk$x&p5%yBJ2$?M?v80j)GEK4prp!7OiBlMgE}c$J5(8!+)C>0#QVnX(g1$+?b0zv6MZL{^(5osi#Jc z&os(fJV)%1_qDmU&ligV!QlpwXS>=$y{Fz|9HC(&{)MqCuB?WT-woZeS1%>Zx(?!n z&1WCAGLXL-dG*)ROUtfKeGJAc;_Q8t)JelGYQImxg-c)UQw&PLo?(}pj?%~l3}Qu= z;~gmRekdGfmpqjyblV1Lw6UA{m{7%}n$O_nD7-bI+a)pp&{`9f4`{EP8f!^O=-;Vy z=|8lyis7_;=*PBek%J>`l8!L8*cxpmMHKbF`e z{OhD32@aS;t_)hYXo06dIPzzqTmU0MQ>IqG6a#{EWUK5|z0tj)xFjWK<8MPH=4d+q zq)vA;p|NUfYLrD(*Z{StQQPu~umG6z=AmHl#9>nT(!f%;i4zhYtlxY&lo$nv$|)G7 z7mukW3#VEkaNpNu8R*iR>N4*Q0aQjfMwZBM70b%-Md*JpARt&6@s2Fg^hy}#$Vpz; zY&;4;S;~pp$%mDv&ybaeUOM!i0|q3bnhscr&b!k&taiUBb+_arI{6>7nJlxiCmTxX zm**{t=iD38vr-Z@cNg$eDT;XCA?{~d>DY7C9jB99MZypZ%T-U6bMeNNLX0Z+(_g+} z*y|``4Ln&)a{tE5jBcRGN#C+6w|-}aJ-l$f8e4U-NAYvK1}|0XnXIrX#b(v0@*8W< zD1VY(G#+}dYN14cEU^#U!<+1VP{&jG*TUjhTCdQ+fTvCVb8&wI2=47Pwj~V-+mtVGeWJo1gjvLx*{@)qaeOVH_N2Y1Pf5PNb{f+NA^2qhR;P>Lr#&;u}CH#`HB>N))c;qucp>NerDG3n(2HJ zjr0#md{*hEc^#e9^d|FAf4O0dj2K&+=Do;sqdmmYROCkWy#aMHNwx9h)~cY(i-;~I z&69!vsMO*~YUfj;OD2lW0la*EyW8UDgg5m|ak|YG@c)H(f*PXuMFPg&erSEf@^=|ki|+d%8jPd}y#U!^8j^0~zxm3U79PZ!}TdI=p3 zWW+f%3Ys~}>sO;FZq>m$yDR&_uU(xraVIvZzO{`?3N*;9 zASz_&geC^%195C(yCK7j4Wfx|la(ChByk9)S^RHL`LbS)YxXOd(3-y_dHv1rp*>sb zrxS`|;%nzSI$oInIQwfkrAJZ+b0NwL%}U`_s%y592KEw@9IVE%SqTe)$K7q4PJqqE zK;XfG8@K%}#e!33bJh@JNuiO*W(?k9od<`LZ-aXeg@YleD`wNUa8)H|@32_=riR9d z+x#Qa>=OWVURLkYeG{J2YWrQ#8Pn=1(8{is!{NTsK_BA4=TFBt5{UuGThTdUyl21( ziOXCTlv2_p#brWxkk7=zS!i2mQrg7iv?QJ6PVy=u z(fSA%P9**i4+-XUi?Lsx(iB29&n+~rO=z@0azmu_YC5bre2VMkcqZs*x$z!^es z*jy37fYrZ$_asDQQ%p8(d^?dqI_Bww+sz53bW?hDk=M-DC(~xTZ%cAv=&iew-1#r- zPJSNmEtwE(9QG|`LChSYohsoMSy~QwipxWhftvA$N12ZF=Yx)-nTZC@7=)D6GxnHR z9C5^BP(VD+EICK5J@E;CKRdR|Ydm3;@C*8fuE<0g)Kns~G4n&}E~1XRxzKrV{Qc6@ zul58k)_g2F-3WF!AvJ`TNcQePD$OVg$NY~97&kic#)!@FB2d=|f-WZaXYjon8IG41fN+^1wE-O8mn~#n{u2(_ja4oO3VO@oE4-WGXE~ z9-fx!R`M)aIk7KY%~~WA!n^yde8M^U@i#p2ole7FFnjx+#$vEzMvH01{^+wl^a#is zno!{+oF9!M&!gh!PAvPHCntj!<9F$TW+YAHyFzjiN9o*trI$(Fq+TxOl9Hy1SiuyW;9{*^)R|5F+b{zTws1Q7)88nNh?;AV9#p948mFOGoaG6W zy<=mA{`5VxctLXxKfUXHUVPrvbvRMhCzgxRw79`zJjB-9iqFWe zqWtbW%ZhrC(q%}90*f}IJ1!Gv99f}JaZDfSN=e>CJ_um7>(;~x7n2+hGhz7CZna~+ z7w^{}D=SkBsFI=In9u%oWXx6@BYpo-tw}Ih$weKTx?93Z7e+!$PEjpM?XdxQEd`>o z$BDG}-^6tFb!5^7Wq>9XQE6AEBi^++2o40#Y^z{K9A*{(4Yq6uw;Jf38+8AfV<6gwnb!ce; zDURa39X{(Y#n)3%5gV71J+|R+N53M$(9)6qz%n17$4d=>Nr;ibG@{ef_c%O0aDi1) ztxQ8@$OrKBBSaQ6P&Z?xMPTJF*OX65ZllBF<(r;?%duZ_#ot)r;h#h1?9Taf<^CJ~ znE&O+{C~q2|AB(1%hVY{>;AzHRqPqp!r1gL<8qvYF;Zloxl zG{Pn}cbcEhV_X`M)i(H%J#CpfMHDj$veS(5d~nzA?|uRj@p@uk*!`AKQuPT#gBm;I$z*NU6!G zaV6>JcjIvA6{XA*1eId!M<%;1Xt8Z@UEY<6)q13NsQGM0U){fD%$e}SAwv6Q@V*{p zh$v?WC}g9J_rkN{;&XL#0+SLz>3bWkqWraD6&Jpq%k)2W@T-|}GC2)%?;y^3R~$-P z`f4oD=3GhBqdU=oTPC$jST1B~mOlw|wBoy$L*RVaLO_XgQ7VTI&$V^h60A|4=BUH^ zHg4jY{dWM-CRRJG)Alz(QiaYXxn{?R3c`*?`Md59C^CF!rE>iYB8C)j?A(lT)!4ff zd=GO#|5IBm2|%8yH|1nVl!}9HKB-N4D=a{Zs=81txW>LqRKPnfz3N5Y&$ye}qbYjA zd^Sk6Z2~3KD9mLSl;thMr(+nZE+il#s{et@^a^v74w&wPdgLpm4YP3q#)|}FS?x|* zb=zvmJ<_;Z;x`J6F0zVA#>k8*6WC8Broqco0Lhf7LRsM;8+ zy@v6}IP4)cd?gX__oH)X->l!3PRTGUs3(_$Jye*#dmA6j5p- z+;)|5BHXsIlSN_$>?C-s;*m6H~g9n^nc9IU&Jnh&&?U14HBx9RI7>r^he@4*a}Cs;7%} zwLVl%q@f@6;mz?pI2%oR4Fv7YfhG^_SsMkO{~5Vz|0P8H1BHhy=bu4Z_vloH(g!F2 z?Qy8*PLiit{*|WC+KFLAtMR<_E=xO(H!TBSUxhKxrvVqF%SjDw6$Zot6JqEQK}R&Q z+=LiK6yjgiBzJQay&&NV^bg6(z)xsh#vrzej^6ZYEKK*-uzI`~PwuoE=ZJ{B11E2_^d2mCfcC5usyE;xU-nJ``#R-wI6Q`ldXy@c7B(i4G=6N zVo>*HGk=c|>?#1~BXJE8#9&HF6amrElROk@oHJ1r3Ohkrl-LJK8G}uLA;cWfoyyhU zMPG?&skPgt&?;IoOCFmK;cdM+Yp`bw+(nZ0&~al%a*%b*|7nB2(A<$XH5Sc9ug(BI zu^ekne0FIK7ik}6Nz=u1I`$+azy%Fx#rQuFR$G@k+25-h0%X`xWXMvu1}e$2$eEzW z`ALbK{8XKeKZ@AIELIe0@Yrih&1lm425hITn(y6u%YQpbBGXfBA=M z1_#waW2ChWoBNHIt(M(BZo<5#$%MfS9OB$+U)CMj91)LEOD8rfHo*X;rV-3%vI?@v zW02%<1PqcHPN(PHBZt2>F&>_*i+~gO>3d4a?3X{&RuBH6o=O}JPglugxz|sdiWya6 zzaRurjl4FF`2bQC&NESJ9~~E*gx}@2)X;;TPq%?*Z)c&Xx^1Ls*XUWzM*JhLt~Alr z7hl8hwYT+uQEk0D`ZdtDQSVe|gy^T^rj;yP-BxQaIhPt)==S?ozR?_-zrOr$6DR&x zsPMm`fQeh~G8_8LVQoc#q15#}nZEjAeK?HV59s_C6kcN~tGNU=ee2d4RU#$VM=#8z zNX@I^DHE$`w1QOX$@L+mPKr(y!nPcT(Ml=g%-uu&T>1Q+XG9FfWVsmV;XFr2D15f# zw^e7eaMprv_0o4n1cUAsm&IP~O{l28OXJUv8Za4=+|L~HL74?T%{D?==CM9{dW9bS z^@qlKk4h3WW@m8K`HBTQZ9^7r9tYXv3sapmqj1{^oL)4BkcM!r^%m6mQJViy#Q81a zP~u4nhp6LHw|o|`3i>hCfh|9$T*q@;U4Qn>uHz!vm`|)OEBzZFkzZ6l%k}4^R=;1x*x4-PQ_J{L7>%aE9KR)YO z^YOXny6^i6C%^Iw@a)Tz;0cn=l27Vx!OfC3&VtkLl0FQ4BygNI2v)$9r$7%uO+edx zQCr!g65%9Ha8+R)oGkq2um)0Wovl!kaQOf&>Co^7UT%B!EMYAu3wN8XuMBg^w` zLG^7rY_6&OVc|M@$Bx64UU^}1W^MkBZ!4Vzir$@Cjvwd5*(0=i)0&4 zV(Dh-8Y-anNe#JmbOonHDPdz;e8i+uYL-@aINfRjl`IEn1{h(6%7<=U5f&y|35HFC zVGnEtGAI2c$KRAlyQZl*V%+3sZNQ3=4op4z^~(0=wpgT>KCe;zPsXL|V_j}xml^Q^ zp&o0R<46cFaaWoTE(M2Bq^y~!sF*Cn>iw3k>(0*@pAtHdp0?Nmv$)!wX~(Wci9=!+ zsaawuSI zCB-p?M0~Ro{;s%A_fc%&SGzfD7h*3B#YIddvW}F6#NsDrDiUhv2;}~%?&k-6=_Ro9 zz}~mKn%6Ui3P97QW(Y7-rN@+p|&c2Tx?vQ>3gj2Tc=^fWi_AU z%CY&CHe(`B=kE8%u{pi)eYkuUgfBtHzOS~ zN=K76(uE*WYNBC1fc9S9Cy1j`pw@%7$=g7y_bIr3Ip%cvtI0lezQ%Q1(k#4;SbAeP zi#d*NnYehEZ3q(i+bEXs;nINe9ypg>)GB;m3@!@MF zchFo#iVb=BS(&EhL3_@P?_dUD>Pm5ckFr`oIuPFRyt0YwO2m#zxz^c(To~zN1c&C(9@Azo4rpS` zZ*d4Q6OV-@JyncBg;mHKoxaqh_87}CvpOD{_DPn|mys$>ttYCUR4L{bGuKQ0DUn+t z7B|{xs#l=g+@}(aAiNf+G`0buVq?XLj<5#D=i!{V%pDR1m!*ogPpv#8uCdNH%CpI8 zGYRohOHpSA+8{r|wo}g-p$Dx202kTLs;g)P5NvQ8C@;;0YDlq76yyWcNg;Qr;f3F3U03mxV~AT*{bEkCy|eceJ9gwJvJ63 zc!Tqq@XA64ck*@2qrX2&)N!lSNEI-PExsU7Ul~KJU2(w zr2*MoT3o=fkgMCsPhR%S7&nrzU1wp*D08-+Jl z*4@`&|Ln)Q`POhMTv@cXdU?rpqq8z7;!|bHTBc#`YWlQq7)eb=qRmOiix*v-C(bXz zus)*iY@9RhoX4h5Jy(C@cHS)#fvqIt2vcXe+*;2+u{~d{H}Cv6+C%&U3R?El&i`8UnvS^0J2zbVdi^K=33@j8v|+&5=Zp z0$Ht;Z3ngGP>6=rXfPKWof|9#C{0F3!c0*W((;-d%)w5WT+Xd}d~>wq?qn?M65WC# zo*Adk5K$OQspC0VoBm^y|uT>;p%`+*6tcWXOA0ztB$g0< z3OiPaB7kZe7;95j9+}cmo?2x-@E*fb`nf(jLbNWGP&bEftG_vrE_CDNNMxLw{4!zr zrF|>Ai9?QeeM+gUAr@&kVd#qzSrRTjImVK4>4>Y(8XI;{XF&kI$3;p z`$3*znOC8E{ME(|t2RD0<~chhM?(F(+dCXRNP0>?*F?QEnUsqIjqRwJyjLwa0-e(B z2clep2|_A!!nU-HGG*KS(^E8)YF%1qd$MPY0T|(@IWGx9WAxrZ-m;x&}#wUKi`lV^P##`sFo`MM%2%Ms=Q9mNoH@A2T!XwQr4*kNDb~oTL4?jEz3E;D7pzI`)ec7aE=-*P$ z_#cACQHKfVB(&T38SR`iF)wY*15=Pf?y?Kn-B;4}0RSc**f|5C;3gN@TeIGN1{q37<2AGUS!XdZsc^EWa10xn;-!hY+a>iqzBg?qI)GjT2|sXFv_Dt)hoO z+J}FAz2*%bPulpt6p7`9Es<+GDMe1F4(LQI%8umHth}{ZQcTLOCedGGvU~ey{kf2o zLVM1j70}MyfhOjgWu(w}wO#FVVD!*ODo~BsA%*35=s*qRYi_V;u}iuO5kCwC3eEP} zMqmAo$BrArFgj+5Sq%4sDm_1AED#73vdFgSNFgxam42l8`Qz1n8)c=6%d4TSZquZh z-A;Id&cfba8hMT@mZ>kJ*|PKVzPm4npJ+Qygm*t6YX%o12wlI-N_aV(QRYwUj4&6y zZWBr9(#ClMABK}g4@ z6bKIH4z8AqVo8-F!Vc%Quqclv0+=7d3kX#=?1r$t*ocZRJVXh>k1*YTopoIYUfmh6 zWXz|PGopJ2>A^YyqB3#0Q~F^wqHzEB4`tXC;qi}`muev1O^k)jPiiw&K<*QY6ncgz z6Ll7pzpR%)csGOAlAT_FWR^?D-l9^C0B*GQl+H??YAdZ=r;ZQASW1x#Rlr-WHKIa0 zwppVB6s*k=*KlRgpJ+``b_zFz*cn$Oz;A|5%JCg0_=RPj*Qe1omc-7m>^@6gO*BNI zFn9q_^pWLG_^9PTIWADno0hH_qUI@CBh>m_%`j|vSDE!zyOEzMc95Z{jDwjPm^{$U z>SdEN@a|-Wi6xDIqxihJ{%f?QvfkGFMe_qIEBAXs{G>I;Z?_&eyOrk>x)@ZtNN ziYfA_xcR9nd*T7__9v%$`E^92Cl+?kdJbP9)g4O@Ut}6BvQU1~kC$;)kJ;7!%dBEy z3o$6g0DH;n;fC75k{|JkEATjFI@$hPXcPaxtP~zVVG9KS;JP|Yzj&_hH#0+P?g@WP zmr%jm&>~vS)Njqc(c%w)KyCeku3V?kb6~;EApufBtriSqBtdlaGy%^MNF3mWdn%8%nEsZPn?nU1U;SMN@wsG$0JWv7qf!%3z#y+V)0 zBc7gRlUEzuA45TzYvYFM2xo%Isss@v0O=qkg!=8e^Zs?g8YLcH&lm}J67o`0;~pdD zRrl!7igC7Pb_2*Mr5uJ45BCRmVIop~mK_zX**HZ~&t^;d+P4NWQxQ`4IevT{odMmQg0Zv&G=#gA@0!SsVEKIH~2MgBti-r@ij`pS`nV zwu7^O1FVXvDnH-5xQY_rO&`pT;A&*!PvE88Dyi7ZDycne|Fl{NSoLZdwOHq|C;1&{ zqzaHmj*dbGn>R0xr=H?6ENvK#z@jHYarPm?m^Asi%<)rWSc9=dM7B#|w$S}3du$&P z2rb#3t9VTKDZzB+-S`(?Mh05SiLqhZNZYnuA65~sbfY^-w_n2M^{iA2s{}hu@HL5bt#oxf|1=?uq?YlB#d$hWZCZ?5@>+ktLw zI1h0=m*kx8ANyhq83R2kA=CHbBdUlLpir>80F55vP#N(Mf~F;h*Z?AkDG@Xf#5fzS zkD4PK=M0MmciaJqPdMbBQpMm}VOZhA?joM2evHb#hepZ~K5dRj94hFLG5;OKmddRV z{bP7oQ89(fj{`Gqi6SwwnNUaKkqws&D%{)sw-x%-}FJFI1tZVNt)1r_x@qPsAsOY+^ z?c@|+;bFu-g-RPuO!(W-GFk_rm6O^n?$p7K9O+H_Nzd{c_Z zS5I7XF26n>IV#o@;c@)$@<#nLJv2F}Kcp%6jVBPib%x8(ZWaljAtg@wUhjF2wORl` z!d`xH{R!Q20=wpelX@!l~}KN8lW5!JWiTcyullu z?lB~qK5o)+_Z|~f#r~C(xN5>x;VFw{8!O&1l^_)fwu^JsG8tvG%6Iuv;m$(n>m)Km zR@vrFOFo>5ycmgc?ZjG5O&#sH`S(>A-4-4-JysN7oV5w#moIi9(GE)qdASNoPaXA$ zI1QA&pCLsW%MNsU5@9^oz`G~?3ry?JUOo07YwU17_wsx#w$u*)9aXqKRb<0aY*G`^ zBysX;1>2FNg_`+6-blEF6G@(dAt$smj9bj28iv$nkF&rDAEcbe{}>MwBAiXr4jpRT z)=MwcB+`D7sv=FBAtMkyr0X}Iq%<{IN=QDQX^}GTWi(hpp|t~AU4>YN_gcSMNxttQYrc8^#(ZICTFi9vCm3h8_Zty&z%YXY}%E&3-r8?am?Omx{@V~ zUZ4>Cv0{v%rv1qViS31#J{nIj#}Cbs(^E1ZQQPiB0nylvBOo<_)?_Tj>~I7`{{b12jfr>GP- zab3dZC}#dseW;BI4`~ZpL%dv)7mJzP%vkzi7;jo#v$7V2e@J9a&XYeaAvm z;o6z1N%M8hPwyyk4I+2R8XFIyLU8#_TcsZ3C^@Jiq8&Pi6};48!D-qcykN@^PPyuM z49lnrABx?Q-M#Iuz3D!5(JIqV&~3rHk{~CE#qUgf3-!b<9^>PmVg<;X=Jy>IaS@|F z5sDL%t2^J-{E{7n9kTmm{W7%-*%XbRNh!EP=lj$JQ1v<1lOl_B`yEfu%0x0;e_muX zXh-~rwTbMuu3KSDV?a@YK5;|X`?uGDOnD}t45!3QD>mA@EUgTlLwC^*M|+k%|Bg4a zv=R?Vzz%%;?KAfMo*r$hB{rh(OW8fNs&&)NocE9 zGbBm*lO)0HF%x~RY8_QwmHnyhI@}gM^M2iFn5*61-oibIM6K}2ux~8;&pIDvS7HPh zCv-j?I~RDOjh2sA73sxZY!+lw6&mc$!WegKFU*j!n1{AwE6nEL)2~vO?*BXw4=+To zBUuj8jN}A^EzK*RasI7OwB`!`9?YUcC~5V9juW?AJPkzZv-(8#pr%?V-wm|JFBgT` z3+f1Xt3FfNWoUoEHh1S0tD)Om=Y}zGKG?xY0*opX$oAN#8mo!V>Xer-%Dx(j&8Npc zeVRop7AeDwsIIH0UNw{c_`8-hnRFZ8mr=rYeWPAC(-0`?g6cQStgJg&y)ZeeEQ?07bn@M%?O4ag5$*a3)(9HR>rWRJdo6KmDG zd0F~x1Gm-k!>SROzjed5Mzizgia}&q0knu=U-C3lp-@(CKFaXR$mfMW z(l12dKMHr4gc_Fn7xg)JjTj{rOd8Ma2_Sn`vqSx3XCeJAR(kPBc5@Up(D?zl% zE~sjOVkW-+(D``4)>#7c*28+4vqk7yk@U3q5!QTyx$X2K&<9#Wmj)_@J&xxpb6Fm& zFTLO@mHC9tPQ>^1*V>{Qy%y)RSUW`{5S)QA*TqU6`9OU_64Mkgn6OEaZ0cf95$;gd zO50X$*q}^jdD0sr?v1<{T}1W$5o1?-FQH$U5@AeL$rRSn!bkyXA+>6HTFIU>F=}g~ zeXbtu5MU%`HvQaOfOQ58Ou;Q*^4od1vWlrFIm(r+wUe{73+HEw1$59pvKexs)28i+ z-YBgKeDrk0_HZwI ze$fAK`=kF)pZNd%<3FGv`mc+mjo&_rDv9@LARW%XtPg^_FWYU-U$?>mLdtg02^}dD zG5Ms#Dm2)rdfTnI+mki5XZrEv?XfcWpNCq^`AlD28GE@tVLx#Nf1P&Md3!n~gDLS20H8dLZpDX_Q04!DU;wSz zRS;TxmiQ}HZgiFi*i#IETFyf_kp@kd+Hz`)K^|714uRZ(COXwiMm@Pz7^aUS0HZB` zGDpF!OKxj&pM0Q!GSPmmq{98^5O;7;xIqFv&;U+YOL@@8sS1bucC)D*R?DiCHq~I* z#8XE!oR}{=5=GH@Xc@$4=Pr5f2YMQscqhF)xpSHPzymYXexXuTaZ9y$d#3YrRnWxJ zOau8$D#aYk>giAbiI<&tazF}?sLZc|=m5NC%Va8%ZJYg+0 zrvPIBIG`slWlYvRa)~fTL*i>OiX&ANiQ`fAgVAHSdKTHI!(oHF`(7r;viHk#_C7@hN7r?o<<96oa}yovUU;()CV+eU6KH8C!V zAjg#_e%&+oE({k7JDCLmiE1^M9_UpVy2W#nnoXFjw4dsl%ium9?JzjVN4>&7Bd^e# zk*w8$2G`4aaZmrcl?IY|4Y9k} z-~9l0)%yQ&n2-=8&=mg_;f3-NR!Q;beG}+vZ*o~vT2$;8#giDu@yzP5$njH?>dRQvN z;bKZvxh!1Iugg#=po7HpbU2;WORmklfrcWMl2lo}xKny_zkIjwX5Qt(3K;_)-P>kO zUCB1PL3}A(NfB#Ngg90)>9sZ0b&rfXWRyBa(Yb19{^6~l7U+gle^x0OikY? zyVS|C2Y@L0WHntU^rAmD?~R7k;Nk+GA#x5tqi7}UAq+kUI&|PTp{=%!)EI`J!aalA zFU$e(WW&G*tdo+3*Wo;QW{(j%n8FdIvd#`p$5gORqkO3SW9BDZknbiC3rjINeH&HD zGXZ9r19!drQ0aOuHglbnzd2McVz`30z0ZL&%6>e}n+ZG}yFyDvYcq>t^Yfd=Ie7kg zAH=;Y{9#?bWg&HmiYy_=+v-niUpc|n7<{yCj4H|5ZZ)B>$j6u2zW6NIkBc1ME;;?G z-F4C-neqej1h9@af&lzL?=s{v#2hq)E=jf0Ljp}sfKiblC4_@r+MRYY>uE3Nzi0nm z!31q1(k}+^k9xFQja@o*1)kDWTM~9eI~qtn;VhFicTl!@Yg+VPBm0bp%lwO0nK`L8 zd5wWn4^7S^n^t{at;787v%`uNi%2XUmam{p!85sow%1+!n4lOyerzIJz~Y7G&w&=1 zmt`wpe}~CDJCA+t>*~&9Phn=_yM0-eH3NFkEDSfgcL ztK5?~S&T!+Q&Wki2}2QKiw3Nc3i4W`JwB7S8+D2i-{^mR=B?7wu%(?+ZfWhX1ri{7 zN~xs+!uZeJFzDKa6#lv$H=Blug3k2^X$+7ccT9Ix5E^HeDaa zYQL`CCy~ib9}I%$rN}Pw>x9-1`+?f+I$i1Q?H1z1s|=(~d%wWZ6`5WAPf+J((vlJB zQ!4gfD#yy^a`8SH7)dffMB@XL@o$Qq*k}^Pu{-a$&haDkCt_pV%`_rb9+y#{IW&+x ztT`nZA??|@Q)yNWH3U#rA>*C4)>lfG@f0+RMiljXJ-YE0V^s!ov+J6~C%f9NgxNX!I17H_exs-xNsEyHuVE{RaEoI!h>eY5U@`dg^9t z!}K#5fzEVsn6qJAr&?Lo=L#Ej>|8b19}s|`U1a2oKMA4$(5Mw1u_9s+Ld%D^^yC5{ z7v@!vp+qEPfaEc3Ok6FRC-y<=#=CAt26h`y4o)6-F6w$H(zHlyvbsm*ln&G)j)UY^T!)e_>p1P*a@aX}#QBW8DGaUv=tfloM&>1vC1NAEJT@Q$TIYM zrw{5KLzhdJ$JRgUKRCT?p*L}EE@0&~?b}^3DRIxeo)zo+g)12)I#FTJVLqVL__~U~ zrNma45GA_ll)VoBb*C?sgmn2a4+nG}JJca}%LUR^5Qnaa?{f$^9s?b*CMFs{5l;jr zrX>z}7fs268H$S)Vuux6&y7D4s=Udzh5BK4D&FZcQb|Ei6szK07{9=T){pZ z7Ku#t=n2-;CKjU6mOH~lB@W%$iPa%^@AYK0F*1u9^4oT}I^d~G>C*MaUT58VtjUp& zPen!VBK+>={s<>w0N4zC{1Wa{y5s3-=266e{GkDYELrTGQVwDkOg5zZmRn6Un0f;U zt6=A%Oeq;;aor_WoLF!w=OJcadt({x%#(s6!K$G%c;Chb)>UG?|#jpjwx`A(56q-U+|0i?j)Iu7*&|n3a~SwHATs) zbU_)!$VV^BNDc4zT?D!s?*2WpoBuO9{4+jqIZWO8TN+LN%ldHiilJZt^3eKFM%ixn zroK54TUR6_%K0oooVdt=0c00aiD~i-WhVmntY1;Fw?(PYp+j>uAQsgu{VI_eTn-a- zI!kOo3&wfTK~|M#fj+D(O)Xm(RO<4AU&vh1@gXikaG^chRym;{PRkvd@X!~r2Ku{g z?N#c@6PeMidM{()FzFtMTET0|N{Okrhe^bRvPoIL8u}`NZ<=_-{CXO^Ty6TQK(MI+ zp1uj8C%)-9uUq}`{+@0A*mylUxHj$mMdU5hC#iyiO3o&Vr+*DUmGm=>)4j=UroI|p#f1xT;w6JQXCh?@W?F400g$@_d#QNk$&V$L@P zIP_|klu5D1iV!uh3FUB)hezUj{AoimA?*->2!=#8ovW405@+SfoQ$8|8WknY{qbwz zI;06Fcw5|hk~C$)pSg)%3+_Dx5+f0rBovKt^s0Z@LfR$BDT`9ugO^OwR58aM%}|AB zXq0JbuJ&rA!k6gM}B*=J7YLK zDW#$myIM3Nffhal>8aK7biLTMk(v;MT9Ugst%7a3GU!vhh2??jL=_50tFwl;Od^Z2 zpR0JsfcUH}dfuK-zCN$Z3+h-ZY*R71z?>poMk2D`Ucg@GXf9u-MM=wrB7FNHDRa!( zw`T&&+gR~s5J0WI`I7(bia4_HH;Qsl0>M4Bj$h3Rd<%)B8-;3tcloY=XINoo|5}XU zkb+(M=ye)&PiPaFBBSeb1r{_^aw+gzx?0=-XDxPF zQ1a0B#mt?9ljQxmcpkTMsp^hKzj%Cw$4Ti>*oKrh*w^7p$rA$}baz;0>X0vm>7wxm z(^?;nrF@f6iLO!!SCfwx_q{ys_vLNgb%nistIK}(jkb(5C+&;JYyH#OJ7Y#>o?ib} z+U5WJ>HpWy|A2z{11LQ7Lrsv-zIqNPW23{O;MNp->kA}guz)(@?A5Ge>`Q<*oToxq<+s+-ZF9yM^x%H3wdqy`Z(}LXwP@DiBu`pd- zy@%;1W*m)AIiC)9;Of}Rm`inPP=vquZUlmGu(6TG3`7U3NeD^fe!zQAZ>DVG(aa-7 z$`_zx5Xw&9Wa-~$eQNtrD`}V>)^iojLy}Qgq13uJ2JYG=O3oq&^VswF5=KhMON}nU zSJrq~>AD&tzPtoiWor9aJo4TCvHWXXr|t?LZ@Ca#SszJ1tU9;nKZHW{&S)rt>hk!Q#%1Omgdm6Kq2aF~)rqmel; z1;ISnD>aDbW&>U@sOB}^trrylB-`y2F>t#ICZobW-+Lj&K}X9Z>vOJ^^3jx+sybkB zWR`L4TM-v~Mvm4e$t(k>j*q)l8Vn6*jws>|%=W~07lsW1zFo~d?Ri9_xOK45g{h>C z+3!VCO?e9e;pdgmT&9A`@jAaXyXOwJL6&VZK^H~JwLM&b$_B(G{d1QzI<=_eY9V}p zW3Gc$Ce6D_Ve&*63r7|vMWk3x76&0F7#ekS%&;T1Z%E%R>;|=_GB zH-eiM?p3!FvXkr`#&|A#4HK)?~+ah(sKAaz>^22IPcj8iTgj-=ZzU~8&6p)ttcEg;0)fy5vE zynn~e?5UO0UC11fV~w!*Ex0X*?Cjuse5aL^ju{x2744H})n*Y;(bw8RA(Ic8;mo>O zE78ZaR-oMk*$%;#h!u7hdcPt4P7kL$;WebheUTa?%o ztENj4(za;#WQ@#$yE95r3Qw{r$_?)9z22;kF;QkZ8tdx&uqr?x%P;+o>+IFiI-Lj2 zPR=b(w)jLXKFy*#eoYvZhDAFzJvM@-I3|ibVmOp|^#X}ak}U=lV-eHO;2-|JL)i)f zDtwPYjDdhnU&LZ)ETk7W{BildaND8vr^L;vud}Q&_qHZI8>f02P-iKmvFV-+W0J?V zOV{p4v=br;;tMIE$}TViF@Z<;MxNf^QJGka$Asj)J1;o;w`pyYv^sRfqP=CF2yzeB ztk*_8Ug|N1Rhj)fHY8m`ibe1S{dk-upsNjPuk9I8tf!i1wXgO0EBsxZJGY}Ok~&>Z zkn=<9A9uEujWH3N&zgVx$ie2H>}38r`(l!F7t5ZCw|ueGOWxO%o&JDM$4@5Ik=OD> zPnc7yrjuX>Q|0%t4%+73EV}_isl&FlPuYu!i3-yvu9>!=8!tI3H64@$2|u%SHL&Jh zq!@X~l%vDwjrs;MJ}@#%$r~?Tw6sE6mvri{=|t_|NShw%%J{q4IqWnqh|N@v<5YV8 z{D%*Bzh7Y!4}5z&=kwa>&8#YCPRWd&U`3@%lT5A5F8-V2&rZ9(KA+W2iG`Nke!JT+ z)-^b{?hO-@ckd|Nx(qy4j}CO>md zrY)&-3lU@~8RQ5BI}%zdV`+;4-mwK^hf(X<5CmmBico7LTUJBzMjx8@>H!pLoRaDHI&N~iXC&d9)QhQuhBUP+1U=4-9Int>2^hno|l{YPty zcg+D9=A*;Az1CfswK^R3bDBs$w9i&GYm`{?8+xtMsh%HlqDref(}uD zCBk}5(K6y5Hmj!Mw6FPWI|$2Lx{l=n1<*>RV*Ii;!HWo@(83|CDBGgb>KlVc(pS2u zR0abLDk*Va;N#jk-o)Bsbl7?Qk~_5?;g>h4V-RpOah;9-DH!os%Itp?u!xH%hwlS=1=Zi2Ztj_bDc=Mp_l+Z`!Gb zHe*A@#bsrQmV#Fo1e4YV=F4^JERPjalx{J&%i8*$UbmWA2wHH38sgzo7uza~Td3{A zq~_()vl~VZOr}F9$6}vM#NJ8|MI$i6!YvT>)lm5kwt9R(RV5Ywcj9c&Z-0fRR4VXN zO?%R5;dicBqEr{j-y)k-aW_mro1Nj%y;F(cnmRU*14n!X)QQs{PGWf60%_+K;Y z2PU7ffdQ_SC5UdB60ysp|1O!)e?0>Hzr6WJ&`9Pm^#BSVcga*HypLX5MB)LPEMwL+ z+V+D+>EQqnWm$NfZAv#bgIyooLe*g$*PhQm1sH>qm{_a4Wt2de?1mlsMe3vm4?lRR z)>*I5O=NyGVdXXORR!sky@iE7Ac&7oOrh7^{CYOgafwQwfebnxPZ;GTGesG9^~5E? zNq?@8mLPIwY>uRzt_{{%QwO2Y93Nf7R~{q%gOA?n+nq}hAljL&v+SyVAS%O z?BS-iAZp?Pir5-*dCK+#_u+NX*5Ov-hpt6)EmlyQF`xNS+JGmQ%@b6OsI=Tv`5LtF z8LzSZ1XZ4FuTChwJf9s=^`@(8tQAS76}hO`^T*>`za3$kz6OPCN1rcWw()*6*pr@o z()U6}L(WT*V2lYHfQ2i(ill|K;jx||NAR)e0kQ~O!Zs2uJ%l4+7+&xqf*Oa`aW{CJ zq@8m}F%K_!BA+>ZlGG`V_RXHHqmj3`}LRJ1*g zB0R=EV)uRYy{`J3XJ*$^;LnG%#-+Y5U22@8wCj{+rBL%7CL@emxe}ZG22|JM@TrBB zD^rujCOKh`h2d`A65pJN3i5Bw!`=<1hVmQv^dj9J*Vxskx9x5zP!J{z6aITuldoI7UsOOqLmv>l{EO7~eU)SExUZ@-_@9!h8$Rp*hr zpiI0x{C0$~EvR$_5njO^T1q}5Vzz7$c4Z+8zOJjj9>w@g|CieGRSpFiadQ@htiwZ` zDZe+XXKhXoa8_{~q736Mrl}8%&|{SaTxGBOS#+~UeC^WIy(uSyf1)roh6N^9^<5}k zBqV#e1oY-Ds5S1VyZ<}j=7A{K004Lojo8lFR=2g>Kc6~A7BG<%JX|CNcbT}@gI>3K zW1n4pn5lEDw%{Si8^fhydng394zXyq7{_Ayf>AWdK?uw?lQd$F&izM!aj;0VtMcWHGje{NL0YBu}2^m#>^qb%OKGG5>Bp2p1AjiVcce~@+5p`aV+pm zJB2%Z*QC|PzRTVFQnXG;8FWci6y&9rbq4m-tLZC!KCCB&~BI z&VBX5sY|bb>NxgmyPK&bs=hVlJBfr!vaj$BfKFgYccgdC+H-&`zw9yo76|O(orVz` zHWpG)Cl^d;F%wn*z=r0Y;me=PN20ES2VTO~`Bu$XXGpf5{LZJFv4|?v1ZW*(er3(0#h7-udG5 z(NPC&Gf*`=mh)wJc}k!7&5vH`4wv51YoQL}E`7|J^405(ITMDi2Ag12{ryV&znz`C zcz2@dZ8XF}Eon5yM2U1NA#sd30$iT5LX>lw@seiP%MPlHMjKhwbY%%EtxlY3k#~rh4-N+r2pBQ&}D7 zi%N8}6L^d4MB}2IXfaCZ_D7a&23A!U1IQ;U8>pFKxkhP(^b$LJEA5?~VgX#6ymo!` z(o;e~W*sS2ih{5E|0g7``~wQ+4@AM=>b5_&I?j_o)4E~^(&+eQXN$-By1b1Q1N^T& z<4vb3`bGIKbUZTJ;dXo>w7Bveri~pY`4-S*RFHLnxU$%KtTnw10nitO>ewuDH-&YI(V1@ty5hS%qRK$gpdOjs?lunLe@8*jKZ51$x zDeABGKrxKoxEv%H+)6mrlOI*}uvGOlg%77cb5(d!6^OeYtN=1c*eNdVV5hW*Rw9l3 zq?COanJbt<=Y3;B4Qg5fk9;LHO0&-QtLtOGyY zZOkg30$6=s{aI5gK)9rTbvz%npjour83zj3wdZ80Y;8aW6u_YiG6#*~N0nID3NFGCu+kIaF{_9*bE1?65tW6W04+awRXxry%`|Srp_Lxuc<_1}N99MM(CPnUskOU)Dv5|uTn5`if zqXjM&5UOaXr*|oV(Z1;nh=#ur_WokRCZ`U6jtfSVLl`a#SAWExjG5wQGyb(c`H`%4 zZAQa#zm`h$=?Vok>DPccUM*vRus@V>26u^E0wJogL%ZX%6TH;%pzElmvbxT;;`q;@Byo1h@!h)BLsn3@E~I~FC}da!y(fB|~AnJC?<^S-myl5R<~aZ4%a+A1AA>~5-lK7yxY zdf;LdLz_oPiXE!Q$6=PlDyy!Uo}aqx5zVG5A0C=r-Od%1!JSpBlRYkuRs2(zzb20? zo%=~IwGWjil>~2coi*5g3x4%0bVTEsL_SRs3nTEcx(HN8;A-ANOcAoU|6P1=*KB_neuemcb25 zSvFh9>uTk|z?4=Kib?Ft{T)y3jBf+RmM4613-K7{k4j=sVD~IVfKX0XI8d4(Ly1@3s9f;XD?#=Ak4dI{i|DpHD z|J?-hukk_efhpwp-PXYIH(en;EVTbBeMsBssfOHll0h-4IecP@9`=lAk0)XuQ3y)w z9r1gM!!Jxxz{s-g>EJ4utaU1x20f)#F^9ZmFuuM4hx0`|IgY$#mJNMu%^Qvqs6A1u zHA1g;@pNSK1dEXUX@(_+nN;9CHXp9)%{%{+r0fHkwW3yO4{^$a_zcS+%DuMA@Yq6l zs=TdKnkG-yRJA~@+O?qja{V(!WPbcHjt*UpR_79-=DTZKk>TZ%fQ=baisy@GD${$H zDj#*5d7d_nsGx^vW$y=S;bJr9Q+(?}zXGLZ>g$5o3K>5N^9Y_gT@MK*Qm9LE8AWZ+ zUcY^3W$3-T5)2@I{557YRSo8VQ~Bs)VB~=vJ~fN*Qt{XjCUsQYFEo`rV5KCB9VCy9 zhcQi4qptIjh8Xuz1dbdyra;vD`>~+trv5s+B-1<;Ml4oyVu!~O;IX-kL%|NVf;^-* zkIy-|B*o6sDduVpN`u7wAt|f({i{O3-S%iE=zek9U0?ZEGX|HqoSvFnYz zFc|a7yQ0OB!~kLkZpBr>U(F=f6D5`v7u9=*$zSnh86{4TpOOT}t?3*%G84pY8DR5T z8;_(TLA4mW6cmr)D*Y0ZuvUNnQQG~m?N$FQ6G}rkV{>(P(I2?Kf7-ETJUyEF3Im4U`r_N((u0dzPxbq`M+ms!hb~`{y9G2I7~hS zy!#Eg(z?2Ge4q*Xm&%#93?^iI{kozLz(%R>ThO1PN<#JS!_YXP0=J4X%35~+mo5># zLRmi)Ez453Hq_aco;(l79NhG;rt&WpL`fRp+ZGhmGJQVRO2r7r*vebT34Yy|3#G*= zUVtq{5yU+H&=8pF_ggids@b0%+D3RSq-Sig%~KDNj-Utm3aU(+l3xho8aDM-nFcyO zWQl$A73zMkaJ^!hXebf+`h3lv-)5at<+3gxD$oNm?om{d$AjOjtvhAgNbrBnE&E^G zy;W2j{MYXp+-V3F+}*W7i<3Zb3tAk46)#d+BuH>~cXut&;_g__dm(nu`=s!TQ!!MbyyoEJ^wX=8*@f+`2X%Fjb;ig_{l<;Z4bgc?KlFd_Op)pM-k zy3-@)G*Ygc+F_*PZNd;1j6qjOCILJ8%#C%?IH#&GS90ZqwE^9srGd{JCLoyPwC?7X z^vxso-EbCn@(qzC!~;oyA;#hK5V_Q<3FigxDc~5ZL=xX}^Agi9G)Bjfbt+g7L|~GL zgoJtnJz3LttB6^*-;Cw)vnG$t_&&-0ZCuoFo?|#G;LVrZv#fCwVeXx5U8YyNn7N%6 z!5z+D0{ZH%o6`=)i`>NWz?dyIMIqd|IbqO=+4Iu%Vj9XQb2JNq2rCYu_+^2%&jh_u zIqU+FsW(E%$YY=R5UjbCNrrLYVcl4ZEQtC0xm^p%Tj9@S#Oj-OMiiQq#n{y^aj;95TtcNS5m~-C;Tn|QohuzEm)IR3g$Ul@F~CU6t(sY%b%fSGOsXa1gf=v2fv+ z9BW$q!3w06kBwX03ZJ2s0^4!q*@sF}%ncLL_(Vzy-;5bDxrgAqqHdAMhHuOornbUE zySlQ}k3)Z=lthKmH@ckU5gH`!glY&T;$~)YRZPWm3uCqd(5$iuL`@A>HDIc=ea%fC zDj8qAz$0OB*w7ee4>UYQi=D!@ooyLtIR(5;CK+Ikh}8N@iwuAJgdgr5AQVrWgW($u z&6yPg#l51=-n7EUf-R2LM<6RV7ZWm8j-6YK+`PUKlb`PF#l$1CGg@ADmBnV)Ab_1o z94`kOHgrj28 zqiLx9TnKUy+k19#%V;6=aS9I7kbozFjBxUB1a%sX`jTZ}$f}qc#u^!=pCMs6ox)I% z1>>rtWGH-3I^|NE!60-aAE_dFy0*moW{OFAUfEFmBr=*VGij?&a)L3|*z#=AeuwG& zco1QJ_x;)8?fe1pEp3_42JTr@JN8VWt*y{&@gw0M!$u^8{3x>QFAKsJYHsN^wiMOG zAFE)6dV|-PSb}6YRTZ0}i@k7~rg}_Wl~S^LHi;U$PtVQZvR~Tow{r!U_r1HS6{P%h z9!HU3M(nas3)M$frqAbcN-jH7;Nk`BODjSb5vfbs%PX7{2ApdAhaA3EeCi19G^od( ziXO#bOP{xo!iT&>)*DT&+%>C?75m!_Q{p94OjsA}$c;S1Y|56z#QONnEX6$gYO#EM zVfxpqbyzWngpqULjw_q*cwpH47zeBUzS>I_046D|h<607i6C0BTGu*M_pQcWHfy#g z_W}*DMHlCfJu-fHF*!i>qbulG7x9#?MFsyx5*n&kwicK8f$Ap2puEA`eD03Q#8jL_W131{RN`l;i?!bbh`C@fmXQQsv}qS2 z+a)GTC*Kd)eTV_Fd-|AJwBn!E+R?U(zU<{#?j|oKvN4Gz&Le`O2ARinYhe8jOH&5v z3X!Y?1dQ7Gp78zZk>Th#!sJ5n+P~@{f8{)2bsc@0L?4+ zsA*b<2bscN^r65&sl&F&cMJ$PySnJ_+H|}va1x&w>^nRR&-bkb+hLbjmnb;Fhr;8T z-S`D<06)MOo-5tO4ENeqFZ)Q;HYlUM3IQD64XD{SL-qHbxDwG(}{~cP7@$^ z;m^!XC5G49k@5ma^fp;`p5?hOv$tc=f<2)r$u#+D?C?#S@^IGTZmDnpxFkDN@0~-< zKp7tybDmNB`wujdTM-<|1BTk|FI82&KIQe`7xjR%MrlPA`5RdZc=2@2*v6I*&WCg% z9y8BcQL!D0?UYIvo>??gjv7yWwVMo`FeA(50x_O7N;AOY(|fTTR^Ucb7m^y!r%A3U zT&-d~oR5BUtcQO&H!K(tAQ^0Cm~Z=d4w5IlK&m+BGzU77v1=9lNFd4+|LoVAN%w9)Le`nuU&KQQ9_y z58)adCi?{)!(GlcCGa|eUa|3riy1u zM)U7S>un_80T?990K?Un&Re$hlTpxx1;~mm1e+{E#efA*41Y|xyI7naoJs-=pNQed z%kss>legP`0ruQwsJnrkZm;G47)M;W{3!6w6{z+GMB581k}6FKVXV=EQxaQ;#C_H}JDzvLb0l3F1(` zBX#N8A)uf4gjX%xVLfg?&eZ+bu-{iQ(#( ztz*XRXU7gfggc*~#7`0bpN(t$7YZ~^8s`sC7$M%U{HOIn?%^c)pk1O6JC>^#?!%~f z`E#orSuHZ-L8v+eiV$A*!NwA0xxKJc)}r6bFI=xS#b$|dQ({#1mu#r0a&E|?Py`&BJ#r+#;8*x z#J9&_@lFE)#1t|1L-C~n>hVMq@g!wLjChtXjb5g#Pw=-$Dx>2t;TvcoWOUIhyiDZ=FHu?2e-Z3Z*GJ2m@Fq|6M3W8zE4ziQd?nebze0q^yXl3mWJhT#!Smi zjnwxm-j-&G*I8=dll}?5{q<~KVfX1*3QQjIc4hUylLD2@Za%nWb!x3pXHHfTYsr08 zuq#Us2vbVe9=o@gP>Xv!!f!o~IQ%`=C-yy&01(NPsLX(;Tr*2zBs;~BqGun@g(klc z!MlgqOcR(~9E^iXRWu?gVS8sOW7Kw}xZC$aQ=t_u7wDIWs>*08^^d-Boz3FZj~H(~ z*Q#dAZww@_bYLyrqH0gI?`JB?CqKP;)ChH;qR(3-;b4YdbFnH}yq1Sy23<3H=Y*BZ zCH{OW-}dxn7#p2Vulgf1lUd}qmCuYybgxda4Ao+?i{2(o#_JDcbILC^N(-+L$o>=# zN$^&?zGu=G-s>LVhi7XnG%X2CczAP3+#$Fu-#cHKv`AT(n?N0%srVg+qlj!nsfP4p zNw5vJyzqxaHEjcHZ*E)fOE_{xaj6xU%io~_dhVx8Hd07M@5J{D{`>|9c zIWFQxFZP^}KcpGeeBTC|G$FQwKQeE4pJ$d%^#vPFx7^n_og2O0$I~{M|61T~V60;T z_U1zTDII@XG;6oFa-Qx6`_CH${>RtC|Md62P!M&R{t4H9J*!2NguDm@`#r=dG{3Ve zXt(zpuMELt-AQ5m>P1a@3b)Dc^MQjQe#94Kr8`wra6v`w(pew%D5b%FIHekh066 z{m~n@o2e#qblqG-g6>teZFPS3nVUpal|pl%;>(jdb5-SNJxgz=e50e?+YV5(bE<5@ z$!dD8-a_nxoE>kvmwIWZk%>tj-%yeKws9`lfKYO|hVXJ+d(@?zbc`-!e-0J}Fd{2t zb@^THf8YwO#DDPSymWM>B?hG9x`q!l5+nkDsB9xwpJtU3QLqKLHO~bK7PIKwmv^gsM zw1`hA`=IW_*tj)8|LN19RJ6Lefu)Y2CXK^{nIE7@(&XgCY-o|CZOp&w$&o`GlUICb z1(iUAaiP7S@PYJU=zJX+23@&OK&r}L+5AQr?4lETtp?xW4 zRwfqxEN$w=a{(4S)$2_qoOo?@BV6^~v%YkpN21htz=%WA6UFS zDfMv+1?Mrhg2M?97Zr>R=eD~G#Q$@_2ZhhR&v4mT05CIIf%U* ze5;(LvywZc#>#D9BuHw5Yn}A_rK{%x)9V(Cc+?}}(r#yF7E(06K?1}<(KRg8&f1j9 z>v(3(=0?fngh7^>?9!Fji5Xg~frplbS!HYQ61CtIDsV%iA%1Za|6iRI`l%XmK7M3?EeJ3RD5U0|v_4h(9z>(rS8CmWM< z-e>Ej!>OojD0qkL-1)mX-IRi{;u?#YpR=55cB!41hVylv*5io7(n!o+w>i$%cXw8S zpK>#$vibeuJYCT*A>q;L_s;pjIAYt?)WldZge61k?c~b+dk`%H3~XI*2vyVFVAq;^ zuum&HJY~24*sdy4g&l*R+}DufC?rQb6w;9igZzeZEDEQ3ak|w`v*%c&oxuUcb=-@U zGkM(F{C-(v6@nciu46AwY%JK@fBJA~h7fXR9dx6B8D_k!f}85kAa<%}Igg9W_Hx6I zXY_VU2RC!0X=Fl&7acPy0OckEiXywzn3&y@Cm$-Bj58~YGugY9?Z{>UmlfDo)mnV* zzCXh17rv`P`R+9>uETZ`sqk9Zj8#|1d6GY6VJmmIgJl=Vr1T6i14{x=-;kvKa22FI zfXJr{ib5Q!mM3G=!UGS=4TcZ3rdHpnwUkdKZ-uRH90lwmeH|LU!6~J^w}M)7W5pv?d$!3*HRuSiAvDwQBJd(~4KVyS~H8Ok@BBCK=q3@?pDg zb3=dxQQ-AQ3m|{WGUMsO%X@srO~YYZ*dX^?Iu+&0j4HR|C`~sd7TF8LQQ>(& z>#OiljQSbii{Y3VL_Lgs1VDzMe@M1`ZKmireYl4jbk^pQ#=lj}#$oCHL%{Wr9bT%- z#Ix*q=;CZ=2YsaA(85k&W;pv86eF$#W`0nAFTyV{Sqs;bCBiwfa?hizN%d6OK}P=R zI2&lJABsM$@?g9%hNMUMII5LNXFuSnij6T@q=G9co$nPf+Lx8O_^<_3o#+)gQdl+9 zY6yBN*;pOivKP6-wOLznH|{-qy_E6vi15o-f!>HBcXV`etOlY%4*8$6oBVfBKsuM3Qdex<8+M<=;;}8_WrI`aR50a03CAIY7Q54TfG>*<_wbJhf+Mq4CNIm?fnm7erUaqqzv1gxf3Cqdu79*|@VT zEu3Bv-Zy=Us=0p_DK;^~YPO}z6>>O%JXhO_m#Sv9)fCop;Wx+0Gb^O-dMHv8)=MnU z6C;CXNld>PrQ4%E6|mQp27bH5U<+`{O8S%faPgqm6b4aPPvRoPp%k{eGlnw?v7pJ& z_!lTcEu%c{0V0o%H21ztIr-%ZFGr6d`;_jDk49MPi?W@WKzwsW^+U`>JrT{PGIFvZ zEZ4R$-Bz0XOtZ(mN#fE)hST$%A3>`aM_2u(Jy{>~g!yAR_@=pE4(1`5i&6U^zvxAl zR^Rs|W)}&02D=lk*9kkS0xi0>a~wR}KhkTPBpxGuW~vnwrg*RnH4lZC{6hUd{%u@{ zErhFQhrdErxj!U`(WxD*e4YX01KeDt%SF@S@aBV0Ty z#c(id8%F@DTK{zl=a;2r57q){V`t`AXRloc-C+Y`sXmS`znq3Ab;WteamA@t?@00V z0}3@luAK`9lG6iECplGCH}p&&( zuOj50em7qRN9oRx7cus2eD~rN`y`x@U- z1Z@Lw*s9e*$?2{ry-uSbMhSvQ9U7`~n*QEs#InqO0*Zd@O?Jcf79 zyycx1`JusjIPfh&xS>mk)OW889npZR_imb}r*GH(Pc0Vyg#!LR&Id`zcmqw+Gkzg@ zf-<&7hv>rqaeKL${&p-;qv+g(+ms$HyS}x!O^is!C}j|CPC)5rF$_R4jRFE7;SC13 zOj2U$+?pswVPWuy-}|+ELLuH@OxksD!=ea^SW8Tj(B3* zWV_$fp|i~g&N1d~^)0_l(aDk1-c%~VWIG}uP4wl8TLL+=*ru`T3G35eW2T8Wa4;v# zC5~zLe0j=n>L}&FwrC>bMbdk-C(;pDQ_}5e$3gQTDccBwMRP6-kB$z^VwEd`=2{E z8e6I+y)P>?>^KHr|GK^SDfYB?%ekanjHrO5g~YEQ(^#>GZecAR61AX^&g~WM!F^maqvF+ z;d}IGxiBy-MG-^+(n1EMmck6kOaVJP@q2WO9aVoC$f}y{9P1DGEx)qyF$&hX(f4~x zU4@LEFs77GWr^R(Df1`2`w-_fR%D){S8aia#T*RjOE9&3@25#*!I&d=cTuG)#2eVo z95M4)Q5_Y0=AI@O}_ja{-3qLuZH2?A{-v+Z9lm2o`N^ct&n zK`1*9%+5tl*_e6Jm?!!*NwrNB2G}ZCZ3TXLS|k^f1g~T5MrVCW-H>Ayw+R!uS3MYP~d-%DLjKaKTHZw-J^4u+By0=>Ffc_5;0K;cL_bD=ERG5TcOMglMz#;SfkfpvH6UFq0L_5(Q!Cw z#MB|2^SbdQAx28tEQsbRvlzGzWhF%U?kc$l7ymRwLHmICk1q&ylnVd>Dq zQQcRl;kyb72XZ^gCGPQJgvQD?@idXGy>3qLUL{xOiz+7EEaee!mf%V=+PycCVIvsL ze3Unwa=)8A7E@P0!+y?ZR&a@MxHgDtpwq%pf3YGiC_-EAROfdg%nYSxE>BrSF}KEA zISfRc5Xd?3*QCpTjvZ>WKkBOXvAUg49cblfd9QDN$Ff!vgwy+J#h4WX)BTgTWSZwz z$JNE_FdE@@+ZLA4fl5Jai58#+F&0id6%Kt^!D((q-7YixY*@NCaqK%+p*q5>C(S*v zX1p@VTccG$)VLlahmDzvGWo3svgIMpJ*}o+)d;Lxjq1kh(K^k!TugA3HN0$0-sh) zMdkBt;?y$;+x#x(ZZTLY@C8^8Se_T2tobODiP!NNCU+LA{O7F?{--75 z|9z4CN6<+74;1Vt%FezsA*1T-ayr;PIb7~1RUJMw!T4ga8vErI+_g+<2R__>20_Hg ziFxP>@t6)`GPfWyiI|`Gp%2NTSy|ae(Io5x-1LwJzVwLzOY$>8{fp}1Ut{vr&Z#z? zEFVP3Rd;tJcUxKKu_lr^AB|b}s0kXm*vp<-){rQzpg{Ig_v-^*`fr9h6(+t=y)ogX ziko6YAflW$!borEpZ0?_jf>Ve1DH#FA4LQqXJD59VsNK~O-IR^llg7@xs3X>5HIbCLLz z$HMLfvlLBrICE_jPKgZUK;rd>pQGOG9eE3*F~PIX->jMNu4WjH{Fzz1D9Q3SQA?TX z-5%YyDIHJI5}g^%qBtg$f%d_$#mXv;pSOKXupz;f&0yw#PEf>QL}9U-@KF3x|9AZ( z)8`|JNue^Co6FFgAz6d5chJMJ@tgb=4-F1reuC!`4k$N| z1cZr?(VSBk{wrK7dpdM>DI~5~>WR%UD3MYL(?3g;oaL}X&Aj=5SGU|J*z6aku*;(M z8tM-h;V~8;R?QuAe@=KLq*``u+PFe^=@`k+um8xQjFMQGK+VyT2Hz~?5tKVQWxb;2 znH(X>-oV8Zg51zVgn0CI@fU+K(?=^(-1Z${9c^`qOqPX^R=)WY9JxdX16kFm!iCj- zA?{;))82Tj#mMuDrTifai_6j)rfR%imt4kez0616KxOY6CrJX?r1M z`Oax8ugS&3q_u|wo^{iIA^ z)v=?@6`GTolUcEs-@Fr^*>TL2=-v zn=V+T7@n!lhEo7pP=ZCYdOl4bDe&jWOWdT(bPYX zYdU0+@LTdiPJ%egi<^|G8{=Hv=9Z2nSH520tWS$)^YJx3#1Jh>OrZJ%^w~k;agw;%DKn?nKCn7Az^02b)!} zC5#|ONs+}H?5+QSr_Jl-Pn$Pw{72_2c}as370;17-DGLQSZf zIJ!>cV>2U_lyP-a3N<(;2s0=nIEFDkMs?&b@hIp2(P?^F@1yqXs|lg*Twr$Niell< z%$OSI=&ZAsJ~pU9iKsl7aSV*lHwXhpW^=sbe)oEB$7fUooFa}`9Ec+RK6+t;6Wd0q z0=C}9!N>O`35`yqRtukJmENKSsW7k^@^qMCa}V1Y)?|`>Bp091VI2L{#HqzsN^DPK z>;H5ShSSEZv^c?m6c9ML6;Mt-!^!JlIHWa(kD zu9nKR;m9MeHCQxzwJ@VnVvqJ8t25?XNIP&*4GumifjCxVCTASHSJ|8xC%F)p%Rqj- zC{WUkG}}X0Xi>F$ey_^$A!)qJ0bM&8sC(&mit6NAk0P?TNxug9?%psSbkexagVfWhoWtZSTdx zjPa~fTd7Va4FdWr)B_#)btVw)4K-Oy=Q?vO@yxg`K~*Y9H4WjvTD*-z@t*j>PkroTjcnmopsJr$ezNQ4v&*yJ6UzeYOt6W9$Rg zY|JGQLXSkq+8FUUNx@iHfL?;b_^^QlZw5W**4S)}ZMv|b&LOKMr59iipHxhLnd>xp z=Di`~3XD6hBsQ)uyB?`rKGpMxnzJ!wosmUh&+sg7q!x>7gzp#QORH$L7X#t))IM#> zK?7EXAJgtcYx&jjPrpe`#~LUGQclJL$qCi8V^y$eJ)Dim zvMAUUO3EjwxWdR@aCzkAN*WEZYsDIeR}SvcVje##)x%HLpo(xFnLxl41{a~|mQ?c` z4C*@wK3R=f?#oj5$P_ z@14DISn*>Hl$G&AqXh#159(6E(}~a-2j{*@?H`Mpw~^LoYlq#926qAy`%hsuqMEb> zWvj*}44S8brOMM+$-eo@zur79CmI5o&*7xY?IWV8M3|I_St%4_n(4GSC1h6j@h{=g zwL0Yl!QzqKAC+wiW9}4AIb!r%{S2H>q|>Thvb)9O+?2t;9~%f%1_c_{2Spf*s4rvj z3XEE0LYoE?*uJjkR<6`X{u)%N&LHe|I%LmO-->mAj$zi9r{5p5RxMO3aU1knejmbT zbUw9V8tz<$c&^9gK(+G#LhS1a? zF4t|43o_}omgeJGG;FIwel*AkCy*=TxT)8%pgTM~!5OIyK&8iGPQ{X41or-Ln#?As zvO(9Q3RCogT>hI#9{z>G#6QmmM`$h~%~MwbO=gBNp3D9mHl=p^-(8imSjy2kIZfYw zoF~jT->S!JL56Gr_D~PwL-RK6U=e#3y9iEoV0|i4G$`9T4qsRpv>6_m-rhlhOk5{V z7p8RJxB@5#f)D(BsTerGL!j~SgY#=#$J7xCUgtzZ#TaKI+OJsEvAAhuBrl7V3`tOm z+tH=OdcR`0#!^sLhLL^U0&+%$XOl~1QG^+!O6GbR)f8^(5}ai;_8xID(2i*`aY%i! z|2XAnxtX~HIbPR(vM+AoQjG!CE<~1|fZp+yT}RY30Z~Sc#T0je|54TI(28UIJg2GJ z<(I;`#i3i(D$(Bb0*17l_|bzZ^`i%u)j9XVvKq@NW{XQ8dfu^Tg9#9=f+7|=$gBPl zr$#{`lB%eNt3*vFK+CZ5mK0!TGurbQFlyfC5K?Sl_Hr>N{bR+L%4KC6GH)|0X|1y= zW$5i}ob&$00@Y}zPF)GrpCa;F!kYs2dOU2c;yi8>#lQr%RiSrpyUxnI^`SFUFFDF* zj#tK6BMf@lTzkFW82|lMBWHp1Z5OHHMR9K;Th1^IouZ#N{oOQAJVl5@M#+eG2PT#W zIk`Ye&i3J4Sa=eQND0wB6>)T_-Ceqf7lACO4V5oG6+jo;$?QrCXlquQx>QffMO4d2 z(5r>tvYFZk8>S?I`l!keX|eqf!?WSRmu%Af^`ZWp+BTnTIt8^S^c8~!Y~>puFIl-S zUZG0Ml_?kA46!?uwJc3f9$w3*CFff;illTqJ7@&}z0J)eV^OD{cgy`t6~{}qY* z!PsWkJYR0lTS|-Cm4vC7_|M<`pt+F2I+3+fBcah3S6skTk&J4~)ap@@p(qCG&`O;W zW3aL_uv5i6F=Zg-HyQV0o4J7}mC9>i32k{~Bqz@>hM5pWo&|8s63)pZzjtJUbbQpS z+a-Plw=@7YcBX&*nwrvujG=$;Jk59{V%#NNA2u?s98k)^A1#7eSDXzaU@1NRX=RvuEOOx#Qy8A3#LWyzTy z0>bp_!vnVWbBD8HO0xPc#&E>AY2L>r~%;VXWL|K7nA6kAFLxSlL z%kz)V2^&k!=Cab7F4X*&8_za}Ph=Y(?}*n*%)Ng4M4*VN44%xAW-tPGziEW5E6hy> zfG5VStpRk0yu^n+*k~h9MchN(8qauzS&|Y_L*|q?b=m6c7T!|jGD}L-*)!ht=@m59 z4e=oBtS8^8O-4+mDU{r1=@rL6fA`GRkVsxa0yQDgtxr%l5be~@nr>aND$YKEnX8w`*Cy|@^ccA>$Jr#1pl zd~sxl0(6}yCnz`_4_F*#vO(hC;R6c8B8iGx$)OovQcuEAy1fghiV+WI+Z32R-Ph3QY6%%_ z0ZT?#*q}~e_<(g2LEM0jgjFR0e5jBp`M$435sfH1mC={_&`j#W@gRt0#0q!grA!(u z>R7X8#UM)=^@d`mHvG%+icf&k-XFiGURhgg^a6*26$KP2!D#B$YAQ%ghP@>P$8m>oiAShT=~$7SiKit|)(j%`53$L~*&Y&AAoWgM4BA6XF<9Q|dS^*AcVF;TDn zcA6(dKrxtS9J$4qPe(=pp4-EC$^ab9M`Hry5hVZx7yh8+v7w_TGNQ1E<~@asm6C=Q z$?xQ&HkN} zC6&f^B*S>!t&N(?_t$O^s=C89TFK@I#(V1)4{`PSYT38#(HO4}rj!f)Gwup|dFR<| z6dQYMm?L$luilP_029>@T&1LXIwGU%?vGjIoneg|1;&Wl*$t`U$ zOJHG`(i9#Ajo$QXQ;iK8S6V_jA{0|W9;m66PzMj@`ItdqMH+sxNr^L|vssgp>JmGM^Z$qyjGgbl_RY0O!}NvzN3ByaSJz*TZeGB(+|`R;3dP|=GZmudRd)Il%cT0s z-ck$I(I(JLobN@JJWA!EUNDhw>^U0c`k}F#Gky9|>ebo|+nxG!h5cE@NOg$Hs zwzM3mV#9EihVx_8Sy-lD+rwkShMKov$Y8^N&dP{)Bq)NUYH#6aUt}B+k}hFYmw-Wl zs@1DbeperP-k9p-I)Ua0yw5c9ey-lIBwJToRCi+gT!-m0CGh6?wMiWw3HEt|4dh=1p?{=y}o857%9?xAra%Fi;tTE7%iKOBhK|Es|GF6QTiW~z;Jgonq4UFX928JBd z-Pq$BiIC~p{BkuvjBWe#-s4^>#2kL$CHf26`@z?^YYXbDtc(XxI0FE&)-pPymb>&r znK}JFKvQ55Dq#Y#axzOKuC_Y>d{PQ*QXyFIGCi-9s73Ijscu@Q2>Hb3%FU2m?tMW+lw6C|)T zN1hKnEpp2~TxtAwy?M|Wpv3LC4XIj7f5X_uKk=^TSJQ0oRIYYUq~`segZ3j_pmXhm zQA@h$?->TBic>&H*ODgbqRQhIYv8;n;s&jzpd>ExVh9lNynVXl+2A33H4LB|wX0h; ztzb5wxS%2oHdGMSWE33w2F2a*!Qaqeg9^vt4AcN7sQ0*gc3ol+5;4L?)O)40;U1g= zHw558mfEk@jSzz5_AKTww#aq_-cXrlx1F8wi?qO~roV^H zm88%xmd2MF>Ozt@axAl#LR;^)-X8p3je!?9oA%ajI`DO@{&x*#`xgqO&J#Z$5*ib5 zCK-@PA$BcgET51^`!9IeB+3(aF3_yUvB?v!aB84%~WsfQQk zm8QQQmKZeSi1%6BY!DrDK)n^Fa_MvILMvlL_QG>i<^CJ%tjJcacTJ|?&)9f`aAFlB zUSsmXX2GXiNk`0_Pz8wb6n?s*)T;9)pYSZ6Lvw>#X!qn%_31D)*ZJ;oVoa-lb7{y4 zuP&>&00&d-bT*>g%VLS(g7&M(2am+eXT}t3hD}WToTY1KU+WqaUUr7&?wRqp@bgR6 zJHx1g6#V4;e{3ysw1!$QDX}+%1(W+um57o<@#=})>2$NHu)7V#T;pFpZe_Pi#lHyv zR?DoQ+J{W1Mrl(tstVl4v&OvqI&C4vSv56g4g{dRXOQ{BrT$o?WfxP-t&cdZS$9JH zC;9w`1}ARH*rwrc--|G7o>WSod{4^IdRxaM)W)9pd#n2g(T2~P?|(vLG931~+%Hm> zi#ZeNHAGmzGgaZ3gE7%3_X=o&WfkNRk&*;yoa0NH+z}MP6sRhEQTPN%L+FPUCA90+ zQii28o>658R7!;@0Ybth4Hy&|Nmfk@E4cQE`E;+oJWq|pkd#|rP+fnl+FeM{;wE98 z7cpS2j|Q2&f#V1;3e+IrmuHHfN~Fj>a|NWzX+wtt-m(xyZl#tQo@7CfBKNSjWkyk1GSV`L6E;{yOm5Se2Z|BKQQWpm`^c`eZ zd1mJhD~~2dGj=_4d-tpvK;+SX9?J!cCo9mk4T(^W>NAkbu?0Jzk^C(535*x3>hmkgzY_U1@YTR8LWg~lSBWIbsuTOLl5%yvB?Kdw{=N~)Mnh1G# zv`u^;X#53xAtPE9M8u!T$+B{~+k!jvlnHNe?|7YFy~WL=0RdmO`8d4x;RMgCJhKVE z^2moAbWSq)6KheI7Ojf@t;6qpKeXmdxJvIWVJ29Uz+05e}HjHM8pM%kQ{sst3x*v=wNhn1}B!9hx}oLAx4 zA;*TEd^C-HoqS{rYvFX}W)2#;F|d#dY#YYiTnq^op+^P@|8( z4Tq%;1itz>sWcF70c5Qub7vG{IFxVaB4iZSD;=4|iHeEn$XPdzrNc{{i3p8%Ubz1J z?Z;NlVYpKOIi1m=$JfPD&oM7^+C`wX-d+M(6h2P&3ucF}i*b6#Abd1NSSU~rMWMv4 zMno|+5DLgKB$dXpbRUgl(?j9>2*I|t9&nCDQw~)M=qavRG`Nx6x{yq~nf{*H;uHu4 z?>-Oab&S)NPed7~J;sg@+QxoOkJpVR36w9)kqP1@8{k7jytfUxB>WtGX>EhVo+Bsh z7c@2OGs!Q9Of&^XU3E4oc$HYW2*aqa#x++ng}tvis?~tF`>jXL$k<=KWXcvLtf<34 zJkJlxs^5R~I?!D>Df9RW&xr`D=f^45P+jph2@Q#^Af6URj08=QrP7uLu^&J`Q;Ga~ zmEkz~OebL!H00>d5tK;en9gNjhOR!#<$2@4MwJ!~yZ3zUperV&ZIWK8&>5FJ`j=*A z=d<{Swv#V!M94ir24#Q7XWL%&05ob_r$_Hb43wFzcXu(QN?LMz$!g~@iQ*exP@Ius z>F7G+$J=|7&8tky!a9hbr}~?++w$Chdg~Tt_UAyo;K%)AJccdz&5q#D&9Z(R!}z&o zy#`>kk_sC(Yc(5yK#!A3t;eROUQ*%M8f9R00|gs232Hirun2x8j%xkW`|g&NOlk3z zRr&3O_8a{#*Rfm)e-Q^!pIu)ZZ&byL<2y;OeVD|l_Fnog&^10lK?MN7Wp$qXCwFP? zlIF=jD(8fUl|p~Yfw{PYTve+tKuOIc=GkS-J5qi(Z4B}F^!#BRy%!*P3=CRh!URC{ zcpN^i^ZSt=d~BlzMPmE*S<>r4Ni%2M=`FVr5H0?a|AfA|zAif^#(;0$2LBstntl~+ z#wKXEW9Xje_2>=Pv?A}ynipjfg!uXt0FKO?rP-!&x8cg%{>|523_tTH{55*9xg+Eh7)Fd+898bOH*l1GX z3ztsLHcVceD-tJ^RP2N_Xe%et;q}pM!qO-($~28_#-zI~7U_syY>KPYV$y)D>%w+z zP+5t6Y1gd47q+b;hl#RmAhc64;gb>@YXyJ;F0Z@`P*;I?D-txMv9!MejM6~J z5U3~dQB;UpD87_Pq-S7{_oNwP%o=a~@0H+hpp>s|OZ}VKVHJKStr>|n5n(uKl*$Mc02l^I5n_OMG2-Kri5h)TczB$y z-I1C#wJbLK=-6__Xka&AqJs|%%tJzrnKMY=8O8Q!C?M_0d$Gnn3AWUqGX^;py&@|y znyFr>p4M8hvFQq-+ITEQCi%xMhxa+LDky^)%L&(x$+3l}8SEcoZ10k$jal-VIPs8i zNUaL}TbGGumJFTcMj6|&6MrL(q(lOb{+7<{-`8>yA=mhDsm$y+{#OlpnGC)y>f4Z6 z#6~Q_8+)qYNl-I?R$Tnv5}!q{^d`Mz-0wfTtWac6)?Ziq^iQgIABFh`loe0#)iS{} z#cbt~I$72l(&WUzVuex+mPiU3rNWvD>sZkog=V$z5`4!OUP|l)tFCPAtkN~t*UcAC z=Au-BGDU~nC+WXi|8YIJP9aGmi2r6XSion$Pm}H8;&4R!MvCZVus{u|I8O|nli0|C z%U;Zdl9)V5uqGJmrz?Rk&DDy=>iXdA>jW4^S=q3kA6c>jPZkbc*ER zB1tSmr}z&P#12^79s2)CQxJpZbrsz$nJ2n_fed37gPHd;umOZZmXXTIMCrVG{OV~B z{q4*Vwfxx3R^p2$^Kt(db#E0EXZxjlBaOS$&_Fjd?ixI}HUxJF?hrgcfZ#NZy9al7 zPjGh&mIQZ5kPsjtY-Z-I`l|NP%%0k_|KC}6)$^S7{p+=^`&!r9mHaa^$U7S8N>v-X ztXH8zHy00Kl@i8e!zWzOX?RIa`DzqX1A9E0a3%|iX{QL#THW$@lV$yu8jqDg1$NPb z5V-g4O2~~NDl}L3ZdyiO&!0T7CeUlcTh5NFKeTK8)Z@0Xz8b`L^d6aqCJ}S%sWtdD zr>?7BmWN7vl3!?fO!5oxqZ@{2PLAmCMH7HmqyX+?NAwJXQBl@$DIaE)Ji;smuC3EOBE!@@GMuH-SF$k7!Y3o5q9Pe^S4F^9d9>9c z98f`@oeOE)nY&vU|5BL}t&U5Pk@BT9vFRhao@CFjDFgR3JB-PBca7II^fobkk#@+m zkzAOHir*PdL`dp}PVJI=4K>Q%bG6MRC>6PV2V3yB!e`VogzW3cSBiHZQ-6Kxe{E&5 z@p*f_HP3+3u4qC+evM*ftdjjzzD2#eryAcKaur*T*m;S=gzI|2*&G%mj2y_S!NM{# ziOgh4vIwB!l1@g;XaETeXBZmrGa1xM!O=>^IOB00OZyJ^u$*PNWVZZ;il@o2c(sV5 zv(}nR3LCA)Wz6OX9pttA5rdb;@js~$di1Y^aoOx~2`M<|TA%mUQrVWW8)`)lmYl7} z|7<97Y&O1kjCkp4rv34?ho7=dG!Bf&eS4CN6Mcf*ez!;6^JYQql^7d?rXC5r;3nHZ z_eD*@I!An=bhmPvxB$Yj%KIoq{Il5?QQbC;zJ4kIfGMMXO^J%CwP*AFWAdg;dz1w! zp_O&I#!v&$91V<(aQhS~6$*_R;jLlIwVhq1|LLFU#2J$JoZ2Bz^NoLJYzzLLmq4B? z9$WEpn>abuYAriyjbdk!$N44NHh5uQ??Wn$QP0wc01G8T=XgFDTU7Y2|EO%EdqmH* z@Mi`#h`j9T#by8Iz|S>_pY`wTx=fkw*L`hPXq6^9z^fIV%wHP|pK=lpLi_wk;SXbu+t#{-!Ezv}Nk&_Ml zNW+Ahzg$N{HF_R4*S>0IY@Zn&;$`It^?1#e*=KAfSXgx}Zs5^{R6t0{e1RrSG8`?R z<*HJhvRGly%zmJ+5R$qWqbeoWi6SDTm|kndS1r+LTl@1WRvFyZ9`Mmx8*IqWnnGok zsz@2tNC$7*}YnZ5g8pFH{E$?Q2^ejEDgnV;D?gVmniN6 zh$_i#P>rrMr6-am-LowRJ2;X)1(zmlT;_vFF;eJ58X7J6e-4z7N7adG`YBsBXR#YD zmKvG2K1<%LDdm6M70g==9a>MLs_JiK2bn6qh9(NfHVk6ego!3EP=ExDdbLtT+Q{`< znpBF5%XnT}Nxc7BHjwP`gSL^p$W zE@QAH7xYn0$j%p0&onY5B4T?V?HXv98i?*EuILKp=bRm*t<tmt z;aWy%&j=T4ENvVae_0ks#Qs?miIZr_&?qdw!{Tf%efe{4rGzY-$+_Y7Z&dGC=I?=e zZ4Ygq$&Fs<0v;RJZ+cOPo7+6Kn9a}5Et{944SZ5ZsmqP3nFOzfAC}j(nk5qdj-l)- z;^EM*2g6;jiHHK9m(Ql?hNMaN9XPwX7ul(}hm&e-=$iM#Licr;kgUh(MF^w6Mkcj$ z?wP&u5`H8oL%Q>4S8sU-DHK*>N`E#YN%C{KW>@@GxVI4-48dac^D9a+_XFYYLet$}@MkUq3%SsWMqew>y;!lu zFtQL;^`WsOvDa_SHah>@^SK>I<#cXA^zX;%4d+_`$q}=JCFetH#OyDF8r;R_xGsY? z|AP4V2MV(GD*sj~%;EuGI&lyHY4V?Qm%^$iM0a@4dHeuYdcGM6kByURPA#)gCRUC; zAwoW;B6C0{gZWk{IMNx2EJu~jOK*;CV4`y$WTJ@o*Y!JBaa^gdBY0PIno+v}`GG+b zMHio4r9K1uSUsh#Fc3c$Kdy(YUA4hYvK|O2v43e}^)kL?QLh{5W<}lrokZ!0a zSO7}fOz*x2*fDw2jw;J&dv&#Yq-v*@Z+{W2!^-7ua62ShG*FEZrSXM7UP_`+KtDb* zK{7t*^;?5Ct#~cLf}W?sM~!G1`Awza2OLsXDjC%_ODQmBxjSdFmDJ?Ycn>q+8u1d(*|mKl+Z6+ zmw%8nKBWp$E3Bmxk%(mbjEJ%?^5=&hKyLzQ z8KM$Ef&t}(8BPf2Dm_d^2)awU6QzosQ{pFNQg#bD)NwYjMm4rTbV|t$OuQW658FS+ zt(!6|qLmXaOSo7H{%B7?!zoqK z;T&<1!j;X0p$eubOv-HDTj|5F38Jpd`s2x9QR9Os5X4nD{bL`lm+V-YbE@|3>U7QL z*Whnn11H+DW^zqh7n8|iorqt*U)X1VzwPpRs$IU(D_rvWy^_}rB13U-qtA;=VV1A` z*H$0@fr8SrrT|k@8pQ*?vN?_eMietYLt*#Dv!St#ngdxbD)Md2&)RXA{bD*u&W&)2 zW-dvjj>i%m=m8$y4wH%+7(g$Qj5asPbZ>+d8F%wl22$%-{xE(~OBg7UrSnIcg?w^v z7rnpYBEVNkw2={4QKNQMV_G#xnjGKOy11AjR5N=1ZjTU>p940C>ylqBSy@OciyJSW$Q#)7zR@ugbU7&d4Ga zz1Y=AJfRIOBf9$2)4s*ULpagjlsXZW7^$B&RhHXs?6HU$4xHE+A6))41B(gh7$RuI8QXnX_tRS~9 z#*!hctx{B}N2*yZoAgd7)d8SwGr8wNoxdU9`mUDeMj48bzz+2oj;(8szqM^5 z*OzJPB)7v7_}S`(26BtOL>17BiVE~@?1Y6um;2#>SdBmT-gNjPFt=&&SXzyJE+4N< z8P;SboHRK3CBDp#t=ANLDA2s8Ch=und@xLg28X#s)9vC~ejW-BYPe@Tnrd@X>$dMGK2PdId>(We!B6s^jlI1QTQ z9QbU_#=3g=Smk+(Ow=tiIkP^pQKlB}RG@%MYQHbNz*1*rwT+?xlCp?EyW?4)ui!C} zYgc=S6{-P#wZdNM`qKK7(u}*9EixB#*$>{G`bYf}ZrY5)%_1q|{9LN3QK{1ApT2CL zmmtXMM?-a(4=>2wFC$?`^FtiVimAcQck{m!uPltBJ%sc=NCr&)>UJU&uCojnJbQtY zsL|9o?3@N%cH)leh!R8y>V9jJA#;7%^^yhg_)h|{je9HJN7R!|Hh}2yCjdkW*E#lphERBuP#}CHh8LinL`}l0s4~@1s^{qZrQfG8 z6aOn02jP#+(}&|F05UHRC18me85T81%cH~&C?gJ&AD){ZCHIpe%)P-2xt8Ob_+4a! zCG9>ykD>vVu~ZyaQk-QlhbgH!a3v4J(ZKyTW6-b_!sRMD&sfqu9JyV|ox$k27ebsW z&oyzP)% zL+r?eBCk&)AtSq%{4l~rsV(Smw83W2B#>3uU3xD4@Y&DUx z4aj2T+oKf#Z7|@XWroleBPs`vkFtgpF$QdHuYQe8BP>z9 zl5eDsG=#;wX%a-;*Why4xgPkm@&Ny)_;3ouxipImMkZ70{H>s8b}Dq3S8vEVJ9<{E z{R84eOCZ|=u&_+2<;WAfNnK?-Hc1kU=c39#(&}lK6&FdCWWIefk_g0@633Tqp;O6KXE_9(B@;@ma%GKeO!(*hKSLEGLn^ zt6dmT`23}bpKE#II zc~tgvsT?&5%*0N)LM5}@#8RJVc$NB3JWXm>Yr_=So*L7wlFr0C;#i}gM%J=Iw&|L~ z@t%^>#je~F*I!~&c7~Us1xPR#Jw0|I_AK!Lah}*Rp6Ms5D@$%FBRh}nSUHFCOkUe5 zLMU&V6bDEI6O-NnM+zIPoW?|W#ep&fDL7`_@5u+r&)p}Tn4fStOs2W0Ebp1TSl~7! zpBALBFaE+bVPAT+#f~h^_iq~ZhD^;ov0a8NyAV;iW|NMleD$9YN-W{%sRn)cu*T!1w@8lwU z+7qnfADDJu8;`EMMfo*+;4Y7qBq=lge?P$KpD;GF=g|j0bKimI_Tde#G8hF9FMdCI zaIwYeu~%Fi<=M|znef#0C00R-^gvZPMgw<_sl0ZwXI z^rfFTz>&`ZASLfXi#NK7uT^+ zFLglEMkCw(9-%`gt3q4YjYsQlOfBTG`S~P$iMjh?kGxitOSxfCF!aTXjVwgE+#f1$ z)JvHX!2DO!?b}<0FT8({&wM_ZM>6TrRt85ZaRj?#70k!=@v^We*rM^u>7JEn5GzL+ zQEGKR&C zhosbbmT75Y8@L+B4puVpn zR--{=1QJ*FDWRvbBvTKDO#O4AR)zN)A#2vtjrdWKT(o=`{l&xd3Qcafk4|yxIvmVg z4)!3W*^&MoesYD8lO+oVJ7V;#bxfQ+`uvPt{bBpznnGS( zsEdDu__P7u%4cai#>2HQ12*@cz28rNhPhRAC#Q_x6nPd{Vw?V~H#pbb;XG9{65e0gVo&nQlNY8%9)lHve5+3aa&D&+5=A^i3QfAiLRpF5X)80WgCAUQ++5sCNlQ#$08;_Z}`N2F5vT7${baOj5#!BCY_r}V4L zEOS}%rKvZ>04%&$C9$>?j`j`*CIhb;dTia_IB66fvLWRD#3oUiN*e2Pbg9@B0rYO~ zIPf%1rs{nU9Yx`fj(n}MK*>7!&SLCeG41NOn&64cxOn1TqglMKq$EbD5e(|Lb!ulW zZVVs0ZtUJ`p5?W8%uTbYf}n2-;dcTWZiw%8B0-Qbj#j4xwy3B=6@8#% zl-Y1_`gs1*xlT~v%HbyN%bj0&<>w=)M%wp zlukfRJz^@06ieo+U$`FWs`eeASo-cg8xvC|%%#GhR3Q_TZ#LAb*3+93G2&WRYR)gG z+nYLwqC_y`?(}An0%nV;-q<2(OHRQ{?D&bt)482F;L`hDB8S;)gWb*I@Qw^4(CzcO zDtk>Sa^rT49QkrIX#^`uNSP;-dx$Nu92UO-5eYU)j6zBh^Q6!gg`bn`_jlbg-?dsP zwbRn?KTUja%J6)jbfx$7@>1?}MrauW> z=`e4I!tWfA12Fye^fy?B$>^FL@=P%D>f@#QPn%7LoVlBpjdMCGxrP%ojf^daw0(y4E@yD4I{d-JAQ@ibh;-L4N-4S2w?Orx~+*t{q5HW@{%*O`EUPeEw~5VoG(; ztMFsGc+TfS>=ODvU?uoZobCVPNB)6=^s}T8tFBZ%@eBo~0a}}9NkJlIr%&K{MzTm8 zU_Dxn$bV`xj0FnuRlwbZ?TH;C6U$IYvH~a#2(mIGZElFdq(U$+AwW1lg#!;05~`H( zG45FZ^b5`0xZ3(3($eIS@W;MaVuUt$3ubeMAc4)SX+b~SQ7z1LC_Y3BC>3kzN+wB> z6*3R-=fKw$Mkh!_M9U4I@3@BY{kiE$DvAk zeU(^9nZXO%NnrCu9%ZW(gD1&tV(nwHG!Ypuht&A-j=E?8cc8+)nowLM2!4wGLSrZo zg)ysfpBA=(J;i(2Z}(e$+F>u0}(f)8TQktdxrC2Ru>gwZ#s>OGIx3Yc78NQA9ji2# zBY`Zp$2wH4mDPALQDyc%d_Nq_A8Fo=%JWl1r6a+X0KZL0#2HBmVCaB@_LR9r?%s5V7z$j!x01?ht5Ly3q}lD)0p}Vt>qTEgS4`9cl|e@(Sh^$|NrU>|3G2he)M;i zpM4@rC*2!XR6JVVwIF;g-G;ZBKH;Fmve3Y(nohw}o+0fF{f2_XFC;I`$ZP5n&r(`aRF9$JTdih+giTN{^8la!Zz{Y$2ajG z<}CT$?>7woxP0YrHNl?bd&~FI$U5mYP|P$DL@8t!YChHgEDY~3xV5T;~Z=SlZ2 z-JOY*q8oH(;gC+2p_D5Q!;b*$>$qV3iDtk29;x`Nj=U(W^m5`MBd_YiD^g{XZx=iU z7YvRsPWcQeRm7URRX<17ezR>`&mV?pRln|U4t~g)k?GIzB_BF;9RC6TB6a7S^R$Q= zcQ3VUabd~))YfhlLeCST%|eT;6%LAsQSxjOrzbg%jco7Q3Q`kctk6$CSRJq_md@z!>h6t{VEFR zg{1)K_;%2Ytzph7{0-PRKCG&$_~%vWTU+bBqotGmAY@f`htztRG`OFie0!BfBfU|U zaPBLWh%$9ICUpvebOP_l&37vYq!tW^x5yjqfxh5-`G@RF5sFD%*0TH z1@||L2G3&(3P_`8I;|GR4ro}y(NWdMw12+LeuI)pYuol3O&2Dh|m+JB`Iq$);7_EdG%9 zPD*eZFhYm}RTwMpK@+B5mecCPuUF*%as@hij=cSHQ%o7y`49os*`st9U_Ac6-{=1y z|L_0TU;GCOSN{%$yL{Z$a|if)tMOu*=Xt1|loG4J8eT>;KxBGWf_Kt5-dYn6lG`|7 zk%=lI?JRus_y?wvE&skJ3;#|EQ*o)e`$$uCDj}s?bQ?Zs3S2>rr=%F+55Qtdl67lm z)E$x*{=N(8dcCJv95ZgoI1)kwG;+w>jT=U=m6{Z&fkyrOxtVvMz4Qr#fvx1tXjx10 z9+cn6rZuL{af3sedGD(HXIkDXzH#R>+%QaIEfwuGhl@0nfX>Ujq*fZCTm>aZ?e3{O8SQvy277H*nV!Z@HX66;o{BO8^9m%jG!wF z4HsnD74( zQx?An`t0EpSBMI={&Db%0)5Vr6Q|Ogb8v-Ek=Wd#9>=f3i>wqr&o!o%6%O9HIj4tt z+D~#$?Xf81ppYBrpm+rq{?Hi-Ze@sH(zIk^xI5-n?8{a3@C+{%G3*|m(5X{vE?>gf zxfFwzA_d(zEl>W+GzRe@IVhqk_R(pcAfy$baA<~-8 z*$wF!%Ke6yNv+{-&Y&7m;g{+y4d~b`kv<%0deIP&ojpU3O_P6rfhYb*@dib3$WGyy z557*q02U&=f|uD33!8=5aIY+ihOko@Bt~wxa3_1G8UDXsdqWv49>-aF#l_~U z_XJ1N{>ulf!9u=%aN8Bd9G7{%GBkY3C5u(1ynLCE(b#1-k|-NKlmb}8At9WeI)jP? ze`1T%p!H8%L$t?3n;q)qZtSpqQ@-l#_t(bL%^6lMybBF~4@U!Usgi~du@5Uh<1TUP z33B48E!k>=+s2DUXUl?>Y5COClBGW_^%GM-RA43DYD3pYr_9nqt28{>Pv zZ?~^{FOR58)LT*?o*_e$}5;#_GkG)1$}7g&E#GbbqR3ctcAqTJQPak}EMNe@<> zp+|87QKy#v^#uz0A(y3CPUz|>F~O_W9+DuU6poHdd%&d!8h#SaUN#MF^dVCT$|{E< zMS?ua$J|nHJf&9P;GU(If+|D?3SM0xlh2^FuS)FkRp+X6Y14${P+I-sVh~aH@)>FH z1WqsY^=7}%YmJ0e!W^_)TV3!{8QzkUHf9g3jkhLd$et|#3NEqZHAfbdRj0LhR}@l| z6I86xGR}1)1(2jDrGZGvdLYzt7CR@81giV7eb|WO^wgOU=30#R5YczL70RN>I)>d0)Yc|?0kc_$PZ2_)wRC;1Of=N1%?C5Rf&}13&5zY)TIV#a7W8lz%8q>3UXyG_c|0M zUpQAd)8a?M(bG6caAZ{W#|ff?@swUEqi*%@3|Nt2aB}-JOWFQJ0PMo9u}dv4=+pI&9BhfyFJtN#9Brm6Ws-R(I;H z$)x_+%$vEQUVRe0y_j^8a2;=#`{5#eF#8%Av&@#B?il3KHs+u}L@SCt-py0EO;B0C zz}Hg>c_5Nw^&z9uDiw6AIHXz(zwJ}8iY?au`ZPOkyXK6YsRX1>f_5hRYiy9TzA$%9 zditUYwsC%(c^#S{et-dygQHlWyv>y1H&aYEE=J!riEbAA160!Atk!kZKmYoM_F4j@ zDt^+K|G1LFkCnC_^K?`_+br5eX?rGM{jho-U6%Dz@9+;PkQ39kWvvQ}2_!;=OD=_s zE0CEBvI4WnX!OZ#L;Ct!xR?L{4f9NSGD8)~rG;srp;4gxD#QA24F`oKG|!=^Dcdo! zKG7a85HcN=98$v>NmLLXO_@c7d$N!0=s>_f+;Bo02H85|SIrK5s1?=AFW2mF$YM6 zY!!qh(x8G>-!93nMB32S(qyVk4+>53n{9a3V9 zQUrraBr!`grIJRauuduUQnd&FBg=+AYsQZedgCuO5yn%MYWiad@j)0hQ< zxjI@F58=&Q{Pq}`t)WPoRdl`d+L^?m{-#P-TlbZC(@KeHi@GB~*;vz$(JrVgY{i<;N zKQZa_pX0(m?ZYnz#oxYGzPUJKz3!3k?F2_jF1|w?SH-+fBkNT8HE z!BEnHU2;sL#J1SKD;0}1StSg5&N!g5I6&150Wef3OOYv33Ys@8H0H1h+{>t3z16ic zv%saL(?&mg6ofbT^nw_F)SfMS@Mq$SuVh>MMYg8HzfW~vH|m*mTJh@gIB}WYp=Xmq zcqD1%_)AK+S+?ZF$eCZpeiRA0JaVVP-69UME7CK&Nl7OKjv@RP-VpSvItO%DT;%$$f>9W~mL#F6QiI;B4bjDSnok z>#cid#z{`6E@hPJ%|@pYE}oegxqF2yaka$#*3yIpHb8`n_gEU*r2^#zc`b+p!wPkf z(-itF5Lzs}!BS%qCHxADC?V)ls-4(hkaCgzwLv_MW}=_es&rP*{XVI`Hw6wWD~{9w z-x?>?{`M)ni3u;|NkM6c4Jaty4u3-g?UR0HQ=?p7=@GzzaMsLY>suY8y_I{d08jOM z&82cM*}j(dWo`7w#hlsSFOT2-W`Fy9|Neyb;>h~DfJ~M;6eac)cV?0ynT7#9w?mXt z!0#^^je`iJvNt=E1zGdYK%Cax40Wt8co9XW@DPAnhMWS>atGmStPLSC8q#uA zBlZw@t|km7Bzu+x=&&PN6n>Ux0KXaPL(eq}J3Lk%%X;eRZ8a4bG*`xb)~m&K3QN${ z!*W;xH^yRyL3vU3kgj<JkDo-M_pZ|&;O5XnV--a4!Ns#B{eN>#?uR~zvcXCyhX(`AFd>9Wm zmu3y08bnzMHdS?h()IA^fTb}Nn5L9) z$pk^7ip`{4kOvVLQEMGtda*i3w(V#sTy$c;3bxKck1fA989zc(L)te z_!53P7dRFjeq%PM;;NKjV{c6JDe9NezpsD1W zu0oBa&nNhqkbYIJ+VQM0^-B`PiXvvi(o~DrE+EH-QDG}-$oBl z2^TriFF=Q+Dvhee<0M2iV|%LZ+OaA^;;LCKDVB+N&_>*3kb9&k&Euw>XfUOPNvti< zxgqsvUM8em0O1fahA{~Gwl_EY9p-6(X7C?Xl0&T>!q#%qSDJRbf4g7eIGD4HB@=sO zDLF`Rjt#V!jArI%SgPkJe;74Z_Ojp{+#bd;lZ+?Pm{W)kwPdRGU>(1I3qo%U(ksHL z1X$}6?%cD>@Ij3*1Kp$hzC*xNYQ5ebZ%cZ)jBMNneoo*r+CCCzkKl zw!OPDSA4!-zyfHPm?htM-?BavN~kK+71K+YC@?+=tyngWZ$8@;^tLo(u9c#NH+@i{Q z9BMwdU=9bHCkaqWWad&QhFZz^A&^BvEihS-csN*iT1YVg^SY{p(?~e;kQhyFYnVt& zbT5ptNS5eV#A}v?-E?7o551{r+jc#k$FFeC)CQl8BR1+t$i__rBS}T)8cdT9X$Qo> zO-msM6(0 zsWeMSPM~wLYmrctY=FyjdHeg(can2<$jo1j$&YIdD6$!OaW?T z@s8e;N9IpvX*$|~x^wVit-?>ux`%e^E7RFZJ+x(EtU&5ajq6>N!^)MnfOl;*&7v+2 zx`mw4S(K)^$$YS?ZZm`O;IC0CALsEw4*S+Mr(*|qYj%iHvaIVQoD#ZOH_Fab^Zh_y}Prj|LD`myxNXi-PwRdn)l|lM!2l zPp(>7v|+NCgnLHlzh3;(e6Lzc`ihh>F2O=S{ zR}Q7PK)vkHEsn~}8w;$>4{Z8eJaS}NlLK-QOx}+RUg-n4Oo|I2iGHIhJ_3e&o}dmEwOs~k>rO%Dng)s)FHw2N zUT7bS6Kr^(R6wvc4LQS-1bj+LosJyJIkrYlFrv=xB7^c1n#g^IKVN`N-8^XNM_UmSpYRQNov@Q=@ zZmDgCQCr8g5*h>~N*PpJJ4q9HGJ=b#MYVADZx@VIg!Hlu1u9VtF-KA+0;l3dG2uzC zz`&9o0chYwok%d!J3ArcL9sqY)G0z)9NfMtE&3utP5{;;{_qj4j|E|&3hpWoPk8wH zk+cl2^f)0_Vxx64vlN2@JgXIJ>UM7uvkg^s0_lz%w!61=1%AN`w1N$Foiy_9k0BRo zQVmBFt}-bQRpjZ85RMUw_CW$sG0j5?&W;MC<-^FQ)OXgisNz-RFhhx0=c}EEO_@4x z8e6Z$X&PHIe-N44Nb3TtXuh4-CTouq2sHAu#PY~#6Ke4&4t`+gxspPSk;pzQ4^u~<=-Y$yPxfQ{0a4--1k4*>U zwM7+@G~A^N0A2oBcns^W?5EW-nj36ueq}U=W7>mP-N(^~LW%JTm)N1vJW1H`M;?XbAtC((q5AAm=W-+hO@od=8{@ValhKE~b8tSlMx` ze`Z3q1WJTJ>+?Ra8nVt07L}o4%He$>{S{e}#fC8jnk@K)5@=zC+Xj7!70AJD;Kcc2 z>Z;1fqD!vu*HNems4~`Zj231ususf57k=1ifUYxFEy{ZCh2xYr<7aezvYYYXX`Mx# z);db)#dBONoXLn?uxYEMJ6w-|JRFG-1qYw}6$&ZCLf1{y1bSFM%U(~ob1Jj;y`{TpZ@|jMIuN`KYFLEJg{m^1aTT^i_J=GCS;sM@E{P;}MwF&aXTJxh z5s^l<#6GX>c-^%as)ARgW#*stcIbraR{|dcQ$oCQ^}>?zSXP+xPwqEUr%vt$zP_-% z<>EG1{~nbO(ZPOE4$<&$rnT7)>@s0xz~CUuf*o0Ye4c{2ZQHJEwqr}5!P%4i?AVWM zQz}(PaG!J1FNpEfgc&~D%z!SB^O=2*p;FrXuOCTvIg3&_7WmPZITUB`E7Y6l!MW+C z#7s-E)+vlb_KnmM)Ho#}ZQhbs>zX@1UvhZZng(XMyuH28=zjCk_0PvV1+m>LMFd}W zzsvOE)c3VolzCY~<@b&-sKu6w<0TRI$CXaj`sb^GOw_Dm6rhe91Q*Yo!_9oG44qtD z(l)fv9od`|i&9GKB!^oT#Th>_JQPU=Db|2s*xsCec=N{M<)ojTFeluS<$`bFq!CA- zW)RvoQ7dCiar>SEYDpM zASZ{@iDiPU`CS1EBRfoF;XjMq&YY7Rvbt7MCojUBbU0g+xXbB8 z^Uzt0%*w^@j_;J^4IuG`y1cb~i-Qz~Dh+3s-92kc%D0-dUFIv*tW})J<{{-?O{}_L z<@1df3~JDlVyOZ`In*FuFGwzwp46N$6d_U5YC#iI^OpcV@g-9zGjt9+??Mro?Z*#!+7f1ik zG=cx^kpEY|K11Q(a+h?TZ3@mpV>6tTPcD(4fzyR_=Qd$Gcg?%KWmEyE+WMJrm%nXm zFg9m2d@vB33izXghi7VNktMid2nokT!#N>T2B)>2B5n`1dVRLdbsC@A`k0|Ldic6M ztyXK8;Rk;bMa-*N)$^C!J*E5p)=B8B+;t2510!*A=WGi0h9b-m#@L%z?0a?`>G<%d zYGXrdw)i8ie(KhsQf+=kTruS^m0k4oOoeuQta_omOvj?~&qk4Du{o^bnxsJ=HmJo_ z=eff2>sgwVQ1z{f;-?vHJ%@@M5Gno(pH2z535N>wo$Af7mRx$!VNSBr%#KL(AlYtP^JTrnrc!KjB`S1{>87Z1U;0X&ulaIrf=J z@H@t%v{iHnrTI!xT+*Er zdQ`;zR&b3wt$IR2I7;V}<>*n6QXp=8$596}Ny6B6|E11Rw^w+}k$h>ACab|+*Yeb? z$`GwtgP4eOkH5A1l7Y`Fk#o~`hOTL*ff>2-RuPjq!9Skrx;vTcwHlV+akcFKrEsTT zdR4RtT+dYzH@peuZ~hwnM|Md(?$*kKr8JT^-m$jx#y#Q&Aou(;dwt$mj+~8RgIobj zvfX0~p$ZKqgwjum9Dwc6P*B6rv9L74J-oHYT2G>f%%&E|A3w~MnDO95Ky{&M^xI>O zdcGAMJ;Gjfy3qzVu-7ysAcCu_k)5?{}1>D|R_p}_3?kpbkEmtPmuaCGazTG_*TN|ZUjNc z_=C8-Vp#;THn=(bK}yT^!;HT}JZHwl5;;k~E!_LA8qWp?-NcT=LD!7-SLIwYtijTD z@GRe_qs^9~FAR|Y4d+pma{GZ#yk%MdTuwo07S*M;Ma<^G{_J;60@9ZjqeU%!npAO< zima~Cz0%xh0rH$Ek_ic=L~TD%6pbB+ydgbZOjI@lEglvQ+5|k8Ob(Cmq%>@$lR9q9 zjI|v?#5O5kF?K8bh7)rmE{+2QF-QNRm30*Vr64gqkHEY)k$|c?r&FH7aJ5qI-h7)~ zwAB2rbNF}+1%+^Ww!J1XTQ)IjTXRH2F&W83nJpz_E(HvpR=@yI$~hB)q_uGoNMNRQJ$zIGw8bL>>in*K4ljK(>8XZn{){`xKKURc5`faGK zwpj;L;HU+B>;kkjOni}6b$H0iJKJd0a$a6(XkBFLvy&Er-%%Y^Y-=@jm=*M(q(=d1 z;=B9rGJs|awwKM!_%z}%S&`ub)8wtO?9q{RL+$8oVZ=r}di=?Ya?j3byh(w;5Nbt~ zixY)~npu($l~aL2N+R#N<43r;Tev-5*@qXACH*}>)$xVH6P}ukVM_&uyC~+77EOFo z02@?nUiz?Hh9gFLJ9ytRM^nAFb?y6aE`tpK;hh>~IV+&YiuaDoUXgQ)1`IF2jI&{{ zKN+RS3B2?nyr3<>(NO(=wRc`oO=#;DrV63=4u+6G2qCnffS?eHgc3swQZ@9d5I||7 zXaWT3Jv1qy7wJvdLI@DLNZANhK&dv`cB31w=ZyVuUheZb=Z^cfUe_9Hd}ID|jWwqm zQXeLhJ=JW-eNn2ZsS$`MAA7^ z@Q-SVP}BcB>)?N*(cek|`VS~r?a-|ye*Vf`l4$)kKD5lQ2O#mSQ!Nqfc0NhuyT^U2 zR*d;P9<}YXC`T?QlDJEyqVAtcn(AICik%&XCX!>1*va$RQvFA_4 zsV!Gq2_$BFD{ZnE?%jIo3h!S}v?`MIzkvu9jQq4SJ6G-+10mo{L5^g0g$sO>h-r>^ zcF;P@LU6hsK7qj|c0C29j=_GU=IwQ-NbZLs7vsMn+UgWn?K69x(`%*GV3|_e^(3(l zTAcGoWoQ-bu`yt#Xk2qN@SWYwiF2hbg(f}o$~mmJ9Vx$VRu|fek#YM=&mh~d%$81F zGR=i_Rvk=Ckf6zjjPq1i{ZMlMp9JaAl-{4#5w^m{C94ZKiRO;adY^-_H z*O+2&MCZJ{TIX-`{^mHvwIHL7FtJsx)@kZH`CPV51>)w_@h;HW-OD_Prh}>Ng?Cjg z>;HK6$kyZWg-`&1s&k&(fNDLz>bV;2C^O|h39Cr;oOv);y46TW(+oPm_r+5cZx6DB z_`&!5v1wy-`m$#>%xfVMI!VqU;3kVCDM@9Wcwl=TLX}^M z$d*I~*h^6|Cm()!A7-)3vPiR45w%`wUhjSc2l>784^)2PnHPrn05GacdW z-pQTk-PM3Dz#ng%+CFjImSX&NbNXz==YeX3evHtzduyE84@CQ9gIRmmv|b&h=JMrdeYd6#Nly6wCf)H9iM9$}aWeDLdvxqj5C|?20KwVMW4mWi;Tb+k;?yv+2 z<&_GUD9FD>hjJQnSsQCSYlP&c1PUEh;&l$Y6tYWhNnj@Hz2C!&#c`src7C>szH`KD z%eY567`HI(hrc~c?@A|vSUH58fkTGt*v#>r+m(EaUn+B;8_aVt9+3O7>I)cH)a@;@ zNft@YrWJ|~8@FKp*hMS8D7&<(=`+9NHjW^aBo|&$xBve0=TA$8cwizWh)AiIcybTt z5bq{|Y8CWKuXM{xVGAzDPIMU@Xaf@$f5u(gx&_@!L%C(WP85xCCN0HRTQzjv(fGw+ap~NFZr?F4a!mSCRNimf~ zhL(jJAY8L_v{QMR>Ms;?VX}$qpeDbc5FQu(ZY3qfOj2~mFHj(SDVX`7^Yjgp*xMEL zXC$#+LulV&>B^^z8K&9hD$;cQ3qSwLvIt&E$g+ZAyaA*7`yNK1xotjw4$s7dt893x zCrjCN6I(FAVYh_qeR4^P*(<2Yxe32~B0gA-x8{{8I&8R$2oDxw+iks){IRjMe5klC zu1vGTFYoYyR#exzNNF{id}(}eB}o@Ui)%`xA{vz}8K0okFiWT8%__}D7^lo&7^X;6 zX^;KoDD0-EC>fKSyVLvJL1*nN@N@^uhXrt~pI5(i>1s?w4X4S2MNV`3fR<|Gt7(a2 zjBFE%nWp^{7+^B(_jZn^OYUDzpKC2u*8l!l@Io8IwC&vs8@9E*7nd}iJf|+q?y)%F zd=u{+XO3Z92HA-)PH#cQ0Wq-)e5)EZ6+k;ybq+a++E}i8!~ibNRQ9UcOua?hoAEJ= zwuCcxq%30V-YY91;C}lVZgjzZ#i@$H8(?!MU8E>>{DN){0^W+Pyl9u|-jSHvU+~zy zd9m)+nXuX=FH~dXW2ssDjfE|>IR`G}JkxJ+gl<^&2bbNViG#?&UYeVWLp7SpaB-Pg zWPLx$J#`|KYtFC)rP&D@_Ii7{(qpq@1dVV>!Ekw*0s-Md2zK05#Yt*E%vZ?8zyNza zH@otF02{YG1anuicdd2%VBRDC>o&X7P$t5B*yDUISyZv?abh&}KCBg$a;=N7@bB%E z`5Owq`Hg;uBfs@qOT6(W-#zs1m3Rfb8{35l1c1sU5_ zZX{IBCr17?E2d_2gS~Pq2d$h<>N2p`SHtHdikJ8eIp1`?Xz18hs`-%nx6D<;P7m=O z-|=h4dxyZ}GSM4_QKO&+_?PAIN%I3|Ng;^XL!|$ob9%($M>*&@7tE^?`Ky2aITv_e zqM_mC&t|DPdab|<{A;;OD=%a(uHk3vIw_*h#@~Ye?9nOcszA!qeG&wUlV${X1d~~e zYZCm)AG8jn4-wR0pwgDkHux`B0cs!HF@>-9C@<@N{RBK23vSX zlL4YV>SpQZ+CwXO(gi_EphrxYO(u#;0xvlb1s#PW}3k3ilB;{b-|X=6^NBx6m>F5tn;z9BUNZ&*eOhEY}bzbOelzm`zyu5DGFm?9UTpcW#pDm?2-XuQ%DL z0*2Q=44t`zwzbjgm4#m}bV9nO&y#jDnXj*)GSK&|_^@Ei8Ls<0!buMZAvuG@rwS&1 z*ef8KN3sCBqnhZw2gV;*t+GqzB+4|*kBGEwYW&7pBV0)WDMx^2XA6>FaDyxb6JLbL zYV+&_tJ?@k!W3MwMG8HOmwGPln#oq*>2qs&^{ID&g0ELt{n`CJay{fIS`qFkmk8Ad zvKgjDs|ziKt2=aQ#E-COh~MEVuK2TqPx!4&fF~RE8-O9nkir=mwb1N>JoWE|?QSI#4L%Bp~ z)xWJHj$L4sMorj=yP`>fw+jFsiqNGj)mKlu*mgztF9AbU8c2Om*WeTV&g!mV33e<^R?#Ik>4v-(XCN6foC2fRz`gdo(s~mdet9ybAj@2BFxmh~J2o{n z+7>9>Cd>S`Ci!k<<28b=NE7?Mrrbh@8ipGpScYM|gzmbhgMWI5S;-^)n|d0yILo za%Wq3uVB3Tds?WYj5|hEUU=G~Mp2=bc+XZ_i6!%_npXLwkA}#c$@bTT=2YemeEc_= zP}U$=5L_N6X9g6$=SfY<&Gbk~9yfVA#h{3!-v?zU=0rm>n){9`)e~~u#LD1gz*S5$ zE8D|IV;O~p=)BcV6}-QukAGOLjd{Eo<*A}&tI7(YC*iG!pZBxXw>iNU{KU!Z_62u2V2eUvX*B}r9%NEh$bB9G>7EC#08 z6kouDV}R%gr}Esw^&F(UtPowRVn&z`{^h+eN9n~zU{eA$mAR=j;0>+OnOuwfsFw?CztnveKDHhmfm}-KLudJXs1Y3wF#0uAS?YU| zNF;AcK{wc5@nl$9%LQ>`++5Ia{kfFWK1kp#_(4fESYN^~C(FX`!KhihVV8d4<&v+K{#%X+0u%p3UQlkGYHgo){_> zsXRiqmV(z+Sz3STHy)_8alg3xW7!q2c9Qf2`ORQ9>cbqjmfmmK|Bi{|Z%;wYm$n{h zzS0*g(d3`-NZPv!&}5*x+ii3`bU^`d&NpMP=O?wSwGris zw_0{!G9{&1xh1Ir$>K#4&6qG@UvSl3$@3B@aFxZX_q?mUoWuPI6P9(JQk1*LNFsavh zDxtVW7$zKs=CmvSl5GWj@KvHLf!#Z+JcFU{ItW%`>E_9nhl*qg;SYH!H|_m;H>}H) z3?ni!_56|dl>ua4#nolF{sq#_4rrHo4bprCJYFUZa}c8@rD_U|ZD6fJ@Q8STi=1+@ zuCQsI878|>M8P%}KD?EbibPEc)+fD8Ue6F|=4w(eH$JXe)6c65eB|*{`qY0oRngY* zkSQRuMh3z8(ucXEVG_7}_NwVrBKzrA@J?@_x$*7SR6cEKdd=)+LE;tf$$~VdN|jj# z=>w6iEWS)nFYQ56Z0}s7nAa=iciO|L;o%l7XH^nLxvebgl2Y?|*Mt^$hUWxoeF)ba zs|ZsLbH=Hl1MhEHKk`gz*fBYQrhh2p;AxyeiI6IebDHEXNs}xMrxIlW~ z$RP`ad(*7^0?*6CB^%veA^UPu*Ohhq08^cQaS(N-M%Y^&mx0Kv(T&m-iLlS-f+Kv- z>4l&3FPaZlo&MBacoNp#rJ?oIwPS)o{V#f-{3jHc*$e$plV%p*#;l>bfjk`7KC%5& z9mw3>8v-iVwCN+ZpZ?6SDrTAl;9Q=S+mo1Cs@y*5H!ZRd&tBauHUSV8?DJ#=wnQMN zTp4&=yr;+##n^@!=qrjMS$UNNU%$69MG_#hj0Z9eD)znG4`(mbjOvxpF$@JmR&XUP z2@gyB`o%YKut~m&bE#0_PYq{9haw7tj0-&TVAv2=M1KJh1J`p zen{k6Nq!~_=sIF|+`VI#Us^8Jg&*PLgWmDI-c3N6nnb3lvJ7Vp9Sh27nU@F#=Z@Vm z-G1I=EVNV5zwSFc{X$vdWj=LBx+@r$7JL6fRcQ1#bPK)HbGDMo@mO|>J>r?-gpGl~ z*6u{=GlPuxBWh;tQW13|?}^WdPRTI-&pa9qd#)oV9Qi>=Qq4C1@Yx|Awc05>Hzld^2QL%6n|Gv>vRn0q9fx~74<((K&yDTl4%U3oysMi0#PUS`xT^Ju zb8o4t^@NfY>}8LeMN?Y2=EHT}jjm*!#WdD;Ay>0AB(8W#-f?m;H7tiZl_f=IB2yP0 zk{9~d9X~~*wKWjA;?q|}Hf?vR2mt8aQVu<652G5Da%Du}tL{C0J#}$z7U$x~y=zDX z3g-OL2fozB}L06D2C%<)1Awqz&cPBFbMak~4R z1=@ffDTe@;z^l-Ozsh2O*QObE+9#paXhppOeRHsc#Lj;7OUEVk{U?~ixL1BDhvk1| zVC-gIC#sLvLKC5wC&=mGMztBG$&j`Rv$OQ=j?ylbS>qCHt>c*E<58r0g^JYW^E(|` zq@htzgtJRQ0YrKXoc6&~mf;#XN~tCBJaEnKqkxXDD@l<}P`3LSg=hJVPFQpR@<}JD znk?DOgGtw{_?`%U`xXl^ytBuN<|}r#4(|wX#&ztyd>bZ*xWw5lTw#W@=pQUr>Pf1m z(1o8{DJpGQzKq~}cjubM)qs})$==#R?K_=DSzkY-UHtCWa%(!KWILf5x6paa{n?$X z^{K^CL;C4&N03kdPKNw5p^^VMj4<$SPcC{nM5zQ1XEJ1Brv5S`flN%udrVAhY+1Ic zPoD`4ovmNc&P(2!!YbjzPbM~R`ewTIUnJ6-oBV@M*5M}G4&MVhN36g};1%bk*A~%3 z`?eFF3ZDWtL1?e7lQ9rFJs5z}II@E|4`qb}=zW4H9yd96KGxN6_7qyP>w0_#w-~V5 z)zceMSpPeJR_O-FDmJ_~^xy^ngXmuB(2J^iGw!c z(#T>^KjQpMdZ}JiP1=T!2M=_`wy3Ch>4% zB(N^M#;F`y-22fx;B|>}$Jk8d)^|7m2*RrK@2V@^O{$1a|KJ9dz(p6Q;?AxmQedC* S|B-LI|KfuG|MK5*0{;W>vfD%e literal 0 HcmV?d00001 diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/Files/teams-logo.png b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/Files/teams-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..78b0a0c308939206aee5f15e2c052def7a18a74e GIT binary patch literal 6412 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 F{{vnI6G{L8 literal 0 HcmV?d00001 diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/SampleData.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/SampleData.cs new file mode 100644 index 0000000000..13b7d9d744 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Cards/SampleData.cs @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Cards +{ + public class SampleData + { + public SampleData() + { + MultiSelect = "true"; + } + + public string Question { get; set; } + + public string MultiSelect { get; set; } + + public string Option1 { get; set; } + + public string Option2 { get; set; } + + public string Option3 { get; set; } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Delete/DeleteDialog.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Delete/DeleteDialog.cs new file mode 100644 index 0000000000..616ddfd70c --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Delete/DeleteDialog.cs @@ -0,0 +1,46 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Connector; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Delete +{ + public class DeleteDialog : ComponentDialog + { + private readonly List _deleteSupported = new List + { + Channels.Msteams, + Channels.Slack, + Channels.Telegram + }; + + public DeleteDialog() + : base(nameof(DeleteDialog)) + { + AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[] { HandleDeleteDialog })); + InitialDialogId = nameof(WaterfallDialog); + } + + private async Task HandleDeleteDialog(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + var channel = stepContext.Context.Activity.ChannelId; + if (_deleteSupported.Contains(channel)) + { + var id = await stepContext.Context.SendActivityAsync(MessageFactory.Text("I will delete this message in 5 seconds"), cancellationToken); + await Task.Delay(5000, cancellationToken); + await stepContext.Context.DeleteActivityAsync(id.Id, cancellationToken); + } + else + { + await stepContext.Context.SendActivityAsync(MessageFactory.Text($"Delete is not supported in the {channel} channel."), cancellationToken); + } + + return new DialogTurnResult(DialogTurnStatus.Complete); + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/FileUpload/FileUploadDialog.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/FileUpload/FileUploadDialog.cs new file mode 100644 index 0000000000..67a3885d27 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/FileUpload/FileUploadDialog.cs @@ -0,0 +1,83 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.IO; +using System.Net; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Schema; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.FileUpload +{ + public class FileUploadDialog : ComponentDialog + { + public FileUploadDialog() + : base(nameof(FileUploadDialog)) + { + AddDialog(new AttachmentPrompt(nameof(AttachmentPrompt))); + AddDialog(new ConfirmPrompt(nameof(ConfirmPrompt))); + AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[] { PromptUploadStepAsync, HandleAttachmentStepAsync, FinalStepAsync })); + + InitialDialogId = nameof(WaterfallDialog); + } + + private async Task PromptUploadStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + var promptOptions = new PromptOptions + { + Prompt = MessageFactory.Text("Please upload a file to continue."), + RetryPrompt = MessageFactory.Text("You must upload a file."), + }; + + return await stepContext.PromptAsync(nameof(AttachmentPrompt), promptOptions, cancellationToken); + } + + private async Task HandleAttachmentStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + var fileText = string.Empty; + + foreach (var file in stepContext.Context.Activity.Attachments) + { + var remoteFileUrl = file.ContentUrl; + var localFileName = Path.Combine(Path.GetTempPath(), file.Name); + string fileContent; + + using (var webClient = new WebClient()) + { + webClient.DownloadFile(remoteFileUrl, localFileName); + using var reader = new StreamReader(localFileName); + fileContent = await reader.ReadToEndAsync(); + } + + fileText += $"Attachment \"{file.Name}\" has been received.\r\n"; + fileText += $"File content: {fileContent}\r\n"; + } + + await stepContext.Context.SendActivityAsync(MessageFactory.Text(fileText), cancellationToken); + + // Ask to upload another file or end. + const string messageText = "Do you want to upload another file?"; + const string repromptMessageText = "That's an invalid choice."; + var options = new PromptOptions + { + Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), + RetryPrompt = MessageFactory.Text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput) + }; + + return await stepContext.PromptAsync(nameof(ConfirmPrompt), options, cancellationToken); + } + + private async Task FinalStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + var tryAnother = (bool)stepContext.Result; + if (tryAnother) + { + return await stepContext.ReplaceDialogAsync(InitialDialogId, cancellationToken: cancellationToken); + } + + return new DialogTurnResult(DialogTurnStatus.Complete); + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/MessageWithAttachment/MessageWithAttachmentDialog.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/MessageWithAttachment/MessageWithAttachmentDialog.cs new file mode 100644 index 0000000000..443413e20d --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/MessageWithAttachment/MessageWithAttachmentDialog.cs @@ -0,0 +1,118 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Bot.Builder; +using Microsoft.Bot.Builder.Dialogs; +using Microsoft.Bot.Builder.Dialogs.Choices; +using Microsoft.Bot.Schema; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.MessageWithAttachment +{ + public class MessageWithAttachmentDialog : ComponentDialog + { + private const string Picture = "architecture-resize.png"; + private readonly Uri _serverUrl; + + public MessageWithAttachmentDialog(Uri serverUrl) + : base(nameof(MessageWithAttachmentDialog)) + { + _serverUrl = serverUrl; + AddDialog(new ChoicePrompt(nameof(ChoicePrompt))); + AddDialog(new ConfirmPrompt(nameof(ConfirmPrompt))); + AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[] { SelectAttachmentTypeAsync, SendActivityWithAttachmentAsync, FinalStepAsync })); + InitialDialogId = nameof(WaterfallDialog); + } + + private async Task SelectAttachmentTypeAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + const string messageText = "What attachment type do you want?"; + const string repromptMessageText = "That was not a valid choice, please select a valid card type."; + var options = new PromptOptions + { + Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), + RetryPrompt = MessageFactory.Text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput), + Choices = new List + { + new Choice("Inline"), + new Choice("Internet") + } + }; + + // Ask the user to enter their name. + return await stepContext.PromptAsync(nameof(ChoicePrompt), options, cancellationToken); + } + + private async Task SendActivityWithAttachmentAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + var attachmentType = ((FoundChoice)stepContext.Result).Value.ToLowerInvariant(); + var reply = new Activity(ActivityTypes.Message) { InputHint = InputHints.IgnoringInput }; + switch (attachmentType) + { + case "inline": + reply.Text = "This is an inline attachment."; + reply.Attachments = new List { GetInlineAttachment() }; + break; + + case "internet": + reply.Text = "This is an attachment from a HTTP URL."; + reply.Attachments = new List { GetInternetAttachment() }; + break; + + default: + throw new InvalidOperationException($"Invalid card type {attachmentType}"); + } + + await stepContext.Context.SendActivityAsync(reply, cancellationToken); + + // Ask to submit another or end. + const string messageText = "Do you want another type of attachment?"; + const string repromptMessageText = "That's an invalid choice."; + var options = new PromptOptions + { + Prompt = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput), + RetryPrompt = MessageFactory.Text(repromptMessageText, repromptMessageText, InputHints.ExpectingInput), + }; + + return await stepContext.PromptAsync(nameof(ConfirmPrompt), options, cancellationToken); + } + + private async Task FinalStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) + { + var tryAnother = (bool)stepContext.Result; + if (tryAnother) + { + return await stepContext.ReplaceDialogAsync(InitialDialogId, cancellationToken: cancellationToken); + } + + return new DialogTurnResult(DialogTurnStatus.Complete); + } + + private Attachment GetInlineAttachment() + { + var imagePath = Path.Combine(Environment.CurrentDirectory, "wwwroot", "images", Picture); + var imageData = Convert.ToBase64String(File.ReadAllBytes(imagePath)); + + return new Attachment + { + Name = $"Files/{Picture}", + ContentType = "image/png", + ContentUrl = $"data:image/png;base64,{imageData}", + }; + } + + private Attachment GetInternetAttachment() + { + return new Attachment + { + Name = $"Files/{Picture}", + ContentType = "image/png", + ContentUrl = $"{_serverUrl}images/{Picture}", + }; + } + } +} diff --git a/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Proactive/ContinuationParameters.cs b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Proactive/ContinuationParameters.cs new file mode 100644 index 0000000000..ef2970a643 --- /dev/null +++ b/tests/functional/Bots/DotNet/Skills/CodeFirst/WaterfallSkillBot/Dialogs/Proactive/ContinuationParameters.cs @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Security.Principal; +using Microsoft.Bot.Schema; + +namespace Microsoft.BotFrameworkFunctionalTests.WaterfallSkillBot.Dialogs.Proactive +{ + ///