+ All Categories
Home > Documents > Betradar Virtual Sports

Betradar Virtual Sports

Date post: 07-Mar-2023
Category:
Upload: khangminh22
View: 0 times
Download: 0 times
Share this document with a friend
107
Betradar Virtual Sports Customer Integration V6.2 Febuary 2019
Transcript

Betradar Virtual Sports

Customer Integration

V6.2 Febuary 2019

Page | 1 www.betradar.com

Contents

1. General ............................................................................................................................... 3 1.1 Customer Contact Configuration ................................................................................... 3 1.2 Promotion Package ...................................................................................................... 4 1.3 Reporting ...................................................................................................................... 4

2. Virtual Football .................................................................................................................. 6 2.1 GUI - Visualization Component ..................................................................................... 7 2.2 Odds Implementation .................................................................................................... 8 2.3 Website Communication ............................................................................................... 9

2.3.1 Proxy on client side............................................................................................ 9 2.3.2 Communication GUI Odds........................................................................... 21 2.3.3 Communication Odds GUI........................................................................... 24 2.3.4 Height changes of the iframe | setVfecHeight() ................................................ 25 2.3.5 Get team image ............................................................................................... 26

2.4 Statistics Center Integration ........................................................................................ 27 2.5 Odds Key Definition .................................................................................................... 30 2.6 Micro Virtual Football - never lose focus on virtual betting .......................................... 31

3. Virtual Basketball League ............................................................................................... 34 3.1 User’s View................................................................................................................. 35

3.1.1 GUI - Visualization Component (1) .................................................................. 35 3.2 Odds Implementation .................................................................................................. 37 3.3 Website Communication ............................................................................................. 38

3.3.1 Proxy on client side.......................................................................................... 38 3.3.2 Communication GUI Odds........................................................................... 42 3.3.3 Communication Odds GUI........................................................................... 44 3.3.4 Height changes of the iframe | setVblHeight() .................................................. 45

3.4 Odds Key Definition .................................................................................................... 46 3.5 MicroVBL - never lose focus on virtual betting ............................................................ 48

4. Virtual In-Play Tennis ...................................................................................................... 50 4.1 GUI - Visualization Component ................................................................................... 51 4.2 Odds Implementation .................................................................................................. 52 4.3 Website Communication ............................................................................................. 52

4.3.1 Proxy on client side.......................................................................................... 52 4.3.2 Communication GUI Odds........................................................................... 57 4.3.3 Communication Odds GUI........................................................................... 59

4.4 Odds Key Definition .................................................................................................... 62

5. Virtual Tennis Open ........................................................................................................ 64 5.1 User’s View................................................................................................................. 65

5.1.1 Visualization Component (1) ............................................................................ 65 5.2 Odds Implementation .................................................................................................. 66 5.3 Website Communication ............................................................................................. 66

5.3.1 Proxy on client side.......................................................................................... 66 5.3.2 Communication GUI Odds........................................................................... 71 5.3.3 Communication Odds GUI........................................................................... 73

Page | 2 www.betradar.com

5.3.4 Additional Functionality .................................................................................... 75 5.4 Odds Key Definition .................................................................................................... 78

6. Virtual Horse Classics..................................................................................................... 80 6.1 User’s View................................................................................................................. 81

6.1.1 GUI - Visualization Component (1) .................................................................. 81 6.1.2 Odds Component (2) ....................................................................................... 82

6.2 XML Odds Feed ......................................................................................................... 82 6.3 Website Communication ............................................................................................. 82

6.3.1 Proxy on client side.......................................................................................... 82 6.3.2 Communication GUI Odds........................................................................... 87 6.3.3 Odds GUI .................................................................................................... 90

6.4 Odds Key Definition .................................................................................................... 91

7. Virtual Dog Racing .......................................................................................................... 95 7.1 User’s View................................................................................................................. 96

7.1.1 GUI - Visualization Component (1) .................................................................. 97 7.1.2 Odds Component (2) ....................................................................................... 97

7.2 XML Odds Feed ......................................................................................................... 98 7.3 Website Communication ............................................................................................. 98

7.3.1 Proxy on client side.......................................................................................... 98 7.3.2 Communication GUI Odds......................................................................... 102 7.3.3 Communication Odds GUI......................................................................... 103

7.4 Odds Key Definition .................................................................................................. 104

Page | 3 www.betradar.com

1. General

Betradar’s Virtual Sports are available for Online, Mobile and Retail platforms. This document covers all steps necessary for the front-end integration in the online business. For Mobile and Retail integration documents please contact [email protected]. The integration details for the XML feed are provided in a separate document, also provided by Betradar. (Betradar_Virtual_Sports_XML_Format_Specification_vx.x.pdf)

The first chapter of this document covers all general details required during the integration. The chapters 2 to 7 provide all details for the integration of the individual Virtual Sports.

1.1 Customer Contact Configuration

In case of maintenance (24 hours prior to the start) or urgent messages the Betradar support team is sending out notification emails to all customers. The support and maintenance distribution list is based on technical Betradar Virtual Sports customer contacts defined within the Betradar interface. How to add a technical customer contact for Betradar Virtual Sports:

• Login to Betradar.com (for access credentials please contact the Sportradar 1st Level Support team, available at [email protected])

• Navigate to Configuration > User > Technical Contact • Select the previous configured e-mail address via dropdown field “Email address” • Select a country code (if necessary) • Add a phone number for support calls (optional) • Select “Virtual Sports” as service via dropdown field “Responsible for” • Click on button “Add contact”

Page | 4 www.betradar.com

1.2 Promotion Package

For promotion purposes there is a promotion package available on the Betradar servers, providing a wide variety of different promotion materials for all Virtual Sports.

Download

1.3 Reporting

As part of the contract all Betradar Virtual Sports customers are obliged to provide instant access to an online reporting tool where current and past figures are obtainable for the Betradar Product team. Betradar reports are created on demand as well as on a monthly basis (invoicing purpose). For this purpose figures need to fulfill the format requirements listed below:

There should be a clear distinction between bets placed through the 3 different available Betradar Virtual Sports platforms: Online / Shop / Mobile.

Total bets, single bets and combined bets placed need to be listed separately.

Figures need to be listed for each day of the month in a consecutive list as well as in a cumulative column for the entire period.

Page | 5 www.betradar.com

All figures need to be exportable to an Excel file, with the format as proposed (as seen in the screen shot) in the example file mentioned below.

Please also refer to the report example file, available for download:

Download

2. Virtual Football

Page | 7 www.betradar.com

Betradar’s Virtual Football is available in different modes and the integration for all competitions is similar:

1. League Mode 2. Euro Cup 3. Nations Cup 4. World Cup 5. Asian Cup

2.1 GUI - Visualization Component

2

1

Page | 8 www.betradar.com

Whole visualization component is delivered as an iframe with a fixed size. 762 x 571 pixel

Test environment: League Mode: https://vfstaging.aitcloud.de/vflmstaging/vflm/index?clientid=<CLIENTID>&lang=<LANGUAGE>

Euro Cup: https://vfstaging.aitcloud.de/vfecstaging/vfec/index?clientid=<CLIENTID>&lang=<LANGUAGE> Nations Cup: https://vfstaging.aitcloud.de/vfncstaging/vfnc/index?clientid=<CLIENTID>&lang=<LANGUAGE> World Cup:

https://vfstaging.aitcloud.de/vfwcstaging/vfwc/index?clientid=<CLIENTID>&lang=<LANGUAGE>

Asian Cup:

https://vfstaging.aitcloud.de/vfasstaging/vfec/index?clientid=<CLIENTID>&lang=<LANGUAGE>

Multi language support by optional ‚language‘ parameter in URL. Most languages already supported, others on demand

2.2 Odds Implementation

On customer side XML feed odds or Unified Odds Feed integration is necessary to load the odds into the database in order to be able to take bets. The Betradar Virtual Sport Data feeds continuously provides messages, thus it’s mandatory to have a permanent and stable connection. Refer to the respective specification for detailed information on how to handle alive message delays or missing alive messages, how to handle connection problems and disconnects, as well as how and why to synchronize after a reconnect. Quick start Unified Odds Feed:

Virtual Sports are part of Betradar’s Unified Odds feed and just needs to be enabled as an additional product.

Unified Odds Feed SDK available for Java and .NET: (iodocs)

For detailed Unified Odds Feed information refer Betradar_Unified-Odds_Developer_Integration.pdf

Quick start XML Feed:

Implementation similar to other Betradar services.

Bookmaker SDK available for Java and .NET at: (http://sdk.sportradar.com/)

For detailed XML feed information refer Betradar_VirtualSports_XML_Format_Specification_Vx.x.pdf

Page | 9 www.betradar.com

2.3 Website Communication

We need to enable communication between the GUI and the odds section (e.g. switch the odds section to selected match day by mouse click at a match day button within the match day selector component). We also need to consider most customer may access Betradar Virtual Sports via more than one domain name (and of course these domain names may change or new domains need to be added).

2.3.1 Proxy on client side

General note on proxy use or SSL / HTTPS integration

If you want to integrate Betradar Virtual Sports via multiple domain names or you are using HTTPS on client side, it is mandatory to use the following proxy settings and to integrate all URL’s to Betradar Virtual Sports via relative URLs (“.../...”) instead of absolute URLs (“https://.../...”).

Integration of the Visualization Component (GUI)

Multi language support by optional ‚language‘ parameter in URL. Fallback is English, other languages on demand. Test environment (Attribute src of iframe tag):

League Mode: src=”vflmstaging/vflm/index?clientid=<CLIENTID>&lang=<LANGUAGE>”

Euro Cup: src=”vfecstaging/vfec/index?clientid=<CLIENTID>&lang=<LANGUAGE>”

Nations Cup: src=”vfncstaging/vfnc/index?clientid=<CLIENTID>&lang=<LANGUAGE>”

World Cup: src=”vfwcstaging/vfwc/index?clientid=<CLIENTID>&lang=<LANGUAGE>” Asian Cup: src=”vfasstaging/vfas/index?clientid=<CLIENTID>&lang=<LANGUAGE>”

Production environment (Attribute src of iframe-tag): League Mode: src=”vflm/vflm/index?clientid=<CLIENTID>&lang=<LANGUAGE>” Euro Cup: src=”vfec/vfec/index?clientid=<CLIENTID>&lang=<LANGUAGE>”

Nations Cup: src=”vfnc/vfnc/index?clientid=<CLIENTID>&lang=<LANGUAGE>”

World Cup: src=”vfwc/vfwc/index?clientid=<CLIENTID>&lang=<LANGUAGE>”

Asian Cup: src=”vfas/vfas/index?clientid=<CLIENTID>&lang=<LANGUAGE>”

Proxy settings using Apache HTTPS Server

Proxy settings using Internet Information Services (IIS)

Page | 10 www.betradar.com

Proxy settings using Nginx

Proxy settings using Apache HTTPS Server

For customers with “webroot integration”

“webroot integration” means that the customer integrates the game inside his webroot, i.e. the web page which contains the iframe for the GUI is located in the root directory for the specific domain. For example http://www.example.com/virtualfootballcup.html contains the GUI iframe. Add the following lines to your proxy settings:

League Mode: <Location /vflmstaging> # points to test environment ProxyPass https://vfstaging.aitcloud.de/vflmstaging retry=0 ProxyPassReverse https://vfstaging.aitcloud.de/vflmstaging RequestHeader unset Accept-Encoding </Location>

<Location /vflm> # points to production environment ProxyPass https://vf<CUSTOMER*>.aitcloud.de/vflm retry=0 ProxyPassReverse https://vf<CUSTOMER*>.aitcloud.de/vflm RequestHeader unset Accept-Encoding </Location>

Euro Cup: <Location /vfecstaging> # points to test environment ProxyPass https://vfstaging.aitcloud.de/vfecstaging retry=0 ProxyPassReverse https://vfstaging.aitcloud.de/vfecstaging RequestHeader unset Accept-Encoding </Location>

<Location /vfec> # points to production environment ProxyPass https://vf<CUSTOMER*>.aitcloud.de/vfec retry=0 ProxyPassReverse https://vf<CUSTOMER*>.aitcloud.de/vfec RequestHeader unset Accept-Encoding </Location>

Nations Cup:

<Location /vfncstaging> # points to test environment

Page | 11 www.betradar.com

ProxyPass https://vfstaging.aitcloud.de/vfncstaging retry=0 ProxyPassReverse https://vfstaging.aitcloud.de/vfncstaging RequestHeader unset Accept-Encoding </Location>

<Location /vfnc> # points to production environment ProxyPass https://vf<CUSTOMER*>.aitcloud.de/vfnc retry=0 ProxyPassReverse https://vf<CUSTOMER*>.aitcloud.de/vfnc RequestHeader unset Accept-Encoding </Location>

World Cup:

<Location /vfwcstaging> # points to test environment ProxyPass https://vfstaging.aitcloud.de/vfwcstaging retry=0 ProxyPassReverse https://vfstaging.aitcloud.de/vfwcstaging RequestHeader unset Accept-Encoding </Location>

<Location /vfwc> # points to production environment ProxyPass https://vf<CUSTOMER*>.aitcloud.de/vfwc retry=0 ProxyPassReverse https://vf<CUSTOMER*>.aitcloud.de/vfwc RequestHeader unset Accept-Encoding </Location>

Asian Cup: <Location /vfasstaging> # points to test environment ProxyPass https://vfstaging.aitcloud.de/vfasstaging retry=0 ProxyPassReverse https://vfstaging.aitcloud.de/vfasstaging RequestHeader unset Accept-Encoding </Location>

<Location /vfas> # points to production environment ProxyPass https://vf<CUSTOMER*>.aitcloud.de/vfas retry=0 ProxyPassReverse https://vf<CUSTOMER*>.aitcloud.de/vfas RequestHeader unset Accept-Encoding </Location>

*<CUSTOMER> is a customer related string that will be provided by Betradar If you have not used Apache as a proxy before, put these settings into a small file named

Page | 12 www.betradar.com

"proxy.conf" in your Apache configuration directory (normally /etc/apache2/conf.d/). Please make sure that the proxy modules (mod_proxy_https and mod_proxy) are loaded/enabled. Restart Apache afterwards.

For customers with “subdirectory integration”

“subdirectory integration” means that the customer integrates the game inside a subdirectory of his webroot, i.e. the web page which contains the iframe for the GUI is located inside a subdirectory of the webroot of the specific domain. https://www.example.com/Odds/virtualfootballcup.html for example contains the GUI iframe. Add the following lines to your proxy settings:

League Mode: <Location /<subdirectory**>/vflmstaging> # points to test environment ProxyPass https://vfstaging.aitcloud.de/vflmstaging retry=0 ProxyPassReverse https://vfstaging.aitcloud.de/vflmstaging RequestHeader unset Accept-Encoding </Location> <Location /<subdirectory**>/vflm> # points to production environment ProxyPass https://vf<CUSTOMER*>.aitcloud.de/vflm retry=0 ProxyPassReverse https://vf<CUSTOMER*>.aitcloud.de/vflm RequestHeader unset Accept-Encoding </Location>

Euro Cup:

<Location /<subdirectory**>/vfecstaging> # points to test environment ProxyPass https://vfstaging.aitcloud.de/vfecstaging retry=0 ProxyPassReverse https://vfstaging.aitcloud.de/vfecstaging RequestHeader unset Accept-Encoding </Location> <Location /<subdirectory**>/vfec> # points to production environment ProxyPass https://vf<CUSTOMER*>.aitcloud.de/vfec retry=0 ProxyPassReverse https://vf<CUSTOMER*>.aitcloud.de/vfec RequestHeader unset Accept-Encoding </Location>

Nations Cup:

<Location /<subdirectory**>/vfncstaging> # points to test environment ProxyPass https://vfstaging.aitcloud.de/vfncstaging retry=0 ProxyPassReverse https://vfstaging.aitcloud.de/vfncstaging RequestHeader unset Accept-Encoding </Location>

<Location /<subdirectory**>/vfnc> # points to production environment

Page | 13 www.betradar.com

ProxyPass https://vf<CUSTOMER*>.aitcloud.de/vfnc retry=0 ProxyPassReverse https://vf<CUSTOMER*>.aitcloud.de/vfnc RequestHeader unset Accept-Encoding </Location>

World Cup: <Location /<subdirectory**>/vfwcstaging> # points to test environment ProxyPass https://vfstaging.aitcloud.de/vfwcstaging retry=0 ProxyPassReverse https://vfstaging.aitcloud.de/vfwcstaging RequestHeader unset Accept-Encoding </Location>

<Location /<subdirectory**>/vfwc> # points to production environment ProxyPass https://vf<CUSTOMER*>.aitcloud.de/vfwc retry=0 ProxyPassReverse https://vf<CUSTOMER*>.aitcloud.de/vfwc RequestHeader unset Accept-Encoding </Location>

Asian Cup: <Location /<subdirectory**>/vfasstaging> # points to test environment ProxyPass https://vfstaging.aitcloud.de/vfasstaging retry=0 ProxyPassReverse https://vfstaging.aitcloud.de/vfasstaging RequestHeader unset Accept-Encoding </Location>

<Location /<subdirectory**>/vfas> # points to production environment ProxyPass https://vf<CUSTOMER*>.aitcloud.de/vfas retry=0 ProxyPassReverse https://vf<CUSTOMER*>.aitcloud.de/vfas RequestHeader unset Accept-Encoding </Location>

*<CUSTOMER> is a customer related string that will be provided by Betradar **<subdirectory*> means the existing subdirectory on customer side, e.g., <Location /Odds/vfec>

The subdirectory also needs to be configured on Betradar side, thus please provide the subdirectory to Betradar.

If you have not used Apache as a proxy before, put these settings into a small file named "proxy.conf" in your Apache configuration directory (normally /etc/apache2/conf.d/). Please make sure that the proxy modules (mod_proxy_https and mod_proxy) are loaded/enabled.

Page | 14 www.betradar.com

Restart Apache afterwards.

Proxy settings using Internet Information Services (IIS)

Prerequisites: o IIS 7.5 (or higher) o ARR (Application Request Routing) v2.5 (or higher)

ARR – proxy configuration and URL rewriting o Enable proxy in ARR (via IIS GUI)

• Do not create a subdirectory “vf” or “vfecstaging”, “vfncstaging” etc.

• for proxying do instead:

o Set up URL rewriting via config file: edit the file “web.config” in your webserver root directory (or the subdirectory from which vf should be accessible) and add the following rewrite rules to /configuration/system.webServer/:

League Mode:

<rewrite> <rules>

<rule name="Route the requests for VFLM" stopProcessing="true"> <match url="^vflm/(.*)" /> <conditions>

<add input="{CACHE_URL}" pattern="^http(s)?://" /> </conditions> <action type="Rewrite"

url="https://vf<CUSTOMER*>.aitcloud.de/vflm/{R:1}" /> <serverVariables>

<set name="HTTPS_ACCEPT_ENCODING" value="" /> <set name="HTTPS_X_FORWARDED_HOST" value="{HTTPS_HOST}" /> <set name="HTTPS_X_FORWARDED_SERVER" value="{HTTPS_HOST}" />

</serverVariables> </rule> <rule name="Route the requests for VFLM root" stopProcessing="true">

<match url="^vflm$" /> <conditions>

<add input="{CACHE_URL}" pattern="^http(s)?://" /> </conditions> <action type="Rewrite"

url="https://vf<CUSTOMER*>.aitcloud.de/vflm" /> <serverVariables>

<set name="HTTPS_ACCEPT_ENCODING" value="" />

Page | 15 www.betradar.com

<set name="HTTPS_X_FORWARDED_HOST" value="{HTTPS_HOST}" /> <set name="HTTPS_X_FORWARDED_SERVER" value="{HTTPS_HOST}" />

</serverVariables> </rule>

</rules> <outboundRules>

<rule name="RewriteRelativePaths" preCondition="ResponseIsHtml1"> <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^/vflm/(.*)" negate="false" /> <action type="Rewrite" value="/vflm/{R:1}" />

</rule> <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">

<match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^http(s)?://vf<CUSTOMER*>.aitcloud.de/vflm/(.*)" /> <action type="Rewrite" value="/vflm/{R:2}" />

</rule> <preConditions>

<preCondition name="ResponseIsHtml1"> <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />

</preCondition> </preConditions>

</outboundRules> </rewrite>

Euro Cup:

<rewrite> <rules>

<rule name="Route the requests for VFEC" stopProcessing="true"> <match url="^vfec/(.*)" /> <conditions>

<add input="{CACHE_URL}" pattern="^http(s)?://" /> </conditions> <action type="Rewrite"

url="https://vf<CUSTOMER*>.aitcloud.de/vfec/{R:1}" /> <serverVariables>

<set name="HTTP_ACCEPT_ENCODING" value="" /> </serverVariables>

</rule> <rule name="Route the requests for VFEC root" stopProcessing="true">

<match url="^vfec$" /> <conditions>

<add input="{CACHE_URL}" pattern="^http(s)?://" /> </conditions> <action type="Rewrite"

url="https://vf<CUSTOMER*>.aitcloud.de/vfec" /> <serverVariables>

<set name="HTTPS_ACCEPT_ENCODING" value="" /> <set name="HTTPS_X_FORWARDED_HOST" value="{HTTPS_HOST}" /> <set name="HTTPS_X_FORWARDED_SERVER" value="{HTTPS_HOST}" />

</serverVariables> </rule>

</rules> <outboundRules>

<rule name="RewriteRelativePaths" preCondition="ResponseIsHtml1"> <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^/vfec/(.*)" negate="false" /> <action type="Rewrite" value="/vfec/{R:1}" />

</rule> <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">

<match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^http(s)?://vf<CUSTOMER*>.aitcloud.de/vfec/(.*)" />

Page | 16 www.betradar.com

<action type="Rewrite" value="/vfec/{R:2}" /> </rule> <preConditions>

<preCondition name="ResponseIsHtml1"> <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />

</preCondition> </preConditions>

</outboundRules> </rewrite>

Nations Cup:

<rewrite> <rules>

<rule name="Route the requests for VFNC" stopProcessing="true"> <match url="^vfnc/(.*)" /> <conditions>

<add input="{CACHE_URL}" pattern="^http(s)?://" /> </conditions> <action type="Rewrite"

url="https://vf<CUSTOMER*>.aitcloud.de/vfnc/{R:1}" /> <serverVariables>

<set name="HTTPS_ACCEPT_ENCODING" value="" /> <set name="HTTPS_X_FORWARDED_HOST" value="{HTTPS_HOST}" /> <set name="HTTPS_X_FORWARDED_SERVER" value="{HTTPS_HOST}" />

</serverVariables> </rule> <rule name="Route the requests for VFNC root" stopProcessing="true">

<match url="^vfnc$" /> <conditions>

<add input="{CACHE_URL}" pattern="^http(s)?://" /> </conditions> <action type="Rewrite"

url="https://vf<CUSTOMER*>.aitcloud.de/vfnc" /> <serverVariables>

<set name="HTTPS_ACCEPT_ENCODING" value="" /> <set name="HTTPS_X_FORWARDED_HOST" value="{HTTPS_HOST}" /> <set name="HTTP_X_FORWARDED_SERVER" value="{HTTPS_HOST}" />

</serverVariables> </rule>

</rules> <outboundRules>

<rule name="RewriteRelativePaths" preCondition="ResponseIsHtml1"> <match filterByTags="A, Area, Base, Form, Frame, Head,IFrame, Img, Input, Link, Script" pattern="^/vfnc/(.*)" negate="false" /> <action type="Rewrite" value="/vfnc/{R:1}" />

</rule> <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">

<match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^http(s)?://vf<CUSTOMER*>.aitcloud.de/vfnc/(.*)" /> <action type="Rewrite" value="/vfnc/{R:2}" />

</rule> <preConditions>

<preCondition name="ResponseIsHtml1"> <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />

</preCondition> </preConditions>

</outboundRules> </rewrite>

Page | 17 www.betradar.com

World Cup: <rewrite>

<rules> <rule name="Route the requests for VFWC" stopProcessing="true">

<match url="^vfwc/(.*)" /> <conditions>

<add input="{CACHE_URL}" pattern="^http(s)?://" /> </conditions> <action type="Rewrite"

url="https://vf<CUSTOMER*>.aitcloud.de/vfwc/{R:1}" /> <serverVariables>

<set name="HTTPS_ACCEPT_ENCODING" value="" /> <set name="HTTPS_X_FORWARDED_HOST" value="{HTTPS_HOST}" /> <set name="HTTPS_X_FORWARDED_SERVER" value="{HTTPS_HOST}" />

</serverVariables> </rule> <rule name="Route the requests for VFWC root" stopProcessing="true">

<match url="^vfwc$" /> <conditions>

<add input="{CACHE_URL}" pattern="^http(s)?://" /> </conditions> <action type="Rewrite"

url="https://vf<CUSTOMER*>.aitcloud.de/vfwc" /> <serverVariables>

<set name="HTTPS_ACCEPT_ENCODING" value="" /> <set name="HTTPS_X_FORWARDED_HOST" value="{HTTPS_HOST}" /> <set name="HTTPS_X_FORWARDED_SERVER" value="{HTTPS_HOST}" />

</serverVariables> </rule>

</rules> <outboundRules>

<rule name="RewriteRelativePaths" preCondition="ResponseIsHtml1"> <match filterByTags="A, Area, Base, Form, Frame, Head,IFrame, Img, Input, Link, Script" pattern="^/vfwc/(.*)" negate="false" /> <action type="Rewrite" value="/vfwc/{R:1}" />

</rule> <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">

<match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^http(s)?://vf<CUSTOMER*>.aitcloud.de/vfwc/(.*)" /> <action type="Rewrite" value="/vfwc/{R:2}" />

</rule> <preConditions>

<preCondition name="ResponseIsHtml1"> <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />

</preCondition> </preConditions>

</outboundRules> </rewrite>

Asian Cup: <rewrite>

<rules> <rule name="Route the requests for VFAS" stopProcessing="true">

<match url="^vfas/(.*)" /> <conditions>

<add input="{CACHE_URL}" pattern="^http(s)?://" /> </conditions> <action type="Rewrite"

url="https://vf<CUSTOMER*>.aitcloud.de/vfas/{R:1}" />

Page | 18 www.betradar.com

<serverVariables> <set name="HTTPS_ACCEPT_ENCODING" value="" /> <set name="HTTPS_X_FORWARDED_HOST" value="{HTTPS_HOST}" /> <set name="HTTPS_X_FORWARDED_SERVER" value="{HTTPS_HOST}" />

</serverVariables> </rule> <rule name="Route the requests for VFNC root" stopProcessing="true">

<match url="^vfas$" /> <conditions>

<add input="{CACHE_URL}" pattern="^http(s)?://" /> </conditions> <action type="Rewrite"

url="https://vf<CUSTOMER*>.aitcloud.de/vfas" /> <serverVariables>

<set name="HTTPS_ACCEPT_ENCODING" value="" /> <set name="HTTPS_X_FORWARDED_HOST" value="{HTTPS_HOST}" /> <set name="HTTPS_X_FORWARDED_SERVER" value="{HTTPS_HOST}" />

</serverVariables> </rule>

</rules> <outboundRules>

<rule name="RewriteRelativePaths" preCondition="ResponseIsHtml1"> <match filterByTags="A, Area, Base, Form, Frame, Head,IFrame, Img, Input, Link, Script" pattern="^/vfas/(.*)" negate="false" /> <action type="Rewrite" value="/vfas/{R:1}" />

</rule> <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">

<match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^http(s)?://vf<CUSTOMER*>.aitcloud.de/vfas/(.*)" /> <action type="Rewrite" value="/vfas/{R:2}" />

</rule> <preConditions>

<preCondition name="ResponseIsHtml1"> <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />

</preCondition> </preConditions>

</outboundRules> </rewrite>

*<CUSTOMER> is a customer related string that will be provided by us

o Add the following lines to the top of your system.webServer section of the “web.config” file in your webserver root directory to disable the unsupported static compression while leaving dynamic compression unharmed:

<urlCompression doStaticCompression="false" doDynamicCompression="true" dynamicCompressionBeforeCache="false" />

• Depending on your Windows Server configuration and IIS configuration you might need to do some or all of the following additional steps to get the URL rewriting to work:

o Set the LogRewrittenUrlEnabled registry key (run in cmd as one line):

reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Rewrite /v LogRewrittenUrlEnabled /t REG_DWORD /d 0

Page | 19 www.betradar.com

o Re-order the IIS modules to have URL rewrite module (“RewriteModule”) run before dynamic compression module (“DynamicCompressionModule”). In the IIS GUI in the modules' ordered view the “DynamicCompressionModule” should be ABOVE the “RewriteModule”.

o You may need to add some server variables to allow setting them in the config files. To do this, go to the “URL Rewrite” view in the IIS GUI and click on “Show server variables”. Here you add “HTTPS_ACCEPT_ENCODING”, “HTTPS_HOST”, “HTTPS_X_FORWARDED_HOST”, “HTTPS_X_FORWARDED_SERVER” and “HTTPS_ACCEPT_ENCODING”.

o You may need to follow this up with the command “iisreset /noforce”

Proxy settings using Nginx

League Mode: location /vflmstaging { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; proxy_redirect default; proxy_pass https://vfstaging.aitcloud.de/vflmstaging; }

location /vflm { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; proxy_redirect default; proxy_pass https://vf<CUSTOMER>.aitcloud.de/vflm; }

Euro Cup:

location /vfecstaging { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; proxy_redirect default; proxy_pass https://vfstaging.aitcloud.de/vfecstaging; }

location /vfec { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; proxy_redirect default; proxy_pass https://vf<CUSTOMER>.aitcloud.de/vfec; }

Page | 20 www.betradar.com

Nations Cup: location /vfncstaging { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; proxy_redirect default; proxy_pass https://vfstaging.aitcloud.de/vfncstaging;

}

location /vfnc { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; proxy_redirect default; proxy_pass https://vf<CUSTOMER>.aitcloud.de/vfnc; }

World Cup: location /vfwcstaging { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; proxy_redirect default; proxy_pass https://vfstaging.aitcloud.de/vfwcstaging;

}

location /vfwc { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; proxy_redirect default; proxy_pass https://vf<CUSTOMER>.aitcloud.de/vfwc; }

Asian Cup: location /vfasstaging { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; proxy_redirect default; proxy_pass https://vfstaging.aitcloud.de/vfasstaging;

}

location /vfas { proxy_set_header X-Forwarded-Host $host;

Page | 21 www.betradar.com

proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; proxy_redirect default; proxy_pass https://vf<CUSTOMER>.aitcloud.de/vfas; }

2.3.2 Communication GUI Odds

Communication between GUI and Odds is done via JavaScript.

Matchday Switch With every bet stop or when a user clicks the buttons to go to the next available or past matches, the following function of the parent frame will be called: League Mode:

setVfMatches({ "competition_id": competition_id:number, "season_id": season_id:number, // season_nr = season_id in XML feed "competition_nr": competition_nr:number, "season_nr": season_nr:number, "competition_stage_type": ": stageTypeAsString:string ", "matchset_nr": matchsetNr:number, "match_day": match_day:number, "match_ids": [ matchid1:number, matchid2:number, matchid3:number, matchid4:number

matchid5:number, matchid6:number, matchid7:number, matchid8:number ], "screen_name": "web-league", "unique_tournament_id": 14149 "event_start": “start time as provided via the XML feed” });

e.g. setVfMatches({ "competition_id": 41819, "season_id": 41819, "competition_nr": 1721, "season_nr": 1721, "competition_stage_type": "league", "matchset_nr": 15, "match_day": 15, "match_ids": [ 6797573, 6797574, 6797575, 6797576, 6797577, 6797578, 6797579, 6797580 ], "screen_name": "web-league", "unique_tournament_id": 14149

Page | 22 www.betradar.com

"event_start": 1502815625000 });

Euro Cup, Nations Cup and Asian Cup:

setVfecMatches({ "competition_nr": competition_nr:number,

"season_nr": season_nr:number, // season_nr = season_id in XML feed "competition_id": competition_id:number, “season_id”:season_id:number

"competition_stage_type": stageTypeAsString:string, // "league" -> group stage / "cup" -> k.o.-stage "matchset_nr": matchsetNr:number,

"match_day": match_day:number, "match_ids": [ matchid1:number, matchid2:number, matchid3:number, matchid4:number ], "screen_name": screenName:string “unique_tournament_id”: unique_tournament_id:number //see mapping options below "event_start": “start time as provided via the XML feed” }); e.g. setVfecMatches({

"competition_nr": 132, "season_nr": 132, "competition_id": 17500, “season_id”:17500,

"competition_stage_type": "league", "matchset_nr": 1,

"match_day": 1, "match_ids": [ 6448576, 6448577, 6448582, 6448583 ], "screen_name": "web-cup" "unique_tournament_id": 2448 "event_start": 1502815625000 },

World Cup: setVfMatches({ "competition_nr": competition_nr:number,

"season_nr": season_nr:number, // season_nr = season_id in XML feed "competition_id": competition_id:number, “season_id”:season_id:number

"competition_stage_type": stageTypeAsString:string, // "league" -> group stage / "cup" -> k.o.-stage "matchset_nr": matchsetNr:number,

"match_day": match_day:number, "match_ids": [ matchid1:number, matchid2:number, matchid3:number, matchid4:number ], "screen_name": screenName:string “unique_tournament_id”: unique_tournament_id:number //see mapping options below "event_start": “start time as provided via the XML feed” }); e.g.

Page | 23 www.betradar.com

setVfMatches({ "competition_nr": 132, "season_nr": 132, "competition_id": 17500, “season_id”:17500,

"competition_stage_type": "league", "matchset_nr": 1,

"match_day": 1, "match_ids": [ 6448576, 6448577, 6448582, 6448583 ], "screen_name": "web-cup" "unique_tournament_id": 2448 "event_start": 1502815625000 },

The League Mode, Euro Cup, Nations Cup and Asian Cup do use unique match_ids and tournament_ids. Nonetheless it is important to map the tournament_ids to the corresponding competition, if more than one competition is integrated. For the Euro Cup and Nations Cup the front end will use the unique_tournament_id to identify for which of the tournaments the calls are made. This is necessary in order to display the correct odds for the two tournaments. League Mode: Unique_tournament_id: 14149

Euro Cup:

Unique_tournament_id: 2448

TournamentID TournamentName

49665 Virtual Football Nations Cup Group A

49666 Virtual Football Nations Cup Group B

49667 Virtual Football Nations Cup Group C

49668 Virtual Football Nations Cup Group D

49669 Virtual Football Nations Cup Group E

49670 Virtual Football Nations Cup Group F

49671 Virtual Football Nations Cup Knock Out

Nations Cup: Unique_tournament_id: 13933

TournamentID TournamentName 53961 Virtual Football Euro Cup Group A

53962 Virtual Football Euro Cup Group B

53963 Virtual Football Euro Cup Group C

53964 Virtual Football Euro Cup Group D

53965 Virtual Football Euro Cup Group E

53966 Virtual Football Euro Cup Group F

53967 Virtual Football Euro Cup Knock Out

Page | 24 www.betradar.com

World Cup: Unique_tournament_id: 15446

TournamentID TournamentName 60337 Virtual Football World Cup Group A

60338 Virtual Football World Cup Group B

60339 Virtual Football World Cup Group C

60340 Virtual Football World Cup Group D

60341 Virtual Football World Cup Group E

60342 Virtual Football World Cup Group F

60343 Virtual Football World Cup Group G

60344 Virtual Football World Cup Group H

60345 Virtual Football World Cup Knock Out

Asian Cup: (need to add Asian user id) Unique_tournament_id: 26654

TournamentID TournamentName 74607 Virtual Football Asian Cup Group A

74608 Virtual Football Asian Cup Group B

74609 Virtual Football Asian Cup Group C

74611 Virtual Football Asian Cup Group D

74612 Virtual Football Asian Cup Group E

74613 Virtual Football Asian Cup Group F

74614 Virtual Football Asian Cup Knock Out

All details can be found separated with semicolon in the ‘Tournament’ part of the XML feed Meta response. Competition_stage_type can be “league” for the group stage and “cup” for the knock out phase. Refer to Betradar_Virtual_Sports_XML_Format_Specification_vx.x.pdf

2.3.3 Communication Odds GUI

Communication between Odds and GUI is done via JavaScript.

Preset Matchday

A mouse click on the match day selector component can be simulated by calling following function.

To use this function it is necessary to add a name to the GUI iFrame tag (e.g. <iframe width=”xxx" height="yyy" frameborder="0"… name="vf_iframe"></iframe>) This function can be used e.g. to preselect the next match day (current match day + 1) after loading the Virtual Football League Mode, Euro Cup and Nations Cup: League Mode:

vf_iframe.setSelectedMatchday(matchday:number, [nextSeason=false:boolean]); e.g. vf_iframe. setVfecSelectedMatchday(7195533, true);

Page | 25 www.betradar.com

Euro Cup, Nations Cup and Asian Cup: vf_iframe.setVfecSelectedMatchday(timestamp:number); e.g. vf_iframe. setVfecSelectedMatchday(1460557500);

World Cup: vf_iframe.setSelectedMatchday(timestamp:number); e.g. vf_iframe. setSelectedMatchday(); Please note: In order to get to the correct matchday, use the timestamps provided by the XML feed

As a result the requested match day will be highlighted and the setSelectedMatchday() / setVfecSelectedMatchday() will be called (refer Matchday Switch):

2.3.4 Height changes of the iframe | setVfecHeight()

The height of the iframe will be provided through following function (height is measured in pixel): League Mode:

setVfHeight({ "height": heightInPixels:number, "screen_name": screeName:string "unique_tournament_id": 14149 })

e.g setVfHeight({

"height": 599, "screen_name": "web-league", "unique_tournament_id": 14149

})

Euro Cup:

setVfecHeight({ "height": heightInPixels:number, "screen_name": screeName:string "unique_tournament_id": 2448 })

e.g setVfecHeight({

"height": 571, "screen_name": "web-cup"

"unique_tournament_id": 2448 });

Nations Cup: setVfecHeight({

"height": heightInPixels:number, "screen_name": screeName:string "unique_tournament_id": 13933 })

e.g setVfecHeight({

"height": 571,

Page | 26 www.betradar.com

"screen_name": "web-cup" "unique_tournament_id": 13933 });

World Cup: setVfHeight({

"height": heightInPixels:number, "screen_name": screeName:string "unique_tournament_id": })

e.g setVfHeight({

"height": 571, "screen_name": "web-cup"

"unique_tournament_id": });

Asian Cup: setVfecHeight({

"height": heightInPixels:number, "screen_name": screeName:string "unique_tournament_id": 26654 })

e.g setVfecHeight({

"height": 571, "screen_name": "web-cup"

"unique_tournament_id": 26654

2.3.5 Get team image

Betradar provides the team flags as a PNG image for the odds visualization.

Structure: {http/https}://vf{subdomain}.aitcloud.de/{checkout}/mobile/getTeamImage.png?clientid=[clientid:number]&teamid=[teamid:number]

Subdomain – this describes the environment. e.g. vfstaging or vfbookmaker or vflive

Checkout – this depicts the virtual sport being integrated and which platform the integration is taking place. e.g. vfec, vfncstaging, vflm, vflmstaging

Euro Cup: https://vfstaging.aitcloud.de/vfecstaging/mobile/getTeamImage.png?clientid=569&lang=de&teamid=240001

Nations Cup: https://vfstaging.aitcloud.de/vfncstaging/mobile/getTeamImage.png?clientid=569&lang=de&teamid=240001

World Cup: https://vfstaging.aitcloud.de/vfwcstaging/mobile/getTeamImage.png?clientid=569&lang=de&teamid=348088

Asian Cup: https://vfstaging.aitcloud.de/vfasstaging/mobile/getTeamImage.png?clientid=569&lang=de&teamid=240001

Page | 27 www.betradar.com

2.4 Statistics Center Integration

As one important component the Betradar Statistics Center (also available for real football) is fully integrated to all Virtual Football products. Statistic centre version 4 interface:

Statistic centre version 5 interface (exclusive to the World Cup):

Page | 28 www.betradar.com

The Statistics Center can be accessed ‘out of the box’ directly by clicking the Icon on the right

hand side of the video:

It’s also recommended to add the statistics icon and link to the odds section (to be done on customer side) and refer to the head 2 head statistics for on match level:

Page | 29 www.betradar.com

The Virtual Football Statistics Center can be opened in a separate popup window by calling the following function call. To use this function it is necessary to add a name to the GUI iFrame tag (e.g. <iframe width="xxx"

height="yyy" frameborder="0"… name="vf_iframe"></iframe>)

To open the head to head statistic, use two parameters with the team ids:

League Mode: vf_iframe.openVfStats(teamId1:number,teamId2:number, seasonId:number) e.g vf_iframe.openVfStats(240001, 240002, 22673)

Euro Cup, Nations Cup and Asian Cup: vf_iframe.openVfecStats(teamId1:number,teamId2:number, seasonId:number) e.g vf_iframe.openVfecStats(240001, 240002, 22673)

World Cup: vf_iframe.openVfStats(teamId1:number,teamId2:number, seasonId:number) e.g vf_iframe.openVfStats(348088, 348090, 105389)

Page | 30 www.betradar.com

2.5 Odds Key Definition

Please refer to Betradar_VirtualSports_Rules_EN_vX.X.pdf for betting markets available in Betradar Virtual Football.

• Virtual Football odds key definition is integrated to standard Betradar interface as the

category “Virtual Football” to the regular liveodds configuration. • Go to ‘Configuration’ ‘Live’ ‘Liveodds Config’ ‘Configure Sports’ ‘Soccer

‘Virtual Football Configuration IMPORTANT: Odds key configuration is available on different levels: ‘Soccer’, ‘Virtual Football’ as well as the different tournament groups and the knockout stage. Odds keys on sublevels will be used over oddskey configurations on upper

levels.

* Default values in brackets will be used if field is empty

Page | 31 www.betradar.com

• Enable/disable all: Each line represents one betting market (3way, Total, …) • LO: once the market is unchecked it will be removed from the XML feed • Odds key 1: Odds key definition (range 100 to 150). • Odds key 2 and 3: No impact on Virtual Football • Minimum offer: Odds below this minimum, will be removed from the XML feed • Maximum cap: Odds will be capped to this value

2.6 Micro Virtual Football - never lose focus on virtual betting

In addition to the standard Virtual Football iframes – refer chapter Communication GUI Odds we also provide the Micro iframe in a similar way. Micro Virtual Football is a minimized view of the same Virtual Football data, means the same content as well as a similar integration. Due to its fully responsive design it can be easily integrated into any side bar where the intention is to place it e.g. in the live odds side bar in order to provide added value by offering the opportunity to combine live bets with virtual bets.

Integration similar to standard iframe

Same communication between iframe and odds, refer Communication GUI Odds, Communication Odds GUI

Flexible side bar integration due to fully responsive iFrame size

Test environment: League Mode: https://vfstaging.aitcloud.de/vflmstaging/micro/index?clientid=[S4ID]&lang=<LANGUAGE>

Euro Cup: https://vfstaging.aitcloud.de/vfecstaging/micro/index?clientid=[S4ID]&lang=<LANGUAGE>

Nations Cup: https://vfstaging.aitcloud.de/vfecstaging/micro/index?clientid=[S4ID]&lang=<LANGUAGE>

World Cup: https://vfstaging.aitcloud.de/vfwcstaging/micro/index?clientid=[S4ID]&lang=<LANGUAGE>

Asian Cup: https://vfstaging.aitcloud.de/vfasstaging/micro/index?clientid=[S4ID]&lang=<LANGUAGE>

Page | 32 www.betradar.com

Similar to the standard Virtual Football integration the odds visualization as well as the betting management needs to be provided by the customer. As mentioned above Micro Virtual Football uses the same odds feed, refer chapter Odds Implementation On customer side XML feed odds or Unified Odds Feed integration is necessary to load the odds

into the database in order to be able to take bets.

The Betradar Virtual Sport Data feeds continuously provides messages, thus it’s mandatory to have a permanent and stable connection. Refer to the respective specification for detailed information on how to handle alive message delays or missing alive messages, how to handle connection problems and disconnects, as well as how and why to synchronize after a reconnect. Quick start Unified Odds Feed:

Virtual Sports are part of Betradar’s Unified Odds feed and just needs to be enabled as an additional product.

Unified Odds Feed SDK available for Java and .NET: (iodocs)

For detailed Unified Odds Feed information refer Betradar_Unified-Odds_Developer_Integration.pdf

Quick start XML Feed:

Implementation similar to other Betradar services.

Bookmaker SDK available for Java and .NET at: (http://sdk.sportradar.com/)

For detailed XML feed information refer Betradar_VirtualSports_XML_Format_Specification_Vx.x.pdf

Due to limited side bar navigation space the recommendation is to focus on the most important betting market(s). In addition the match day selector, known from the standard Virtual Football iframes, allows easy switching between future and past match days. The function is implemented through the setVfMatches() function, also used in the standard Virtual Football GUI, refer Communication GUI Odds.

Page | 33 www.betradar.com

3. Virtual Basketball League

Page | 35 www.betradar.com

3.1 User’s View

3.1.1 GUI - Visualization Component (1)

Whole visualization component is delivered as an iFrame with a fixed width of 762 pixels. The height depends on the view (Compact and Skill View available, see page 77). The Skill View is used by default and has a size of 762 x 662 pixels. The Compact View has a size of 762 x 797 pixels. Test environment: https://vblstaging.aitcloud.de/vblstaging/vbl/index?clientid=<CLIENTID>&lang=<LANGUAGE>

Multi language support by optional ‚language‘ parameter in URL.

1

2

Page | 36 www.betradar.com

Switch between available views by pressing the dedicated button in the top left corner of the GUI

Compact View (762 x 797 pixels):

Skill View (762 x 662 pixels):

Page | 37 www.betradar.com

3.2 Odds Implementation

On customer side XML feed odds or Unified Odds Feed integration is necessary to load the odds into the database in order to be able to take bets. The Betradar Virtual Sport Data feeds continuously provides messages, thus it’s mandatory to have a permanent and stable connection. Refer to the respective specification for detailed information on how to handle alive message delays or missing alive messages, how to handle connection problems and disconnects, as well as how and why to synchronize after a reconnect. Quick start Unified Odds Feed:

Virtual Sports are part of Betradar’s Unified Odds feed and just needs to be enabled as an additional product.

Unified Odds Feed SDK available for Java and .NET: (iodocs)

For detailed Unified Odds Feed information refer Betradar_Unified-Odds_Developer_Integration.pdf

Quick start XML Feed:

Implementation similar to other Betradar services.

Bookmaker SDK available for Java and .NET at: (http://sdk.sportradar.com/)

Page | 38 www.betradar.com

For detailed XML feed information refer Betradar_VirtualSports_XML_Format_Specification_Vx.x.pdf

messages, how to handle connection problems and disconnects, as well as how and why to synchronize after a reconnect.

3.3 Website Communication

We need to enable communication between the GUI and the odds section (e.g. switch the odds section to selected match day by mouse click at a match day button within the match day selector component). We also need to consider most customer may access Betradar Virtual Sports via more than one domain name (and of course these domain names may change or new domains need to be added).

3.3.1 Proxy on client side

General note on proxy use or SSL / HTTPS integration If you want to integrate Betradar Virtual Sports via multiple domain names or you are using HTTPS on client side, it is mandatory to use the following proxy settings and to integrate all URL’s to Betradar Virtual Sports via relative URLs (“.../...”) instead of absolute URLs (“https://.../...”).

Integration of the Visualization Component (GUI) Multi language support by optional ‚language‘ parameter in URL. Fallback is English, other languages on demand. Test environment (Attribute src of iframe tag):

<iframe src=”vblstaging/vbl/index?clientid=<CLIENTID>&lang=<LANGUAGE>” width=”xxx” height=”yyy” scrolling=”no” name=”vbl_iframe” frameborder=”0”></iframe>

Production environment (Attribute src of iframe-tag): <iframe src=”vbl/vbl/index?clientid=<CLIENTID>&lang=<LANGUAGE>” width=”xxx” height=”yyy” scrolling=”no” name=”vbl_iframe” frameborder=”0”></iframe>

Proxy settings using Apache HTTP Server Proxy settings using Internet Information Services (IIS) Proxy settings using Nginx

Page | 39 www.betradar.com

Proxy settings using Apache HTTP Server

For customers with “webroot integration” “webroot integration” means that the customer integrates the game inside his webroot, i.e. the web page which contains the iframe for the GUI is located in the root directory for the specific domain. For example https://www.example.com/virtualtennisopen.html contains the GUI iframe. Add the following lines to your proxy settings:

<Location /vblstaging> # points to test environment ProxyPass https://vblstaging.aitcloud.de/vblstaging retry=0 ProxyPassReverse https://vblstaging.aitcloud.de/vblstaging RequestHeader unset Accept-Encoding </Location> <Location /vbl> # points to production environment ProxyPass https://vbl<CUSTOMER*>.aitcloud.de/vbl retry=0 ProxyPassReverse https://vbl<CUSTOMER*>.aitcloud.de/vbl RequestHeader unset Accept-Encoding </Location>

*<CUSTOMER> is a customer related string that will be provided by us

If you have not used Apache as a proxy before, put these settings into a small file named "proxy.conf" in your Apache configuration directory (normally /etc/apache2/conf.d/). Please make sure that the proxy modules (mod_proxy_https and mod_proxy) are loaded/enabled. Restart Apache afterwards.

For customers with “subdirectory integration” “subdirectory integration” means that the customer integrates the game inside a subdirectory of his webroot, i.e. the web page which contains the iframe for the GUI is located inside a subdirectory of the webroot of the specific domain. For example https://www.example.com/Odds/virtualDogRacing.html contains the GUI iframe. Add the following lines to your proxy settings:

<Location /<subdirectory**>/vblstaging> # points to test environment ProxyPass https://vblstaging.aitcloud.de/vblstaging retry=0 ProxyPassReverse https://vblstaging.aitcloud.de/vblstaging RequestHeader unset Accept-Encoding </Location> <Location /<subdirectory**>/vbl> # points to production environment ProxyPass https://vbl<CUSTOMER*>.aitcloud.de/vbl retry=0

Page | 40 www.betradar.com

ProxyPassReverse https://vbl<CUSTOMER*>.aitcloud.de/vbl RequestHeader unset Accept-Encoding </Location>

*<CUSTOMER> is a customer related string that will be provided by us **<subdirectory*> means the existing subdirectory on customer side, e,g, <Location /Odds/vbl>

The subdirectory also needs to be configured on Betradar side, thus please provide the subdirectory to Betradar.

If you have not used Apache as a proxy before, put these settings into a small file named "proxy.conf" in your Apache configuration directory (normally /etc/apache2/conf.d/). Please make sure that the proxy modules (mod_proxy_https and mod_proxy) are loaded/enabled. Restart Apache afterwards.

Proxy settings using Internet Information Services (IIS)

Prerequisites: o IIS 7.5 (or higher) o ARR (Application Request Routing) v2.5 (or higher)

ARR – proxy configuration and URL rewriting o Enable proxy in ARR (via IIS GUI)

• Do not create a subdirectory “vbl” or “vblstaging” etc.

• for proxying instead do:

o Set up URL rewriting via config file: edit the file “web.config” in your webserver root directory (or the subdirectory from which vbl should be accessible) and add the following rewrite rules to /configuration/system.webServer/:

<rewrite>

<rules> <rule name="Route the requests for VBL" stopProcessing="true">

<match url="^vbl/(.*)" /> <conditions>

<add input="{CACHE_URL}" pattern="^http(s)?://" /> </conditions> <action type="Rewrite" url="https://vbl<CUSTOMER*>.aitcloud.de/vbl/{R:1}" /> <serverVariables>

<set name="HTTPS_ACCEPT_ENCODING" value="" />

Page | 41 www.betradar.com

</serverVariables> </rule> <rule name="Route the requests for VBL root" stopProcessing="true">

<match url="^vbl$" /> <conditions>

<add input="{CACHE_URL}" pattern="^http(s)?://" /> </conditions> <action type="Rewrite" url="https://vbl<CUSTOMER*>.aitcloud.de/vbl" /> <serverVariables>

<set name="HTTPS_ACCEPT_ENCODING" value="" /> </serverVariables>

</rule> </rules> <outboundRules>

<rule name="RewriteRelativePaths" preCondition="ResponseIsHtml1"> <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^/vbl/(.*)" negate="false" /> <action type="Rewrite" value="/vbl/{R:1}" />

</rule> <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">

<match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^http(s)?://vbl<CUSTOMER*>.aitcloud.de/vbl/(.*)" /> <action type="Rewrite" value="/vbl/{R:2}" />

</rule> <preConditions>

<preCondition name="ResponseIsHtml1"> <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />

</preCondition> </preConditions>

</outboundRules> </rewrite> *<CUSTOMER> is a customer related string that will be provided by Betradar

o Add the following lines to the top of your system.webServer section of the “web.config” file in your webserver root directory to disable the unsupported static compression while leaving dynamic compression unharmed:

<urlCompression doStaticCompression="false" doDynamicCompression="true" dynamicCompressionBeforeCache="false" />

• Depending on your Windows Server configuration and IIS configuration you might need to do some or all of the following additional steps to get the URL rewriting to work:

o Set the LogRewrittenUrlEnabled registry key (run in cmd as one line):

reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Rewrite /v LogRewrittenUrlEnabled /t REG_DWORD /d 0

o Re-order the IIS modules to have URL rewrite module (“RewriteModule”) run before dynamic compression module (“DynamicCompressionModule”). In the IIS GUI in the modules' ordered view the “DynamicCompressionModule” should be ABOVE the “RewriteModule”.

o You may need to add some server variables to allow setting them in the config files. To do this, go to the “URL Rewrite” view in the IIS GUI and click on “Show server variables”. Here you add “HTTPS_ACCEPT_ENCODING” and “HTTPS_HOST”.

o You may need to follow this up with the command “iisreset /noforce”

Page | 42 www.betradar.com

Proxy settings using Nginx

location /vblstaging { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; proxy_redirect default; proxy_pass https://vblstaging.aitcloud.de/vblstaging; }

location /vbl { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; proxy_redirect default; proxy_pass https://vbl<CUSTOMER>.aitcloud.de/vbl; }

3.3.2 Communication GUI Odds

Communication between GUI and Odds is done via JavaScript.

Add Odds from iFrame to BetSlip | placeBets()

In VBL bets can conveniently be placed via the iframe and bets will be added to the BetSlip accordingly. It is equivalent to the XML feed. We offer a combination odds betting market: X fold favourite and X fold outsider. X fold-favourite market offers the possibility of combining either 2,3,4,6 or 8 teams most likely to win. The X fold-outsider market offers the possibility of combining 2,3 or 4 teams most likely to lose.

Page | 43 www.betradar.com

The JavaScript method placeBets will be called in the parent frame and will give it an array as parameter value. Every array element contains the following object with object attributes: { // Equivalent to the XML format specification Odds.id oddsId: [INT] 0, // Equivalent to the XML format specification OddsField.type oddsFieldType: [STRING] '', // odds type given as string type: [STRING] '', // contains the odds, but for validation purposes only validateValue: [FLOAT] 0.00 //contains the Match ID matchId: [INT] 0 // identifier for the products identify: 'vbl' }

If you get an array with only one element, you get a single bet. More than one element is a multibet. You can call methodparam.length to identify the bet type (single or multi). Examples: Single bet: placeBets([ 0: { oddsId: 706759, oddsFieldType: '2', type: “match” validateValue: 1.7, matchId: 266779, identify: 'vbl' } ]);

Multibet: placeBets( [ 0: { oddsId: 706759, oddsFieldType: '1', type: “match” validateValue: 2.0, matchId: 266779, identify: 'vbl' }, 1: { // for combo more than one oddsId: 706761, oddsFieldType: '2', type: “match” validateValue: 1.75, matchId: 266779, identify: 'vbl' }, n: {} ... ] );

Page | 44 www.betradar.com

Matchday Switch | setVblMatchday()

Each time the first half of a match starts or a user clicks a matchday button (1 ... 30) the following function of the parent frame will be called: setVblMatchday({

"season_no":season_id, "season_name":season_name, "match_day":matchday, "event_start": start time as provided via the XML feed, "screen_name": "web" });

e.g setVblMatchday({ "season_no":10384, "season_name":VBL Season 447, "match_day":15, "event_start":1502815680000, "screen_name":"web" }); ‘season_name’ and ‘match_day’ can be found as part of the XML feed Meta response.

3.3.3 Communication Odds GUI

Open Statistics Center | openVblStats()

The VBL Statistics Center can be opened in a separate popup window by calling the openVblStats function.

Page | 45 www.betradar.com

To use this function it is necessary to add a name to the GUI iFrame tag (e.g. <iframe

width="xxx" height="yyy" frameborder="0"… name="vbl_iframe"></iframe>)

To open the fixture page vbl_iframe.openVblStats(<match_id>); e.g vbl_iframe.openVblStats (176740);

To open the head to head statistic, use two parameter with the team ids:

vbl_iframe.openVblStats(<team_home_id>,<team_away_id>); e.g vbl_iframe.openVblStats (189138, 189158);

Preset Matchday | setSelectedMatchday()

The mouse click on a match day of the matchday selector component can be simulated by

calling the function ‘setSelectedMatchday()’.

To use this function it is necessary to add a name to the GUI iFrame tag(e.g. <iframe width="xxx" height="yyy" frameborder="0"… name="vbl_iframe"></iframe>)

vbl_iframe.setSelectedMatchday(matchday); e.g. vbl_iframe.setSelectedMatchday(5);

3.3.4 Height changes of the iframe | setVblHeight()

Each time the height of the GUI changes, either caused by the switch between the 2 available views (compact and skill view) or due to changes of the width, the current height of the body in pixel is sent to the parent frame. setVblHeight({height: [INT] 0}); // in pixel

e.g setVblHeight({height: 898});

Page | 46 www.betradar.com

3.4 Odds Key Definition

Betting Markets

Name Type Type id

Subtype id Specialodds value Oddsfields

Match winner, incl. OT

ft2w 7 37 none 1, 2

Total points, incl. OT ftnw 8 39 The 3 most Balanced

o, u

Handicap, incl. OT ft2w 7 38 3 most balanced 1, 2

Winning margin, incl. OT

ftnw 8 1169 none HT 1-5, HT 6-10, HT 11+, AT 1-5, AT 6-10, HT 11+

1st half winner ft3w 6 22 none 1, x, 2

1st half total points ft2w 7 21 The 3 most Balanced

o, u

1st half handicap ft2w 7 36 The 3 most Balanced

1, 2

1st half winning margin

ftnw 8 1171 none X, HT 1-5, HT 6-10, HT 11+, AT 1-5, AT 6-10, HT 11+

Race to x points ft2w 7 66 20, 40, 60 1, 2

Highest scoring quarter

ftnw 8 238 none 1st, 2nd, 3rd, 4th, equals

Home team total points, incl. OT

ftnw 8 1173 The most balanced per team

o, u

Away team total points, incl. OT

ftnw 8 1175 The most balanced per team

o, u

Page | 47 www.betradar.com

Odds Key Settings in Betradar.com

The VBL odds key definition is available via the standard Betradar interface at www.betradar.com

• VBL odds key definition integrated to standard Betradar interface as category “Virtual

Basketball” to the regular liveodds configuration. • Go to ‘Configuration’ ‘Live’ ‘Liveodds Config’ ‘Configure Sports’ ‘Basketball’ ‘Virtual Basketball’ ‘Virtual Basketball League’ Configuration IMPORTANT: Odds key configuration is available on different levels: ‘Basketball’, ‘Virtual Basketball’ and ‘Virtual Basketball League’. Odds keys on sublevels will be used over oddskey configurations on upper levels.

* Default values in brackets will be used if field is empty

• Enable/disable all: Each line represents one betting market (Winner, Place, …) • LO: once the market is unchecked it will be removed from the XML feed • Odds key: Odds key definition (range 100 to 150). • Minimum offer: Odds below this minimum, will be removed from the XML feed • Maximum cap: Odds will be capped to this value

Page | 48 www.betradar.com

3.5 MicroVBL - never lose focus on virtual betting

In addition to the standard VBL iframe (refer chapter 3.1.1) Betradar also provides the MicroVBL iframe in a similar way. The Micro VBL is a minimized view of the same VBL data, means the same content as well as a similar integration.

Due to its fully responsive design it can be easily integrated into any side bar where the intention is to place it e.g. in the live odds side bar in order to provide added value by offering the opportunity to combine live bets with virtual bets.

Integration similar to standard iframe Same communication between iframe and odds, refer chapter 3.3.2

Flexible side bar integration due to fully responsive iFrame size

Test environment: https://vblstaging.aitcloud.de/vblstaging/micro/index?clientid=[S4ID]&lang=<LANGUAGE>

Similar to the standard VBL the odds visualization as well as the betting management needs to

be provided by the customer. As mentioned above MicroVBL uses the same odds feed, refer

chapter Odds Implementation

On customer side XML feed odds or Unified Odds Feed integration is necessary to load the odds

into the database in order to be able to take bets.

The Betradar Virtual Sport Data feeds continuously provides messages, thus it’s mandatory to

have a permanent and stable connection. Refer to the respective specification for detailed

information on how to handle alive message delays or missing alive messages, how to handle

connection problems and disconnects, as well as how and why to synchronize after a

reconnect.

Quick start Unified Odds Feed:

Virtual Sports are part of Betradar’s Unified Odds feed and just needs to be enabled as an

additional product.

Unified Odds Feed SDK available for Java and .NET:

Page | 49 www.betradar.com

(iodocs)

For detailed Unified Odds Feed information refer

Betradar_Unified-Odds_Developer_Integration.pdf

Quick start XML Feed:

Implementation similar to other Betradar services.

Bookmaker SDK available for Java and .NET at:

(http://sdk.sportradar.com/)

For detailed XML feed information refer

Betradar_VirtualSports_XML_Format_Specification_Vx.x.pdf

Due to limited side bar navigation space the recommendation is to focus on the most important betting market (s). In addition the match day selector, known from the standard VBL iframe, allows easy switching between future and past match days. The function is implemented through the setVblMatchday () function, also used in the VBL GUI, Matchday Switch | setVblMatchday().

GUI: Odds presentation Example:

4. Virtual In-Play Tennis

Page | 51 www.betradar.com

4.1 GUI - Visualization Component

Whole visualization component is delivered as an iframe with a responsive interface between 320 and 1280 pixels

Test environment: https://vtistaging.aitcloud.de/vtistaging/vti/index?clientid=<CLIENTID>&lang=<LANGUAGE> Multi language support by optional ‚language‘ parameter in URL .Most important European languages already supported, others on demand

Page | 52 www.betradar.com

4.2 Odds Implementation

On customer side Unified Odds Feed integration is necessary to load the odds into the database in order to be able to take bets. The Betradar Virtual Sport Data feed continuously provides messages, thus it’s mandatory to have a permanent and stable connection. Refer to the respective specification for detailed information on how to handle alive message delays or missing alive messages, how to handle connection problems and disconnects, as well as how and why to synchronize after a reconnect. Quick start Unified Odds Feed:

Virtual Tennis In-Play is part of Betradar’s Unified Odds feed and just needs to be enabled as an additional product.

Unified Odds Feed SDK available for Java and .NET: (iodocs)

For detailed Unified Odds Feed information refer Betradar_Unified-Odds_Developer_Integration.pdf

4.3 Website Communication

We need to enable communication between the GUI and the odds section.We also need to consider most customers may access Betradar Virtual Sports via more than one domain name (and of course these domain names may change or new domains need to be added).

4.3.1 Proxy on client side

General note on proxy use or SSL / HTTPS integration If you want to integrate Betradar Virtual Sports via multiple domain names or you are using HTTPS on client side, it is mandatory to use the following proxy settings to integrate all URLs to Betradar Virtual Sports via relative URLs (“.../...”) instead of absolute URLs (“https://.../...”).

Integration of the Visualization Component (GUI) Multi language support by optional ‚language‘ parameter in URL. Fallback is English, other languages on demand. Test environment (Attribute src of iframe tag):

<iframe src=”vtistaging/vti/index/clientid=<CLIENTID>&lang=<LANGUAGE>” width=”xxx” height=”yyy” scrolling=”no” name=”vti_iframe” frameborder=”0”></iframe>

Production environment (Attribute src of iframe-tag): <iframe src=”vti/vti/index/clientid=<CLIENTID>&lang=<LANGUAGE>” width=”xxx” height=”yyy” scrolling=”no” name=”vti_iframe” frameborder=”0”></iframe>

Proxy settings using Apache HTTP Server

Page | 53 www.betradar.com

Proxy settings using Internet Information Services (IIS) Proxy settings using Nginx.

Proxy settings using Apache HTTPS Server

For customers with “webroot integration” “webroot integration” means that the customer integrates the game inside his webroot, i.e. the web page which contains the iframe for the GUI is located in the root directory for the specific domain. For example https://www.example.com/virtualtennisinplay.html contains the GUI iframe. Add the following lines to your proxy settings:

<Location /vtistaging> # points to test environment ProxyPass https://vtistaging.aitcloud.de/vtistaging retry=0 ProxyPassReverse https://vtistaging.aitcloud.de/vtistaging RequestHeader unset Accept-Encoding </Location> <Location /vti> # points to production environment ProxyPass https://vti<CUSTOMER*>.aitcloud.de/vti retry=0 ProxyPassReverse https://vti<CUSTOMER*>.aitcloud.de/vti RequestHeader unset Accept-Encoding </Location>

*<CUSTOMER> is a customer related string that will be provided by us

If you have not used Apache as a proxy before, put these settings into a small file named "proxy.conf" in your Apache configuration directory (normally /etc/apache2/conf.d/). Please make sure that the proxy modules (mod_proxy_https and mod_proxy) are loaded/enabled. Restart Apache afterwards.

For customers with “subdirectory integration” “subdirectory integration” means that the customer integrates the game inside a subdirectory of his webroot, i.e. the web page which contains the iframe for the GUI is located inside a subdirectory of the webroot of the specific domain. For example https://www.example.com/Odds/virtualtennisinplay.html contains the GUI iframe. Add the following lines to your proxy settings:

<Location /<subdirectory**>/vtistaging> # points to test environment ProxyPass https://vtistaging.aitcloud.de/vtistaging retry=0 ProxyPassReverse https://vtistaging.aitcloud.de/vtistaging RequestHeader unset Accept-Encoding

Page | 54 www.betradar.com

</Location> <Location /<subdirectory**>/vti> # points to production environment ProxyPass https://vti<CUSTOMER*>.aitcloud.de/vti retry=0 ProxyPassReverse https://vti<CUSTOMER*>.aitcloud.de/vti RequestHeader unset Accept-Encoding </Location>

*<CUSTOMER> is a customer related string that will be provided by us **<subdirectory*> means the existing subdirectory on customer side, e,g, <Location /Odds/vti>

The subdirectory also needs to be configured on Betradar side, thus please provide the subdirectory to Betradar.

If you have not used Apache as a proxy before, put these settings into a small file named "proxy.conf" in your Apache configuration directory (normally /etc/apache2/conf.d/). Please make sure that the proxy modules (mod_proxy_https and mod_proxy) are loaded/enabled. Restart Apache afterwards.

Proxy settings using Internet Information Services (IIS)

Prerequisites: o IIS 7.5 (or higher) o ARR (Application Request Routing) v2.5 (or higher)

ARR – proxy configuration and URL rewriting o Enable proxy in ARR (via IIS GUI)

• Do not create a subdirectory “vti” or “vtistaging” etc.

• for proxying instead do:

o Set up URL rewriting via config file: edit the file “web.config” in your webserver root directory (or the subdirectory from which vti should be accessible) and add the following rewrite rules to /configuration/system.webServer/:

<rewrite>

<rules> <rule name="Route the requests for VTI" stopProcessing="true">

<match url="^vti/(.*)" />

Page | 55 www.betradar.com

<conditions> <add input="{CACHE_URL}" pattern="^http(s)?://" />

</conditions> <action type="Rewrite" url="https://vto<CUSTOMER*>.aitcloud.de/vti/{R:1}" /> <serverVariables>

<set name="HTTPS_ACCEPT_ENCODING" value="" /> <set name="HTTPS_X_FORWARDED_HOST" value="{HTTPS_HOST}" /> <set name="HTTPS_X_FORWARDED_SERVER" value="{HTTPS_HOST}" />

</serverVariables> </rule> <rule name="Route the requests for VTI root" stopProcessing="true">

<match url="^vti*$" /> <conditions>

<add input="{CACHE_URL}" pattern="^http(s)?://" /> </conditions> <action type="Rewrite" url="https://vto<CUSTOMER*>.aitcloud.de/vti" /> <serverVariables>

<set name="HTTPS_ACCEPT_ENCODING" value="" /> <set name="HTTPS_X_FORWARDED_HOST" value="{HTTPS_HOST}" /> <set name="HTTPS_X_FORWARDED_SERVER" value="{HTTPS_HOST}" />

</serverVariables> </rule>

</rules> <outboundRules>

<rule name="RewriteRelativePaths" preCondition="ResponseIsHtml1"> <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^/vti/(.*)" negate="false" /> <action type="Rewrite" value="/vti/{R:1}" />

</rule> <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">

<match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^http(s)?://vti<CUSTOMER*>.aitcloud.de/vti/(.*)" /> <action type="Rewrite" value="/vti/{R:2}" />

</rule> <preConditions>

<preCondition name="ResponseIsHtml1"> <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />

</preCondition> </preConditions>

</outboundRules> </rewrite>

*<CUSTOMER> is a customer related string that will be provided by us

o Add the following lines to the top of your system.webServer section of the “web.config” file in your webserver root directory to disable the unsupported static compression while leaving dynamic compression unharmed:

<urlCompression doStaticCompression="false" doDynamicCompression="true" dynamicCompressionBeforeCache="false" />

• Depending on your Windows Server configuration and IIS configuration you might need to do some or all of the following additional steps to get the URL rewriting to work:

o Set the LogRewrittenUrlEnabled registry key (run in cmd as one line):

reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Rewrite /v LogRewrittenUrlEnabled /t REG_DWORD /d 0

Page | 56 www.betradar.com

o Re-order the IIS modules to have URL rewrite module (“RewriteModule”) run before dynamic compression module (“DynamicCompressionModule”). In the IIS GUI in the modules' ordered view the “DynamicCompressionModule” should be ABOVE the “RewriteModule”.

o You may need to add some server variables to allow setting them in the config files. To do this, go to the “URL Rewrite” view in the IIS GUI and click on “Show server variables”. Here you add “HTTPS_ACCEPT_ENCODING”, “HTTPS_HOST”, “HTTPS_X_FORWARDED_HOST”, “HTTPS_X_FORWARDED_SERVER” and “HTTPS_ACCEPT_ENCODING”.

o You may need to follow this up with the command “iisreset /noforce”

Proxy settings using Nginx

location /vtistaging { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; proxy_redirect default; proxy_pass https://vtistaging.aitcloud.de/vtistaging; } location /vti { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; proxy_redirect default; proxy_pass https://vti<CUSTOMER>.aitcloud.de/vti; }

Page | 57 www.betradar.com

4.3.2 Communication GUI Odds

Communication between GUI and Odds is done via JavaScript.

Virtual Tennis In-Play uses an event based system (post messages) to communicate between

website and iframe. The following events will be used:

Switch Events

The switchEvents event is triggered if a rally is finished and has an outcome.

// switchEvents event data

{

application: "online",

sport: "tennisInPlay",

server_timestamp: 1523339500000,

unique_tournament_id: 20648,

event_start: 1523339500000,

event_ids: [

17027160

],

unified_event_ids: [

"vti:match:17027160"

]

}

SetHeight The setHeight event is trigger if any changes of the application GUI height happens.

// setHeight event data

{

application: "online",

sport: "tennisInPlay",

server_timestamp: 1523339500000,

unique_tournament_id: 20648,

height: 512

}

PlaceBets

The placeBets event is triggered if the user tries to place a bet from the application interface

//placeBets event data

{

application: "online",

sport: "tennisInPlay",

server_timestamp: 1523339500000,

Page | 58 www.betradar.com

unique_tournament_id: 20648,

bets: [

{

event_id: 17027160,

unified_event_id: "vti:match:17027160",

market_specifier: "setnr=1|gamenr=1",

market_id: 210,

outcome_id: 4,

odd_value: "1.80"

}

]

}

Note: For this product there is no function call but rather have event handlers in place as

compared to VTO.

Example implementation

This example implementation can be used to listen to the events of the iframe and execute

function based on the received event type and event data.

/* register a listener to the message event and use the subscribe function as the callback */

window.addEventListener("message", subscribe, false);

/**

* A callback function used by the message event. It takes the event, parse the data and call the

message handler (handleMessage)

* @param {event} message The event object given by the message event

*/

function subscribe(message) {

//the data has to be parsed as JSON because the Virtual Sports application sends only strings as

payload

var data = JSON.parse(message.data)

handleMessage(data.messageType, data.messageData)

}

/**

* Function to handle a message object by the Virtual Sports application

* @param {string} type The message type contains the name of the message

* @param {object} data The message data contains all data related to the message

*/

function handleMessage(type, data) {

switch (type) {

Page | 59 www.betradar.com

case 'switchEvents':

/* Do 'switchEvents' stuff here */

break

case 'setHeight':

/* Do 'setHeight' stuff here */

break

case 'placeBets':

/* Do 'placeBets' stuff here */

break

case 'seekEvents':

/* 'seekEvents' is not supported by Virtual In-Play Tennis */

break

default:

/* handle unknown message types here and exit function*/

return

}

/* Do general stuff here if access to the data is needed */

}

Add Odds from iFrame to BetSlip

Within the quick betting area odds can be selected. When odds are selected the placeBets event will then be triggered. In VTI bets can be placed conveniently via the iframe and bets will be added to the BetSlip accordingly. In a nutshell, bets can be placed from the application to the bet slip by calling the placeBets events (please refer to page 79 for an example).

4.3.3 Communication Odds GUI

Virtual Tennis In-Play uses an event based system (post messages) to communicate between

website and iframe. The following data structure has to be used to send data to the iframe.

OpenEventStats

The openEventStats event tries to open the statistic center pop up. The event needs an event

id or unified event id to open the statistic center.

// openEventStats message data

{

messageType: 'openEventStats',

messageData: [17027160]

}

Page | 60 www.betradar.com

OpenCompetitorStats

The openCompetitorStats event tries to open the statistic center pop up. The event needs the

competitor id or unified competitor id of two competitors to open the statistic center.

// openCompetitorStats message data

{

messageType: 'openCompetitorStats',

messageData: [401441, 401447]

}

Note: For this product there is no function call but rather have event handlers in place as

compared to VTO.

Example implementation

This example implementation can be used to send events to the iFrame and execute function

based on the send event type and event data.

/**

* Function to dispatch messages to the Virtual Sports application. This messages triggers functions

related to them

* @param {HTMLElement} The iFrame of the Virtual Sports application

* @param {object} message The message which is used by the application and triggers its related

function

*/

function dispatch(iFrame, message) {

iFrame.contentWindow.postMessage(JSON.stringify(message), '*')

}

/**

* Function to create message object to be used in the dispatcher function

* @param {string} type The name which is related to the application function

* @param {object} data The data which is used by the application function

*/

function createMessage(type, data) {

return {

messageType: type,

messageData: data

}

}

/* These are example calls of the dispatch function */

/* This call creates and triggers a message with the type 'openEventStats' with an event id 17027160

*/

dispatch(

Page | 61 www.betradar.com

document.getElementById('product-iFrame'),

createMessage('openEventStats', [17027160]))

/* This call creates and triggers a message with the type 'openEventStats' with competitor ids

401441 & 401447 */

dispatch(

document.getElementById('product-iFrame'),

createMessage('openCompetitorStats', [401441, 401447]))

Get Player Nationality Images

As one part of the odds visualization thumbnails are displayed and can be embedded directly in the HTML code:

Testsystem:

<img src="https://vtistaging.aitcloud.de/vtistaging/getFlag/<client_id>**/<playerid>.png" alt=""> e.g. <img src="https://vtistaging.aitcloud.de/vtistaging/getFlag/411/1.png" alt="">

Livesystem:

<img src="https://vti<CUSTOMER>*.aitcloud.de/vti/getFlag/<client_id>**/<playerid>.png" alt=""> e.g. <img src="https://vti<CUSTOMER>*.aitcloud.de/vti/getFlag/411/1.png" alt="">

* <CUSTOMER> related string to be provided by Sportradar * *Customer related <client_id> to be provided by Sportradar

If you are facing problems with the http-link in a https page, we recommend to use the proxy for this call too. (see: “Proxy on client side” page 43ff)

e.g. <img src="http://<CUSTOMERPROXY>/vti/getFlag/411/1.png" alt="">

Page | 62 www.betradar.com

4.4 Odds Key Definition

Betting Markets

For information on betting markets as well as other general information please refer to:

https://goo.gl/qYKWWH

Odds Key Settings on Betradar.com

The VTI odds key definition is available via the standard Betradar interface at www.betradar.com

• VTI odds key definition integrated to standard Betradar interface as category “Virtual Tennis” to the regular liveodds configuration.

• Go to ‘Configuration’ ‘Live’ ‘Liveodds Config’ ‘Configure Sports’ ‘Tennis ‘Virtual Tennis’ Configuration IMPORTANT: Odds key configuration is available on different levels: ‘Tennis, ‘Virtual Tennis’. Odds keys on sublevels will be used over odds key configurations on upper levels.

Page | 63 www.betradar.com

* Default values in brackets will be used if field is empty

• Enable/disable all: Each line represents one betting market (Winner, Place, …) • LO: once the market is unchecked it will be removed from the XML feed • Odds key: Odds key definition (range 100 to 150). • Minimum offer: Odds below this minimum, will be removed from the XML feed • Maximum cap: Odds will be capped to this value

5. Virtual Tennis Open

Page | 65 www.betradar.com

5.1 User’s View

5.1.1 Visualization Component (1)

Whole visualization component is delivered as an iFrame with a fixed size. 762 x 407 pixel Test environment: https://vtostaging.aitcloud.de/vtostaging/vto/index/clientid:<CLIENTID>/lang:<LANGUAGE> Multi language support by optional ‚language‘ parameter in URL .Most important European languages already supported, others on demand

Page | 66 www.betradar.com

5.2 Odds Implementation

On customer side XML feed odds or Unified Odds Feed integration is necessary to load the odds into the database in order to be able to take bets. The Betradar Virtual Sport Data feeds continuously provides messages, thus it’s mandatory to have a permanent and stable connection. Refer to the respective specification for detailed information on how to handle alive message delays or missing alive messages, how to handle connection problems and disconnects, as well as how and why to synchronize after a reconnect. Quick start Unified Odds Feed:

Virtual Sports are part of Betradar’s Unified Odds feed and just needs to be enabled as an additional product.

Unified Odds Feed SDK available for Java and .NET: (iodocs)

For detailed Unified Odds Feed information refer Betradar_Unified-Odds_Developer_Integration.pdf

Quick start XML Feed:

Implementation similar to other Betradar services.

Bookmaker SDK available for Java and .NET at: (http://sdk.sportradar.com/)

For detailed XML feed information refer Betradar_VirtualSports_XML_Format_Specification_Vx.x.pdf

5.3 Website Communication

We need to enable communication between the GUI and the odds section (e.g. switch the odds section to selected match day by mouse click at a match day button within the match day selector component). We also need to consider most customer may access Betradar Virtual Sports via more than one domain name (and of course these domain names may change or new domains need to be added).

5.3.1 Proxy on client side

General note on proxy use or SSL / HTTPS integration If you want to integrate Betradar Virtual Sports via multiple domain names or you are using HTTPS on client side, it is mandatory to use the following proxy settings and to integrate all URL’s to Betradar Virtual Sports via relative URLs (“.../...”) instead of absolute URLs (“https://.../...”).

Page | 67 www.betradar.com

Integration of the Visualization Component (GUI) Multi language support by optional ‚language‘ parameter in URL. Fallback is English, other languages on demand. Test environment (Attribute src of iframe tag):

<iframe src=”vtostaging/vto/index/clientid:<CLIENTID>/lang:<LANGUAGE>” width=”xxx” height=”yyy” scrolling=”no” name=”vto_iframe” frameborder=”0”></iframe>

Production environment (Attribute src of iframe-tag): <iframe src=”vto/vto/index/clientid:<CLIENTID>/lang:<LANGUAGE>” width=”xxx” height=”yyy” scrolling=”no” name=”vto_iframe” frameborder=”0”></iframe>

Proxy settings using Apache HTTP Server Proxy settings using Internet Information Services (IIS) Proxy settings using Nginx.

Proxy settings using Apache HTTP Server

For customers with “webroot integration” “webroot integration” means that the customer integrates the game inside his webroot, i.e. the web page which contains the iframe for the GUI is located in the root directory for the specific domain. For example https://www.example.com/virtualtennisopen.html contains the GUI iframe. Add the following lines to your proxy settings:

<Location /vtostaging> # points to test environment ProxyPass https://vtostaging.aitcloud.de/vtostaging retry=0 ProxyPassReverse https://vtostaging.aitcloud.de/vtostaging RequestHeader unset Accept-Encoding </Location> <Location /vto> # points to production environment ProxyPass https://vto<CUSTOMER*>.aitcloud.de/vto retry=0 ProxyPassReverse https://vto<CUSTOMER*>.aitcloud.de/vto RequestHeader unset Accept-Encoding </Location>

*<CUSTOMER> is a customer related string that will be provided by us

If you have not used Apache as a proxy before, put these settings into a small file named "proxy.conf" in your Apache configuration directory (normally /etc/apache2/conf.d/). Please make sure that the proxy modules (mod_proxy_https and mod_proxy) are loaded/enabled. Restart Apache afterwards.

Page | 68 www.betradar.com

For customers with “subdirectory integration” “subdirectory integration” means that the customer integrates the game inside a subdirectory of his webroot, i.e. the web page which contains the iframe for the GUI is located inside a subdirectory of the webroot of the specific domain. For example https://www.example.com/Odds/virtualDogRacing.html contains the GUI iframe. Add the following lines to your proxy settings:

<Location /<subdirectory**>/vtostaging> # points to test environment ProxyPass https://vtostaging.aitcloud.de/vtostaging retry=0 ProxyPassReverse https://vtostaging.aitcloud.de/vtostaging RequestHeader unset Accept-Encoding </Location> <Location /<subdirectory**>/vto> # points to production environment ProxyPass https://vto<CUSTOMER*>.aitcloud.de/vto retry=0 ProxyPassReverse https://vto<CUSTOMER*>.aitcloud.de/vto RequestHeader unset Accept-Encoding </Location>

*<CUSTOMER> is a customer related string that will be provided by us **<subdirectory*> means the existing subdirectory on customer side, e,g, <Location /Odds/vto>

The subdirectory also needs to be configured on Betradar side, thus please provide the subdirectory to Betradar.

If you have not used Apache as a proxy before, put these settings into a small file named "proxy.conf" in your Apache configuration directory (normally /etc/apache2/conf.d/). Please make sure that the proxy modules (mod_proxy_https and mod_proxy) are loaded/enabled. Restart Apache afterwards.

Proxy settings using Internet Information Services (IIS)

Prerequisites: o IIS 7.5 (or higher) o ARR (Application Request Routing) v2.5 (or higher)

ARR – proxy configuration and URL rewriting o Enable proxy in ARR (via IIS GUI)

Page | 69 www.betradar.com

• Do not create a subdirectory “vto” or “vtostaging” etc.

• for proxying instead do:

o Set up URL rewriting via config file: edit the file “web.config” in your webserver root directory (or the subdirectory from which vto should be accessible) and add the following rewrite rules to /configuration/system.webServer/:

<rewrite>

<rules> <rule name="Route the requests for VTO" stopProcessing="true">

<match url="^vto/(.*)" /> <conditions>

<add input="{CACHE_URL}" pattern="^http(s)?://" /> </conditions> <action type="Rewrite" url="https://vto<CUSTOMER*>.aitcloud.de/vto/{R:1}" /> <serverVariables>

<set name="HTTPS_ACCEPT_ENCODING" value="" /> <set name="HTTPS_X_FORWARDED_HOST" value="{HTTPS_HOST}" /> <set name="HTTPS_X_FORWARDED_SERVER" value="{HTTPS_HOST}" />

</serverVariables> </rule> <rule name="Route the requests for VTO root" stopProcessing="true">

<match url="^vto*$" /> <conditions>

<add input="{CACHE_URL}" pattern="^http(s)?://" /> </conditions> <action type="Rewrite" url="https://vto<CUSTOMER*>.aitcloud.de/vto" /> <serverVariables>

<set name="HTTPS_ACCEPT_ENCODING" value="" /> <set name="HTTPS_X_FORWARDED_HOST" value="{HTTPS_HOST}" /> <set name="HTTPS_X_FORWARDED_SERVER" value="{HTTPS_HOST}" />

</serverVariables> </rule>

</rules> <outboundRules>

<rule name="RewriteRelativePaths" preCondition="ResponseIsHtml1"> <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^/vto/(.*)" negate="false" /> <action type="Rewrite" value="/vto/{R:1}" />

</rule> <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">

<match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^http(s)?://vto<CUSTOMER*>.aitcloud.de/vto/(.*)" /> <action type="Rewrite" value="/vto/{R:2}" />

</rule> <preConditions>

<preCondition name="ResponseIsHtml1">

Page | 70 www.betradar.com

<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" /> </preCondition>

</preConditions> </outboundRules>

</rewrite>

*<CUSTOMER> is a customer related string that will be provided by us

o Add the following lines to the top of your system.webServer section of the “web.config” file in your webserver root directory to disable the unsupported static compression while leaving dynamic compression unharmed:

<urlCompression doStaticCompression="false" doDynamicCompression="true" dynamicCompressionBeforeCache="false" />

• Depending on your Windows Server configuration and IIS configuration you might need to do some or all of the following additional steps to get the URL rewriting to work:

o Set the LogRewrittenUrlEnabled registry key (run in cmd as one line):

reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Rewrite /v LogRewrittenUrlEnabled /t REG_DWORD /d 0

o Re-order the IIS modules to have URL rewrite module (“RewriteModule”) run before dynamic compression module (“DynamicCompressionModule”). In the IIS GUI in the modules' ordered view the “DynamicCompressionModule” should be ABOVE the “RewriteModule”.

o You may need to add some server variables to allow setting them in the config files. To do this, go to the “URL Rewrite” view in the IIS GUI and click on “Show server variables”. Here you add “HTTPS_ACCEPT_ENCODING”, “HTTPS_HOST”, “HTTPS_X_FORWARDED_HOST”, “HTTPS_X_FORWARDED_SERVER” and “HTTPS_ACCEPT_ENCODING”.

o You may need to follow this up with the command “iisreset /noforce”

Proxy settings using Nginx

location /vtostaging { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; proxy_redirect default; proxy_pass https://vtostaging.aitcloud.de/vtostaging; }

Page | 71 www.betradar.com

location /vto { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; proxy_redirect default; proxy_pass https://vto<CUSTOMER>.aitcloud.de/vto; }

5.3.2 Communication GUI Odds

Communication between GUI and Odds is done via JavaScript.

Switch Odds List (to match related odds)

This function is called once after loading the page and with every Betstop sending the parameters tournament and round. This function can be used to bring the match related odds to the users focus:

setVtoRound({'Tournament':<tournament_id*>, 'Round': <round_number>, ‘RoundId’: <round_id>}); e.g. setVtoRound({'Tournament':1018176, 'Round': 1, ‘RoundId’: 26});

Rounds need to be mapped as follows:

Tournament Round

‘Round’ ‘RoundId’*

Round 16 1 26

Round 8 2 27

Semifinals 3 28

Finals 4 29

*as defined in XML feed

Page | 72 www.betradar.com

Add Odds from iFrame to BetSlip

In VTO bets can be placed conveniently via the iframe and bets will be added to the BetSlip accordingly. It is equivalent to the XML feed.

The JavaScript method placeBets will be called in the parent frame and will give it an array as parameter value. Every array element contains the following object with object attributes: { // Equivalent to the XML format specification Odds.id oddsId: [INT] 0, // Equivalent to the XML format specification OddsField.type oddsFieldType: [STRING] '', // odds type given as string type: [STRING] '', // contains the odds, but for validation purposes only

Page | 73 www.betradar.com

validateValue: [FLOAT] 0.00 //contains the Match ID matchId: [INT] 0 // identifier for the products identify: 'vto' }

If you get an array with only one element, you get a single bet. More than one element is a multibet. You can call methodparam.length to identify the bet type (single or multi). Examples: Single bet: placeBets([ 0: { oddsId: 706759, oddsFieldType: '2', type: “set 1” validateValue: 1.7, matchId: 266779, identify: 'vto' } ]);

Multibet: placeBets( [ { oddsId: 706759, oddsFieldType: '1', type: “game 1” validateValue: 2.0, matchId: 266779, identify: 'vto' }, { // for combo more than one oddsId: 706761, oddsFieldType: '2', type: “game 1” validateValue: 1.75, matchId: 266779, identify: 'vto' }, ... ] );

5.3.3 Communication Odds GUI

Get Player Nationality Images

As one part of the odds visualization thumbnails are displayed and can be embedded directly in the HTML code.

Page | 74 www.betradar.com

Testsystem:

<img src="https://vtostaging.aitcloud.de/vtostaging/getFlag/<client_id>**/<playerid>.png" alt=""> e.g. <img src="https://vtostaging.aitcloud.de/vtostaging/getFlag/411/1.png" alt="">

Livesystem:

<img src="https://vto<CUSTOMER>*.aitcloud.de/vto/getFlag/<client_id>**/<playerid>.png" alt=""> e.g. <img src="https://vto<CUSTOMER>*.aitcloud.de/vto/getFlag/411/1.png" alt="">

* <CUSTOMER> related string to be provided by Sportradar * *Customer related <client_id> to be provided by Sportradar

If you are facing problems with the http-link in a https page, we recommend to use the proxy for this call too. (see: “Proxy on client side” page 43ff)

e.g. <img src="https://<CUSTOMERPROXY>/vto/getFlag/411/1.png" alt="">

Get Player IDs The player IDs can be obtained from the XML feed at this point by parsing the HomeTeam and AwayTeam ids as seen in the example below: <Match active="1" matchid="19446102" msgnr="14" score="1:2" status="ended"> <MatchInfo> <DateOfMatch>1530621655000</DateOfMatch> <Sport id="5">Tennis</Sport> <Category id="977">Virtual Tennis</Category> <Tournament id="2297816">Virtual Tennis Open;Grandstand Open 151659;Quarterfinals</Tournament> <HomeTeam id="7233422" uniqueid="153622">A. Barbosa</HomeTeam> <AwayTeam id="7233418" uniqueid="153618">A. Miguel</AwayTeam> </MatchInfo> </Match>

Page | 75 www.betradar.com

5.3.4 Additional Functionality

First Serve

Especially for betting markets related to game 1 it is important to highlight the player in the odds frame who is going to have the first serve. In VTO the player described as “AwayTeam” in the XML Feed will always have the first serve.

<MatchInfo> <DateOfMatch>1406700895000</DateOfMatch> <Sport id="5">Tennis</Sport> <Category id="977">Virtual Tennis</Category> <Tournament id="1008038">Virtual Tennis Open;Britannia Open 9546;R16</Tournament> <HomeTeam id="7233409" uniqueid="153609">Sergei Kournikov</HomeTeam> <AwayTeam id="7233406" uniqueid="153606">Davor Srna</AwayTeam> </MatchInfo>

Color Indication

The Virtual Tennis Open is based on a dual tournament approach, to avoid gaps where no bets are possible. The two tournaments make it necessary to guide customers as good as possible. With dedicated header images in the corresponding tournament color above the odds section, customers are always aware which tournament the current odds are belonging to. Banners need to be either Green for the “Britannia Open” or Blue for the “Grandstand Open”. In the XML feed both tournaments are mentioned by name (Britannia Open / Grandstand Open) and can easily be distinguished. Example in the Betradar Virtual Sports Demonstrator: https://betradar.com/virtualsports/vto

Page | 76 www.betradar.com

Open Statistics Center

The VTO Statistics Center can be opened in a separate popup window by calling the openVtoStats function. To use this function it is necessary to add a name to the GUI iFrame tag (e.g. <iframe

width="xxx" height="yyy" frameborder="0"… name="vto_iframe"></iframe>)

vto_iframe.openVtoStats(<match_id>); e.g vto_iframe.openVtoStats (176740);

Page | 77 www.betradar.com

Page | 78 www.betradar.com

5.4 Odds Key Definition

Betting Markets

Name Market description

Winner of game 1 in set 1 You bet that the player you selected will win the first game of the first set

Correct score of game 1 in set 1 You bet on the correct score of the first game of the first set

Winner of set 1 You bet that the player you selected will win the first set

Correct score of set 1 You bet on the correct score of the first set

Total number of games in set 1 You bet that the total number of games in the first set will be over / under a specific value

Odd/even number of games in set 1

You bet that the total number of games in the first set will be even / uneven

Winner of the match You bet that the player you selected will win the match

Final Result (in sets - best of 3) You bet on the Final Result, being the number of sets each player wins during the match.

Total number of games in match

You bet that the total number of games in the whole game will be over / under a specific value

General Explanation

Betting on a VTO match is allowed up to 10 seconds prior to the match start. Betting is offered on game- set- and match level. Betting markets are always opened for at least 3:30 minutes prior to the match (betting on the next available grass round while the hard court round is in progress and vice versa). The following match related betting options are available:

Game level betting

Winner of game 1 in set 1 (1 - home team wins; 2 - away team wins)

Correct score of game 1 in set 1 (game-0; game-15; game-30; game-40 - 0-game; 15-game; 30-game; 40-game)

Set level betting

Winner of set 1 (1 - home team wins; 2 - away team wins)

Correct score of set 1: (6:0; 6:1; 6:2; 6:3; 6:4; 7:5; 7:6 – 0:6; 1:6; 2:6; 3:6: 4:6; 5:7; 6:7)

Total number of games in set 1: (Over / Under, 3 different offers)

Odd/even number of games in set 1: (Odd / Even)

Match level betting

Winner of the match (1 - home team wins; 2 - away team wins)

Final Result (in sets - best of 3) (2:0; 2:1 – 0:2; 1:2)

Total number of games in match: (Over / Under, 1 offer)

Page | 79 www.betradar.com

Odds Key Settings on Betradar.com

The VTO odds key definition is available via the standard Betradar interface at www.betradar.com

• VTO odds key definition integrated to standard Betradar interface as category “Virtual Tennis” to the regular liveodds configuration.

• Go to ‘Configuration’ ‘Live’ ‘Liveodds Config’ ‘Configure Sports’ ‘Tennis ‘Virtual Tennis’ Configuration IMPORTANT: Odds key configuration is available on different levels: ‘Tennis, ‘Virtual Tennis’. Odds keys on sublevels will be used over odds key configurations on upper levels.

* Default values in brackets will be used if field is empty

• Enable/disable all: Each line represents one betting market (Winner, Place, …) • LO: once the market is unchecked it will be removed from the XML feed • Odds key: Odds key definition (range 100 to 150). • Minimum offer: Odds below this minimum, will be removed from the XML feed • Maximum cap: Odds will be capped to this value

6. Virtual Horse Classics

Page | 81 www.betradar.com

6.1 User’s View

6.1.1 GUI - Visualization Component (1)

Whole visualization component is delivered as an iFrame with a fixed size. 762 x 350 pixel

Test environment: https://vhc20staging.aitcloud.de/vhcstaging/vhc/index/clientid:<CLIENTID>/lang:<LANGUAGE>

Multi language support by optional ‚language‘ parameter in URL .Most important European languages already supported, others on demand

Page | 82 www.betradar.com

6.1.2 Odds Component (2)

Odds delivery via ‚Betradar Gaming Odds XML-Feeds‘ (dedicated feed per sport) Staging environment: virtualstaging2.betradar.com port 1983 Live environment: vsportsodds.betradar.com port 1983

Limited to SSL connection (for security reasons, because of highly automated system)

Separate XML Format Specification available (Betradar_Virtual_Sports_XML_Format_Specification_Vx.x.pdf)

Provide server IP’s that access the XML-Feeds from customer side (multiple IP’s possible)

Implementation similar to existing ‘Betradar Live Odds‘ XML feed

6.2 XML Odds Feed

The XML feed continuously provides messages, thus it’s mandatory to have a permanent and stable connection. Refer to Betradar_Virtual_Sports_XML_Format_Specification_Vx.x.pdf for detailed XML feed information on how to handle alive message delays or missing alive messages, how to handle connection problems and disconnects, as well as how and why to synchronize after a reconnect.

6.3 Website Communication

We need to enable communication between the GUI and the odds section (e.g. switch the odds section to selected match day by mouse click at a match day button within the match day selector component). We also need to consider most customer may access Betradar Virtual Sports via more than one domain name (and of course these domain names may change or new domains need to be added).

6.3.1 Proxy on client side

General note on proxy use or SSL / HTTPS integration

If you want to integrate Betradar Virtual Sports via multiple domain names or you are using HTTPS on client side, it is mandatory to use the following proxy settings and to integrate all URL’s to Betradar Virtual Sports via relative URLs (“.../...”) instead of absolute URLs (“https://.../...”).

Page | 83 www.betradar.com

Integration of the Visualization Component (GUI)

Multi language support by optional ‚language‘ parameter in URL. Fallback is English, other languages on demand. Test environment (Attribute src of iframe tag): src=”vhcstaging/vhc/index/clientid:<CLIENTID>/lang:<LANGUAGE>”

Production environment (Attribute src of iframe-tag): src=”vhc/vhc/index/clientid:<CLIENTID>/lang:<LANGUAGE>”

Proxy settings for Apache HTTPS Server Proxy settings for Internet Information Services (IIS) Proxy settings using Nginx

Proxy settings for Apache HTTPS Server

For customers with “webroot integration”

“webroot integration” means that the customer integrates the game inside his webroot, i.e. the web page which contains the iframe for the GUI is located in the root directory for the specific domain. For example https://www.example.com/virtualfootballleague.html contains the GUI iframe. Add the following lines to your proxy settings:

<Location /vhcstaging> # points to test environment ProxyPass https://vhc20staging.aitcloud.de/vhcstaging retry=0 ProxyPassReverse https://vhc20staging.aitcloud.de/vhcstaging RequestHeader unset Accept-Encoding </Location> <Location /vhc> # points to production environment ProxyPass https://vhc<CUSTOMER*>.aitcloud.de/vhc retry=0 ProxyPassReverse https://vhc<CUSTOMER*>.aitcloud.de/vhc RequestHeader unset Accept-Encoding </Location>

*<CUSTOMER> is a customer related string that will be provided by us

If you have not used Apache as a proxy before, put these settings into a small file named "proxy.conf" in your Apache configuration directory (normally /etc/apache2/conf.d/). Please make sure that the proxy modules (mod_proxy_https and mod_proxy) are loaded/enabled. Restart Apache afterwards.

Page | 84 www.betradar.com

For customers with “subdirectory integration”

“subdirectory integration” means that the customer integrates the game inside a subdirectory of his webroot, i.e. the web page which contains the iframe for the GUI is located inside a subdirectory of the webroot of the specific domain. For example https://www.example.com/Odds/virtualhorseclassics.html contains the GUI iframe. Add the following lines to your proxy settings:

</Location> <Location /<subdirectory**>/vhcstaging> # points to test environment ProxyPass https://vhc20staging.aitcloud.de/vhcstaging retry=0 ProxyPassReverse https://vhc20staging.aitcloud.de/vhcstaging RequestHeader unset Accept-Encoding </Location> <Location /<subdirectory**>/vhc> # points to production environment ProxyPass https://vhc<CUSTOMER*>.aitcloud.de/vhc retry=0 ProxyPassReverse https://vhc<CUSTOMER*>.aitcloud.de/vhc RequestHeader unset Accept-Encoding

*<CUSTOMER> is a customer related string that will be provided by us **<subdirectory*> means the existing subdirectory on customer side, e.g. <Location /Odds/vhc>

The subdirectory also needs to be configured on Betradar side, thus please provide the subdirectory to Betradar.

If you have not used Apache as a proxy before, put these settings into a small file named "proxy.conf" in your Apache configuration directory (normally /etc/apache2/conf.d/). Please make sure that the proxy modules (mod_proxy_https and mod_proxy) are loaded/enabled. Restart Apache afterwards.

Proxy settings for Internet Information Services (IIS)

Prerequisites: o IIS 7.5 (or higher) o ARR (Application Request Routing) v2.5 (or higher)

ARR – proxy configuration and URL rewriting o Enable proxy in ARR (via IIS GUI)

Page | 85 www.betradar.com

• Do not create a subdirectory “vhc” or “vhcstaging” etc.

• for proxying instead do:

o Set up URL rewriting via config file: edit the file “web.config” in your webserver root directory (or the subdirectory from which vhc should be accessible) and add the following rewrite rules to /configuration/system.webServer/:

<rewrite>

<rules> <rule name="Route the requests for VHC" stopProcessing="true">

<match url="^vhc/(.*)" /> <conditions>

<add input="{CACHE_URL}" pattern="^http(s)?://" /> </conditions> <action type="Rewrite" url="https://vhc<CUSTOMER*>.aitcloud.de/vhc/{R:1}" /> <serverVariables>

<set name="HTTPS_ACCEPT_ENCODING" value="" /> <set name="HTTPS_X_FORWARDED_HOST" value="{HTTPS_HOST}" /> <set name="HTTPS_X_FORWARDED_SERVER" value="{HTTPS_HOST}" />

</serverVariables> </rule> <rule name="Route the requests for VHC root" stopProcessing="true">

<match url="^vhc$" /> <conditions>

<add input="{CACHE_URL}" pattern="^http(s)?://" /> </conditions> <action type="Rewrite"

url="https://vhc<CUSTOMER*>.aitcloud.de/vhc" />

<serverVariables> <set name="HTTPS_ACCEPT_ENCODING" value="" /> <set name="HTTPS_X_FORWARDED_HOST" value="{HTTPS_HOST}" /> <set name="HTTPS_X_FORWARDED_SERVER" value="{HTTPS_HOST}" />

</serverVariables> </rule>

</rules> <outboundRules>

<rule name="RewriteRelativePaths" preCondition="ResponseIsHtml1"> <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^/vhc/(.*)" negate="false" /> <action type="Rewrite" value="/vhc/{R:1}" />

</rule> <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">

<match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^http(s)?://vhc<CUSTOMER*>.aitcloud.de/vhc/(.*)" /> <action type="Rewrite" value=" vhc/{R:2}" />

</rule> <preConditions>

<preCondition name="ResponseIsHtml1">

Page | 86 www.betradar.com

<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />

</preCondition> </preConditions>

</outboundRules> </rewrite>

*<CUSTOMER> is a customer related string that will be provided by Betradar

o Add the following lines to the top of your system.webServer section of the “web.config” file in your webserver root directory to disable the unsupported static compression while leaving dynamic compression unharmed:

<urlCompression doStaticCompression="false" doDynamicCompression="true" dynamicCompressionBeforeCache="false" />

• Depending on your Windows Server configuration and IIS configuration you might need to do some or all of the following additional steps to get the URL rewriting to work:

o Set the LogRewrittenUrlEnabled registry key (run in cmd as one line):

reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Rewrite /v LogRewrittenUrlEnabled /t REG_DWORD /d 0

o Re-order the IIS modules to have URL rewrite module (“RewriteModule”) run before dynamic compression module (“DynamicCompressionModule”). In the IIS GUI in the modules' ordered view the “DynamicCompressionModule” should be ABOVE the “RewriteModule”.

o You may need to add some server variables to allow setting them in the config files. To do this, go to the “URL Rewrite” view in the IIS GUI and click on “Show server variables”. Here you add “HTTPS_ACCEPT_ENCODING”, “HTTPS_HOST”, “HTTPS_X_FORWARDED_HOST”, “HTTPS_X_FORWARDED_SERVER” and “HTTPS_ACCEPT_ENCODING”.

o You may need to follow this up with the command “iisreset /noforce”

Proxy settings using Nginx

location /vhcstaging { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; proxy_redirect default; proxy_pass https://vhc20staging.aitcloud.de/vhcstaging; } location /vhc { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; proxy_redirect default; proxy_pass https://vhc<CUSTOMER>.aitcloud.de/vhc; }

Page | 87 www.betradar.com

6.3.2 Communication GUI Odds

Communication between GUI and Odds is done via JavaScript.

Odds List (to race related position in odds section)

This function is called once after loading the page, each time a user clicks a race in the ‘Race Calendar’ as well as when a race starts. This function can be used to bring the race related odds to the users focus by scrolling the odds list to this position:

setVhcRace({

“Raceday_id”:<raceday_id>,

“Race_number”:<race_number>,

"Action": "application",

"Event_start": “start time as provided via the XML feed

}) ;

e.g.

setVhcRace({

“Raceday_id”: 176740

“Race_number”:4

"Action": "application",

"Event_start": 1502815658000

}) ;

Page | 88 www.betradar.com

Add Odds from iFrame to BetSlip

In VHC bets can conveniently be placed via the iframe and bets will be added to the BetSlip accordingly. It is equivalent to the XML feed.

The JavaScript method placeBets will be called in the parent frame and will give it an array as parameter value. Every array element contains the following object with object attributes: { oddsId: [INT] 0, // Equivalent to the XML format specification Odds.id raceId: [INT] 0 //contains the Match ID type: [STRING] '', // odds type given as string

Page | 89 www.betradar.com

typeid: [INT] 0, // odds field type id given as integer oddsFieldType: [STRING] '', // Equivalent to the XML format specification OddsField.type,

runner’s start position validateValue: [FLOAT] 0.00 // contains the odds, but for validation purposes only identify: 'vhc' // identifier for the products }

Examples: For win and place bets, one runner in oddsFieldType placeBets([ { "oddsId": 17506089, "raceId": 1102804, "type": "win", "typeid": 244, "oddsFieldType": "10", "validateValue": 5.75, "identify": "vhc" } ]);

For forecast and tricast, more than one runner in oddsFieldType placeBets([ { "oddsId": 17506095, "raceId": 1102804, "type": "straighttricast", "typeid": 256, "oddsFieldType": "4,1,6", "validateValue": 35, "identify": "vhc" } ]);

Page | 90 www.betradar.com

6.3.3 Odds GUI

Get Jockey Jerseys

As one part of the odds visualization the horse/jockey related jersey thumbnails are displayed. The jerseys are directly embedded in the XML feed which represented as jockeyid as seen in the example below:

<Competitor> <Property horseid="94251"/> <Property horsename="Day In June"/> <Property jockeyid="94451"/> <Property jockeyname="Monsanto"/> <Property startbox="7"/> </Competitor>

Testsystem:

<img src="https://vhc20staging.aitcloud.de/vhcstaging/jersey/<client_id>**/<jockeyid>.png" alt="jockeyid<jockeyid>"> e.g. <img src="https://vhc20staging.aitcloud.de/vhcstaging/jersey/411/213.png" alt=" jockeyid213">

* <CUSTOMER> related string to be provided by Sportradar * *Customer related <client_id> to be provided by Sportradar

If you are facing problems with the http-link in a https page, we recommend to use the proxy for

this call too. (see: “Proxy on client side” page 25ff) e.g. <img src="https://<CUSTOMERPROXY>/vhc/jersey/411/213.png" alt=" jockeyid213">

Open Race Brochure (Statistics Center)

The VHC Race Brochure can be opened in a separate popup window by calling the openVhcStats function. To use this function it is necessary to add a name to the GUI iFrame tag(e.g. <iframe

width="xxx" height="yyy" frameborder="0"… name="vhc_iframe"></iframe>)

Page | 91 www.betradar.com

vhc_iframe.openVhcStats(<raceday_id>, <race_number>, <horseid>); e.g. vhc_iframe.openVhcStats (176740, 3, 94171);

var vhc_iframe = document.getElementsByName(‘vhc_iframe’)[0].contentWindow; vhc_iframe.openVhcStats(<raceday_id>, <race_number>, <horse_number>); e.g. vhc_iframe.openVhcStats (176740, 3, 2);

6.4 Odds Key Definition

Betting Markets

The following betting markets are supported by the VHC

Bet type Market description

Winner You bet that the horse you selected will win

Lay Winner You bet that the horse you selected finishes not first.

Place You bet that the horse you selected finishes first, second or third

Lay Place You bet that the horse you selected finishes not first, second or third

Straight Forecast / Dual Forecast

With straight forecast bets you bet on the 2 horses which you think will finish first and second in the correct order. You may also bet on a dual forecast that enables you to bet upon the first and second placed horses in any order. As long as the two horses you select come in the first 2 positions, you will win your bet. Output limited to the 20 most likely horse combinations and ‘OTHER’

Straight Tricast / Dual Tricast

With a straight tricast bet you must select the 3 horses that you think will finish first, second and third in the correct order. A dual tricast bet enables you to bet upon the first, second and third placed horses in any order. Therefore your total stake will be 6 times your original stake. Output limited to the 20 most likely horse combinations and ‘OTHER’

General Explanation

There are 6 oddskey-configurations for VHC: 1. Winner

Page | 92 www.betradar.com

2. Place 3. Straight Forecast 4. Dual Forecast 5. Straight Tricast 6. Dual Tricast

@1-6.: here the sum of reciprocal values should result in the desired odds-key. Analog to other Sportradar-products the odds-rounding and an odds-cap can result in minor deviations. Please note that “winner odds” is referring to the market “which horse will win the race (8-12 selections)”. We don’t have a bettype “horse A wins / horse A doesn’t win” - this is just a by-product (see @lay-odds). Same is true for “place”-market. @2.: since three selections win the bet at the same time, the odds-key must be bigger >300. @lay-odds: looking at a single horse A, one could see this as a betting market “horse A wins / horse A doesn’t win”. Why is the key of this pair not resulting in the key of “winner market”? We use a “skew” key-algorithm that downgrades higher odds over-proportional and lower odds under-proportional. We are NOT dividing all odds by the key (see example 1). Why do we do this and why is it beneficial especially for VHC? We understand that applying the odds to different selection has some degrees of freedom - hence there is no “correct” and “wrong” way as long as all offered odds are lower than the fair odds. We do it in our way because we believe it is the “best” way and the “most beneficial for our clients”. Example1 naive approach: imagine a horse that wins 1 in 10 times. Fair odds for back/lay winner would be 10/1.11. if you now apply the key by just dividing both values your market with key 110 would end up in 9.1 / 1.01 - something that you obviously don’t want. Example2 imagine a horse that wins 1 in 100 times. Fair odds for back/lay winner would be 100/1.01. if you now apply an oddskey of 110 and disallow odds < 1.00 you end up in 10.0/1.00. Basically your 2way-oddskey would define the maximum available odds - in case of key 110 you will not allow odds higher than 10 - something that you obviously don’t want. Example 3 Output of our algorithm - random example, winner-key 115

fair odds winner oddskey 115 oddskey by selection

winner lay-winner winner lay-winner selection: winner

selection: lay winner

2way market

horse1 2.9 1.53 2.579 1.437 1.124 1.062 1.08

horse2 4 1.33 3.494 1.277 1.145 1.044 1.07

horse3 7 1.17 5.988 1.138 1.169 1.025 1.05

horse4 8 1.14 6.82 1.118 1.173 1.022 1.04

horse5 10 1.11 8.483 1.092 1.179 1.018 1.03

horse6 50 1.02 41.742 1.016 1.198 1.004 1.01

horse7 100 1.01 83.317 1.008 1.200 1.002 1.00

Page | 93 www.betradar.com

horse8 136.7 1.01 113.832 1.006 1.201 1.001 1.00

winner oddskey 1.150

The winner market result in the desired key 115 (last row). Each 2way-market has a key lower than this (last column). The reason for this is not that we downgrade “winner-selections” under-proportional (most are downgraded by more than 15%; column “selection: winner”). It is just that most lay odds are downgraded below average - since we cannot go lower than 1.00.

Page | 94 www.betradar.com

Odds Key Settings on Betradar.com

The VHC odds key definition is available via the standard Betradar interface at www.betradar.com

• VHC odds key definition integrated to standard Betradar interface as category “Virtual Horse Racing” to the regular liveodds configuration.

• Go to ‘Configuration’ ‘Live’ ‘Liveodds Config’ ‘Configure Sports’ ‘Horse Racing ‘Virtual Horse Racing’ Configuration IMPORTANT: Odds key configuration is available on different levels: ‘Horse Racing’ and ‘Virtual Horse Racing’. Odds keys on sublevels will be used over oddskey configurations on upper levels.

* Default values in brackets will be used if field is empty

• Enable/disable all: Each line represents one betting market (Winner, Place, …) • LO: once the market is unchecked it will be removed from the XML feed • Odds key: Odds key definition (range 100 to 150). • Minimum offer: Odds below this minimum, will be removed from the XML feed • Maximum cap: Odds will be capped to this value

7. Virtual Dog Racing

Page | 96 www.betradar.com

7.1 User’s View

Forecast markets should be displayed with matrix style odds visualization for best betting options presentation https://www.betradar.com/virtualsports/vdr:

Page | 97 www.betradar.com

7.1.1 GUI - Visualization Component (1)

Whole visualization component is delivered as an iFrame with a fixed size. 762 x 350 pixel Test environment: https://vdrstaging.aitcloud.de/vdrstaging/vdr/index/clientid:<CLIENTID>/lang:<LANGUAGE> Multi language support by optional ‚language‘ parameter in URL .Most important European languages already supported, others on demand

7.1.2 Odds Component (2)

Odds delivery via ‚Betradar Gaming Odds XML-Feeds‘ (dedicated feed per sport)

Staging environment: virtualstaging2.betradar.com port 1985 Live environment: vsportsodds.betradar.com port 1985

Limited to SSL connection (for security reasons, because of highly automated system)

Separate XML Format Specification available (Betradar_Virtual_Sports_XML_Format_Specification_Vx.x.pdf)

Provide server IP’s that access the XML-Feeds from customer side (multiple IP’s possible)

Implementation similar to existing ‘Betradar Live Odds‘ XML feed

Page | 98 www.betradar.com

7.2 XML Odds Feed

The XML feed continuously provides messages, thus it’s mandatory to have a permanent and stable connection. Refer to Betradar_Virtual_Sports_XML_Format_Specification_vX.X.pdf for detailed XML feed information on how to handle alive message delays or missing alive messages, how to handle connection problems and disconnects, as well as how and why to synchronize after a reconnect.

7.3 Website Communication

We need to enable communication between the GUI and the odds section (e.g. switch the odds section to selected match day by mouse click at a match day button within the match day selector component). We also need to consider most customer may access Betradar Virtual Sports via more than one domain name (and of course these domain names may change or new domains need to be added).

7.3.1 Proxy on client side

General note on proxy use or SSL / HTTPS integration If you want to integrate Betradar Virtual Sports via multiple domain names or you are using HTTPS on client side, it is mandatory to use the following proxy settings and to integrate all URL’s to Betradar Virtual Sports via relative URLs (“.../...”) instead of absolute URLs (“https://.../...”).

Integration of the Visualization Component (GUI) Multi language support by optional ‚language‘ parameter in URL. Fallback is English, other languages on demand. Test environment (Attribute src of iframe tag):

src=”vdrstaging/vdr/index/clientid:<CLIENTID>/lang:<LANGUAGE>”

Production environment (Attribute src of iframe-tag): src=”vdr/vdr/index/clientid:<CLIENTID>/lang:<LANGUAGE>”

Proxy settings using Apache HTTP Server Proxy settings using Internet Information Services (IIS) Proxy settings using Nginx.

Page | 99 www.betradar.com

Proxy settings using Apache HTTP Server

For customers with “webroot integration” “webroot integration” means that the customer integrates the game inside his webroot, i.e. the web page which contains the iframe for the GUI is located in the root directory for the specific domain. For example https://www.example.com/virtualDogRacing.html contains the GUI iframe. Add the following lines to your proxy settings:

<Location /vdrstaging> # points to test environment ProxyPass https://vdrstaging.aitcloud.de/vdrstaging retry=0 ProxyPassReverse https://vdrstaging.aitcloud.de/vdrstaging RequestHeader unset Accept-Encoding </Location> <Location /vdr> # points to production environment ProxyPass https://vdr<CUSTOMER*>.aitcloud.de/vdr retry=0 ProxyPassReverse https://vdr<CUSTOMER*>.aitcloud.de/vdr RequestHeader unset Accept-Encoding </Location>

*<CUSTOMER> is a customer related string that will be provided by us

If you have not used Apache as a proxy before, put these settings into a small file named "proxy.conf" in your Apache configuration directory (normally /etc/apache2/conf.d/). Please make sure that the proxy modules (mod_proxy_https and mod_proxy) are loaded/enabled. Restart Apache afterwards.

For customers with “subdirectory integration” “subdirectory integration” means that the customer integrates the game inside a subdirectory of his webroot, i.e. the web page which contains the iframe for the GUI is located inside a subdirectory of the webroot of the specific domain. For example https://www.example.com/Odds/virtualDogRacing.html contains the GUI iframe. Add the following lines to your proxy settings:

<Location /<subdirectory**>/vdrstaging> # points to test environment ProxyPass https://vdrstaging.aitcloud.de/vdrstaging retry=0 ProxyPassReverse https://vdrstaging.aitcloud.de/vdrstaging RequestHeader unset Accept-Encoding </Location> <Location /<subdirectory**>/vdr> # points to production environment ProxyPass https://vdr<CUSTOMER*>.aitcloud.de/vdr retry=0

Page | 100 www.betradar.com

ProxyPassReverse https://vdr<CUSTOMER*>.aitcloud.de/vdr RequestHeader unset Accept-Encoding </Location>

*<CUSTOMER> is a customer related string that will be provided by us **<subdirectory*> means the existing subdirectory on customer side, e,g, <Location /Odds/vdr>

The subdirectory also needs to be configured on Betradar side, thus please provide the subdirectory to Betradar.

If you have not used Apache as a proxy before, put these settings into a small file named "proxy.conf" in your Apache configuration directory (normally /etc/apache2/conf.d/). Please make sure that the proxy modules (mod_proxy_https and mod_proxy) are loaded/enabled. Restart Apache afterwards.

Proxy settings using Internet Information Services (IIS)

Prerequisites: o IIS 7.5 (or higher) o ARR (Application Request Routing) v2.5 (or higher)

ARR – proxy configuration and URL rewriting o Enable proxy in ARR (via IIS GUI)

• Do not create a subdirectory “vdr” or “vdrstaging” etc.

• for proxying instead do:

o Set up URL rewriting via config file: edit the file “web.config” in your webserver root directory (or the subdirectory from which vdr should be accessible) and add the following rewrite rules to /configuration/system.webServer/:

<rewrite>

<rules> <rule name="Route the requests for VDR" stopProcessing="true">

<match url="^vdr/(.*)" /> <conditions>

<add input="{CACHE_URL}" pattern="^http(s)?://" /> </conditions> <action type="Rewrite"

url="https://vdr<CUSTOMER*>.aitcloud.de/vdr/{R:1}" /> <serverVariables>

<set name="HTTPS_ACCEPT_ENCODING" value="" />

Page | 101 www.betradar.com

<set name="HTTPS_X_FORWARDED_HOST" value="{HTTPS_HOST}" /> <set name="HTTPS_X_FORWARDED_SERVER" value="{HTTPS_HOST}" />

</serverVariables> </rule> <rule name="Route the requests for VDR root" stopProcessing="true">

<match url="^vdr*$" /> <conditions>

<add input="{CACHE_URL}" pattern="^http(s)?://" /> </conditions> <action type="Rewrite"

url="https://vdr<CUSTOMER*>.aitcloud.de/vdr" /> <serverVariables>

<set name="HTTPS_ACCEPT_ENCODING" value="" /> <set name="HTTPS_X_FORWARDED_HOST" value="{HTTPS_HOST}" /> <set name="HTTPS_X_FORWARDED_SERVER" value="{HTTPS_HOST}" />

</serverVariables> </rule>

</rules> <outboundRules>

<rule name="RewriteRelativePaths" preCondition="ResponseIsHtml1"> <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^/vdr/(.*)" negate="false" /> <action type="Rewrite" value="/vdr/{R:1}" />

</rule> <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">

<match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^http(s)?://vdr<CUSTOMER*>.aitcloud.de/vdr/(.*)" /> <action type="Rewrite" value="/vdr/{R:2}" />

</rule> <preConditions>

<preCondition name="ResponseIsHtml1"> <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />

</preCondition> </preConditions>

</outboundRules> </rewrite> *<CUSTOMER> is a customer related string that will be provided by Betradar

o Add the following lines to the top of your system.webServer section of the “web.config” file in your webserver root directory to disable the unsupported static compression while leaving dynamic compression unharmed:

<urlCompression doStaticCompression="false" doDynamicCompression="true" dynamicCompressionBeforeCache="false" />

• Depending on your Windows Server configuration and IIS configuration you might need to do some or all of the following additional steps to get the URL rewriting to work:

o Set the LogRewrittenUrlEnabled registry key (run in cmd as one line):

reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Rewrite /v LogRewrittenUrlEnabled /t REG_DWORD /d 0

o Re-order the IIS modules to have URL rewrite module (“RewriteModule”) run before dynamic compression module (“DynamicCompressionModule”). In the

Page | 102 www.betradar.com

IIS GUI in the modules' ordered view the “DynamicCompressionModule” should be ABOVE the “RewriteModule”.

o You may need to add some server variables to allow setting them in the config files. To do this, go to the “URL Rewrite” view in the IIS GUI and click on “Show server variables”. Here you add “HTTPS_ACCEPT_ENCODING”, “HTTPS_HOST”, “HTTPS_X_FORWARDED_HOST”, “HTTPS_X_FORWARDED_SERVER” and “HTTPS_ACCEPT_ENCODING”.

o You may need to follow this up with the command “iisreset /noforce”

Proxy settings using Nginx

location /vdrstaging { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; proxy_redirect default; proxy_pass https://vdrstaging.aitcloud.de/vdrstaging; } location /vdr { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; proxy_redirect default; proxy_pass https://vdr<CUSTOMER>.aitcloud.de/vdr; }

7.3.2 Communication GUI Odds

Switch Odds List (to race related odds)

This function is called once after loading the page, each time a user clicks a race in the ‘Race Calendar’ as well as when a race starts. This function can be used to bring the race related odds to the users focus by scrolling the odds list to this position:

setVdrRace({“Raceday_id”:<raceday_id>, “Race_number”:<race_number>, "Action": "application", "Event_start": “start time as provided via the XML feed}); e.g. setVdrRace({"Raceday_id": "5954986","Race_number": "8","Action": "application","Event_start": 1502815582000});

Page | 103 www.betradar.com

7.3.3 Communication Odds GUI

Get Bib Images

As one part of the odds visualization the position related bib thumbnails are displayed. The bibs can be directly embedded in the HTML code:

Testsystem:

<img src="https://vdrstaging.aitcloud.de/vdrstaging/bib/<client_id>**/<position>.png" alt=""> e.g. <img src="https://vdrstaging.aitcloud.de/vdrstaging/bib/411/1.png" alt="">

Livesystem:

<img src="https://vdr<CUSTOMER*>.aitcloud.de/vdr/bib/<client_id>**/<position>.png" alt=""> e.g. <img src="https://vdr<CUSTOMER*>.aitcloud.de/vdr/bib/411/1.png" alt="">

* <CUSTOMER> related string to be provided by Sportradar * *Customer related <client_id> to be provided by Sportradar

If you are facing problems with the http-link in a https page, we recommend to use the proxy for this call too. (see: “Proxy on client side” page 45ff)

e.g. <img src="https://<CUSTOMERPROXY>/vdr/bib/411/1.png" alt="">

Page | 104 www.betradar.com

Open Race Brochure (Statistics Center)

The VDR Race Brochure can be opened in a separate popup window by calling the openVdrStats function. To use this function it is necessary to add a name to the GUI iFrame tag (e.g. <iframe

width="xxx" height="yyy" frameborder="0"… name="vdr_iframe"></iframe>)

var vdr_iframe = document.getElementsByName(‘vdr_iframe’)[0].contentWindow; vdr_iframe.openVdrStats(<raceday_id>, <race_number>); e.g vdr_iframe.openVdrStats (176740, 3);

7.4 Odds Key Definition

Betting Markets

The following betting markets are supported by the VDR

Bet type Market description

Winner You bet that the dog you selected will win

Place You bet that the dog you selected finishes first or second

Show You bet that the dog you selected finishes first, second or third

Straight Forecast / Dual Forecast

With straight forecast bets you bet on the 2 dogs which you think will finish first and second in the correct order. You may also bet on a dual forecast that enables you to bet upon the first and second placed dogs in any order. As long as the two dogs you select come in the first 2 positions, you will win your bet. Output limited to the 20 most likely dog combinations and ‘OTHER’ for Straight Forecast. Dual Forecast includes all 15 combinations.

Straight Tricast / Dual Tricast

With a straight tricast bet you must select the 3 dogs that you think will finish first, second and third in the correct order. A dual tricast bet enables you to bet upon the first, second and third placed dogs in any order. As long as the three dogs you select come in the first 3 positions, you will win your bet. Output limited to the 20 most likely dog combinations and ‘OTHER’ for Straight Tricast. Dual Tricast includes all 20 combinations.

Page | 105 www.betradar.com

General Explanation

There are 7 oddskey-configurations for VDR: 1. Winner 2. Place 3. Show 4. Straight Forecast 5. Dual Forecast 6. Straight Tricast 7. Dual Tricast @1-7.: here the sum of reciprocal values should result in the desired odds-key. Analog to other Sportradar-products the odds-rounding and an odds-cap can result in minor deviations. Please note that “winner odds” is referring to the market “which dog will win the race (6 selections)”. We don’t have a bettype “dog A wins / dog A doesn’t win”. Same is true for “place”-market. @2.: since two selections win the bet at the same time, the odds-key must be bigger >200. @3.: since three selections win the bet at the same time, the odds-key must be bigger >300.

Odds Key Settings on Betradar.com

The VDR odds key definition is available via the standard Betradar interface at www.betradar.com

• VDR odds key definition integrated to standard Betradar interface as category “Virtual

Dog Racing” to the regular liveodds configuration. • Go to ‘Configuration’ ‘Live’ ‘Liveodds Config’ ‘Configure Sports’ ‘Greyhound’ ‘Virtual Dog Racing’ Configuration

Page | 106 www.betradar.com

IMPORTANT: Odds key configuration is available on different levels: ‘Greyhound, ‘Virtual Dog Racing’. Odds keys on sublevels will be used over oddskey configurations on upper levels.

* Default values in brackets will be used if field is empty

• Enable/disable all: Each line represents one betting market (Winner, Place, …) • LO: once the market is unchecked it will be removed from the XML feed • Odds key: Odds key definition (range 100 to 150). • Minimum offer: Odds below this minimum, will be removed from the XML feed • Maximum cap: Odds will be capped to this value


Recommended