Skip to content

MediaStreamRecording Profile

TakayukiHoshi1984 edited this page Mar 27, 2017 · 5 revisions

目次

API 機能概要
MediaStream Recording MediaRecorder API スマートデバイスから使用可能なレコーダーの一覧を取得する。
MediaStream Recording Take Photo API スマートデバイスに対して写真撮影依頼を送る。
MediaStream Recording Record API スマートデバイスに対して、動画撮影や音声録音の開始依頼を送る。MediaStreamRecording Stopされない場合は各デバイスが撮影できる最大時間まで撮影を行い、その後撮影を停止する。
MediaStream Recording Pause API スマートデバイスに対して動画撮影または音声録音の一時停止依頼を送る。
MediaStream Recording Resume API スマートデバイスに対して一時停止状態にある動画撮影または音声録音の再開依頼を送る。
MediaStream Recording Stop API スマートデバイスに対して動画撮影または音声録音の終了依頼を送る。
MediaStream Recording MuteTrack API スマートデバイスに対して動画撮影や音声録音のミュート依頼を送る。ビデオとオーディオなどの複数トラックが含まれる撮影中メディアにおいては、オーディオトラックがミュートされる。
MediaStream Recording UnmuteTrack API スマートデバイスに対して動画撮影や音声録音のミュート解除依頼を送る。ビデオとオーディオなどの複数トラックが含まれる撮影中メディアにおいては、オーディオトラックがミュート解除される。
MediaStream Recording Options API GET スマートデバイスからサポートしている写真撮影、動画撮影や音声録音のオプションを取得する。
MediaStream Recording Options API PUT スマートデバイスに対して、オプション(マイムタイプ、画像の横幅、画像の縦幅)を設定する。サポートされていないオプションが指定された場合には、エラーのレスポンスを返し、元々設定されていたオプションを維持する。
MediaStream Recording Take a Picture Event API スマートデバイスの写真撮影通知を受信する。
MediaStream Recording Preview API PUT スマートデバイスでの動画撮影中に、動画のプレビュー画像を受信を開始する。このイベント通知を行うタイミングに規定は無く、デバイスプラグインの実装依存とする。MotionJPEGとしてデータを取得する。
MediaStream Recording Preview API DELETE スマートデバイスでの動画撮影中に、動画のプレビュー画像を受信を終了する。このイベント通知を行うタイミングに規定は無く、デバイスプラグインの実装依存とする。
MediaStream Recording Status Change Event API スマートデバイスでの写真撮影、動画撮影または音声録音の状態変化通知を受信する。

機能概要

スマートデバイスによる写真撮影、動画録画または音声録音などの操作を行う。

参考API

http://www.w3.org/TR/2013/WD-mediastream-recording-20130205/

備考

W3Cではスマートデバイスの動画撮影または音声録音の開始、終了、一時停止、再開、ミュート、ミュート解除、エラー発生、警告発生の通知毎にイベント関数(onrecording、onstop、onpause、onresume、onmutetrack、onunmutetrack、onerror、onwarning)を用意しているが、これらの情報は動画撮影または音声録音の状態変化という一つのイベントにまとめる方が汎用的と考え、"MediaStream Recording Status Change Event API"を定義する。

インターフェース名称 Version 種別
MediaStream Recording MediaRecorder API 2.0.0 同期I/F

概要

スマートデバイスから使用可能なレコーダーの一覧を取得する。

リクエスト

HTTPメソッド URI
GET /gotapi/mediastreamRecording/mediarecorder
論理名 物理名 データ型 省略 設定値
サービスID serviceId string - 取得対象デバイス

レスポンス

Content-Type 形式 HTTPステータス
application/json JSON 200
論理名 物理名 データ型 省略 設定値
処理結果 result number - 0:正常応答
0以外:異常応答
オブジェクト recorder object[] - カメラデータ(object)の配列
属性値 id string - カメラを識別するID。
属性値 name string - カメラの名前。
属性値 state string - "inactive": 停止中
"recording": レコーディング中
"paused": 一時停止中
属性値 imageWidth number レコーダーの現在の横幅。単位はピクセル。録音の場合は省略可。
属性値 imageHeight number レコーダーの現在の縦幅。単位はピクセル。録音の場合は省略可。
属性値 previewWidth number プレビューの現在の横幅。単位はピクセル。録音の場合は省略可。
属性値 previewHeight number プレビューの現在の縦幅。単位はピクセル。録音の場合は省略可。
属性値 previewMaxFrameRate number 現在のプレビューのフレームレートの最大値。単位はfps。録音の場合は 省略可。
属性値 audio object 音声に関する情報。省略可。
属性値 channels number - 音声のチャンネル数。
属性値 sampleRate number - 音声のサンプルレート。単位はHz。
属性値 sampleSize number - 音声のサンプルサイズ。単位はビット。
属性値 blockSize number - 音声のブロックサイズ。単位はバイト。
属性値 mimeType string - レコーダーのエンコードするタイプ。
属性値 config string - カメラに設定がある場合には、ここに文字列としてデータが格納されている。

リクエストサンプル

GET  http://localhost:4035/gotapi/mediastreamRecording/mediarecorder?serviceId=localhost.deviceconnect.org&accessToken=xxxxx

レスポンスサンプル

{
    "product":"Device Connect Manager",
    "version":"x.x",
    "result":0,
    "recorders":[
        {
            "id":"camera01",
            "name":"Camera",
            "state":"inactive",
            "imageWidth":480,
            "imageHeight":960,
            "previewWidth":240,
            "previewHeight":480,
            "previewMaxFrameRate":30,
            "mimeType":"image/jpeg",
            "config":""
        },
        {
            "id":"audio",
            "name":"Microphone",
            "state":"recording",
            "audio": {
                "channels":1,
                "sampleRate":44100,
                "sampleSize":8,
                "blockSize":4096
            },
            "mimeType":"audio/wav"
        }
    ]
}
インターフェース名称 Version 種別
MediaStream Recording Take Photo API 2.0.0 同期I/F

概要

スマートデバイスに対して写真撮影依頼を送る。

リクエスト

HTTPメソッド URI
POST /gotapi/mediastreamRecording/takephoto
論理名 物理名 データ型 省略 設定値
サービスID serviceId string - 取得対象デバイス
ターゲット target string レコーダーを識別するID。省略された場合にはデフォルトのレコーダーを使用する。デバイスが音声・動画の両方のレコーダーをサポートする場合、どちらのレコーダーが使用されるかどうかはデバイスプラグイン依存とする。

レスポンス

論理名 物理名 データ型 省略 設定値
処理結果 result number - 0:正常応答
0以外:異常応答
URI uri string - 撮影を行った写真のContentProviderのURI
ファイルパス path string - ファイルが存在するパス。ルートはデバイスプラグインごとに違う。File APIで使用可能。

リクエストサンプル

POST http://localhost:4035/gotapi/mediastreamRecording/takephoto					
POSTデータ
serviceId=localhost.deviceconnect.org&target=camera01&accessToken=xxxxx

レスポンスサンプル

{
    "product":"Device Connect Manager",
    "version":"x.x",
    "result":0,
    "uri":"http://localhost:8080/files?url=content%3a%2f%2fimg%2ftest%2ejpeg",
    "path":"/private_dir/img/test.jpeg"
}
インターフェース名称 Version 種別
MediaStream Recording Record API 2.0.0 同期I/F

概要

スマートデバイスに対して、動画撮影や音声録音の開始依頼を送る。 MediaStreamRecording Stopされない場合は各デバイスが撮影できる最大時間まで撮影を行い、その後撮影を停止する。

リクエスト

HTTPメソッド URI
POST /gotapi/mediastreamRecording/record
論理名 物理名 データ型 省略 設定値
サービスID serviceId string - 取得対象デバイス
ターゲット target string レコーダーを識別するID。省略された場合にはデフォルトのレコーダーを使用する。デバイスが音声・動画の両方のレコーダーをサポートする場合、どちらのレコーダーが使用されるかどうかはデバイスプラグイン依存とする。。
タイムスライス timeslice long 動画・音声入力などから得られた1フレームを新たに出力先メディアに書き出すまでの待ち時間。単位はミリ秒。1000/timesliceが出力メディアの固定フレームレート(フレーム/秒)に相当する。省略された場合には、デバイス毎の挙動でフレーム書き出しを行う。

レスポンス

Content-Type 形式 HTTPステータス
application/json JSON 200
論理名 物理名 データ型 省略 設定値
処理結果 result number - 0:正常応答
0以外:異常応答
URI uri string - 撮影、録音を行ったファイルのContentProviderのURI
ファイルパス path string - ファイルが存在するパス。ルートはデバイスプラグインごとに違う。File APIで使用可能。

リクエストサンプル

POST  http://localhost:4035/gotapi/mediastreamRecording/record					
POSTデータ
serviceId=localhost.deviceconnect.org&target=camera01&accessToken=xxxxx

レスポンスサンプル

{
    "product":"Device Connect Manager",
    "version":"x.x",
    "result":0,
    "uri":"http://localhost:4035/files?url=content%3a%2f%2fimg%2ftest%2emp4"
    "path":"/img/test.mp4"
}
インターフェース名称 Version 種別
MediaStream Recording Pause API 2.0.0 同期I/F

概要

スマートデバイスに対して動画撮影または音声録音の一時停止依頼を送る。

リクエスト

HTTPメソッド URI
PUT /gotapi/mediastreamRecording/pause
論理名 物理名 データ型 省略 設定値
サービスID serviceId string - 取得対象デバイス
ターゲット target string レコーダーを識別するID。省略された場合にはデフォルトのレコーダーを使用する。デバイスが音声・動画の両方のレコーダーをサポートする場合、どちらのレコーダーが使用されるかどうかはデバイスプラグイン依存とする。

レスポンス

Content-Type 形式 HTTPステータス
application/json JSON 200
論理名 物理名 データ型 省略 設定値
処理結果 result number - 0:正常応答
0以外:異常応答

リクエストサンプル

PUT  http://localhost:4035/gotapi/mediastreamRecording/pause
PUTデータ
serviceId=localhost.dconnect.com&target=camera01&accessToken=xxxxx

レスポンスサンプル

{
    "product":"Device Connect Manager",
    "version":"x.x",
    "result":0
}
インターフェース名称 Version 種別
MediaStream Recording Resume API 2.0.0 同期I/F

概要

スマートデバイスに対して一時停止状態にある動画撮影または音声録音の再開依頼を送る。

リクエスト

HTTPメソッド URI
PUT /gotapi/mediaStreamRecording/resume
論理名 物理名 データ型 省略 設定値
サービスID serviceId string - 取得対象デバイス
ターゲット target string レコーダーを識別するID。省略された場合にはデフォルトのレコーダーを使用する。デバイスが音声・動画の両方のレコーダーをサポートする場合、どちらのレコーダーが使用されるかどうかはデバイスプラグイン依存とする。

レスポンス

Content-Type 形式 HTTPステータス
application/json JSON 200
論理名 物理名 データ型 省略 設定値
処理結果 result number - 0:正常応答
0以外:異常応答

リクエストサンプル

PUT  http://localhost:4035/gotapi/mediastreamRecording/resume
PUTデータ
serviceId=localhost.dconnect.com&target=camera01&accessToken=xxxxx

レスポンスサンプル

{
    "product":"Device Connect Manager",
    "version":"x.x",
    "result":0
}
インターフェース名称 Version 種別
MediaStream Recording Stop API 2.0.0 同期I/F

概要

スマートデバイスに対して動画撮影または音声録音の終了依頼を送る。

リクエスト

HTTPメソッド URI
PUT /gotapi/mediastreamRecording/stop
論理名 物理名 データ型 省略 設定値
サービスID serviceId string - 取得対象デバイス
ターゲット target string レコーダーを識別するID。省略された場合にはデフォルトのレコーダーを使用する。デバイスが音声・動画の両方のレコーダーをサポートする場合、どちらのレコーダーが使用されるかどうかはデバイスプラグイン依存とする。

レスポンス

Content-Type 形式 HTTPステータス
application/json JSON 200
論理名 物理名 データ型 省略 設定値
処理結果 result number - 0:正常応答
0以外:異常応答

リクエストサンプル

PUT  http://localhost:4035/gotapi/mediastreamRecording/stop
PUTデータ
serviceId=localhost.deviceconnect.org&target=camera01&accessToken=xxxxxx

レスポンスサンプル

{
    "product":"Device Connect Manager",
    "version":"x.x",
    "result":0
}
インターフェース名称 Version 種別
MediaStream Recording MuteTrack API 2.0.0 同期I/F

概要

スマートデバイスに対して動画撮影や音声録音のミュート依頼を送る。 ビデオとオーディオなどの複数トラックが含まれる撮影中メディアにおいては、オーディオトラックがミュートされる。

リクエスト

HTTPメソッド URI
PUT /gotapi/mediastreamRecording/mutetrack
論理名 物理名 データ型 省略 設定値
サービスID serviceId string - 取得対象デバイス
ターゲット target string レコーダーを識別するID。省略された場合にはデフォルトのレコーダーを使用する。デバイスが音声・動画の両方のレコーダーをサポートする場合、どちらのレコーダーが使用されるかどうかはデバイスプラグイン依存とする。

レスポンス

Content-Type 形式 HTTPステータス
application/json JSON 200
論理名 物理名 データ型 省略 設定値
処理結果 result number - 0:正常応答
0以外:異常応答

リクエストサンプル

PUT  http://localhost:4035/gotapi/mediastreamRecording/mutetrack
PUTデータ
serviceId=localhost.deviceconnect.org&target=camera01&accessToken=xxxxx

レスポンスサンプル

{
    "product":"Device Connect Manager",
    "version":"x.x",
    "result":0
}
インターフェース名称 Version 種別
MediaStream Recording UnmuteTrack API 2.0.0 同期I/F

概要

スマートデバイスに対して動画撮影や音声録音のミュート解除依頼を送る。 ビデオとオーディオなどの複数トラックが含まれる撮影中メディアにおいては、オーディオトラックがミュート解除される。

リクエスト

HTTPメソッド URI
PUT /gotapi/mediastreamRecording/unmutetrack
論理名 物理名 データ型 省略 設定値
サービスID serviceId string - 取得対象デバイス
ターゲット target string レコーダーを識別するID。省略された場合にはデフォルトのレコーダーを使用する。デバイスが音声・動画の両方のレコーダーをサポートする場合、どちらのレコーダーが使用されるかどうかはデバイスプラグイン依存とする。

レスポンス

Content-Type 形式 HTTPステータス
application/json JSON 200
論理名 物理名 データ型 省略 設定値
処理結果 result number - 0:正常応答
0以外:異常応答

リクエストサンプル

PUT  http://localhost:4035/gotapi/mediastreamRecording/unmutetrack
PUTデータ
serviceId=localhost.deviceconnect.org&target=camera01&accessToken=xxxxx

レスポンスサンプル

{
    "product":"Device Connect Manager",
    "version":"x.x",
    "result":0
}
インターフェース名称 Version 種別
MediaStream Recording Options API 2.0.0 同期I/F

概要

スマートデバイスからサポートしている写真撮影、動画撮影や音声録音のオプションを取得する。

リクエスト

HTTPメソッド URI
GET /gotapi/mediastreamRecording/options
論理名 物理名 データ型 省略 設定値
サービスID serviceId string - 取得対象デバイス
ターゲット target string レコーダーを識別するID。省略された場合にはデフォルトのレコーダーを使用する。デバイスが音声・動画の両方のレコーダーをサポートする場合、どちらのレコーダーが使用されるかどうかはデバイスプラグイン依存とする。

レスポンス

Content-Type 形式 HTTPステータス
application/json JSON 200
論理名 物理名 データ型 省略 設定値
処理結果 result number - 0:正常応答
0以外:異常応答
撮影時の解像度 imageSizes object[] レコーダーのサポートする画像の解像度の一覧。録音の場合は省略可。プラグイン側でリサイズすることでサポートするサイズも含めてよい。
属性値 width number - 画像の横幅。単位はピクセル。
属性値 height number - 画像の縦幅。単位はピクセル。
プレビュー時の解像度 previewSizes object[] プレビューで利用可能な解像度の一覧。録音の場合、またはプレビューを 提供しない場合は省略可。プラグイン側でリサイズすることでサポートするサイズも含めてよい。
属性値 width number - 画像の横幅。単位はピクセル。
属性値 height number - 画像の縦幅。単位はピクセル。
MIMEタイプ mimeType string[] - 動画録画・音声録音するときのエンコードするタイプの一覧

リクエストサンプル

GET  http://localhost:4035/gotapi/mediastreamRecording/optinos?serviceId=localhost.deviceconnect.org&target=camera01&accessToken=xxxxx

レスポンスサンプル

{
    "product":"Device Connect Manager",
    "version":"x.x",
    "result":0,
    "imageSizes": [
        {"width":480, "height":240},
        {"width":960, "height":480},
        {"width":1920, "height":960}
    ],
    "previewSizes": [
        {"width":480, "height":240},
        {"width":960, "height":480}
    ],
   "mimeType": [
        "image/png",
        "video/mp4"
    ]
}
インターフェース名称 Version 種別
MediaStream Recording Options API 2.0.0 同期I/F

概要

スマートデバイスからサポートしている写真撮影、動画撮影や音声録音のオプションを設定する。

リクエスト

HTTPメソッド URI
PUT /gotapi/mediastreamRecording/options
論理名 物理名 データ型 省略 設定値
サービスID serviceId string - 取得対象デバイス
ターゲット target string レコーダーを識別するID。省略された場合にはデフォルトのレコーダーを使用する。デバイスが音声・動画の両方のレコーダーをサポートする場合、どちらのレコーダーが使用されるかどうかはデバイスプラグイン依存とする。
撮影時の横幅 imageWidth number 単位はピクセル。previewHeightを指定するときは省略不可。Options API GETで返された値以外を指定した場合はパラメータエラー。
撮影時の縦幅 imageHeight number 単位はピクセル。previewWidthを指定するときは省略不可。Options API GETで返された値以外を指定した場合はパラメータエラー。
プレビュー時の横幅 previewWidth number 単位はピクセル。。previewHeightを指定するときは省略不可。Options API GETで返された値以外を指定した場合はパラメータエラー。
プレビュー時の縦幅 previewHeight number 単位はピクセル。previewWidthを指定するときは省略不可。Options API GETで返された値以外を指定した場合はパラメータエラー。
プレビュー時の最大フレームレート previewMaxFrameRate number 単位はfps。範囲は0.0より大きい小数値。
MIMEタイプ mimeType string - 動画録画・音声録音するときのエンコードするタイプ。

レスポンス

Content-Type 形式 HTTPステータス
application/json JSON 200
論理名 物理名 データ型 省略 設定値
処理結果 result number - 0:正常応答
0以外:異常応答

リクエストサンプル

PUT  http://localhost:4035/gotapi/mediastreamRecording/optinos
PUTデータ
serviceId=localhost.deviceconnect.org&target=camera01&imageWidth=960&imageHeight=480&previewWidth=480&previewHeight=240&previewMaxFrameRate=15.0&mimeType=image%2Fpng&accessToken=xxxxx

レスポンスサンプル

{
    "product":"Device Connect Manager",
    "version":"x.x",
    "result":0
}
インターフェース名称 Version 種別
MediaStream Recording Take a Picture Event API 2.0.0 非同期I/F(イベントI/F)

概要

スマートデバイスの写真撮影通知を受信する。

イベント情報

イベント名 Content-Type
/gotapi/mediastreamRecording/onphoto application/json

メッセージ

論理名 物理名 データ型 省略 設定値
サービスID serviceId string - 取得対象スマートデバイス
プロファイル名 profile string - mediastreamRecording
コールバック名 attribute string - onphoto
セッションID sessionKey string - イベントセッションID
オブジェクト photo object - 写真データ(object)
ファイルパス path string - ファイルが存在するパス。ルートはデバイスプラグインごとに違う。File APIで使用可能。
MIMEタイプ mimeType string - レコードが開始されたメディアのマイムタイプ。このタイプで、動画、音声などを識別する。

メッセージサンプル

{
    "product":"Device Connect Manager",
    "version":"x.x",
    "serviceId":"localhost.deviceconnect.org",
	"api" : "gotapi",
    "profile":"mediastreamRecording",
    "attribute":"onphoto",
    "sessionKey":"0a93ac0aade4e046ed63eb24d1172f5f35c88ca60daa901547c28d5827cb418a5de1d7c5f9e62405",
    "photo":{
        "path":"/private_dir/img/test.jpeg",
        "mimeType":"image/jpeg"
    }
}
インターフェース名称 Version 種別
MediaStream Recording Preview API PUT 2.0.0 同期I/F(イベントI/F)

概要

スマートデバイスでの動画撮影中に、動画のプレビュー画像を受信を開始する。このイベント通知を行うタイミングに規定は無く、デバイスプラグインの実装依存とする。MotionJPEGでデータを受信する。

リクエスト

HTTPメソッド URI
PUT /gotapi/mediastreamRecording/preview
論理名 物理名 データ型 省略 設定値
サービスID serviceId string - 取得対象デバイス
ターゲット target string レコーダーを識別するID。省略された場合にはデフォルトのレコーダーを使用する。デバイスが音声・動画の両方のレコーダーをサポートする場合、どちらのレコーダーが使用されるかどうかはデバイスプラグイン依存とする。

レスポンス

論理名 物理名 データ型 省略 設定値
処理結果 result number - 0:正常応答
0以外:異常応答
URI uri string - MotionJPEGのURI
音声配信情報 audio object 音声配信に関する情報。音声のみの配信をサポートしない場合は省略可。
音声配信URI uri number - 音声配信URI。

リクエストサンプル

PUT http://localhost:4035/gotapi/mediastreamRecording/preview					
PUTデータ
serviceId=localhost.deviceconnect.org&target=camera01&accessToken=xxxxx

レスポンスサンプル

{
    "product":"Device Connect Manager",
    "version":"x.x",
    "result":0,
    "uri":"http://localhost:9000/xxxxx"
}
インターフェース名称 Version 種別
MediaStream Recording Preview API DELETE 2.0.0 同期I/F(イベントI/F)

概要

スマートデバイスでの動画撮影中に、動画のプレビュー画像を受信を終了する。このイベント通知を行うタイミングに規定は無く、デバイスプラグインの実装依存とする。

リクエスト

HTTPメソッド URI
DELETE /gotapi/mediastreamRecording/preview
論理名 物理名 データ型 省略 設定値
サービスID serviceId string - 取得対象デバイス
ターゲット target string レコーダーを識別するID。省略された場合にはデフォルトのレコーダーを使用する。デバイスが音声・動画の両方のレコーダーをサポートする場合、どちらのレコーダーが使用されるかどうかはデバイスプラグイン依存とする。

レスポンス

論理名 物理名 データ型 省略 設定値
処理結果 result number - 0:正常応答
0以外:異常応答

リクエストサンプル

DELETE http://localhost:4035/gotapi/mediastreamRecording/preview?serviceId=localhost.deviceconnect.org&target=camera01&accessToken=xxxxx					

レスポンスサンプル

{
    "product":"Device Connect Manager",
    "version":"x.x",
    "result":0,

}
インターフェース名称 Version 種別
MediaStream Recording Status Change Event API 2.0.0 非同期I/F(イベントI/F)

概要

スマートデバイスでの写真撮影、動画撮影または音声録音の状態変化通知を受信する。

イベント情報

イベント名 Content-Type
/gotapi/mediastreamRecording/onrecordingchange application/json

メッセージ

論理名 物理名 データ型 省略 設定値
サービスID serviceId string - 取得対象スマートデバイス
プロファイル名 profile string - mediastreamRecording
コールバック名 attribute string - onrecordingchange
セッションID sessionKey string - イベントセッションID
オブジェクト media object - メディアデータ(object)
状態 status string - 状態を識別する文字列。動画撮影、音声録音の状態を表す。
"recording" : 開始
"stop" : 終了
"pause" : 一時停止
"resume" : 再開
"mutetrack" : ミュート
"unmutetrack" : ミュート解除
"error" : エラー発生
"warning" : 警告発生
ファイルパス path string - ファイルが存在するパス。ルートはデバイスプラグインごとに違う。File APIで使用可能。
MIMEタイプ mimeType string - 録画・録音が開始されたメディアのマイムタイプ。このタイプで、動画、音声などを識別する。
エラーメッセージ errorMessage string - エラー、警告内容を伝える文字列。状態が error、warning の時のみ付加される。省略可能。

メッセージサンプル

{
    "product":"Device Connect Manager",
    "version":"x.x",
    "serviceId":"localhost.deviceconnect.org",
    "api" : "gotapi",
    "profile":"mediastreamRecording",
    "attribute":"onrecordingchange",
    "sessionKey":"0a93ac0aade4e046ed63eb24d1172f5f35c88ca60daa901547c28d5827cb418a5de1d7c5f9e62405",
    "media":{
        "status":"recording",
        "path":"/img/test.mp4",
        "mimeType":"video/mp4"
    }
}

Clone this wiki locally