GitHub PullRequestReviewCommentEvent at 2014-12-05 23:51:56
Repository: hifi
Actor: huffman
Payload: {"action":"created","comment":{"url":"https://api.github.com/repos/highfidelity/hifi/pulls/comments/21409320","id":21409320,"diff_hunk":"@@ -0,0 +1,599 @@\n+//\n+//  virtualKeyboard.js\n+//  examples\n+//\n+//  Created by Thijs Wenker on 11/18/14.\n+//  Copyright 2014 High Fidelity, Inc.\n+//\n+//  Control a virtual keyboard using your favorite HMD.\n+//  Usage: Enable VR-mode and go to First person mode,\n+//  look at the key that you would like to press, and press the spacebar on your \"REAL\" keyboard.\n+//\n+//  leased some code from newEditEntities.js for Text Entity example\n+//\n+//  Distributed under the Apache License, Version 2.0.\n+//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html\n+//\n+\n+Script.include(\"libraries/globals.js\");\n+\n+const KBD_UPPERCASE_DEFAULT = 0;\n+const KBD_LOWERCASE_DEFAULT = 1;\n+const KBD_UPPERCASE_HOVER   = 2;\n+const KBD_LOWERCASE_HOVER   = 3;\n+const KBD_BACKGROUND        = 4;\n+\n+const KEYBOARD_URL = HIFI_PUBLIC_BUCKET + \"images/keyboard.svg\";\n+const CURSOR_URL = HIFI_PUBLIC_BUCKET + \"images/cursor.svg\";\n+\n+const SPACEBAR_CHARCODE = 32;\n+\n+const KEYBOARD_WIDTH  = 1174.7;\n+const KEYBOARD_HEIGHT = 434.1;\n+\n+const CURSOR_WIDTH = 33.9;\n+const CURSOR_HEIGHT = 33.9;\n+\n+// VIEW_ANGLE can be adjusted to your likings, the smaller the faster movement.\n+// Try setting it to 60 if it goes too fast for you.\n+const VIEW_ANGLE = 40.0;\n+const VIEW_ANGLE_BY_TWO = VIEW_ANGLE / 2;\n+\n+const SPAWN_DISTANCE = 1;\n+const DEFAULT_TEXT_DIMENSION_Z = 0.02;\n+\n+const BOUND_X = 0;\n+const BOUND_Y = 1;\n+const BOUND_W = 2;\n+const BOUND_H = 3;\n+\n+const KEY_STATE_LOWER = 0;\n+const KEY_STATE_UPPER = 1;\n+\n+const TEXT_MARGIN_TOP = 0.15;\n+const TEXT_MARGIN_LEFT = 0.15;\n+const TEXT_MARGIN_RIGHT = 0.17;\n+const TEXT_MARGIN_BOTTOM = 0.17;\n+\n+var windowDimensions = Controller.getViewportDimensions();\n+var cursor = null;\n+var keyboard = new Keyboard();\n+var textFontSize = 9;\n+var text = null;\n+var textText = \"\";\n+var textSizeMeasureOverlay = Overlays.addOverlay(\"text3d\", {visible: false});\n+\n+function appendChar(char) {\n+    textText += char;\n+    updateTextOverlay();\n+    Overlays.editOverlay(text, {text: textText});\n+}\n+\n+function deleteChar() {\n+    if (textText.length > 0) {\n+        textText = textText.substring(0, textText.length - 1);\n+        updateTextOverlay();\n+    }\n+}\n+\n+function updateTextOverlay() {\n+    var textwidth = Overlays.textWidth(text, textText);\n+    var textLines = textText.split(\"\\n\");\n+    var maxLineWidth = 0;\n+    for (textLine in textLines) {\n+        var lineWidth = Overlays.textWidth(text, textLines[textLine]);\n+        if (lineWidth > maxLineWidth) {\n+            maxLineWidth = lineWidth;\n+        }\n+    }\n+    var suggestedFontSize = (windowDimensions.x / maxLineWidth) * textFontSize * 0.90;\n+    var maxFontSize = 190 / textLines.length;\n+    textFontSize = (suggestedFontSize > maxFontSize) ? maxFontSize : suggestedFontSize;\n+    var topMargin = (250 - (textFontSize * textLines.length)) / 4;\n+    Overlays.editOverlay(text, {text: textText, font: {size: textFontSize}, topMargin: topMargin});\n+    var maxLineWidth = 0;\n+    for (textLine in textLines) {\n+        var lineWidth = Overlays.textWidth(text, textLines[textLine]);\n+        if (lineWidth > maxLineWidth) {\n+            maxLineWidth = lineWidth;\n+        }\n+    }\n+    Overlays.editOverlay(text, {leftMargin: (windowDimensions.x - maxLineWidth) / 2});\n+}\n+\n+keyboard.onKeyPress = function(event) {\n+    if (event.event == 'keypress') {\n+        appendChar(event.char);\n+    } else if (event.event == 'enter') {\n+        appendChar(\"\\n\");\n+    }\n+};\n+\n+keyboard.onKeyRelease = function(event) {\n+    print(\"Key release event test\");\n+    // you can cancel a key by releasing its focusing before releasing it\n+    if (event.focus) {\n+        if (event.event == 'delete') {\n+           deleteChar();\n+        } else if (event.event == 'submit') {\n+           print(textText);\n+\n+           var position = Vec3.sum(MyAvatar.position, Vec3.multiply(Quat.getFront(MyAvatar.orientation), SPAWN_DISTANCE));\n+\n+           var textLines = textText.split(\"\\n\");\n+           var maxLineWidth = 0;\n+           for (textLine in textLines) {\n+               var lineWidth = Overlays.textWidth(textSizeMeasureOverlay, textLines[textLine]);\n+               if (lineWidth > maxLineWidth) {\n+                   maxLineWidth = lineWidth;\n+               }\n+           }\n+           var usernameLine = \"--\" + GlobalServices.myUsername;\n+           var usernameWidth = Overlays.textWidth(textSizeMeasureOverlay, usernameLine);\n+           if (maxLineWidth < usernameWidth) {\n+               maxLineWidth = usernameWidth;\n+           } else {\n+               var spaceableWidth = maxLineWidth - usernameWidth;\n+               var spaceWidth = Overlays.textWidth(textSizeMeasureOverlay, \" \");\n+               var numberOfSpaces = Math.floor(spaceableWidth / spaceWidth);\n+               for (var i = 0; i < numberOfSpaces; i++) {\n+                   usernameLine = \" \" + usernameLine;\n+               }\n+           }\n+           var dimension_x = maxLineWidth + TEXT_MARGIN_RIGHT + TEXT_MARGIN_LEFT;\n+           if (position.x > 0 && position.y > 0 && position.z > 0) {\n+               Entities.addEntity({ \n+                   type: \"Text\",\n+                   rotation: MyAvatar.orientation,\n+                   position: position,\n+                   dimensions: { x: dimension_x, y: (textLines.length + 1) * 0.14 + TEXT_MARGIN_TOP + TEXT_MARGIN_BOTTOM, z: DEFAULT_TEXT_DIMENSION_Z },\n+                   backgroundColor: { red: 0, green: 0, blue: 0 },\n+                   textColor: { red: 255, green: 255, blue: 255 },\n+                   text: textText + \"\\n\" + usernameLine\n+               });\n+           }\n+           textText = \"\";\n+           updateTextOverlay();\n+        }\n+    }\n+};\n+\n+keyboard.onFullyLoaded = function() {\n+    print(\"Virtual-keyboard fully loaded.\");\n+    var dimensions = Controller.getViewportDimensions();\n+    text = Overlays.addOverlay(\"text\", {\n+         x: 0,\n+         y: dimensions.y - keyboard.height() - 260,\n+         width: dimensions.x,\n+         height: 250,\n+         backgroundColor: { red: 255, green: 255, blue: 255},\n+         color: { red: 0, green: 0, blue: 0},\n+         topMargin: 5,\n+         leftMargin: 0,\n+         font: {size: textFontSize},\n+         text: \"\",\n+         alpha: 0.8\n+    });\n+    updateTextOverlay();\n+    // the cursor is being loaded after the keyboard, else it will be on the background of the keyboard \n+    cursor = new Cursor();\n+    cursor.onUpdate = function(position) {\n+        keyboard.setFocusPosition(position.x, position.y);\n+    };\n+};\n+\n+function KeyboardKey(keyboard, key_properties) {","path":"examples/virtualKeyboard.js","position":185,"original_position":185,"commit_id":"ccdb13c951129351336296f578d7c7d3f2b937d7","original_commit_id":"ccdb13c951129351336296f578d7c7d3f2b937d7","user":{"login":"huffman","id":167747,"avatar_url":"https://avatars.githubusercontent.com/u/167747?v=3","gravatar_id":"","url":"https://api.github.com/users/huffman","html_url":"https://github.com/huffman","followers_url":"https://api.github.com/users/huffman/followers","following_url":"https://api.github.com/users/huffman/following{/other_user}","gists_url":"https://api.github.com/users/huffman/gists{/gist_id}","starred_url":"https://api.github.com/users/huffman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/huffman/subscriptions","organizations_url":"https://api.github.com/users/huffman/orgs","repos_url":"https://api.github.com/users/huffman/repos","events_url":"https://api.github.com/users/huffman/events{/privacy}","received_events_url":"https://api.github.com/users/huffman/received_events","type":"User","site_admin":false},"body":"Style-wise, `key_properties` should be `keyProperties`","created_at":"2014-12-05T23:51:56Z","updated_at":"2014-12-05T23:51:56Z","html_url":"https://github.com/highfidelity/hifi/pull/3914#discussion_r21409320","pull_request_url":"https://api.github.com/repos/highfidelity/hifi/pulls/3914","_links":{"self":{"href":"https://api.github.com/repos/highfidelity/hifi/pulls/comments/21409320"},"html":{"href":"https://github.com/highfidelity/hifi/pull/3914#discussion_r21409320"},"pull_request":{"href":"https://api.github.com/repos/highfidelity/hifi/pulls/3914"}}},"pull_request":{"url":"https://api.github.com/repos/highfidelity/hifi/pulls/3914","id":25608332,"html_url":"https://github.com/highfidelity/hifi/pull/3914","diff_url":"https://github.com/highfidelity/hifi/pull/3914.diff","patch_url":"https://github.com/highfidelity/hifi/pull/3914.patch","issue_url":"https://api.github.com/repos/highfidelity/hifi/issues/3914","number":3914,"state":"open","locked":false,"title":"CR for Job #20163 - Implement virtual keyboard for use in HMD","user":{"login":"thoys","id":607735,"avatar_url":"https://avatars.githubusercontent.com/u/607735?v=3","gravatar_id":"","url":"https://api.github.com/users/thoys","html_url":"https://github.com/thoys","followers_url":"https://api.github.com/users/thoys/followers","following_url":"https://api.github.com/users/thoys/following{/other_user}","gists_url":"https://api.github.com/users/thoys/gists{/gist_id}","starred_url":"https://api.github.com/users/thoys/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thoys/subscriptions","organizations_url":"https://api.github.com/users/thoys/orgs","repos_url":"https://api.github.com/users/thoys/repos","events_url":"https://api.github.com/users/thoys/events{/privacy}","received_events_url":"https://api.github.com/users/thoys/received_events","type":"User","site_admin":false},"body":"Code Review for Job #20163 - Workitem available at https://www.worklist.net/20163","created_at":"2014-12-05T23:34:13Z","updated_at":"2014-12-05T23:51:56Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e9d467b0d46fbce5e0367ba7f78bb8084710fd95","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/highfidelity/hifi/pulls/3914/commits","review_comments_url":"https://api.github.com/repos/highfidelity/hifi/pulls/3914/comments","review_comment_url":"https://api.github.com/repos/highfidelity/hifi/pulls/comments/{number}","comments_url":"https://api.github.com/repos/highfidelity/hifi/issues/3914/comments","statuses_url":"https://api.github.com/repos/highfidelity/hifi/statuses/ccdb13c951129351336296f578d7c7d3f2b937d7","head":{"label":"thoys:20163","ref":"20163","sha":"ccdb13c951129351336296f578d7c7d3f2b937d7","user":{"login":"thoys","id":607735,"avatar_url":"https://avatars.githubusercontent.com/u/607735?v=3","gravatar_id":"","url":"https://api.github.com/users/thoys","html_url":"https://github.com/thoys","followers_url":"https://api.github.com/users/thoys/followers","following_url":"https://api.github.com/users/thoys/following{/other_user}","gists_url":"https://api.github.com/users/thoys/gists{/gist_id}","starred_url":"https://api.github.com/users/thoys/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thoys/subscriptions","organizations_url":"https://api.github.com/users/thoys/orgs","repos_url":"https://api.github.com/users/thoys/repos","events_url":"https://api.github.com/users/thoys/events{/privacy}","received_events_url":"https://api.github.com/users/thoys/received_events","type":"User","site_admin":false},"repo":{"id":18294345,"name":"hifi","full_name":"thoys/hifi","owner":{"login":"thoys","id":607735,"avatar_url":"https://avatars.githubusercontent.com/u/607735?v=3","gravatar_id":"","url":"https://api.github.com/users/thoys","html_url":"https://github.com/thoys","followers_url":"https://api.github.com/users/thoys/followers","following_url":"https://api.github.com/users/thoys/following{/other_user}","gists_url":"https://api.github.com/users/thoys/gists{/gist_id}","starred_url":"https://api.github.com/users/thoys/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thoys/subscriptions","organizations_url":"https://api.github.com/users/thoys/orgs","repos_url":"https://api.github.com/users/thoys/repos","events_url":"https://api.github.com/users/thoys/events{/privacy}","received_events_url":"https://api.github.com/users/thoys/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/thoys/hifi","description":"Open, decentralized virtual world using sensors to control avatars and dynamically assigned devices as servers.  San Francisco based startup, we are hiring: http://highfidelity.io/jobs  You can also contribute by doing jobs listed at http://worklist.net -","fork":true,"url":"https://api.github.com/repos/thoys/hifi","forks_url":"https://api.github.com/repos/thoys/hifi/forks","keys_url":"https://api.github.com/repos/thoys/hifi/keys{/key_id}","collaborators_url":"https://api.github.com/repos/thoys/hifi/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/thoys/hifi/teams","hooks_url":"https://api.github.com/repos/thoys/hifi/hooks","issue_events_url":"https://api.github.com/repos/thoys/hifi/issues/events{/number}","events_url":"https://api.github.com/repos/thoys/hifi/events","assignees_url":"https://api.github.com/repos/thoys/hifi/assignees{/user}","branches_url":"https://api.github.com/repos/thoys/hifi/branches{/branch}","tags_url":"https://api.github.com/repos/thoys/hifi/tags","blobs_url":"https://api.github.com/repos/thoys/hifi/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/thoys/hifi/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/thoys/hifi/git/refs{/sha}","trees_url":"https://api.github.com/repos/thoys/hifi/git/trees{/sha}","statuses_url":"https://api.github.com/repos/thoys/hifi/statuses/{sha}","languages_url":"https://api.github.com/repos/thoys/hifi/languages","stargazers_url":"https://api.github.com/repos/thoys/hifi/stargazers","contributors_url":"https://api.github.com/repos/thoys/hifi/contributors","subscribers_url":"https://api.github.com/repos/thoys/hifi/subscribers","subscription_url":"https://api.github.com/repos/thoys/hifi/subscription","commits_url":"https://api.github.com/repos/thoys/hifi/commits{/sha}","git_commits_url":"https://api.github.com/repos/thoys/hifi/git/commits{/sha}","comments_url":"https://api.github.com/repos/thoys/hifi/comments{/number}","issue_comment_url":"https://api.github.com/repos/thoys/hifi/issues/comments/{number}","contents_url":"https://api.github.com/repos/thoys/hifi/contents/{+path}","compare_url":"https://api.github.com/repos/thoys/hifi/compare/{base}...{head}","merges_url":"https://api.github.com/repos/thoys/hifi/merges","archive_url":"https://api.github.com/repos/thoys/hifi/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/thoys/hifi/downloads","issues_url":"https://api.github.com/repos/thoys/hifi/issues{/number}","pulls_url":"https://api.github.com/repos/thoys/hifi/pulls{/number}","milestones_url":"https://api.github.com/repos/thoys/hifi/milestones{/number}","notifications_url":"https://api.github.com/repos/thoys/hifi/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/thoys/hifi/labels{/name}","releases_url":"https://api.github.com/repos/thoys/hifi/releases{/id}","created_at":"2014-03-31T13:41:07Z","updated_at":"2014-06-18T08:57:01Z","pushed_at":"2014-12-05T23:33:50Z","git_url":"git://github.com/thoys/hifi.git","ssh_url":"git@github.com:thoys/hifi.git","clone_url":"https://github.com/thoys/hifi.git","svn_url":"https://github.com/thoys/hifi","homepage":"http://highfidelity.io","size":121491,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"highfidelity:master","ref":"master","sha":"01c209ef07676ac38adf20683c0aacbdca770e3e","user":{"login":"highfidelity","id":1565370,"avatar_url":"https://avatars.githubusercontent.com/u/1565370?v=3","gravatar_id":"","url":"https://api.github.com/users/highfidelity","html_url":"https://github.com/highfidelity","followers_url":"https://api.github.com/users/highfidelity/followers","following_url":"https://api.github.com/users/highfidelity/following{/other_user}","gists_url":"https://api.github.com/users/highfidelity/gists{/gist_id}","starred_url":"https://api.github.com/users/highfidelity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/highfidelity/subscriptions","organizations_url":"https://api.github.com/users/highfidelity/orgs","repos_url":"https://api.github.com/users/highfidelity/repos","events_url":"https://api.github.com/users/highfidelity/events{/privacy}","received_events_url":"https://api.github.com/users/highfidelity/received_events","type":"Organization","site_admin":false},"repo":{"id":5372872,"name":"hifi","full_name":"highfidelity/hifi","owner":{"login":"highfidelity","id":1565370,"avatar_url":"https://avatars.githubusercontent.com/u/1565370?v=3","gravatar_id":"","url":"https://api.github.com/users/highfidelity","html_url":"https://github.com/highfidelity","followers_url":"https://api.github.com/users/highfidelity/followers","following_url":"https://api.github.com/users/highfidelity/following{/other_user}","gists_url":"https://api.github.com/users/highfidelity/gists{/gist_id}","starred_url":"https://api.github.com/users/highfidelity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/highfidelity/subscriptions","organizations_url":"https://api.github.com/users/highfidelity/orgs","repos_url":"https://api.github.com/users/highfidelity/repos","events_url":"https://api.github.com/users/highfidelity/events{/privacy}","received_events_url":"https://api.github.com/users/highfidelity/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/highfidelity/hifi","description":"Open, decentralized virtual worlds using sensors to control avatars and dynamically assigned devices as servers.  San Francisco based startup, we are hiring: http://highfidelity.io/jobs  Documentation at http://docs.highfidelity.io  Contribute by reporting bugs & doing jobs on http://worklist.net","fork":false,"url":"https://api.github.com/repos/highfidelity/hifi","forks_url":"https://api.github.com/repos/highfidelity/hifi/forks","keys_url":"https://api.github.com/repos/highfidelity/hifi/keys{/key_id}","collaborators_url":"https://api.github.com/repos/highfidelity/hifi/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/highfidelity/hifi/teams","hooks_url":"https://api.github.com/repos/highfidelity/hifi/hooks","issue_events_url":"https://api.github.com/repos/highfidelity/hifi/issues/events{/number}","events_url":"https://api.github.com/repos/highfidelity/hifi/events","assignees_url":"https://api.github.com/repos/highfidelity/hifi/assignees{/user}","branches_url":"https://api.github.com/repos/highfidelity/hifi/branches{/branch}","tags_url":"https://api.github.com/repos/highfidelity/hifi/tags","blobs_url":"https://api.github.com/repos/highfidelity/hifi/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/highfidelity/hifi/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/highfidelity/hifi/git/refs{/sha}","trees_url":"https://api.github.com/repos/highfidelity/hifi/git/trees{/sha}","statuses_url":"https://api.github.com/repos/highfidelity/hifi/statuses/{sha}","languages_url":"https://api.github.com/repos/highfidelity/hifi/languages","stargazers_url":"https://api.github.com/repos/highfidelity/hifi/stargazers","contributors_url":"https://api.github.com/repos/highfidelity/hifi/contributors","subscribers_url":"https://api.github.com/repos/highfidelity/hifi/subscribers","subscription_url":"https://api.github.com/repos/highfidelity/hifi/subscription","commits_url":"https://api.github.com/repos/highfidelity/hifi/commits{/sha}","git_commits_url":"https://api.github.com/repos/highfidelity/hifi/git/commits{/sha}","comments_url":"https://api.github.com/repos/highfidelity/hifi/comments{/number}","issue_comment_url":"https://api.github.com/repos/highfidelity/hifi/issues/comments/{number}","contents_url":"https://api.github.com/repos/highfidelity/hifi/contents/{+path}","compare_url":"https://api.github.com/repos/highfidelity/hifi/compare/{base}...{head}","merges_url":"https://api.github.com/repos/highfidelity/hifi/merges","archive_url":"https://api.github.com/repos/highfidelity/hifi/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/highfidelity/hifi/downloads","issues_url":"https://api.github.com/repos/highfidelity/hifi/issues{/number}","pulls_url":"https://api.github.com/repos/highfidelity/hifi/pulls{/number}","milestones_url":"https://api.github.com/repos/highfidelity/hifi/milestones{/number}","notifications_url":"https://api.github.com/repos/highfidelity/hifi/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/highfidelity/hifi/labels{/name}","releases_url":"https://api.github.com/repos/highfidelity/hifi/releases{/id}","created_at":"2012-08-10T18:26:22Z","updated_at":"2014-12-05T23:27:04Z","pushed_at":"2014-12-05T23:27:03Z","git_url":"git://github.com/highfidelity/hifi.git","ssh_url":"git@github.com:highfidelity/hifi.git","clone_url":"https://github.com/highfidelity/hifi.git","svn_url":"https://github.com/highfidelity/hifi","homepage":"","size":172174,"stargazers_count":217,"watchers_count":217,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":127,"mirror_url":null,"open_issues_count":48,"forks":127,"open_issues":48,"watchers":217,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/highfidelity/hifi/pulls/3914"},"html":{"href":"https://github.com/highfidelity/hifi/pull/3914"},"issue":{"href":"https://api.github.com/repos/highfidelity/hifi/issues/3914"},"comments":{"href":"https://api.github.com/repos/highfidelity/hifi/issues/3914/comments"},"review_comments":{"href":"https://api.github.com/repos/highfidelity/hifi/pulls/3914/comments"},"review_comment":{"href":"https://api.github.com/repos/highfidelity/hifi/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/highfidelity/hifi/pulls/3914/commits"},"statuses":{"href":"https://api.github.com/repos/highfidelity/hifi/statuses/ccdb13c951129351336296f578d7c7d3f2b937d7"}}}}